# task-2622 — INVARIANTS_SNAPSHOT_SMOKE (read-only smoke 워크로드 · CALLBACK_CONTRACT_REAL_OBSERVATION_PILOT 의 inner workload)

> **Lv**: Lv.2. **Executor**: dev6-team 페룬 (key 1e41a2324a3ccdd0) 1회 한정 — task-2620/2621 dispatch_callback_contract 직접 친숙. **TTL**: 90min. **분류**: 회장 chair-authorized 실제관측 pilot 의 inner smoke — 새 기능 0·remediation 0·산출 1 파일. 문서-only 금지(JSON 1건 + 표준 decision/result/report). **callback: 반드시 독립 ANU key c119085addb0f8b7(executor self key 1e41a2324a3ccdd0 절대 금지·+49 코드 정본).**
> **진입 근거**: 회장 2026-05-20 CALLBACK_CONTRACT_REAL_OBSERVATION_PILOT 승인. 본 task 는 새 기능이 아니라 callback contract 실작동 관측용 read-only smoke 다.

## 1. 목표 (회장 verbatim)

**아주 작은 read-only smoke task** 로 callback contract(9 required fields · byte-limit · normal+recovery-only fallback · self-key 차단) 가 현장에서 실제 작동하는지 관측한다. task 자체의 목적은 **기능 산출이 아니라 callback contract 관측**.

## 2. 워크로드 (read-only smoke · 워크로드 산출 1 파일 + 표준 dispatch 산출 3 파일)

워크로드 자체의 read-only 산출은 **1 파일**(`memory/events/task-2622.invariants-snapshot.json`). 추가로 본 task 의 표준 dispatch 산출 3 파일(`memory/events/task-2622.{decision,result}.json` · `memory/reports/task-2622.md`)은 §5 allowlist 정합 — 워크로드 1 + 표준 3 = 합 4 파일. 워크로드 본질은 read-only(anchor 파일 0 mutation).

다음 5 anchor 파일의 sha256 + size + mtime 을 측정해 `memory/events/task-2622.invariants-snapshot.json` 1 파일에 기록(read-only · 0 mutation):

1. `memory/tasks/task-2620.md`
2. `memory/tasks/task-2621.md`
3. `anu_v3/dispatch_callback_contract.py`
4. `dispatch/__init__.py` (production wiring file)
5. `memory/events/callback_4tuple_index.jsonl` (ledger)

추가 invariant 검증(read-only):
- git HEAD before/after 측정 → `20456b5f83fc039f2fd6f50f4b94095c29b41bfb` EQUAL 검증
- branch `task/task-2553p1-f1-clean-replacement` 불변 검증
- ledger 라인 수 = 49 검증(prefix byte-0)
- ANU-key cron-list 측정 시점 snapshot(현재 fallback 등록 직후 1건 예상)

산출 1 파일 `memory/events/task-2622.invariants-snapshot.json` 스키마:
```json
{
  "schema": "task-2622.invariants-snapshot.v1",
  "ts_kst": "...",
  "anchors": [{"path","sha256","size_bytes","mtime"}, ...],
  "git": {"head_before","head_after","equal","branch"},
  "ledger_lines": 49,
  "anu_key_cron_snapshot": [...]
}
```

## 3. 필수 (read-only smoke 한정)

- read-only · 0 mutation(anchor 5 파일·CLOSED_ALL_SETTLED 산출물·schema·config 전부 byte-0)
- git HEAD `20456b5f83fc039f2fd6f50f4b94095c29b41bfb` · branch 전후 EQUAL · commits 0
- regression 별도 0(워크로드 자체가 read-only)
- self-check 별도 0
- Codex 재audit HIGH/CRITICAL 0 일 때만 durable-success write-back

## 4. ★ 9 required fields in result.json (회장 mandate · 본 pilot 의 핵심 관측 필드)

memory/events/task-2622.result.json 에 다음 9 필드 **의무** 기록:
1. `callback_prompt_utf8_bytes` (★ `printf '%s' "$P" | wc -c` 측정·NOT wc -m)
2. `callback_prompt_chars` (참고용·자수)
3. `callback_cron_id` (등록 성공 시 cron id · 실패 시 null)
4. `callback_registration_status` (`REGISTERED_FIRED_OK` | `REGISTERED_FIRE_FAILED` | `NOT_REGISTERED_CALLBACK_PROMPT_TOO_LARGE` | `NOT_REGISTERED_OTHER` | `NO_ATTEMPT` | `UNKNOWN`)
5. `callback_role` (`normal` | `fallback_safety_net`)
6. `envelope_only_compliance` (`true` | `false` | `partial`)
7. `fallback_prompt_utf8_bytes`
8. `fallback_safety_net_registered` (bool)
9. `fallback_safety_net_role_single_purpose` (true=recovery-only · no-dual-purpose 정합)

## 5. expected_files allowlist (자기 deliverable 한정)

`memory/events/task-2622.invariants-snapshot.json`(1 산출·smoke 워크로드) · `memory/events/task-2622.{decision,result}.json` · `memory/reports/task-2622.md`. 이 외 write 0. **anchor 5 파일·anu_v3/*·dispatch/*·schemas/*·config/*·CLOSED_ALL_SETTLED 산출물(task-2610~2615+2620+2621)·callback_4tuple_index.jsonl 49행 prefix·Track C task-2619 전부 byte-0**. git HEAD/branch 전후 EQUAL · commits 0(ANU Layer-A no-git).

## 6. 금지 (carveout 명문: 본 task callback/fallback 등록 1쌍 + 표준 dispatch 산출은 §8 정합 허용)

코드 수정(anchor 외 어떤 파일도 — anchor 5 파일 byte-0) · §8 의 본 task callback + fallback safety-net **1쌍** 외 추가 cron 등록 0 · 본 task 외 새 dispatch 0 · remediation · PR/merge/branch/main/credential write · Track C 수정 · zombie cron 정리 · CLOSED_ALL_SETTLED 산출물 변조 · executor self-callback/self-collector/self-adjudication/self-dispatch · premature write-back · 문서-only/disposition-only 완료(워크로드 1 산출 + 9 필드 result.json + report 3 표준 산출 의무).

## 7. HOLD_FOR_CHAIR

신규 Critical7 또는 shared invariant 파손 시에만 CHAIR_HOLD. credential/permission expansion/forbidden path/scope expansion/self-key 사용/실제 PR·merge·credential write 발견 시 즉시 CHAIR_HOLD.

## 8. callback (a) — 독립 ANU key 강제 + recovery-only fallback safety-net + byte-limit (회장 mandate)

완료 직후 normal completion callback **ANU key c119085addb0f8b7 로만 발사** → 독립 ANU collector 회수·검증·Codex 재audit·adjudication. dispatch 시점에 **recovery-only fallback safety-net(ANU key·cancel-on-success·진행 트리거 아님·final-report 책임 0·feedback_no_dual_purpose_watcher 정합)** 동시 등록(mandatory contract).

**★ byte-limit (회장 verbatim 9정책 정합)**: callback prompt 와 fallback prompt 모두 **UTF-8 ≤3900 bytes hard limit · 3500+ warning · 2800~3200 권장**. envelope only(task_id·result_path·decision_path·report_path·sha256·collector_role=ANU·owner_key·one-line summary) · 등록 직전 `printf '%s' "$P" | wc -c` 측정 · 초과 시 등록 시도 금지 → `CALLBACK_PROMPT_TOO_LARGE` fail-closed 또는 file-envelope 전환. **result.json 에 §4 의 9 필드 의무 기록**.

executor self key 1e41a2324a3ccdd0 절대 금지(callback/collector/adjudication/dispatch — +49 코드 정본). authoritative 판정원=독립 ANU only. 잔여 non-Critical HIGH 시 회장 보고 없이 task-2622+1 자동 수렴(loop-boundary 정합).

## 9. 9-R (확정 — 본 절 본문 우선 · PRE-DISPATCH SPEC)

본 task md 는 dispatch 전 작업 명세. 산출물 부재·baseline 일치 정상. lint 기준=spec 정합성(구현 검증 아님·feedback_spec_lint_not_implementation_check). 회장 직접 결정 CALLBACK_CONTRACT_REAL_OBSERVATION_PILOT 의 inner workload — 새 기능 0·새 dispatch 0(본 task 외)·새 cron 0(본 task callback+fallback 외)·remediation 0·PR/merge/credential 0 · read-only smoke 1 산출 · 9 required fields 의무 · byte-limit 양 prompt · recovery-only fallback(no-dual-purpose) · self-key fail-closed · CLOSED_ALL_SETTLED/Track C/zombie cron 전부 byte-0 미접촉 · ANU Layer-A no-git · 자기 deliverable allowlist 한정. **ANU-Codex re-lint GO_READY 확정 후 dispatch**. ANU key 로 dev6 페룬 1회 위임.
