Repository navigation
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
Conversation
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>
Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…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>
Seat reviewACCEPT ·
This seat readies the PR and queues it with auto-merge. Generated by Claude Code |
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 objectuicf153eb2e535, round 14's widening candidates (PR #24857), and round 12's "showcase isolated" spellings (landing record6287983829).Only checklist text changes. 85 items in 10 area files each take one
revisionbump and onehistoryrow, and each row names its source and finding. There is no product code, test, pin, changeset text orRUNNER.mdchange, and no new item.e4d604efd3.origin/main4fe3af9d7eis merged in6c4b8526af. Its five commits touch nodocs/qa/**path and none of the sources these edits cite.git showfrom a full scratch clone (--is-shallow-repositoryfalse).revisionand the one new history row.#PENDING-24579R17, because a row'srefnames 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
e4d604efd3cli.dev-automigrate-policyautomated.ref;fixtures.knownGaps[2]removedacceptance[2]at the driver layer, partial;steps[3]'s production boot stays the live legsql-driver-schema-drift.test.ts(blob1f2ed8c72ca2): underNODE_ENV=productionwithautoMigrate: 'safe',SqlDriver.initObjectsover in-memory better-sqlite3 keeps acurrent_usercolumn DEFAULT, still reports itsafe/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 isreconcileAndWarnDriftinsql-driver.ts.records-forms.crud-roundtripacceptance[6](clause, verify, evidence);automatedremoved;fixtures.knownGaps[1]addedautomated, never as blocked(fixture) … no live run can stage it" → drive it at the clone door on a source row whoselead_scorethe run planted in its own file DB with node:sqlite, elseblocked(fixture). The pins move toknownGaps[1]as evidence of their own layers, andautomatedgoes, because no pin holds a full clauseprotocol.readonly-insert.test.tsdrivescloneDataover a stub engine.engine-insert-static-readonly-strip.test.tsdrives a real engine over a recording driver, with no HTTP.cloneData(protocol.ts) copies the source row whole intoengine.insertand answers the engine's drop asdroppedFields.lead_scoreisreadonlywith nodefaultValue(contact.object.ts).automated.refclaims "acceptance[0]'s NARROWING half ONLY"cli.datasource-introspect-codegenautomatedremoved;fixtures.knownGaps[3]added;knownGaps[2]andacceptance[0].verifyre-pointedautomatedmay return (round 15's form)remote-tables-twin.equivalence.test.ts: the realExternalDatasourceServiceover a fake introspector, through the realHonoHttpServer(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.6290946648: "a second signed-up user"records-forms.record-discussion-mentionspersonas[1],fixtures.knownGaps[0]blocked(fixture)without one → a user the admin mints withPOST /api/v1/auth/admin/create-user, which then changes its password; ⛔ neverblocked(fixture)on the 403audience-posture.tsresolveAudience: noauth.audiencedeclared ⇒invite_only, and an uninvited sign-up answers 403SELF_REGISTRATION_CLOSED.admin-user-endpoints.tsrunAdminCreateUser:mustChangePassworddefaults true.steps[13](revision 5) already uses this door.approvals.record-page-decisionssource[2];fixtures.knownGaps[0]addedRecordDetailView.approvalDecisionActions.test.tsx→ objectuiRecordDetailView.approvalDeclaredActions.test.tsx(blob9519ae70f743), plus this repo'ssys-approval-request.object.test.tsfor the one-dialog half; the knownGap says that the rest of the item still describes the retired header buttons99782f961(objectui#3055) deleted the file and retiredbuildApprovalDecisionActions, moving the record page ontosys_approval_request's declared actions. It is an ancestor of616df6598b42and ofcf153eb2e535(exit 0, exit 0; control,cf153eb2e535as an ancestor of99782f961: exit 1).automation.setup-packaged-automation-boardPackagedAutomationPage.test.tsxb321640a6100→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.tsxis unchanged.records-forms.crud-roundtripacceptance[4].verify616df6598b42→cf153eb2e535e2e/live/record-history-display.spec.tsis blob7ebc45106cffat both pinsstudio-authoring.first-run-loopacceptance[0].verify.objectui-sha 616df6598b42→cf153eb2e535e2e/live/studio-object-designer.spec.tsis blob58a7f1cbf024at both pins.studio-pkg-chip,package-form-id-inputandpackage-form-submitare still declared in app-shell'sStudioDesignSurface.tsxandPackageFormDialog.tsx. Over the range,e2e/live/changes onlyci/backend.env.studio-editorstudio-authoring.record-page-roundtripautomated.ref;acceptance[1].verifye2e/live/studio-editor.spec.tsforacceptance[1], carrier-neutrally19f9cc131654) drives the live editor and asserts that the dialog offers Card, Section and Record details, which isacceptance[1]'s whole dom oracle. It edits a copy ofshowcase_project_workspace, an app page, but the picker offers one static catalogue whatever the page:AddBlockButtonreadsTYPES_BY_CATEGORY(objectuiblock-types.ts).steps[0], orsteps[1]in three items)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
isolatedtenancy posture. The clearest case isaccess-security.activation-write-operator-gatesteps[0], which read "boot showcase isolated; … PROVE the posture issingle". The 80th hit is a history row (access-security.sharing-rules-widenhistory[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 forshared-browser-tabis "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 serveincluded (records-forms.encrypted-field-behavior).boot showcase isolatedboot the showcase on its own port and DBboot showcase isolated against a file DBboot the showcase on its own port against its own file DBboot showcase isolated on …boot the showcase on its own port and DB, on …boot the showcase isolatedboot the showcase on its own port and DBboot showcase isolated (own port + file DB per dogfood skill §0)and its comma twinboot the showcase on its own port and file DB (dogfood skill §0)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)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
integration-system.datasource-admin-lifecycle(PR docs(qa): 18.0 sweep anchor round 16 — QA round 4's remaining checklist findings and round 15's carried rule-6 texts #24963 (d)): neither pin is added, because neither holds its clause's whole oracle at that clause's layer.admin-routes-auth-guard.test.tsdrives all 11 routes three times on one realHonoHttpServermount: anonymous 401UNAUTHENTICATED, unentitled 403PERMISSION_DENIEDnaming the capability, entitled success, and the service method never called on a refusal. But itsauthservice is a double (createSessionAuthService), and its grants come from an engine double (createGrantsEngine, "the RBAC tablesresolveAuthzContextreads, as a minimal engine double").acceptance[1]is an api clause on a booted server, so the pin holds its route-layer half only. The ref's sentence "Neither drives the capability floor … drive os dev for every api clause" stays true of the two pins it names.datasource-route-ledger.conformance.test.tsenumerates the registrar against a capturing mockIHttpServerand compares the result withDATASOURCE_ROUTE_LEDGER. That isacceptance[8]'s ledger half, which itsverifyalready cites. The 404RESOURCE_NOT_FOUNDhalf is never driven, so it holds no whole clause.records-forms.master-detail-atomic-save(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'sform-view-subformscandidate): no widening. Atcf153eb2e535(blob9485f378abd7) the spec drives the stock New Invoice dialog with ONE line. It records only/api/v1/batchrequests, readsbatches[0]and never counts them. It asserts the parent op, a{$ref: 0}child, the auto-filled description and unit price, and the computed amount in the payload, and it re-reads nothing. So it missesacceptance[0]'s "one batch, not N writes" and two lines,acceptance[5]'s stored-row read, andacceptance[1]and[2]entirely. The ref keepsacceptance[4].automation.setup-packaged-automation-boardautomated.ref: confirmed, as the table says. The item's revision bump is itssteps[0]respelling, and its history row records the confirmation.auth.emailAndPassword.resetPasswordTokenExpiresIn; the fixture gaps of QA run · upgrade:ceremony (9/9) · 307ce4c4 · 2026-10-20 · 6 PASS / 3 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #24838 and QA run · t2:24681-touched (28/28) · 307ce4c4 · 2026-10-20 · 12 PASS / 16 PARTIAL / 0 FAIL / 0 BLOCKED / 0 NOT-RUN #24841.PM hypotheses, measured
form-view-subforms.spec.tswidens nothing (above).studio-editor.spec.tsassertsacceptance[1]ofstudio-authoring.record-page-roundtripwhole at its layer, so that ref widens.Acceptance notes
approvals.record-page-decisionsfixtures.knownGaps[0]. Oncesource[2]names the declared-actions test, the steps and clauses contradict it. They describebuildApprovalDecisionActions(approve_request/reject_requestinrecord_header, ordered -100 / -99, behind a client-sidecanDecide). Atcf153eb2e535the record page renderssys_approval_request's declared actions throughDeclaredActionsBarabove the page body:approval_approve,approval_rejectand the other levers atrecord_section, gated by the server'sviewerblock. 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:automatedis removed under round 15's rule, the same reading the dispatch names for (b).acceptance[6].evidencenames the planted-row evidence.cli.datasource-introspect-codegen:knownGaps[2]andacceptance[0].verifysaid "the pins inautomated", and now point atknownGaps[3].automation.setup-packaged-automation-boardsteps[3]reads "confirm every switch reads On … 31 On / 1 Off". Atcf153eb2e535the Activation cell reads "Not running here", with the switch still checked, for a flow the engine left unarmed (objectui#13159,packagedFlows.tsactivationReading). On a default boot the engine reports a deployment-policyunboundCauseforshowcase_scheduled_digestandshowcase_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.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-enforcementandstudio-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.records-forms.record-page-roundtripisstudio-authoring.record-page-roundtrip: norecords-formsitem 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 thestudio-authoringone.droppedFieldsnaminglead_scorewith reasonreadonly, and the clone carrying nolead_score) are derived from source and were not replayed. The verify says so.cf153eb2e535are 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 base4fe3af9d7, at head6c4b8526af. 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-literalThe first run of
check:doc-formula-expressionsrefused with exit 3, a prerequisite:@objectstack/formulaand@objectstack/lintwere 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--ranreconciliation 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:e4d604efd36c4b8526afThe new texts add no symbol anchor and no line citation.
git merge-tree --write-tree origin/main HEADexited 0 against4fe3af9d7e. No open PR touchesdocs/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 itschanged_files. So there was no second merge-tree to run.There is no ablation, because no tested behaviour changed.
skip-changesetwas re-measured:docs/qa/**appears in none of the 73 non-private manifests'files[](86 trackedpackage.jsonfiles), and the repo root is private.Generated by Claude Code