chore(spec): the field-file collection proof stops being an orphan tag - #4298
Merged
Conversation
`packages/qa/dogfood/test/field-file-collection.dogfood.test.ts` declares `@proof: adr0104-field-file-collection`, but the ADR-0054 registry never learned about it — so the liveness gate has been warning on every run since #4285 landed the test: ⚠ 1 unregistered dogfood proof tag(s) — add to proof-registry.mts That warning is the registry's reverse-integrity leg doing exactly its job: an orphan tag means a proof was written but never wired into the high-risk class list, so nothing connects the test to the surface it guards. Registered as **honestly unbound**, not bound. The collection contract the proof exercises is the `lifecycle` ttl declared on the SYSTEM object `sys_file` (service-storage), not an authorable per-type property — and `object.lifecycle` is already bound to `data-lifecycle`, which carries one `proof` ref. The rest of the route (exclusive ownership, release-on-write, the per-deployment migration gate) is service code with no authorable surface to govern, so there is no other entry to bind instead. Faking a binding would misrepresent both what the proof covers and what that entry is proven by; `blockedReason` records the reason instead, the same shape as `flow-runas-userless` and `scope-depth-cli-fallback`. Enforcement is therefore unchanged: `BOUND_PROOF_PATHS` skips unbound classes, so the bound-class list and the pinned path map are byte-identical. The only behavioural change is that the gate now runs clean. Verification: `check:liveness` green with the warning gone; liveness script suite 98/98; spec suite 277 files / 7128 tests; `tsc --noEmit` clean. Gate-only change under `packages/spec/scripts/`, which is not in the package's published `files` — empty changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
This was referenced Jul 31, 2026
os-zhuang
added a commit
that referenced
this pull request
Jul 31, 2026
…4331) (#4335) * ci(temporal-conformance): wrap both skewed-zone test steps in run-with-stall-guard (#4331) The two Temporal Conformance test legs still ran bare after #4298 gave Test Core the stall guard, so a mid-suite stall burned the full 30-minute job timeout and ended as an uninformative "The operation was canceled" (#4331: once frozen mid-file in core's kernel.test, once silent for 24 minutes after every suite printed Done). Same wiring and parameters as Test Core: silence past 10 minutes becomes a labeled red naming the last output line, and the guard's process-group kill covers the refused-to-exit shape too. The zone-assert node -e lines stay outside the wrapper — a one-shot print cannot stall. Closes #4331 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HXjVcohpYTsZY7D5p91dJQ * chore: empty changeset — CI-only change, releases nothing Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HXjVcohpYTsZY7D5p91dJQ --------- Co-authored-by: Claude <noreply@anthropic.com>
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.
Follow-up hygiene spotted while verifying #4094: the liveness gate has been printing a warning on every run since #4285 landed the field-file collection dogfood test.
The warning
That is the registry's reverse-integrity leg doing exactly its job. An orphan
@proof:tag means a proof was written but never wired into the ADR-0054 high-risk-class list — so nothing connects the test to the surface it guards, and the test's standing as a proof is asserted only by its own header comment.Registered honestly unbound, not bound
bound: truerequires both a runtime proof and a governed ledger entry to carry it. This class has the first and not the second:lifecyclettl declared on the system objectsys_file(packages/services/service-storage/src/objects/system-file.object.ts), not an authorable per-type property;object.lifecycleis already bound todata-lifecycle(adr0057-lifecycle-bounded-growth), and a ledger entry carries oneproofref;So there is no other entry to bind instead. Faking a binding would misrepresent both what the proof covers and what that entry is proven by, so
blockedReasonrecords the reason — the same shape asflow-runas-userlessandscope-depth-cli-fallback, which are blocked for the identical one-entry-one-ref reason.Enforcement is unchanged
BOUND_PROOF_PATHSskips unbound classes, so the bound-class list and the pinned path map inproof-registry.test.tsare byte-identical — no new CI obligation lands on any ledger entry. The only behavioural change is that the gate runs clean.Verification
pnpm check:liveness— green, warning gone; theprove-it-runsbound-class line is unchanged (still the same 17 labels).unbound classes record an honest blockedReason,every class proofId is in KNOWN_PROOF_IDS).tsc --noEmitclean.packages/spec/scripts/, which is not in the package's publishedfiles— empty changeset.🤖 Generated with Claude Code