# task-2506 — critical_gap.py false-positive 패턴 보강

- 작업 유형: **QC verifier 정밀도 향상 (코드 수정)**
- 작업 레벨: **Lv.2** (단순 패턴 보강 + 회귀 테스트)
- 담당: **dev4-team + composite ③ 페르소나 모드 (로키 + 마아트)**
- 우선순위: **★★ blocking** — QC false-positive 자주 발생
- Track: **qc_verifier_precision / critical_gap_fix**
- 일시: 2026-05-08
- 회장 결정: 2026-05-08T12:30 (3안 채택, 분리 진행 승인)

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

> task-2506은 `critical_gap.py` verifier가 보고서에서 단순 메타데이터/우선순위/안건/일반 명사구의 "critical" 단어를 미해결 이슈로 잘못 인식하는 false-positive 패턴을 수정한다.

## composite ③ 페르소나 강제 모드

> 본 task는 dev4-team 물리봇이 수행하지만, **dev 본인 페르소나는 OFF**. 다음 횡단조직 agent 페르소나 활성화:
> - **로키 (Loki)** — DA/redteam. verifier가 놓치는 false-positive 패턴 적대적 탐색
> - **마아트 (Ma'at)** — QC매니저. verifier 룰의 정확도/재현율 검증
>
> composite ③ 코드 미구현 (`feedback_composite_three_types_260508.md`) → 페르소나 강제 프롬프트 우회

## false-positive 4가지 패턴 (이미 분석됨)

### A. 메타데이터 vs 이슈 구분 없음
- `## task: [CRITICAL] 20개 컨셉...` (작업 우선순위 라벨) → 이슈로 오인식
- `- 우선순위: critical` (메타 정보) → 이슈로 오인식
- `1. critical path 분석` (분석 대상 지칭) → 이슈로 오인식

### B. SCQA 본문 단순 단어 매칭
- `critical chain`, `critical path`, `critical section` 같은 일반 명사구 매칭
- SCQA `### S 상황` 안에 `- critical chain 중복 투입 문제` 같은 정상 분석 텍스트가 fail로 판정

### C. dispatch level 메타 (critical/normal/security)
- 봇이 보고서 첫줄에 `- 작업 레벨: critical` 자동 기재 → 자동 fail
- task spec에 `--level critical`로 발행된 작업은 모두 보고서에 critical 단어 들어감

### D. 메타 라벨 헤더와 실제 이슈 헤더 구분 부재
- `[CRITICAL]` 대괄호 prefix는 task 우선순위 표기로 자주 사용
- `## CRITICAL 이슈 1건 발견` 같은 실제 이슈 섹션과 구분 안 됨

## 필수 수정 4건

### a. "이슈 섹션 컨텍스트" 도입
- 보고서 전체 본문이 아니라 다음 섹션 안에서만 critical 검출:
  - `## 이슈`, `## 발견된 문제`, `## 발견된 이슈`, `## 미해결 항목`, `## issues`, `## 문제점`, `## CRITICAL 이슈`
- 마크다운 파서로 section 추출 → 이슈 섹션 줄만 검사
- 헬퍼: `_extract_issue_sections(content: str) -> list[str]` 신설

### b. 메타라벨 화이트리스트 — ISSUE 후보에서 배제
- 다음 패턴은 critical_lines 후보에서 제외:
  - `우선순위:`, `priority:`, `level:`, `--level`, `dispatch level`, `발사 우선순위:`
  - `[CRITICAL]` 대괄호 prefix가 헤더 시작 부분 (예: `## task: [CRITICAL] ...`)
  - 인접 줄에 `level: critical`, `priority: critical` 같은 메타 라벨 명시 시 그 줄도 제외

### c. 일반 명사구 화이트리스트
- `critical path`, `critical chain`, `critical section`, `critical mass`, `critical period`, `critical thinking`
- word boundary가 있어도 위 명사구는 false-positive 사례 → 별도 차단 패턴

### d. 인접 컨텍스트 검사
- critical 단어 앞뒤 ±2 줄에 다음 키워드 있으면 메타로 판정 (이슈 아님):
  - `level`, `priority`, `우선순위`, `[CRITICAL]`, `--level`, `dispatch`, `발사`, `발행`
- 헬퍼: `_is_metadata_context(lines, line_num) -> bool` 신설

## 회귀 테스트 (10건 false-positive + 5건 true-positive)

### False-positive (회장 명시 — fix 후 PASS 판정해야 함)
1. `- 우선순위: critical` 단독 줄 → PASS (메타 정보, 이슈 아님)
2. `## task: [CRITICAL] 20개 컨셉` → PASS (작업 우선순위 라벨)
3. `1. critical path 분석` → PASS (분석 대상)
4. SCQA 안에 `- critical chain 중복 투입 문제` → PASS (정상 분석)
5. `--level critical` 명시된 task의 보고서 첫줄 → PASS
6. `[CRITICAL]` 대괄호 prefix만 있는 헤더 → PASS
7. `critical thinking` 일반 명사구 → PASS
8. `level: critical` 메타 라벨 → PASS (severity와 다름)
9. `dispatch level critical` 명시 → PASS
10. `발사 우선순위: critical` → PASS

### True-positive (기존 룰 유지 — fix 후에도 FAIL 판정해야 함)
1. `## CRITICAL 이슈 1건 발견` 섹션 + 이슈 본문 → FAIL (실제 이슈)
2. `severity: critical` 단독 메타 라벨 → FAIL (severity는 이슈 자체)
3. `## 미해결 항목` 섹션 안에 critical 명시 → FAIL
4. `![security-critical]` 배지 → FAIL
5. CRITICAL 이슈 + RESOLVED 마커 없음 → FAIL

## Merge Topology Gate 7 metadata

```yaml
expected_files:
  - "teams/shared/verifiers/critical_gap.py"  # false-positive fix
  - "tests/regression/test_critical_gap_false_positive_2506.py"  # 신규 (10 false-positive 케이스)

risk_area: "qc_verifier_precision / critical_gap"

dependency: []  # 다른 active task와 무관

parallel_policy: "limited_parallel"  # 같은 QC verifier 영역(다른 verifier task-2507)과 limited 병렬

merge_queue_position: 3  # task-2503=완료, task-2503+1=2(보류), task-2506=3, task-2507=4

stale_recheck_required: false  # main 변경 영향 없음 (verifier 단독 파일)

cherry_pick_allowed: false  # 회장 정책
```

## allowed_resources

```yaml
allowed_resources:
  read_only_paths:
    - "memory/tasks/task-2506*"
    - "memory/feedback/feedback_composite_three_types_260508.md"
    - "teams/shared/verifiers/critical_gap.py"  # 기존 read 후 수정
    - "memory/reports/task-25**.md"  # false-positive 패턴 발견용 샘플
    - ".env.keys"
  paths:
    - "memory/tasks/task-2506*"
    - "memory/reports/task-2506*"
    - "memory/events/task-2506*"
    - "memory/plans/tasks/task-2506/**"
  workflow_paths:
    - "teams/shared/verifiers/critical_gap.py"  # false-positive fix만
    - "tests/regression/test_critical_gap_false_positive_2506.py"  # 신규
  forbidden_paths:
    - ".secrets/**"
    - ".github/workflows/**"
    - "scripts/auto_merge.py"
    - "scripts/finish-task.sh"
    - "dispatch.py"
    - "dispatch/**"
    - "utils/merge_topology_gate.py"  # task-2503+1 영역
    - "teams/shared/verifiers/git_evidence.py"  # task-2507 영역 (parallel_policy: limited)
    - "memory/events/task-2487+1*"
    - "memory/events/task-2497*"
    - "memory/events/task-2498*"
    - "memory/events/task-2494*"
    - "memory/events/task-2503*"
    - "memory/events/task-2507*"
    - "dashboard/**"
    - "report_parser.py"
    - "tests/poc/**"
    - "tools/poc/**"
    - "memory/poc/**"
  forbidden_actions:
    - admin_override
    - required_ci_bypass
    - manual_done_creation
    - existing_pr_force_push
    - existing_pr_close_or_delete
    - pr_52_modification
    - pr_49_50_51_modification
    - task_2497_2498_2494_rerun_interference
    - auto_cherry_pick_implementation
    - auto_merge_mixing
    - dashboard_intrusion
    - report_parser_modification
    - rebase
    - workspace_full_sync
    - dispatch_py_modification
    - merge_topology_gate_py_modification  # task-2503+1 영역
    - git_evidence_py_modification  # task-2507 영역
    - amendment_ignore  # ★ 회장 §7 amendment 무력화 재발 방지
    - mid_dispatch_correction_disregard
    - audit_jsonl_real_write_outside_target
    - token_value_logging
```

## 완료 조건

1. ✅ 이슈 섹션 컨텍스트 추출 헬퍼 동작
2. ✅ 메타라벨 화이트리스트 4종 적용 (우선순위/priority/level/[CRITICAL])
3. ✅ 일반 명사구 화이트리스트 6종 적용 (critical path/chain/section/mass/period/thinking)
4. ✅ 인접 컨텍스트 검사 동작
5. ✅ False-positive 회귀 테스트 10건 ALL PASS
6. ✅ True-positive 회귀 테스트 5건 ALL PASS (기존 룰 유지)
7. ✅ 기존 critical_gap 단위 테스트 0건 회귀
8. ✅ Merge Topology Gate 자기참조 PASS
9. ✅ CI 11/11 SUCCESS
10. ✅ Gemini fresh evidence 확보
11. ✅ 회장 §6 7 공통 금지 위반 0건
12. ✅ task-2507 (git_evidence fix)와 충돌 0건

## ★ amendment 보호 의무 (회장 §7)

> amendment 발생 시 즉시 적용. HOLD/재개 cron 도달하면 즉시 ack 답장. 이미 commit한 코드도 amendment 본문 충돌 시 즉시 회장 보고 + 결정 대기. mid-dispatch correction disregard는 forbidden_action으로 차단.

## 시스템 3문서 참조

- 정책 본체: `memory/feedback/feedback_composite_three_types_260508.md`
- amendment 보호: `memory/feedback/feedback_amendment_not_enforced_260508.md`
- 분석 결과: 이전 아누 분석 — `critical_gap.py:26-32` ISSUE_MARKER_PATTERNS 4 결함 + 4 fix 안
- 시스템 청사진: `/home/jay/.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/system_bot_orchestration_blueprint_260506.md`

## 보고

- SCQA 4섹션
- 4 false-positive 패턴 fix 결과
- 회귀 테스트 15건(10 FP + 5 TP) PASS evidence
- 자기참조 PASS evidence
- composite ③ 페르소나 적용 evidence (로키 + 마아트 분석 결과)
- 회장 §6 공통 금지 위반 0건 명시
- amendment 적용 evidence
- 헤르메스/아누 통합 요약 경유, 회장 직접 장문 보고 X