docs: preserve Ninja failure and bound environment recovery
This commit is contained in:
@@ -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로 반환한다.
|
||||
|
||||
Reference in New Issue
Block a user