10 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.
REPAIR48 implementation status
BLOCKED on exact specification-version context; source changes are retained for review. No acceptance or new credit is claimed. Original scope remains 30/88; formal credit is 16; P04 credit is 0. Engine runs, Git writes, Runner actions and delegation are prohibited.
The supplied task contract declares spec_sha256
9ec722e7dfb0bee178d291624a026420c08412574e238bba1fde012c7a6f7881.
The actual immutable docs/spec/acceptance/P04-01.json hashes to
d28aadb044633f7d804de5a92c8d4c4a7438dfbf44c3243dca978951f4def25f.
That local hash agrees with REPAIR47_STATIC_CHECKS.json. This worker has not
changed the specification or selected a replacement authority. Root must resolve
which exact specification bytes govern the retained repair before gate use.
This is an exact-version context gap, not a proposed acceptance change.
Current changes
build_p04_index.py separates exclusive generation (relocate_materials) from
read-only payload. The exact output is resolved B/p04-evidence, with no existing
output, traversal or parent symlinks. Fixed pins plus QA are checked for exact
duplicates and conflicting identities, including across series. Copies are
content-addressed under the first referencing series, created exclusively, and
rehashed. Exact (original path, bytes, SHA) identities share one copy across all
series; different original paths are never silently merged. RELOCATION.json
keeps original pin paths as keys. Raw inputs are never rewritten. Every payload
call checks map membership, declared relative form, hashes, unmapped files and
exactly one wrapper candidate. Materials and wrapper descriptors are relative;
the relocation-map SHA is included in the index. The obsolete absolute material
admission pre-check is removed. Main relocates, derives, checks refs and roles,
then writes index and the separate invocation receipt. Failure leaves a failed
output attempt without a usable index; an existing output cannot be resumed.
S5 dependency identity uses the package-relative power, series and guard module paths. Each module is read once and those same bytes are compiled and executed, without cached bytecode. Symlinks, outside dependencies and mismatched mappings are rejected. The roster is checked against the modules loaded. Dependency maps are checked against the executed roster before deriving facts. Absolute observed paths and checkout are retained in collection/dependency-invocation.json, outside the compared s5.json and the collection manifest's series mapping. The adapter's own observed path and executed-byte SHA are also retained there.
Static path audit
| Value | Result and required context |
|---|---|
| fixed pins and QA | Source placement is free-form. Generation reads original pinned paths; verification admits relocated relative copies under B/p04-evidence. |
| wrapper | Exactly one distinct original pin path must match wrapper_sha256; descriptor uses that relocated copy. |
| runner-input row | Absolute path is constructed from the current B and the registered series run. supplied_file admits each registered run root. No earlier Root B is embedded by the builder. |
| C references | Constructed under current B/audit-support/native-first-current, one of supplied_file's fixed roots. |
| native_bundle | Same fixed native-first-current root under the supplied B. |
| authorities | ROOT-relative source paths, resolved against the invocation's gate.ROOT. |
| native and full raw references | Relative to each retained run/B, with original provenance retained. No analysis checkout is used as a payload identity. |
| S1–S4 / verify_fresh_* | Shared implementations in p04_native_series.py; no separate checkout-keyed dependency maps. Current metadata modules are found via file; that path is not returned as a fresh fact. Fresh wrapper loading now executes source bytes directly. |
| S5 adapters | Checkout-keyed dependency map corrected. Raw hash keys refer to the immutable raw input, not the analysis checkout. Explicit raw root is resolved before writer/reader references are formed. |
| readers | Independent Reader data is validated from raw run-relative references and recorded original provenance. bulk_reader_equivalence.py is a fixture using explicit scratch checkouts, not a production payload producer. |
| full_suite_verifier | Explicit Q root and retained run are inputs. Its reference map uses run-relative names. Metadata module loading now executes source bytes directly. |
| scratch_fixture_adapter | Explicit scratch routing only; no production compared payload. |
Transport does not make the entire B portable by itself. FreshSeries still requires original Q source paths/project_root, the retained stage/formal copies, and the exact engine file for identity reads (no engine launch). full-suite verification also reads its recorded actual Q. If a later invocation changes B, the registry/run hierarchy and these original-source contexts must still be supplied. Missing context is a blocker; do not rewrite raw pins or the checker to conceal it. Static supplied_file inspection found no additional absolute descriptor admission gap in the builder's rows above. Runtime admission has not been claimed.
Historical failures and successes
The Q47 material admission failure is preserved verbatim in
REPAIR48_HISTORICAL_ROOT_Q47_ACTUAL_MATERIAL_ADMISSION_FAILURE.json.
All eight recorded attempts failed with their original unsupplied external material: ... messages. The index generation traceback is preserved verbatim
in REPAIR48_HISTORICAL_ROOT_Q47_ACTUAL_INDEX_GENERATION.log, ending:
ValueError: fresh raw recomputation drift
These are failures, not passing receipts. Original raw and historical receipts remain unchanged. Their retained source is build/owner-handoff/p04-after-p26-closure-r01/repair48-final-index-transport.
Root actually staged the S47 context under p04-fresh-context-r47, deviating from the fixed p04-fresh-context name in the pre-REPAIR48 S5_ROOT_RUN.md line 167. The old direction is retained as history. Material placement is now free-form for builder relocation; no historical receipt is renamed or adopted.
Q47 native successes and the historical full 184 result (21903 checks, zero reported failures, 329 parse paths, 186 ended PIDs, no guard/cleanup failures) remain historical only. They are not C and cannot be reused under the new S. The immutable checker still binds M/S/Q_tree; no adopter is introduced.
Verification handoff
The worker performed syntax parsing and static source/path inspection only. Per the final worker instruction that tests are formally executed by Runner, no pure control, check-only plan, registered checker or engine was executed. No result is inferred from a historical test count. No unaffected pure result is reused without a complete code/dependency SHA proof; none is claimed here.
Runner controls added:
- repair48_transport_controls.py --retained checks the real immutable S47 inputs/copies, r47 context and out-of-B Q pins, relocation repeatability, duplicate/conflict rules, material adversaries, wrapper failures, and the actual checker's old-S/new-S binding rejection using simulated Git observations without Git writes.
- repair48_identity_controls.py --raw --writer-sha --reader-sha --build checks independent same-byte complete analysis directories (S5 results and builder payload), dependency mutations and mappings, symlinks, outside paths, two read-only payload calls and unchanged B tree, index drift, and external absolute descriptor rejection. The optional B section must be supplied for the complete control, not omitted as an implicit pass.
All these controls remain UNEXECUTED. Required affected existing controls and fresh check-only S1/S2a/S2b/S3/S4/S5 plans also remain Runner work. A dirty-only failure has not been observed and is not invented. Source-ready is not a gate pass. Runner must verify full negative coverage, including exclusive output, pin-SHA mismatch and ambiguous wrapper bindings, before the native lease.
Normal-gate material roster and Root order
Supply the exact B with native-first-current, historical relocation inputs, fresh-run registry, every fresh run's runner-input/ended/source/UID/formal/raw and lifecycle receipts, the exact recorded Q source and engine identity context; B/p04-evidence/runner-materials with all pin copies and RELOCATION.json; the matching fresh collection including MANIFEST and separate dependency invocation record; and the matching full 184 run and its binding/raw receipts. The final index and generation-invocation receipt belong to this same attempt. Required original authorities and sources must exist in the frozen checkout.
Root's next order is unchanged: freeze new Q; affected pure controls; clean exact-Q check-only; capacity/PID-end checks; one heavy native lease for S1/S2a/S2b/S3/S4 and all ten S5 cases; readers/adapters; collect 15 EV and all subclauses; full 184 once; index generation with relocation; registered p04-acceptance once (no duplicate Root --verify-only); separate Opus whole-unit review; normal prepare/C/integration/final/Root DB join/ledger/main push. Only whole-unit acceptance can grant credit.