P28-02-EQ: 意味を保つ軽量化:同等性の先行固定(harness)

This commit is contained in:
Agent Control Runner
2026-10-22 06:42:29 +09:00
parent a46418d064
commit 9adbbee334
16 changed files with 6682 additions and 33 deletions
@@ -1,4 +1,78 @@
# P28-02-EQ progress — S5 (repair 10, Claude Opus 5.5 Desktop implementation)
# P28-02-EQ progress — S6 (repair 12, Claude Opus 5.5 Desktop implementation)
Implementer: Claude Opus 5.5 in the Desktop control session, by the user's delegation
("Codexの使用量上限いきそうなので、作業をひきとって"; Root relayed 「実装担当含めOpusに委任」).
The registered contract keeps worker codex; no Codex/Astra run was started for this stage.
Submission goes through the normal Runner submit, which makes the commit. 正式受入は保留、原本加算0。
- S a46418d064ebf8c8e03043bae50c29ac174b5472 (repair 11): its exact-S native passed
(native-a46418d-r01, 7 phases, cleanup errors empty, sealed), and its formal validation
cb059f305dd34e7aa811b40ad1cfb6f2 passed both checks (unit 162 tests OK; native-verify
exit 0, verified). The fresh independent Opus review (session
local_179020e9-e4c8-45ab-aaa0-be27aaa3f3d6, DESKTOP_RESULT.json
c08eedb2ff81fd308e0771aeb4330076389561255a2bb964567be28f478592cd) returned
changes_requested: EQ1-EQ4 and EQ6 met, EQ5 not met. The normal intake recorded
review_failed and repair_pending; the normal repair made repairs 12. All of it is retained.
- The high finding is accepted: the source closure was only unit-tested. run_eq and verify_eq
required the before SOURCE_SHA, so the frozen EQ could not admit an OPT S that changes only
registered allowed files (OPT_CONTRACT_T1 §2 and §4). S6 (EQ_S6_AFTER_VERSION_PLAN):
- BEFORE_SOURCE_MAP.json holds the registered base product source map (1407 rows); its
digest must equal the existing SOURCE_SHA on every read. compare_versions.admit_source
admits the before version (no registration, no difference) or an after version (the
changed set equals the sorted registered OPT files; no added or missing source).
- run_eq --opt-changed PATH (repeatable) registers the OPT files; actual_pins records
registered_changes and source_closure, the admission records version and
measured_source (before S_eq-native-not-Q, after S_opt-native-not-Q; never Q).
verify_eq re-runs the closure with the recorded registration and requires the recorded
closure, version and label; actual_pins on the checkout gets the same registration.
- verify_eq --compare-versions --before <bundle> --after <bundle> is the bundle-level entry
of the comparator (SPEC §2): both seals, versions and closures again, every non-product
pin equal, compare_reports on the sealed A-phase reports of R and O, existing defects of
both versions listed (after_all_e_pass for the OPT judgment).
- The three low findings are fixed: the probe records the actual _latest_digest_dirty before
each E5 operation (false or null accepted, true rejected); bundled_inputs requires the
collector's fixed manifest SHA and normalized absolute destinations inside the read-only
directory; the seal (bundle schema v2) records every directory, empty ones included.
- Evidence kinds are kept apart:
- Unit, engine-free, real code paths: admit_source; run_eq.actual_pins with a synthetic map
(only collector.source_map, inputs, host SHAs of the synthetic fixture/engine and the
machine query are patched); recompute of a real synthetic after bundle; compare_bundles
unmocked on a real before and a real after synthetic bundle (positive, a real state
difference, pin drift, closure and label tampering, seal tampering, swapped, same bundle).
One unit test (S6Admission main) mocks actual_pins only to see the registration main
passes; it is not counted as admission evidence.
- Diagnostic, not formal (EQ_S6_AFTER_ADMISSION_DIAG_R01 in the Root control folder): the
real run_eq.py --check, unmocked, on a throwaway after-version checkout (an APFS clone of
this working tree as its own temporary git repository, one allowed OPT file changed and
committed). Before version and the registered after version were admitted; no
registration, a wrong registration, a registration without change, an added source and a
non-OPT change were rejected with the source closure error. No engine was started.
- Unit evidence (engine-free `python3 -B test_eq.py`; full raw outputs with SHA files):
- Class-targeted runs during development were displayed through tail and are not claimed
as retained raw results. One of them ran out of disk space (the first S6 bundle tests
copied 709 MB synthetic bundles); the tests now clone with cp -c and build two bundles
per class.
- UNIT_OUTPUT_S6_ATTEMPT_01 (final, all changes included): 179 tests OK in 207.351 s,
Python exit 0; same bytes as UNIT_OUTPUT.txt,
SHA-256 9dd93de5fd3b66791d6902d51a055caa2c3dd559de6c42019ebb1ab147b2af11.
- UNIT_OUTPUT_S6_SEATBELT_01: the same suite under the Runner validation seatbelt profile,
run locally (see its exit line in IMPLEMENTATION.md). Local runs are not formal validation.
- Test bodies changed for S6, each recorded here: the E5 fixture detail carries
latest_digest_dirty_before false instead of digest_materialized_before true, and the
materialization test rejects true; s4_bundle_fixture takes an optional registration and
pin overrides and records commit, version, measured_source, registered_changes,
source_closure and the non-product pins; the S4 probe-admission mock returns a before
source_closure; the stored-result test records registered_changes [] in its admission and
mock; the bundled-inputs test holds its synthetic manifest to its own SHA in place of the
collector's and expects the manifest error before the escape error. All other earlier test
bodies and raw outputs are unchanged; 17 S6 tests were added.
Next: Runner submit → exact-S native 7 phases (before version, no --opt-changed) → bundle →
p28-02-eq-unit and p28-02-eq-native-verify → fresh independent Opus review of all 6
conditions → normal qualification, approval, integration and final → OPT/whole-unit.
23/88、4/30は不変。
## Retained S5 progress (unchanged historical text)
Implementer: Claude Opus 5.5 in the Desktop control session, by the user's delegation
("Codexの使用量上限いきそうなので、作業をひきとって"; Root relayed 「実装担当含めOpusに委任」).