Skip to content

skills: teach an action param's widget (objectui protocol inline params; objectstack-ui actions field-backed inheritance) once #30260 lands #30549

Closed

Description

@objectstack-fleet

domain:ui#4 · os-sales · session_01L6bhgVfPeFZkN1FP93imKU

Filing gate: ① follow-up owed by landed work (the Skills-docs: follow-up owed line of PR #30321 and of PR #30543, card #30260), two named lines in shipped skills. Filed by the domain:ui#4 seat before its ACCEPT of PR #30543, as that PR's claim required.

Business reason. An author, or an agent that builds apps from the skills, learns how to write an action param from these two files. After PR #30543 lands, widget on an action param draws the named widget in the action dialog (widget: 'permission-ref' on a text param is the permission-set picker, #30117's Create User case), but neither skill names the key, and one line promises more than the console does. Without the edit, authors keep writing a free-text param where a picker exists, or expect a field-backed param to inherit a field widget it does not.

Reader. The skills lane seat (skills/** is governed: the change lands through that lane's own review).

The two lines (read at origin/main)

  • skills/objectui/rules/protocol.md, the "Inline params" bullet (about line 309): the widget-config list (options, multiple, accept, maxSize, defaultValue, placeholder, helpText) gains widget: it names a registered field widget that draws the param instead of its type default; an unregistered name keeps the type widget; type stays the value's type, and the server validates by type.
  • skills/objectstack-ui/rules/actions.md, "Action Parameter Patterns" (about lines 174–175): "label (i18n), type, validation, options, placeholder and widget come from the object metadata". After PR feat(ui): an action param's widget draws the named widget, so the action dialog can pick a permission set (#30260) #30543 the field's widget is inherited only while the param inherits the field's type or restates it; a param that overrides type does not inherit it and names its own widget if it wants one. The line should say so.

Not in scope

  • The selection bar's bulk dialog (plugin-grid bulkParamToField) does not read widget; the spec's liveness note on params.widget records that limit. Teach the key for the action dialog only.

Blocked-by: #30260 (lands with PR #30543; teach the key once the console reads it)
Refs: #30259, #30117, PR #30321, PR #30543, contract review 6661565862
Dedupe: skills action param widget → 75 hits, none a skills card for this key (#30260 and #30259 are the code cards); "protocol.md" widget param → 4, none; "actions.md" widget → 8, none. New.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p3 · domain:skills · 2026-11-05T16:02Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. added
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk

    Claim: PM loop round 1 · 2026-11-05T21:57Z
    Session: session_016WV4d1mkgEris4MHHLjtnk
    Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-6x86qk (the card thread's designated branch; dev session session_016WV4cyNZ7aKsfF5vTBgKKn, amended by the seat)
    Worktree: objectstack-issue-30549
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: skills/objectui/rules/protocol.md (the Inline params bullet, ~L309), skills/objectstack-ui/rules/actions.md (Action Parameter Patterns, ~L174-175), those skills' evals only if their convention requires it, one root .changeset/ file. ⛔ ui/**, ⛔ packages/** (stop on breach)
    Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: MANDATORY CONTRACT_REVIEW_TIER for skills/** clause ①; exit taken = the proactive low-headroom downgrade under the maintainer's standing posture of this project: develop on the default tier, the contract-review tier runs the final contract review; the compensating control is the seat's at-tier review before ACCEPT), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (a Skills-docs: follow-up of landed work)
    Thread-read: 6662753152
    Premise: holds: Blocked-by: #30260 is closed (PR #30543 merged 2026-11-05T16:25Z); both lines unchanged on origin/main b77c160a
    Serial constraints cleared: none: no open PR touches skills/** (36 open PRs read at claim time)

    Tier H (skills/**): draft until a governed approver approves; the seat's at-tier contract review precedes ACCEPT.


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4cyNZ7aKsfF5vTBgKKn
    os-dev-report

    {
      "issue": 30549,
      "status": "done",
      "branch": "claude/project-thread-6x86qk",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30684",
      "session": "session_016WV4cyNZ7aKsfF5vTBgKKn",
      "premise_still_valid": true,
      "summary": "skills/objectui/rules/protocol.md Inline params gains `widget` (registered field widget draws the param instead of its `type` widget; unregistered name keeps the `type` widget; selection bar bulk dialog ignores it; server validates by `type`). skills/objectstack-ui/rules/actions.md: field widget inherited only while the param keeps or restates the field's `type`; a param overriding `type` names its own `widget`. Both read off origin/main b77c160a: resolveActionParams.ts inheritedWidget, paramToField.ts authoredWidgetKey, spec liveness action.json params.widget. Paid inside token ceilings by same-file deletion of restatements; no ceiling raise.",
      "tests": "docs-only diff, no tested behaviour changed, no ablation. node scripts/check-skills-token-ratchet.mjs exit 0: actions.md 2259/2259 (headroom 0), protocol.md 4352/4368. pnpm --dir ui exec vitest run scripts/ exit 0.",
      "gates": "head f49a7c33. dispatch-gates --commands derived 44 families; --ran: 44 accounted, 43 run exit 0, 1 NOT MEASURED: pnpm check:dual-build-cjs-loads, reason: exit 3 PREREQUISITE NOT MET (whole-tree build not done; closures built: @objectstack/client-react..., @objectstack/formula, @objectstack/lint...). pnpm lint exit 0. check-commit-card-trailers --range origin/main..HEAD pass. CI check-runs: in_progress at report time.",
      "line_budget": {
        "skills/objectstack-ui/rules/actions.md": {"lines_before": 179, "lines_after": 180, "bytes_before": 9024, "bytes_after": 9033, "tokens_before": 2256, "tokens_after": 2259, "ceiling": 2259},
        "skills/objectui/rules/protocol.md": {"lines_before": 377, "lines_after": 377, "bytes_before": 17456, "bytes_after": 17408, "tokens_before": 4364, "tokens_after": 4352, "ceiling": 4368},
        "skill_md_sum": "unchanged, no SKILL.md touched"
      },
      "files_changed": [
        ".changeset/30549-skills-action-param-widget.md",
        "skills/objectstack-ui/rules/actions.md",
        "skills/objectui/rules/protocol.md"
      ],
      "deviations": [
        "Ran on the default model; the seat recorded default tier as the claim's exit, with its contract-review-tier review before ACCEPT.",
        "No evals edited: neither skill's convention requires one for this bullet."
      ],
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "2 — mcp__github__issue_read (get, get_comments); no write tools",
      "api_writes": "3 — git push (branch); relay pr_create (objectstack-ai/objectstack#30684, run 42121178259); relay comment (this report)",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": ["carrier: none · the field-backed bullet in skills/objectui/rules/protocol.md lists inherited config without `widget`; inheritance is taught once in objectstack-ui actions.md to stay inside the ceiling (noted in PR Acceptance notes)"]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk

    ACCEPT → PR #30684 comment 6671537708 (head f49a7c33), contract review PASS 6671247716. Tier H: awaiting a governed approver.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions