docs: prepare MSVC Ninja environment recovery
This commit is contained in:
@@ -646,3 +646,73 @@ blocked_reason/blocked_at/started_at/created_at 및 모든 다른 값, top/raw
|
||||
새 eigen comparison 미실행, 기존 static regression 비교를 구분하도록 현재 광범위한
|
||||
reference 미사용 문장을 바로잡는다. Planning은 해당 보고서를 수정하지 않는다.
|
||||
Harness r2 source Correction1회는 사용 완료됐으며 두 번째 source correction은 허용하지 않는다.
|
||||
|
||||
## R9. E8 활성화 전의 status-only checkpoint
|
||||
|
||||
R8의 실제 두 commit과 clean/blocked/history3 보존은
|
||||
[실제 결과](../../.harness/build/mitc4-eigen-evidence/prep/attempt3/r8-wip-checkpoint-result.json)에
|
||||
있다. R8 본문은 당시 명령과 경계로 남긴다. 현재 activation은
|
||||
[E8](implementation-environment.md#e8-attempt3-후의-정상-backend-대안)의 Root setup →
|
||||
Coordinator 감사 → 별도 Planning status-only 할당 → 아래 actual Executor checkpoint →
|
||||
clean → 새 workspace-write native 순서다. 이번 Planning 문서 작업에서는 status를 바꾸지 않는다.
|
||||
|
||||
별도 할당을 받은 Planning은 `phases/mitc4-shell-feast-eigen-execution-prep/index.json`의
|
||||
`steps[0].status` 한 값만 `blocked -> pending`으로 바꾼다. 기존 history3, 모든
|
||||
timestamp/block 필드, owned_paths와 다른 JSON값/형식, top/raw는 그대로 둔다.
|
||||
Gate는 HEAD 불변·한 값 외 deep-equal·exact dirty1·보호 hash·diff check다.
|
||||
이 결과를 감사한 Coordinator만 아래 unchanged `_commit_paths` 명령을 수행한다.
|
||||
|
||||
```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="96efbffa425ff5ce9cd1b7cebe673555273122b9"
|
||||
ex._run_git_checked("merge-base","--is-ancestor",origin,"HEAD")
|
||||
docs={"docs/mitc4-shell-feast-eigen/"+n for n in ("FEATURED_AGENTS.md","coordination.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
|
||||
protected={".codex/hooks.json":"e7e5d3c0c4fcd1e33b60680122ea7c42298d5cbde78a7f87d9e0007bf60a0fa4",
|
||||
"scripts/execute.py":"64f5165fc544b3b17904c633ef3b222de79b52a0960e254c5b5c4eb99e79c2d0",
|
||||
"tests/test_execute.py":"0eb0c1ca0f25199e00686b7e3ab57672b1390437d09da218a929added0346dd6",
|
||||
"docs/mitc4-shell-feast-eigen/implementation-prep-evidence.md":"1e4d61997817b84b1df3933c6aa6518f030ca413edcda74393e0a0cf805e6732",
|
||||
"phases/index.json":"42c9581868cc3f552ea3b42764a291098f648352f31021c7bdd7b4bebcdcf91e",
|
||||
"phases/"+phase+"/step0-output.json":"d106f7ade2d678b6e0b383439b1b9b8d25f5ec32e883aed50c6fb4949a8983f1"}
|
||||
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"]=="blocked" and len(before["steps"][0]["attempt_history"])==3
|
||||
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 MSVC 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":3,"clean":True}))
|
||||
'@ | & $mfePython -B -X utf8 -
|
||||
$mfeStatusExit = $LASTEXITCODE
|
||||
if ($null -eq $mfeStatusExit) { throw 'Native exit unavailable' }
|
||||
exit $mfeStatusExit
|
||||
```
|
||||
|
||||
명령은 origin 이후 Root의 관리2/Planning3 선행 문서 checkpoint만 허용하고 source/Hook/
|
||||
report/top/raw의 현재 hash를 확인한다. Phase control 한 경로만 commit하며
|
||||
`_commit_step`, 완료/status 자동변경, guard override나 직접 Git commit은 사용하지 않는다.
|
||||
Native exit를 즉시 전파하고 commit 전후 snapshot 및 clean preflight를 감사한다.
|
||||
실패하면 bytes/원시 로그/이미 생성된 commit을 보존하고 다음 invocation을 시작하지 않는다.
|
||||
E8 setup 또는 native 성공을 이 status checkpoint 성공에서 추론하지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user