# task-2948 — Lv.3+ 과거위임 4096자 절벽 소급 감사 (census)

- **작업**: 개발1팀 헤르메스 · 2026-08-13
- **성격**: read-only 감사. 코드/상태/파일 수정 **0건**. 검증 스크립트는 `/tmp/t2948/` 에만 생성.
- **요구자**: 로키(레드팀) — task-2946 머지 전 선행 census

---

## 종합 판정: 🟢 **GREEN**

**phantom_count = 0 / total_lv3plus = 128 (0.00%)**

'phantom 완료'(완료로 기록됐으나 실제 봇 미실행) 는 **1건도 발견되지 않았다.**
완료 마킹된 Lv.3+ 위임 **119건 전부**가 최소 **3개 이상의 독립 실행신호**를 보유한다.

> ⚠️ 단, GREEN 은 **과거**에 대한 판정이다. **현재** 빌더의 Lv.3+ 프롬프트는 dev 8팀 전원이 절벽을 초과한다(§6). 과거가 안전했던 이유는 §5 에 있다.

---

## 1. 모집단 정의

`memory/task-timers.json` 의 `work_level` 필드 기준.

| 값 | 건수 |
|---|---|
| `critical` | 120 |
| `security` | 3 |
| `lv3` / `3`(int) / `4`(int) / `"4"` | 5 |
| **합계** | **128** |

- 기간: **2026-03-05 ~ 2026-07-20**
- 팀 분포: dev1 37 · dev3 19 · dev4 18 · dev6 16 · dev2 15 · dev5 12 · dev7 9 · dev8 1 · design 1
- 상태 분포: `completed` 118 · `completed_owner_decision_accepted` 1 · `escalated` 3 · `stale` 3 · `stalled-zombie` 2 · `archived` 1

---

## 2. 4신호 교차확인 방법

지시된 4신호를 실제 데이터 가용성에 맞게 아래 8개 독립 신호로 확장 적용했다.

| # | 신호 | 출처 | 의미 |
|---|---|---|---|
| S1 | 봇 workspace 산출물 | `teams/dev*/` 내 task-id 파일 | 봇 세션이 실제로 파일을 남김 |
| S2 | schedule_history 실행기록 | `~/.cokacdir/schedule_history/*.log` | 스케줄이 실제 소비되어 세션이 뜸 |
| S3-a | 보고서 | `memory/reports/<task-id>*` | 봇 종결 산출물 |
| S3-b | `.done` 이벤트 | `memory/events/<task-id>*.done*` | 종결 마커 |
| S3-c | 기타 이벤트 | `memory/events/<task-id>*` | dispatched/qc/escalate 등 |
| S3-d | 커밋 | workspace + `projects/` 7개 레포 전수 | 코드 산출물 |
| S4-a | `qc_result` | task-timers (봇 `finish-task` 가 기록) | 봇이 종결 플로우를 실행 |
| S4-b | `token_usage` | task-timers | 봇 세션이 토큰을 소비 |

**phantom 판정식** = `상태 ∈ {completed, completed_owner_decision_accepted}` **AND** `실행신호 8종 전부 0`

---

## 3. 결과

### 3.1 실행신호 분포 (128건)

| 독립신호 개수 | 건수 |
|---|---|
| 0개 | 1 |
| 3개 | 17 |
| 4개 | 4 |
| 5개 | 16 |
| 6개 | 40 |
| 7개 | 50 |

- **완료마킹 119건 중 실행신호 0건 = 0 → phantom 0건**
- 완료마킹 119건 중 **신호 2개 이하(약증거)도 0건**. 즉 경계 사례조차 없다.
- 실행신호 0건은 **1건뿐**이며, 그것은 완료마킹이 **아니다**(§4).

### 3.2 신호별 커버리지 (schedule_history 보존구간 밖 119건)

| 신호 | 보유 건수 | 비율 |
|---|---|---|
| 봇 workspace 산출물 | 114 | 95% |
| 기타 이벤트 | 109 | 91% |
| token_usage | 107 | 89% |
| `.done` 이벤트 | 105 | 88% |
| 보고서 | 100 | 84% |
| 커밋 | 98 | 82% |
| qc_result | 64 | 53% |

---

## 4. 실행신호 0건 사례 (phantom 아님 — 2건)

### ① task-2396 — dev8-team · critical · 2026-05-03 07:56
- **상태 = `stalled-zombie`** → 시스템이 미완료로 **정탐**했다. 완료로 위장되지 않았다.
- 8신호 전부 0. `token_usage` 없음 = 봇 세션이 토큰을 쓴 적 없음.
- `memory/tasks/task-2396.md` 는 **현존하지 않음**(정리됨). `audit-trail.jsonl` 에 dispatch 의 task md write 기록(2026-05-02T22:56:22Z)만 남아 있음.
- dev8 = 프롬프트가 가장 큰 팀(현재 normal 3,630 / critical 4,871). **4096 drop 과 정합적이나, 증명은 불가**(§7 한계).

### ② task-2398 — dev2-team · "Lv.3 critical (회장 강한 명시 승인)" · 2026-05-03 08:08
- 보조 모집단에서 발견(`work_level` 타이머 항목 자체가 **없음** → 1차 census 사각).
- dispatch 는 실행됨: `memory/capabilities/task-2398.json`(captured_at 08:08:39) + `pipeline-status.json` stage 2 "AI 작업 수행" 진입 + audit-trail task md write.
- 그러나 보고서 0 · `.done` 0 · 커밋 0 · 이벤트 0 · 봇 workspace 0 · 타이머 0.
- **완료마킹도 없음** → phantom 이 아니라 **위임 유실(LOST)**. 좀비 탐지에도 안 걸린 무성(無聲) 손실.

> 두 건 모두 **2026-05-03 오전 동일 배치**(07:56 / 08:08)에서 발생했다. 상관관계는 있으나 원인은 미확정.

---

## 5. 왜 과거 Lv.3+ 는 살아남았나 (핵심 인과)

로키의 가설 "Lv.3+ 는 프롬프트가 커서 **원래부터 전부 drop** 됐을 개연성" → **반증되었다.**

**증거 1 — 절벽의 실재는 재확인됨.**
schedule_history 실행기록 **3,033건 전수**(2026-05-06 ~ 2026-08-13):

| 지표 | 값 |
|---|---|
| 4,096자 초과 기록 | **0건** |
| 관측 최대 프롬프트 | **4,066자** |
| 3,500~4,096자 구간 | 271건 |

관측 최대 4,066자는 task-2945 가 측정한 **2942 주입 이전 normal 프롬프트 4,037~4,066자**와 정확히 일치한다. 절벽은 실재하며, 초과 프롬프트는 **단 한 번도 실행된 적이 없다.**

**증거 2 — 과거 Lv.3+ 증분은 작았다.**
2026-04-28 판(`748ffd99`) `prompts/team_prompts.py` 를 추출해 확인한 결과, 당시 critical/security 증분은:
- `**[CRITICAL] …**` 헤더 1줄 (~60자)
- `- 마아트 독립 검증 필수` 1줄 (~15자)
- gate_level≥3 조건부 블록(Codex 사전검증 + Sanitize 게이트) 합계 **~610자**

→ **최대 ~690자 증분**. 반면 **현재 증분은 1,241자**(dev1 normal 3,405 → critical 4,646). Lv.3+ 블록은 이후 누적 비대해진 것이며, **과거에는 절벽 아래에 있었다.**

**증거 3 — 실증.** Lv.3+ 128건 중 127건이 커밋·보고서·`.done`·토큰소비 등 실물 산출물을 남겼다. 전달이 실제로 됐다는 뜻이다.

---

## 6. ⛔ 전방 리스크 (감사 범위 밖이지만 치명)

`scripts/measure_dispatch_prompt_sizes.py` 현재 실측:

| 팀 | normal | critical | security |
|---|---|---|---|
| dev1 | 3,405 | **4,646** ⛔ | **4,649** ⛔ |
| dev2 | 3,401 | **4,642** ⛔ | **4,645** ⛔ |
| dev3 | 3,430 | **4,671** ⛔ | **4,674** ⛔ |
| dev4 | 3,408 | **4,649** ⛔ | **4,652** ⛔ |
| dev5 | 3,404 | **4,645** ⛔ | **4,648** ⛔ |
| dev6 | 3,402 | **4,643** ⛔ | **4,646** ⛔ |
| dev7 | 3,406 | **4,647** ⛔ | **4,650** ⛔ |
| dev8 | 3,630 | **4,871** ⛔ | **4,874** ⛔ |

- normal 은 task-2946 감량으로 **전팀 통과**(여유 466~695자).
- **critical/security 는 dev 8팀 전원 절벽 초과.** 초과 프롬프트 실행 실적 0/3,033 을 감안하면, **지금 Lv.3+ 를 위임하면 100% silent drop 이다.**
- 즉 판정은 **과거 GREEN · 현재 RED**. task-2946 의 "Lv.3+ 미해소"는 이 census 로 정량 확인됐다.

---

## 7. 한계 (명시)

1. **schedule_history 보존 한계** — 최초 기록이 **2026-05-06**. Lv.3+ 128건 중 보존구간 내는 **9건뿐**. 나머지 119건에 신호 S2 를 적용할 수 없다. 다만 이들 119건은 커밋(82%)·보고서(84%)·`.done`(88%) 등 **실행 후에만 생성되는 산출물**로 대체 입증되며, 이는 S2 보다 강한 증거다.
2. **task-2396 / task-2398 의 원인은 미확정.** 두 건은 2026-05-03 발생으로 schedule_history 보존구간 이전이다. 4096 drop 과 정합적이지만 **drop 이라고 단정할 근거는 없다**(타임아웃·봇 선점·크래시 모두 동일한 흔적을 남긴다).
3. **보조 모집단 정밀도** — task md 텍스트에서 Lv.3/Lv.4 를 정규식으로 추출(243건 매칭, 타이머 미등록 61건). 이 중 레벨을 **명시 선언**한 것은 15건이며, 실행신호 0 은 task-2398 1건. 나머지 46건은 레벨 선언이 없는 계획/서브태스크 스텁으로 오탐이다.
4. **schedule_history 기록은 전부 chat_id 6937032012** 로 확인됨(봇 위임은 `bot_key_verifier` 로 구분). 타 대화 기록 혼입 없음.

---

## 8. 결론 및 건의

| 항목 | 값 |
|---|---|
| total_lv3plus | **128** |
| phantom_count | **0** |
| phantom 비율 | **0.00%** |
| 실행신호 0건(전체) | 2 (task-2396 `stalled-zombie`, task-2398 타이머 미등록) — **둘 다 완료마킹 아님** |
| verdict | **GREEN** |

**로키 요구 충족**: 머지 전 선행 census 완료. 과거 Lv.3+ 위임에 phantom 완료는 없다 → **task-2946 머지의 소급 블로커는 존재하지 않는다.**

**회장 결정 건의 (신규 2건, 본 감사 범위 밖 실행 필요)**
1. **P0 — Lv.3+ 프롬프트 감량**: critical/security 증분 1,241자를 ~690자 이하로 축소(과거 수준 복귀)해야 Lv.3+ 위임이 되살아난다. 미조치 시 다음 Lv.3+ 위임은 확정 drop.
2. **P1 — 무성 유실 탐지**: task-2398 은 dispatch 는 됐으나 **타이머 항목조차 없어** 좀비 탐지·census 양쪽을 빠져나갔다. `memory/capabilities/*.json` 은 있는데 타이머가 없는 조합을 유실 알람으로 걸 것.

---

### 재현 (read-only)
```
/tmp/t2948/build_index2.py   # schedule_history 3,033건 인덱싱
/tmp/t2948/census2.py        # Lv.3+ 128건 8신호 교차확인
/tmp/t2948/census3b.py       # 보조 모집단(타이머 미등록) 확인
python3 /home/jay/workspace/scripts/measure_dispatch_prompt_sizes.py
```
