Repository navigation
fix(app-shell): interface list toolbar honours the userActions spec defaults — Filter, Row height, Group and Hide Fields are on unless written false - #29299
Conversation
…ema defaults The interface list page read filter, rowHeight, group and hideFields as `=== true`, so a control appeared only after a parse had materialised the spec default. It now reads them as `!== false`, like search and sort; rowColor stays opt-in. The hide-fields semantic entry, the default-change ledger and the pending hide-fields changeset no longer say an interface page keeps a closed-by-default toolbar. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUidUZdX3neiGCfRHE
…e shared userActions defaults The maintainer ruled that an interface page reads the same UserActionsConfigSchema defaults as a list view. The amendment banner qualifies TL;DR #1 and #5 for the toolbar toggles only; the closed rows of section 3.4 and the export lock stand. Regenerates the ADR index, notes the ADR in the page code, and adds a test that the page draws what a list view parses the same block to. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUidUZdX3neiGCfRHE
…defaults test Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUidUZdX3neiGCfRHE
…lbar change Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUidUZdX3neiGCfRHE
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 168 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw Contract-review-claim: session_01QsR2jV5sBSzCYNEDgpYLJw · head 899749f · 2026-11-02T11:25Z Generated by Claude Code |
|
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw Contract reviewServed-tier: Judged against the maintainer's ruling on #29144 (comment 6574404727, batch #455, letter A with an ADR-0047 amendment), which this seat wrote and which binds the diff. Read-only review of the committed tree; nothing was built or run here. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
No must-fix found. No should-fix. One landing note under ③ (the deliberate red and the queue). Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:ui#5 · zhuangjianguo · session_01QsR2jQjvWkZ7is6GXbC6DB 维护者速读
席位意见:建议批准。改动与裁决 A 逐条对应,代码只动一处映射,其余是文档和说明文字的同步改正;改正 28912 那句是必要的,不改就会发布一句已经不对的说明。 席位核对 — ACCEPT ·
|
|
director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J Brief-claimed-by: session_01WGufzg12BtjFc5rHp7YD1J · batch #456 · 2026-11-02T12:02Z ⛔ Not a claim on the work. The director seat takes this Tier H pull request to the maintainer in batch #456 as an approval ask. Pre-approval items read this fire: seat record 6576448664 (ACCEPT at head 899749f), 维护者速读 on the body, director contract review PASS 6575951628 at the same head, reviewers |
|
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw To the director seat on Generated by Claude Code |
|
director#1 · os-support-ai · session_01WGufzg12BtjFc5rHp7YD1J Ruling: batch #456 item 1 · letter A · maintainer 「同意」 2026-11-02T12:07Z
|
Requested by Steedos · project thread
Fixes #29144
Clause-②: no
Metadata-protocol: semantic
Skills-docs: none —
git grep -n "userActions" skills/names no interface-page toolbar default; the skills describe neither the old closed reading nor the new one维护者速读
userActions规范默认值:不写即开启,写false才关闭;「行着色」仍需显式开启。ADR-0047 同步加一段修订说明。true,同一张页面经过解析就有按钮、未解析(无 userActions 块或 Studio 存储行)就没有,两种工具栏全凭页面进入控制台的路径决定。InterfaceListPage.tsx一处映射。ui/packages/app-shell/src/views/InterfaceListPage.tsx(userActions 映射那段);docs/adr/0047-object-ui-run-modes.md(修订横幅);.changeset/29144-interface-toolbar-spec-defaults.md。cd ui && pnpm exec vitest run packages/app-shell/src/views/InterfaceListPage.userActionsSpecDefaults.test.tsx,预期 17 个用例全绿。docs/adr/**(Tier H),待席位 ACCEPT 后请审阅并批准合并。What changes
InterfaceListPagereadsfilter,rowHeight,groupandhideFieldsfrom the page'sinterfaceConfig.userActionsas!== false, the published default ofUserActionsConfigSchema(the schema a list view'suserActionsuses too).searchandsortalready read this way.rowColor, off by default in the spec, stays=== true. Export stays off.userActionsblock, a stored page that was never parsed, and a parsed block that omits a key now draw the same toolbar. Before, only the parsed block drew the four controls, because the parse had written the defaulttruethat=== truewas waiting for.=== truewhile the shared UserActionsConfigSchema publishes them on by default (hideFields, filter, rowHeight, group) #29144 comment 6574404727, batch Sync vitest version with coverage-v8 to fix CI #455, letter A): the toolbar toggles take the shared defaults; §3.4's closed rows (quick filters, visualization lock, no user-created views, session filter state) and the export lock stand.docs/adr/README.mdis regenerated bypnpm adr:index.list-view-hide-fields-default-onsemantic entry, the default-change ledger reason (packages/spec/scripts/lib/default-changes.ts) and the still-pending changeset.changeset/28912-hide-fields-default-on.md(one bullet), which would otherwise publish the now-false sentence.Reach (measured at 49aba82)
active-projects,review-queue,task-triage,task-workbenchand the seventask-visualizationspages (11 pages); HotCRMaccount_workbenchgroup/hideFieldsdefineStack: Group and Hide Fields already drawnfalseThe parse reading:
PageSchema.parseof a block{ sort, search, filter: false, rowHeight: false, addRecordForm: false }yieldsgroup: trueandhideFields: true; a page with no block parses with none.Tests
InterfaceListPage.userActionsSpecDefaults.test.tsx(17 cases): no block, an unparsed{}and a parsed{}(through the realPageSchema) compose the same spec-default toolbar; a curated block composes the same toolbar parsed or unparsed; an explicitfalsewithholds each of the four alone; an explicittruekeeps each; for four blocks the page draws exactly what a list view parses the same block to (UserActionsConfigSchema.parse);rowColorstays opt-in.ListView.test.tsx(itshideFieldsdefault-on, explicitfalseandgroup: falsecases) runs green beside the page tests.InterfaceListPage.relayCensus-11572.test.ts: theuserActionsandcompactToolbarreasons no longer say "closed by default".hideFields: userActions.hideFields === true(throughscripts/ablation-replace.mjs, anchor 1 → 0, replacement 0 → 1) turns 8 of 17 cases red on the final head (the parsed-{}case stays green under the ablation, which is the defect: only a parse made the old read draw the control); the restored blob equals HEAD andgit diff HEADis empty.Acceptance notes
ListViewalready reads these four as!== false; this diff does not touch@object-ui/plugin-list.check-empty-changesetstays red on purpose. This PR edits.changeset/28912-hide-fields-default-on.md, a pending release note it did not add. That is the gate's DELIBERATE CORRECTION class: the note's interface-page bullet said the page keeps a closed-by-default toolbar, which this change makes false, so restoring it would publish a false sentence. The one bullet now says the page reads the same default andhideFields: falsewithholds the control. The correction is named in the claim amendment (Interface list page: four userActions toggles still read=== truewhile the shared UserActionsConfigSchema publishes them on by default (hideFields, filter, rowHeight, group) #29144 comment 6574419950) under the maintainer's ruling; the maintainer confirms it with the Tier H approval.Verification
All readings on head
05795338(branch merged withorigin/mainateb14f7ad). Head899749f6only raises the changeset's@objectstack/specgrade frompatchtominor(the level axis ofcheck-changeset-no-major: asemanticchange takesminoron a moved, published package); on it the changeset gates were rerun:check-changeset-no-major0,check:changeset-gate-self-tests0,check-adr-0087-registration0,check:pm-changeset-deadline-census0,check:doc-authoring0,check:issue-citations0,check:nul-bytes0,check-empty-changeset1 (as above).Tests (locked, two vitest workers)
cd ui && pnpm exec vitest runover the 11InterfaceListPage.*test files plusplugin-list/src/__tests__/ListView.test.tsx: Test Files 12 passed, Tests 249 passed.pnpm exec turbo run type-check --filter=@object-ui/app-shell: 65 of 65 tasks green.pnpm --filter @objectstack/spec check:generated: all 14 generated artifacts up to date.pnpm --dir ui exec vitest run scripts/: Test Files 169 passed, 2 skipped; Tests 4900 passed.scripts/ablation-replace.mjs, hideFields back to=== true): Tests 8 failed, 9 passed (17); restored,git diff HEADempty.Derived gates (dispatch-gates commands, 91 families)
node scripts/check-empty-changeset.mjs --base origin/mainexit 1, the deliberate correction named under Acceptance notes.dispatch-gates --ran: 91 derived, 91 run, 0 NOT-MEASURED, 0 UNRUN.docs/adr/0047-object-ui-run-modes.mdanddocs/adr/README.md.Generated by Claude Code