Repository navigation
Conversation
B0.2's tree from PR #554 at 9a0ef5f, as one commit on master. #554's history is kept on its branch; this commit carries no registry file. - Plan and landscape synthesis (docs/design/track_b_b0_2_plan.md, track_b_b0_2_landscape.md). - The structural-audit protocol, version 1, DRAFT, with the answers to Sol review rounds 1 to 3 and the conditions on B0.1's sets in its block (docs/design/track_b_b0_2_protocol.md; pin 036b2070...). - The count script, built on invented frames (scripts/ track_b_b0_2_counts.py), its tests, the evidence tools and the standing exclusion record. No count has run. Tiers: unit 18,254 -> 18,407 (+153 for B0.2's tests). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
3 of 7 tasks
Round 3's rerun of the 800-household calibration withheld on a loaded host when six of the nine seed programs found no point within 60 seconds. A limit sets no window and sees no size, so raising it changes only how often a slow machine withholds. The block, the public protection rule and the options test say 300; a mutation spec puts 60 back (76 specs). The preamble also records round 3's two nonblocking answers. Repins the block (994a7326...). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two holes in the write boundary, closed before any evidence run: - A warning's category and place were printed. Whether a warning fires, and where, can depend on the data, so the guard now drops warnings unseen. - The guard caught only Exception. An interruption, or a library's own exit, would print Python's default report, which chains the error it interrupted, whose message could quote a size. It now catches every exception and reports its type and the script's line alone. The block states a stop's report as an output the boundary allows, and the stated limit now says that whether, and where, a run stops can depend on the data. Tests: warnings are dropped while those outside the guard are untouched; an interruption and a library's exit print no chain; the static check finds one print, the output's path. Mutation specs: 77. Repins the block (f5396be9...). Tiers: unit 18,409. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hashes The coordinator's rulings on the decision record and provenance: - Rounds: the local copy no longer writes the per-round disclosure lists, the reseed flags, each target's settling round or the round count. Rounds add resolution to the one channel the decisions open, and a rerun of the frozen code on the frozen inputs gives them again. Each target keeps its kind, unit type, sets, true size and final classification, with the class sizes by unit type. The stated limit narrows to which targets are narrow and whether the release is withheld (and whether and where a run stops). - Provenance, which goes into the committed file: only the requested shape, fixed before any count (labels; waves, reference years, the age convention, the lags), and SHA-256 hashes of inputs and code. No hash of the local copy, the attempt record or any file holding a figure not committed. A test checks the committed field list, the geometry, and that every hash in either file is of an input or code. Mutation specs: 80 (three added: rounds written, a settling round written, provenance gaining a figure from the panel). Repins the block (dcfac276...). Tiers: unit 18,410. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The coordinator ruled that a stop counts as a decision, a withhold of
the version. The block now says so: the attempt record refuses a rerun,
and the next attempt is a new version, ruled on before it runs, that
treats the stop as public.
- The guard runs per phase. A failure while reading the inputs or
writing the files names its type and the script's line. One in the
release (the rebuild of B0.1's sets, the gate, the counts and the
audit) prints "B0.2 stopped in the release" alone. The script's own
raises keep their fixed messages in every phase.
- Inside each phase, file descriptors 1 and 2 point at the null device
and Python's streams at a null stream. Every stream, the C library's
included, is flushed before the descriptors are restored for the
report.
- The stated limit names the run's total time as a channel, with no time
written or printed. Operations: the run is detached from the session,
with no wall limit, since the number of programs is bounded.
- Tests:
- the fixed release text, for a library failure and for one deep in
the disposition rebuild;
- reading-phase reports;
- silencing through Python, descriptors and C stdio;
- the committed record's exact key set;
- main's three phases;
- seven new guard mutants, and three old ones repointed.
- Three tests that failed on their first run are fixed in the tests:
- a macOS temporary-folder symbolic link;
- verdicts that are both wide and irrelevant;
- SciPy's milp removing "disp" from the dict it is given.
The relabeling tests now include panels that release.
- Pin ebdc3565; unit tier 18,421.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The coordinator agreed there is no wall limit. Since any stop spends the version and each program's 300-second limit is wall-clock time, it set three conditions in its place. The script enforces the first two before the attempt record, so a host that fails them spends nothing: - it starts `caffeinate -i -s -w` on its own process, holding off sleep until it ends, and refuses to start if caffeinate cannot start; - it refuses to start unless it runs at nice 0 and the five-minute load average is below the CPU count (18 here); Fleet ops is asked for a quiet window if the load does not come down; - before the freeze, an expected run time extrapolated from the 800/3,000/9,000-household calibrations goes to the coordinator. The block also says the run prints nothing until it ends, so liveness is checked by process ID alone. Tests cover each refusal (before the attempt record and any read), the caffeinate arguments and order, the host-state reader, and a real caffeinate on macOS. Six mutants are added (93 specs). Pin 31af2b85; unit tier 18,429. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 4 approved the block and the script as they stand and asked for four test changes before the freeze, none of which changes the pin or the script: - T1: the relabeling tests run main() under an audit hook that refuses any file write other than the run's three outputs (and their temporary files), and any new process or connection; a test checks the hook. The static check's write list adds NumPy's, pandas', pickle's and shutil's writers, and refuses one imported by name. - T2: a property test that the local copy is the same byte for byte whatever rounds settled the targets, and fixed cases for a mark on late results and an order by round. - T3: round 4's table, on which B0.1's exact household count withholds a small band's households; without B0.1's household sets it releases. - T4: the Hypothesis relabeling draws its swap between heads of different ages, and counts apart any draw that leaves the atoms as they were. It also adds the 12 files of docs/design/track_b_b0_2_evidence/ to B0.2's standing exclusion record (round 4's S3), with a test that every B0.2 file is on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first run of 80c5ab7's tests found two mistakes of mine: - The household class's unit type is "households_2011", not "households". - B0.2's exclusion record already has a test module, which checks the record's exact list. So the check that every B0.2 file is listed goes there, not into the count tests. Its name rule now also catches any file in a folder named as B0.2's, such as the evidence folder, whose files round 4 found left in review roots. The record's expected list gains the 12 evidence files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 4 approved 60d77cf and asked for four script changes and three wordings in the block. All of them go in before the freeze. S1, the decision record. - Each target's result is now its decision from the round that ended the audit, or from the round that disclosed it or proved it irrelevant. Every other target is "unreached", so the pattern no longer shows which round ended the audit. - Each class target names the paths of this release's sets that hold it, in the release's order, and never B0.1's, even where a B0.1 set is the same set. S2, the run's conditions. - caffeinate is gone. The script holds two IOKit sleep assertions in its own process and reads, through ctypes, the providing power source, the Darwin background priority and the main thread's QoS class. - Six named conditions (ac_power, sleep_assertions, nice, background, qos, load) must all hold before the attempt record, or the script refuses to start. - They are rechecked before every program, never during one. While one fails, the script rechecks every 60 seconds and takes a lapsed assertion again. After 1,440 failed rechecks (24 hours), it stops with the condition's name. - The QoS condition goes beyond round 4: a CPU loop on this host ran about a twelfth as fast under a background QoS clamp, with niceness and the Darwin priority both 0. S3, separation. The exclusion test now includes decoys that share basenames with B0.2's files, and requires each decoy to be kept. S4, identifiers. The reading phase stops on either of these: - a present row without its person or interview number; - a present person without a design stratum and cluster. The block. - B1: the committed status of a withheld release is listed among the audit's limits. - B2: the stop channel names the script's own checks. - B3: running without a wall limit rests on the calibrations' timings, not on the program bound. The block also states the six conditions, the wait and its bound, and the operator's duties. The block's SHA-256 moves to 038ee180be5b9f8b86e132dde71cceba234c2aa465a4866f22e907c86b430e42. The mutation specs drop five that targeted the removed code. They add 17 for the new code and round 4's four mutants, for 109 in all. The evidence is rerun at the final head after the delta review. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The coordinator accepted the QoS condition and the recheck design, with three requirements. This commit meets them. - QoS: the run's main thread must have an unspecified QoS class, or the default or above, by two named constants (QOS_CLASS_UNSPECIFIED, QOS_CLASS_DEFAULT). Before, the check excluded utility, background and maintenance by name, so a class outside <sys/qos.h>'s list would have passed. Two refusal cases with such classes are added, and three mutants: an unknown class passes, an unspecified class fails, and the wait stops one recheck early. - The block names the wait's constants (RECHECK_SECONDS, RECHECKS) and the QoS constants beside the values it states. - The stop message is built from RECHECKS and RECHECK_SECONDS, not a fixed "24 hours". It reads "run condition <name> still failed after 1440 rechecks, 60 seconds apart, between programs", so a shortened bound reports itself truthfully. The static check allows the two constants in a raise message: they are settings. - A test runs the bounded wait with a shortened bound and real waits: three rechecks a hundredth of a second apart. A condition failing through all three stops the run before any program; one that clears at the third lets the run finish and write both files. The block's SHA-256 moves to a92539b27121f8d6c903f763537405a1fb992491cff45bdb0626a23de8169871. The mutation specs number 112. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…confinement Review round 5 (Sol, at c6aec97) stopped before its report, but its draft found two gaps in round 4's items. Both are fixed here, with two corrections to the block's wording. - Sleep assertions (S2): _Host.held() counted any assertion that still existed, but IOKit lets an assertion's owner set it to the off level, where it no longer prevents sleep. held() now reads the assertion's AssertLevel property (CFDictionaryGetValue, CFNumberGetValue) and requires 255. Before an assertion that fails the check is taken again, it is given back. New tests: a fake-host test for the release and retake, and a macOS test that sets a real assertion to the off level. Two new mutation specs (114 in all). The static check pins the two new C functions and the two new ctypes calls. - Test confinement (T1): the audit hook let a write into an existing __pycache__ folder pass. It also missed a database (sqlite3.connect), the system log, removing a file or changing its metadata (remove, rmdir, chmod, chown, chflags, utime, xattrs), a rename's source, and a socket before it connected or sent. Each is now refused, and bytecode writing is off while the confinement holds. The companion test exercises each route. A write that native code makes through its own descriptor raises no audit event, so the static check now also refuses the modules that could make one (socket, sqlite3, syslog, mmap, dbm, shelve, http, urllib, ssl, asyncio, multiprocessing, ftplib, smtplib). - Block: the identifier check can fire on the real files. The person-wave reader builds the person number as an integer, but passes each wave's interview number through as pandas.read_fwf reads it, and a blank field reads as missing. The old sentence said it never fires. Round 4's two 97-head status tables are now described separately. The block also states the assertion level, and the release before a retake. The block's SHA-256 moves to 71e350ef5beca201be584195b233aa9e4975cc5977bece2597eb6e913822c36f. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A fresh master merge before the round-5 delta review. Master brings P2 and the ledger delta; it changes no B0.2 file, nothing B0.2 imports, and not tests/tier_counts.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI's full collection at c6aec97 matched 18,561 unit tests. 9322a0b adds two, both in the count module: the fake-host release-and-retake test and the macOS off-level test (skipped off macOS, collected everywhere). Master 7e050df leaves the tier file at 18,339, as 9967dfd had it. So 18,561 + 2 = 18,563, derived; CI's collection at this head checks it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tions, name lookups Review round 5's second attempt (Sol, at 9b9d53f) asked for one change to the block and suggested three test additions; all four are here. - Block (P2): the second of round 4's status tables was still misread. Round 4's exp4 has two parts: main() on each natural panel (the review's rerun at this head found them withheld at 1, 2 and 7 heads in the band), and the reader's rerun on the 3-head table's fixed atoms, empty atoms allowed, which withheld at 0 to 2. The block credited the rerun's result to "the natural table". It now says "Holding the 3-head table's atoms fixed, and allowing them to be empty, the reader's rerun withheld only at 0 to 2", followed by the configuration search's withholding tables at 3 to 7, as before. - Ownership: omitting the release of the properties dictionary in _Host.held() passed every test. A stand-in for IOKit, CoreFoundation and libc now keeps a ledger of owned handles. test_the_host_calls_give_back_every_object_they_own checks, over power source present or absent, properties copied or not, and level on or off, that every handle a Create or Copy call returns is released, and that no borrowed handle is. - Identifiers: omitting the stratum from the design completeness check passed every test. The identifier test gains a design-stratum case, and "design value" is renamed "design cluster". - Confinement: name lookups (socket.getaddrinfo, gethostbyname, gethostbyaddr, getnameinfo) are refused too, and the companion test exercises one. Two mutation specs cover the new tests, for 116. The block's SHA-256 moves to 66cadfa488103f24dbda7ff84ef0e1051ba3a3e0e95e23198b81fdadcfbb0b0e. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI's full collection at 9b9d53f passed the tier policy at 18,563 unit tests. The previous commit adds nine, all in the count module: eight cases of the CoreFoundation ownership test (power source, properties and level, two values each) and the design-stratum identifier case. So 18,563 + 9 = 18,572, derived; CI's collection at this head checks it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Master brings #575 (D1a: PSID income and wealth readers). It adds two new modules under src/populace_dynamics/data/ and changes no existing source file, so nothing B0.2 imports changes. The tier file and the README's tier table conflicted. Both are resolved to master's counts plus this branch's unit delta: 18,433 + 233 = 18,666 unit, with master's integration_psid 1,471, for a total of 25,236. The branch's README table had not been updated since a3b6236 (18,514); it now matches the tier file. This is derived; CI's collection checks it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Master brings #570 (SM1: the mortality_ses package, its design note and tests), #566 (OP1: the open_population package, its evidence and tests), changes to scripts/first_estimates_birth_evidence.py and its artifact test, and the tier files. None of it is a B0.2 file, and none of it is imported by the B0.2 script or by anything that script imports. The tier conflict resolves to master's counts plus this branch's unit delta: 18,780 + 233 = 19,013 unit, with the other tiers as on master, for a total of 25,583. The README tier table matches the tier file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The mutation record at e79f41b found check 37 ("relations dropped from the audit") alive: all 229 tests passed with model_relations' result emptied inside audit_counts. At bfd439c only the withheld-release test of main() killed it, as a side effect, and it no longer depends on the relations. test_the_audit_uses_the_relations_it_registers builds a table where the relation alone decides: twelve households and eleven of them, both published as 10, leave the twelfth anywhere from 0 to 4 (wide); with an earlier release's exact twelve persons and "at most as many households as persons", it is 0 to 2 (narrow at true size 1), so the release is withheld. Without the relation the same table releases. It fails on the mutant and passes on the script. Tests only; the script and the protocol block are unchanged (pin 66cadfa4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The mutation record at e79f41b killed 113 of 116 checks. Besides check 37 (abbbf79), two survived, each a gap in the tests: - Check 53, "a modeled set B0.1 never published accepted", empties the check that every set the audit models is one of B0.1's published counts. The test's only unpublished set also named an unpublished term, so the loop over terms stopped it first. A set B0.1 never published, whose size is a published count, now reaches the check of the sets' own paths and nothing else (test_the_b0_1_record_must_be_the_one_these_inputs_give). - Check 66, "the local copy sums every target into class sizes". In the tests' tables every difference held the same units as a class, so no difference was a target of its own. test_the_class_sizes_are_this_releases_classes_alone nests sets of 30, 20 and 10: the outer difference of 20 is a target but not a class, and the class sizes are three tens summing to 30. Each test fails on its mutant and passes on the script. Tests only; the count script (7ec6ee28) and the protocol block (pin 66cadfa4) are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The relations test (two cases) and the class-size test add three unit tests to the count module, which collects 232: unit 19,013 + 3 = 19,016, total 25,586. The README table matches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Master brings #589, #590 and #580: an OP1 report section, a docs ledger, and the held-out registry's module, tests and mutation record. None is a B0.2 file or anything B0.2's script imports. The tier files conflicted. Resolved as master's counts plus this branch's unit delta: 18,789 + 236 = 19,025 unit, total 25,595. The other tiers are unchanged, and the README table matches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
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.
WIP. B0.2 per d1802 (Max 2026-10-21) and design revision 3 §3.1, §5.2 and §5.3.
This supersedes #554. It is #554's tree at
9a0ef5f4as one commit on masterfe5ab5ab. #554's branch history carries an early draft of the held-out registry file, which the registry's history check rejects. This branch's final tree touches no registry file.What this will deliver
Plan
docs/design/track_b_b0_2_plan.md:This work is kept separate from the B2 successor design (d1659): neither lane reads the other's evidence (plan §2).
Status
docs/design/track_b_b0_2_landscape.md.The protocol is
docs/design/track_b_b0_2_protocol.md, status DRAFT. Its block is pinned at SHA-25666cadfa4…(31af2b85…at60d77cff,a92539b2…atc6aec979,71e350ef…at9b9d53f5).Sol review rounds 1 to 3 asked for changes, and each was answered in the block before any freeze. Round 3 found that B0.1's exact public counts were not modeled, and that disclosures could empty the witness pool. B0.1's sets now enter the audit as exact counts, and an emptied pool reseeds or withholds.
The coordinator ruled that B0.1's sets may constrain the audit on conditions, which the block now states and the script meets:
Since this PR opened: each program's limit is 300 seconds, up from 60, because round 3's 800-household rerun withheld on a loaded host when seed programs timed out (
3fe9541d); warnings print nothing, since whether one fires and where can depend on the data; and an interruption, or a library's own exit, is reported like any failure, with no chained error (f9d6dc4c). Following the coordinator's rulings (74ed29be): the rounds are dropped from every output, and the committed provenance holds only the requested shape, fixed before any count, and hashes of inputs and code.The coordinator then ruled that a stop counts as a decision, a withhold of the version (
7f657916).In place of a wall limit, the coordinator set three conditions on the run (
60d77cff), since each program's limit is wall-clock time and any stop spends the version:Round 4's S2 replaced the first two with six run conditions checked before every program (below). The run prints nothing until it ends.
The count script
scripts/track_b_b0_2_counts.pywas built on invented frames. No count has run.Evidence on invented tables is in
docs/design/track_b_b0_2_evidence/: an enumeration oracle written apart from the integer programs, three searches over it, a calibration on invented panels, and the mutation runner, now with 93 specs. The build report isdocs/design/track_b_b0_2_counts_report.txt.Review round 4, at
60d77cff, approved the block and the script as they stand. It ran on an Opus 5.5 lane, since the Codex lanes were closed. Nothing is blocking. It asked for four test changes before the freeze, none of which changes the pin or the script. They are done in80c5ab72and3747d0ee, and the count, review-root and exclusion test modules pass (322 tests):The coordinator ruled that round 4's other seven items also go in before the freeze, in one head with a fresh master merge. They are in
1f3b529c, on the master mergea3b62363, whose second parent9967dfd6is still master's head. (That merge's message names51323bedin error.)unreached, whichever round that was, so the record no longer shows the round. Each class names the paths of this release's sets that hold it, in the release's order, and never B0.1's, even where a B0.1 set is the same set.caffeinateis gone. Throughctypes, the script holds two IOKit sleep assertions in its own process, and reads the providing power source, the Darwin background priority and the main thread's QoS class.ac_power,sleep_assertions,nice,background,qos,load) must hold before the attempt record, or it refuses to start.taskpolicy -c background, with niceness and the Darwin priority both 0.0f942549),qosholds only when the class is unspecified or the default or above, by two named constants, so an unknown class below the default fails. The block names the wait's constants (RECHECK_SECONDS,RECHECKS), the stop message is built from them, and a test runs the wait with a shortened bound and real sleeps.The mutation specs drop the five that targeted removed code, and add 20 for the new code plus round 4's four mutants, for 112. Round 4's four mutants are killed at
3747d0ee.The count, review-root and exclusion modules pass at
1f3b529c: 359 tests. In the relabeling property, 14 of 16 draws changed the atoms and kept the decisions. At0f942549, the 37 tests its change touches pass (run conditions, QoS, both bounded-wait tests, the static message check, the pin and the real-host reads); the full modules rerun with the evidence.Round 5's first attempt, a Sol delta review at
c6aec979, stopped before its report: the provider's content filter refused it after 1 h 38 min. Its draft found two gaps in round 4's items and two wording errors in the block, all fixed in9322a0b6(pin71e350ef…):held()now requires theAssertLevelproperty to read 255, and an assertion that fails is given back before it is taken again. A macOS test sets a real assertion off.__pycache__folder pass, and did not see a database, the system log, a file's removal or metadata, a rename's source, or a socket before it connected. It now refuses each, with bytecode writing off while it holds, and the static check refuses the modules that could write past an audit hook (socket, sqlite3, syslog, mmap and others).7e050df5is merged atc8d6dbb3; it changes no B0.2 file, nothing B0.2 imports, and not the tier file.Round 5's second attempt (Sol, at
9b9d53f5) found all eleven items and those four fixes resolved, apart from one sentence: the block credited the reader's fixed-atom rerun's result (withheld at 0 to 2 heads) to the natural tables, which round 5 found withheld at 1, 2 and 7. Fixed in3e169c74(pin66cadfa4…), with its three nonblocking suggestions:Two mutation specs cover them, for 116. Master
1ec57a5d(PSID income and wealth readers and field registry (D1a) #575, D1a) is merged at226d844d. It adds two data modules and changes a birth-evidence script, tests and the tier files; nothing B0.2 imports.Calibrations at
60d77cffon invented panels, with B0.1's sets registered:Whether a class that B0.1's published counts already fix should still withhold this release is a methodology call, queued for Max. Nothing freezes until he rules. If an exemption is adopted, it comes with its own property test, a killed mutant and a stated condition.
Next:
A delta review (round 5d) ofAPPROVED (Sol): the requested sentence is right, the only change between the markers, and both pins match; the ownership test catches all five ownership mutations tried; the stratum spec fails exactly the new case; the four lookups are refused; the merge changes nothing B0.2 imports; the tier arithmetic holds. No new findings: the block and script may be frozen as they stand.3e169c74and the master merge, at226d844d.444f970d(SM1: differential mortality by lifetime earnings, education and race (normalized within age-sex-year cells) #570 SM1, OP1: open-population harness around the sealed loop #566 OP1) is merged ate79f41b5. It adds the mortality_ses and open_population packages, and changes a birth-evidence script, its test and the tier files: no B0.2 file and nothing B0.2 imports. The B0.2 files and the pin are identical to226d844d's.e79f41b5, on the serial runner (one job at a time, one core, nice 10), with each program's limit at 300 s:The B0.2 modules: 380 passed.
Calibrations on invented panels with B0.1's sets registered, as
main()registers them: 800 and 3,000 households withhold, each on one narrow one-person class, as at60d77cff. 9,000 households release: 3,838 targets (3,820 wide, 18 irrelevant) in 2,245 s of audit. No target took more than 31.5 s over all its programs, and no seed program more than 20.4 s.The same two panels without B0.1's sets release: 800 households, 2,843 targets, all wide, in 276 s; 3,000 households, 3,112 targets, all wide, in 668 s. B0.1's sets are what makes them withhold. A diagnostic of which B0.1 sets pin the one-person class (a Sol review found it sound for this question) runs next on the same runner, for Max's ruling.
Mutation record: 113 of 116 specs killed. The three survivors were untested paths, not faults in the script. As the coordinator ruled, they are answered with tests only:
abbbf793checks that with the relation a household class withholds, and without it releases;8a30da57adds a case that only this check catches;8a30da57adds nested sets where one is.Each new test kills its mutant. The count script is unchanged (SHA-256
7ec6ee28…). The count module: 232 passed.172f690fis merged at1e3ff4d8. It adds OP1's report and the held-out registry's module, tests and record: no B0.2 file and nothing B0.2 imports.1e3ff4d8, after the modules, on the same runner. Then one evidence commit: the calibration file, with each run's limit and sets (300 s with B0.1's sets now, 60 s without before); the rerun record; and the report's final-head section. Then a delta review of everything since226d844d, and out of draft.docs/design/track_b_b0_2_exclusions.jsonlists every B0.2 file, including the future counts and exposure inventory. Since round 4 it also lists the 12 files indocs/design/track_b_b0_2_evidence/, which round 4 found were left in blinded review roots.scripts/track_b_b0_1_review_root.py.tests/test_track_b_b0_2_exclusions.pychecks the record's exact list and requires every tracked B0.2 file to be on it. Since3747d0ee, its name rule also catches any file in a folder named as B0.2's. Before, it checked basenames only, which is how the evidence folder was missed. Since1f3b529c, a built root with decoys that share basenames with B0.2's files must keep every decoy.Invariants (stated in the protocol block, tested on invented tables)
test_audit_programs_depend_only_on_the_publicationcompares solver transcripts across tables that share a publication.docs/design/track_b_b0_2_evidence/search.py.raiseadds its message, which a static test confines to paths and settings. Nothing printed inside a phase is seen, through Python, a file descriptor or the C library's buffers. Warnings print nothing.Tier counts change: unit 18,789 → 19,025 (+236) against master
172f690f, merged at1e3ff4d8; total 25,595. The +236 is the earlier +233 and the three new test cases. CI's full collection passed the tier policy at 18,666 at226d844d(+233 against master1ec57a5d), and at 19,013 ate79f41b5. The README tier table matches. CI checks the counts, and they are recounted at the merge slot. Merging waits for a slot from the dynamics coordinator.axiom: n/a: Track B design and audit records; no policy encoding.
🤖 Generated with Claude Code