Skip to content

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

Description

@objectstack-fleet

QA-source: #21782 · #21784 (17.7 pre-release, console half, subject 316be321e, console pin 2e818d0b51ec)

Every entry below is a fail from the two console-surface runs whose disposition is stale clause (a deliberate change after the clause was written), assertion defect (the clause was wrong when written) or invalid pairing (the fixture cannot host the clause). Each was re-derived by an independent verifier (RUNNER rule 7); where a verifier changed the lane's disposition, the verifier's is used. The product is right in every entry: only the item text (and, for invalid pairings, the fixture or recipe) needs a revision plus a history entry citing the source. Owning repo: this one (docs/qa/platform-checklist/areas/*.json). Wording marked "(VFn)" is the verifier's; "(derived)" is built from its finding.

Follows #21735 (the non-browser half, closed by #21741). The checklist-accuracy findings with no fail attached (paths, keys, counts, fixture recipes) are in each record's close-out comment.

From #21782 · surface:browser (11 entries)

  1. platform-core.docs-portal-render · acceptance[4] (A5, rev 1). Assertion defect (VF4).

    • Why: /home has no sidebar. objectui HomeLayout.tsx:1-6 "deliberately omits the sidebar". UnifiedSidebar's homeNavigation renders only inside ConsoleLayout, which forces context app. The entry every persona has is the top-bar Help menu → "All documentation" → /docs (AppHeader.tsx:758-793). Pre-17.6.0.
    • Corrected (VF4): "the Documentation entry (top-bar Help menu -> All documentation -> /docs) is offered to every persona, and the member's rendered /docs tree equals the member's API-pruned subset with every entry opening without 401/403."
    • Also: step 4 should name the Help menu, and the personas' "fresh sign-up" should be "invite + sign-up" (invite_only).
  2. platform-core.home-admin-cluster-links · acceptance[1] (A2, rev 1). Stale clause (VF4).

    • Why: objectui 9eea12a2b (objectui#10507, fixes objectui#3743, 2026-09-25) deleted SystemHubPage.tsx (cards and count badges). /apps/:app/system is now a SystemLandingRedirect to /system/settings. The file is absent at both 31971ff1e and 2e818d0b51ec, so the change landed before 17.6.0. The item (2026-08-30) was never updated.
    • Corrected (VF4): "every Settings-hub entry reached from /apps/:app/system (which redirects in one hop to /system/settings) resolves to a live page."
  3. platform-core.home-admin-cluster-links · acceptance[3] (A4, rev 1). Stale clause (VF4).

    • Why: the same retirement deleted the hub count badges.
    • Corrected (VF4): "retired — the hub count badges were removed with SystemHubPage (objectui#10507); drop the clause." N3 (the badge-honesty negative) goes with it.
  4. platform-core.home-admin-cluster-links · acceptance[4] (A5, rev 1). Assertion defect (VF4).

    • Why: this has the same root as entry 1. No /home sidebar exists for any persona, so "member's home nav is Home + Documentation" has no surface.
    • Corrected (VF4): "a member's shell offers no Administration entry anywhere (no /home sidebar — HomeLayout omits it; Help menu offers Documentation); the server refusal is proven by the builtin-apps item."
    • Also (VF4 side note): the item's whole Administration-cluster premise (homeNavigation's sys-administration group) has no stable rendering surface at the pin. Revise the item as a whole: steps 1/3/5/6, A1, N1, N4.
  5. platform-core.marketplace-console-honesty · acceptance[3] (A4, rev 1). Stale clause (VF4), by design.

  6. ai.console-ai-surface-gating · acceptance[3] (A4, rev 1). Stale clause (VF4).

    • Why: objectui 9eea12a2b (docs(create-objectstack): say that the blank starter ships no app #10507, before 17.6.0) removed SystemHubPage and its "AI Approvals" card, so the K2 card half is moot. The A6 inbox half of K2 remains. The system/ai-approvals route is still ungated (AppContent.tsx:207).
    • Corrected (VF4): "on an agent-less boot no console surface (nav, settings hub, Home) advertises an 'AI Approvals' entry; the bare /system/ai-approvals route is scored by A6."
    • Also: the item's source path (SystemHubPage.tsx) needs updating, and N3 should name only A6.
  7. records-forms.form-view-gallery · acceptance[0] (A1, drawer variant, rev 1). Assertion defect (VF3).

    • Why: objectui RecordFormPage.tsx:281-289 says: "drawer/modal are presentation/open-modes, not record-page layouts, so they fall back to simple here (see [P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890)". resolveFormViewLayout maps only tabbed. The modelling decision is ADR-0050 (Proposed): drawer/modal leave FormView.type, and presentation belongs to NavigationMode / addRecord.mode / action type:'modal'. Named formViews.* are reachable from no console door, since every consumer reads objectDef.form ?? formViews.default. Identical at 31971ff1e.
    • Corrected (derived from VF3; VF3 gave no verbatim wording): "PER-VARIANT: each authored page-level form layout (simple / tabbed / wizard / split) renders its own layout mechanics, with a screenshot per variant; drawer and modal are presentation modes, not layouts (ADR-0050) — a drawer-presented form is proven on a surface that opens it as a side panel (e.g. a JSX ObjectForm formType="drawer"), and the metadata record-form page falling back to simple for type drawer/modal is by design ([P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890); the unauthored 'modal' variant stays blocked(fixture)."
    • Also: steps 4–5 assume a way to open the named form views that does not exist; reach them by overlaying the default form. The wizard renders as steps only on the /new page route.
  8. records-forms.conditional-rules-grid · acceptance[4] (A5, rev 2). Invalid pairing (VF3).

    • Why: on stock INV-1001 (positions 0, 1), editing one line sends only that line, and the sibling is byte-identical. The position re-emit happens only when sibling lines share a stored position. objectui GridField.tsx:703-707 stamps row[sort_field] = index, and masterDetailTx.ts:180-195 sends dirty fields only. INV-1002 ships one line, and a second line added through the API defaults to position 0, so the collision is created by the fixture.
    • Corrected (derived from VF3; VF3 gave no verbatim wording): "the saved batch persists: reloading the invoice shows the edited lines with their values, and untouched sibling lines byte-identical — on an invoice whose lines carry distinct stored positions (a sort-field normalisation of colliding positions is by design and is not a sibling rewrite)."
    • Also: step 3 needs a seeded second line on INV-1002 with a distinct position.
  9. records-forms.action-location-matrix · acceptance[0] (A1, rev 6). Invalid pairing (VF4).

  10. approvals.inbox-metadata-actions · acceptance[1] (A2, rev 3). Stale clause (VF4), pre-17.6.0.

  11. dashboards.global-filters-rescope · acceptance[5] (A6, rev 2). Stale clause (VF4).


Conditional (only if the maintainers rule the product behaviour intended)

From #21784 · surface:mixed (14 entries)

  1. access-security.readonly-package-locks-studio · acceptance[2] (A3, rev 3). Stale clause (VF4; the lane had it as an assertion defect — the verifier's disposition wins).

  2. access-security.audit-log-browser · acceptance[0] (A1, rev 3). Stale clause (VF4), after 17.6.0.

  3. access-security.audit-log-browser · acceptance[4] (A5, rev 3). Stale clause (VF4), same cause.

    • Corrected (VF4): "API and page agree row-for-row for the same principal (admin: login, config_change and delete)."
    • Also (FE7): rev 2's "there is no Action dropdown" is false at this console pin.
  4. identity-auth.auth-method-matrix · acceptance[9] (A10, rev 3). Stale clause (VF4), delete-user half only.

  5. identity-auth.workspace-org-switch · acceptance[5] (A6, rev 1). Assertion defect (VF4). Fails closed, not authorization class.

    • Why: better-auth 1.7.3 plugins/organization/routes/crud-org.mjs setActiveOrganization calls adapter.setActiveOrganization(token, null) before throwing 403; plugin-auth mounts the route unwrapped (auth-route-ledger.ts:274 'sdk'). The active org becomes none, never the foreign org.
    • Corrected (VF4): "set-active to a non-membership org answers 403 USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION, the foreign org never becomes active (get-active-member returns the prior org or none — better-auth clears the active org on refusal), and the UI surfaces an error."
    • Optional follow-up (VF4): wrap the vendor call if keeping the previous org is required; then it becomes a product enhancement.
  6. records-forms.cascading-options · acceptance[2] (A3, rev 2). Invalid pairing (VF4).

    • Why: the fixture predicate is 'org_admin' in current_user.positions (cascading-select.object.ts:100); mapMembershipRole (spec identity/eval-user.zod.ts:201-205) maps owner → org_owner with no implication of org_admin, so the seeded admin (org_owner) is outside the gate. Predicate landed before 17.6.0.
    • Corrected (VF4): "BOTH sides of the role gate: a persona holding org_admin (a member invited with role 'admin') sees and persists tier='restricted'; a plain member neither sees nor can submit it (server invalid_option)."
    • Alternative (VF4): fix the fixture predicate to ['org_owner','org_admin'].exists(r, r in current_user.positions) (an "admin only" option the owner cannot pick is arguably a P3 fixture defect). Persona note: an admin invitation needs accept-invitation to grant org_admin.
  7. records-forms.field-group-visible-when · acceptance[0] (A1, rev 1). Assertion defect (VF4).

    • Why: the spec normalizes a bare string to {dialect:'cel',source} (shared/expression.zod.ts:184-187, pinned by object-strictness-batch20.test.ts:477-489), but runtime-authored metadata is persisted verbatim and served unparsed (metadata-protocol/src/protocol.ts:1344,1652, ADR-0005 appendix (c)). Pre-17.6.0.
    • Corrected (VF4): "authoring accepts both the bare CEL string and the {dialect:'cel',source} envelope on fieldGroups[].visibleWhen; the schema parse normalizes the string to the envelope (batch20 pin), the meta API serves the body as authored, and either form gates the group identically at render."
    • Also (FE12): the knownGaps and A4's text ("both adapters drop it") are out of date — both copy visibleWhen at the pin, the form gates live; only the detail page still fails (product defect objectstack-ai/objectui#11630, not parked).
  8. automation.flow-run-step-nesting · acceptance[1] (A2, rev 4). Stale clause (VF4).

  9. automation.rollup-summary-filter · acceptance[4] (A5, rev 3). Stale clause (VF4).

  10. automation.flow-node-type-matrix · acceptance[0] (A1, rev 3). Assertion defect (VF4).

    • Why: spec automation/flow.zod.ts:72 FLOW_STRUCTURAL_NODE_TYPES = ['start','end'] — no executor, no descriptor, so not in GET /automation/actions.
    • Corrected (VF4): "the palette feed offers every NON-structural variant (19 of 21; start/end are structural per FLOW_STRUCTURAL_NODE_TYPES)".
  11. automation.flow-node-type-matrix · acceptance[1] (A2, rev 3). Assertion defect (VF4).

    • Why: executeNode returns on end before any step push (engine.ts:10897-10925); start logs a success step (:10972-10980).
    • Corrected (VF4): "each non-structural variant plus start appears as an executed step; end is proven by the run reaching status completed (it logs no step)."
    • Also (FE13): showcase_fan_out_notify needs Slack egress; prove parallel / http on another run where egress is denied.
  12. automation.trigger-type-matrix · acceptance[0] (A1, rev 1). Assertion defect (VF4).

  13. platform-core.app-management-toggle · acceptance[5] (A6, rev 1). Stale clause (VF5).

  14. platform-core.app-management-toggle · negative[0] (N1, rev 1). Stale clause (VF5), same cause.

    • Corrected (derived from VF5): "no control on AppManagementPage reports success for a write the server refused: a 403 on a code-package app surfaces as an error toast and leaves /meta/app unchanged; a writable app's toggle takes real effect."
    • Also (FE15): the item's knownGap describing the stub should be rewritten to the wired contract.

Not parked (wording issues attached to a product-defect fail, recorded in the record's checklist-accuracy findings): identity-auth.email-verification-loop acceptance[2] names a POST variant that does not exist (the mailed link is the API GET) — corrected (derived from VF1): "following the mailed verification link (GET /api/v1/auth/verify-email?token=…) verifies the account, and the console's /verify-email page, given a valid token, reports success". integration-system.external-schema-browser-ui fixture says columnCount 5; it is 7.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 5, 2026

    @objectstack-fleet
    ContributorAuthor

    Path: fleet decision — the checklist verifies the definition (North Star, "what counts as done") | the 25 items listed on this card | none

    Triage: first grade — documentation · priority:p2 · domain:devx · area:devpath · pm:queue. The same grade as its first half, #21735

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-05T03:04Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: lands in docs/qa/platform-checklist/areas/*.json ⇒ domain:devx; rationale: the product is right in every entry, and the item text is wrong, so this is the checklist half of a documentation disconnect (triage-duties.md line 35).


    Generated by Claude Code

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    documentationImprovements or additions to documentation
    and removed on Oct 5, 2026
  3. objectstack-fleet commented on Oct 5, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 57
    Session: session_01VDtqoecgES7ScQYGbFVDRv
    Branch: claude/issue-21797-checklist-console-repoint (cut from origin/main 18c2ddc1ec)
    Worktree: objectstack-issue-21797
    Domain: domain:devx
    Seat: domain:devx#1
    File surface:

    Stop on a breach and explain it in the report.
    Container & model: M (25 clause rewrites, each re-derived), mode:subagent, model: opus
    Clause-②: no
    Thread-read: 5987373027
    Serial constraints cleared: board read at 2026-10-05T03:52Z. No open PR touches docs/qa/platform-checklist/**. This round's parallel claims (#21802 and #14490) touch disjoint files.

    Priority rule 3 reading: domain:devx has no open P0/P1. This is the release instrument's second half, after #21735. docs/qa/** is not a contract-review face, and nothing publishes, so the PR carries skip-changeset.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 5, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 21797,
      "status": "done",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/21811",
      "head_sha": "f5d1e37346766b44fcc9ca1986bb5ca67dd65203",
      "branch": "claude/issue-21797-checklist-console-repoint",
      "session": "session_01VDtqoecgES7ScQYGbFVDRv",
      "premise_still_valid": true,
      "summary": "Re-pointed the card's 25 clauses on 20 items in docs/qa/platform-checklist/areas (8 area files). Each item got one revision bump and one history entry citing #21782 or #21784, the verifier, and #21797. Every entry was re-read at objectui 9dfaca6543 (diffed against the runs' 2e818d0b51ec) and framework 18c2ddc1ec. All 25 match the card in substance. Six measured divergences, D1-D6, are written into the item text and the PR body. Three checklist clauses retired with their badge negative (home-admin-cluster-links A4/N3 and the two badge steps). No product, examples/** or coverage.json change.",
      "files_changed": [
        "docs/qa/platform-checklist/areas/access-security.json",
        "docs/qa/platform-checklist/areas/ai.json",
        "docs/qa/platform-checklist/areas/approvals.json",
        "docs/qa/platform-checklist/areas/automation.json",
        "docs/qa/platform-checklist/areas/dashboards.json",
        "docs/qa/platform-checklist/areas/identity-auth.json",
        "docs/qa/platform-checklist/areas/platform-core.json",
        "docs/qa/platform-checklist/areas/records-forms.json"
      ],
      "rows": [
        {
          "item": "platform-core.docs-portal-render",
          "clause": "A5 (+S5, persona)",
          "matches_card": "Y",
          "source_reread": "objectui HomeLayout.tsx:1-6, ConsoleLayout.tsx:130, AppHeader.tsx:792-795",
          "note": "VF4 wording; persona invite + sign-up"
        },
        {
          "item": "platform-core.home-admin-cluster-links",
          "clause": "A2",
          "matches_card": "Y",
          "source_reread": "apps/console AppContent.tsx:192-194, :203; SystemHubPage absent at both pins",
          "note": "VF4 wording"
        },
        {
          "item": "platform-core.home-admin-cluster-links",
          "clause": "A4 (+N3, badge steps 5-6)",
          "matches_card": "Y",
          "source_reread": "same retirement (objectui#3743 / objectui#10507)",
          "note": "clause, negative and two steps removed"
        },
        {
          "item": "platform-core.home-admin-cluster-links",
          "clause": "A5 (+whole item: S1-3, S7, A1, N1, N4, title, knownGap)",
          "matches_card": "Y",
          "source_reread": "UnifiedSidebar.tsx:340-402, ConsoleLayout.tsx:130",
          "note": "adminItems walked as target URLs"
        },
        {
          "item": "platform-core.marketplace-console-honesty",
          "clause": "A4 (+N3, S5, title)",
          "matches_card": "Y",
          "source_reread": "MarketplacePage.tsx:216, :233-235; MarketplacePackagePage.tsx:568",
          "note": "nuance D1"
        },
        {
          "item": "ai.console-ai-surface-gating",
          "clause": "A4 (+S6-7, N3, source, title)",
          "matches_card": "Y",
          "source_reread": "apps/console AppContent.tsx:207 (route still ungated)",
          "note": "VF4 wording"
        },
        {
          "item": "records-forms.form-view-gallery",
          "clause": "A1 (+S1-5, fixtures, N2, revert step, sources)",
          "matches_card": "Y",
          "source_reread": "RecordFormPage.tsx:282-289; recordFormNavigation.ts:133-153; showcase task-desk.page.ts:50, :58",
          "note": "derived (VF3 gave none); D2, D3"
        },
        {
          "item": "records-forms.conditional-rules-grid",
          "clause": "A5 (+S3, fixture)",
          "matches_card": "Y",
          "source_reread": "GridField.tsx:778-789; masterDetailTx.ts:172; deriveMasterDetail.ts:497",
          "note": "derived; D4 (key renamed to sortField, mechanism unchanged)"
        },
        {
          "item": "records-forms.action-location-matrix",
          "clause": "A1 (+A3, S2, knownGap)",
          "matches_card": "Y",
          "source_reread": "RelatedRecordActionsBridge.tsx:197; showcase task-detail.page.ts:24, project-detail.page.ts:72, task.object.ts:37",
          "note": "VF4 wording; fixture change reported as breach B-1"
        },
        {
          "item": "approvals.inbox-metadata-actions",
          "clause": "A2 (+personas, S1/S2/S4, A3 verify, fixture)",
          "matches_card": "Y",
          "source_reread": "plugin-approvals sys-approval-request.object.ts:550, :556-595",
          "note": "VF4 wording; non-override approver persona added"
        },
        {
          "item": "dashboards.global-filters-rescope",
          "clause": "A6 (+S8)",
          "matches_card": "Y",
          "source_reread": "showcase ops-dashboard.dashboard.ts:87-88",
          "note": "VF4 wording"
        },
        {
          "item": "access-security.readonly-package-locks-studio",
          "clause": "A3 (+S5, fixture, A2 code set)",
          "matches_card": "Y",
          "source_reread": "runtime domains/packages.ts:560-577",
          "note": "VF4 wording; NOT_OVERRIDABLE added per FE7"
        },
        {
          "item": "access-security.audit-log-browser",
          "clause": "A1",
          "matches_card": "Y",
          "source_reread": "spec identity/eval-user.zod.ts:152",
          "note": "VF4 wording"
        },
        {
          "item": "access-security.audit-log-browser",
          "clause": "A5 (+A3, S5-6)",
          "matches_card": "Y",
          "source_reread": "objectui AuditLogPage.tsx:128, :212-218",
          "note": "VF4 wording; FE7 Action select"
        },
        {
          "item": "identity-auth.auth-method-matrix",
          "clause": "A10 (+S9)",
          "matches_card": "Y",
          "source_reread": "plugin-auth auth-route-ledger.ts:148-157",
          "note": "VF4 wording"
        },
        {
          "item": "identity-auth.workspace-org-switch",
          "clause": "A6 (+S8)",
          "matches_card": "Y",
          "source_reread": "better-auth 1.7.3 crud-org.mjs:424-425",
          "note": "VF4 wording"
        },
        {
          "item": "records-forms.cascading-options",
          "clause": "A3 (+personas, S4, fixture)",
          "matches_card": "Y",
          "source_reread": "showcase cascading-select.object.ts:100; spec identity/eval-user.zod.ts:201-207",
          "note": "VF4 wording; predicate-widening alternative reported as breach B-2"
        },
        {
          "item": "records-forms.field-group-visible-when",
          "clause": "A1 (+S3, knownGap, A4, title, source)",
          "matches_card": "Y",
          "source_reread": "spec shared/expression.zod.ts:184-187; metadata-protocol protocol.ts:766-780; objectui fieldGroups.ts:74, buildDefaultPageSchema.ts:669-723",
          "note": "A1 VF4 wording; FE12 differs (D5)"
        },
        {
          "item": "automation.flow-run-step-nesting",
          "clause": "A2 (+fixture)",
          "matches_card": "Y",
          "source_reread": "showcase flows/index.ts:919-926; spec execution.zod.ts:180-185",
          "note": "VF4 wording"
        },
        {
          "item": "automation.rollup-summary-filter",
          "clause": "A5 (+S7, fixture, source)",
          "matches_card": "Y",
          "source_reread": "packages.ts:560-577; spec kernel/metadata-plugin.zod.ts:726",
          "note": "VF4 wording minus the overlay alternative (D6)"
        },
        {
          "item": "automation.flow-node-type-matrix",
          "clause": "A1",
          "matches_card": "Y",
          "source_reread": "spec automation/flow.zod.ts:72",
          "note": "VF4 wording"
        },
        {
          "item": "automation.flow-node-type-matrix",
          "clause": "A2 (+FE13 knownGap)",
          "matches_card": "Y",
          "source_reread": "service-automation engine.ts:10897, :10960-10980",
          "note": "VF4 wording"
        },
        {
          "item": "automation.trigger-type-matrix",
          "clause": "A1 (+S9, title)",
          "matches_card": "Y",
          "source_reread": "engine.ts:1175-1191; spec execution.zod.ts:376",
          "note": "VF4 wording"
        },
        {
          "item": "platform-core.app-management-toggle",
          "clause": "A6 (+S2/S6/S7, title)",
          "matches_card": "Y",
          "source_reread": "objectui AppManagementPage.tsx:207, :246, :274-278",
          "note": "VF5 wording; Delete half expected to fail (product_defects P-1)"
        },
        {
          "item": "platform-core.app-management-toggle",
          "clause": "N1 (+stub knownGap)",
          "matches_card": "Y",
          "source_reread": "same",
          "note": "derived from VF5"
        }
      ],
      "divergences": [
        "D1 marketplace-console-honesty A4: VF4 says no package fetch. That holds on MarketplacePackagePage (fetch effects isAdmin-gated). MarketplacePage load() is not admin-gated (MarketplacePage.tsx:139-145), so a member still fires the catalog list fetch. The verify text scopes the claim to the package page.",
        "D2 form-view-gallery: the card says the wizard renders as steps only on /new. RecordFormPage passes the 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 it.",
        "D3 form-view-gallery: the card keeps modal blocked(fixture). showcase task-desk.page.ts hosts ObjectForm formType drawer (edit) AND modal (create), so the modal presentation is scorable there. blocked(fixture) is kept as the fallback.",
        "D4 conditional-rules-grid: in the #21772 pin range the grid config key sort_field became sortField at both ends (GridField reader, MasterDetailForm writer). The mechanism is unchanged and the citation uses the new spelling.",
        "D5 field-group-visible-when: FE12 says both adapters copy visibleWhen at the pin. At 9dfaca6543 and at 2e818d0b51ec only the form adapter copies it (fieldGroups.ts:74). The detail adapter deriveFieldGroupDetailSections drops it, which is consistent with objectui#11630.",
        "D6 rollup-summary-filter: VF4 offers overlay per ADR-0005 as an alternative. The object type declares supportsOverlay false and allowOrgOverride false (metadata-plugin.zod.ts:726), so the alternative was dropped.",
        "Scope note: the persona fix invite + sign-up (card entry 1) was also applied to three items this PR already bumps that carry the same stale phrase (home-admin-cluster-links, marketplace-console-honesty, app-management-toggle).",
        "Scope note: for invalid-pairing entries B8, B9 and M6, the card gives corrected clause wording, so the clause was revised along with the fixture text. The brief's fixture-or-recipe-only rule was read as meaning no examples/** change."
      ],
      "product_defects": [
        "P-1 (candidate; code-read, not run-measured): platform-core.app-management-toggle A6, Delete half. objectui AppManagementPage.tsx:274-278 handleDelete shows the success toast as soon as deleteItem resolves, without reading reset, so a reset:false no-op on a code-package app is reported as deleted. The card already names this as the open candidate (VF5). The clause was re-pointed per the card, not withheld.",
        "P-2 (candidate; code-read): platform-core.marketplace-console-honesty A4. MarketplacePage issues the catalog list fetch for a non-admin it then turns away, unlike MarketplacePackagePage, whose fetches are isAdmin-gated (MarketplacePage.tsx:139-145 vs MarketplacePackagePage). Not a run fail. Recorded for the seat to judge."
      ],
      "validators_run": [
        {
          "cmd": "pnpm check:platform-checklist (base 18c2ddc1ec)",
          "result": "exit 0; 270 items; line citations 0; symbol anchors 652/662"
        },
        {
          "cmd": "pnpm check:platform-checklist (head f5d1e37346)",
          "result": "exit 0; 270 items (266 active, 2 planned); line citations 0; symbol anchors 653/663, unresolved residual unchanged at 10"
        },
        {
          "cmd": "node scripts/pm/dispatch-gates.mjs --commands",
          "result": "13 families derived vs merge base 18c2ddc1e (8 paths)"
        },
        {
          "cmd": "node scripts/check-ci-filter-parity.mjs",
          "result": "exit 0"
        },
        {
          "cmd": "node scripts/check-closing-keyword-parity.mjs",
          "result": "exit 0"
        },
        {
          "cmd": "node scripts/check-closing-keyword-parity.mjs --self-test",
          "result": "exit 0"
        },
        {
          "cmd": "node scripts/check-comment-mask-corpus.mjs",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm --filter @objectstack/lint run check:doc-formula-expressions",
          "result": "first run exit 3 PREREQUISITE NOT MET (nothing measured); after turbo build of @objectstack/formula + @objectstack/lint (os-verify-lock VERDICT command-exit 0) exit 0"
        },
        {
          "cmd": "pnpm check:cross-package-test-inputs",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:doc-authoring",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:driver-memory-census",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:gitlink-declared",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:nul-bytes",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:platform-checklist",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:refd-timer-probe",
          "result": "exit 0"
        },
        {
          "cmd": "pnpm check:watch-hint-literal",
          "result": "exit 0"
        },
        {
          "cmd": "node scripts/pm/dispatch-gates.mjs --ran (exit-coded record)",
          "result": "13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN (a derived zero)"
        }
      ],
      "breaches": [
        "B-1 (not made): records-forms.action-location-matrix needs a showcase fixture: a showcase_task page that composes a record header (record_header / record_more), and a parent record page that renders the synthesized Tasks related list (record_related). That is an examples/app-showcase change. Until it lands, the item text scores those three variants blocked(fixture).",
        "B-2 (not made, optional): VF4's alternative for records-forms.cascading-options would widen the cascading-select.object.ts tier predicate to include org_owner (an admin-only option the owner cannot pick is arguably a P3 fixture defect). That is an examples/** change. The item was re-paired to an org_admin persona instead."
      ],
      "open_questions": [
        {
          "question": "The card lists two \"Not parked\" wording fixes outside its 25 entries (identity-auth.email-verification-loop A3: the GET verification link; integration-system.external-schema-browser-ui: columnCount 5 to 7). They were left untouched. Fold them into this PR or a follow-up?",
          "options": [
            "A follow-up card or rider PR",
            "B add to #21811 as a fifth commit"
          ],
          "recommendation": "A, because they are outside the claimed file surface and the 25-entry scope."
        }
      ],
      "tests": "Gates only (docs-only diff); see validators_run. All gate runs are at head f5d1e37346 except the base anchor reading. Every item was also checked for revision == last history revision, and each changed item's fields were reviewed for leftover stale wording.",
      "mcp_calls": "0",
      "api_writes": "2 (both relay-mediated as objectstack-fleet[bot]): pr_create POST /repos/objectstack-ai/objectstack/pulls (read-back byte-identical, #21811); comment POST /repos/objectstack-ai/objectstack/issues/21797/comments (this report). No labels and no PR assignee: the dispatch said no labels, and the writes budget names no assignee write.",
      "out_of_scope_findings": [
        "carrier: none - P-2 MarketplacePage catalog fetch not admin-gated, noted in PR divergences D1, not filed"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 5, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21811 → 18c7dfd2e6, verified on origin/main by content at 2026-10-05T04:49Z.

    Left open, for triage. Not filed by this seat:

    • Product-defect candidates. Both come from code reading only; neither was run.
      • P-1: AppManagementPage.tsx:274-278 handleDelete toasts success without reading reset, so a no-op delete of a code-package app reads as "deleted". This card already named it (VF5), and the clause was re-pointed to expect it.
      • P-2: MarketplacePage.tsx:139-145 fires the catalog list fetch for a non-admin it then turns away.
    • Fixture need (B-1): records-forms.action-location-matrix needs a showcase page with a record header and a parent page rendering the Tasks related list (an examples/app-showcase change). Until then, three variants score blocked(fixture).
    • Two "Not parked" wording fixes the card names beyond its 25 entries were not touched: identity-auth.email-verification-loop A3 (the GET verification link) and integration-system.external-schema-browser-ui (columnCount 5 → 7).

    pm:dispatched removed.

    Seat domain:devx#1 · session_01VDtqoecgES7ScQYGbFVDRv


    Generated by Claude Code

  6. added 2 commits that reference this issue on Oct 7, 2026
    18c7dfd
    47f6355
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions