16 KiB
REPAIR49 current correction
Source-ready only; original 30/88, formal 16, P04=0, no partial credit. REPAIR48's specification-mismatch blocker below is historical and corrected: the immutable 7000-byte original has SHA256 d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f; removing its single EOF LF gives 9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881. This is the existing Git/Runner strip/checker one-EOF-LF pin contract. No specification, approval or normalization change. Older contradictory wording below is superseded history, including blanket full-reuse prohibitions and all-controls-unexecuted wording. Q47 admission/index failures remain failures. See REPAIR49_STATUS.md for closure audit and verbatim complete_B FileNotFoundError. Root handoff reports payload(B), all53, series/join/power PASS; order-typed remains UNDETERMINED. Worker did not rerun them. Corrected complete_B remains unexecuted. Old native/full successes confer no new-S acceptance or credit.
REPAIR49 full184 conditional reuse candidate — all conditions UNVERIFIED
Native reuse is forbidden: all six series require fresh M/S/Q_tree provenance (p04_native_series.py:1287; checker:370). Full uses the existing separate binding (checker:1175-1186); no adopter or checker change is authorized. The following are requirements, not results or approval:
- New S5 source_before must equal old full selected_source_map: all 1369 keys and SHA values, not counts alone.
- Old project_root must remain unchanged: source-start == current source_refs == post-verification source_refs (full_suite_verifier.py:115).
- selected_source_map, roster184, parse329, settings, runner/marker module, marker contract, suite-policy and UID plan/stage must all match (116-152,225).
- inputs.engine must match current engine_pin (124-125).
- Revalidate every phase PID, cleanup, marker and diagnostics (154-228).
- Current s5/run_s5_native.py and full_suite_verifier.py SHA must equal the Root rehearsal versions.
- Never relabel old S/oldQ/project_root/PIDs/time. Describe reuse only as revalidating the exact-source-identical old full through the existing full_suite route; never claim full ran on new S.
- A separate Opus whole-unit review must independently confirm applicability.
Conditions 1–6 require actual checks after final freeze. If any predicate is unproved or differs, reject reuse and execute full184 once on the final version. SourceRefs (tools/run_all_tests.py:40-45) excludes docs/private package, but that fact is no substitute for complete source equality. No reuse is approved here.
REPAIR49 source-ready status
Original 30/88, formal 16, P04=0; no partial credit or whole-unit acceptance. Worker static audit/parse only; all new controls remain Runner work.
Explicit closure audit
All .py files are explicitly enumerated in CLOSURE, plus the six probe .gd files and six ROOT_RUN documents used by package-local runner material references. The list is fixed in source; a missing member cannot vanish through globbing. No package-local JSON is read by the identity execution path: JSON inputs are supplied B/raw/recorded Q. These external contexts remain required, not rewritten. The original checker is loaded from the original checkout and supplied to both builders.
build_p04_index.py:46:path = Path(__file__).with_name('p04_native_series.py')build_p04_index.py:184:series_spec = importlib.util.spec_from_file_location('p04_index_series', Path(__file__).with_name('p04_native_series.py'))checker_join_fixtures.py:111:current_wrapper = series.digest((series.HERE / 's4/run_s4_native.py').read_bytes())full_suite_verifier.py:111:wrapper = module('p04_full_uid', Path(__file__).parent / 's5/run_s5_native.py')normal_c_join_fixtures.py:12:spec = importlib.util.spec_from_file_location("normal_c_join", HERE / "normal_c_join.py")p04_native_series.py:1001:S4_HISTORICAL_WRAPPER = HERE / 's4/historical/run_s4_native_r28.py.reference'p04_native_series.py:1013:require(receipt_sha256 == digest((HERE / 's4/run_s4_native.py').read_bytes()),p04_native_series.py:1035:qa = HERE / 's4/p04_s4_power_probe.gd'p04_native_series.py:1332:wrapper_path = Path(__file__).parent / 's5/run_s5_native.py'p04_native_series.py:1340:admission = wrapper.module('fresh_s4_admission', HERE / 's4/run_s4_native.py')p04_native_series.py:1432:path = Path(__file__).parent / 's5/s5_order_adapter.py'repair48_identity_controls.py:38:CLOSURE = ('build_p04_index.py', 'bulk_reader_equivalence.py', 'checker_applicability_fixtures.py', 'checker_approval_fixtures.py', 'checker_candidate_fixtures.py', 'checker_encoder_fixtures.py', 'checker_join_fixtures.py', 'checker_native_fixtures.py', 'checker_negative_fixtures.py', 'checker_role_fixtures.py', 'checker_series_fixtures.py', 'collect_p04_native.py', 'full_suite_verifier.py', 'normal_c_join.py', 'normal_c_join_fixtures.py', 'p04_native_series.py', 'repair48_identity_controls.py', 'repair48_transport_controls.py', 's1/S1_ROOT_RUN.md', 's1/p04_s1_ev_power_probe.gd', 's1/run_s1_native.py', 's2/S2_ROOT_RUN.md', 's2/p04_s2a_midnight_probe.gd', 's2/run_s2a_native.py', 's2b/S2B_ROOT_RUN.md', 's2b/p04_s2b_shift_probe.gd', 's2b/run_s2b_native.py', 's3/S3_ROOT_RUN.md', 's3/p04_s3_closure_probe.gd', 's3/run_s3_native.py', 's4/S4_ROOT_RUN.md', 's4/admission_controls.py', 's4/engine_identity_negative_fixtures.py', 's4/p04_s4_power_probe.gd', 's4/phase_cut_regression.py', 's4/receipt_lifecycle_fixtures.py', 's4/run_s4_native.py', 's5/S5_ROOT_RUN.md', 's5/p04_s5_power_probe.gd', 's5/repair44_controls.py', 's5/run_s5_native.py', 's5/s5_guard_oracle.py', 's5/s5_order_adapter.py', 's5/s5_order_adapter_controls.py', 's5/s5_power_adapter.py', 's5/s5_power_adapter_controls.py', 's5/s5_uid_controls.py', 's5/s5_wrapper_fixtures.py', 'scratch_fixture_adapter.py')repair48_identity_controls.py:71:shutil.copyfile(HERE / relative, target)repair48_identity_controls.py:86:original_builder = load(HERE / 'build_p04_index.py', 'original_builder')repair48_identity_controls.py:125:rejects(lambda: a.module('outside_identity', HERE / 's5/s5_guard_oracle.py'))repair48_identity_controls.py:128:builder = load(HERE / 'build_p04_index.py', 'identity_builder')repair48_transport_controls.py:14:spec = importlib.util.spec_from_file_location('transport', Path(__file__).with_name('build_p04_index.py'))s1/run_s1_native.py:20:QA = HERE / "p04_s1_ev_power_probe.gd"s1/run_s1_native.py:61:shared = module("fresh_q_shared", HERE.parent / "s5/run_s5_native.py")s1/run_s1_native.py:89:QA, Path(__file__), HERE / "S1_ROOT_RUN.md",s1/run_s1_native.py:119:fixed.append(pin(HERE.parent / "s5/run_s5_native.py"))s2/run_s2a_native.py:20:QA = HERE / "p04_s2a_midnight_probe.gd"s2/run_s2a_native.py:33:]] + [HERE.parent / "s1" / n for n in ["run_s1_native.py", "p04_s1_ev_power_probe.gd", "S1_ROOT_RUN.md"]]s2/run_s2a_native.py:82:shared = module("fresh_q_shared", HERE.parent / "s5/run_s5_native.py")s2/run_s2a_native.py:111:QA, Path(__file__), HERE / "S2_ROOT_RUN.md",s2/run_s2a_native.py:141:fixed.append(pin(HERE.parent / "s5/run_s5_native.py"))s2b/run_s2b_native.py:20:QA = HERE / "p04_s2b_shift_probe.gd"s2b/run_s2b_native.py:25:HERE.parent / folder / name for folder, name in [s2b/run_s2b_native.py:26:("s1", "run_s1_native.py"), ("s1", "S1_ROOT_RUN.md"),s2b/run_s2b_native.py:28:("s2", "S2_ROOT_RUN.md"),s2b/run_s2b_native.py:71:shared = module("fresh_q_shared", HERE.parent / "s5/run_s5_native.py")s2b/run_s2b_native.py:102:QA, Path(__file__), HERE / "S2B_ROOT_RUN.md",s2b/run_s2b_native.py:132:fixed.append(pin(HERE.parent / "s5/run_s5_native.py"))s3/run_s3_native.py:20:QA = HERE / "p04_s3_closure_probe.gd"s3/run_s3_native.py:31:MATERIALS = [MANIFEST, AUDIT, HERE.parent / "s2b/run_s2b_native.py",s3/run_s3_native.py:32:HERE.parent / "s2b/p04_s2b_shift_probe.gd", HERE.parent / "s2b/S2B_ROOT_RUN.md"]s3/run_s3_native.py:90:shared = module("fresh_q_shared", HERE.parent / "s5/run_s5_native.py")s3/run_s3_native.py:121:QA, Path(__file__), HERE / "S3_ROOT_RUN.md",s3/run_s3_native.py:151:fixed.append(pin(HERE.parent / "s5/run_s5_native.py"))s4/admission_controls.py:99:series = s4.module('admission_series', s4.HERE.parent / 'p04_native_series.py')s4/admission_controls.py:100:series_tree = ast.parse((s4.HERE.parent / 'p04_native_series.py').read_text())s4/admission_controls.py:105:wrapper = s4.module('admission_fresh_wrapper', s4.HERE.parent / 's5/run_s5_native.py')s4/admission_controls.py:124:historical = s4.HERE / 'historical/run_s4_native_r28.py.reference's4/admission_controls.py:134:uid_plan, snapshot, _ = s4.module('admission_uid', s4.HERE.parent / 's5/run_s5_native.py').load_uid_helper(root, r, selected)s4/engine_identity_negative_fixtures.py:12:spec = importlib.util.spec_from_file_location("series", HERE.parent / "p04_native_series.py")s4/engine_identity_negative_fixtures.py:15:spec = importlib.util.spec_from_file_location("s4", HERE / "run_s4_native.py")s4/receipt_lifecycle_fixtures.py:36:s4 = load('receipt_s4_historical', HERE / 'historical/run_s4_native_r28.py.reference')s4/receipt_lifecycle_fixtures.py:38:series = load('receipt_series', HERE.parent / 'p04_native_series.py')s4/receipt_lifecycle_fixtures.py:42:tree = ast.parse((HERE.parent / 'p04_native_series.py').read_text())s4/receipt_lifecycle_fixtures.py:97:put(staged / 'run_s4_native.py', (HERE / 'historical/run_s4_native_r28.py.reference').read_bytes())s4/receipt_lifecycle_fixtures.py:98:put(staged / 'S4_ROOT_RUN.md', b'synthetic fixture material\n')s4/run_s4_native.py:21:QA = HERE / "p04_s4_power_probe.gd"s4/run_s4_native.py:136:shared = module("fresh_q_shared", HERE.parent / "s5/run_s5_native.py")s4/run_s4_native.py:177:QA, Path(__file__), HERE / "S4_ROOT_RUN.md",s4/run_s4_native.py:214:fixed.append(pin(HERE.parent / "s5/run_s5_native.py"))s4/run_s4_native.py:365:# The shared runner log is not write-once; see S4_ROOT_RUN.md.s5/repair44_controls.py:148:for name in ('S5_ROOT_RUN.md', 'PENDING.md'):s5/run_s5_native.py:26:QA = HERE / "p04_s5_power_probe.gd"s5/run_s5_native.py:33:matches = re.findall(r"^const CASE_TABLE: Dictionary = (\{.*?^\})", Path(path).read_text(), re.M | re.S)s5/run_s5_native.py:45:CASE_TABLE = case_table(QA)s5/run_s5_native.py:77:if len(seeds) != 1 or sorted(json.loads(seeds[0])) != CASES or sorted(case_table(QA)) != CASES:s5/run_s5_native.py:334:QA, Path(__file__), HERE / "S5_ROOT_RUN.md",s5/run_s5_native.py:527:# The shared runner log is not write-once; see S5_ROOT_RUN.md.s5/s5_order_adapter.py:46:POWER_PATH = Path(__file__).with_name('s5_power_adapter.py')s5/s5_order_adapter.py:50:GUARD_PATH = Path(__file__).with_name('s5_guard_oracle.py')s5/s5_order_adapter_controls.py:12:mutation = a.module('order_typed_mutation', Path(__file__).with_name('s5_power_adapter_controls.py'))s5/s5_power_adapter_controls.py:12:spec = importlib.util.spec_from_file_location("s5_power_adapter", Path(__file__).with_name("s5_power_adapter.py"))s5/s5_uid_controls.py:28:w = module('s5_uid_wrapper', Path(__file__).with_name('run_s5_native.py'))s5/s5_wrapper_fixtures.py:13:path = Path(__file__).parent / "run_s5_native.py"scratch_fixture_adapter.py:43:source = HERE / (args.fixture + ".py")
Explicit closure membership:
build_p04_index.pybulk_reader_equivalence.pychecker_applicability_fixtures.pychecker_approval_fixtures.pychecker_candidate_fixtures.pychecker_encoder_fixtures.pychecker_join_fixtures.pychecker_native_fixtures.pychecker_negative_fixtures.pychecker_role_fixtures.pychecker_series_fixtures.pycollect_p04_native.pyfull_suite_verifier.pynormal_c_join.pynormal_c_join_fixtures.pyp04_native_series.pyrepair48_identity_controls.pyrepair48_transport_controls.pys1/S1_ROOT_RUN.mds1/p04_s1_ev_power_probe.gds1/run_s1_native.pys2/S2_ROOT_RUN.mds2/p04_s2a_midnight_probe.gds2/run_s2a_native.pys2b/S2B_ROOT_RUN.mds2b/p04_s2b_shift_probe.gds2b/run_s2b_native.pys3/S3_ROOT_RUN.mds3/p04_s3_closure_probe.gds3/run_s3_native.pys4/S4_ROOT_RUN.mds4/admission_controls.pys4/engine_identity_negative_fixtures.pys4/p04_s4_power_probe.gds4/phase_cut_regression.pys4/receipt_lifecycle_fixtures.pys4/run_s4_native.pys5/S5_ROOT_RUN.mds5/p04_s5_power_probe.gds5/repair44_controls.pys5/run_s5_native.pys5/s5_guard_oracle.pys5/s5_order_adapter.pys5/s5_order_adapter_controls.pys5/s5_power_adapter.pys5/s5_power_adapter_controls.pys5/s5_uid_controls.pys5/s5_wrapper_fixtures.pyscratch_fixture_adapter.py
The fixture compares complete relative-path/bytes/SHA tables and canonical table tree hashes for original/A/B before execution and after positive identity work. Missing, traversal, outside paths and symlinks reject. Negative mutation phase is separate; existing byte/missing/extra/mapping/symlink/outside cases remain. A missing S5 .gd negative is added. complete_B_controls=true requires both placements' S5 facts and entire payload equality. No raw or compared fields are excluded or normalized. Actual three-placement proof is UNEXECUTED by worker; Runner must retain the emitted before/after tables.
Root handoff
Read ROOT_REPAIR49_CURRENT_EVIDENCE_AND_INDEPENDENT_SCOPE.json directly: payload(B), all53, series/join/power PASS per Root report, engine0, no acceptance. order-typed is UNDETERMINED and is not pass. Transport/raw-only/synthetic and q4801 six-series collection are historical S47 successes, not new-S evidence. Only the observed complete_B closure failure is repaired.
Historical complete_B failure (verbatim)
Traceback (most recent call last):
File "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/repair48_identity_controls.py", line 115, in <module>
run(parser.parse_args())
File "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement/docs/plans/original-completion-2026-10-02/execution/p04-01/repair48_identity_controls.py", line 60, in run
assert native[0].verify_fresh_s5(build) == native[1].verify_fresh_s5(build)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/41/j8fq6vqj2993cmyprl6p76pw0000gn/T/p04-r48-identity-8veppaza/first/docs/plans/original-completion-2026-10-02/execution/p04-01/p04_native_series.py", line 1430, in verify_fresh_s5
s = FreshSeries(build, 's5')
^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/41/j8fq6vqj2993cmyprl6p76pw0000gn/T/p04-r48-identity-8veppaza/first/docs/plans/original-completion-2026-10-02/execution/p04-01/p04_native_series.py", line 1338, in __init__
exec(compile(wrapper_path.read_bytes(), str(wrapper_path), 'exec'), wrapper.__dict__)
File "/private/var/folders/41/j8fq6vqj2993cmyprl6p76pw0000gn/T/p04-r48-identity-8veppaza/first/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/run_s5_native.py", line 45, in <module>
File "/private/var/folders/41/j8fq6vqj2993cmyprl6p76pw0000gn/T/p04-r48-identity-8veppaza/first/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/run_s5_native.py", line 33, in case_table
File "/opt/homebrew/Cellar/python@3.12/3.12.13_2/Frameworks/Python.framework/Versions/3.12/lib/python3.12/pathlib.py", line 1027, in read_text
with self.open(mode='r', encoding=encoding, errors=errors) as f:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/python@3.12/3.12.13_2/Frameworks/Python.framework/Versions/3.12/lib/python3.12/pathlib.py", line 1013, in open
return io.open(self, mode, buffering, encoding, errors, newline)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/private/var/folders/41/j8fq6vqj2993cmyprl6p76pw0000gn/T/p04-r48-identity-8veppaza/first/docs/plans/original-completion-2026-10-02/execution/p04-01/s5/p04_s5_power_probe.gd'