# task-2726+4 — LOOP_BOUNDARY repair: fail-open family 전수 fail-closed + /home/jay 하드코딩 전수 제거 (회장 repair 인가)

## 회장 인가 (2026-06-03, LOOP_BOUNDARY repair — head 9731cc4b fresh HIGH 2건)
PR #171(head `9731cc4b`) fresh OWNER /gemini(ANU owner_gemini_trigger 발사, submittedAt>head commit) **fresh HIGH 2건 유효**(코드 직접대조, FALSE_POSITIVE 아님):
1. **HIGH line 539-540**: STRICT mode 에서 `git rev-parse --git-dir` 실패(non-git) → `[SCOPE-GUARD] not a git repo — 검증 스킵` = **fail-OPEN 잔여 분기**. round-3 가 닫은 SCOPE_BASE empty 와 **같은 fail-open family**.
2. **HIGH line 8 + 56**: `WORKSPACE="/home/jay/workspace"`(line 8) + `glob.glob(f'/home/jay/.cokacdir/workspace/...')`(line 56, `_resolve_task_worktree`) = **workspace root 하드코딩 recurrence**(WORKSPACE_ROOT_HARDCODE 계열).
★ ANU 전수 audit 추가 발견: line 569 `diff 비어있음 — 검증 스킵` 도 fail-open 후보. → 이번에 **STRICT 스킵 분기 전수 fail-closed 일관화**로 종결(round-5 방지).
회장 repair 인가: ANU 스스로 repair path 선택. 같은 PR #171 bounded round-4. expected_files 2파일.

## worktree
- `/home/jay/workspace/.worktrees/task-2726-dev3` (branch `task/task-2726-dev3`, head `9731cc4b`)에서 **이어서**. new head → **non-force push**(PR #171 갱신).

## 허용 파일 (expected_files 2개 — 그 외 수정 금지)
1. `scripts/finish-task.sh` ← fail-open family 전수 fail-closed + /home/jay 하드코딩 전수 제거
2. `tests/regression/test_finish_task_worktree_isolation_2726.py` ← 회귀 추가

## 수정 방향 (회장 + ANU 전수 audit)
1. **HIGH-1 (line 540 non-git)**: STRICT mode 에서 SCOPE_PROJ_DIR 가 git repo 아니면 **검증 스킵 금지 → fail-closed(exit 1)** + actionable 메시지. (non-strict/default-off 는 기존 스킵 동작 보존.)
2. **HIGH-2 (line 8 + 56 /home/jay)**: 하드코딩 제거. `WORKSPACE="${WORKSPACE:-$HOME/workspace}"` (env/default 주입) + line 56 glob `/home/jay/.cokacdir` → `$HOME/.cokacdir` 또는 `os.path.expanduser('~')`. **/home/jay literal 코드경로 0**.
3. **★ fail-open family 전수 종결**: STRICT mode 의 모든 "검증 스킵" 분기(line 540 non-git, line 569 diff-empty 등)를 **fail-closed 원칙 일관화**. 단 정당한 스킵(.scope-guard-done 이미 존재·non-code task·non-strict)은 보존. STRICT + 검증 불가능 상황 = exit 1.
4. **기존 round-3 SCOPE_BASE empty fail-closed 유지**.
5. **non-strict/default-off 호환 유지**(`FINISH_TASK_WORKTREE_STRICT` 미설정/0 → 레거시 동작 불변).
6. `.done` 위조 금지·finish-task 외 완료 경로 금지.

## 필수 회귀 (회장 10)
1. **STRICT + non-git SCOPE_PROJ_DIR → fail-closed**(exit 1).
2. **STRICT + SCOPE_BASE empty → fail-closed 유지**.
3. STRICT + valid git repo + valid SCOPE_BASE → 정상(diff 생성).
4. non-strict/default-off → 기존 호환.
5. **/home/jay literal 코드경로 0**(grep, 주석 제외).
6. main/master default branch regression 유지.
7. **regression 35 유지 또는 증가**.
8. `git diff --name-only merge-base(origin/main,HEAD)..HEAD` = expected_files **2파일**.
9. forbidden 0. 10. ANU key literal(`c119085addb0f8b7`) 0.
- smoke: `python3 -m pytest tests/regression/test_finish_task_worktree_isolation_2726.py -q` + `bash -n scripts/finish-task.sh`.

## 금지 (회장 verbatim)
- expected_files 2파일 밖 수정 금지 · merge 금지 · FINISH_TASK_WORKTREE_STRICT 활성화 금지 · task-2727/2725/2729 혼입 금지 · shared main stash/reset/clean/delete 금지 · dev4 branch 개입 금지 · systemctl/wake 금지 · force push·rebase·admin override 금지 · ACTIVE=true 금지.
- ★ 또 같은 fail-open/hardcode 계열 fresh HIGH 재발 → 이번엔 **replacement PR 전환** 보고(round-5 bounded 금지). 새 결함 계열 → CHAIR_REQUIRED.

## doctrine
- repair = 새 commit→new head→**non-force push**(PR #171 갱신, amend 금지). bot `/gemini review` 무효(ANU owner_gemini_trigger request-only 1회). long polling 금지(watcher 위임 — review-settle 조건).

## finalize (PR #171 갱신 → MERGE_APPROVAL_CANDIDATE — merge 금지)
1. fix → 10 회귀 PASS → `git add` 2파일 → commit → **non-force push**.
2. `memory/reports/task-2726.md` 갱신(round-4 + L1). 3. `memory/events/task-2726+4.done` 생성.
4. ANU normal callback cron 강제 등록 — collector_role=ANU, ANU_KEY=c119085addb0f8b7(sealed). self-key 금지.
5. ★ merge 금지 — ANU 가 새 head owner_gemini_trigger 자동 발사 → CI/Gemini watcher(★review-settle: 첫 review 만으로 terminal 금지, OWNER trigger 후 quiet-window 까지 후속 fresh review 회수) → CI 11/11 + fresh HIGH/CRITICAL 0 + diff 2파일 + forbidden 0 + ANU key 0 + ACTIVE 변화 0 시 MERGE_APPROVAL_CANDIDATE 보고.

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "scripts/finish-task.sh"
    - "tests/regression/test_finish_task_worktree_isolation_2726.py"
    - "memory/reports/task-2726.md"
    - "memory/events/task-2726+4.done"
  forbidden_paths:
    - "teams/shared/verifiers/critical_gap.py"
    - "scripts/harness/v36/terminal_state_callback.py"
    - "deploy/systemd/**"
    - ".github/**"
  commands: ["pytest","python3 -m pytest","python3 -m py_compile","bash -n"]
  merge_policy: "none"
  ttl_hours: 48
```

## goal_assertions (auto)
- `python3 -m pytest tests/regression/test_finish_task_worktree_isolation_2726.py -q`
- `bash -n scripts/finish-task.sh`
- `python3 -c "import sys,re; s=open('scripts/finish-task.sh').read(); code='\n'.join(l for l in s.splitlines() if not l.strip().startswith('#')); sys.exit(1 if '/home/jay' in code else 0)"`
- `python3 -c "import sys; s=open('scripts/finish-task.sh').read(); sys.exit(1 if 'c119085addb0f8b7' in s else 0)"`

## 상태
CHAIR_APPROVED_LOOP_BOUNDARY_REPAIR_ROUND4 — dev3 재위임(head 9731cc4b 이어서). merge 회장 승인 전 금지. 또 같은 fail-open/hardcode 계열 재발 → replacement PR 전환.