Skip to content

Go verifier: Python's check names, schema copies checked, v2 needs -trust; E21 scores the blind pools - #505

Merged
LoopGlitch26 merged 4 commits into
mainfrom
agent/issue-501
Nov 2, 2026
Merged

LoopGlitch26 merged 4 commits into
mainfrom
agent/issue-501

Conversation

@LoopGlitch26

Copy link
Copy Markdown
Member

What and why

Fixes #501, from the 2 November review of merged outside contributions.

  1. The Go verifier's schema copies are checked. TestEmbeddedSchemasAreTheRepositorys compares both embedded copies (v2, v1) byte for byte with tracekit/schema/. Changing one byte fails it.
  2. Parity on check names, not only verdicts.
    • Go's failures and warnings now carry the Python verifier's check names.
    • KNOWN_GAPS keeps only the checks Go doesn't perform at all. The script and the README call these verdict-only and say why.
    • Python check names compared went from 1 of 22 to 17 of 22, and identical name sets from 2 to 44 of the 67 cases. The gate is still 67/67.
  3. The right message. On a v2 bundle without -trust, the Go CLI said "invalid v1 manifest" (UNUSABLE, exit 2). It now reads the format from the manifest and says a v2 bundle needs -trust (UNVERIFIABLE, exit 2).
  4. E21 scores the blind pools (feat: add E21 blind evaluation corpus (fixes #344) #357, feat: add E21 blind evaluation pool for amandeavor (fixes #368) #401) as a blind set, in eval/results/ and docs/evaluation.md. The output says these aren't blind scores any more: rules were written after the pools were published.
    • At publication, recomputed from git history: 58/102 caught.
    • Today: 82/102.

How I ran it as a user

Command Before After
demo-run.tkb, no flags VERIFIED BUT UNANCHORED, no check lines adds the trust root warning with what to pass
demo-run-tampered.tkb [FAIL] record seq 6: event hash mismatch [FAIL] chain intact — record seq 6: event hash mismatch
a v2 bundle without -trust invalid v1 manifest, UNUSABLE a v2 bundle needs -trust …, UNVERIFIABLE

Checklist

  • make test: 4,034 passed, 0 failed. Go vet is clean; Go tests: 370 passed, 0 skipped. make test-ts passes with TRACEKIT_PYTHON set to the venv's Python.
  • fail-before: the schema test fails on a one-byte change, and the trimmed parity gate scores 10/67 on the old Go code
  • docs updated (evaluation.md, the Go README)

Security invariants

  • unchanged; the Python verifier's handling of existing bundles is not changed

Evidence format

  • not touched

…a copies, ask a v2 bundle for -trust (#501)

- A failure names the reference verifier's check it fails (signatures, run chain,
  inclusion, chain intact, ...), and the warnings Go already computes carry
  Python's names (keys, trust root, run completeness, run boundaries, run tail
  witnessed). The v2 verifier stops at its first failure, so the parity gate
  requires its one failed check to be among Python's.
- KNOWN_GAPS keeps only the checks Go doesn't perform: the gate compares verdicts
  only there, and the README lists them and says why.
- TestEmbeddedSchemasAreTheRepositorys fails when an embedded event schema
  differs from tracekit/schema/.
- The CLI reads the format from the manifest: a v2 bundle without -trust is told
  it needs one, not that its v1 manifest is invalid.
eval/e21_blind/*.jsonl (#357, #401) are scored in e21_policy_robustness.py,
together and pool by pool, recorded in eval/results/ and reported in
docs/evaluation.md. The output says these aren't blind scores: rules written
after each pool was published came from its misses. The blind score at each
pool's publication is computed from git history (each merge commit's own
scorer and packs) and matches what the pull requests reported. The blind
false-positive rates join the no-regression gates; the recorded latency block
is kept as it was.
- The parity gate exempts each verdict-only check only with the status Python
  gives it: Go's failures of head matches a witness checkpoint are compared.
- The text report prints a reason no failed check line gives, such as v1
  findings reached after a failed check.
- A v1 manifest whose file list is not an object fails bundle structure, as in
  Python.
- The Go README says which unsupported evidence is exit 2 and which fails keys
  (exit 1), and how an invalid signer.pub differs from Python.
- E21 scores each blind pool once; the latency text names the sets it times.
…fest; wrap an E21 docstring line (#501)

As in the Python verifier, a missing file list lists no file, so every file is
unlisted; only a list that is not an object (null included) is bundle
structure.
@LoopGlitch26
LoopGlitch26 merged commit 9032534 into main Nov 2, 2026
33 of 34 checks passed
@LoopGlitch26
LoopGlitch26 deleted the agent/issue-501 branch November 2, 2026 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Go verifier and E21: schema copy check, parity on reasons, v2 message, blind pools scored

1 participant