# task-2502 — SSOT legacy validator export minimal patch

- 작업 유형: **minimal patch (SSOT 함수 export + verifier import 정합성)**
- 작업 레벨: **Lv.2** (코드 변경 1~3 파일 + 회귀 테스트 1~2)
- 담당: **dev1-team (헤르메스)** — 오딘 외 유휴 dev팀 (PR lifecycle 경험)
- 우선순위: **★★ blocking**
- Track: **internal_doc / regression_fix / minimal_patch**
- 일시: 2026-05-08
- 선행: task-2487+1 ESCALATE 종료 (PR #52 보존), 회장 §3 결정

## ⚠️ 본 task의 본질 — 회장 §4 명시

> main 기준 finish-task / verifier ImportError를 해소하기 위한 **최소 패치**만 수행한다. SSOT 함수 export + verifier import 정합성 확보 + + suffix / dot-phase legacy task id 모두 허용. task-2497/task-2498/task-2494 finish-task 재실행 가능 상태로 만든다.

## 분류 컨텍스트

- 선행 root cause (회장 §2 확정): task-2485+1 / PR #47 partial merge — `is_valid_task_id_with_legacy` 함수가 main에 미반영, verifier만 import 시도 → 봇 worktree 전부 ImportError
- 선행 task-2487+1 ESCALATE (회장 §1): PR #52 보존, 머지 금지, scope cleanup 시도 금지
- 본 task: **2~4 파일 minimal patch만**, PR #52 cleanup 시도 금지

## 회장 §3 발행 조건 (필수)

1. **오딘 task-2487+1 세션 재사용 금지** — 새 dev1 세션으로 시작
2. **PR #52 branch 재사용 금지** — `task/task-2487+1-dev2` 절대 접근 금지
3. **origin/main 최신 기준 clean branch에서 시작** — fetch + checkout origin/main 후 새 브랜치 생성

## 회장 §4 목표 5건

1. utils/task_id_parser.py에 `is_valid_task_id_with_legacy` export 추가
2. teams/*/qc/verifiers/browser_verify.py import가 main에서 실패하지 않도록 정합성 확보
3. task_id + suffix, dot-phase legacy task id를 모두 허용
4. finish-task QC ImportError 해소
5. task-2497/task-2498/task-2494 finish-task 재실행 가능 상태 만들기

## 회장 §5 허용 범위

### 허용 파일 (이외 변경 0)
1. `utils/task_id_parser.py` — `is_valid_task_id_with_legacy` 함수 추가만
2. `teams/shared/verifiers/browser_verify.py` (존재할 경우)
3. `teams/dev1~dev8/qc/verifiers/browser_verify.py` — import 안전성 최소 수정만
4. 최소 회귀 테스트 파일 1~2개

### 테스트 후보 (회장 명시)
- `tests/regression/test_task_id_parser_legacy_export_2502.py`
- `tests/regression/test_browser_verify_import_2502.py`

### 허용 변경 (이외 변경 0)
- `is_valid_task_id_with_legacy` 함수 추가
- 기존 `is_valid_task_id`와의 호환 wrapper 추가
- browser_verify.py가 SSOT parser를 안전하게 import하도록 최소 수정
- import-only smoke test 추가
- task-2485+1 / task-2487+1 형태의 + suffix 검증
- task-1234.1 형태의 legacy dot-phase 검증

## 회장 §6 절대 금지 18건

1. PR #52 수정 금지
2. PR #52 branch cherry-pick 금지
3. PR #49/#50/#51 수정 금지
4. memory/plans/tasks/task-2485+1 수정 금지
5. task-2488/task-2489/task-2493 영역 수정 금지
6. memory/poc 수정 금지
7. tests/poc 수정 금지
8. tools/poc 수정 금지
9. dashboard 대규모 수정 금지
10. dispatch 대규모 수정 금지
11. report_parser 수정 금지
12. auto_merge/done-watcher/notify-completion/pattern-detector/token-tracker 동시 수정 금지
13. 전체 workspace sync 금지
14. rebase 금지
15. force push 금지
16. admin override 금지
17. CI bypass 금지
18. manual .done 금지

## 회장 §7 필수 검증 5단계

### 1. python import smoke
```python
from utils.task_id_parser import is_valid_task_id_with_legacy
```

### 2. task id validation
- task-2485+1 → PASS
- task-2487+1 → PASS
- task-2494 → PASS
- task-1234.1 → PASS
- invalid id → FAIL

### 3. browser_verify import
- `teams/shared/verifiers/browser_verify.py` import → PASS (존재 시)
- `teams/dev1~dev8/qc/verifiers/browser_verify.py` import → PASS

### 4. 회귀 테스트
- 신규 regression test PASS
- 기존 task_id_parser 관련 테스트 PASS

### 5. finish-task dry-run 또는 최소 QC smoke
- 실제 manual .done 없이 ImportError 해소 여부만 확인

## allowed_resources

```yaml
allowed_resources:
  read_only_paths:
    - "memory/tasks/task-2502*"
    - "memory/tasks/task-2487*"
    - "memory/tasks/task-2485*"
    - "memory/events/task-2487+1*"
    - "memory/events/task-2485+1*"
    - "memory/events/task-2487.review-or-approval-pending"
    - "memory/events/six-team-batch.essence-pass-escalated-verifier-limitation"
    - "memory/events/stale-workspace-snapshot-260508.json"
    - "memory/events/task-2500-candidate.workspace-sync-preflight-spec"
    - "memory/feedback/feedback_escalated_verifier_limitation_classification_260508.md"
    - "memory/orchestration/phase_b_integration_items_260507.md"
    - "memory/reports/task-2485+1.md"
    - "memory/reports/task-2487+1.md"
    - ".env.keys"
  paths:
    - "memory/tasks/task-2502*"
    - "memory/reports/task-2502*"
    - "memory/events/task-2502*"
    - "memory/plans/tasks/task-2502/**"
  workflow_paths:
    # 회장 §5 허용 파일만 (이외 변경 0)
    - "utils/task_id_parser.py"  # is_valid_task_id_with_legacy export 추가만
    - "teams/shared/verifiers/browser_verify.py"  # 존재 시 minimal import 수정
    - "teams/dev1/qc/verifiers/browser_verify.py"
    - "teams/dev2/qc/verifiers/browser_verify.py"
    - "teams/dev3/qc/verifiers/browser_verify.py"
    - "teams/dev4/qc/verifiers/browser_verify.py"
    - "teams/dev5/qc/verifiers/browser_verify.py"
    - "teams/dev6/qc/verifiers/browser_verify.py"
    - "teams/dev7/qc/verifiers/browser_verify.py"
    - "teams/dev8/qc/verifiers/browser_verify.py"
    # 회장 §5 테스트 후보
    - "tests/regression/test_task_id_parser_legacy_export_2502.py"
    - "tests/regression/test_browser_verify_import_2502.py"
  forbidden_paths:
    - ".secrets/**"
    - ".github/workflows/**"
    # 회장 §6 절대 금지 (PR #52 변경 영역 재침범 방지)
    - "memory/plans/tasks/task-2485+1/**"
    - "memory/plans/tasks/task-2487+1/**"
    - "memory/plans/tasks/task-2488/**"
    - "memory/plans/tasks/task-2489/**"
    - "memory/plans/tasks/task-2493/**"
    - "memory/poc/**"
    - "memory/heartbeats/**"
    - "memory/orchestration/phase_b_termination_classifier_spec_260508.md"
    - "memory/reports/task-2485+1.md"
    - "memory/reports/task-2487+1.md"
    - "memory/reports/task-2488.md"
    - "memory/reports/task-2489.md"
    - "memory/reports/task-2493.md"
    - "memory/tasks/task-2489.md"
    - "memory/tasks/task-2493.md"
    - "tests/poc/**"
    - "tools/poc/**"
    - "dashboard/**"
    - "dispatch/**"
    - "report_parser.py"
    - "scripts/auto_merge.py"
    - "scripts/done-watcher.py"
    - "scripts/notify-completion.py"
    - "scripts/pattern-detector.py"
    - "scripts/report_utils.py"
    - "scripts/token-tracker.py"
    - "scripts/start_task_guard.py"
    - "memory/events/task-2483*"
    - "memory/events/task-2484*"
    - "memory/events/task-2486*"
    - "memory/events/task-2472*"
    - "memory/events/task-2493*"
    - "memory/events/task-2485+1*"
    - "memory/events/task-2487+1*"
    # PR #52 branch 재사용 금지
    - ".git/refs/heads/task/task-2487+1-dev2"
  forbidden_actions:
    - admin_override
    - required_ci_bypass
    - manual_done_creation
    - existing_pr_force_push
    - existing_pr_close_or_delete
    - pr_52_modification
    - pr_52_branch_cherry_pick
    - pr_52_branch_reuse
    - pr_49_50_51_modification
    - workspace_full_sync
    - rebase
    - other_task_area_intrusion  # 다른 task 3문서/poc/heartbeat/report 침범 금지
    - large_dashboard_modification
    - large_dispatch_modification
    - report_parser_modification
    - simultaneous_multi_script_modification  # auto_merge/done-watcher/notify/pattern-detector/token-tracker 동시 수정 금지
    - odin_session_reuse  # task-2487+1 오딘 세션 재사용 금지
    - audit_jsonl_real_write
    - token_value_logging
    - new_local_regex
```

## 회장 §8 완료 조건 10건

1. ✅ PR 생성 (예: `task/task-2502-dev1` 또는 `task/task-2502-clean`)
2. ✅ 변경 파일 **최소화** (utils/task_id_parser.py + browser_verify.py 1~9개 + 테스트 1~2개 = 최대 12개 권고)
3. ✅ scope violation **0**
4. ✅ forbidden path 침범 **0**
5. ✅ CI 필수 체크 실행 (ruleset 8 required: ci/guard, guard, cancel-kill-switch, qc-check, hidden-path-audit, lock-in-check, merge-safety-check, gemini-review-gate)
6. ✅ Gemini fresh evidence 확보 (current head SHA == review SHA)
7. ✅ ImportError 재현 불가 (`from utils.task_id_parser import is_valid_task_id_with_legacy` 성공)
8. ✅ task-2497/task-2498/task-2494 재실행 가능 조건 충족 보고
9. ✅ PR #52/#49/#50/#51 보존 확인 (force push 0, close 0, delete 0)
10. ✅ 회장 머지 판단 대기 (자동 머지 X)

## 회장 §9 PR #52 후속 처리 (참조용 — 본 task 영역 외)

task-2502 main 머지 전까지 PR #52 보존. 머지 후 회장이 4 선택지 중 결정:
- A. PR #52 close 후 task-2487+2 clean 재작성
- B. PR #52에서 필요한 회귀 evidence만 보존하고 폐기
- C. PR #52를 scope cleanup task로 재정리
- D. PR #49/#50/#51의 원 회귀를 task-2502 이후 별도 clean patch로 처리

본 task에서는 어떤 선택지도 실행하지 않는다.

## 회장 §10 task-2497/2498/2494 재실행 방침 (참조용)

task-2502 main 머지 + ImportError 해소 후에만 회장 결정으로 finish-task 재실행. 본 task에서는 재실행 시도 금지.

## 회장 §11 현재 운영 원칙 (참조용)

critical path 순서:
1. PR #52 보존, 머지 금지
2. **task-2502 minimal SSOT-only patch 발행** ← 본 task
3. task-2502 PR 검증
4. task-2502 머지 판단
5. main ImportError 해소 확인
6. task-2497/2498/2494 finish-task 재실행 판단
7. PR #52 cleanup/replacement 별도 판단

## 시스템 3문서 참조

- 시스템 청사진: `/home/jay/.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/system_bot_orchestration_blueprint_260506.md`
- 분류 룰 ESCALATED_VERIFIER_LIMITATION: `memory/feedback/feedback_escalated_verifier_limitation_classification_260508.md`
- task-2487+1 ESCALATE evidence: `memory/reports/task-2487+1.md`, `memory/events/task-2487+1.escalate`, `memory/events/task-2487+1.scope-violation.json`
- task-2485+1 partial merge evidence: `memory/events/task-2485+1.essence-pass-escalated-verifier-limitation`
- stale workspace snapshot: `memory/events/stale-workspace-snapshot-260508.json`
- 6팀 batch evidence: `memory/events/six-team-batch.essence-pass-escalated-verifier-limitation`
- task-2500 spec: `memory/events/task-2500-candidate.workspace-sync-preflight-spec`
- Phase B 통합 항목 §9.4: `memory/orchestration/phase_b_integration_items_260507.md`

## 보고 — 회장 §12 명시 17항목

task-2502 완료 시 아래 형식으로 보고한다.

- **수행 팀**:
- **branch**:
- **PR 번호**:
- **변경 파일**:
- **is_valid_task_id_with_legacy 추가 위치**:
- **browser_verify import 상태**:
- **검증한 task_id 목록**:
- **신규 테스트**:
- **테스트 결과**:
- **CI 상태**:
- **Gemini fresh evidence**:
- **scope violation 여부**:
- **PR #52 보존 여부**:
- **PR #49/#50/#51 보존 여부**:
- **task-2497/task-2498/task-2494 재실행 가능 여부**:
- **머지 전 남은 차단 요소**:
- **추천 다음 액션**:

추가 보고 의무:
- SCQA 4섹션
- 회장 §4 목표 5건 각 결과 (PASS / FAIL / N/A)
- 회장 §6 금지 18건 위반 0건 명시
- 회장 §7 필수 검증 5단계 결과
- 회장 §8 완료 조건 10건 충족 보고
- 헤르메스/아누 통합 요약 경유, 회장 직접 장문 보고 X

## 후행 (자동 트리거 X — 회장 결정)

- task-2502 머지 → main ImportError 해소 확인 → task-2497/2498/2494 재실행 판단 (회장)
- task-2502 머지 후 PR #52 후속 처리 4 선택지 중 회장 결정