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
Interface list page: four userActions toggles still read === true while the shared UserActionsConfigSchema publishes them on by default (hideFields, filter, rowHeight, group) #29144
Filing gate: ① a should-fix from the contract review of PR #29083 (#28912), record 6572308637. It is outside that card's surface (the list view). ⛔ Not a claim. No grade: triage sets it.
Reach: authors of interface pages (interfaceConfig.userActions, the same UserActionsConfigSchema as a list view, page.zod.ts ≈L1076). The published contract says these toggles are on by default. The page draws them only for an explicit true.
ui/packages/app-shell/src/views/InterfaceListPage.tsx ≈L589 reads userActions.hideFields === true off cfg.userActions || {}, and does the same for filter, rowHeight and group. The spec defaults for all four are true.
The result splits on whether the document was parsed. For a parsed block that omits the key, the materialised true satisfies === true and the control is drawn. For an absent block, or an unparsed stored page, it stays closed.
Wanted (pick one, triage or the ui seat)
A: InterfaceListPage reads the spec defaults for the four toggles (!== false), so one contract holds on both surfaces. Or:
B: the spec gives the interface page its own documented defaults (closed), with a schema of its own or a documented override, and says so in the describe.
Also, on next touch: the semantic entry 18.list-view-hide-fields-default-on's sentence "An interface page keeps its own closed-by-default toolbar and still draws the control only for an explicit true" overstates the page's closedness for a parsed block. Qualify it in line with A or B.
Read fresh. The ui follow-up named by PR feat(spec): list views offer Hide Fields by default — userActions.hideFields defaults to true #29083's contract review (should-fix 1). The Interface list page reads four userActions toggles as === true, while the shared schema now defaults hideFields to on, so the page contradicts the published default. A named location with nothing to ask: domain:ui, p2. finding dropped (one state).
⛔ Not a claim. The director seat takes the A/B question (ui seat 5's ask) to the maintainer in batch #455. The card thread opens no PR until the ruling lands here as a Ruling: comment.
Claim: PM loop round 1 · 2026-11-02T09:48Z
Session: session_01QsR2jUidUZdX3neiGCfRHE (card thread, os-dev); dispatched by seat session session_01QsR2jQjvWkZ7is6GXbC6DB
Account: zhuangjianguo
Branch: claude/project-thread-njcm0s (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-29144
Domain: domain:ui
Seat: domain:ui#5
File surface: ui/packages/app-shell/src/views/InterfaceListPage.tsx and its tests; packages/spec/scripts/lib/default-changes.ts (the semantic-entry sentence at :733) plus what its regen writes; a changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate; no Fable per the maintainer's standing rule), effort: high
Clause-②: no
Metadata-protocol: semantic
Responsibility: InterfaceListPage.tsx:583-591 reads hideFields/filter/rowHeight/group as === true while the shared UserActionsConfigSchema publishes them true by default | no platform path covers it: a parsed block opens, an absent or unparsed block stays closed | every interface-page author using interfaceConfig.userActions; filed from PR #29083's contract review (6572308637)
Thread-read: 6572671193
Premise: holds (at origin/main104cd1a5: InterfaceListPage.tsx:435cfg.userActions || {}, :586-589 the four toggles === true). Triage 6572671193 graded p2. Fix shape A (honour the spec defaults) is the seat's recommendation; the A/B ruling is with the director seat, and the PR opens only after it.
Serial constraints cleared: no open PR touches InterfaceListPage.tsx or default-changes.ts at writing (63 open PRs read); no in-flight claim of seats 1–4 names them.
Ruling: batch #455 item 1 · letter A (with an ADR-0047 amendment) · maintainer 「455 同意」 2026-11-02T10:05Z
What the ruling binds
InterfaceListPage reads the shared UserActionsConfigSchema defaults for the four toggles whose spec default is true: filter, rowHeight, group, hideFields read !== false. search and sort already do. rowColor (spec default false) stays === true. An absent userActions block, an unparsed stored page and a parsed block that omits the key behave the same: the control is drawn; an author withholds one with an explicit false.
The interface page gets no second default table (option B refused): one key, one default, on both surfaces.
ADR-0047 is amended, not silently contradicted (AGENTS.md Prime Directive 13): the PR adds a dated amendment banner (2026-11-02) to docs/adr/0047-object-ui-run-modes.md citing this comment id, stating that the toolbar userActions toggles share the view schema's defaults and are withheld per key with false, and that §3.4's four rows (quick filters, visualization lock, user-created views, filter state) stay closed in interface mode. TL;DR Add metamodel interfaces for ObjectQL/ObjectUI contract #1/[WIP] Fix error in step four of the action run #5 are qualified by that banner, not rewritten.
The semantic entry 18.list-view-hide-fields-default-on (default-changes.ts ≈L733) drops "an interface page keeps its own closed-by-default toolbar" for a sentence that says the page reads the same default; regenerated in the spec regen order.
Workload of the letter
S on domain:ui, raised to Tier H by the ADR path: the four reads and their comment, tests (no block → four controls; explicit false withholds each; list view unchanged; rowColor still needs true; one ablation red), the entry sentence + regen, the ADR banner, a changeset with Clause-②: no / Metadata-protocol: semantic that names the four controls and the false opt-out, and the reach reading (showcase and hotcrm) in the PR body. Landing: seat ACCEPT + 维护者速读, then the maintainer's own approval and merge. No spec contract review (spec untouched).
Execution
ui seat 5's card thread opens the held PR now.
The label stroke (needs-user-decision → pm:queue) is the lane seat's.
Claim amended · 2026-11-02T10:06Z · on the maintainer's ruling 6574404727 (batch #455, letter A with an ADR-0047 amendment). This amends claim 6574058176: premise and file surface. Branch, session, size, Clause-② and Metadata-protocol are unchanged.
Clause-②: no
Metadata-protocol: semantic
Premise: ruled A. The PR is unblocked.
File surface, widened: also docs/adr/0047-object-ui-run-modes.md (a dated 2026-11-02 amendment banner citing 6574404727), packages/spec/src/migrations/entries/semantic/18.list-view-hide-fields-default-on.ts (the hand-written sentence), and .changeset/28912-hide-fields-default-on.md (a one-bullet correction of its now-false interface-page sentence). These sit beside InterfaceListPage.tsx, default-changes.ts and their tests.
Tier: the docs/adr/** touch makes the PR Tier H. Landing is seat ACCEPT plus the 维护者速读 section, then the maintainer's approval and merge.
Report written 2026-11-02T11:21Z on PR #29299, head 899749f6.
{
"issue": 29144,
"status": "done",
"branch": "claude/project-thread-njcm0s",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29299",
"session": "session_01QsR2jUidUZdX3neiGCfRHE",
"premise_still_valid": true,
"summary": "Ruling 6574404727 (letter A with an ADR-0047 amendment) implemented. InterfaceListPage reads filter, rowHeight, group and hideFields as !== false (rowColor stays === true), so an absent block, an unparsed stored page and a parsed block that omits a key draw the same toolbar. ADR-0047 carries a dated 2026-11-02 amendment banner and status note citing 6574404727; docs/adr/README.md regenerated by adr:index. The closed-by-default sentence is corrected in default-changes.ts, semantic entry 18.list-view-hide-fields-default-on and the pending .changeset/28912-hide-fields-default-on.md (one bullet). Reach: 11 showcase interface pages and HotCRM account_workbench declare a userActions block omitting group/hideFields; a strict defineStack/PageSchema parse already materialises both true, so they see no change; pages with no block or unparsed stored rows gain Filter, Row height, Group and Hide Fields.",
"tests": "head 05795338: 11 InterfaceListPage test files + plugin-list ListView.test.tsx, Test Files 12 passed, Tests 249 passed; new InterfaceListPage.userActionsSpecDefaults.test.tsx 17/17; app-shell type-check 65/65 tasks; spec check:generated 14 artifacts up to date; pnpm --dir ui exec vitest run scripts/ 169 files passed, 2 skipped, 4900 tests. Ablation via scripts/ablation-replace.mjs (hideFields back to === true, anchor 1 to 0, replacement 0 to 1): 8 failed, 9 passed of 17; restored blob == HEAD, git diff HEAD empty. Source-resolved (app-shell test imports ./InterfaceListPage), no dist build leg.",
"gates": "dispatch-gates --commands at 05795338: 91 families; 90 exit 0; node scripts/check-empty-changeset.mjs --base origin/main exit 1, the DELIBERATE CORRECTION class (this PR edits the pending 28912 changeset; restoring it would republish a false sentence), named in the PR body Acceptance notes for the maintainer's confirmation. --ran: 91 derived, 91 run, 0 NOT-MEASURED, 0 UNRUN. Head 899749f6 changes only the changeset grade (spec patch to minor, required by the level axis for semantic); rerun on it: check-changeset-no-major 0, changeset-gate-self-tests 0, adr-0087-registration 0, pm-changeset-deadline-census 0, doc-authoring 0, issue-citations 0, nul-bytes 0, empty-changeset 1. PR body gates: changeset-no-major 0, closing-keyword-parity 0, partof-closing-keyword 0. CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "5 — github issue_read x4 (get x1, get_comments x3), claude-code-remote get_session x1; no MCP write",
"api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#29299, read back byte-identical); this post-stamped comment on #29144. git push x5 (not REST).",
"open_questions": [],
"out_of_scope_findings": [],
"deviations": [
"file surface widened beyond the first claim: semantic entry 18, .changeset/28912-hide-fields-default-on.md (one bullet) and docs/adr/0047 + docs/adr/README.md; asked the seat before editing, covered by claim amendment 6574419950",
"check-empty-changeset red by design (deliberate correction of a pending release note), not routed around",
"changeset grades @objectstack/spec minor (not patch): @object-ui/app-shell is private and does not count as a moved package for the level axis"
],
"files_changed": [
".changeset/28912-hide-fields-default-on.md",
".changeset/29144-interface-toolbar-spec-defaults.md",
"docs/adr/0047-object-ui-run-modes.md",
"docs/adr/README.md",
"packages/spec/scripts/lib/default-changes.ts",
"packages/spec/src/migrations/entries/semantic/18.list-view-hide-fields-default-on.ts",
"ui/packages/app-shell/src/views/InterfaceListPage.relayCensus-11572.test.ts",
"ui/packages/app-shell/src/views/InterfaceListPage.tsx",
"ui/packages/app-shell/src/views/InterfaceListPage.userActionsSpecDefaults.test.tsx"
],
"line_budget": "275 changed lines (+255 / -20), 9 files; size S; under the 3000 human-merge threshold; Tier H by docs/adr/**"
}
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p2 ·
domain:ui·pm:queue(fromfinding) · 2026-11-02T08:33Z⛔ Not a claim.
userActionstoggles as=== true, while the shared schema now defaultshideFieldsto on, so the page contradicts the published default. A named location with nothing to ask:domain:ui, p2.findingdropped (one state).Generated by Claude Code
zhuangjianguo commentedon Nov 2, 2026
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw
Brief-claimed-by: session_01QsR2jV5sBSzCYNEDgpYLJw · batch #455 · 2026-11-02T09:50Z
⛔ Not a claim. The director seat takes the A/B question (ui seat 5's ask) to the maintainer in batch #455. The card thread opens no PR until the ruling lands here as a
Ruling:comment.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Claim: PM loop round 1 · 2026-11-02T09:48Z
Session:
session_01QsR2jUidUZdX3neiGCfRHE(card thread, os-dev); dispatched by seat sessionsession_01QsR2jQjvWkZ7is6GXbC6DBAccount:
zhuangjianguoBranch:
claude/project-thread-njcm0s(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29144Domain:
domain:uiSeat:
domain:ui#5File surface:
ui/packages/app-shell/src/views/InterfaceListPage.tsxand its tests;packages/spec/scripts/lib/default-changes.ts(the semantic-entry sentence at :733) plus what its regen writes; a changeset (stop on breach; explain in the report)Container & model: S,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate; no Fable per the maintainer's standing rule),effort: highClause-②: no
Metadata-protocol: semantic
Responsibility:
InterfaceListPage.tsx:583-591 reads hideFields/filter/rowHeight/group as === true while the shared UserActionsConfigSchema publishes them true by default | no platform path covers it: a parsed block opens, an absent or unparsed block stays closed | every interface-page author using interfaceConfig.userActions; filed from PR #29083's contract review (6572308637)Thread-read: 6572671193
Premise: holds (at
origin/main104cd1a5:InterfaceListPage.tsx:435cfg.userActions || {},:586-589the four toggles=== true). Triage 6572671193 graded p2. Fix shape A (honour the spec defaults) is the seat's recommendation; the A/B ruling is with the director seat, and the PR opens only after it.Serial constraints cleared: no open PR touches
InterfaceListPage.tsxordefault-changes.tsat writing (63 open PRs read); no in-flight claim of seats 1–4 names them.zhuangjianguo commentedon Nov 2, 2026
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw
Ruling: batch #455 item 1 · letter A (with an ADR-0047 amendment) · maintainer 「455 同意」 2026-11-02T10:05Z
What the ruling binds
InterfaceListPagereads the sharedUserActionsConfigSchemadefaults for the four toggles whose spec default istrue:filter,rowHeight,group,hideFieldsread!== false.searchandsortalready do.rowColor(spec defaultfalse) stays=== true. An absentuserActionsblock, an unparsed stored page and a parsed block that omits the key behave the same: the control is drawn; an author withholds one with an explicitfalse.docs/adr/0047-object-ui-run-modes.mdciting this comment id, stating that the toolbaruserActionstoggles share the view schema's defaults and are withheld per key withfalse, and that §3.4's four rows (quick filters, visualization lock, user-created views, filter state) stay closed in interface mode. TL;DR Add metamodel interfaces for ObjectQL/ObjectUI contract #1/[WIP] Fix error in step four of the action run #5 are qualified by that banner, not rewritten.18.list-view-hide-fields-default-on(default-changes.ts≈L733) drops "an interface page keeps its own closed-by-default toolbar" for a sentence that says the page reads the same default; regenerated in the spec regen order.Workload of the letter
S on
domain:ui, raised to Tier H by the ADR path: the four reads and their comment, tests (no block → four controls; explicitfalsewithholds each; list view unchanged;rowColorstill needstrue; one ablation red), the entry sentence + regen, the ADR banner, a changeset withClause-②: no/Metadata-protocol: semanticthat names the four controls and thefalseopt-out, and the reach reading (showcase and hotcrm) in the PR body. Landing: seat ACCEPT + 维护者速读, then the maintainer's own approval and merge. No spec contract review (spec untouched).Execution
needs-user-decision→pm:queue) is the lane seat's.Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB
Claim amended · 2026-11-02T10:06Z · on the maintainer's ruling 6574404727 (batch #455, letter A with an ADR-0047 amendment). This amends claim 6574058176: premise and file surface. Branch, session, size, Clause-② and Metadata-protocol are unchanged.
Clause-②: no
Metadata-protocol: semantic
docs/adr/0047-object-ui-run-modes.md(a dated 2026-11-02 amendment banner citing 6574404727),packages/spec/src/migrations/entries/semantic/18.list-view-hide-fields-default-on.ts(the hand-written sentence), and.changeset/28912-hide-fields-default-on.md(a one-bullet correction of its now-false interface-page sentence). These sit besideInterfaceListPage.tsx,default-changes.tsand their tests.docs/adr/**touch makes the PR Tier H. Landing is seat ACCEPT plus the 维护者速读 section, then the maintainer's approval and merge.objectstack-fleet commentedon Nov 2, 2026
domain:ui#5 · zhuangjianguo · session_01QsR2jUidUZdX3neiGCfRHE
os-dev-report
Report written 2026-11-02T11:21Z on PR #29299, head
899749f6.{ "issue": 29144, "status": "done", "branch": "claude/project-thread-njcm0s", "pr": "https://github.com/objectstack-ai/objectstack/pull/29299", "session": "session_01QsR2jUidUZdX3neiGCfRHE", "premise_still_valid": true, "summary": "Ruling 6574404727 (letter A with an ADR-0047 amendment) implemented. InterfaceListPage reads filter, rowHeight, group and hideFields as !== false (rowColor stays === true), so an absent block, an unparsed stored page and a parsed block that omits a key draw the same toolbar. ADR-0047 carries a dated 2026-11-02 amendment banner and status note citing 6574404727; docs/adr/README.md regenerated by adr:index. The closed-by-default sentence is corrected in default-changes.ts, semantic entry 18.list-view-hide-fields-default-on and the pending .changeset/28912-hide-fields-default-on.md (one bullet). Reach: 11 showcase interface pages and HotCRM account_workbench declare a userActions block omitting group/hideFields; a strict defineStack/PageSchema parse already materialises both true, so they see no change; pages with no block or unparsed stored rows gain Filter, Row height, Group and Hide Fields.", "tests": "head 05795338: 11 InterfaceListPage test files + plugin-list ListView.test.tsx, Test Files 12 passed, Tests 249 passed; new InterfaceListPage.userActionsSpecDefaults.test.tsx 17/17; app-shell type-check 65/65 tasks; spec check:generated 14 artifacts up to date; pnpm --dir ui exec vitest run scripts/ 169 files passed, 2 skipped, 4900 tests. Ablation via scripts/ablation-replace.mjs (hideFields back to === true, anchor 1 to 0, replacement 0 to 1): 8 failed, 9 passed of 17; restored blob == HEAD, git diff HEAD empty. Source-resolved (app-shell test imports ./InterfaceListPage), no dist build leg.", "gates": "dispatch-gates --commands at 05795338: 91 families; 90 exit 0; node scripts/check-empty-changeset.mjs --base origin/main exit 1, the DELIBERATE CORRECTION class (this PR edits the pending 28912 changeset; restoring it would republish a false sentence), named in the PR body Acceptance notes for the maintainer's confirmation. --ran: 91 derived, 91 run, 0 NOT-MEASURED, 0 UNRUN. Head 899749f6 changes only the changeset grade (spec patch to minor, required by the level axis for semantic); rerun on it: check-changeset-no-major 0, changeset-gate-self-tests 0, adr-0087-registration 0, pm-changeset-deadline-census 0, doc-authoring 0, issue-citations 0, nul-bytes 0, empty-changeset 1. PR body gates: changeset-no-major 0, closing-keyword-parity 0, partof-closing-keyword 0. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "5 — github issue_read x4 (get x1, get_comments x3), claude-code-remote get_session x1; no MCP write", "api_writes": "2 — fleet-write relay pr_create (objectstack-ai/objectstack#29299, read back byte-identical); this post-stamped comment on #29144. git push x5 (not REST).", "open_questions": [], "out_of_scope_findings": [], "deviations": [ "file surface widened beyond the first claim: semantic entry 18, .changeset/28912-hide-fields-default-on.md (one bullet) and docs/adr/0047 + docs/adr/README.md; asked the seat before editing, covered by claim amendment 6574419950", "check-empty-changeset red by design (deliberate correction of a pending release note), not routed around", "changeset grades @objectstack/spec minor (not patch): @object-ui/app-shell is private and does not count as a moved package for the level axis" ], "files_changed": [ ".changeset/28912-hide-fields-default-on.md", ".changeset/29144-interface-toolbar-spec-defaults.md", "docs/adr/0047-object-ui-run-modes.md", "docs/adr/README.md", "packages/spec/scripts/lib/default-changes.ts", "packages/spec/src/migrations/entries/semantic/18.list-view-hide-fields-default-on.ts", "ui/packages/app-shell/src/views/InterfaceListPage.relayCensus-11572.test.ts", "ui/packages/app-shell/src/views/InterfaceListPage.tsx", "ui/packages/app-shell/src/views/InterfaceListPage.userActionsSpecDefaults.test.tsx" ], "line_budget": "275 changed lines (+255 / -20), 9 files; size S; under the 3000 human-merge threshold; Tier H by docs/adr/**" }