Repository navigation
Full-corpus production verification and sign-off - #46
Merged
Merged
Conversation
stele.verification checks a new sandbox setup against today's
bubblewrap-only baseline on the whole corpus, then records a named sign-off.
- corpus: stele.corpus v1 pins every regular file by SHA-256 and lists
everything left out (symlinks, FIFOs, unreadable files); check() catches
drift.
- campaign: every document through the baseline and each candidate lane
(bubblewrap, oci-runc, oci-runsc, oci-runc-gpu, wasmtime; script, packaged
or Wasm parsers), each backend forced. Input hashes are checked against the
manifest, successful runs are sealed, and every observation (failures with
their structured reason and telemetry) goes to a resumable, fsynced journal.
- report: re-checks every sealed record against the ledger, archive, corpus
and extraction resolver; compares candidates with the baseline (identical,
equivalent under the parser's policy, diverged, regression, recovered,
consistent failure, failure mismatch); applies gates. Comparison findings
can be waived with a reason; integrity problems cannot.
- sign-off: rebuilds the report from its inputs and refuses anything that
differs, failed or no longer holds. It stores the report in the archive and
appends verification.signed_off to the hash-chained event log;
check_sign_off reports a stale sign-off once a covered record is
invalidated.
- CLI: python -m stele.verification {corpus,run,report,sign-off,check,list}.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013P1MkGppjFZfBUKsToHzez
The report trusted the journal for which sealed record a lane produced and checked only that the record was the named run of the right parser over the right document. So a journal whose candidate lines cited the baseline's records made a diverging candidate IDENTICAL on every document, and sign_off() accepted the result (its rebuild reads the same journal). _RecordChecker now also requires, from the ledger: - record.backend is the backend of the lane that claims it; - record.parser_config has the campaign's parser_config_digest; - no other document or lane claims the same record. Any of these is an integrity problem (records_verified), never waivable. Two regression tests forge the journal both ways; both fail without the fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013p3FU6gUJ1MGinnmEgvHsm
Owner
Author
|
Review: I found and fixed one integrity gap, in 0988c1f. A lane could claim another lane's record. The report trusted the journal for which sealed record a lane produced. It checked only that the record was the named run, of the right parser, over the right document. I rewrote a journal so the candidate's lines cite the baseline's records, and reproduced this:
A violation is a The rest looks sound:
Full suite: 852 passed, 89 skipped. Generated by Claude Code Generated by Claude Code |
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.
Adds the #15 item "Full-corpus production verification and sign-off. The baseline is today's bubblewrap-only setup."
stele.verificationchecks a new sandbox setup against the current baseline on the whole corpus, then records a named person's sign-off on the result. The runbook isdocs/verification.md.Steps
corpus.py,stele.corpusv1).check()catches changed, missing or added documents.campaign.py). Every document goes through the baseline lane and each candidate lane; the backend is always forced, never auto-selected.bubblewrap,oci-runc,oci-runsc,oci-runc-gpuandwasmtime.report.py,stele.verification-reportv1).SEALED, and the same run, parser and input the journal names;identical,equivalent(under the parser's replay policy),diverged,regression,recovered,consistent_failureorfailure_mismatch.signoff.py).verification.signed_offto the hash-chained event log.check_sign_offlater reports the sign-off as stale once any record it covers is invalidated.CLI:
python -m stele.verification {corpus,run,report,sign-off,check,list}.Tests
tests/test_verification.pyhas 29 tests:oci-runccandidate against it (3 identical, 1 consistent failure), and the whole CLI.Local run: the full suite passes, 750 passed. The 29 verification tests also pass with Docker running, including the OCI lane.
Review points
diverged.seq:hash) must be published outside the ledger to hold against someone who can rewrite the SQLite file.🤖 Generated with Claude Code
https://claude.ai/code/session_013P1MkGppjFZfBUKsToHzez
Generated by Claude Code