---
task_id: task-2487+1
status: completed
type: plan
scope: verifier_ssot_plus_dotphase_compat_fix
level: 3
priority: critical
team: dev2-team
created_at: 2026-05-08
---

# task-2487+1 계획서 — task-2487 회귀 픽스 + verifier SSOT 확장

## 1. 본질

task-2487 PR #49/#50/#51에서 발생한 **legacy dot-phase 호환 회귀**(예: `task-1234.5`, `task-9.1`, `task-648.1.dev1.done` 거부)를 픽스하면서, 동시에 **task_id parser SSOT 적용 범위를 verifier 계층까지 확장**한다.

기존 PR evidence는 보존하고, 새 정상 PR 경로(`task/task-2487+1-dev2`)로 제출.

## 2. 목표 (회장 명시 합격 조건 7건)

1. SSOT parser가 verifier 계층에 적용됨 (전수 audit + 위임 완료)
2. task-2485+1, task-2487+1 모두 verifier에서 거부되지 않음 (`+` suffix 허용)
3. browser_verify ESCALATE 원인 해소 (재현 → 해소 검증)
4. 회귀 테스트 PASS (`task-N.M`, `task-N+M`, `task-N.M.devX.done` 계열)
5. CI PASS
6. fresh evidence 확보 (Gemini fresh review SHA 일치)
7. 새 PR 생성 + 머지 가능 상태 도달 후 보고

## 3. 작업 범위

### 3.1 verifier 계층 SSOT 위임 (회장 명시 1, 3번)

- 대상: `teams/{dev1~dev8,shared}/qc/verifiers/browser_verify.py:13`
- 현재: `TASK_ID_PATTERN = re.compile(r'^task-\d[\w.\-]*$')` — `+` 미지원 + SSOT import 부재
- 조치: 자체 regex 제거 → `from utils.task_id_parser import is_valid_task_id` import + 호출
- 9개 파일 모두 동일 (md5 일치 확인)

### 3.2 SSOT compat 함수 추가 + 호출처 SSOT 위임 (회장 명시 4, 5, 6번)

Codex 1차/2차 검증 권고 수용: **SSOT 인접 단일 compat API 노출**.

#### 3.2.1 utils/task_id_parser.py에 신규 함수 추가 (V2 패턴 무수정)
- `is_valid_task_id_with_legacy(s)` — V2 또는 legacy dot-phase 모두 PASS
- V2 패턴 자체는 무수정 (read_only 정신 보존)

#### 3.2.2 호출처 SSOT 위임 (자체 regex 제거)
- dispatch/__init__.py L1497, L3901: `is_valid_task_id_with_legacy()` 호출
- scripts/notify-completion.py L38: SSOT 호출로 교체
- scripts/done-watcher.py L146, L328: SSOT 위임
- scripts/auto_merge.py L1193: SSOT 위임
- scripts/token-tracker.py L24: SSOT 위임
- scripts/pattern-detector.py L94: SSOT extract 함수 사용
- scripts/report_utils.py L226: SSOT extract 함수 사용
- dashboard/helpers.py L116, L133, L166: SSOT extract 함수 사용
- report_parser.py L153: SSOT extract 함수 사용

#### 3.2.3 관계 — SSOT 호출 vs extract
- validation: `is_valid_task_id_with_legacy(s)` (legacy 호환 포함)
- extraction (filename/branch): 기존 `extract_task_id_from_*` 함수 사용 (legacy 호환 별도 검토)

### 3.3 회귀 테스트 (회장 명시 7번)

- `tests/regression/test_task_id_parser_v3.py` 또는 `test_verifier_ssot_2487+1.py` 신설
- 회귀 케이스:
  - `task-9.1` → PASS (legacy dot-phase)
  - `task-648.1.dev1.done` → PASS (lifecycle 파일명)
  - `task-N.M.devX.done` → PASS
  - `task-N+M` → PASS (V2 retry)
  - `task-N.M` → PASS (legacy)
  - `task-N+M.done` → PASS
  - `task-2485+1` → PASS (자기참조 검증)
  - `task-2487+1` → PASS (자기참조 검증)

## 4. 기존 PR 처리

- PR #49 / PR #50 / PR #51 **close/delete 금지**
- unresolved review thread 17건 회귀 evidence로 보존
- force push 금지
- 새 PR(예: `[task-2487+1] task-2487 회귀 픽스 + verifier SSOT 확장`)에서 회귀 픽스만 진행

## 5. 게이트 흐름

- G1 (설계 게이트): Codex 사전 검증 PASS + 3 Step Why 검증
- G2 (구현 게이트): Gemini PR 리뷰 + 마아트 독립 검증
- G3 (머지 게이트): G3 독립 검증 → worktree finish --action pr → Gemini high 0건 → 자동 머지

## 6. 회장 명시 금지 (8건)

- ❌ PR #49/#50/#51 삭제 금지
- ❌ 기존 evidence PR 강제 머지/force push 금지
- ❌ unresolved thread 무시 금지
- ❌ admin override 금지
- ❌ CI bypass 금지
- ❌ manual .done 금지
- ❌ 오딘 세션 재시작 금지 (이번이 새 세션)
- ❌ task-2485+1 재오픈 금지
- ❌ utils/task_id_parser.py 변경 금지 (read_only)
- ❌ 자체 regex 신규 추가 금지 (5번 — 기존 regex 호환 복원으로 해석)
