Repository navigation
docs(qa): 18.0 sweep anchor round 15 — QA round 4's ref-accuracy findings, scored per RUNNER rule 6 (a pin scores only the layer it drives) - #24891
Merged
objectstack-fleet[bot] merged 11 commits intoOct 20, 2026
Conversation
migrate-plan-apply-json and verify-verdict-exit-mapping drop automated (their unit pins score no CLI-exit or payload clause) with a knownGaps line each; dev-automigrate-policy's ref names the clauses each driver pin scores, adds sql-driver-unique-tenancy.test.ts, and records the production force-off case as a defective pin that scores nothing. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…NNER rule 6 field-unique-enforcement's ref names what its driver pins score and stops claiming REST; acceptance[1]-[3] and steps[4] cite those pins as driver-level evidence. encrypted-field-behavior's engine pin scores no api clause, and acceptance[3] is blocked(fixture) on stock. cascading-multilevel-and-clear scores acceptance[1] from the objectui spec's live-API case, not the validator unit pin. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…NNER rule 6 connector-stdio-default-deny's ref narrows to negative[0]; webhook-lifecycle drops automated (its dogfood pin asserts half of acceptance[0]); the drift gate's ref names the test-oracle clauses its plugin pins score, and its "unit fallback" texts cite those pins as plugin-layer evidence beside a blocked(fixture) verdict; datasource-admin-lifecycle's second pin is respelled as a full path. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
dataset-report-authoring's bare ref narrows to acceptance[0]; empty-null-bucket-boundaries adds the empty-group-bucket-parity suite its acceptance[4] verify already names. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…rule 6 protocol-18-handshake narrows to its test-oracle clause; the package-first dogfood pin scores no clause of metadata-authoring-roundtrip (it calls protocol.saveMetaItem in-process); settings-audit's ref narrows to the no-keyed-digest arm; lifecycle-retention-sweep says acceptance[5] is the enumSource ratchet's, not the pin's. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…d, trigger matrix's negative[0] pin note narrowed Ledger text only; see the round-15 PR body for the per-finding table. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…rops its handler-direct automated ref Ledger text only; see the round-15 PR body for the per-finding table. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…3023 plugin-security case Ledger text only; see the round-15 PR body for the per-finding table. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
… per RUNNER rule 6 Ledger text only; see the round-15 PR body for the per-finding table. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
…lder The 21 new history rows were committed with the placeholder ref; this swaps in the PR's number and changes nothing else. Claude-Session: https://claude.ai/code/session_01FM29ZqLTrnPNXxijioZwMp Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 20, 2026
Contributor
Author
Seat reviewACCEPT ·
This seat readies the PR and queues it with auto-merge. Generated by Claude Code |
objectstack-fleet
Bot
deleted the
claude/issue-24579-v18-sweep-round15
branch
October 20, 2026 14:04
This was referenced Oct 20, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #24579
Clause-②: no
Round 15 of the 18.0 sweep's wave anchor (claim
6290925424, PM loop round 25). It applies the "Checklist-accuracy findings / fixture gaps" section of QA round 4's Tier 1 record (#24840, framework307ce4c4) under RUNNER rule 6, "A pin scores only the layer it drives" (RUNNER.mdrule 6, landed by PR #24811), and round 6's theme-B rule (PR #24697).Only checklist text changes. 21 items in 9 area files each take one
revisionbump and onehistoryrow, and each row names #24840 and the finding. There is no product code, test, pin, changeset text orRUNNER.mdchange.records-forms.record-discussion-mentionsis untouched.b1676441ba, which is PR qa(checklist): records-forms.record-discussion-mentions — @mention recipients gated on read access (the clause #24802 deferred) #24869's merge commit.origin/main98c3d00447is merged inc4da0e622band touches nodocs/qa/**path.revisionand the one new history row; and the text outside the edited items is byte-identical. A whole-branch check against the base agrees: 21 items changed, each with revision +1 and exactly one appended row.#PENDING-24579R15, 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.How rule 6 was applied
automatedis removed and afixtures.knownGapsline says what the pin does assert and whenautomatedmay return. That happened on 6 items.blocked(fixture)with the pin beside it. It is never scored pass.Changes
b1676441ba(test, layer)cli.migrate-plan-apply-jsonautomatedremoved;fixtures.knownGaps[0]addedpackages/cli/src/utils/format.exit-code.test.ts: emitJson / emitText in-process (unit). acceptance[2] scoresecho $?after each subcommandcli.verify-verdict-exit-mappingautomatedremoved;fixtures.knownGaps[1]addedverify-tenancy-posture.test.ts:resolveVerifyMultiTenantonly (unit; its docblock says it is not an end-to-endos verifyrun)cli.dev-automigrate-policyautomated.ref;fixtures.knownGaps[2]addedsql-driver-schema-drift.test.ts→sql-driver-unique-tenancy.test.tsfor acceptance[4] and negative[2], plussql-driver-schema-drift.test.tsfor negative[0] only; the production force-off case scores nothing (knownGap)records-forms.field-unique-enforcementautomated.ref;acceptance[1..3].verify;steps[4]blocked(fixture)SqlDriverand map the refusal through a test-localcreateAsApihelper (driver);memory-unique-constraint.test.ts(memory driver)records-forms.encrypted-field-behaviorautomated.ref;acceptance[3].verify;fixtures.knownGaps[1]secret-fields.test.tsscores no api clause. acceptance[3] "unit-pin verdict" →blocked(fixture)on stock, pin beside itfield-zoo-roundtrip.dogfood.test.ts(HTTP door, showcase in-process);secret-fields.test.ts(engine over a stub driver)records-forms.cascading-multilevel-and-clearautomated.ref;acceptance[1].verifye2e/live/cascading-options.spec.ts"the server rejects an out-of-set option value, and accepts an in-set one" (HTTP door, live backend), blob5f65228948b7at the console pin616df6598b42;rule-validator.option-visibility.test.ts(unit)integration-system.connector-stdio-default-denyautomated.refmcp-provider.test.ts"DENIES a declarative stdio transport by default, as a plain (non-retryable) fault" (provider unit over a fake client factory)integration-system.webhook-lifecycleautomatedremoved;fixtures.knownGaps[2]addedwebhook-materialization.dogfood.test.ts: acceptance[0]'s no-row half on its own fixture stack (engine); no activation doorintegration-system.external-schema-drift-gateautomated.ref;acceptance[0]andacceptance[3](verify, evidence);fixtures.knownGaps[0]blocked(fixture)verdict; the ref names acceptance[4]–[6] and negative[2] and [4]ExternalValidationPluginover stubbed services (plugin unit)integration-system.datasource-admin-lifecycleautomated.refdashboards.dataset-report-authoringautomated.refdashboard-designer-roundtrip.dogfood.test.ts: draft PUT 200, publish 200 (HTTP door); the read-back checks widget count and missing layout, not acceptance[1]dashboards.empty-null-bucket-boundariesautomated.refempty-group-bucket-parity.test.tsfor acceptance[4]platform-core.protocol-18-handshake-and-stored-replayautomated.refpackages-install-protocol-incompatible.test.ts(HttpDispatcher.handlePackagesover a fake kernel); artifact pin (mocked logger); the rest in-processplatform-core.metadata-authoring-roundtripautomated.ref;acceptance[3].verifypackage-first-authoring.dogfood.test.ts:protocol.saveMetaItemin-process on a booted CRM stack, no/api/v1/metadoorplatform-core.settings-audit-secret-fingerprintautomated.refsettings-audit-secret-digest.test.ts:SettingsServiceover stub audit sinks (service unit)platform-core.lifecycle-retention-sweepautomated.ref;acceptance[5].verifycheck:platform-checklist, which countsLifecycleClassSchemaonlylifecycle-service.test.tsover a fake engineautomation.flow-node-type-matrixautomatedremoved;fixtures.knownGaps[2]addedflow-node.dogfood.test.ts: one update_record nodeautomation.trigger-type-matrixnegative[0]showcase-anonymous-deny-surfaces.dogfood.test.ts"anonymous POST /automation/:name/trigger is denied (401)" (HTTP door), which reads no run rowsattachments-storage.field-accept-maxsize-server-enforcedautomatedremoved;fixtures.knownGaps[3]addedfile-reference-lifecycle.test.ts"accept / maxSize enforcement" (handler-direct over a fake engine), round 12's update-path case includedidentity-auth.admin-lifecycle-operationsautomated.refsecurity-plugin.test.ts"[#3023] an engine referential FK clear (__referentialFieldClear) is exempt — owner_id:null cascade is allowed for a plain member" (plugin unit)approvals.decision-action-matrixautomatedremoved;fixtures.knownGaps[0]rewritten,[1]added;acceptance[9].verifyblocked(fixture)on stock, two lower pins beside it; negative[1] joins no refapproval-service.test.ts#12769 describe and its remind THROTTLED cases (service over a fake engine);rest-approvals-wire-codes.test.ts(route handler over a mocked service)The defective pin, for the PM to file
packages/drivers/driver-sql/src/sql-driver-schema-drift.test.ts, the case "is force-disabled under NODE_ENV=production (warns, does not alter)", stagesrelax_not_null. ADR-0113 made that opneeds_confirm, and a safe reconcile applies onlysafeops. So the column stays NOT NULL with or without the production branch ofreconcileAndWarnDrift(packages/drivers/driver-sql/src/sql-driver.ts). The sibling case "does NOT auto-relax a stray NOT NULL — needs_confirm survives dev auto-reconcile" asserts the same outcome with noNODE_ENVset. The case also asserts no warning. #24840 names the repair: stagereplace_unique_indexand assert the warning. This PR does not touch the test. The ledger now scores nothing from that case and records it in the item'sknownGaps[2].Items left alone, with reasons
records-forms.list-view-capabilities(Tier 1 in name only): no longer holds. Round 14 (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) removed the stale marker, and the ref claims acceptance[1] from objectuisaved-view-filter.spec.ts(blob94a201c63a0aat616df6598b42). That spec opens the shippedin_progressview on the live stack, asserts the count bar reads 2, and asserts that no data request was refused. A rule-array filter is refused 400, so the green is the AST filter being accepted.records-forms.related-list-server-pagination("its only pin is stale"): no longer holds. Round 14 removed the stale marker after reading the repaired spec, and the ref claims acceptance[2] only.attachments-storage.field-accept-maxsize-server-enforced: the finding still holds, so it was applied above. Round 12 added an acceptance[3] case at the same handler-direct layer, which did not settle it.automation.trigger-type-matrixref: the dogfood case asserts the 401 but not "with NO run row created", so it is not added to the ref. negative[0] says which half it pins.approvals.decision-action-matrixnegative[1]: not added. The service pin throws THROTTLED and the route pin maps a mocked rejection to 429, but neither drives the remind door. "A silent second success" is that door's answer.identity-auth.admin-lifecycle-operationsacceptance[5]: the added case is its exemption half. Its refusal half stays partly by hand, becauseadmin-platform-admin-standing.dogfood.test.tsre-reads the targetsys_userbut never the rows that user owns.records-forms.field-unique-enforcementacceptance[4]'s clause still says "the same 409 UNIQUE_VIOLATION over REST". Its oracle istest, and the ref now says that wording rests on thecreateAsApimapping. Clause text was not changed in this round.integration-system.datasource-admin-lifecycle: only respelled, as QA run · tier1:24681-touched (63/82) · 307ce4c4 · 2026-10-20 · 10 PASS / 53 PARTIAL / 0 FAIL / 0 BLOCKED / 19 NOT-RUN #24840 asked. Its ref's scope ("pins route behavior + envelope") is not narrowed per clause.platform-core.metadata-authoring-roundtripkeepsautomated.kind"api", although its remaining full-clause pin is an objectui live spec.kindis free text that no gate reads.encrypted-field-behavioracceptance[3] and negative[1] (engine),settings-audit-secret-fingerprintnegative[0]–[1] (rows on stub sinks), andapprovals.decision-action-matrixnegative[1] (service). Under the rule above, each is now evidence beside a hand-driven orblocked(fixture)verdict.PM hypotheses, measured
Acceptance notes
encrypted-field-behavioracceptance[3] was a "unit-pin verdict". It is nowblocked(fixture)on stock.approvals.decision-action-matrixacceptance[9].verify saidREAD_BACK_FAILEDrides the generic template-generated 500 and is deliberately absent fromhandleApprovalError's prefix map. It has been a named 500 row there since5b3ff63cc(packages/rest/src/approvals-routes.ts), andrest-approvals-wire-codes.test.tspins it. The verify now says so, because the rewritten knownGap would otherwise contradict it.api-backend.packaged-action-disabled-dispatchknownGaps[0] (the MCP clause's unit fallback);automation.packaged-flow-subflow-disable-refusalknownGaps[0] (engine-pinned arms of api clauses);cli.datasource-introspect-codegenacceptance[0].verify (a log clause's half);integration-system.connector-auth-kind-applicationacceptance[0].verify and knownGaps[0] (wire-shape clauses);approvals.email-action-token-doorknownGaps[0] andapprovals.act-door-and-admin-rescue-slaterequires[1] (legs scored from pins; their clause oracles are mixed).test-oracle:access-security.activation-write-operator-gate,identity-auth.implicit-account-linking-ownership,records-forms.delete-behavior-matrixandrecords-forms.field-history-tracking.616df6598b42. No live run exists at that pin, so their verdicts there are NOT MEASURED. objectui measured the live suite green at0b36ffa(61 passed), and the blobs are identical at both commits.approvals.decision-action-matrix's clauses whole, on a booted showcase, was not measured. The approval dogfood suites in the tree pin other items' fixture stacks.Gates
The derived list is
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, computed on the actual change set: 9 paths against merge base98c3d0044, at headc4da0e622b. 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, because@objectstack/formulaand@objectstack/lintwere not built. Both were built under the shared verify lock (VERDICT command-exit 0), 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:b1676441bac4da0e622bPR #24869 merged as
b1676441ba, this branch's base.git merge-tree --write-treeof this head against its head45f8e20bcastill exited 0.There is no ablation, because no tested behaviour changed.
skip-changesetwas re-measured:docs/qa/**appears in none of the 86 package manifests'files[], and the repo root is private.Generated by Claude Code