Skip to content

docs(qa): re-point 25 platform-checklist clauses the 17.7 pre-release console runs proved stale, mis-asserted or mis-paired - #21811

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-21797-checklist-console-repoint
Oct 5, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-21797-checklist-console-repoint

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #21797
Clause-②: no

What this changes

This PR re-points the 25 clauses the card lists, on 20 items in docs/qa/platform-checklist/areas/*.json. The two 17.7 pre-release console runs (#21782, #21784) proved each clause stale, mis-asserted or mis-paired. Every item keeps its id, area and selectors. Each item gets exactly one revision bump, even when it carries several entries, and one history entry. That entry cites the run (#21782 or #21784), the verifier and this card.

There are no product changes and no run record. Nothing under examples/** is touched. docs/qa/** publishes nothing, so there is no changeset. coverage.json is untouched because no mapping moved.

Each row was re-derived from source rather than copied from the card:

  • objectui at the current pin .objectui-sha 9dfaca6543 (a shallow read-only checkout). The runs read 2e818d0b51ec, and the two pins were diffed on every cited objectui file.
  • The framework at the claim ref 18c2ddc.

Line numbers below are at those commits. The checklist itself carries symbol and path citations only, because its validator refuses file:line.

Disposition key: S stale clause · AD assertion defect · IP invalid pairing. Where the verifier's disposition differs from the lane's, the verifier's is used.

# item clause disp. old → new (short) source re-read matches card
B1 platform-core.docs-portal-render A5 (+ step 5, persona) AD Documentation entry in a /home sidebar → top-bar Help menu, All documentation, /docs, for every persona; member is invite + sign-up HomeLayout.tsx:1-6 (omits the sidebar); ConsoleLayout.tsx:130 (setContext('app'), the only UnifiedSidebar mount); AppHeader.tsx:792-795 Y
B2 platform-core.home-admin-cluster-links A2 S every hub card resolves → every Settings-hub entry reached via the one-hop redirect resolves apps/console AppContent.tsx:192-194 (SystemLandingRedirect), :203; SystemHubPage.tsx absent at both pins Y
B3 platform-core.home-admin-cluster-links A4 (+ N3, steps 5-6) S hub count badges → clause dropped, with its negative and the two badge steps same retirement (objectui#3743, carried out in objectui#10507) Y
B4 platform-core.home-admin-cluster-links A5 (+ whole item: steps 1-3 and 7, A1, N1, N4, title, knownGap) AD member home nav = Home + Documentation → no Administration entry anywhere in the member's shell; the 9 adminItems are walked as target URLs UnifiedSidebar.tsx:340-402 (homeNavigation); ConsoleLayout.tsx:130 Y
B5 platform-core.marketplace-console-honesty A4 (+ N3, step 5, title) S admin guard before runtime resolution → enabled: AccessDenied; disabled: the Disabled card for every viewer MarketplacePage.tsx:216 / :233-235; MarketplacePackagePage.tsx:568 Y, with a nuance (D1)
B6 ai.console-ai-surface-gating A4 (+ steps 6-7, N3, source, title) S SystemHub 'AI Approvals' card expected-fail → no surface advertises it; the bare route is scored by A6 apps/console AppContent.tsx:207 (route still ungated) Y
B7 records-forms.form-view-gallery A1 (+ steps 1-5, fixtures, N2, a revert step) AD drawer/modal as form layouts → layouts on the page route via a default-form overlay; drawer/modal are presentation modes (ADR-0050), shown on task-desk.page.ts RecordFormPage.tsx:282-289; recordFormNavigation.ts:133-153 (only tabbed maps); task-desk.page.ts:50, :58 Y, with two divergences (D2, D3)
B8 records-forms.conditional-rules-grid A5 (+ step 3, fixture) IP siblings byte-identical → the same, on an invoice whose lines carry distinct stored positions; fixture says how to seed one GridField.tsx:778-789 (row[sortField] = index); masterDetailTx.ts:172 (changedFields); deriveMasterDetail.ts:497 Y (the config key moved, D4)
B9 records-forms.action-location-matrix A1 (+ A3, step 2, knownGap) IP every location renders → every location the fixture HOSTS renders; record_header / record_more / record_related are blocked(fixture) RelatedRecordActionsBridge.tsx:197; task-detail.page.ts:24 (kind: 'full'); project-detail.page.ts:72 (record:line_items); task.object.ts:37 Y
B10 approvals.inbox-metadata-actions A2 (+ personas, steps 1/2/4, A3 verify, fixture) S remind + recall only on own request → Recall also for an override actor on any pending request; a non-override approver persona sys-approval-request.object.ts:556-595 (approval_recall override arm), remind :550 Y
B11 dashboards.global-filters-rescope A6 (+ step 8) S at-risk tile composes with the status filter → kpi_awaiting_review shows the intersection; kpi_at_risk is opted out ops-dashboard.dashboard.ts:87-88 Y
M1 access-security.readonly-package-locks-studio A3 (+ step 5, fixture, A2 code set) S writable contrast via duplicate → a scratch base via POST /api/v1/packages; A2 adds NOT_OVERRIDABLE runtime/src/domains/packages.ts:560-577 (requireDuplicableSource, DUPLICATE_SOURCE_NOT_A_BASE) Y
M2 access-security.audit-log-browser A1 S delete row withheld from every non-system reader → served to a view_all_audit_log holder, withheld from a non-holder spec identity/eval-user.zod.ts:152 (view_all_audit_log in ADMIN_FULL_ACCESS_CAPABILITIES) Y
M3 access-security.audit-log-browser A5 (+ A3, steps 5-6) S API/page agree minus the delete → row-for-row for the admin, delete included; FE7: AuditLogPage has an Action select AuditLogPage.tsx:128, :212-218 Y
M4 identity-auth.auth-method-matrix A10 (+ step 9) S delete-user succeeds authed → deliberately unwired, 404 to every caller plugin-auth auth-route-ledger.ts:148-157 (disabled) Y
M5 identity-auth.workspace-org-switch A6 (+ step 8) AD active org unchanged → 403 USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION; the foreign org never active (prior or none) better-auth 1.7.3 plugins/organization/routes/crud-org.mjs:424-425 Y
M6 records-forms.cascading-options A3 (+ personas, step 4, fixture) IP the admin persists restricted → an org_admin persona (invited with role 'admin', accepted) cascading-select.object.ts:100; spec identity/eval-user.zod.ts:201-207 (mapMembershipRole) Y
M7 records-forms.field-group-visible-when A1 (+ step 3, knownGap, A4, title, source) AD GET reads back the envelope → served as authored; the parse normalizes (batch20 pin) spec shared/expression.zod.ts:184-187; metadata-protocol protocol.ts:766-780; plugin-form fieldGroups.ts:74; plugin-detail buildDefaultPageSchema.ts:669-723 Y for A1; FE12 differs (D5)
M8 automation.flow-run-step-nesting A2 (+ fixture) S send_reminder is the loop-body step → guard_reminder is the loop-body step; send_reminder is in the try region under it showcase flows/index.ts:919-926; spec execution.zod.ts:180-185 Y
M9 automation.rollup-summary-filter A5 (+ step 7, fixture, source) S editor half on a duplicated package → on a scratch base via POST /api/v1/packages packages.ts:560-577; spec kernel/metadata-plugin.zod.ts:726 Y, minus the overlay alternative (D6)
M10 automation.flow-node-type-matrix A1 AD palette offers all 21 → the 19 non-structural spec automation/flow.zod.ts:72 (FLOW_STRUCTURAL_NODE_TYPES) Y
M11 automation.flow-node-type-matrix A2 (+ FE13 knownGap) AD every variant logs a step → non-structural + start log steps; end is proven by a completed run service-automation engine.ts:10897 (return on end), :10960-10980 (start step) Y
M12 automation.trigger-type-matrix A1 (+ step 9, title) AD trigger.type records the kind → kind via the run's flow; trigger.type is the launch event engine.ts:1175-1191 (buildRunTrigger); execution.zod.ts:376 Y
M13 platform-core.app-management-toggle A6 (+ steps 2/6/7, title) S client-only stub → writes through PUT/DELETE: 403 NOT_OVERRIDABLE on a code app, Delete 200 reset:false AppManagementPage.tsx:207, :246, :274-278 Y
M14 platform-core.app-management-toggle N1 (+ the stub knownGap) S ticking off the stub toast → no control reports success for a refused write same Y

Divergences worth a reviewer's eye

  • D1 (B5). VF4's "no package fetch" holds on the package page, whose two fetch effects are isAdmin-gated. On the catalog page, MarketplacePage load() runs whenever the marketplace is enabled (MarketplacePage.tsx:139-145), so a member's visit still fires the list fetch. The clause keeps VF4's words, and the verify text says which page they are read on. The ungated catalog fetch is reported to the card, not filed.
  • D2 (B7). The card has the wizard rendering as steps only on /new. RecordFormPage passes the form type in both create and edit modes, and both page routes exist (app-shell console AppContent.tsx:1097, :1113). Only the New/Edit modal degrades a wizard, through resolveFormViewLayout. The steps name both page routes.
  • D3 (B7). The card keeps the modal variant blocked(fixture). examples/app-showcase/src/ui/pages/task-desk.page.ts hosts both an ObjectForm formType="drawer" (edit) and an ObjectForm formType="modal" (create), so the modal presentation can be scored there. blocked(fixture) stays only as the fallback.
  • D4 (B8). The chore(objectui): bump the console pin past objectui c096f03 — it carries objectui#11611, #11614 and #11619, which unlock #21714, #21765 and #21768 #21772 pin range renamed the grid's config key sort_field to sortField at both ends: GridField reads it, MasterDetailForm writes it. The mechanism the card describes is unchanged. The source entry cites the new spelling.
  • D5 (M7). FE12 says both console adapters copy visibleWhen at the pin. At both 9dfaca6543 and 2e818d0b51ec, the form adapter copies it (fieldGroups.ts:74), but the detail adapter deriveFieldGroupDetailSections does not. That fits the card's own note that the detail page still fails (objectui#11630). Clause A4 scores the form half live and the detail half against that issue.
  • D6 (M9). VF4 offers "or overlay per ADR-0005" as a second route. The object type declares supportsOverlay: false, allowOrgOverride: false (metadata-plugin.zod.ts:726), so an overlay cannot carry a summary field's filter. The clause names the scratch base only.
  • Persona wording. Card entry 1 asks for "invite + sign-up" in place of "fresh sign-up", because the stock posture is invite_only. The same phrase sat on three other items this PR already bumps (home-admin-cluster-links, marketplace-console-honesty, app-management-toggle), so it is corrected there too. The other items carrying the phrase are not touched.
  • Invalid pairings (B8, B9, M6). The card gives corrected clause wording for these, so the clause is revised along with the item's fixture text. Nothing under examples/** changed.

Not changed here

  • The fixture changes the verifiers name are examples/** changes, so they are reported on the card rather than made:
    • B9: a showcase_task page with a record header, and a parent page rendering the synthesized Tasks related list.
    • M6: VF4's alternative of widening the cascade predicate to org_owner.
  • The conditional entry (platform-core.shell-nav-personalization A3) waits on the maintainers' ruling on objectui#11626.
  • The two "Not parked" wording notes (identity-auth.email-verification-loop A3; integration-system.external-schema-browser-ui columnCount) are outside the card's 25 entries, so they are left for a follow-up.

Verification (at f5d1e37)

  • pnpm check:platform-checklist exits 0: OK — 15 areas, 270 items (266 active, 2 planned), line citations 0, symbol anchors 653/663 resolved. On the base 18c2ddc the same check reads 652/662. The anchors added are flow.zod.ts#FLOW_STRUCTURAL_NODE_TYPES and packages.ts#requireDuplicableSource, and both resolve. The unresolved count stays at the named residual of 10.
  • node scripts/pm/dispatch-gates.mjs --commands derived 13 families, and all 13 ran with exit 0. check:doc-formula-expressions first refused with PREREQUISITE NOT MET (exit 3, nothing measured). After building @objectstack/formula and @objectstack/lint it exited 0. --ran reconciliation: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero with every exit code recorded.

Generated by Claude Code

claude added 5 commits October 5, 2026 04:11
…uns proved stale

Four items: docs-portal-render, home-admin-cluster-links,
marketplace-console-honesty and app-management-toggle (#21782 entries
1-5, #21784 entries 13-14).

Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv
Co-authored-by: Claude <noreply@anthropic.com>
… the console run proved stale

Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv
Co-authored-by: Claude <noreply@anthropic.com>
…ns proved stale or mis-paired

Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv
Co-authored-by: Claude <noreply@anthropic.com>
…checklist clauses the mixed run proved stale or mis-asserted

Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

qa(checklist): re-point 25 clauses that the 17.7 pre-release console runs (#21782 / #21784) proved stale, mis-asserted or mis-paired

1 participant