docs: record shared hook timeout decision boundary

This commit is contained in:
KOKO\Mimi
2026-09-06 17:40:39 +09:00
parent aa03fc3d04
commit 7e4c8f4c08
3 changed files with 50 additions and 12 deletions
@@ -54,11 +54,11 @@ Reference artifact와 공통 정책은 수정하지 않는다. 외부 solver 실
| [io-mapping.md](io-mapping.md) | io-definition-agent | r2 | 책임·candidate 보존·TXT Value-only·27개 요구/11개 I/O 검증 obligation | | [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-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 | E9 병렬도1·실제 clean-first discovery 검증 계획 감사 완료; canonical Hook 적용 경계로 activation 미확정 | | [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-recovery.md](implementation-recovery.md) | implementation-planning-agent | r2 | R10 report1/control2 실제 WIP commit·clean 완료; R11은 공유 Hook 중요 결정 뒤의 조건부 준비 |
| [implementation-interfaces.md](implementation-interfaces.md) | implementation-planning-agent | r2 | 기존 확장점·API/source-test·vendor/state/transaction 책임 | | [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-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 | 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 완료 | | [msvc-build-access-error.md](msvc-build-access-error.md) | Root (사용자 요청 설명문서) | r2 | 실제 접근 오류·Ninja 전환 및 canonical 공유 Hook1800→7500/재신뢰의 사용자 검토 범위를 설명; 승인 상태는 coordination |
| [corrections.md](corrections.md) | correction-agent | r2 | source echo 최소 교정1회·RED/GREEN37 확인; full Python Hook1실패와 manual build 환경 차단 보존, registered Stop362 pass는 coordination 후속 evidence | | [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 | | [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 | | [prep index](../../phases/mitc4-shell-feast-eigen-execution-prep/index.json) | implementation-planning-agent(정의), Executor(진행) | r2 | actual attempt3 blocked/history3 보존·R9 pending 복구 완료; 재개 원본은 coordination |
+22 -7
View File
@@ -3,15 +3,15 @@
- Feature ID: `mitc4-shell-feast-eigen` - Feature ID: `mitc4-shell-feast-eigen`
- Owner: `coordinator-agent` - Owner: `coordinator-agent`
- Contract revision: `r2` (사용자 승인 stabilization 개선·영향받는 정적/eigen 재검증 범위) - Contract revision: `r2` (사용자 승인 stabilization 개선·영향받는 정적/eigen 재검증 범위)
- Stage: `implementation` (E8.2 actual terminal 보존; 최소 정상 환경 복구 계획) - Stage: `implementation` (R10 실제 실패 보존 완료; 공유 Hook 설정·신뢰 경계 결정 대기)
- Outcome: `blocked-environment` - Outcome: `needs-user-decision`
- Next owner: `coordinator-agent` (동결 문서 checkpoint 뒤 unchanged Executor R10 실패 WIP 보존) - Next owner: `user` (Root가 MFE-OQ-004 중요 결정 요청)
- Attempt: `4` (actual Step0 error/history4; 이전 history3 보존) - Attempt: `4` (actual Step0 error/history4; 이전 history3 보존)
- Completion: 미완료 - Completion: 미완료
- Failure classification: `environment` - Failure classification: `environment`
- Retry key: `mitc4-shell-feast-eigen|implementation|environment|r2` - Retry key: `mitc4-shell-feast-eigen|implementation|environment|r2`
- Escalation class: `null` - Escalation class: `security-trust-boundary`
- Blocker: Ninja 병렬 GoogleTest discovery의 공유 JSON 실패로 manual full VERIFY 미완료. 현재 Hook resolver는 canonical Stop1800을 선택하며 정상 설정 적용 방법도 미확정이다. - Blocker: 현재 exact ownership 밖의 canonical 공유 Hook1800→7500 변경과 변경된 Hook 재신뢰는 아직 사용자 미승인이다. Manual full VERIFY 및 다음 native도 미완료다.
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md), 기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md), [프로젝트 ADR](../ADR.md),
[SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md), [FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md). [SOLVER_AGENT_DESIGN](../SOLVER_AGENT_DESIGN.md), [FEATURE_DOCUMENTATION](../FEATURE_DOCUMENTATION.md).
@@ -45,11 +45,26 @@ Root의 intake 시작 Git 조사에서는 worktree clean을 확인했다. 당시
## 현재 bounded dispatch ## 현재 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는 아직 할당하지 않는다. 현재는 **MFE-OQ-004 사용자 결정 요청 준비**이며 답변은 아직 없다. 이전 E6의 한 번 승인된 workspace 실행은 소비됐고 canonical checkout의 공유 Hook 수정·재신뢰를 승인한 것으로 확대하지 않는다. 세부 검토 대상과 영향은 Root 소유 [MSVC 접근 오류와 설정 경계](msvc-build-access-error.md)에 기록한다.
| 결정 가능한 경로 | 영향 |
| --- | --- |
| 권고: 실제 canonical `.codex/hooks.json`의 Stop timeout `1800 -> 7500` 한 값과 변경된 Hook의 정상 재신뢰를 명시 승인 | 현재 resolver가 이 파일을 공유하는 다른 worktree에도 outer timeout이 적용된다. 나머지 Hook 내용·full validation·sandbox/재시도/소유 guard는 유지하고, 정상 workspace-write E9 준비 및 실제 재검증을 이어갈 수 있다. |
| 현재 공유 설정 유지 | 현재1800초 경계를 그대로 유지한다. 실제 required 전체 검증의 wrapper 성공을 보장할 정상 대안이 아직 없어 environment block을 유지하고 실행을 시작하지 않는다. |
검토 대상은 `C:/git/FESADev/.codex/hooks.json`, 현재 SHA-256 `0ab23dad4643f45238f4a60402083e32d8801f5c41fd6ba12b68ef6a9fc5fc28`이다. 이는 current feature owned_paths 밖의 공유 설정·신뢰 경계 결정이며 일반 계획/검증의 반복 승인 요청이 아니다. 승인 전 canonical 파일·trust·phase status를 변경하거나 새 native/DFA를 실행하지 않는다. Feature physics/schema/reference/tolerance와 contract `r2`는 그대로다.
### R10 실제 보존과 다음 실행 준비
Root exact5 문서 commit `87ffa4f4e5556d002f4f5e8e68bb879fff93c38d` 뒤 [R10 actual unchanged Executor](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/r10-wip-checkpoint-result.json)는 native/managed exit0, `1.641`초로 완료했다. Report1 WIP commit은 `fc032212f75b9008f0a46e0f2d9f3736f184b05f`, controls2 error/history4 보존 commit은 `aa03fc3d049b82f519db1962b5da592524a1c496`이다. 명령 내부 exact commit 경로·모든 tracked bytes·raw·history4 불변과 clean preflight를 확인했으며 status reset이나 prep 성공을 기록하지 않았다.
다음은 위 중요 결정 수신과 정확한 정상 설정 적용 evidence가 확보된 뒤에만 R11 status-only/Executor control checkpoint/E9 native 순서로 별도 할당한다. 아래 Planning 문서 판정은 이 조건부 준비를 의미한다.
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 통과가 아니다. 계획된 R10의 실제 완료는 위에 기록했으며 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의 [현재 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 생략을 하지 않는다. 실패 보존은 이 판단에 의존하지 않는다. 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의 권한 해석에 따라 공유 설정 변경·재신뢰는 위 MFE-OQ-004로 요청하며 임의 변경·새 DFA 실행·Hook 생략을 하지 않는다. 독립적인 실패 보존 R10은 완료했다.
### E8.2 이전 dispatch와 activation 경계 ### E8.2 이전 dispatch와 activation 경계
@@ -3,7 +3,7 @@
- 작성 목적: MITC4 질량행렬·FEAST 구현 준비 중 발생한 Windows 빌드 환경 오류와 조치 기록 - 작성 목적: MITC4 질량행렬·FEAST 구현 준비 중 발생한 Windows 빌드 환경 오류와 조치 기록
- Feature ID: `mitc4-shell-feast-eigen` - Feature ID: `mitc4-shell-feast-eigen`
- Owner: `Root` (사용자 요청 설명문서) - Owner: `Root` (사용자 요청 설명문서)
- 입력 계약: `r2`, 구현 환경 `E8` - 입력 계약: `r2`, `E8` 실행 결과와 `E9` 미실행 환경 계획
- 작성일: 2026-09-06 - 작성일: 2026-09-06
- 상태: MSVC 컴파일·링크 및 후속 CTest 통과 확인. 최초 GoogleTest discovery 오류와 wrapper 비정상 종료로 전체 준비 검증 미완료 - 상태: MSVC 컴파일·링크 및 후속 CTest 통과 확인. 최초 GoogleTest discovery 오류와 wrapper 비정상 종료로 전체 준비 검증 미완료
@@ -46,7 +46,7 @@ Microsoft.Build.Utilities.FileTracker..cctor()
- 기존 reference helper가 실제 library의 수정 시각을 확인할 수 있도록 `CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG`를 새 build의 `src/fesa/Debug`로 지정한다. Library를 복사하거나 수정 시각을 조작하지 않는다. - 기존 reference helper가 실제 library의 수정 시각을 확인할 수 있도록 `CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG`를 새 build의 `src/fesa/Debug`로 지정한다. Library를 복사하거나 수정 시각을 조작하지 않는다.
- 환경 변수는 해당 process에서만 설정하고 `finally`에서 복원한다. 정확한 설정·복원과 실행 순서는 [구현 환경 문서 E8](implementation-environment.md#e8-attempt3-후의-정상-backend-대안)에 있다. - 환경 변수는 해당 process에서만 설정하고 `finally`에서 복원한다. 정확한 설정·복원과 실행 순서는 [구현 환경 문서 E8](implementation-environment.md#e8-attempt3-후의-정상-backend-대안)에 있다.
환경을 적용한 shell에서 핵심 검증 명령은 다음과 같다. 아래는 `E8`에서 사용한 핵심 검증 명령이다. 후속 재검증은 아직 실행하지 않은 [E9 계획](implementation-environment.md#e9-attempt4-후의-직렬-ninja-검증)의 병렬도 설정과 진입 조건을 함께 따른다.
```powershell ```powershell
$mfeArchive = (Join-Path (Get-Location).Path '.harness/build-ninja-msvc-debug/src/fesa/Debug').Replace('\', '/') $mfeArchive = (Join-Path (Get-Location).Path '.harness/build-ninja-msvc-debug/src/fesa/Debug').Replace('\', '/')
@@ -83,7 +83,30 @@ Root의 configure 성공이나 후속 CTest 통과는 최초 manual build 실패
- 세 스크립트가 같은 디렉터리의 `cmake_test_discovery_e3b0c44298.json`을 삭제·생성·읽는 구조다. - 세 스크립트가 같은 디렉터리의 `cmake_test_discovery_e3b0c44298.json`을 삭제·생성·읽는 구조다.
- 동일 integration binary의 단독 목록 생성은 34개 테스트를 반환했고, 생성된 discovery 스크립트도 단독 실행에서는 통과했다. - 동일 integration binary의 단독 목록 생성은 34개 테스트를 반환했고, 생성된 discovery 스크립트도 단독 실행에서는 통과했다.
이 관찰은 병렬 POST_BUILD discovery의 공유 파일 경쟁을 뒷받침한다. 정확한 최초 경쟁 순서를 재현한 것은 아니며, 단독 진단의 성공으로 최초 전체 빌드 실패를 통과 처리하지 않았다. 설치된 모듈·생성된 JSON·테스트 소스를 고치거나 discovery를 끄지 않고 정상적인 빌드 병렬도 설정을 후속 환경 조치로 검토한다. 이 관찰은 병렬 POST_BUILD discovery의 공유 파일 경쟁을 뒷받침한다. 정확한 최초 경쟁 순서를 재현한 것은 아니며, 단독 진단의 성공으로 최초 전체 빌드 실패를 통과 처리하지 않았다. 후속 `E9` 계획은 `CMAKE_BUILD_PARALLEL_LEVEL=1`과 한 번의 `--clean-first --verbose` 빌드로 세 discovery의 실제 직렬 실행을 검증한다. 설치된 모듈·생성된 JSON·테스트 소스와 discovery guard는 그대로이며, 이 후속 계획은 아직 미실행이다.
## 자동 검증의 별도 제한 시간 문제와 승인 대상
설치된 Codex CLI `0.153.2`의 `hooks/list`·`config/read`를 모델 실행 없이 조회했다. 현재 worktree의 project config는 읽지만, 실제 enabled/trusted Stop Hook은 원본 checkout의 `C:\git\FESADev\.codex\hooks.json`에서 `1800`초로 선택됐다. 현재 worktree 파일의 `7500`초는 실제 Hook 선택에 반영되지 않았다. 공식 지원 `project_root_markers`를 해당 조회에만 지정해도 결과는 같았다.
이번 native raw에는 Hook 설정 출처 이벤트가 없으므로, 현재 resolver 결과와 당시 외부 PowerShell wrapper가 약 1802초 뒤 exit 1인 관찰을 대조한 진단이다. Python/CTest의 후속 exit 0과 wrapper exit 1은 계속 별도로 보존한다.
검토할 최소 변경은 다음 한 값이다. **아직 적용하거나 승인받지 않았다.**
```text
대상: C:\git\FESADev\.codex\hooks.json
필드: hooks.Stop[0].hooks[0].timeout
변경: 1800 -> 7500 (초)
```
- 현재 파일 SHA-256: `0ab23dad4643f45238f4a60402083e32d8801f5c41fd6ba12b68ef6a9fc5fc28`
- 나머지 bytes를 보존하고 한 번 치환한 제안 파일 SHA-256: `c8065e7b60882da5db3f90d57b265da25b3c25980bf669d0b1da863e621871ca`
- 영향: 이 원본 Hook을 선택하는 다른 worktree에도 제한 시간 변경이 적용된다. Hook 명령, 검증 범위, assertion과 sandbox 권한은 그대로다.
- 승인 경계: 현재 feature worktree 밖의 공유 설정이다. 기존 단일 `E6` 실행 승인을 이 파일 수정 권한으로 확대하지 않는다. 변경된 Hook 정의의 재신뢰도 별도로 처리해야 한다.
공식 문서는 여러 Hook source를 함께 로드하며 상위 layer가 기존 Hook을 대체하지 않는다고 설명한다. 또한 정의가 바뀌면 새 hash에 대한 신뢰 검토가 필요하다. 따라서 inline Hook 추가나 trust 상태의 임의 수정으로 해결하지 않는다. [공식 Hook 문서](https://learn.chatgpt.com/docs/hooks)
조회 근거는 [기본 설정 해석](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-config-resolution.json), [정상 root marker 지정 조회](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-root-marker-observation.json), [두 파일의 읽기 전용 감사](../../.harness/build/mitc4-eigen-evidence/prep/attempt4/root-hook-source-audit.json)에 있다. Hook 실행·canonical 설정 변경·trust 상태 변경은 수행하지 않았다.
## 근거 기록 ## 근거 기록