# task-2553+8 — ISOLATED-WORKTREE EVIDENCE SOURCE REFINEMENT + task-2553+1 F1-solo 실 PR open 재수행 (회장 최종 GO)

> **Lv**: Lv.4 — 실 GitHub write/PR open. **Executor**: 적합 dev 1회 한정 (ANU 배치안·Codex lint·refine·re-lint 선행 후 dispatch). **TTL**: 2h.
> **상태**: 회장 spec 수신 완료(끝 마커 확인). task-2553+7 = controller v0 COMPLETE_VERIFIED/PASS + 첫 적용 DEFENSIVE_HOLD_PASS 인정. **결정 = Option A**. ANU-Codex loop 자동 수렴, HOLD 시만 회장 보고.
> **선행 의존**: task-2553+7 controller v0 (anu_v3/goal_activation_controller.py 등 12파일, 65 regression PASS) + task-2553+5 deriver/binding + task-2553+4 gate(무수정 anchor f34e2445…). task-2553+1.md(F1-solo).
> **근본원인 해소**: task-2553+7 첫 적용 HOLD = live workspace 오염(미커밋 churn)으로 6파일 delta 불성립. 본 task = evidence builder 를 **live workspace → isolated-worktree-sourced** 로 refine. **해결책은 live workspace 청소가 아니라 isolated worktree evidence source** (회장 특히 명시).

---

## 1. 목표 (회장 verbatim)

goal-driven activation controller 의 evidence builder 를 live workspace 기반에서 **isolated-worktree-sourced 기반으로 refine** 하고, 그 첫 적용으로 **task-2553+1 F1-solo clean replacement PR open 을 다시 수행**한다.

## 2. 핵심 (회장 verbatim)

task-2553+1 clean replacement PR open evidence 는 **live workspace 에서 계산하지 않는다.** fresh origin/main 기반 isolated worktree 를 만들고, 그 안에서 task-2553+1 F1-solo **6파일 delta 만 재현**한 뒤, 그 isolated worktree 의 git diff / effective diff / source PR preservation / same-branch push 0 / forbidden scan 을 evidence source 로 사용한다.

## 3. 필수 구현 방향 (회장 verbatim 12)

- isolated worktree evidence source selector
- fresh origin/main worktree creation / cleanup policy
- task-2553+1 F1-solo patch/evidence replay
- isolated effective diff calculator
- live workspace churn exclusion
- evidence bundle provenance 에 `source_workspace_type` 기록
- `source_workspace_type == isolated_clean_worktree` 강제
- deriver/gate/controller integration
- activation runner 가 isolated evidence 만 신뢰하도록 수정
- regression fixture: live workspace contaminated → HOLD
- regression fixture: isolated clean 6-file delta → ALLOW
- regression fixture: isolated worktree 에 7번째 파일 오염 → HOLD

## 4. 허용 범위 (회장 verbatim 10)

task-2553+8 controller/evidence-builder refinement 코드 구현 / isolated worktree 기반 evidence bundle 생성 / task-2553+1 F1-solo clean replacement branch 생성 / commit / push / clean replacement PR open / result·report·evidence marker 생성 / normal+fallback callback 등록 / Codex post-result audit / ANU 해석 + Codex adjudication / scope 내 자동 micro-fix loop

## 5. task-2553+1 허용 effective diff (회장 verbatim 6 — 단일 권위)

1. `anu_v2/owner_trigger_pat.py`
2. `tests/regression/test_owner_trigger_2553_plus1_high_fix.py`
3. `memory/reports/task-2553+1.md`
4. `memory/events/task-2553+1.result.json`
5. `memory/events/task-2553+1.red-evidence.log`
6. `memory/events/task-2553+1.green-evidence.log`

> 파일명 권위: task-2553+6 §5 와 동일 — #2 = `high_fix` (회장 spec 단일 권위, 기존 f1.py 는 미머지 evidence-only HOLD 아티팩트, 상이 lifecycle, 모순 아님).

## 6. 금지 (회장 verbatim)

merge / PR #102 원본 변경 / same-branch push / F2 수정 / token transport 변경 / gh subprocess 경로 폐기·교체 / in-process HTTPS 전환 / phase3 test 수정 / merge_queue_executor 수정 / 기존 preserved tests assertion 수정 / task-2553+1 expected_files 6개 밖 변경 / credential·OWNER PAT 조작 / clean replacement PR open 범위 초과 actual API 호출 / real write·limited real write 일반 진입 / dev status 자동 변경 / 자동 closeout 확정 / task-2553+2 자동 dispatch / task-2553+3 자동 dispatch

**특히 금지 (회장 verbatim 강조):** live workspace 를 깨끗하게 만들기 위해 **git reset, clean, stash, rm, unlink, rmtree 사용 금지**. 해결책은 live workspace 청소가 아니라 isolated worktree evidence source 다.

## 7. HOLD_FOR_CHAIR 조건 (회장 verbatim 14)

isolated worktree 생성 불가 / fresh origin/main 기준 불일치 / isolated worktree 에서도 expected_files 6개 밖 diff 발생 / PR #102 원본 변경 필요 / same-branch push 필요 / F2·token transport 수정 필요 / phase3·mqe 수정 필요 / credential·API·real write 필요 / merge 필요 / forbidden_write_target 수정 필요 / Critical 7 / Codex unresolved HIGH·CRITICAL / ANU-Codex 반복 충돌 / 목표 달성 불가

## 8. 필수 regression (회장 verbatim 15)

1. live workspace contaminated evidence → HOLD
2. isolated clean worktree + exact 6-file delta → ALLOW
3. isolated worktree + 7th file contamination → HOLD
4. source_workspace_type missing → HOLD
5. source_workspace_type=live_workspace → HOLD for PR-open activation
6. provenance mismatch → HOLD
7. expected_files mismatch → HOLD
8. F2 changed → HOLD
9. phase3/mqe changed → HOLD
10. same_branch_push=true → HOLD
11. source PR preserved=false → HOLD
12. merge_required=true → HOLD
13. callback missing → HOLD
14. clean replacement PR open path only reachable after isolated evidence ALLOW
15. merge path unreachable

## 9. 최종 packet (회장 verbatim 16 — 중간 보고 금지, 최종 1개)

1. task-2553+8 구현 파일 목록 / 2. isolated worktree evidence source 증거 / 3. derived contract / 4. gate decision / 5. activation decision / 6. clean replacement PR 번호 / 7. effective diff 6파일 일치 여부 / 8. PR #102 원본 보존 증거 / 9. F2 byte-identical 증거 / 10. phase3·mqe 무변경 증거 / 11. regression 결과 / 12. Codex post-result audit / 13. ANU adjudication + Codex adjudication 결과 / 14. callback collector 결과 / 15. HOLD_FOR_CHAIR 여부 / 16. merge 가능 여부 판단

## 10. GO 경계 (회장 verbatim)

이번 GO 는 task-2553+8 isolated-worktree evidence refinement 와, 그 첫 적용으로 task-2553+1 F1-solo clean replacement PR open 까지의 GO 다. **merge GO 아님 / F2 GO 아님 / phase3·mqe GO 아님 / credential·OWNER PAT 변경 GO 아님 / real write·limited real write 일반 승인 아님.**

## 11. ANU 배치안 / expected_files (task-2553+8 자체 — 코드/파일 필수, 문서만 금지)

1. `anu_v3/isolated_worktree_evidence_source.py` — fresh origin/main isolated worktree 생성·cleanup + task-2553+1 F1-solo 6파일 delta replay + isolated git/effective-diff/source-PR-preservation/same-branch-push-0/forbidden-scan evidence 산출. live workspace churn exclusion. `source_workspace_type=isolated_clean_worktree` provenance 기록.
2. `anu_v3/goal_activation_controller.py` — **refine (call-site 통합)**: evidence source 를 isolated_worktree_evidence_source 로 전환, `source_workspace_type != isolated_clean_worktree` 면 PR-open activation HOLD 강제. (controller 본체 최소 surgical 변경 — evidence source seam 만)
3. `scripts/run_goal_activation_controller.py` — refine (isolated worktree 옵션 배선, --dry-run 기본 / --activate + isolated ALLOW 이중조건)
4. `schemas/isolated_worktree_evidence.schema.json` — isolated evidence + source_workspace_type enum
5. `memory/fixtures/task-2553+1.f1solo.isolated-clean-worktree.contract.json` — isolated clean 6-file delta fixture (`_provenance.source_workspace_type=isolated_clean_worktree`) → ALLOW
6. `memory/fixtures/task-2553+1.live-workspace-contaminated.contract.json` — live workspace 오염 fixture → HOLD
7. `memory/fixtures/task-2553+1.isolated-7th-file-contamination.contract.json` — isolated worktree 7번째 파일 오염 fixture → HOLD
8. `anu_v3/pre_authorized_activation_runner.py` — **surgical edit (회장 §3 명시 "activation runner ... 수정"), verbatim 대상 명시**: 현재 코드의 `if evidence_bundle is None: evidence_bundle = build_evidence_bundle(repo_path=repo, ...)` (≈line 309-312) **live fallback 경로를 즉시 HOLD_FOR_CHAIR 반환으로 교체** (evidence_bundle 부재 → live build 진입 0). 추가: 주입된 evidence_bundle 의 `source_workspace_type != "isolated_clean_worktree"` 또는 미기록 → 즉시 HOLD (PR-open activation 0). 그 외 runner 로직·merge-부재·dry-run preflight 체인 무변경. (이 2개 seal 외 변경 금지 — Codex C-IMPL-1/2 verbatim 봉인)
9. `tests/regression/test_isolated_worktree_evidence_2553plus8.py` — §8 15 + §9-R.3 추가 9 (총 24) + fixture 3종 시나리오
10. `memory/events/task-2553+8.activation-decision.json`
11. `memory/events/task-2553+8.hold-for-chair.json` (조건부)
12. `memory/reports/task-2553+8.md`
13. `memory/events/task-2553+8.result.json` — 최종 packet 16

> cleanup policy: isolated worktree 는 `git worktree add` (fresh origin/main 7346df82) → 사용 후 `git worktree remove`만 (live workspace·다른 worktree 무영향). **git reset/clean/stash/rm/unlink/rmtree 0**. controller v0 본체는 evidence-source seam 외 무변경(deriver/gate/binding/callback orchestrator call-only 무수정).

## 12. forbidden_write_targets (수정 0 — task-2553+8 자체)

**무수정 (frozen, 전 chair task 일관):** anu_v3/pre_authorized_action_gate.py(f34e2445…) / pre_authorized_contract_deriver.py / pre_authorized_executor_binding.py / pre_authorized_evidence_bundle_builder.py / schemas/pre_authorized_*.schema.json / tests/regression/test_pre_authorized_* / tests/regression/test_goal_activation_controller_2553plus7.py / utils/anu_delegation_completion_callback.py / 9B3BEB11 fixture+test / dispatch.py / scripts/finish-task.sh / task-timer.py / post-tool-use.sh / `tests/regression/test_owner_trigger_2553_plus1_f1.py`(기존 evidence-only, 무관) / task-2553+1·+2·+3·+4·+5·+6·+7 md.

**surgical edit 허용 (회장 §3 명시):** `anu_v3/pre_authorized_activation_runner.py`(live-fallback 봉인만) / `anu_v3/goal_activation_controller.py`(evidence-source seam + 최소 +8 metadata, 65 regression 무회귀) / `scripts/run_goal_activation_controller.py`(isolated 옵션 배선) / `schemas/goal_execution_result.schema.json`(append only, 의미 변경 0).

**cleanup 금지 범위 (9-R.4 정밀):** **live workspace(tracked/untracked)·타 worktree 대상** git reset/clean/stash + rm/unlink/rmtree 호출 정적·런타임 **부재 강제**. controller 자기 산출 marker(task-2553+8.*) lifecycle 의 자기 marker Path.unlink 는 workspace cleanup 아님 → 허용. isolated worktree 정리 = `git worktree remove` 만.

## 13. 핵심 운영 원칙 (회장)

회장은 중간 단계 라우터 아님. ANU-Codex loop 자동 수렴(batch plan→Codex lint→ANU refine→Codex re-lint→dispatch→구현→regression→dry-run→micro-fix→post-result audit→ANU·Codex adjudication→최종 packet). HOLD 조건 적중 시만 회장 보고. md 문서화 금지 — 코드/파일 자동화 필수.

## 9-R. Codex lint 반영 정밀 보강 (HOLD_FOR_CHAIR lint → 자동 수렴, agent a7b18bcf73b59b737)

### 9-R.1 (CRITICAL C2/C4/C8 해소) §12 over-freeze 정정 — 회장 §3 의도 정합

회장 §3 verbatim "**activation runner 가 isolated evidence 만 신뢰하도록 수정**" + "deriver/gate/controller integration" 은 activation runner **수정 명시**. ANU §12 초안이 `pre_authorized_activation_runner.py` 를 frozen 처리한 것은 **ANU 배치안 오류 — §3 와 모순**. 정정:

- **수정 허용 (surgical, §3 명시 범위)**: `anu_v3/pre_authorized_activation_runner.py` — `evidence_bundle is None → repo_path live build` fallback 경로를 **fail-closed 봉인**(evidence_bundle 부재 또는 `source_workspace_type != isolated_clean_worktree` → 즉시 HOLD, live build 진입 0). `anu_v3/goal_activation_controller.py` — evidence-source seam 전환.
- **무수정 유지 (전 chair task 일관)**: `pre_authorized_action_gate.py`(f34e2445… 불변 anchor) / `pre_authorized_contract_deriver.py` / `pre_authorized_executor_binding.py` / callback orchestrator. **source_workspace_type 강제는 gate 본체가 아니라 evidence builder + activation runner + controller seam 에서** (gate 는 contract 평가만; deriver provenance 의 evidence_bundle_sha256 가 source_workspace_type 포함 번들을 이미 해시 → runner 가 `source_workspace_type==isolated_clean_worktree` precondition 추가 검증). gate/deriver 본체 무수정으로 structural enforcement 성립.

### 9-R.2 (CRITICAL C1 해소) isolation integrity 강제

isolated_worktree_evidence_source 의 모든 git 호출 = **absolute worktree path 전용 `git -C <isolated_wt>`**, `cwd`-relative git 금지, live workspace path·mtime **미참조**. evidence 산출은 isolated worktree 내부 결과만. runner live-fallback 봉인(9-R.1)으로 재오염 경로 0.

**GIT_DIR/GIT_WORK_TREE sanitization 구현 메커니즘 (verbatim — Codex H-SPEC-1 해소, 구현 ambiguity 0):** 모든 subprocess git 호출은 `subprocess.run(..., env=_sanitized_env())` 사용. `_sanitized_env()` = `e = os.environ.copy(); e.pop("GIT_DIR", None); e.pop("GIT_WORK_TREE", None); e.pop("GIT_INDEX_FILE", None); e.pop("GIT_OBJECT_DIRECTORY", None); e.pop("GIT_COMMON_DIR", None); return e`. cwd 인자 미사용(항상 `git -C <abs isolated_wt>`). 이 패턴 외 git env 전달 금지.

### 9-R.3 (CRITICAL C7 / HIGH C6 해소) regression + fixture 완비

§11 expected_files 에 fixture 3종 전부 명시(아래 §11 개정). 추가 adversarial regression(§8 15 + ):
16. `evidence_bundle=None` + `--activate` → 구조적 HOLD (live fallback 봉인 입증)
17. `source_workspace_type` missing/=live_workspace → HOLD
18. `GIT_DIR`/`GIT_WORK_TREE` 오염 주입 → isolation 유지 (evidence 불변)
19. teardown/finally 포함 신규 모듈에 git reset/clean/stash/rm/unlink/rmtree(live workspace 대상) 정적 부재
20. 7th-file 오염이 deriver→gate→controller 체인 통해 HOLD 전파
21. worktree replay 중 live mtime/path 미참조 보장
22. 중복 PR idempotency guard
23. isolated worktree 제거 실패 시에도 live workspace 무결성 보장
24. isolated clean 6-file delta → ALLOW → (--activate) 실 PR open path 도달, 그 외 전부 HOLD

### 9-R.4 (HIGH C3 해소) cleanup 금지 범위 정밀 정의 (회장 의도 명문화)

회장 ban "왜" 명시: "live workspace 를 깨끗하게 만들기 위해". 따라서 금지 = **live workspace(tracked/untracked) 또는 타 worktree 를 대상으로 한 git reset/clean/stash + rm/unlink/rmtree**. controller 자신의 decision/packet marker(task-2553+8.* 자기 산출물) lifecycle(delete-on-non-HOLD 의 자기 marker Path.unlink)은 **workspace cleanup 아님 → 허용 유지**(기존 controller v0 동작 보존). isolated worktree 정리 = `git worktree remove` 만(파괴적 op 아님). 회장 명시 "왜"(workspace 청소 금지) 내 해석 — chair 재결정 불요.

### 9-R.5 (HIGH C5 해소) controller 변경 = evidence-source seam + 최소 metadata

§11-2 "seam-only" 정정: evidence-source seam **+ task-2553+8 packet/path metadata 최소 변경**(+7 하드코딩 경로의 +8 일반화 — 단 controller 결정 로직·6조건·gate/deriver/binding call API 무변경). 기존 65 regression 무회귀 필수(회귀 시 HOLD).

### 9-R.6 (HIGH C6 해소) gate regression authority 파일 불일치 — 해소

`tests/regression/test_owner_trigger_2553_plus1_f1.py`(기존 gate/dev2 evidence-only HOLD 아티팩트, 미머지, frozen)와 §5 #2 `test_owner_trigger_2553_plus1_high_fix.py`(본 task 신규 clean replacement PR 의 effective-diff 파일)는 **상이 컨텍스트·상이 lifecycle — 충돌 아님**. 본 task 는 frozen f1.py 무수정, isolated worktree 안에서 **high_fix.py 를 신규 생성**해 6-file delta 재현. §12 frozen 목록의 test_pre_authorized_*/test_goal_*_2553plus7 와 무관(별개 파일). 문서로 확정, 코드 변경 0.

→ 9-R.1~9-R.6 으로 Codex CRITICAL 3 + HIGH 4 + dispatch-readiness 해소. 회장 라우팅 0(ANU-Codex 자동 수렴). Codex re-lint GO_READY 시 dispatch.

## 14. task-2553 계열 (혼선 방지)

+1=F1(DEFENSIVE_HOLD_PASS, 본 task가 isolated evidence 로 실 PR open 재수행) / +2·+3=초안(자동 dispatch 금지) / +4=gate(완료,무수정) / +5=deriver+binding(완료,call-only) / +6=activation runner(완료,call-only) / +7=goal controller v0(COMPLETE_VERIFIED, 첫 적용 DEFENSIVE_HOLD_PASS) / **+8(본건)=isolated-worktree evidence source refinement + task-2553+1 F1-solo 실 clean replacement PR open 재수행**.
