Repository navigation
OP1: open-population harness around the sealed loop - #566
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 24, 2026
…known gaps - Tracking and next-step cells for the twelve rows the mortality, groups and financing (#558), income-and-resources (#559) and open-population (#557) designs cover, citing their merged files. - The poverty row records U2's completed second structural pass and its ratification by #556's merge; next are the evidence file, a fresh forecast and the #42 registration. - Known gaps keeps only what no issue, PR or approved design plans. - Rulings d1922, d1923 and d1925; link refs for #556, #566–#568, #570. - Scorecard: the wealth row names the approved design; progress page regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ProjectionRNGRegistry rebuilds root.spawn(n_periods + 1) on every draw (engine/rng.py:61-67), so each draw costs more as the horizon grows. DirectRNGStreams builds the same spawn keys directly, in O(1). The sealed registry stays byte-identical, and the sealed loop keeps using it. Invariant: at every valid address, the direct stream equals the registry's. The new tests check this exhaustively on a grid (draws 0-2; n_periods 0, 1, 7, 75 and 86; every module; person, child, tagged and tagged-child streams, including the period-zero cases), with Hypothesis over draw, period, module, ordinal, child and tag, and for identical refusals at invalid addresses. streams.py joins the reducer exclusions and their pin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Major findings: - Production binds its horizon to a registered scenario (REGISTERED_PRODUCTION_HORIZONS, tr2026_intermediate -> 2100, design section 2.9). A request carries no end year, and an unknown scenario raises ID_OR_STREAM_COLLISION. Results record kind and scenario. - Exact-stream, marginal and independence tests pin emigration to its tagged child of the mortality module. Mutants that reuse the mortality person stream, share one uniform or collide with the ASFR stream now fail. - run_gate takes explicit keywords and admits metadata only from GATE_METADATA_KEYS (nawi_by_year, wage_base_by_year). Any other key raises GateTargetRefused before an adapter runs. Minor findings: - A self-contained horizon-evidence test replaces the git show of a commit outside this branch. - The initialized roster is canonicalized by person_id. - The exit adapter is harness-only (_ExitAdapter). - A runtime import-closure test checks the gate run. - New tests cover scheduled-entry coupling, weight swaps in all six fixed slots, and pinned stock-flow examples. - Annual snapshots keep only person_id, year and weight, and the ledger is indexed by year. - Emigration draws use DirectRNGStreams. - Entry-kind constants come from the engine. - The redundant allocator validation is removed. - Docstrings are added, and so is the test package marker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The build dropped this test because its sandbox ran it in 62 s. On the main host it takes about 0.6 s. A three-person invented roster with emigration on projects to TR2026's LAST_YEAR. The test checks the result's kind, scenario and horizon, the year of every slice, and that a 2030 prefix equals the run's own leading slices. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The build's sandbox ran about 40 times slower than the main host and could not commit. This commit therefore replaces the build's timings with a rerun on the committed code, at 25, 100 and 400 invented people over 75 years, with emigration on: - Every run reconciles all 75 periods. - The direct and registry emigration streams give identical projection hashes. - Per draw, the registry costs 49 us at 7 periods and 201 us at 75; the direct path costs 6 us at either horizon. - With direct emigration, the sealed loop's own registry sequence construction takes 45%, 64% and 80% of profiled runtime as the roster grows. The report records the commits, the corrected line citations, 232 passed with 1 strict xfail, 129 unit tests, and the full-size measurement still open before OP10a. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The direct stream class now refuses a non-integer horizon, period or period-zero child index exactly as ProjectionRNGRegistry does, in the registry's order: module, period interval, then the integer checks its spawn and list lookup make. A grid over every combination of malformed periods, modules, tails and horizons, plus Hypothesis, compares outcome type and message for all six methods; review r2's mutant N10 and five other refusal mutants fail it. The report gives the JSON's load ranges (one-minute 120.2-136.4), labels each timing as a pytest wall time outside the JSON, and records the r2 findings and their fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- streams.py: the list lookup's negative wrap is repeated; the draw seed is recomputed on every call and the per-instance root is rebuilt when it changes; each returned sequence gets its own copy of the root's entropy list. - test_streams.py: identity helpers compare spawn-key element types; tests for entropy isolation, a mutated 0-d draw with np.errstate overflow, and a user-defined index that wraps. - op1_report.md: the refusal invariant is scoped to built-in and NumPy argument types, with the user-defined cases named; r4 findings and mutation tables; refreshed probes, cost and counts (OP1 199 unit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- streams.py: only an exact int seed's root is kept; any other seed's root is built on every call, so a draw changed in place to an equal value of another type gets the registry's own outcome. - test_streams.py: identity helpers compare entropy element types; tests for an equal seed of another type, entropy isolation in every method (period-zero tagged calls included), a refused seed on repeat calls, an exact-int cached draw mutated in place, and wraps inside and below the spawned range. - op1_report.md: the cache step, the user-defined wording, the test list, r5's probe results, cost, counts (OP1 219 unit), the r4 count wording, and review r5 findings and mutation tables. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- test_streams.py: a negative int seed, from a draw changed after construction as an array element or through object.__setattr__, is refused on every call; an equal seed of another type set on the frozen field gets the registry's outcome; the seed-follow test moves a draw by 2**61 - 1, whose seed shares the cached seed's hash. - op1_report.md: corrects the claim that a refused seed can never reach the cache (mutant C2 was not equivalent); adds the tests, counts (OP1 229 unit) and a review r6 section; gives the Hypothesis-dependent kill counts as ranges; re-wraps prose. streams.py is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add review r7's verified test. It moves an object draw through exact int seeds past int64 and past float precision, and to the cached seed's negative, and compares every method with the registry. It kills r7's S8, R4 and R2 mutants. streams.py is unchanged. The report lists the test, updates the counts (230 collected, 333 in the OP1 command), gives the two Hypothesis-dependent kill counts as ranges, corrects "four" re-wrapped lines to three, and adds a review r7 section with the mutation results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add review r8's verified draw of 2**1100 to the exact-int cache test, before its second 0. Seeds 2**1100 + 5200 and 5200 agree in their low 1,100 bits, and 2**1100 is past float range, so the test now kills r8's K6, K1, S9, S14 and S13 mutants and loses no kill. streams.py is unchanged, and so are the counts. The report extends the test's description, gives the OP1 command's time as a range over host load, and adds a review r8 section with the mutation results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r9 approved 5f27645 with one minor finding and four nits; the code was correct. Six contrived lossy cache keys still passed every test. This takes both of r9's verified options; streams.py is unchanged. - test_cached_root_follows_exact_int_seeds_compared_exactly swaps the draws 2**64 and 2**64 + 1, so the walk steps between two seeds past 2**64 that agree in their low 64 bits and differ by a multiple of 3. - test_cached_root_follows_generated_exact_int_walks, r9's candidate unchanged, checks the invariant itself: any walk of an exact int draw by fresh values, one-bit flips, one-bit steps and negations gets the registry's streams. Together they kill K9, K11, K12, K13 and G1, with no kill lost across 114 mutants. K10 (key modulo 2**89 - 1) survives; only the exact comparison rules it out. Report: the r8 row takes nits 2 to 4, the timing is a range over recorded runs, counts move to 334 passed and 231 collected, and a review r9 section gives the finding and mutation results. The scope commands now diff against master 4e20c6e, merged at daa1f58; against the old base 7e635bb they showed master's own changes. A5's kill count is Hypothesis-dependent (10 or 11). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OP1 adds 231 unit tests and nothing in any other tier, so unit moves from 18,549 to 18,780 and the total from 25,119 to 25,350, in both tests/tier_counts.json and the README table. The recount collects only the test files that differ from d830223: OP1's seven modules (231 unit) and test_birth_evidence_artifact.py (13 artifact at master's version and at the merge). Master's test_op0_1_records.py collects 7 with and without OP1's __init__.py. CI's tier-policy test checks the totals. Report: section 1 names the d830223 merge (fa86293). Section 3 gives the OP1 command's 341 passed, which includes master's 7 OP0.1 tests; points the scope commands at d830223; uses git diff --quiet for the sealed-path check; and records the recount. A tier-slot section describes the merge. No OP1 source changed since 78c6c2d. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
marked this pull request as ready for review
October 26, 2026 00:00
Contributor
Author
|
Landing audit (Microcosm Dynamics coordinator, 2026-10-26 00:05Z). Merged at the reviewed head Gates checked at 00:00Z by the lane and again at 00:02Z by the coordinator:
Review:
Other open tier-slot PRs must merge master at |
MaxGhenis
added a commit
that referenced
this pull request
Oct 26, 2026
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>
This was referenced Oct 26, 2026
MaxGhenis
added a commit
that referenced
this pull request
Oct 26, 2026
Master brings OP1 (#566) and its report fix (#589). Git auto-merged scripts/first_estimates_birth_evidence.py and tests/estimates/test_birth_evidence_artifact.py, which both branches changed: the merge keeps master's OP1 lines and SSI0's exclusions and reachability block, and removes no line from either side. tests/tier_counts.json and tests/README-tiers.md conflicted. They now read master's counts plus the SSI0 test modules' 562 tests, counted by collection at this merge: - unit: 547 (contract 20, runner 41, inventory 486) - oracle_policyengine: 15 (engine 11, dataset engine 3, and the static offset test, one unparametrized function, counted from its source) So they read unit 19,327, oracle_policyengine 323 and 25,912 in all; the other tiers are master's. SSI0 adds no test to the birth-evidence module. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
MaxGhenis
added a commit
that referenced
this pull request
Oct 26, 2026
Master brings #566 (OP1: the open_population package and its evidence), #589 (OP1's report) and changes to the birth-evidence script and its artifact test. None of it changes the registry module, its two test modules or its mutation specs, and the registry module imports only the standard library and yaml. The tier conflict resolves to master's counts plus this branch's nine unit tests: unit 18,780 + 9 = 18,789, total 25,359. The README tier table matches the tier file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
Held-out data registry: round 7's follow-ups (unset event path, record ids, zero push boundary)
#580
Merged
MaxGhenis
added a commit
that referenced
this pull request
Oct 26, 2026
Master brings #566, #589, #590 and #580. Git auto-merged scripts/first_estimates_birth_evidence.py and tests/estimates/test_birth_evidence_artifact.py, which both branches changed: against each parent the merged files only add lines, so the merge keeps master's OP1 exclusions and CE1's exclusions and removes no line from either side. No CE1 path changes. 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.
Tier-slot head:
88b5df28merges masterd8302233and recounts the tiers. Reviews r2 to r10 approved. r2 to r9's minor findings are fixed. r10's one minor finding and four nits are all in the report, about its wording and its Hypothesis-dependent counts. A docs-only follow-up PR fixes them after this merges. This PR builds milestone OP1 of the open-population design (docs/design/open_population.mdon master, now at revision 14). Max approved the design in ruling d1925 at revision 11. Revision 12 adds the death-alignment boundary under ruling d1922. Revisions 12 to 14 change no passage OP1 builds. A Subfleet lane (GPT-6.1 Sol) built it, and later its fixes, in a standalone clone, on invented data only. The lane's sandbox can't write.git, so the main session reviewed and committed its tree. The report, with every code fact it relies on (file and line), isdocs/design/open_population_evidence/op1_report.md.What it adds
src/populace_dynamics/open_population/:exits.py: a harness-only exit adapter for the mortality slot (_ExitAdapter).no_marital_transitions. The repository's marital adapter widows anyone whose spouse leaves the roster, whatever the exit (cola_track_a/adapters.py:104–117), so OP4 must supply exit-aware widowhood first.streams.py:DirectRNGStreams, which builds the registry's spawn keys directly, at O(1) cost per draw. Emigration uses it. The sealed loop's own draws stay onProjectionRNGRegistry, andengine/rng.pyis unchanged.births.py: a birth-entry adapter for the fertility slot. It leaves fertility draws unchanged and declares each newborn as amaternal_birthaddition, with IDs from the projection's allocator.schedule.py: the scheduled-entry seam. It buildsm6_scheduled_entries_by_yearand the projection'sSyntheticPersonIdAllocatortogether, validates them withvalidate_projection_allocatoron the exact metadata, and declaresimmigrant_cohortadditions with their entry year.harness.py:REGISTERED_PRODUCTION_HORIZONS,tr2026_intermediate→ 2100, design §2.9) and cannot choose its end year. An unknown scenario raisesID_OR_STREAM_COLLISION, and shorter horizons are prefixes of the completed run.person_idorder.engine/accounting.pyandengine/accounting_history.py(ACCOUNTING_IDENTITY_FAILon failure), using three-column snapshots and a ledger indexed by year.gates.py: an unaligned-only gate run.nawi_by_year,wage_base_by_year, whichadvance_agereads). Any other key raisesGateTargetRefusedbefore an adapter runs.alignloads, whether on import or at run time.errors.py,events.py: named refusals and event declarations.The new modules join
POST_REVIEW_SOURCE_EXCLUSIONSand its pin.docs/design/open_population_evidence/op1_run_size.pymeasures invented runs to 2100, at 25, 100 and 400 starting people with emigration on.Invariants and their tests
Hypothesis property tests and example tests in
tests/open_population/(231, all unit), all on invented rosters:Stock-flow, every year: end = start − deaths − emigrants + births + scheduled entrants, exactly in counts and within the reported residual in weights.
entry_kind, and every exit has exactly one kind.Emigration coupling:
Emigration stream: the emigrant set equals the one recomputed from the registry's tagged children. The marginal matches p, and the draws are independent of the mortality person stream and the fertility stream.
Stream identity: at every valid address,
DirectRNGStreamsequalsProjectionRNGRegistry. The check is exhaustive on a grid (draws 0–2; n_periods 0, 1, 7, 75, 86; every module and method, including the period-0 tagged cases), plus Hypothesis over draw, period, module, ordinal, child and tag. A Hypothesis walk of an exactintdraw changed in place (fresh values, one-bit flips and steps, negations) gets the registry's streams at every step.Refusal identity: for arguments of built-in and NumPy types, wherever the registry returns or raises, the direct class does the same, with the same stream or the same exception type and message. The one exception is a spawn count the registry cannot complete. User-defined argument types are outside the claim, and the report names the cases where they can differ; the engine passes none of them. The direct class repeats the registry's steps in order:
intseed's root is kept, and it is rebuilt when the seed changes; any other seed's root is built on every call);ssize_tchecks;Each returned sequence gets its own copy of the root's entropy. Every comparison checks the element types of the entropy and the spawn key as well as their values. A grid tries every combination of 18 malformed periods (including NumPy floats and bools,
Decimals and arrays), three modules (one unknown) and nine tails (including NumPy integers that wrap), for all six methods at ten horizons (including counts pastssize_tand wrapping ones). Malformed draws and 80 Hypothesis examples extend it.Horizon: a registered scenario's request always ends at its registered horizon, and two production runs of one scenario to different end years cannot be constructed. A production run to 2100 runs in the suite. The year-t slice is identical across prefix reads.
Determinism and order: the same inputs and seeds give identical output, including with a mortality adapter that does not sort. The sealed fertility materializer still links children to mothers in row order (
baselines/fertility.py:114–128,engine/steps.py:473–497). Its minimized two-mother counterexample stays a strictxfail, and sealed code is unchanged.Run size and RNG cost
On this host, at 25, 100 and 400 invented people over 75 years:
Checks
At
88b5df28, merged with masterd8302233:pytest tests/open_population tests/estimates/test_birth_evidence_artifact.py tests/test_entrant_schedule.py tests/test_entrant_domains.py tests/test_entrant_id_allocation.py tests/test_track_b_holdout_registry.py tests/test_track_b_holdout_registry_committed.py: 556 passed, 2 skipped, 1 strict xfail. The OP1 command alone (the first five paths) gives 341 passed and 1 strict xfail in 8 to 20 s, depending on host load. That is OP1's 334 plus the 7 OP0.1 record tests master keeps intests/open_population/. CI runs the rest of the suite.unittests and nothing in any other tier.tests/tier_counts.jsonandtests/README-tiers.mdmoveunitfrom 18,549 to 18,780 and the total from 25,119 to 25,350. The recount collected only the test files that differ from master, not the whole repository; CI's tier-policy test checks the totals.black -l 79andruffclean on every changed file;git diff --checkclean.88b5df28passed every job, the tier check included (finished 21:16Z). Runs 40194301088 on78c6c2d1, 40188392641 on5f276453, 40184373475 on42be3231and 40180013772 on3cd74630passed every shard except the tier check, which waited for this recount.engine/(includingengine/rng.py),gates.yaml, committed runs orsrc/populace_dynamics/track_b/;git diff --quiet d8302233over the sealed paths exits 0. The only shared-file change is the tier recount.Reviews
r1 (Opus 5.5, at
bba5b812): REVISE. It found three major issues: a self-certified production horizon, untested emigration stream identity, and an open gate metadata channel. It also found seven minor ones. All are fixed ina8c627a8, with the RNG fast path in7d321aef, a production test at 2100 in0d0c073c, and the report and measurement in3d69b1fc. The report's §4 maps each finding to its fix, its test and its mutation re-check.r2 (GPT-6.1 Sol delta review, at
3d69b1fc): APPROVE, with three minor findings: an incorrect load range in the report, no test of refusal precedence (mutant N10 survived), and a non-integer horizon the registry refuses but the direct class accepted.1647a4bafixes all three:streams.pymirrors the registry's integer refusals in its order, the refusal grid catches N10 and five other refusal mutants, and the report gives the JSON's load ranges and labels every timing outside the JSON.daa1f58dmerges master4e20c6e4(Track B: held-out data registry for every Track B and open-population gate #560 and Registry: compare a pull request's own commits from its fork point #582) without conflicts.r3 (Opus 5.5 delta check of
1647a4baand the merge, atdaa1f58d): APPROVE, with one minor finding. The report stated the refusal invariant more broadly than the code delivered: 288 of 2,352 exotic-type addresses still differed, though none can arise from the engine.dee1e1b7closes it. The direct class now mirrors the registry exactly, the probe's 2,352 addresses agree, 4,556 period-zero identities hold, and twelve mutants of the fix are killed. The report states the invariant to its true scope.r4 (Opus 5.5 delta check of
dee1e1b7): APPROVE, with three minor findings and a nit:np.errstate(over="raise");6361b4c0fixes all three. Negative positions wrap as the list lookup does. The draw seed is recomputed per call, and the root is rebuilt when it changes. Each sequence gets a fresh entropy list. Both identity helpers compare element types, and three new tests pin the root's state. The report scopes the invariant to built-in and NumPy types and names the user-defined cases left. Rerun on the fix, r3's and r4's probes give no difference for built-in, NumPy or pandas types, and 13 mutants of the fix are killed.r5 (Opus 5.5 delta check of
6361b4c0): APPROVE, with three minor findings and a nit, none reachable from the engine. It confirmed the coordinator's four checks.3.0,Decimal(3),np.int64(3)) was served from the cachedintroot, where the registry refuses it or types its entropy differently.seed_sequenceonly.-lengthwere unpinned.3fda5862fixes all three. Only an exactintseed's root is kept. Both identity helpers compare entropy element types. Twenty new test cases pin an equal seed of another type, entropy isolation in every method (period-zero tagged calls included), refused seeds on repeat calls and wraps inside and below the range. Rerun on the fix, r3's, r4's and r5's probes give no difference for built-in, NumPy or pandas types. Every mutant r5 found non-equivalent is killed.r6 (Opus 5.5 delta check of
3fda5862): APPROVE. It found the code correct, with no difference in 472,392 type-sweep comparisons, and confirmed the coordinator's four checks. It had two minor findings and a nit, all in the tests and the report:intseed, from a draw changed after construction, is refused and does reach the cache.object.__setattr__.3cd74630changes only the tests and the report;streams.pyis unchanged. Ten new cases pin refused negativeintseeds and frozen-field changes, and the seed-follow test now catches a hash-keyed cache. That kills all four of r6's non-equivalent survivors (C2, M9, M13, M16). The report corrects the C2 claim in place and adds a review r6 section.r7 (Opus 5.5 delta check of
3cd74630): APPROVE. It found the code correct and confirmed the coordinator's four checks. It had one minor finding and two nits, all in the tests and the report:intdraw pastint64, or two seeds equal as floats, down the cached path, so four contrived mutants survived (S8, R4, R2, R5).42be3231changes only the tests and the report;streams.pyis unchanged. r7's verified test,test_cached_root_follows_exact_int_seeds_compared_exactly, kills S8, R4 and R2. R5 differs only past CPython's 4,300-digit int-to-string limit, a process-wide setting, and stays unpinned. The report fixes both nits and adds a review r7 section.r8 (Opus 5.5 delta check of
42be3231): APPROVE. It found the code correct, confirmed the coordinator's four checks, closed r7's finding and nits, and reproduced every count. Its one minor finding was again in the test: the seeds never aliased modulo 2^64 and never passed 2^64 + 5201, so five contrived cache-key mutants survived (K6, K1, S9, S14, S13).5f276453adds r8's verified draw of 2^1100 to that test, and changes nothing else in it;streams.pyis unchanged. That kills all five, with no kill lost across 100 mutants. The report adds a review r8 section.r9 (Opus 5.5 delta check of
5f276453): APPROVE. It found the code correct, confirmed the coordinator's four checks and reproduced every author mutant output. Its one minor finding was again in the test: six contrived lossy cache keys still passed, among them the cached seed compared modulo 3, by its low 64 bits past 2^64, by bit length, or without a large seed's sign. It also had four nits in the report.78c6c2d1takes both of r9's verified options;streams.pyis unchanged. The draws 2^64 and 2^64 + 1 swap places in the exact-inttest, and a new Hypothesis property test checks the invariant itself: any walk of an exactintdraw gets the registry's streams. Together they kill five of the six, with no kill lost across 114 mutants. The sixth, a key compared modulo 2^89 − 1, is ruled out only by the exact comparison the code makes. The report fixes the nits, corrects its scope commands to diff against master4e20c6e4, and adds a review r9 section.fa862935merges masterd8302233for the tier slot, without conflicts; its tree equalsgit merge-tree --write-tree 78c6c2d1 d8302233.88b5df28recounts the tiers and updates the report.r10 (Opus 5.5 delta check of
78c6c2d1and the slot head88b5df28): APPROVE at88b5df28. The merge is clean: its tree equalsgit merge-tree --write-tree 78c6c2d1 d8302233. OP1's diff against master is its 20 new files, the two exclusion pins and the recount, and every count reproduces. r9's finding is closed as r9 asked:Its one minor finding and four nits are all in the report. The r9 table's r8-harness row gives one run's property-test gains as fixed, though they vary with Hypothesis's draws. Two r5 and r6 table cells need ranges (7 or 8; 54 or 55). Three sentences need clearer wording or a wider timing range: r10's OP1 command took 20.06 s at load 98. A docs-only follow-up PR fixes them. Six new contrived cache-key mutants survive. All fall in r9's known classes (an odd-factor modulus, size, or values the strategy can't reach), and the exact comparison
cached[0] != seedrules out every lossy key.Still to do
88b5df28: r10 approved and CI is green.🤖 Generated with Claude Code