# task-2651 report — AXIS_2_DEPENDENCY_HARDENED_CANONICAL_LIVE_PATH_VERIFIED

- 담당: dev3 다그다 (team: dev3-team · Opus 4.7)
- chair_authorization_id: `CHAIR-AUTH-AXIS-2-HARDEN-20260524-JJONGS-CANONICAL-001` (회장 verbatim 박제)
- 전략: **S1 CANONICAL_PROMOTION**
- 결과: **AXIS_2_DEPENDENCY_HARDENED_CANONICAL_LIVE_PATH_VERIFIED**
- 단일소스 sha256 (task-2651.md): `5f5a621041f5e8cae37a7ecc6d86f0ff5f7a97bd5611b41313f31757a962fb32` 검증 PASS

## 핵심 변경 요약

1. **utils 4종 v2 canonical promotion** — task-2644+1-dev4 worktree → `/home/jay/workspace/utils/` byte-identical 복사 (sha256 4/4 PASS).
2. **hook 3개 PYTHONPATH-free 리팩토링** — `ANU_WORKSPACE_ROOT` env 기반 sys.path 보강 (live env에 이미 set).
3. **settings.json PYTHONPATH 제거** — UserPromptSubmit / Stop / SessionStart 3개 command prefix에서 `PYTHONPATH=/home/jay/workspace/.worktrees/task-2644+1-dev4 ` 제거 (3건 → 0건).
4. **task-2644+1-dev4 worktree 제거** — precheck 7/7 PASS → `git worktree remove` → 후 smoke 재실행 PASS.

## utils 4종 canonical sha256 (byte-identical 4쌍 PASS)

| file | sha256 |
| --- | --- |
| callback_collector_helper_integration.py | `ab5516062f5f74c22ea34985056d08d7a02010df6dbf5b89c86fa804e06d8f3f` |
| callback_adjudicator_v2.py | `ee8bb59a5a34449d5c7a7b29b8fd64bbb0222b8cc2beffe0ccb490234e84bc71` |
| callback_next_action_runner_v2.py | `c482226bb104ca743a2ebfecb84f90dcb42572edff97994255a204c83e294697` |
| source_attribution_guard_v2.py | `036c008ad1262c8d32e9570e26165c17b81ef50fbfd33b10ebdc75f839170612` |

## SH1-SH6 결과 (6/6 PASS)

- **SH1 canonical import** — PASS · 4종 v2 모두 `/home/jay/workspace/utils/` 에서 정상 import.
- **SH2 hook PYTHONPATH-free** — PASS · 3 hook (`session_start`, `stop`, `user_prompt_submit`) 모두 `env -u PYTHONPATH` 상태에서 `_integration` 로드 성공.
- **SH3 Axis 1 unchanged** — PASS · `callback_registration.py` / `callback_authority_validator.py` / `callback_source_cross_checker.py` canonical 미존재 유지 · `dispatch.py` diff 0.
- **SH4 worktree 비활성 inbound** — PASS · `env -u PYTHONPATH ANU_WORKSPACE_ROOT=/home/jay/workspace` 로 UserPromptSubmit hook exit 0 + `helper_integration.available=True`.
- **SH5 RECEIVED_INBOUND 5/5** — PASS · 합성 envelope (callback_id `cb-axis2-harden-task-2651-260524-001`, schedule_id `sched-task-2651-axis2-harden-001`) + Axis 1 pre-registration ledger row append 후 hook detect 5 조건 모두 충족.
- **SH6 worktree remove 후 재실행** — PASS · `.worktrees/task-2644+1-dev4` 제거 → SH4·SH5 replay 모두 exit 0 + helper_integration_available=True.

## settings.json diff 요약 (PYTHONPATH 정리 한정)

3개 hook command에서 다음 prefix가 제거됨:
```
PYTHONPATH=/home/jay/workspace/.worktrees/task-2644+1-dev4 
```
대상: UserPromptSubmit hook (line 25), Stop hook (line 115), SessionStart hook (line 126).
`ANU_WORKSPACE_ROOT=/home/jay/workspace`, `ANU_CALLBACK_INBOX_DIR=/home/jay/workspace/memory/.callback_inbox` 는 그대로 유지. 그 외 settings.json 변경 0건.

## PYTHONPATH 제거 여부

- settings.json `PYTHONPATH=...task-2644+1-dev4` 잔존 건수: **0**.
- 3 hook 파일 내부에서 `os.environ["PYTHONPATH"]` 직접 조회 0건.
- `ANU_WORKSPACE_ROOT` (이미 hook env로 set) 기반 sys.path 보강 패턴 사용.

## worktree 제거/비활성 검증 결과

- precheck 7항: worktree 존재 / clean / branch 보존 / SH1-SH5 사전 PASS / canonical sha256 보존 / 활성 process 0 / settings.json 잔존 0 — **7/7 PASS**.
- `git worktree remove .worktrees/task-2644+1-dev4` — exit 0.
- 제거 후 디렉토리 absent 확인.
- 제거 후 SH4·SH5 + Stop·SessionStart hook 재실행 모두 exit 0.

## dependency_hardening_required 최종값

**false** (task-2650 carry `true` → 본 task로 `false` 전환).

근거: utils 4종 v2 canonical live path 안착 + hook PYTHONPATH-free + settings.json PYTHONPATH 0건 + worktree 제거 후 SH4·SH5 PASS.

## forbidden_action_count

**0** (금지 12 모두 0):
- Axis 1 helper 변경 0 / Axis 3 touch 0 / dispatch.py 변경 0
- real auto-merge 0 / PR #141 pilot 0 / BOT App token 0
- live cokacdir 임의 변경 0 / commit/push/PR/merge 실행 0 (의도 commit 1건 guard 차단 · scope_observations 참조)
- HARNESS_ENFORCED 전체 선언 0 / callback system verified 전체 선언 0
- AXIS_2_FULLY_HARDENED 임의 선언 0 / smoke 실패 상태 worktree 제거 0

## 운영 관찰 (scope_observations · 보고용 투명성)

chair_authorization 8번이 허용한 utils 4종 + settings.json PYTHONPATH 정리 local commit을 시도했으나, `scripts/start_task_guard.py` 검증 #7 (`/home/jay/workspace`가 main branch이어야 함)에서 차단됨. 메인 workspace가 `task/task-2642-runner` branch (다른 팀 진행 중)이므로 branch 전환은 task-2642 work를 disrupt할 위험이 있어 미실행. 

대안: canonical `/home/jay/workspace/utils/` 4종 + worktree task-2651-dev3/utils/ 4종 모두 sha256 byte-identical로 무결성 박제. live hook은 canonical path에서 정상 동작 (smoke SH1-SH6 PASS로 입증). 향후 main 정합 시 동일 sha256으로 재시도 가능.

## frozen anchors (task md verbatim)

- ANCHOR-1: chair_authorization_id verbatim 그대로 박제 ✓
- ANCHOR-2: S1 CANONICAL_PROMOTION · utils 4종 byte-identical 승격 ✓
- ANCHOR-3: task-2644+1-dev4 worktree 실제 제거는 SH4·SH5 PASS 후에만 ✓
- ANCHOR-4: SH1-SH6 6/6 PASS 시에만 LIVE_VERIFIED 승격 ✓ (6/6 PASS · LIVE_VERIFIED 승격 정당)
- ANCHOR-5: Axis 1 helper 변경 0 · Axis 3 touch 0 · dispatch.py 변경 0 ✓
- ANCHOR-6: settings.json 변경 PYTHONPATH 정리 범위 한정 ✓
- ANCHOR-7: AXIS_2_FULLY_HARDENED 임의 선언 금지 ✓ (DEPENDENCY_HARDENED만 선언 · FULLY_HARDENED 별도 chair signature 필요)

## 모델 사용 기록

- 다그다(팀장 Opus 4.7) 직접 수행 · 본 task는 sha256 검증/파일 복사/hook 수정/smoke 실행 등 정밀 순차 작업 + critical chair_authorization 범위 엄수가 핵심이라 위임 시 anti-drift 위험이 직접 수행 비용을 초과한다 판단. Sonnet 팀원 호출 0건.

## 다음 권장

- Axis 3 packet 진행 (task-2650 marker에서 "Axis 3 packet 준비 전 Axis 2 dependency hardening 우선" 해소).
- `AXIS_2_FULLY_HARDENED` 승격은 회장 verbatim signature 별도 필요 (본 task에서는 미선언).
- task-2651-dev3 worktree 향후 main 정합 시 4종 v2 commit 재시도 (sha256 fingerprint 박제됨).
