docs(metadata-protocol): re-point the seed-exemption falsification instruction at its proven lever - #18634
Merged
huangyiirene merged 1 commit intoSep 17, 2026
Conversation
…struction at its proven lever
The comment told a future debugger to revert `seedReplay` in `SEED_OPTIONS`.
`SEED_OPTIONS` is now `{ context: SEED_WRITE_EXECUTION_CONTEXT }`, so that flag
is no longer there to revert and the runnable falsification procedure reads as
stale.
Which of the two candidates in `execution-context.zod.ts` is the lever was
measured, not read: deleting `seedReplay: true` from the VALUE turns both cases
red (2 failed), while making the SCHEMA FIELD `seedReplay: z.boolean().optional()`
required leaves both green (2 passed) — each leg rebuilt `@objectstack/spec` and
proved the mutation reached `dist/`, since this suite resolves that dep through
its export map. The comment now names the VALUE, the rebuild step, and the
schema field as the decoy it measured to be one.
Comment-only: no assertion, behaviour or published surface changes.
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CqmCgU5RGDoJYhHUMVp2af
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
huangyiirene
marked this pull request as ready for review
September 17, 2026 11:35
huangyiirene
deleted the
claude/issue-17938-seed-options-falsification-address
branch
September 17, 2026 12:01
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.
Fixes #17938
Clause-②: no
Comment-only repair of a runnable falsification instruction in
packages/metadata-protocol/src/seed-loader-state-machine-exempt.test.ts. One file, +12/-2,all of it inside the file's leading block comment. No assertion changed, no behaviour changed.
The stale instruction
The comment told a future debugger: "Revert the
seedReplayflag inSEED_OPTIONSand bothcases below go red".
SEED_OPTIONSis now{ context: SEED_WRITE_EXECUTION_CONTEXT }(
seed-loader.ts:2112, imported at:17from@objectstack/spec/kernel), so there is noseedReplayinsideSEED_OPTIONSleft to revert. The procedure is not wrong, it moved — andthe natural next move, "this comment is stale, ignore it", discards a correct falsification
procedure that still works at a different address.
Which lever — measured, not read
packages/spec/src/kernel/execution-context.zod.tsholds two plausible candidates, and the carddid not disambiguate them. Both were ablated, each leg rebuilding
@objectstack/specand provingon disk that the mutation reached
dist/before its colour was read — this suite has no vitestalias for that dep, so it resolves it through the export map, i.e. through
dist/.seedReplay: truefromSEED_WRITE_EXECUTION_CONTEXT(:519)seedReplay: trueabsent from all 216 built filesseedReplay: z.boolean().optional()(:393) requiredseedReplay: z.boolean().optional()absent from all 216 built filesLeg A failures, both cases, as the comment now promises:
Leg B, same rebuild discipline, same two cases:
So the schema field is a decoy: it governs what is ACCEPTED, not what the loader SENDS. A
falsification instruction naming it would be worse than the stale one it replaces — a debugger
flips a
.optional(), nothing happens, and the vacuous pass reads as a completed falsification.The new comment therefore names the VALUE, names the rebuild step, and names the schema field as
the decoy it was measured to be.
Both legs restored from
HEADand verified by blob hash plus a whole-treegit status --porcelain, and@objectstack/specwas rebuilt on the restore leg with the marker proven backin
dist/, so nothing of either ablation survives in this tree or in the built artifacts.Verification
Taken at
8a4d82c833, which is this branch's final head.dispatch-gates.mjs --repo objectstack-ai/objectstack --ran:51 derived, 48 run, 3 NOT-MEASURED, 0 UNRUN. 47 of the 48 exited 0.
check:dual-build-cjs-loads,check:lean-entry-closureandcheck:type-check-debt, each exit 3 =PREREQUISITE NOT MET(they read built output of thewhole repo; a full
pnpm buildis CI's run, not this card's).check:cross-package-test-inputs(exit 1). It is the known gate defect[finding]
check:cross-package-test-inputsexits 0 or 1 on the same commit depending on whether adist/exists — and lint.yml runs it with no build ahead of it, so CI only ever sees the blind leg #18621 — its verdict follows build state, not this diff: it namespackages/cli/test/init-created-files-summary.e2e.test.tsdescending intopackages/spec/dist/, and this diff's only path appears nowhere in its output.pnpm --filter @objectstack/metadata-protocol typecheck— exit 0.tsc --listFilesconfirmsthe edited file is one of the 744 files in that program, so the green covers it.
pnpm --filter @objectstack/metadata-protocol test— exit 0. 178 files passed / 3 skipped,2548 tests passed / 19 skipped.
pnpm lint(eslint . --no-inline-config) — exit 0, whole repo, 110s. No narrowing was needed,so no narrowing is claimed.
origin/mainby 3 commits (scripts/pm/check-widening-tells.mjsmoved in that range). The count above is the reading at this branch's head, stated as such.
Changeset
None —
skip-changeset, measured rather than assumed.@objectstack/metadata-protocol'sfiles[]is["dist", "README.md", "CHANGELOG.md"]. After building the package,enforceInitialStates— a symbol unique to the edited test file — has zero hits across all three, while the positive
control
SeedLoaderServiceis present in 5 built files. Nothing that ships moves.Acceptance notes
Out-of-scope findings from this round, none of them class (a)/(b)/(c), so none filed:
seed-loader.ts:866and:2223readSeedLoaderService.SEED_OPTIONS as any,erasing the
ExecutionContexttyping the constant carries at its declaration. Nothing is wrongat runtime and no declared contract is violated, so this is an observation, not a defect.
Who would meet it: the next PR that touches the loader's write path. Nothing is queued on it
today.
output, because case 1 fails on
result.successbefore it reaches any row count. It is correctby construction of the fixture (1 of the 5 seed rows is born
planned, which is the only memberof
initialStates), so it was kept unchanged rather than re-derived. Who would meet it: whoevernext runs the procedure. It will hold for them.
Generated by Claude Code