diff --git a/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md b/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md index b1d7f4d..8df0df8 100644 --- a/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md +++ b/docs/mitc4-shell-feast-eigen/FEATURED_AGENTS.md @@ -53,11 +53,12 @@ Reference artifact와 공통 정책은 수정하지 않는다. 외부 solver 실 | [io-schema.md](io-schema.md) | io-definition-agent | r2 | 기존 static 보존·eigen discriminant·N vectors/all-c evidence·self-check | | [io-mapping.md](io-mapping.md) | io-definition-agent | r2 | 책임·candidate 보존·TXT Value-only·27개 요구/11개 I/O 검증 obligation | | [implementation-plan.md](implementation-plan.md) | implementation-planning-agent | r2 | Prep 1/main 8개 step 및 실행 계획 gate pass | -| [implementation-environment.md](implementation-environment.md) | implementation-planning-agent | r2 | E8 기존 Ninja preset의 exact Root setup/native·registered same graph 명령 감사 완료; actual native 성공은 미검증 | -| [implementation-recovery.md](implementation-recovery.md) | implementation-planning-agent | r2 | R8 실패 보존 실제 완료; R9 별도 status-only/Executor checkpoint 계획 감사 완료, 실행 상태는 coordination | +| [implementation-environment.md](implementation-environment.md) | implementation-planning-agent | r2 | E9 병렬도1·실제 clean-first discovery 검증 계획 감사 완료; canonical Hook 적용 경계로 activation 미확정 | +| [implementation-recovery.md](implementation-recovery.md) | implementation-planning-agent | r2 | R10 attempt4 report1/control2 실패 보존 계획 감사 완료; 실제 WIP/조건부 R11 실행은 coordination 참조 | | [implementation-interfaces.md](implementation-interfaces.md) | implementation-planning-agent | r2 | 기존 확장점·API/source-test·vendor/state/transaction 책임 | | [implementation-verification.md](implementation-verification.md) | implementation-planning-agent | r2 | 요구27/NR27/I/O11·신규 test40·독립 oracle·fresh evidence·실제 validator | -| [implementation-prep-evidence.md](implementation-prep-evidence.md) | implementation-agent | r2 | attempt1/2 역사와 attempt3 classifier37/focused136 pass·manual build 환경 차단; 별도 registered362 pass와 terminal 판정은 coordination 참조 | +| [implementation-prep-evidence.md](implementation-prep-evidence.md) | implementation-agent | r2 | attempt4 classifier37/focused136 pass·manual Ninja discovery failure; 전체 gate 미통과 및 raw/registered 경계는 coordination 참조 | +| [msvc-build-access-error.md](msvc-build-access-error.md) | Root (사용자 요청 설명문서) | r2 | 실제 접근 오류·정상 Ninja 전환·남은 discovery/Hook 경계를 기록한 독립 설명; exact1 docs commit 완료 | | [corrections.md](corrections.md) | correction-agent | r2 | source echo 최소 교정1회·RED/GREEN37 확인; full Python Hook1실패와 manual build 환경 차단 보존, registered Stop362 pass는 coordination 후속 evidence | | [phases/index.json](../../phases/index.json) | implementation-planning-agent(정의), Executor(진행) | r2 | 기존5개 보존; prep blocked/main pending | | [prep index](../../phases/mitc4-shell-feast-eigen-execution-prep/index.json) | implementation-planning-agent(정의), Executor(진행) | r2 | actual attempt3 blocked/history3 보존·R9 pending 복구 완료; 재개 원본은 coordination | diff --git a/docs/mitc4-shell-feast-eigen/coordination.md b/docs/mitc4-shell-feast-eigen/coordination.md index ab633b1..62e286b 100644 --- a/docs/mitc4-shell-feast-eigen/coordination.md +++ b/docs/mitc4-shell-feast-eigen/coordination.md @@ -3,15 +3,15 @@ - Feature ID: `mitc4-shell-feast-eigen` - Owner: `coordinator-agent` - Contract revision: `r2` (사용자 승인 stabilization 개선·영향받는 정적/eigen 재검증 범위) -- Stage: `implementation` (E8.1 setup/R9 완료; 정상 Ninja prep 재개) -- Outcome: `retry` -- Next owner: `implementation-agent` (actual Executor의 E8.2 prep Step0; 기본 workspace-write) -- Attempt: `4` (이번 정상 Ninja 환경 재개 할당; 실제 기존 history3 보존) +- Stage: `implementation` (E8.2 actual terminal 보존; 최소 정상 환경 복구 계획) +- Outcome: `blocked-environment` +- Next owner: `coordinator-agent` (동결 문서 checkpoint 뒤 unchanged Executor R10 실패 WIP 보존) +- Attempt: `4` (actual Step0 error/history4; 이전 history3 보존) - Completion: 미완료 - Failure classification: `environment` - Retry key: `mitc4-shell-feast-eigen|implementation|environment|r2` - Escalation class: `null` -- Blocker: `null` (정상 Ninja configure와 R9 control checkpoint/clean 완료; native build/full VERIFY는 실제 재개에서 확인) +- Blocker: Ninja 병렬 GoogleTest discovery의 공유 JSON 실패로 manual full VERIFY 미완료. 현재 Hook resolver는 canonical Stop1800을 선택하며 정상 설정 적용 방법도 미확정이다. 기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md), [SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md), [FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md). @@ -45,12 +45,39 @@ Root의 intake 시작 Git 조사에서는 worktree clean을 확인했다. 당시 ## 현재 bounded dispatch +E8.2 native는 자연 종료했다. Planning은 소유 세 문서의 [R10 실패 보존](implementation-recovery.md#r10-attempt4의-errorhistory4-보존)과 [E9 조건부 직렬 환경](implementation-environment.md#e9-attempt4-후의-직렬-ninja-검증)을 반환했다. R10은 기존 unchanged guarded Executor의 report1/control2 WIP 보존을 current exact hash/history4로 고정하고 Root [MSVC 접근 오류 설명](msvc-build-access-error.md)의 exact1 선행 문서 commit을 허용 경로에 포함한다. E9는 `CMAKE_BUILD_PARALLEL_LEVEL=1`의 parent/manual/registered 공통 적용과 한 번의 정상 clean-first/verbose build에서 실제 세 discovery 및 등록 identity 검증을 정의한다. Installed module, source/test, discovery guard, timeout 또는 sandbox 정책은 수정하지 않는다. Planning 정적 감사는 PowerShell24 오류0/Python AST9/local links101 누락0/보호11hash·Executor AST·HEAD/error-history4 보존과 diff-check exit0이며, Coordinator는 R10 명령·소유·현재 hash와 조건부 activation 경계를 대조해 문서 delta를 pass로 수용했다. 이는 prep gate 통과가 아니다. 다음은 Root exact5 문서 checkpoint와 Coordinator의 R10 actual preservation이며 status-only recovery/추가 native는 아직 할당하지 않는다. + +Root의 [현재 Hook 설정 해석](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-config-resolution.json)은 설치 CLI0.153.2의 config-only `hooks/list`에서 현재 worktree cwd의 enabled/trusted Stop source를 canonical checkout `.codex/hooks.json`, `timeoutSec=1800`으로 확인했다(exit0). Linked 파일7500과 달라 실제 wrapper 수명 약1802.6초를 설명하는 근거이며, 과거 native raw에 설정 로드 경로 event가 없다는 한계는 유지한다. Inline Hook 추가는 additive라 기존1800을 대체한다고 가정하지 않는다. Root는 정상 per-invocation/worktree 설정 지원 여부만 마지막 bounded read-only로 확인하며 canonical/Hook/trust 파일을 변경하지 않는다. 이 확인은 실패 WIP 보존과 독립적으로 진행한다. 현재 추가 native, status reset, main8steps 또는 downstream gate 전이는 없다. + +Root의 [최종 bounded 설정 감사](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-source-audit.json)는 공식 지원 `project_root_markers`를 이용한 strict-config 목록조회도 같은 canonical1800을 선택함을 확인했다(server exit0). 조사한 문서/schema에서는 기존 sourcePath/timeout을 대체하는 정상 per-invocation 방법을 찾지 못했다. 두 Hook 파일은 Stop timeout 외 의미가 같지만 canonical 파일은 현재 exact ownership 밖이다. 남은 실제 적용의 권한 해석은 Root에 요청했으며 이를 이유로 임의 변경·새 DFA 실행·Hook 생략을 하지 않는다. 실패 보존은 이 판단에 의존하지 않는다. + +### E8.2 이전 dispatch와 activation 경계 + Root exact5문서 commit `7d714c2713bf945f07fc78f85e49ec27e3184134` 뒤 [E8.1 실제 setup](../../.harness/build/mitc4-eigen-evidence/prep/attempt3/e8-root-setup/result.json)은 native exit `0`, `7.446`초로 완료했다. Tracked 변경0/HEAD·clean·기존 VS cache 불변이다. [설정 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt3/e8-root-setup/configuration-observation.json)은 새 Ninja/Debug/MSVC Hostx64/x64, 승인된 dependency4, 실제 archive 경로와 config=example 동일성을 확인한다. 이는 configure-only이며 library/build/CTest는 아직 미실행이다. 이어 별도 Planning이 status 한 값만 `blocked`→`pending`으로 바꾸고 나머지 bytes/JSON/history3·보호10hash 보존을 확인했다(exit `0`, phase SHA-256 `6d0bfcfe89ebaee0f76d27c8917da91085069c92a55e1088dc05bd3053e37e32`). [R9 actual Executor checkpoint](../../.harness/build/mitc4-eigen-evidence/prep/attempt3/r9-status-checkpoint-result.json)는 native/managed exit `0`, `1.531`초이며 commit `9766724a5d363fc9ff8800a99726a63bdba55314`의 exact index1·pending/history3·protected bytes·clean을 검증했다. Top blocked/history3는 보존했다. 현재 actual dispatch는 **E8.2 첫 PowerShell block 그대로의 prep1회**다. Required inputs는 Feature 폴더와 FEATURED_AGENTS/PRD/ADR/coordination, r2 계약, 원래 prep Step0 및 E8/R9와 attempt3 evidence다. Official implementation-agent profile, 원래 owned9, 기본 workspace-write와 finite14400/Stop7500/shared7200 및 existing terminal/retry/ownership guards를 유지한다. E8.3의 정확한 Ninja preset mapping이 과거 VS 고정 명령을 명시 대체한다. 이미 GREEN인 source를 되돌리지 않고 classifier37/focused/full Python, native MSVC/x64/Debug configure/build/discovery/full CTest, 실제 library 위치/hash/mtime·fresh reference 및 registered same graph를 검증한다. 과거 manual 실패·미실행/automatic pass와 report reference 문구 정정은 Implementation owner가 맡는다. Native error/blocked 또는 guard/contract 실패 시 실제 terminal을 보존하며 두 번째 source Correction이나 무단 transport retry를 하지 않는다. Root/Coordinator는 이번 관리 checkpoint 뒤 active invocation 동안 non-owned 편집/Git을 동결한다. Actual prep pass 전 main/physics/release 전이는 없다. Root outer Stop/일반 후속 사용 환경에는 이 process-local setup이 지속된다고 가정하지 않는다. 이번 native와 그 registered Stop의 명시 환경은 E8.2로 고정하며, feature closure에서 local 설정 수명과 일반 사용 환경을 별도로 대조한다. 전역 env 또는 Hook state를 변경하지 않는다. +### E8.2 attempt4 실제 terminal 감사 + +[Actual Executor 결과](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/executor-result.json)는 PowerShell exit `1`, `2833.812`초, 시작/종료 HEAD `23c4ebe526260d584247804d8cbe2f7aa8cc60ac` 및 branch 불변, 비소유 tracked/config/기존 VS cache 변경0을 확인했다. [원시·상태·보고서·CTest archive](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/terminal-archive.json)에 raw SHA-256 `c74f18d0b681f6ab7480b825de4458188fb6b204147ab84b08582820039cab61`, Step0 `error`/history4, top 및 owner report를 보존했다. Raw Codex exit `0`, `transportFailure=null`이며 explicit error는 transport retry가 아니다. 이 시점 dirty는 report1/control2뿐이다. + +[Coordinator terminal audit](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/coordinator-terminal-audit.json)는 exit0으로 이전 history3의 JSON 동일성, source/test/Hook 8개 불변 및 관리문서 local links 191개/누락0을 확인했다. + +| 실제 검증 경계 | 판정과 한계 | +| --- | --- | +| 현재 Python regression | classifier37 exit0; focused136은 raw상 3회 모두 exit0, `45.510/45.390/45.635`초. 다음 실행에서 이미 통과한 같은 대상을 근거 없이 반복할 필요는 없다. | +| Manual Ninja full VERIFY | configure0/build1. MSVC x64 compile/link 뒤 integration GoogleTest JSON parse failure. 순차 CTest/full pytest는 미실행이며 후속 diagnostic으로 대체하지 않는다. | +| Registered validation | incremental Ninja build0, 실제 CTest21912 exit0/362 pass. LastTest SHA-256 `4d9c71b7caa4ca58f81ee5670f6a0c5af323a0fe20b6ac0195a0420a7a8784d9`, 616282 bytes. 실제 pwsh23560은 약1802.6초 후 exit1, Python3492/24968은 각각0이므로 registered wrapper 전체 성공으로 보고하지 않는다. | +| Solver feature gate | prep와 별개인 MITC4 mass/FEAST 본 구현·고유치 reference comparison·physics/release는 미실행이다. | + +[선택 raw events](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/raw-audit-selected-events.json)와 [실제 process exits](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-process-observations.json)를 대조했다. Parent DevShell 성공 뒤 child tool-shell의 script 실행은 policy로 거부됐지만 상속된 MSVC x64 환경을 확인하고 compile/link를 실행했다. `integration-discovery-rerun.log`는 stdout이 없었던 native cmake exit0을 나중에 쓴 관찰 메모다. 원시 item67은 cmake0 뒤 로그 조회 실패로 shell1, item68은 메모 작성/hash0이며 메모를 원시 stdout으로 취급하지 않는다. 역사상 reference를 "읽지 않았다"는 owner 표현은 full CTest 내부 기존 reference 읽기와 구분해 다음 owner가 정정한다. + +[Root의 installed/generated module 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-gtest-discovery-path-observation.json)은 `TEST_TARGET` 누락으로 세 discovery가 같은 empty-target hash JSON을 REMOVE/run/READ하는 구조를 확인했다. 이는 병렬 경합을 강하게 뒷받침하지만 최초 race를 재현한 실험은 아니다. Owner의 `test`/`harness` 라벨과 반환 attempt2는 그대로 보존하고, Coordinator는 실제 실행 history4와 환경 근거를 기준으로 기존 `environment|r2`에 정규화한다. 새 source Correction 또는 tolerance/계약 revision 변경은 허용하지 않는다. + +사용자 요청 설명문서는 Root가 exact1 commit `b81f7cf636e890d7c144a8b1857e58d7d0a5d4c3`으로 추가했다. SHA-256 `0722dff075e706977d55eb1ac2514d4318b1341adab30a51fc82c744315f1c9f`이며 정적 links/whitespace/fences와 staged diff-check는 exit0이다. 이 문서 commit은 Solver/Hook/source gate 통과를 뜻하지 않는다. + ### E8 설정 및 계획 감사 이력 Owner의 [E8](implementation-environment.md#e8-attempt3-후의-정상-backend-대안)·[R9](implementation-recovery.md#r9-e8-활성화-전의-status-only-checkpoint) 상세를 owner/r2/현재 hash와 대조해 계획 gate `pass`로 수락했다. 실제 adapter의 preset 명령4/7200 cap·기존 guard, PowerShell18 blocks/errors0, Python AST7, local links91/missing0, 고정 hash7·Executor AST·blocked/history3 보존과 diffcheck가 exit `0`이다. Root는 설치 DevShell의 실제 인수, config.example/preset의 `.harness/build-ninja-msvc-debug`, load_config 필드 및 process 환경 전체 finally 복원을 read-only 확인했다. Native Ninja 성공은 아직 미검증이다. diff --git a/docs/mitc4-shell-feast-eigen/implementation-environment.md b/docs/mitc4-shell-feast-eigen/implementation-environment.md index 4bb68c9..112c1c8 100644 --- a/docs/mitc4-shell-feast-eigen/implementation-environment.md +++ b/docs/mitc4-shell-feast-eigen/implementation-environment.md @@ -624,3 +624,112 @@ Implementation은 보고서의 광범위한 reference 미사용 문장을 정정 Source·수식·schema·tolerance·reference를 이 환경 준비에서 변경하지 않는다. 정상 native 대안이 실제 실패하면 결과를 보존해 Coordinator에 반환하며, 새 exact-run DFA 결정이 필요한지는 그 evidence로 판단한다. 지금 main까지 권한을 확대하지 않는다. + +## E9. Attempt4 후의 직렬 Ninja 검증 + +[R10](implementation-recovery.md#r10-attempt4의-errorhistory4-보존)이 우선이다. +[설치 모듈·생성 경로 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-gtest-discovery-path-observation.json) +SHA256 `9d383f04a347df95b742403ceca4732b331ddf4ec96437993f0ceffaa060bf59`에서 +세 POST_BUILD discovery가 누락된 TEST_TARGET 때문에 같은 JSON을 REMOVE/run/READ한다. +이는 병렬 공유 파일 경쟁을 뒷받침하며 최초 interleaving을 재현한 것은 아니다. +정상 환경 변수 `CMAKE_BUILD_PARALLEL_LEVEL=1`로 같은 Ninja build의 discovery를 직렬화한다. +CMake 설치 모듈, generated discovery, source/test/Hook/config와 timeout은 수정하지 않는다. + +**Activation 미확정:** Root의 config-only [현재 resolver 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-config-resolution.json)은 +canonical Stop1800 해석을 확인했다(server exit0, SHA256 +`5deb9a701388605a14868198276993af3884f0cc76c48928831968b272f46de4`). +실제 native raw의 source event는 없으며 현재 resolver 결과와 외부 pwsh 약1802초 관찰을 구분한다. +남은 쟁점은 정상 override 지원·적용 방법이다. 이를 Coordinator가 검토하기 전 status reset/다음 +실행을 할당하지 않는다. Canonical Hook 쓰기나 DFA·추가 timeout을 승인으로 추정하지 않는다. +아래는 이 조건 해소 후의 실행 계약이며 현재 실행 준비 완료 또는 실제 성공이 아니다. + +부모 Coordinator invocation은 E8.2 block 전체를 사용하되 +`$env:FEM_HARNESS_CODEX_SANDBOX = 'workspace-write'` 바로 다음에 다음 한 줄을 추가한다. + +```powershell +$env:CMAKE_BUILD_PARALLEL_LEVEL = '1' +``` + +나머지 named Python/UVoffline/cache, dependency4, 새 짧은 TEMP/TMP와 E7 pytest basetemp, +Root에서 실제 성공한 installed x64 DevShell, 유한14400 module invocation과 finally의 +전체 process 환경 복원은 그대로다. 따라서 registered Stop에도 같은 병렬도1과 graph가 +상속된다. Actual configured outer Stop7500/shared·command7200 계약은 유지하지만 실제 +설정 출처·종료 evidence를 확인해야 하며 새 cap을 만들지 않는다. +원래 invocation line은 그대로다. + +```powershell +& $mfePython -B -X utf8 -c "from scripts import execute; execute.StepExecutor.CODEX_TIMEOUT_SECONDS = 14400; execute.main()" $mfePhase +$mfeExit = $LASTEXITCODE +if ($null -eq $mfeExit) { throw 'Native Executor exit unavailable' } +``` + +Native child tool shell에서는 E8.2 manual composition의 DevShell script 호출 한 줄을 +아래 **상속 환경 검사**로 대체한다. 나머지 dependency/Python/짧은 TEMP·병렬도1 설정과 +finally는 그대로 적용한다. 실행 정책 변경이나 우회 인수를 사용하지 않는다. +부모가 제공한 x64 환경이 없으면 검증 명령을 시작하지 않고 blocked-environment로 반환한다. + +```powershell +if ($env:VSCMD_ARG_TGT_ARCH -notin @('x64','amd64') -or + [string]::IsNullOrWhiteSpace($env:VSINSTALLDIR) -or + [string]::IsNullOrWhiteSpace($env:INCLUDE) -or + [string]::IsNullOrWhiteSpace($env:LIB)) { throw 'Inherited MSVC x64 environment missing' } +$mfeCl = (Get-Command cl.exe -ErrorAction Stop).Source +$mfeNinjaExe = (Get-Command ninja.exe -ErrorAction Stop).Source +if ($mfeCl -notmatch '[\\/]Hostx64[\\/]x64[\\/]cl.exe$') { throw 'Unexpected compiler architecture' } +Write-Output ("Inherited compiler={0}; Ninja={1}" -f $mfeCl, $mfeNinjaExe) +$env:CMAKE_BUILD_PARALLEL_LEVEL = '1' +``` + +새 prep의 첫 manual build는 아래 **한 번의 clean-first full build**다. 새 Ninja graph의 +기존 성공 후 no-op build를 경쟁 해소 evidence로 보고하지 않도록, 실제 세 executable +link와 POST_BUILD discovery를 같은 직렬 build에서 다시 실행한다. CMake의 기존 +clean-first만 사용하며 기존 VS cache나 reference/evidence를 삭제하지 않는다. +Registered Stop과 후속 통상 build는 E8의 일반 build 명령에 병렬도1을 상속한다. + +```powershell +cmake --preset windows-msvc-ninja-debug "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG=$mfeArchive" +$mfeVerifyExit = $LASTEXITCODE +if ($null -eq $mfeVerifyExit) { throw 'Configure exit unavailable' } +if ($mfeVerifyExit -ne 0) { exit $mfeVerifyExit } +cmake --build --preset windows-msvc-ninja-debug --clean-first --verbose +$mfeVerifyExit = $LASTEXITCODE +if ($null -eq $mfeVerifyExit) { throw 'Build exit unavailable' } +if ($mfeVerifyExit -ne 0) { exit $mfeVerifyExit } +ctest --preset windows-msvc-ninja-debug --show-only=json-v1 +$mfeVerifyExit = $LASTEXITCODE +if ($null -eq $mfeVerifyExit) { throw 'Discovery exit unavailable' } +if ($mfeVerifyExit -ne 0) { exit $mfeVerifyExit } +ctest --preset windows-msvc-ninja-debug --output-on-failure +$mfeVerifyExit = $LASTEXITCODE +if ($null -eq $mfeVerifyExit) { throw 'CTest exit unavailable' } +if ($mfeVerifyExit -ne 0) { exit $mfeVerifyExit } +``` + +Verbose log에는 `fesa_unit_tests_576e7e9d_discovery.cmake`, +`fesa_integration_tests_d537bc73_discovery.cmake`, +`fesa_reference_tests_ac7cf2f0_discovery.cmake`의 실제 세 호출과 성공을 보존한다. +세 `*_tests.cmake`의 새 mtime/hash·등록 identity와 full discovery JSON을 대조한다. +현재 prep inventory는 unit289/integration34/reference39, 총362다. 명령이 실제 각 target의 +올바른 tests를 등록했는지 확인하며 합계나 leftover JSON의 존재만으로 통과하지 않는다. +Generated suffix가 바뀌면 actual build graph의 각 target 매핑을 기록하고 임의 파일을 만들지 않는다. + +새 `src/fesa/Debug/fesa_solver.lib`와 세 executable의 hash/mtime를 기록한다. +이 새 binary에 대한 required manual full CTest의 fresh reference solve, 입력 복사/hash와 +결과 생성 시각을 확인하고 그 뒤 registered same-binary full의 정상 cache 재사용과 구분한다. +Manual fresh solve를 cached-only 자동 실행으로 대체하지 않는다. 각 raw log를 덮어쓰기 전에 +새 attempt evidence로 보존한다. No-op 관찰·단독 진단·합산 duration은 full gate가 아니다. + +E7의 classifier37/focused136/full pytest 대상과 모든 assertion은 유지한다. 새 invocation에서 +각 필수 검증을 수행하되 현재 code에서 한 번 통과한 focused136을 근거 없이 반복하지 않는다. +과거 attempt4의 focused136 실제 세 반복이 모두 exit0이었다는 사실도 보존한다. +이미 GREEN인 source를 RED로 되돌리지 않으며 두 번째 source Correction을 시작하지 않는다. +기존 전체 Python, native configure/build/discovery/CTest와 실제 registered Stop 성공이 모두 +필수다. Full pytest/CTest의 미실행 상태를 다음 owner가 실제 evidence로 해소한다. + +Implementation owner는 보고서의 역사적 reference 미사용 문장을 정정해 full CTest의 기존 +static reference 읽기·비교, 원본 직접 수정 없음과 새 eigen 비교 미실행을 구분한다. +과거 manual failure와 registered pwsh1/Python0/CTest0도 각각 보존한다. +Result payload는 manual 결과와 아직 미관찰인 Stop을 구분하며 Coordinator가 실제 종료 후 +검토한다. Active Executor 동안 Root/Coordinator는 non-owned edits/commits를 멈춘다. +Main은 prep 전체 gate 뒤 별도 workspace-write invocation만 허용하며 E9의 병렬도1을 +같이 사용한다. 새로운 동일 실패는 원시 evidence와 기존 retry key로 반환한다. diff --git a/docs/mitc4-shell-feast-eigen/implementation-plan.md b/docs/mitc4-shell-feast-eigen/implementation-plan.md index f26ae0e..6e02a4a 100644 --- a/docs/mitc4-shell-feast-eigen/implementation-plan.md +++ b/docs/mitc4-shell-feast-eigen/implementation-plan.md @@ -35,6 +35,12 @@ Coordinator의 별도 정상 Ninja invocation, 기존 Step 명령 대응을 확 [R9](implementation-recovery.md#r9-e8-활성화-전의-status-only-checkpoint)의 status-only 변경·checkpoint는 후속 할당으로 남는다. 이번 delta는 문서/정적 확인이며 native Ninja 성공은 아직 미검증이다. +Attempt4의 최초 manual Ninja build는 GoogleTest discovery JSON 오류로 실패했다. +[R10](implementation-recovery.md#r10-attempt4의-errorhistory4-보존)이 report1/controls2의 +error/history4 보존을 고정한다. [E9](implementation-environment.md#e9-attempt4-후의-직렬-ninja-검증)는 +정상 병렬도1·실제 clean-first 검증을 계획한다. 현재 resolver의 canonical Stop1800 해석은 +확인됐지만 정상 override 지원·적용 방법은 미확정이다. R11 status-only 변경과 재실행은 별도 할당 전 수행하지 않는다. + [FEATURED_AGENTS](FEATURED_AGENTS.md), [PRD](PRD.md), [ADR](ADR.md)와 [coordination](coordination.md), 승인된 [requirements](requirements.md), [research](research.md), [formulation](formulation.md), [NR](numerical-review.md), [I/O](io.md) 및 각 상세 r2를 적용한다. diff --git a/docs/mitc4-shell-feast-eigen/implementation-recovery.md b/docs/mitc4-shell-feast-eigen/implementation-recovery.md index 866ae6a..25ea7dc 100644 --- a/docs/mitc4-shell-feast-eigen/implementation-recovery.md +++ b/docs/mitc4-shell-feast-eigen/implementation-recovery.md @@ -716,3 +716,168 @@ report/top/raw의 현재 hash를 확인한다. Phase control 한 경로만 commi Native exit를 즉시 전파하고 commit 전후 snapshot 및 clean preflight를 감사한다. 실패하면 bytes/원시 로그/이미 생성된 commit을 보존하고 다음 invocation을 시작하지 않는다. E8 setup 또는 native 성공을 이 status checkpoint 성공에서 추론하지 않는다. + +## R10. Attempt4의 error/history4 보존 + +[Executor 결과](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/executor-result.json)와 +[terminal archive](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/terminal-archive.json)는 +native PowerShell1, Codex0, transportFailure null과 report1/controls2만의 변경을 기록한다. +현재 Step0/top은 error/history4다. Classifier37/focused136은 통과했지만 required manual +build는 GoogleTest JSON parsing에서 실패했고 manual CTest/full pytest는 미실행이다. +후속 단독 discovery와 등록 CTest 성공으로 최초 실패를 대체하지 않는다. + +[프로세스 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-process-observations.json)의 +registered Ninja build/CTest0·362pass 및 Python 두 개0과 외부 pwsh1은 별개의 실제 결과다. +Whole Stop0으로 합치지 않는다. [원시 선택 이벤트](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/raw-audit-selected-events.json)의 +item67 direct discovery0은 뒤의 빈 log 조회 때문에 전체 shell1이고 item68은 memo/hash0이다. +176-byte log는 후속 관찰 메모이며 해당 direct 실행 stdout 원본으로 치환하지 않는다. + +Root가 frozen 관리/Planning 문서만 exact checkpoint한 뒤 Coordinator가 아래 unchanged +Executor method invocation으로 report1 WIP와 controls2 error 보존을 분리 commit한다. +사용자 요청 [Root 설명문서](msvc-build-access-error.md)의 기존 commit도 origin 이후 +허용 문서에 포함하며 현재 bytes/hash를 보존한다. Source/Hook/config/cache 변경, +`_commit_step`, 상태 성공·reset, guard override와 직접 Git commit은 없다. + +```powershell +$ErrorActionPreference = 'Stop' +$mfePython = Join-Path (Get-Location).Path '.harness/build/mitc4-eigen-evidence/prep/classifier-correction/pytest-venv/Scripts/python.exe' +if (-not (Test-Path -LiteralPath $mfePython -PathType Leaf)) { throw 'Named Python missing' } +@' +import ast,hashlib,json +from pathlib import Path +from scripts import execute +phase="mitc4-shell-feast-eigen-execution-prep" +origin="23c4ebe526260d584247804d8cbe2f7aa8cc60ac" +ex=execute.StepExecutor(phase); root=Path(ex._root) +assert Path.cwd().resolve()==root +assert Path(ex._run_git_checked("rev-parse","--show-toplevel").stdout.strip()).resolve()==root +assert ex._is_isolated_worktree() and ex._codex_sandbox_mode()=="workspace-write" +assert ex._implementation_agent_settings()==("gpt-5.6-terra","xhigh") +branch,head=ex._git_execution_identity() +assert branch=="refs/heads/feat-"+phase +ex._run_git_checked("merge-base","--is-ancestor",origin,"HEAD") +docs={"docs/mitc4-shell-feast-eigen/"+n for n in ("FEATURED_AGENTS.md","PRD.md","ADR.md","coordination.md","msvc-build-access-error.md","implementation-plan.md","implementation-environment.md","implementation-recovery.md")} +assert set(ex._run_git_checked("diff","--name-only","--no-renames",origin,"HEAD").stdout.splitlines())<=docs +assert not ex._run_git_checked("diff","--cached","--name-only").stdout.strip() +expected={".codex/hooks.json":"e7e5d3c0c4fcd1e33b60680122ea7c42298d5cbde78a7f87d9e0007bf60a0fa4", + "docs/mitc4-shell-feast-eigen/implementation-prep-evidence.md":"fc88f1c943f7f25d7eeece87dbbd967a6007b14b0adce342ced9aa78f4cd20b2", + "phases/index.json":"33d911587305cc96148a3e60f9ca32f9ec114ce75e49118391bcc1ef3a6692c3", + "phases/"+phase+"/index.json":"3f4ce6178172819f3e1ab4310db61bc318348aeea822b806d4dcca676b53a60f", + "phases/"+phase+"/step0-output.json":"c74f18d0b681f6ab7480b825de4458188fb6b204147ab84b08582820039cab61", + "scripts/execute.py":"64f5165fc544b3b17904c633ef3b222de79b52a0960e254c5b5c4eb99e79c2d0", + "tests/test_execute.py":"0eb0c1ca0f25199e00686b7e3ab57672b1390437d09da218a929added0346dd6"} +expected.update({ + "docs/mitc4-shell-feast-eigen/msvc-build-access-error.md":"0722dff075e706977d55eb1ac2514d4318b1341adab30a51fc82c744315f1c9f", + ".harness/config.json":"3ebdfa80124f1eb96909b2738d6f2a96fecd55cce61150a9cd7ef27d7c5fd892", + ".harness/build-ninja-msvc-debug/CMakeCache.txt":"bf024961a7469672d1fd4f9e8b6606fc1ccaac3fa40dea25709ec4c00ddd5d0e", + ".harness/build/CMakeCache.txt":"d880104fdc3f1411119ce787c0ddb9a63db23de3f571ba2fedce1c56cb91085b"}) +for p,h in expected.items():assert hashlib.sha256((root/p).read_bytes()).hexdigest()==h,p +assert ast.dump(ast.parse((root/"scripts/execute.py").read_text(encoding="utf-8")))==ast.dump(ast.parse(ex._run_git_checked("show",origin+":scripts/execute.py").stdout)) +old_hook=json.loads(ex._run_git_checked("show",origin+":.codex/hooks.json").stdout) +assert json.loads((root/".codex/hooks.json").read_bytes())==old_hook +idx=ex._read_phase_index();top=ex._read_top_index() +assert idx["steps"][0]["status"]=="error" and len(idx["steps"][0]["attempt_history"])==4 +assert next(p for p in top["phases"] if p["dir"]==phase)["status"]=="error" +owned=ex._step_owned_paths(idx["steps"][0]);assert len(owned)==9 +code=["docs/mitc4-shell-feast-eigen/implementation-prep-evidence.md"] +control=["phases/index.json","phases/"+phase+"/index.json"] +assert set(ex._assert_step_scope(owned))==set(code+control) +frozen={p:(root/p).read_bytes() for p in list(owned)+list(expected)+["phases/"+phase+"/step0.md","phases/mitc4-shell-feast-eigen/index.json"]} +for paths,message in ( + (code,"chore(mitc4-shell-feast-eigen-execution-prep): WIP prep report with discovery build failure"), + (control,"chore(mitc4-shell-feast-eigen-execution-prep): preserve attempt 4 error metadata")): + assert all((root/p).read_bytes()==v for p,v in frozen.items()) + assert ex._git_execution_identity()==(branch,head) + assert ex._commit_paths(paths,message,owned_paths=owned) + new_branch,new_head=ex._git_execution_identity() + assert new_branch==branch and new_head!=head + actual=ex._run_git_checked("diff-tree","--no-commit-id","--name-only","--no-renames","-r",new_head).stdout.splitlines() + assert set(actual)==set(paths) + assert all((root/p).read_bytes()==v for p,v in frozen.items()) + assert ex._read_phase_index()==idx and ex._read_top_index()==top + print(json.dumps({"commit":new_head,"paths":actual,"status":"error","history_count":4})) + head=new_head +assert not ex._worktree_paths() +ex._preflight_repository() +print(json.dumps({"head":head,"branch":branch,"clean":True})) +'@ | & $mfePython -B -X utf8 - +$mfeWipExit = $LASTEXITCODE +if ($null -eq $mfeWipExit) { throw 'Native exit unavailable' } +exit $mfeWipExit +``` + +검사 실패 시 이미 생성된 commit, 남은 dirty 파일과 원시 기록을 보존하고 반환한다. +이 명령 성공은 실패의 안전한 보존일 뿐 prep gate 통과가 아니다. +R11 status edit와 E9 실행은 별도 할당 전 미실행이다. 현재 resolver의 canonical Stop1800 +해석은 확인됐지만 정상 override 지원·적용 방법이 미확정이므로 현재는 보존만 진행한다. +기존 exact owned9와 r2 source Correction1회 소진을 유지한다. + +## R11. R10 뒤의 별도 status-only 복구 + +R10 실제 두 commit/clean 감사와 [E9 환경 진입 조건](implementation-environment.md#e9-attempt4-후의-직렬-ninja-검증)이 +해소된 뒤 Coordinator가 별도 할당할 때만 Planning이 Step0의 `status` 한 값을 +`error -> pending`으로 바꾼다. 나머지 모든 JSON/bytes, error_message/failed_at/started_at, +created_at, history4, owned_paths, top/raw는 보존한다. 이번 문서 작업에서는 바꾸지 않는다. +그 한 값 diff/HEAD/staging/hash 감사를 받은 Coordinator만 아래 control checkpoint를 실행한다. + +```powershell +$ErrorActionPreference = 'Stop' +$mfePython = Join-Path (Get-Location).Path '.harness/build/mitc4-eigen-evidence/prep/classifier-correction/pytest-venv/Scripts/python.exe' +if (-not (Test-Path -LiteralPath $mfePython -PathType Leaf)) { throw 'Named Python missing' } +@' +import hashlib,json +from pathlib import Path +from scripts import execute +phase="mitc4-shell-feast-eigen-execution-prep" +ex=execute.StepExecutor(phase);root=Path(ex._root) +assert Path.cwd().resolve()==root +assert Path(ex._run_git_checked("rev-parse","--show-toplevel").stdout.strip()).resolve()==root +assert ex._is_isolated_worktree() and ex._codex_sandbox_mode()=="workspace-write" +branch,head=ex._git_execution_identity();assert branch=="refs/heads/feat-"+phase +origin="23c4ebe526260d584247804d8cbe2f7aa8cc60ac" +ex._run_git_checked("merge-base","--is-ancestor",origin,"HEAD") +report="docs/mitc4-shell-feast-eigen/implementation-prep-evidence.md" +controls={"phases/index.json","phases/"+phase+"/index.json"} +docs={"docs/mitc4-shell-feast-eigen/"+n for n in ("FEATURED_AGENTS.md","PRD.md","ADR.md", + "coordination.md","msvc-build-access-error.md","implementation-plan.md","implementation-environment.md","implementation-recovery.md")} +assert set(ex._run_git_checked("diff","--name-only","--no-renames",origin,"HEAD").stdout.splitlines())<=docs|controls|{report} +for paths,probe in ((controls,"phases/"+phase+"/index.json"),({report},report)): + commit=ex._run_git_checked("log","-1","--format=%H","--",probe).stdout.strip() + actual=set(ex._run_git_checked("diff-tree","--no-commit-id","--name-only","--no-renames","-r",commit).stdout.splitlines()) + assert actual==paths +protected={".codex/hooks.json":"e7e5d3c0c4fcd1e33b60680122ea7c42298d5cbde78a7f87d9e0007bf60a0fa4", + "scripts/execute.py":"64f5165fc544b3b17904c633ef3b222de79b52a0960e254c5b5c4eb99e79c2d0", + "tests/test_execute.py":"0eb0c1ca0f25199e00686b7e3ab57672b1390437d09da218a929added0346dd6", + report:"fc88f1c943f7f25d7eeece87dbbd967a6007b14b0adce342ced9aa78f4cd20b2", + "phases/index.json":"33d911587305cc96148a3e60f9ca32f9ec114ce75e49118391bcc1ef3a6692c3", + "phases/"+phase+"/step0-output.json":"c74f18d0b681f6ab7480b825de4458188fb6b204147ab84b08582820039cab61", + ".harness/config.json":"3ebdfa80124f1eb96909b2738d6f2a96fecd55cce61150a9cd7ef27d7c5fd892", + ".harness/build-ninja-msvc-debug/CMakeCache.txt":"bf024961a7469672d1fd4f9e8b6606fc1ccaac3fa40dea25709ec4c00ddd5d0e", + ".harness/build/CMakeCache.txt":"d880104fdc3f1411119ce787c0ddb9a63db23de3f571ba2fedce1c56cb91085b"} +for p,h in protected.items():assert hashlib.sha256((root/p).read_bytes()).hexdigest()==h,p +path="phases/"+phase+"/index.json" +before=json.loads(ex._run_git_checked("show","HEAD:"+path).stdout) +assert before["steps"][0]["status"]=="error" and len(before["steps"][0]["attempt_history"])==4 +expected=json.loads(json.dumps(before));expected["steps"][0]["status"]="pending" +assert ex._read_phase_index()==expected +assert set(ex._assert_step_scope(()))=={path} +assert not ex._run_git_checked("diff","--cached","--name-only").stdout.strip() +frozen={p:(root/p).read_bytes() for p in [path,*protected]} +assert ex._commit_paths([path],"chore(mitc4-shell-feast-eigen-execution-prep): queue serial Ninja environment recovery") +new_branch,new_head=ex._git_execution_identity() +assert new_branch==branch and new_head!=head +assert ex._run_git_checked("diff-tree","--no-commit-id","--name-only","-r",new_head).stdout.splitlines()==[path] +assert all((root/p).read_bytes()==v for p,v in frozen.items()) +assert ex._read_phase_index()==expected and not ex._worktree_paths() +ex._preflight_repository() +print(json.dumps({"commit":new_head,"status":"pending","history_count":4,"clean":True})) +'@ | & $mfePython -B -X utf8 - +$mfeStatusExit = $LASTEXITCODE +if ($null -eq $mfeStatusExit) { throw 'Native exit unavailable' } +exit $mfeStatusExit +``` + +R10 report1/controls2 commit 경로와 HEAD의 error/history4를 검사하므로 미보존 상태에서 +pending 재실행을 시작하지 않는다. 실제 source/Hook/config 및 기존 cache는 그대로다. +각 native exit와 clean을 확인하고, 다음 E9 invocation은 Coordinator가 새 process로 +별도 할당한다. 실패를 재분류해 새 Correction budget을 만들거나 자동 재시도하지 않는다.