Repository navigation
Audit: executed counterexample to the selected chain's cross-stage owner-map binding (no new kappa) - #2301
Merged
Mister-Meeseeks merged 1 commit intoOct 15, 2026
Conversation
…ew kappa) Aaron Wang, with help from opencode. Executes the cross-stage owner-map binding gap that PR1959 recorded: coherent-emitter fixtures that swap two equal-width pooled-slot times or set a wrong hosting.owner_map_sha256 are accepted by the complete frozen post-emit stage sequence and by verify_t16.py's final binding, while the template-to-frozen-OWNERS binding fails on exactly the mutated fields. Rejection controls fail at audit lines 172 and 185. Package research/selected-ownermap-binding-gap/ with a deterministic stdlib replay.
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.
Scope
Scoped adversarial audit of one named acceptance boundary of the selected chain: the cross-stage owner-map binding. No kappa, certificate, supplier or frontier change. Contributor: Aaron Wang, with help from opencode (substantial AI assistance; no independent human review).
Task card:
supplier-boundary-audit(adversarial-audit; chooser OS noncef96018873928dd5ec93e3ca2fe16f1d9, priority revision 4), refined to the cross-stage owner-map binding. Drawn cardsuniform-transfer-auditandselected-stock-envelopematched recent claimed objects (#2273 completed the uniform-transfer object today; the one-stage stock object was claimed in #1166 (comment) and sits under several open PRs), so the second-choice card was taken per the pair-collision rule. Base main0fdd7d82de03e43c9e5a1000dfbcd380d1b687d2; selected-record SHA-25610b9e340fd8e354a37a0c4813c90e5de1dd42044b5f6aca4a3fc5a42b685fa32. Claim: #1166 (comment)Question and result
The frozen PR 1087 selected chain certifies the frozen
data/OWNERS.json.gzrole map twice:lift16checks every role inside its owner's actual window andindependent-t16rechecks it against invocation times.emitcopies that map verbatim into the hosted template'shosting.pooled_slots(eleven fields per role,timeincluded), andaudit_allcold.pyline 172 binds ten of the eleven fields back to the base-derived call owners. The chain also binds the template's bytes tightly by hash (auditline 185,invoiceline 175,assembleline 240, plusverify_t16.py'sasm/owner/invtemplate-sha equality).Two fields bind to nothing: the pooled slot's
timeandhosting.owner_map_sha256. Josie Elliston's #1959 recorded this in source text ("line 172 compares a pooled slot's roles fields but not its time"; the owner-map link "was previously implied by that determinism, not checked") and checked the binding inside its own verifier. This package executes the gap end to end through the complete frozen caller.Fixtures are canonical re-emits of the archived selected hosted template (every template-hash binding stays tight; only the audited field differs from the frozen owner map):
timehosting.owner_map_sha256set to a wrong digestport(checked roles field) changedportHOSTED.jsonhashThe six stages are the frozen
audit,invoice,assembly,admission-controls,bit-supplier-controlsandindependent-t16, run out-of-process through the pinnedrun_portable.pyexactly asverify_t16.pyinvokes them. The 20 final-binding assertions areverify_t16.py's own (driver pinned by archive-member SHA-256050e2dfb...), reimplemented 1:1.Accepted counterexample (F1). Pooled slots 0 and 480, that is (stage 0, replica 0, helper 0) and (stage 0, replica 8, helper 0), both width 9, exchange their invocation times 0 and 1. Every per-time width count is preserved, so no count, profile, rank-mass, deficit, prefix or row coefficient moves. The complete frozen chain accepts the template and all 20 final-binding assertions pass; the only receipt differences from the archived selected run are the expected
template_sha256hash cascades. The owner-map binding fails on exactly those two roles: the template now says each helper runs at the other's invocation.What would change downstream. The certified owner-window and invocation-time evidence applies to the frozen OWNERS times, not to the template's. A hosted-schedule consumer reading
hosting.pooled_slotsfrom the accepted template would host those two helpers at invocations no check validated. Inside the frozen chain thetimecolumn is inert (F1's receipt diffs are hash cascades only), so this is a contract gap at the accepted artifact boundary, not a change to the selected arithmetic.What the chain does catch (controls). A checked roles field is rejected at
auditline 172 (F3); a template whose bytes disagree withHOSTED.json's recorded hash is rejected atauditline 185 (F4). Artifact integrity is enforced; semantic equality of the pooled role map with the frozen owner map is not, beyond the ten fields line 172 compares.Reproduce
Expected status
PASS_SELECTED_OWNERMAP_BINDING_GAP, output equal to the committedEXPECTED.json(about 3-5 minutes). Stdlib only; checked on CPython 3.12.scripts/research_package.py --package research/selected-ownermap-binding-gap --check-onlypasses (PASS_PACKAGE_METADATA_AND_PINS), and the 65 research workflow tests pass.Serialisation notes (per CONTRIBUTING.md's regenerated-artifact rule): two machine-dependent serialisations are normalized before comparing receipts with the archived ones -
independent-t16keys itsinput_sha256by absolute input paths, and the frozen invoice'sartifact_semantic_sha256map is serialized in directory-enumeration order, so the byte hashassemblerecords asinput_sha256.fresh_invoicevaries by filesystem. Everything else reproduces the archived receipts exactly.Not checked
restore-parent,bind8,lift16,bind,emit) are not re-run: the fixture mutation stands in for anemitdefect in the unchecked fields (or post-emit tampering), andemitpins the OWNERS input by hash against the SPEC. Provider content binding against baseline1042'sslots/localis not re-checked (upstream of the mutation point).audit's module-level provider checks (lines 20-80), the nine other archivedaudit_allcold.pyversions (Audit: mutant coverage of the selected T16 controller/owner audit (no gap found, no new kappa) #1959 open question 1), and the cold baseline are untouched.Repair status and credit
The minimal repair is the two-equality guard the package's
link_checkimplements (pooled slots equal the frozen OWNERS content;owner_map_sha256equals the SHA-256 of the frozen gzip), added to a successor replay driver with frozen code unchanged. That repair stays blocked on a maintainer decision on wrapping the frozenverify_t16.py(#1959 open question 2) and is not attempted here.Predecessor credit: Josie Elliston's #1959 (
research/t16-audit-mutant-coverage/) identified the gap, supplied the boundary-check precedent and open question 2, and is the direct predecessor. The frozen chain is Jeremy Kothe's #1087 / #870gauge44-barch-t16code with Hao Yan's (@FanPUYen) #858 T16 controller,lift16andindep16; Rohan Arun's #1094 supplies the selected exchanges and archived run; the maintainer's frontier1094 audit archived the fixture. Concurrent and complementary: #2273 machine-checks that the 15 audit-unread fields (owner_map_sha256 among them) have no post-emit reader; this PR supplies the executed end-to-end acceptance of the wrong value and of the retimed role map.Branch
research/agent-46-ownermap-binding-f9601887, contribution head pushed tonavinor/integer-mult-bounds. Package:research/selected-ownermap-binding-gap/(README, TASK.json, SOURCES.json, VERIFY.json, verify.py, EXPECTED.json). New contributions are under the repository's Apache-2.0 license; source notices are retained.