Skip to content

docs(qa): 18.0 sweep anchor round 17 — the ledger's remaining checklist-text findings, the console pin's stale citations and 79 "showcase isolated" respellings - #25003

Merged
objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-24579-v18-sweep-round17
Oct 21, 2026
Merged

objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-24579-v18-sweep-round17

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Refs #24579
Clause-②: no

Round 17 of the 18.0 sweep's wave anchor (claim 6303585734, PM loop round 32). It applies the ledger's remaining checklist-text findings: #24903's follow-through (PR #24967), round 16's carried findings (PR #24963's acceptance notes), PR #24982's pin findings after the console pin moved to objectui cf153eb2e535, round 14's widening candidates (PR #24857), and round 12's "showcase isolated" spellings (landing record 6287983829).

Only checklist text changes. 85 items in 10 area files each take one revision bump and one history row, and each row names its source and finding. There is no product code, test, pin, changeset text or RUNNER.md change, and no new item.

  • Base e4d604efd3. origin/main 4fe3af9d7e is merged in 6c4b8526af. Its five commits touch no docs/qa/** path and none of the sources these edits cite.
  • Every item, pin and objectui spec named below was re-read at the base, or at the console pin for objectui, before it was written. objectui was read with git show from a full scratch clone (--is-shallow-repository false).
  • A scripted span editor made every edit. It is round 16's editor, unchanged, and it never re-serialises a file. For each area file it re-parses the result and asserts four things:
    • A1: the new document equals the old one with the declared ops applied.
    • A2: every other item and top-level key is value-equal.
    • A3: each edited item's changed paths lie inside its declared fields (array edits by exact index), plus revision and the one new history row.
    • A4: the text outside the edited items is byte-identical.
  • A whole-branch check against the base agrees: 85 items changed, each with revision +1 and exactly one appended row, and no other path changed.
  • The new history rows carry the placeholder ref #PENDING-24579R17, because a row's ref names this PR and the PR had no number yet. The next commit on this branch swaps in this PR's number and changes nothing else. The gates are re-run on that head, and the report comment on qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) #24579 records them.

Changes

finding item field old → new evidence read at e4d604efd3
#24903 (PR #24967): the repaired production-guard case cli.dev-automigrate-policy automated.ref; fixtures.knownGaps[2] removed the production case "scores NOTHING (knownGaps[2])" → the case, beside its development control, scores acceptance[2] at the driver layer, partial; steps[3]'s production boot stays the live leg sql-driver-schema-drift.test.ts (blob 1f2ed8c72ca2): under NODE_ENV=production with autoMigrate: 'safe', SqlDriver.initObjects over in-memory better-sqlite3 keeps a current_user column DEFAULT, still reports it safe / drop_column_default, and its stub logger's warning carries the stable prefix. The remedy after the em dash is unasserted, and no boot log is read. The guard is reconcileAndWarnDrift in sql-driver.ts.
PR #24963 (a): a P0 api clause's readonly half "scored from the pins" records-forms.crud-roundtrip acceptance[6] (clause, verify, evidence); automated removed; fixtures.knownGaps[1] added "Score that half from the pins in automated, never as blocked(fixture) … no live run can stage it" → drive it at the clone door on a source row whose lead_score the run planted in its own file DB with node:sqlite, else blocked(fixture). The pins move to knownGaps[1] as evidence of their own layers, and automated goes, because no pin holds a full clause protocol.readonly-insert.test.ts drives cloneData over a stub engine. engine-insert-static-readonly-strip.test.ts drives a real engine over a recording driver, with no HTTP. cloneData (protocol.ts) copies the source row whole into engine.insert and answers the engine's drop as droppedFields. lead_score is readonly with no defaultValue (contact.object.ts).
PR #24963 (b): automated.ref claims "acceptance[0]'s NARROWING half ONLY" cli.datasource-introspect-codegen automated removed; fixtures.knownGaps[3] added; knownGaps[2] and acceptance[0].verify re-pointed a ref holding half a clause → no ref; the knownGap names each pin's layer and when automated may return (round 15's form) remote-tables-twin.equivalence.test.ts: the real ExternalDatasourceService over a fake introspector, through the real HonoHttpServer (route layer). external-datasource-service.test.ts: the service. envelope-unwrap.test.ts: the CLI over a stubbed fetch. acceptance[0] scores the CLI's printed listing against a served datasource.
PR #24963 (c), anchor comment 6290946648: "a second signed-up user" records-forms.record-discussion-mentions personas[1], fixtures.knownGaps[0] a second signed-up user, and the mention and bell clauses blocked(fixture) without one → a user the admin mints with POST /api/v1/auth/admin/create-user, which then changes its password; ⛔ never blocked(fixture) on the 403 audience-posture.ts resolveAudience: no auth.audience declared ⇒ invite_only, and an uninvited sign-up answers 403 SELF_REGISTRATION_CLOSED. admin-user-endpoints.ts runAdminCreateUser: mustChangePassword defaults true. steps[13] (revision 5) already uses this door.
PR #24982: a citation absent at both pins approvals.record-page-decisions source[2]; fixtures.knownGaps[0] added RecordDetailView.approvalDecisionActions.test.tsx → objectui RecordDetailView.approvalDeclaredActions.test.tsx (blob 9519ae70f743), plus this repo's sys-approval-request.object.test.ts for the one-dialog half; the knownGap says that the rest of the item still describes the retired header buttons objectui 99782f961 (objectui#3055) deleted the file and retired buildApprovalDecisionActions, moving the record page onto sys_approval_request's declared actions. It is an ancestor of 616df6598b42 and of cf153eb2e535 (exit 0, exit 0; control, cf153eb2e535 as an ancestor of 99782f961: exit 1).
PR #24982: a changed blob automation.setup-packaged-automation-board none; the ref is confirmed unchanged PackagedAutomationPage.test.tsx b321640a6100 → aeb3e5f94e38 (objectui#13185, objectui#13279). It still stubs fetch, and its new cases (the Activation cell's "Not running here", the clone result's next steps) widen the mocked half only. PackagedActionsSection.test.tsx is unchanged.
PR #24982: the current pin records-forms.crud-roundtrip acceptance[4].verify console pin 616df6598b42 → cf153eb2e535 e2e/live/record-history-display.spec.ts is blob 7ebc45106cff at both pins
PR #24982: the current pin studio-authoring.first-run-loop acceptance[0].verify .objectui-sha 616df6598b42 → cf153eb2e535 e2e/live/studio-object-designer.spec.ts is blob 58a7f1cbf024 at both pins. studio-pkg-chip, package-form-id-input and package-form-submit are still declared in app-shell's StudioDesignSurface.tsx and PackageFormDialog.tsx. Over the range, e2e/live/ changes only ci/backend.env.
PR #24857: widening candidate studio-editor studio-authoring.record-page-roundtrip automated.ref; acceptance[1].verify "acceptance[0] ONLY … studio-editor.spec.ts … has never been in this ref" → plus e2e/live/studio-editor.spec.ts for acceptance[1], carrier-neutrally "Add block opens a block-type picker with configurable block kinds" (blob 19f9cc131654) drives the live editor and asserts that the dialog offers Card, Section and Record details, which is acceptance[1]'s whole dom oracle. It edits a copy of showcase_project_workspace, an app page, but the picker offers one static catalogue whatever the page: AddBlockButton reads TYPES_BY_CATEGORY (objectui block-types.ts).
round 12: "showcase isolated" read as the posture 79 items in 9 area files the one step that boots (steps[0], or steps[1] in three items) "boot showcase isolated" → "boot the showcase on its own port and DB", and four context variants below

The "showcase isolated" respelling

79 respelled, 0 left as the posture. Every non-history hit of "showcase isolated" was read in its item, and each names the dogfood §0 own-port boot. None is the isolated tenancy posture. The clearest case is access-security.activation-write-operator-gate steps[0], which read "boot showcase isolated; … PROVE the posture is single". The 80th hit is a history row (access-security.sharing-rules-widen history[3]), and it is left as history.

The spelling names the boot by what it is, in RUNNER.md's own words for it: the trap table's counter for shared-browser-tab is "own port/DB (skill §0)". One hit already named the canonical boot line, and it now says "RUNNER's canonical checklist boot", RUNNER.md's term for that invocation. The new spelling holds for every boot command the items use, os serve included (records-forms.encrypted-field-behavior).

old new hits
boot showcase isolated boot the showcase on its own port and DB 66
boot showcase isolated against a file DB boot the showcase on its own port against its own file DB 4
boot showcase isolated on … boot the showcase on its own port and DB, on … 3
boot the showcase isolated boot the showcase on its own port and DB 3
boot showcase isolated (own port + file DB per dogfood skill §0) and its comma twin boot the showcase on its own port and file DB (dogfood skill §0) 2
boot the showcase isolated (RUNNER canonical boot line: own port, own file DB, --seed-admin) boot the showcase with RUNNER's canonical checklist boot (own port, own file DB, --seed-admin) 1

By area: access-security 10, api-backend 13, approvals 17, automation 17, dashboards 1, integration-system 4, platform-core 1, records-forms 13, studio-authoring 3.

Items left alone, with reasons

PM hypotheses, measured

  1. "Round 14's two widening candidates still widen nothing." Half holds. form-view-subforms.spec.ts widens nothing (above). studio-editor.spec.ts asserts acceptance[1] of studio-authoring.record-page-roundtrip whole at its layer, so that ref widens.
  2. "Fewer than five of the ~80 'isolated' hits are the posture." This holds: 0 of 79.

Acceptance notes

  • Some edits were located beyond the dispatch's field list, inside items it names:
    • approvals.record-page-decisions fixtures.knownGaps[0]. Once source[2] names the declared-actions test, the steps and clauses contradict it. They describe buildApprovalDecisionActions (approve_request / reject_request in record_header, ordered -100 / -99, behind a client-side canDecide). At cf153eb2e535 the record page renders sys_approval_request's declared actions through DeclaredActionsBar above the page body: approval_approve, approval_reject and the other levers at record_section, gated by the server's viewer block. The knownGap says so, and no step or clause was rewritten. Re-deriving them is the anchor's call. Carrier: qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) #24579.
    • records-forms.crud-roundtrip: automated is removed under round 15's rule, the same reading the dispatch names for (b). acceptance[6].evidence names the planted-row evidence.
    • cli.datasource-introspect-codegen: knownGaps[2] and acceptance[0].verify said "the pins in automated", and now point at knownGaps[3].
  • automation.setup-packaged-automation-board steps[3] reads "confirm every switch reads On … 31 On / 1 Off". At cf153eb2e535 the Activation cell reads "Not running here", with the switch still checked, for a flow the engine left unarmed (objectui#13159, packagedFlows.ts activationReading). On a default boot the engine reports a deployment-policy unboundCause for showcase_scheduled_digest and showcase_task_due_reminder (RUNNER.md, the scheduled-work entry). The switch reading still holds, but a count of the cell's "On" badges will not. Noted, not applied, because the dispatch scoped this item to its ref. Carrier: qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) #24579.
  • Outside this round's spelling, 65 other non-history texts contain "isolated". Of these, 41 are the posture, 2 are other senses ("owner-isolated", "the isolated env"), and 22 name the own-port boot or its DB in other words: "an isolated boot on a file DB", "discard the isolated DB", "a dogfood-§0 isolated boot". Those 22 sit in 17 items: access-security.platform-owner-email-anchor, automation.connector-dispatch-matrix, automation.packaged-flow-subflow-disable-refusal, automation.packaged-flow-clone-contract, platform-core.boot-health, platform-core.seed-integrity, platform-core.interrupted-migration-boot-report, platform-core.manifest-install-contract, platform-core.activation-ledger-registration-home, platform-core.activation-ledger-row-contract, platform-core.marketplace-install-local-lifecycle, platform-core.runtime-config-boot-read, platform-core.lifecycle-retention-sweep, platform-core.seed-mode-matrix, records-forms.field-group-visible-when, records-forms.field-unique-enforcement and studio-authoring.metadata-diagnostics-sweep. The same reading risk applies. They are outside the claim's file surface, which names the "showcase isolated" spelling, so they are untouched. Carrier: qa(checklist): 18.0 release sweep anchor at 5b14b7f3 — re-point 5 red-row clauses + the wave's checklist-accuracy findings, fixture gaps and not-run handover (18 records) #24579.
  • The dispatch's records-forms.record-page-roundtrip is studio-authoring.record-page-roundtrip: no records-forms item has that id, and PR docs(qa): 18.0 sweep anchor round 14 — drop the eleven automated.stale markers objectui 0b36ffa repaired, re-read at the console pin 616df6598b42 #24857's note names the studio-authoring one.
  • The crud-roundtrip planting recipe and its expected answers (droppedFields naming lead_score with reason readonly, and the clone carrying no lead_score) are derived from source and were not replayed. The verify says so.
  • The objectui specs were read, not run. Their verdicts at cf153eb2e535 are NOT MEASURED.

Gates

The derived list is node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack. It is computed on the actual change set: 10 paths against merge base 4fe3af9d7, at head 6c4b8526af. It gives 13 commands. Each one ran at that head with its exit code captured before any pipe, and each exited 0:

node scripts/check-ci-filter-parity.mjs · node scripts/check-closing-keyword-parity.mjs · node scripts/check-closing-keyword-parity.mjs --self-test · node scripts/check-comment-mask-corpus.mjs · pnpm --filter @objectstack/lint run check:doc-formula-expressions · pnpm check:cross-package-test-inputs · pnpm check:doc-authoring · pnpm check:driver-memory-census · pnpm check:gitlink-declared · pnpm check:nul-bytes · pnpm check:platform-checklist · pnpm check:refd-timer-probe · pnpm check:watch-hint-literal

The first run of check:doc-formula-expressions refused with exit 3, a prerequisite: @objectstack/formula and @objectstack/lint were not built. Both were built under the shared verify lock (VERDICT command-exit 0, held 101 s, waited 0 s), and the rerun exited 0. The --ran reconciliation reads "13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN".

No per-PR CI job runs pnpm check:platform-checklist, so this local reading is its evidence:

reading base e4d604efd3 head 6c4b8526af
items 16 areas, 328 items (323 active, 1 planned) 16 areas, 328 items (323 active, 1 planned)
line citations 0 survive across 21 swept documents 0 survive across 21 swept documents
symbol anchors 975/985 against 433 cited sources, 10 on the named residual (#16898), 18 file floors held 975/985 against 433 cited sources, 10 on the named residual (#16898), 18 file floors held

The new texts add no symbol anchor and no line citation.

git merge-tree --write-tree origin/main HEAD exited 0 against 4fe3af9d7e. No open PR touches docs/qa/platform-checklist/. All 14 open PRs' file lists were read over REST; the three with more than 100 files were read page by page, at 349, 367 and 206 files, each equal to its changed_files. So there was no second merge-tree to run.

There is no ablation, because no tested behaviour changed. skip-changeset was re-measured: docs/qa/** appears in none of the 73 non-private manifests' files[] (86 tracked package.json files), and the repo root is private.


Generated by Claude Code

claude added 11 commits October 20, 2026 23:20
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
Checklist text only: each edited item takes one revision bump and one
history row, whose ref is the placeholder #PENDING-24579R17 until a
later commit swaps in this PR's number.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 20, 2026
…lder ref for #25003

Each of the 85 new history rows named #PENDING-24579R17 because the PR
had no number yet. This commit replaces that string and nothing else.

Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Seat review

ACCEPT · domain:devx seat 1 · os-warren · session_01FM29ZqLTrnPNXxijioZwMp · 2026-10-20T23:48Z · head fc6d8f5628 · card #24579, round 17 (claim 6303585734)

  • Form. Draft, base main. The first line is Refs #24579, then Clause-②: no. Assignee os-warren; labels size/l, skip-changeset. node scripts/pm/check-governed-merges.mjs --pr 25003 → NOT governed. git merge-tree against main 4fe3af9d7e is clean, and no other open PR touches docs/qa/platform-checklist/.

  • Ledger invariants, parsed, merge base 4fe3af9d7e vs head.

    • 10 area files, 85 items. Each has exactly one revision bump and one appended history row with ref: "#25003".
    • No item is added, removed or reordered, and no top-level key changes. RUNNER.md is untouched.
  • The respelling, checked by the seat. The seat compared every non-history string of every edited item at base and head:

    • 79 occurrences of isolated leave edited strings, and all 79 are the "showcase isolated" spelling of the own-port boot;
    • 0 removals reach a posture text.

    The new spelling, "boot the showcase on its own port and DB", names the boot and not a posture. The one hit that named the canonical boot line keeps RUNNER's own term.

  • The findings, read.

  • Deviations accepted. These are the edits inside named items that keep each item consistent with its own edit, plus the item-id correction for record-page-roundtrip. The PR body cites the gates at 6c4b8526af; the dev re-ran all 13 at the final head with the same result.

  • Gates.

    • The seat ran node scripts/check-platform-checklist.mjs at the head. Exit 0: 16 areas, 328 items (323 active, 1 planned), line citations: 0 survive across 21 swept documents, symbol anchors: 975/985 resolved, 18 file floors held.
    • The dev's dispatch-gates union is 13 derived, 13 run, all exit 0; --ran reconciles.
    • Check-runs at fc6d8f5628: 40, 31 success, 9 skipped, 0 failing or pending. node scripts/pm/check-expected-skips.mjs --pr 25003 → OK. No review, no comment.
  • Carried (the dev's out-of-scope findings):

    • approvals.record-page-decisions: its steps and clauses still describe the record header's hand-written Approve/Reject, which objectui#3055 retired before both pins. The item needs re-deriving against DeclaredActionsBar.
    • automation.setup-packaged-automation-board steps[3]: the "31 On / 1 Off" count no longer holds, because objectui#13159 shows "Not running here" for an unarmed flow.
    • 22 other non-history texts in 17 items name the own-port boot or its DB with "isolated" in other words.

This seat readies the PR and queues it with auto-merge.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 23:49
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 23:49
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 93e6c1a Oct 21, 2026
41 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24579-v18-sweep-round17 branch October 21, 2026 00:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/l 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.

2 participants