# task-2553+42 — STEP 2: profile engine operational adoption 준비 (PASS)

> Executor: dev2-team 오딘 (1회 한정) · Lv.4 · plan+dry-run, 실 adoption 0
> 결과: **PASS** (consolidated 입력 — 단독·중간 보고 0). HOLD 미발생.

## 1. 산출물 (§4 expected_files allowlist 내 — 그 외 write 0)

- `anu_v3/profile_adoption_planner.py` — adoption planner 모듈 (순수, side-effect 0)
- `schemas/profile_adoption_plan.schema.json` — adoption-plan + dry-run schema
- `tests/regression/test_profile_adoption_planner_2553plus42.py` — 18 tests, ALL PASS
- `memory/fixtures/task-2553+42.json` — regression fixture
- `memory/events/task-2553+42.adoption-plan.json` — 산출된 adoption plan
- `memory/events/task-2553+42.decision.json` · `.result.json`
- `memory/reports/task-2553+42.md` (본 문서)

## 2. 방식 (코드/파일 자동화 — 문서-only 아님)

planner 는 +38 `dispatch_profile_selection`·+39 `coordinator_profile_binding`·
C1 `policy_profile_engine` 를 **import-only read-only 소비**(engine
resolve_policy 미실행, module attribute introspection 만)하여 실사용 연결 시
touch 될 live touchpoint 를 기계가독 enumeration 한다:

- **TA.dispatch_selection_wire** (Track A, risk MED): live dispatch 경로가
  `run_dispatch_profile_selection` file-level contract 호출하도록 wire.
  seam `DISPATCH_LIFECYCLE_EFFECT=='none'` (선택만, 실행 0).
- **TB.coordinator_binding_consume** (Track B, risk HIGH): batch coordinator
  가 engine `decision.v1` 을 `consume_for_coordinator` 통해 read-only 소비.
  후보 `parallel_batch_coordinator.py` = **frozen anchor(CONFLICT)** →
  non-frozen 안전 route `generic_batch_coordinator.py` 한정 권고.
- **TE.engine_decision_emit** (C1, risk LOW): engine 은 이미 decision.v1
  contract 노출 — adoption 시 engine in-place edit 불요 (byte-0).

overall risk = **HIGH** (TB frozen route conflict). conflict_count=1.
실 adoption 은 본 task 후 별도 회장 GO (plan+dry-run only).

dry-run = READ_ONLY_SIMULATION: applied=0, writes/merges/cron/PR=0,
callback/collector_touched=false, frozen_anchor_touched=false,
blocked_frozen_routes=[parallel_batch_coordinator.py], rollback=live 1-hunk.

## 3. 불변식 증거

- frozen byte-0 전후 EQUAL: policy_profile_engine `2363e291…` ·
  dispatch_profile_selection `54d47cd0…` · coordinator_profile_binding
  `ee634104…` · parallel_batch_coordinator `10529421…` · callback
  `83b3e307…` (frozen anchor 일치).
- git tracked HEAD `20456b5f` · branch `task/task-2553p1-f1-clean-replacement`
  전후 EQUAL. tracked 코드 무변, 신규 산출물 전부 untracked.
- callback/collector 무접촉: 산출 모듈이 callback/collector 소스를
  import/read 하지 않음. `emit_adoption_plan` 은 callback/collector 경로를
  read 도달 전 refuse (9-R.1 Layer A).
- 병렬 +43(dev7)와 expected_files disjoint · cross-track contamination 0.

## 4. ANU-Codex loop (자동 수렴, §9)

- Codex round 1: NOT_READY — (c) HIGH emit callback read 도달 / (e) HIGH·MED
  schema 과허용 / (f) MED callback misrepresentation + conflict_count
  double-count.
- 자동 정정: emit callback/collector pre-read refuse · conflict_count
  distinct route 계수 · dry-run blocked_callback_routes 분리 + NO_SAFE_ROUTE
  · schema item required 강화.
- Codex round 2 re-lint: **GO_READY** — (c)/(e)/(f) 전부 RESOLVED, NEW
  HIGH/CRITICAL 0.
- §6 트리거 미발생 → 회장 보고 불요. 9-R 이 본문에 우선 적용됨.

## 5. 9-R.1 2-layer 분리 준수

- Layer A: 산출 모듈/dry-run callback·collector 소스 무수정 · 실 adoption 0 ·
  module side-effect 0 (regression 입증).
- Layer B: executor §8 normal completion callback = 별개 lifecycle 종료
  신호. 작업 완료 직후 외부 cron tooling(cokacdir)으로 ANU 에 발사
  (MANDATORY) — 산출 모듈은 cron 등록/제거/조작 0.
