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
ui skill, CLI view scaffold and examples: a business object's grid view declares userActions.editInline: true, so AI-built and scaffolded tables keep cell editing under the spec default (objectui#5144) #22604
Filing gate: a declared spec default that the authoring path does not teach. Filed by the director seat (summon #35, seat post #12708, session_01VYToj6PQehTEKNrjGM9akg) on the maintainer's instruction in that session, verbatim: 「只需要处理已经交代的 userActions.editInline: true」. ⛔ Not a claim, ⛔ not a dispatch; triage grades and routes it.
The gap
ListView.userActions.editInline is declared .default(false) ("the list is read-only unless the author opts in", packages/spec/src/ui/view.zod.ts:1535). Since fix(plugin-list): read userActions.editInline with the spec default, folding a stored inlineEdit into it (objectui#5144) objectui#12036 (objectui#5144, merged 2026-10-09) the console enforces it: a grid view that declares neither userActions.editInline nor inlineEdit offers no inline-edit toggle. The permission gate (object editable in place, principal can update) still applies on top.
Nothing on the authoring path says so, measured on main86f53a4b8d:
skills/objectstack-ui/rules/list-views.md has no rule for the key; its only userActions example is { search: false } (:228). skills/objectstack-ui/SKILL.md speaks of inlineEdit only for the master-detail field, a different key.
packages/cli/src/commands/generate.ts:372 scaffolds a grid view with columns, sort and pagination and no userActions.
Of 18 example files declaring grid or list views (examples/app-crm, app-todo, app-showcase), at most 2 touch an inline-edit key.
The reference pages (content/docs/references/ui/view.mdx:1084) document the default and nothing more.
Consequence: a table built by an AI agent from the skill, scaffolded by the CLI, or copied from the examples is read-only in its cells after the upgrade. Users can still open the record form. HotCRM measured 41 such views with 0 declarations (filed on objectstack-ai/hotcrm in the same act).
What to do
Skill rule (skills/objectstack-ui/rules/list-views.md, under "Configuring a List View"): a grid or list view of a business object declares userActions: { editInline: true }; a view whose records are read-only by nature (log, audit, history, report roll-up) leaves it out with a one-line comment giving the reason. The checked example block gains the key; skills/objectstack-ui/evals/views-apps-actions-pages.json gains a row that catches a generated grid view without it. The rule names the permission gate so the author does not expect the key to open editing past update.
CLI scaffold (packages/cli/src/commands/generate.ts, the view template): emit userActions: { editInline: true }, in the generated list block, with the one-line comment the skill rule uses; its test pins the line.
Examples: the grid and list views of examples/app-crm, examples/app-todo and examples/app-showcase declare the key, or carry the recorded reason, so the showcase demonstrates the written form. Measured count is 18 files.
Reference page: one sentence under the editInline row in content/docs/references/ui/view.mdx pointing at the rule, through the generator, not by hand.
Boundaries
⛔ No new lint gate or objectstack validate refusal for a view without the key: the key is the author's choice per view, and the decision framework reads "a new gate defaults to no". The eval row and the scaffold are the teaching path.
⛔ No change to the spec default or to objectui's reading: the maintainer kept the opt-in rule in this act. A different default would be a spec card of its own.
skills/** is a Tier H path: the PR takes the maintainer's APPROVED review.
Acceptance
os generate view for an object emits the key; the skill eval reddens on a grid view without it; every example grid or list view declares it or carries the reason; check:generated is current.
Closed as superseded, by the director seat that filed it (summon #35, session_01VYToj6PQehTEKNrjGM9akg), 2026-10-10T04:07Z.
This card was filed under the premise that the spec default stays editInline: false and every business grid view declares userActions.editInline: true. Minutes later the maintainer ruled the other way in the same session, verbatim 「乙 v18 把 spec 默认翻成 true,editInline: false 变成关法。」: the spec default flips to true in v18 and editInline: false becomes the opt-out. That ruling is #22605, which also carries the one paragraph the UI skill owes (inline editing on by default under the permission gate; a read-only-by-nature list declares editInline: false). With the default on, the CLI scaffold emits nothing for the key and the examples need no declaration, so nothing of this card remains. ⛔ Not reopened on the same premise; a new need for the skill text goes on #22605.
Filing gate: a declared spec default that the authoring path does not teach. Filed by the director seat (summon #35, seat post #12708,
session_01VYToj6PQehTEKNrjGM9akg) on the maintainer's instruction in that session, verbatim: 「只需要处理已经交代的 userActions.editInline: true」. ⛔ Not a claim, ⛔ not a dispatch; triage grades and routes it.The gap
ListView.userActions.editInlineis declared.default(false)("the list is read-only unless the author opts in",packages/spec/src/ui/view.zod.ts:1535). Since fix(plugin-list): read userActions.editInline with the spec default, folding a stored inlineEdit into it (objectui#5144) objectui#12036 (objectui#5144, merged 2026-10-09) the console enforces it: a grid view that declares neitheruserActions.editInlinenorinlineEditoffers no inline-edit toggle. The permission gate (object editable in place, principal canupdate) still applies on top.main86f53a4b8d:skills/objectstack-ui/rules/list-views.mdhas no rule for the key; its onlyuserActionsexample is{ search: false }(:228).skills/objectstack-ui/SKILL.mdspeaks ofinlineEditonly for the master-detail field, a different key.packages/cli/src/commands/generate.ts:372scaffolds a grid view with columns, sort and pagination and nouserActions.examples/app-crm,app-todo,app-showcase), at most 2 touch an inline-edit key.content/docs/references/ui/view.mdx:1084) document the default and nothing more.What to do
skills/objectstack-ui/rules/list-views.md, under "Configuring a List View"): a grid or list view of a business object declaresuserActions: { editInline: true }; a view whose records are read-only by nature (log, audit, history, report roll-up) leaves it out with a one-line comment giving the reason. The checked example block gains the key;skills/objectstack-ui/evals/views-apps-actions-pages.jsongains a row that catches a generated grid view without it. The rule names the permission gate so the author does not expect the key to open editing pastupdate.packages/cli/src/commands/generate.ts, theviewtemplate): emituserActions: { editInline: true },in the generatedlistblock, with the one-line comment the skill rule uses; its test pins the line.examples/app-crm,examples/app-todoandexamples/app-showcasedeclare the key, or carry the recorded reason, so the showcase demonstrates the written form. Measured count is 18 files.editInlinerow incontent/docs/references/ui/view.mdxpointing at the rule, through the generator, not by hand.Boundaries
objectstack validaterefusal for a view without the key: the key is the author's choice per view, and the decision framework reads "a new gate defaults to no". The eval row and the scaffold are the teaching path.skills/**is a Tier H path: the PR takes the maintainer's APPROVED review.Acceptance
os generate viewfor an object emits the key; the skill eval reddens on a grid view without it; every example grid or list view declares it or carries the reason;check:generatedis current.Related
userActions.editInlinehas two different defaults across surfaces, and neither is the spec's.default(false)objectui#5144, fix(plugin-list): read userActions.editInline with the spec default, folding a stored inlineEdit into it (objectui#5144) objectui#12036; the hotcrm counterpart card filed in the same act.Filed by the director seat; generated by Claude Code