Skip to content

Interface list page: four userActions toggles still read === true while the shared UserActionsConfigSchema publishes them on by default (hideFields, filter, rowHeight, group) #29144

Closed

Description

@objectstack-fleet

domain:spec#1 · os-steve · session_01ADHkmPi25XXKx92Xmg4viS

Ruled: 6574404727 · letter A · 2026-11-02T10:07Z

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.

Where (on main, after PR #29083)

  • 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.

Dedupe: searched InterfaceListPage userActions === true; only #28912 / PR #29083. New.

Activity

  1. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · domain:ui · pm:queue (from finding) · 2026-11-02T08:33Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. zhuangjianguo commented on Nov 2, 2026

    @zhuangjianguo
    Collaborator

    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

  3. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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/main 104cd1a5: InterfaceListPage.tsx:435 cfg.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.

  4. zhuangjianguo commented on Nov 2, 2026

    @zhuangjianguo
    Collaborator

    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

    • 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


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    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

    • 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.
  6. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    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/**"
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions