Files
FESADev/docs/mitc4-shell-feast-eigen/corrections.md
T

113 lines
9.6 KiB
Markdown

# Source echo classifier 최소 교정 결과
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `correction-agent`
- Input contract revision: `r2`
- Outcome: `blocked-environment`; 다음 owner: `coordinator-agent`
- Dispatched failure_classification: `harness`
- Retry key: `mitc4-shell-feast-eigen|implementation|harness|r2`
- Attempt: `1`; 동일 unfinished assignment에서 ONE minimal correction을 수행했다. 이전 환경 continuation은 추가 allowance 또는 phase transport retry가 아니다.
기준: [FEATURED_AGENTS](FEATURED_AGENTS.md), [PRD](PRD.md), [MFE-ADR-012](ADR.md#mfe-adr-012--source-echo-분류-오탐의-bounded-운영-correction),
[dispatch](coordination.md), [implementation-plan](implementation-plan.md), [환경](implementation-environment.md),
[복구 R4](implementation-recovery.md#r4-조건부-exact-dfa-invocation과-후속-검증), [verification](implementation-verification.md),
[prep Step0](../../phases/mitc4-shell-feast-eigen-execution-prep/step0.md).
Trace: `FEM-REQ-MITC4-EIGEN-023/025`, `MFE-C27`, `IO-T11`.
## 핵심 결과
**Source echo 오탐은 교정됐고 신규 37개 회귀가 통과했다.**
전체 gate는 MSVC build의 환경 접근 거부와 protected Hook timeout 불일치로 미완료다.
Full pytest는 `152 passed, 1 failed`이며 실패 assertion을 변경하거나 제외하지 않았다.
Production 변경은 [execute.py](../../scripts/execute.py)의 기존 `_codex_environment_failure`와
새 private `_stdout_has_helper_failure`뿐이다. Stderr helper 검사를 유지하고 stdout은
runtime prefix 또는 구조화된 `error/turn.failed`를 판별한다. Failed command의 출력도
runtime prefix를 확인한다. 성공 command의 source/command payload와 agent의 source 설명을
runtime failure로 사용하지 않는다. Auth/CLI 진단, terminal/history, retry, sandbox, ownership 함수는 변경하지 않았다.
[사전 재현](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-baseline.json)은 수정 전 synthetic source excerpt와 archive raw 모두의 잘못된 helper 판정을 기록한다.
[교정 후 audit](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-corrected-audit.json)은 같은 archive에서 helper 판정 `null` 및
원래 명시적 Hook 쓰기 거부 사유의 `reported-blocked`를 확인한다. Historical phase/history/raw를 수정한 것이 아니다.
AST 비교도 위 두 method만의 변경을 확인했다.
## RED → GREEN 및 검증
실행 Python은 workspace의
`C:/Users/baram/orca/workspaces/FESADev/Eigen/.harness/build/mitc4-eigen-evidence/prep/classifier-correction/pytest-venv/Scripts/python.exe`이며
Python `3.11.15` / pytest `9.1.1`이다. Direct entry는 성공했고 uv/network fallback은 사용하지 않았다.
Python 명령은 `-B -X utf8 -m pytest -v -rs`, 허용된 workspace `cache_dir`와 실행별 새 `--basetemp`를 사용했다.
최초 RED만 기본 temp와 UTF-8 옵션 전 명령이었다. 실제 absolute command, stdout/stderr 경로·hash 및
전체 parameter inventory는 [검증 summary](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-verification-summary.json)와 각 실행 JSON에 있다.
| 실행 / exact command record | Exit | Wall seconds | 실제 결과 |
| --- | ---: | ---: | --- |
| [최초 RED](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-red.json) | 1 | 4.2882233 | 6 failed, 16 passed, 15 setup errors; 기본 `pytest-of-Mimi` temp 접근 거부를 별도 분류 |
| [새 workspace temp RED](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-red-workspace-temp.json) | 1 | 8.1127850 | **21 failed, 16 passed**, 37 selected/36 deselected; setup errors 0 |
| [같은 targeted GREEN](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-green.json) | 0 | 8.8222791 | **37 passed**, 36 deselected; pytest 자체 duration 8.03 s |
| [Step0 전체 focused](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-focused.json) | 1 | 45.3687980 | 135 passed, 1 failed; pytest duration 44.58 s |
| [`cmake -S . -B .harness/build -A x64`](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-configure.json) | 0 | 0.8602958 | VS18/MSVC/x64 cache configure 완료 |
| [`cmake --build .harness/build --config Debug`](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-build.json) | 1 | 0.5442108 | FileTracker 초기화 접근 거부 |
| [전체 pytest](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-full-pytest.json) | 1 | 45.8682791 | **152 passed, 1 failed**, skip 0; pytest duration 45.03 s |
새 필수 tests는 [test_execute.py](../../tests/test_execute.py)의
`test_environment_classifier_ignores_successful_source_echo` 6 cases,
`test_environment_classifier_retains_runtime_helper_failure` 16 cases,
`test_successful_source_echo_preserves_terminal_and_retry` 15 cases다.
RED에서 6개 echo 오판과 15개 terminal/retry 오판을 관찰한 **뒤** production을 수정했다.
처음부터 통과한 true-runtime 16개를 새 RED로 주장하지 않는다.
GREEN은 stdout/stderr의 실제 helper failure를 exit0/1에서 유지하고 mixed echo+failure도 차단한다.
Completed/exit0, explicit error/blocked의 원래 reason/history, pending missing-result,
nonzero/124만으로 retry 금지, 실제 wrapper timeout의 최대2회 시도 및 terminal 우선 처리를 확인했다.
Focused는 지정된 timeout/Executor/ownership/Hook scope/preset 전체 targets를 포함한다.
기존 timeout tests의 마지막 `.value` 수정도 focused/full에서 실제 통과했으며 해당 파일은 수정하지 않았다.
## 남은 환경 blocker와 미실행 gate
[Build stdout](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-build.stdout.log)의 결정적 실패는
`ZERO_CHECK.vcxproj`의 `GetOutOfDateItems` → `Microsoft.Build.Utilities.FileTracker`
type initializer에서 발생한 `MSB4018 / UnauthorizedAccessException / 0x80070005 (E_ACCESSDENIED)`다.
Source compile correctness 실패로 재해석하거나 build guard를 변경하지 않았다.
선행 full build 실패에 따라 아래 CTest 명령은 미실행이며 count/exit/duration을 주장하지 않는다.
- `ctest --test-dir .harness/build -C Debug --show-only=json-v1`
- `ctest --test-dir .harness/build -C Debug --output-on-failure`
[Focused/full pytest failure](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-full-pytest.stdout.log)는
`tests/test_harness_timeouts.py:175 / test_registered_hook_and_one_time_invocation_contract`의
`assert 1800 == 7500` 한 건이다. Protected `.codex/hooks.json`은 편집하지 않았고 해당 test도 유지했다.
두 환경 blocker 해소 후 승인된 full build/CTest와 전체 pytest 검증이 남아 있다.
기존 registered Stop/CTest의 source 변경 전 `362 tests / exit0` 관찰은 이번 manual full evidence를 대신하지 않는다.
등록 Stop은 활성 상태 그대로이며 수동 호출·state 조작 없이 이번 최종 결과는 보고 시점 미관찰이다.
이 운영 correction에는 별도 eigen/reference comparison이 적용되지 않는다.
## 이전 환경 진입 이력
| Entry | 보존된 결과 |
| --- | --- |
| [최초 기본 uv entry](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906020757Z-red-entry.json) | exit2 / 0.0395046 s; 사용자 cache 접근 거부, collection 전 중단 |
| [continuation1](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906021629Z-continuation-entry-failure.json) | exit2 / managed 0.133794 s; hermes interpreter metadata 접근 거부 |
| [continuation2](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906024054Z-continuation2-entry.json) | exit2 / 11.5178819 s; PyPI network os10051, Python 실행 전 중단 |
각 환경-only entry와 이전 blocked 보고서/native records는 보존했다.
이번 named venv 및 새 temp 선택은 Coordinator가 허용한 동일 correction의 환경 해소이며
접근 거부된 cache/interpreter 재접근, network 사용 또는 sandbox 확대는 없었다.
## 소유 파일과 인계
| Changed artifact | SHA-256 |
| --- | --- |
| `scripts/execute.py` | `64f5165fc544b3b17904c633ef3b222de79b52a0960e254c5b5c4eb99e79c2d0` |
| `tests/test_execute.py` | `0eb0c1ca0f25199e00686b7e3ab57672b1390437d09da218a929added0346dd6` |
이 보고서의 hash와 non-owned byte/branch/HEAD/link 검토는 [최종 audit](../../.harness/build/mitc4-eigen-evidence/prep/classifier-correction/20260906025404Z-continuation3-final-audit.json)에 둔다.
정확히 지정된 source/test/report 3개와 허용된 ignored evidence/cache/temp만 변경했다.
Coordinator의 dirty management 2개, upstream, phase/status/history, reference와 native records는 보존한다.
Branch `feat-mitc4-shell-feast-eigen-execution-prep`, HEAD `5dfbea7e543b64fdefcea292de43237adb790a72`를 유지한다.
Root Git writes, phase Executor, peer dispatch, 외부 solver, physics/release 승인 또는 workflow 전이는 없다.
ONE minimal correction 이후 추가 수정 cycle은 수행하지 않는다. Targeted 교정 성공과 전체 gate의
`blocked-environment`를 구분하여 Coordinator에 반환한다. 환경 해소·exact-run 조건 감사와
한 번의 후속 Implementation rerun dispatch는 Coordinator 소유이며 즉시 `retry`로 전이시키지 않는다.