Skip to content

chore(spec): the field-file collection proof stops being an orphan tag - #4298

Merged
os-zhuang merged 1 commit into
mainfrom
claude/register-adr0104-field-file-proof
Jul 31, 2026
Merged

chore(spec): the field-file collection proof stops being an orphan tag#4298
os-zhuang merged 1 commit into
mainfrom
claude/register-adr0104-field-file-proof

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

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

⚠ 1 unregistered dogfood proof tag(s) — add to proof-registry.mts:
    @proof: adr0104-field-file-collection (in packages/qa/dogfood/test/field-file-collection.dogfood.test.ts)

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: true requires both a runtime proof and a governed ledger entry to carry it. This class has the first and not the second:

  • the collection contract the proof exercises is the lifecycle ttl declared on the system object sys_file (packages/services/service-storage/src/objects/system-file.object.ts), not an authorable per-type property;
  • object.lifecycle is already bound to data-lifecycle (adr0057-lifecycle-bounded-growth), and a ledger entry 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, so blockedReason records the reason — the same shape as flow-runas-userless and scope-depth-cli-fallback, which are blocked for the identical one-entry-one-ref reason.

Enforcement is unchanged

BOUND_PROOF_PATHS skips unbound classes, so the bound-class list and the pinned path map in proof-registry.test.ts are 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; the prove-it-runs bound-class line is unchanged (still the same 17 labels).
  • Liveness script suite 98/98, including the two registry invariants this entry has to satisfy (unbound classes record an honest blockedReason, every class proofId is in KNOWN_PROOF_IDS).
  • 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.

🤖 Generated with Claude Code

`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>
@vercel

vercel Bot commented Jul 31, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Jul 31, 2026 4:37am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/s labels Jul 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

No hand-written docs reference the 0 changed package(s). ✅

@os-zhuang
os-zhuang merged commit ba672e1 into main Jul 31, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/register-adr0104-field-file-proof branch July 31, 2026 04:58
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant