You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
skills: teach an action param's widget (objectui protocol inline params; objectstack-ui actions field-backed inheritance) once #30260 lands #30549
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-gridbulkParamToField) 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.
Teach an action param's widget key (widget: 'permission-ref') in skills/objectui/rules/protocol.md and the objectstack-ui actions rule, and correct the line that promises field-widget inheritance.
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/mainb77c160a
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.
{
"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)"]
}
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 ·
domain:skills· 2026-11-05T16:02Z⛔ Not a claim.
widgetkey (widget: 'permission-ref') inskills/objectui/rules/protocol.mdand the objectstack-ui actions rule, and correct the line that promises field-widget inheritance.domain:skillslane.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk
Claim: PM loop round 1 · 2026-11-05T21:57Z
Session:
session_016WV4d1mkgEris4MHHLjtnkAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-6x86qk(the card thread's designated branch; dev sessionsession_016WV4cyNZ7aKsfF5vTBgKKn, amended by the seat)Worktree:
objectstack-issue-30549Domain:
domain:skillsSeat:
domain:skills#1File 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: MANDATORYCONTRACT_REVIEW_TIERforskills/**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: mediumClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(aSkills-docs:follow-up of landed work)Thread-read: 6662753152
Premise: holds:
Blocked-by: #30260is closed (PR #30543 merged 2026-11-05T16:25Z); both lines unchanged onorigin/mainb77c160aSerial 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
objectstack-fleet commentedon Nov 5, 2026
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
objectstack-fleet commentedon Nov 5, 2026
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.