From c395c83b69b2ac4c6ae003a7ea347e115ab865ae Mon Sep 17 00:00:00 2001 From: Takeshi Date: Wed, 14 Oct 2026 09:59:08 +0900 Subject: [PATCH] Record complete Opus repair handoff after verified delivery failure --- .../execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF.json | 7 +++++++ .../p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF_RUN.json | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF.json create mode 100644 docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF_RUN.json diff --git a/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF.json b/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF.json new file mode 100644 index 0000000..8b769bc --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF.json @@ -0,0 +1,7 @@ +{ + "action": "request-repair", + "task_id": "P08-03", + "reason": "Reissue of Repair 14 for actual state=blocked. The previous worker (34f6ef5c) stopped with no changes and no tests because the direction text never reached it. That was a delivery failure, not a product or spec defect. The complete recorded direction follows unchanged. Do not use any other copy. The commander confirmed these anchors read-only in this checkout: R09_COMMIT is at tools/check_p08_normal_placement_evidence.py:147, jpeg_dimensions at :150, r09_images at :193, the repair13_images exclusions at :474 and :484, and the file tests/fixtures/p08-03/repair13_images.py exists. Before you edit, briefly declare the target findings, the files you will change and the tests you will run. The direction is delivered here, so do not return blocked for a missing direction.\n\n=== RECORDED REPAIR 14 DIRECTION (complete) ===\nRepair 14 for P08-03 (candidate 7dde98cc). This responds to review 63933fedc03d4e3483d68671724df4fa (changes_requested). Keep all allowed_paths and spec conditions unchanged. Keep the actual R09 raw proof from 31aa7706d28a92e313c432d5a62e35d19503dcc3 for all 5 conditions (support_connection, invalid_position_reason, demolish_rebuild, pan_zoom_world_identity, separate_pid_resume). Do not run another native/OS collection unless the checks below show that the reuse doesn't apply. If that happens, report it as needing a Root re-run instead of working around it.\n\n(A) Reuse applicability. Rewrite the R09 branch of check() in tools/check_p08_normal_placement_evidence.py, around lines 466–489. Add a function r09_applicability(root, index) that does the following:\n1. Get the commit under check with `git rev-parse HEAD`. In the reuse case, require that `git merge-base --is-ancestor R09_COMMIT HEAD` succeeds. Do not skip the HEAD check any more.\n2. Run `git diff --name-status --no-renames R09_COMMIT HEAD` (committed changes) and also check the working tree with `git status --porcelain`. Every path in the complete diff must be in an explicit whitelist that is limited to: tools/check_p08_normal_placement_evidence.py, tools/test_p08_normal_placement_evidence.py, and docs/plans/original-completion-2026-10-02/execution/p08-03/** documents. The check fails if any other path changed, including any path under tests/fixtures/p08-03/**, scenes/**, tests/ui/**, tools/run_p08_normal_placement.py, suite-policy.json, completion_marker_contracts.json or the spec. Add, delete and mode changes count as changes.\n3. Require exact equality, with no exclusions, for everything the run is bound to: every input_map(root) entry against index['inputs']; every source_map entry outside the whitelist against the current file SHA; and the runner-input fields engine path/engine_sha256/engine version, settings/config/environment against the pinned R09 runner-input bytes. Verify these by SHA from the pins file, not from booleans.\n4. For the whitelisted checker/test files, keep the existing pin check: index['source_map'] must equal the blob at R09_COMMIT. Record the new SHAs separately as validator_only_changes. Do not merge them into the executed source map.\n\nDelete the `added = {'tests/fixtures/p08-03/repair13_images.py'}` exclusions and the conditional on lines 483–484. Also remove tests/fixtures/p08-03/repair13_images.py itself (and any .uid/companion), so the fixture input set equals the R09 inputs byte for byte. Any synthetic JPEG test data must be generated inside the test module in tools/test_p08_normal_placement_evidence.py, not as a new fixture input. Do not exclude new inputs to make the check pass.\n\n(B) JPEG validity. Change r09_images/jpeg_dimensions so the check no longer depends only on structure:\n(i) Positive validity comes from immutable original-capture hashes. Each of the 138 os-pair screen JPEGs must match the sha256/bytes that Root recorded at capture time in the pinned original index and the OS writer/reader receipts under pins['original_root']. Cross-check them against ROOT_R09_READONLY_IMAGE_DIMENSIONS.json.\n(ii) Tighten the parser. Require DQT for every component quant table referenced by the SOF, and DHT tables covering every table referenced by SOS (or the baseline default absence rule documented; if absent, reject). Each scan's entropy-coded segment must be non-empty. Component count and IDs must match between SOF and SOS. EOI must follow a non-empty scan.\nDo not use fake or decoderless synthetic positive fixtures. The only positive cases are the real R09 captured bytes, verified by hash in the Root-readonly original. If those bytes are not available in the worker sandbox, mark the positive test as a Root-executed check rather than a pass. Synthetic bytes may be used only as negatives.\n\nAdd these negative tests to tools/test_p08_normal_placement_evidence.py, each asserting a specific error message:\n- missing DQT\n- missing DHT\n- SOS references an undefined table\n- empty entropy stream between SOS and EOI (the coordinator probe case)\n- SOF/SOS component mismatch\n- valid structure but SHA not equal to the original capture hash\n- capture-hash row altered in the measurement but not in the receipt\n- R09_COMMIT not an ancestor\n- a non-whitelisted file changed between R09 and HEAD (one case each for scene source, tests/ui, fixture add, fixture delete, runner tool, suite-policy)\n- dirty working tree\n- input SHA drift\n- engine hash/version drift\n- settings/environment drift\n- index.commit not equal to R09 in reuse mode\n- HEAD mismatch in non-reuse mode\n\nKeep every existing negative test.\n\n(C) Metadata honesty. In docs/plans/original-completion-2026-10-02/execution/p08-03/implementation.json and CONDITION_MATRIX.md, record separately:\n- executed_native_source_commit=31aa770…, with its source/input/engine SHAs\n- current_candidate_commit, which is the new HEAD after the Runner commits (write 'to be bound by Runner' rather than a guessed SHA)\n- validator_only_changes, with their SHAs\nKeep the per-condition states as 'Root native evidence collected at 31aa; independent semantic acceptance pending; Root final full175 regression pending; integration pending'. Make no completion claims. Keep these review findings open as unresolved semantic-acceptance items:\n- the preview/runtime stair difference\n- the coordinator runtime acceptance=false\n- Windows same-distribution remains open\n\nDo not add numeric specs, caps, budget/security/billing changes, Godot/native/full runs by the worker, commits, or files outside allowed_paths. Run only the pure Python checker tests locally, and report exactly what was run.\n=== END RECORDED DIRECTION ===\n\nStanding constraints, unchanged from the task contract: the 5 conditions, spec_sha256 7941da4e… and the acceptance denominator (one existing unit among 30 packages/88 units, no partial credit) stay as they are. Do not change Runtime/service/construction data, Runner, policy or credentials. Do not commit, change branches, self-approve or integrate. Add a repair14 entry to implementation.json and keep the earlier repair history. Do not carry over any earlier PASS. Repair counter stays 14 as historical value. Repair, inference and material limits stay null, with no 500k compression. If a fix needs a path outside allowed_paths, return a minimal proposal with failing evidence and keep the in-scope work. Return a genuine submitted result that lists every item still pending: Root R09 positive hash re-check, Root final full175, independent Opus review of all 5 conditions, integration/current final verification/ledger, and Windows same-distribution/device (no Mac substitution).", + "codex_model": "gpt-6.1-sol", + "codex_model_reason": "Keeping the default gpt-6.1-sol. The scope is two existing Python files, deleting one fixture file and updating docs. The full design is given: git ancestor and whitelist-diff checks, SHA equality checks against pins, stricter JPEG marker parsing, and listed negative tests. No architecture work, native runs or multi-component debugging is needed. The previous attempt failed because the direction never reached the worker, not because of model capability, so gpt-6-astra would not fix it. Quality is backed by the existing negative tests, the Root re-check and independent review, and sol is cheaper in time and usage." +} diff --git a/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF_RUN.json b/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF_RUN.json new file mode 100644 index 0000000..22712d4 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p08-03/OPUS_REPAIR14_COMPLETE_HANDOFF_RUN.json @@ -0,0 +1,7 @@ +{ + "action": "run", + "task_id": "P08-03", + "reason": "The task is in repair_ready, and the full Repair 14 direction was dispatched as recorded. It answers review 63933fedc03d4e3483d68671724df4fa. The last worker (34f6ef5c) stopped because the direction text never reached it. That was a delivery failure, so the correct next step is to run the same direction unchanged. No new design or native re-run is needed.\n\nThe direction has three parts:\n- (A) Add r09_applicability(). It checks that R09_COMMIT is an ancestor of HEAD, that only whitelisted files changed (comparing committed changes and the working tree), and that inputs, source, engine and settings SHAs match the pins exactly. It removes the repair13_images exclusions and deletes the fixture file.\n- (B) Positive JPEG validity comes from the original capture hashes recorded by Root. The JPEG parser also gets stricter checks: DQT and DHT tables present, a non-empty scan, matching components between SOF and SOS, and EOI after a non-empty scan. Each listed negative test asserts a specific error message, and all existing negative tests stay.\n- (C) Metadata records the executed commit 31aa770, the current candidate as \"to be bound by Runner\", and validator_only_changes separately. Per-condition states stay pending, the semantic-acceptance findings stay open, and a repair14 entry is added while keeping the earlier history.\n\nUnchanged: allowed_paths, the 5 conditions, spec_sha256 7941da4e…, and the acceptance denominator. The worker runs only the pure Python checker tests, with no Godot, native or full runs, and does not commit. Still pending after this: Root positive R09 hash re-check, Root final full175, independent Opus review of all 5 conditions, integration/current final verification/ledger, and Windows same-distribution/device (no Mac substitution).", + "codex_model": "gpt-6.1-sol", + "codex_model_reason": "Keeping the default, gpt-6.1-sol. The work is limited to two existing Python files, deleting one fixture file, and two docs. The design is fully written out: the git ancestor and whitelist-diff checks, the SHA equality checks against pins, the stricter JPEG marker parsing, and the list of negative tests. No architecture choices, native runs or debugging across components are needed. The last attempt failed because the direction was never delivered, not because the model lacked capability, so gpt-6-astra would not help. The negative tests, the Root re-check and the independent review guard quality, and sol costs less time and usage." +}