# NL intake parser 코드화 spec 초안 (Track C · spec-only · 코드 구현 0) — 260523

회장 결정(2026-05-23 PR #140 후속): NL intake parser 코드화 task spec **초안만** 작성. 코드 구현 회장 별도 승인까지 금지.

기반: `system_nl_intake_spec_260523_refresh.md` (Track C 갱신본 · 88a1f2b0 stack 기준) + `system_real_merge_executor_wiring_spec_260523.md` (task_contract merge_policy 정합).

---

## 1. 본 spec 범위

- NL intake parser 의 **코드 구현 설계** 초안만
- 실 parser 구현 / dispatch / parser test 회장 별도 승인까지 금지
- Track A(merged) / Track B(pilot in-flight) / Track D(inventory) 와 expected_files overlap 0

---

## 2. parser 입력 / 출력 contract

```
INPUT:
  raw_text             자연어 요청 (텔레그램 verbatim)
  context              회장 명시 키워드 / 직전 stack 상태 / canonical_root
  prior_decisions      이전 회장 결정 history (read-only)

OUTPUT (task_contract.json — system_nl_intake_spec_260523_refresh §2):
  task_id              "task-NNNN(+N|.phase|.lane)"
  level                Lv.0~4
  expected_files       [...]
  forbidden_paths      [15+종 정적 자동 주입]
  risk_class           low|medium|high|critical7
  callback_envelope_template   {5축 + canonical_root + delivery_method ...}
  merge_policy         {activation_flag_required, chair_authorization_required, dryrun_only, pilot_scope}
  merge_ready_evidence {9 필드 default}
  acceptance_criteria  "owner-provided"
  routing              Work | Core | composite
```

---

## 3. parser 구조 (3-layer)

### Layer 1 — Lexer / Intent Detector
- 회장 verbatim 키워드 매핑 (예: "정리" / "구현" / "spec" / "PR" / "merge" / "dispatch" / "보고")
- risk_class 1차 추정 (실제 final 은 회장 명시)
- forbidden_paths 정적 자동 주입 (15+종)
- 출력: intent_summary + 잠재 risk_signal

### Layer 2 — Slot Filler
- task_id 후보 추출 (회장 명시 또는 next-available)
- expected_files 명시 (회장 verbatim 또는 INSUFFICIENT_EVIDENCE)
- callback_envelope_template seed (registration_attempted=false 초기값)
- merge_policy default (activation_flag_required=false · dryrun_only=true)
- 출력: partial task_contract

### Layer 3 — Validator + Confirmer
- INSUFFICIENT_EVIDENCE 케이스 회장 verbatim 질문 1회 (loop 0)
- task_contract.json 최종 schema 정합 검증
- Critical7 카테고리 사전 점검 (forbidden_paths overlap · admin override 의도 등)
- 출력: final task_contract.json + chair 보고 trigger 여부

---

## 4. parser 모듈 위치 (제안)

```
utils/
  nl_intake_parser.py            — Layer 1+2+3 통합 진입점
  nl_intake_lexer.py             — Layer 1 키워드 매핑
  nl_intake_slot_filler.py       — Layer 2 slot 추출
  nl_intake_validator.py         — Layer 3 정합 검증
dispatch/
  intake_hooks.py                — dispatch lifecycle 결선 (Work/Core 라우터)
```

★ 단, **dispatch/__init__.py** 는 forbidden (PR #140 round-1 자동수렴으로 추가됨) — import 1줄 추가 시 별도 회장 승인 필요.

---

## 5. forbidden_paths 정적 자동 주입 (parser 강제)

NL intake → task_contract 생성 시 항상 포함:
- utils/replacement_pr_runner.py · scripts/finish-task.sh
- utils/merge_ready_classifier.py · utils/merge_ready_dryrun_executor.py
- utils/callback_envelope_schema.py · utils/anu_callback_registrar.py
- utils/canonical_root_resolver.py · utils/anu_collector_action_trigger.py
- utils/real_merge_hooks.py · utils/activation_flag_validator.py
- utils/chair_authorization_validator.py · utils/gate_snapshot_validator.py
- utils/real_merge_artifact_schema.py
- dispatch/__init__.py · dispatch/finalize_hooks.py
- .tasks/ · tests/regression/ · tests/fixtures/ (시나리오 명시 외)

stack 추가 시 명시 갱신 정책 (자동 갱신 후속).

---

## 6. acceptance criteria source

- 회장 verbatim 결정 = 유일 acceptance source
- parser 는 자동 acceptance 추정 0
- 모호 시 INSUFFICIENT_EVIDENCE + 회장 명시 질문 1회 (loop 0 · 자동 fallback 0)

---

## 7. 본 spec 범위 (코드 구현 금지 doctrine)

- 본 spec = parser 코드화 **설계 초안** 까지만
- 실 코드 구현 / parser regression / parser fixture / dispatch 결선 회장 별도 승인 필요
- 회장 결정 대기 6 항목:
  1. parser 코드화 시점 (B1 pilot 완결 후 vs 별도 회장 결정)
  2. Layer 1 키워드 매핑 source-of-truth (verbatim 정본 / 사전 사전 작성 / 회장 직접 fill)
  3. INSUFFICIENT_EVIDENCE 시 질문 형식 (verbatim text vs 구조화 prompt)
  4. parser 본체 위치 (utils/ vs nl_intake/ 신규 디렉터리)
  5. dispatch lifecycle 결선 위치 (intake_hooks.py 신규 vs 기존 hooks 확장)
  6. risk_class enum source-of-truth (Layer 1 자동 추정 vs 회장 명시)

---

## 8. frozen anchor

- ANCHOR-1: "본 spec = NL intake parser 코드화 설계 초안 · 실 코드 구현 0 · 회장 별도 승인 대기"
- ANCHOR-2: "parser 3-layer (Lexer/Slot/Validator) · task_contract 최종 schema 정합 검증"
- ANCHOR-3: "forbidden_paths 15+종 정적 자동 주입 · stack 추가 시 명시 갱신"
- ANCHOR-4: "acceptance criteria 회장 verbatim 단일 source · INSUFFICIENT_EVIDENCE 질문 1회 (loop 0)"
- ANCHOR-5: "dispatch/__init__.py 추가 결선 별도 회장 승인 · 본 단계 0"
