Skip to content

Track B: keep B2's outcome files out of every blinded review root - #549

Merged
MaxGhenis merged 2 commits into
masterfrom
trackb-b2-exposure-inventory-20261018
Oct 19, 2026
Merged

MaxGhenis merged 2 commits into
masterfrom
trackb-b2-exposure-inventory-20261018

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

What

This PR keeps B2's outcome files out of every blinded review root.

B2's run record (#547) and the cumulative attempt ledger (#548) hold reference-year 2012 and 2014 floor values, truth moments and B2's candidate outcome. No exposure-inventory scan lists them, so a root built from master would include them.

  • The record. docs/design/track_b_b2_outcome_exclusions.json is a standing exclusion record, in the inventories' q6_exclusions form. It names five files:
    • runs/track_b_b2_floor.json
    • runs/track_b_b2_floor_v1_stopped.json
    • runs/track_b_b2_score.json
    • runs/track_b_b2_score.attempt.jsonl
    • docs/design/track_b_attempt_ledger.md
  • The tool. scripts/track_b_b0_1_review_root.py gets a STANDING_EXCLUSIONS tuple and standing_inventories(). build() now unions the standing records with whatever --inventory files a builder names, so the guard enforces the exclusion even when a builder forgets it. It reads every exclusion record before it writes anything. A missing standing record therefore refuses the build, rather than dropping silently, and leaves no partial root.
  • What stays the same. The B0.1 exposure inventories are scanner outputs whose hashes the record tests pin, so they are unchanged.

The dynamics coordinator added the same paths to the evidence folder's RESTRICTED-FILES.md for blind roles. This PR makes the root builder enforce it.

Invariants

  • For any set of named inventories, the denied paths are a superset of the standing record's paths, and exactly the union of the named and standing paths, sorted with no repeats. This is a Hypothesis test with 100 examples.
  • A build that names no inventory still removes all five files, and its record lists them as denied and removed. This is tested end-to-end on an invented archive.
  • A named inventory that repeats a standing path and names a path the archive lacks gives a record that denies the sorted union. Only the files the archive held are removed.
  • A missing standing record raises FileNotFoundError before any output exists.

Tests

  • New: 6 tests, in tests/test_track_b_b2_outcome_exclusions.py. They are artifact tier, since the file names runs/…json paths, so artifact goes from 4,247 to 4,253.
  • Local runs. The new file, test_track_b_b0_1_review_root.py, test_track_b_b0_1_addendum_record.py, test_track_b_b0_1_revision1_tools.py and test_track_b_b0_1_audit_record.py gave 310 passed. Black 26.5.1 -l 79 and ruff are clean.
  • Mutation checks: 4 of 4 killed:
    • build() ignores the standing records;
    • a missing record is skipped;
    • the record drops runs/track_b_b2_score.json;
    • the standing records are read after the output is created.

Review round 1 (Astra, job 20261018-142942-trackb-pr549-r1): APPROVE, with no blocking finding. It reran the three original mutants, all killed, and got 307 passed. It skipped one test that opens restricted files. Its two nonblocking suggestions are both taken in 00786d79: read the records before writing, and test the union inside build().

axiom: n/a (review tooling)

🤖 Generated with Claude Code

B2's run record (#547) and the attempt ledger (#548) hold reference-year
2012/2014 floor values, truth moments and B2's candidate outcome, and no
exposure-inventory scan lists them. A standing exclusion record,
docs/design/track_b_b2_outcome_exclusions.json, now names them, and
scripts/track_b_b0_1_review_root.py applies every standing record to
every build, whatever inventories the build names. A missing record
refuses the build rather than dropping it.

Tests: 4 new (artifact 4,247 -> 4,251), including a Hypothesis property
and an end-to-end build on an invented archive; 3 mutants, all killed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
social-security-model Ready Ready Preview Oct 18, 2026 6:51pm UTC

Request Review

…e union in build()

Review round 1 of #549 (both nonblocking): build() now reads every
exclusion record before it creates the output, so a missing standing
record leaves no partial root; and a build-level test covers a named
inventory that repeats a standing path and names a path the archive
lacks. 2 more tests (artifact 4,251 -> 4,253); the read-order mutant is
killed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit a61ce74 into master Oct 19, 2026
12 checks passed
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

Merged at head 00786d79 as merge commit a61ce746 (2026-10-19 16:45Z).

Gates

  • gh pr checks exited 0 on the latest run, and the PR was MERGEABLE and not a draft, with no changes requested.
  • The dynamics coordinator gave the tier slot. Master tiers are now unit 9,916 / artifact 4,253 / integration_psid 1,423 / reproduction_legacy 520 / oracle_policyengine 308.

Reviews

  • Round 1 (Astra, job 20261018-142942-trackb-pr549-r1): APPROVE, with no blocking findings. It reran the three mutants, all killed, and got 307 passed. It skipped one test that opens restricted files. Its two nonblocking suggestions are taken in 00786d79.
  • Round 2 (Astra, job 20261018-145143-trackb-pr549-r2): APPROVE, with no findings. It reran the read-order mutant, which was killed, and got 147 passed and 6 artifact tests collected.

From this merge on, every blinded review root built by scripts/track_b_b0_1_review_root.py excludes B2's run record and the attempt ledger, whatever inventories its builder names.

This branch was successfully deployed

1 active deployment
Preview — 00786d79 Deployed Oct 18, 2026 by vercel[bot]
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.

1 participant