Add the methods note and an executable blinding harness for the H2 holdout - #15
Open
thabatarj8-stack wants to merge 2 commits into
Open
Add the methods note and an executable blinding harness for the H2 holdout#15thabatarj8-stack wants to merge 2 commits into
thabatarj8-stack wants to merge 2 commits into
Conversation
…ldout Publish the bilingual Nirmata v0.1 methods note and link it from the reading path, the roadmap, and the discovery checklist. Add experiments/002/harness, which turns the #2 blinding protocol into enforced artifacts rather than operator discipline. The first holdout was invalidated because ground truth reached the evaluator context before predictions existed, so the ordering is now structural: - preflight.py freezes a holdout only after checking schema conformance, composition, evidence mix, and both structural and lexical answer leaks; - holdout_run.py runs in the evaluator context, projects each trace to the input boundary its frozen prompt permits, and seals predictions on write; - holdout_reveal.py verifies that seal before opening the key and exits without reading it if verification fails; - blinding.py provides the sha256 seal primitives shared by both contexts; - hub.py holds traces and key in separate Hugging Face dataset repositories, so the commit carrying the predictions is timestamped independently of the commit that publishes the key. Add a ground-truth schema, an open-weight evaluator backend that records exact_weights_available, and 26 tests asserting that every guard fails closed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…porting Preflight now takes a --suite label so a development suite can be frozen and run through the same guards without borrowing confirmatory trace IDs. The composition, evidence-mix, and leak checks are unchanged. Distinguish an empty provider reply from an unparseable one, and include the start of the reply in the failure record. Parsing stays strict: stripping code fences or trailing prose would be repair, which the protocol forbids during a confirmatory run, so the fix belongs at generation time. Co-Authored-By: Claude Opus 5 <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.
What this adds
Two pieces of the same publication step: the method written down, and the method made enforceable.
Methods note v0.1, bilingual, linked from the reading path, the roadmap, and the discovery checklist. It records the invalidated first holdout as a preserved failure rather than omitting it.
experiments/002/harness/, which turns the blinding protocol into artifacts instead of operator discipline. The first #2 holdout was burned because ground truth reached the evaluator context before predictions existed, so the ordering is now structural rather than procedural:blinding.pypreflight.pyholdout_run.pyholdout_reveal.pyhub.pypreflight.pyfreezes a holdout only after checking schema conformance, ID convention, frozen composition, evidence mix, and both structural and lexical answer leaks.holdout_run.pyprojects each trace to the input boundary its frozen prompt permits: the content channel seestrace_idandfinal_output, the trajectory channel seestrace_idand ordered events. Withholding the output from the trajectory channel is what keeps the OR aggregation a measure of incremental signal.holdout_reveal.pyverifies theprediction_freezeseal before opening the key, and exits without reading it if verification fails. It never rewrites the sealed manifest; reveal-time facts go torun-manifest.final.json.hub.pykeeps traces and key in separate private dataset repositories, so the commit carrying the predictions is timestamped independently of the commit that publishes the key. A local seal proves integrity but cannot prove ordering to a third party.Also adds
ground-truth.schema.json, an open-weight evaluator backend that recordsexact_weights_available, and evaluator-failure recording that refuses to report a partial run as complete.Notes for review
reproducibility/uses lowercasetrajectory_id;experiments/002/schemas/usesNIR-002-*. The harness follows the Build a bilingual research reading path and article series #2 schemas, which are authoritative for H2, and does not reuse the older validator.is_semantic_leakimplements a lexical policy over curator-authored trajectory prose.final_outputis exempt, because that text is the object under judgement rather than a description of it. The policy is blunt by design; a rejection is a prompt to rewrite the case, not to loosenLABEL_VOCABULARY.quality.yml. Each guard has a test asserting it fails closed.Evidence status unchanged
This makes the H2 holdout executable, not executed. The roadmap items for a fresh blind pilot stay open. No confirmatory claim is made or implied here.
🤖 Generated with Claude Code