docs: align eigen implementation steps with validated Ninja preset

This commit is contained in:
KOKO\Mimi
2026-09-06 22:53:28 +09:00
parent 2a382ea71b
commit 22808b3610
13 changed files with 461 additions and 100 deletions
@@ -53,16 +53,16 @@ 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 | E10 local 복구·E11 정상 invocation 감사 완료; canonical7500/trusted 실제 확인, R11 뒤 prep 재개 |
| [implementation-recovery.md](implementation-recovery.md) | implementation-planning-agent | r2 | R10 보존 완료; actual E10 hash/선행 ignore commit 반영·R11 status-only 반환 수용, control checkpoint 미실행 |
| [implementation-environment.md](implementation-environment.md) | implementation-planning-agent | r2 | E10 local 복구·E11 invocation 및 canonical7500/trusted 확인; attempt5 수동 명령 미준수와 registered 실제 결과는 coordination |
| [implementation-recovery.md](implementation-recovery.md) | implementation-planning-agent | r2 | R11 완료·R13 attempt5 WIP 보존/별도 status-only/control 계획 감사 완료; 실제 R13 미실행 |
| [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 | attempt4 classifier37/focused136 pass·manual Ninja discovery failure; 전체 gate 미통과 및 raw/registered 경계는 coordination 참조 |
| [implementation-prep-evidence.md](implementation-prep-evidence.md) | implementation-agent | r2 | attempt5 수동 과거 VS 명령 실패·manual full 미충족; actual focused3회/registered362·Stop0 및 owner 표기 차이는 coordination 참조 |
| [msvc-build-access-error.md](msvc-build-access-error.md) | Root (사용자 요청 설명문서) | r2 | 접근 오류·E10 local 복구·canonical exact1 commit 및 공식 API7500/trusted 실제 근거; native 검증은 별도 |
| [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 error/main pending |
| [prep index](../../phases/mitc4-shell-feast-eigen-execution-prep/index.json) | implementation-planning-agent(정의), Executor(진행) | r2 | actual history4 보존·R11 status-only pending 반환 수용; 실제 checkpoint/재개 원본은 coordination |
| [prep step0](../../phases/mitc4-shell-feast-eigen-execution-prep/step0.md) | implementation-planning-agent | r2 | 유한 deadline 및 재현 classifier 오탐의 최소 TDD/full VERIFY; 별도 Correction 후 재개 |
| [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 attempt5 blocked/history5; 이전 history4 보존·수동 명령 정합 owner 반환 |
| [prep step0](../../phases/mitc4-shell-feast-eigen-execution-prep/step0.md) | implementation-planning-agent | r2 | 현재 local preset·직렬 clean-first·세 discovery·전체 검증/종료 poll 직접 명시; 기존 RED/GREEN 보존 |
| [main index](../../phases/mitc4-shell-feast-eigen/index.json) | implementation-planning-agent(정의), Executor(진행) | r2 | Step0~7 pending; exact owned paths 검증 |
| [main step0](../../phases/mitc4-shell-feast-eigen/step0.md) | implementation-planning-agent | r2 | Frequency model/parser |
| [main step1](../../phases/mitc4-shell-feast-eigen/step1.md) | implementation-planning-agent | r2 | 공변 stabilization/static 회귀 |
+12 -4
View File
@@ -3,15 +3,15 @@
- Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent`
- Contract revision: `r2` (사용자 승인 stabilization 개선·영향받는 정적/eigen 재검증 범위)
- Stage: `implementation` (MFE-OQ-004 실제 활성화 후 R11/E11 재개)
- Stage: `implementation` (E11 attempt5 보존 및 정합된 Step 재개)
- Outcome: `retry`
- Next owner: `implementation-agent` (R11 unchanged Executor control checkpoint 성공·clean 확인 후 E11 prep 한 번)
- Attempt: `4` (actual history4 보존; 다음 E11 실행을 attempt5로 할당, 아직 미실행)
- Next owner: `implementation-agent` (R13 WIP 보존·별도 Planning status-only/control checkpoint·clean 확인 후 정상 E11)
- Attempt: `5` (actual Step0 blocked/history5; 이전 history4 보존)
- Completion: 미완료
- Failure classification: `environment`
- Retry key: `mitc4-shell-feast-eigen|implementation|environment|r2`
- Escalation class: `null`
- Blocker: `null` (실행 전 R11 control commit·clean preflight는 필수이며 prep 검증 통과는 아직 아니다.)
- Blocker: `null` (실패 보존·status-only/control checkpoint는 실행 전 필수이고 manual full VERIFY는 여전히 미충족이다.)
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md),
[SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md), [FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md).
@@ -45,6 +45,14 @@ Root의 intake 시작 Git 조사에서는 worktree clean을 확인했다. 당시
## 현재 bounded dispatch
Planning의 정확11개 반환을 수용했다. Prep/main9개 Step의 active CMake/CTest 명령68개를 local preset으로 직접 정합했고, 세 실제 discovery 파일과 긴 tool session의 종료 poll을 본문에 명시했다. Owner 정적 감사는 regex16·pytest 대상·owned_path128회 보존, local links500 누락0, PowerShell32 오류0/Python AST11, 보호12hash·canonical/history5/이전 Recovery 이력 불변 및 diff-check exit0이다. Coordinator는 실제 Step 명령과 [R13 보존·재개 blocks](implementation-recovery.md#r13-attempt5-명령-정합과-실패-보존)의 current hashes/정확 경로/unchanged Executor/분리 commit·상태 보존을 대조했다. 정확13개 관리/Planning/Step checkpoint 뒤 R13 첫 block(report1/controls2 WIP), 별도 할당된 Planning의 status1값 복구, R13 두 번째 control checkpoint, clean 확인과 E11 기본 workspace-write 한 번을 순서대로 실행한다. 실제 WIP/복구/native 결과는 아직 미실행이며 이후 원시 evidence로 감사한다. Source Correction budget과 r2 수치·schema·tolerance는 바뀌지 않았다.
E11 attempt5는 native exit2/`2325.465`초, raw Codex exit0/transportFailure=null, Step blocked/history5로 종료됐다. [terminal archive](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/terminal-archive.json), [실제 native 결과](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/e11-result.json), [Coordinator 감사](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/coordinator-terminal-audit.json), [수동 command events](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/manual-command-events-observation.json)를 보존했다. 직전 R11 control1 commit은 `c051adc9c3feb4ff85758eeaf06ae08be277b097`이며 terminal HEAD도 같다. Report1/control2만 변경됐고 다른 tracked bytes와 이전 history4는 그대로다.
Owner는 E11 대체 명령 대신 `cmake -S . -B .harness/build -A x64`(exit0), `cmake --build .harness/build --config Debug`(exit1 FileTracker)를 실행했다. 이는 현재 local Ninja backend의 실패 증거가 아니다. Actual classifier37/deadline4는 exit0이며 focused136은 raw completed events에서 세 실행 모두 exit0으로 확인됐다. 보고서의 summary 미관찰·attempt2 표기는 실제 attempt5/raw 결과와 구분한다. Manual CTest와 full pytest는 미실행이다. 이후 실제 local preset registered CTest는362 pass/0 fail/End testing과 exit0, Stop Python2개/wrapper도 actual exit0으로 종료됐다. Wrapper 수명 약1954초는 이전1800초를 넘었다. [Root observer](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/root-process-observations-resumed.jsonl)의 중단 구간 build exit는 미관찰이고 PID 재사용/command-null row는 판정에서 제외한다. 기존 Executor argv의 `--dangerously-bypass-hook-trust`는 변경하지 않았으며 [적용 Hook10개 상태](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/root-all-hook-trust-observation.json)는 모두 enabled/trusted였다.
다음 bounded Planning은 prep Step0와 main8 Step의 active 명령을 실제 `mfe-workspace-msvc-ninja-debug`로 직접 정합하고 session 결과는 poll로 수집하도록 명시한다. 기존 exact owned_paths/TDD 대상/전체 검증/physics·schema·tolerance를 유지한다. 새 source Correction이나 사용자 승인 요청 없이 실제 실패 report/control 보존 → 별도 owner status-only → unchanged Executor checkpoint → 정상 E11 재개를 구체화한다. 현재는 status를 바꾸거나 새 native를 시작하지 않는다. 아래 기존 승인/재개 문단은 attempt5 이전 이력이며 현재 결과는 이 문단과 terminal evidence가 우선한다.
Root는 승인된 canonical Stop `1800 -> 7500` 한 값만 적용하고 exact1 commit `42a4847da54b525ab62a746bee06525ad28aab4b`로 보존했다. [공식 API 신뢰 검토 결과](../../.harness/build/mitc4-eigen-evidence/prep/hook-timeout-activation/trust-review-official-api.json)는 native exit0, exact Stop `trusted_hash` 한 필드의 변경 및 `hooks/list`의 canonical source/timeout7500/enabled=true/trustStatus=trusted를 확인한다. File SHA-256은 `c8065e7b60882da5db3f90d57b265da25b3c25980bf669d0b1da863e621871ca`, definition hash는 `sha256:a6bfcf3553d81e134065da4e66e8124e245d302c11e90b09ecdf07ff79b034a8`이다. MFE-OQ-004 승인·설정 확인 조건은 해소됐으며 이 설정 조회는 registered Hook 실행/통과 증거가 아니다.
Planning의 별도 status-only 반환을 audit했다. Step0 `error -> pending`만 변경했고 history4/나머지 JSON·bytes/보호11hash·HEAD를 보존했다. Index SHA-256은 `389fa3d16015187903a7b194bd68f59629a63ee897738fd1233dd2ff2f8bc047`, owner 정적 검사와 diff-check exit0이다. Coordinator는 이 bounded 반환을 수용한다. 다음 순서는 관리문서 checkpoint 뒤 [R11](implementation-recovery.md#r11-r10-뒤의-별도-status-only-복구)의 unchanged Executor `_commit_paths`로 control1만 실제 commit하고 clean/protected-byte 조건을 확인한 다음, [E11](implementation-environment.md#e11-실제-local-설정에-대한-정상-invocation) 첫 block의 기본 `workspace-write` prep1회 실행이다. Actual R11/E11 결과는 별도 ignored evidence에 보존하며 성공을 미리 기록하지 않는다. Source Correction budget은 그대로이고 실패 history를 지우거나 강한 sandbox/remote 권한을 추가하지 않는다. Active Executor 동안 Root/Coordinator/Planning의 비소유 tracked 편집과 Git은 동결한다. Prep gate가 실제 통과한 뒤 같은 E11의 승인된 main8 steps 및 stages8~9를 계속한다.
@@ -52,6 +52,11 @@ hash를 반영했고 [E11](implementation-environment.md#e11-실제-local-설정
local preset preflight/정상 invocation을 고정한다. MFE-OQ-004는 사용자 후속 응답으로
Root가 승인 해석했으며, actual canonical7500/enabled/trusted 확인 전 native는 시작하지 않는다.
현재 attempt5는 과거 VS 수동 명령 실행으로 blocked/history5다. Prep와 main8의 Step 본문을
local preset 명령으로 직접 정합했고 [R13](implementation-recovery.md#r13-attempt5-명령-정합과-실패-보존)에
report1/controls2 보존과 별도 status-only 복구를 고정했다. 첫4 history·현재 raw는 보존하며
registered local 성공을 미완료 manual full VERIFY로 대체하지 않는다. 이번 delta는 계획/정적 확인뿐이다.
[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를 적용한다.
@@ -903,3 +903,171 @@ Root의 **actual canonical7500/enabled/trusted** evidence가 확인되기 전에
새 native를 할당하지 않는다. 새 DFA/remote 권한은 없다. 현재 정상 invocation은
[E11](implementation-environment.md#e11-실제-local-설정에-대한-정상-invocation)을 따른다.
이번 task는 Planning3문서뿐이며 phase/status/Git/설정/실행 권한이 아니다.
## R13. Attempt5 명령 정합과 실패 보존
[실제 결과](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/e11-result.json)와
[terminal audit](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/coordinator-terminal-audit.json)는
native2/Codex0·blocked/history5를 보존한다. Manual37/4와 focused136 세 실행은 통과했지만
과거 VS configure/build를 실행해 build1이었다. Manual CTest/full pytest는 미실행이다.
Registered local Ninja의 full362/CTest·Stop Python·wrapper0은 별도 자동 결과이며
registered build exit의 관찰 공백도 남긴다. 이는 새 local Ninja 실패나 source Correction이 아니다.
[명령 원시 관찰](../../.harness/build/mitc4-eigen-evidence/prep/attempt5/manual-command-events-observation.json)을
유지하고 r.output-only 표시 때문에 결과가 보이지 않았던 실행을 미실행으로 바꾸지 않는다.
현재 prep/main9 Step 본문의 active CMake/CTest를 local preset으로 직접 고쳤다.
Root가 frozen 관리/Planning/9 Step definitions/사용자 설명문서를 먼저 exact checkpoint한 뒤,
Coordinator가 아래 unchanged Executor로 report1 WIP와 controls2 blocked metadata를 분리 commit한다.
Source/config/reference/Hook, current history5/첫4 history 및 raw는 보존하고
`_commit_step`, 완료 판정·reset·guard override는 하지 않는다.
```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="c051adc9c3feb4ff85758eeaf06ae08be277b097"
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")}
definitions={"phases/"+phase+"/step0.md"}|{"phases/mitc4-shell-feast-eigen/step"+str(i)+".md" for i in range(8)}
assert set(ex._run_git_checked("diff","--name-only","--no-renames",origin,"HEAD").stdout.splitlines())<=docs|definitions
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":"7789386f17c416fb21cd82514e71f1504e6ee8998bc9e886931d55bb76eeec62",
"phases/index.json":"b291eebdf5782763bcad37d7c22de91c813c44922c76b8cbdd0b019f71b3b612",
"phases/"+phase+"/index.json":"6d4ba8f2960bf55169b1ffac740151014bf5d8a47673ecdec5c557c65629cf0e",
"phases/"+phase+"/step0-output.json":"915c56af488d477cbff46b24d1744e46305d50cac71d77466a8fcf49508302c9",
"scripts/execute.py":"64f5165fc544b3b17904c633ef3b222de79b52a0960e254c5b5c4eb99e79c2d0",
"tests/test_execute.py":"0eb0c1ca0f25199e00686b7e3ab57672b1390437d09da218a929added0346dd6"}
expected.update({
".gitignore":"e9a67c202173c7b049429bb3eddc6dd921a4a76e7a5d248604fa8bdfb2ecdd68",
"CMakeUserPresets.json":"c4665b004be903c4beb913967143c0b0ac4da7e7d857a8c2f09e48754e865e9c",
".harness/config.json":"47ea5f1da7f6c0312429ead5a3d6d1c71fa884c49e511c1608e7fcccd90d796d",
".harness/build-ninja-msvc-debug/CMakeCache.txt":"f58c337fc09fccd29c088b2a65859f6c925322dfc8eb7bea9d1509518a2b3d87",
".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
canonical=Path("C:/git/FESADev/.codex/hooks.json")
canonical_bytes=canonical.read_bytes()
assert hashlib.sha256(canonical_bytes).hexdigest()=="c8065e7b60882da5db3f90d57b265da25b3c25980bf669d0b1da863e621871ca"
idx=ex._read_phase_index();top=ex._read_top_index()
assert idx["steps"][0]["status"]=="blocked" and len(idx["steps"][0]["attempt_history"])==5
assert next(p for p in top["phases"] if p["dir"]==phase)["status"]=="blocked"
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)+list(definitions)+["phases/mitc4-shell-feast-eigen/index.json","docs/mitc4-shell-feast-eigen/msvc-build-access-error.md"]}
for paths,message in (
(code,"chore(mitc4-shell-feast-eigen-execution-prep): WIP prep report with manual backend mismatch"),
(control,"chore(mitc4-shell-feast-eigen-execution-prep): preserve attempt 5 blocked 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
assert canonical.read_bytes()==canonical_bytes
print(json.dumps({"commit":new_head,"paths":actual,"status":"blocked","history_count":5}))
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/clean 감사 뒤 **별도 Planning 할당**에서 Step0.status의
`blocked -> pending` 한 값만 바꾼다. 다른 bytes/JSON·timestamp·blocked fields·owned_paths·
history5·top/raw를 보존한다. 그 한 값 diff를 감사한 Coordinator만 아래 control checkpoint를 실행한다.
이번 Planning은 status를 바꾸거나 어느 명령도 실행하지 않았다.
```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="c051adc9c3feb4ff85758eeaf06ae08be277b097"
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")}
definitions={"phases/"+phase+"/step0.md"}|{"phases/mitc4-shell-feast-eigen/step"+str(i)+".md" for i in range(8)}
assert set(ex._run_git_checked("diff","--name-only","--no-renames",origin,"HEAD").stdout.splitlines())<=docs|definitions|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:"7789386f17c416fb21cd82514e71f1504e6ee8998bc9e886931d55bb76eeec62",
"phases/index.json":"b291eebdf5782763bcad37d7c22de91c813c44922c76b8cbdd0b019f71b3b612",
"phases/"+phase+"/step0-output.json":"915c56af488d477cbff46b24d1744e46305d50cac71d77466a8fcf49508302c9",
".gitignore":"e9a67c202173c7b049429bb3eddc6dd921a4a76e7a5d248604fa8bdfb2ecdd68",
"CMakeUserPresets.json":"c4665b004be903c4beb913967143c0b0ac4da7e7d857a8c2f09e48754e865e9c",
".harness/config.json":"47ea5f1da7f6c0312429ead5a3d6d1c71fa884c49e511c1608e7fcccd90d796d",
".harness/build-ninja-msvc-debug/CMakeCache.txt":"f58c337fc09fccd29c088b2a65859f6c925322dfc8eb7bea9d1509518a2b3d87",
".harness/build/CMakeCache.txt":"d880104fdc3f1411119ce787c0ddb9a63db23de3f571ba2fedce1c56cb91085b"}
for p,h in protected.items():assert hashlib.sha256((root/p).read_bytes()).hexdigest()==h,p
canonical=Path("C:/git/FESADev/.codex/hooks.json")
canonical_bytes=canonical.read_bytes()
assert hashlib.sha256(canonical_bytes).hexdigest()=="c8065e7b60882da5db3f90d57b265da25b3c25980bf669d0b1da863e621871ca"
path="phases/"+phase+"/index.json"
before=json.loads(ex._run_git_checked("show","HEAD:"+path).stdout)
assert before["steps"][0]["status"]=="blocked" and len(before["steps"][0]["attempt_history"])==5
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,*definitions]}
assert ex._commit_paths([path],"chore(mitc4-shell-feast-eigen-execution-prep): queue aligned local preset verification")
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()
assert canonical.read_bytes()==canonical_bytes
ex._preflight_repository()
print(json.dumps({"commit":new_head,"status":"pending","history_count":5,"clean":True}))
'@ | & $mfePython -B -X utf8 -
$mfeStatusExit = $LASTEXITCODE
if ($null -eq $mfeStatusExit) { throw 'Native exit unavailable' }
exit $mfeStatusExit
```
Root/Coordinator는 actual invocation 동안 non-owned 편집·commit을 멈춘다.
WIP나 checkpoint 실패 시 이미 만든 commit과 dirty bytes/원시 evidence를 보존하고 반환한다.
이후 같은 [E11](implementation-environment.md#e11-실제-local-설정에-대한-정상-invocation)의
workspace-write/terra/xhigh/유한14400 새 process를 별도 할당한다. Step에 직접 적힌
local preset·직렬 clean-first·세 discovery·모든 Python/full CTest·fresh manual/reference·
registered actual evidence를 완료해야 하며 자동 결과로 manual 실패를 대체하지 않는다.
새 source key/DFA/policy/runner 변경이나 자동 재시도는 없다.