# task-2710 v6 — Model upgrade policy · 4.8 future dispatch priority (READ-ONLY DESIGN DRAFT v6)

★ **READ-ONLY DESIGN DRAFT v6** — 회장 verbatim "Codex round 5 remaining recommendations 4건 전부 ACCEPT · v6 revision 인가 · pilot 불허 · locked 불허" 정합. **bot_settings.json 변경 0 · dispatch.py 변경 0 · settings.json 변경 0 · finish-task.sh 변경 0 · PR/push/merge/GitHub write/실제 dispatch 0**.

- **v1 lineage**: sha `cb99419b...` (★ 보존)
- **v2 lineage**: sha `4138b66d...` (★ 보존)
- **v3 lineage**: sha `641b852f...` (★ 보존)
- **v4 lineage**: sha `1964fb93...` (★ 보존)
- **v5 lineage**: sha `8fe519eb...` (★ 보존)
- **v6 origin**: Codex round 5 remaining 4 recommendations 1:1

---

## 0. Header / Authorization Anchor

- **task_id**: `task-2710`
- **task_type**: `policy_design_only`
- **chair_authorization_id**: `CHAIR-AUTH-TASK-2710-MODEL-UPGRADE-POLICY-4-8-FUTURE-DISPATCH-READ-ONLY-DESIGN-260530`
- **draft_version**: `v6`
- **draft_v1_v2_v3_v4_v5_preserved**: ✓
- **dispatch_status**: **NOT_DISPATCHED · READ-ONLY DESIGN v6 ONLY**
- **locked_status**: **NOT_LOCKED**

---

## 1. Goal (★ v5 유지)

> 신규 heavy judgment / verifier / executor dispatch 에서 `claude-opus-4-8` 우선 적용 가능성 검토 + `bot_settings.json` 직접 변경 금지 doctrine 과 충돌 0 안전 절차 설계 + 기존 evidence immutable historical 강제

---

## 2. Background (★ v5 유지)

ANU 본 세션 `claude-opus-4-7` · 봇 dispatch `claude-sonnet-4-6` · 4.8 ID `claude-opus-4-8` · CLAUDE.md `bot_settings.json 직접 변경 금지` doctrine.

---

## 3. Category gate — overlap-first precedence + single-branch overlap (★ R4 verbatim 강제)

### 3.1 Category enum (★ v5 유지)

```python
CATEGORY = Enum('Category', {
    'HEAVY_JUDGMENT': 'heavy_judgment',
    'VERIFIER': 'verifier',
    'EXECUTOR': 'executor',
    'EXCLUDED': 'excluded',
    'UNCLASSIFIED': 'unclassified',
})
```

### 3.2 Formal predicates — nested data path 통일 (★ v5 유지)

```python
def _get_allowed_existing_edits(task_md):
    ar = task_md.get('allowed_resources', {}) or {}
    return ar.get('allowed_existing_file_edits') or []

def _get_task_type(task_md):
    return task_md.get('task_type')

def _get_task_id(task_md):
    return task_md.get('task_id', '')
```

(★ `is_heavy_judgment` / `is_verifier` / `is_executor` / `is_excluded` 는 v5 §3.2 verbatim 유지)

### 3.3 Risky overlap detection — **single-branch unified** (★ R4 verbatim 강제)

★ R4 verbatim "Codex가 지적한 semantically redundant second branch는 제거한다 · triple-overlap / read_only + non-empty allowed_resources.allowed_existing_file_edits / verifier+executor overlap은 first branch에서 UNCLASSIFIED로 처리되도록 단일화한다":

```python
def has_risky_overlap(task_md):
    """
    R4 verbatim: single-branch unified — 4 risky overlap cases 모두 단일 조건으로 흡수.

    Single predicate covers all 4 risky overlap cases:
      (a) verifier + executor       (read_only + non-empty edits)
      (b) verifier + non-empty edits (read_only + non-empty edits)
      (c) read_only + non-empty edits (★ direct match)
      (d) triple-overlap            (★ heavy_judgment + read_only + non-empty edits 동시)
                                   → 'read_only + non-empty edits' 이미 subsume

    All 4 cases reduce to invariant: task_type == 'read_only' AND non-empty
    allowed_resources.allowed_existing_file_edits.

    Triple-overlap (d) 자동 흡수: heavy_judgment 매칭이 추가되어도 'read_only + non-empty edits'
    조건이 이미 첫 branch 에서 True 반환 → UNCLASSIFIED 강제.
    """
    return (
        _get_task_type(task_md) == 'read_only'
        and bool(_get_allowed_existing_edits(task_md))
    )
```

### 3.4 detect_category() — **table ↔ code 1:1 강제** (★ R4 verbatim 강제)

★ R4 verbatim "§3.4 table과 detect_category() pseudo-code가 1:1 일치해야 한다":

```python
def detect_category(task_md):
    """
    Precedence:
      Step 1 EXCLUDED
      Step 2 RISKY OVERLAP → UNCLASSIFIED (★ HEAVY_JUDGMENT 보다 먼저)
      Step 3 HEAVY_JUDGMENT
      Step 4 VERIFIER
      Step 5 EXECUTOR
      Step 6 UNCLASSIFIED
    R4 verbatim: table (§3.5) ↔ code 1:1 mirror.
    """
    if is_excluded(task_md):
        return CATEGORY.EXCLUDED
    if has_risky_overlap(task_md):  # ★ Step 2 — single-branch single-predicate
        return CATEGORY.UNCLASSIFIED
    if is_heavy_judgment(task_md):
        return CATEGORY.HEAVY_JUDGMENT
    if is_verifier(task_md):
        return CATEGORY.VERIFIER
    if is_executor(task_md):
        return CATEGORY.EXECUTOR
    return CATEGORY.UNCLASSIFIED
```

### 3.5 Precedence rule table — **single-predicate row + table↔code 1:1** (★ R4 verbatim 강제)

| case | task_type | id pattern | team separation | allowed_resources.allowed_existing_file_edits | heavy_judgment 매칭 | `has_risky_overlap()` 결과 | detect_category() result | Step |
|---|---|---|---|---|---|---|---|---|
| **read_only + non-empty edits (★ (a)/(b)/(c)/(d) 4 cases 통합)** | `read_only` | any | any | **non-empty** | any | **True** | **UNCLASSIFIED** | Step 2 |
| heavy_judgment only (read_only + empty edits + heavy match) | `read_only` | any | any | empty | YES | False | HEAVY_JUDGMENT | Step 3 |
| heavy_judgment + verifier (★ overlap 없음 = empty edits) | `read_only` | `task-NNNN+M` | declared | empty | YES | False | HEAVY_JUDGMENT | Step 3 |
| verifier only | `read_only` | `task-NNNN+M` | declared | empty | NO | False | VERIFIER | Step 4 |
| executor only | EXECUTOR_TYPES | any | any | n/a | NO | False or True (★ executor + edits → has_risky_overlap False since not read_only) | EXECUTOR | Step 5 |
| excluded | n/a | any | any | any | any | n/a (★ Step 1 우선) | EXCLUDED | Step 1 |
| 매칭 0 | any | any | any | any | NO | False | UNCLASSIFIED | Step 6 |

★ table의 모든 row 는 `detect_category()` 의 동일 Step 와 1:1 매칭 (★ R4 verbatim "1:1 일치").

### 3.6 R4 self-check (★ Codex round 5 §3.3 redundant branch 영역)

| Codex round 5 지적 | v6 반영 |
|---|---|
| §3.3 second branch (triple-overlap (d)) 가 first branch (read_only + non-empty edits) 에 이미 subsume → semantically redundant | §3.3 single-branch unified · 4 case 모두 1 predicate 로 흡수 (★ triple-overlap 매칭 자동 흡수 명시) |
| §3.4 table ↔ code 1:1 정합 미명시 | §3.5 row 마다 `has_risky_overlap()` 결과 + detect_category() result + Step 명시 |

---

## 4. Excluded category — discriminator 강화 + 3 추가 subcase (★ R2/R3 verbatim 강제)

### 4.1 Confirmed exclusions 3 (★ v5 유지)

| category | LLM judgment | 분류 |
|---|---|---|
| `simple_routing` | 0 | EXCLUDED |
| `diagnostic / scope_guard` | 0 | EXCLUDED |
| `callback_helper` | 0 | EXCLUDED |

### 4.2 qc_verifier subcase matrix — **discriminator 강화 + 3 추가 subcase = 18 subcase** (★ R2/R3 verbatim)

★ R2 verbatim "policy_judgment / chain_resolve_verdict / attempt_n_escalation row의 runtime discriminator 를 서로 겹치지 않게 명시":
★ R3 verbatim "regression-replay verdict / finish-task gate verdict / taskctl-state-guard scope misfire 3건을 matrix에 포함":

| qc_verifier subcase | runtime discriminator (★ R2 분리 강제) | runtime input | marker / keyword | evidence source | judgment type | 분류 |
|---|---|---|---|---|---|---|
| `severity_badge` | numeric/boolean only | qc_verify.py severity field | `^(LOW|MEDIUM|HIGH|CRITICAL)$` | qc_verify.py stdout | deterministic | EXCLUDED |
| `file_count` | numeric only | file glob count | numeric int | filesystem stat | deterministic | EXCLUDED |
| `tdd_check` | numeric/boolean only | RED→GREEN test + audit-trail | boolean + numeric | audit-trail markers | deterministic | EXCLUDED |
| `gemini_review_check` | external review interpretation | PR comments body | `gemini-code-assist` author + `/gemini review` | GitHub PR comments API | LLM judgment | **4.8 candidate** |
| `browser_verify` | artifact interpretation | Playwright artifact / screenshot | artifact path + URL match | `tests/artifacts/*.png` + Playwright log | LLM judgment | **4.8 candidate** |
| `security_audit` | adversarial judgment | Loki adversarial report | `OWASP` / `CVE` / `CWE` + severity | `memory/reports/loki-*.md` | LLM judgment | **4.8 candidate** |
| **`policy_judgment`** (★ R2 강화) | **policy/doctrine/forbidden/Critical7 판단 직접 포함** (★ verbatim) | doctrine compliance markers | doctrine forbidden Critical7 enum | `memory/feedback_*.md` + CLAUDE.md | policy judgment | **4.8 candidate** |
| `evidence_trust_judgment` | source attribution interpretation | source chain | `RECEIVED_INBOUND` / `LOG_LOOKUP` / `schedule_history` | `memory/events/*.json` source_attribution | evidence trust | **4.8 candidate** |
| `critical_7_interpretation` | Critical 7 분류 단독 결정 | Critical 7 분류 | `Critical 7` / `CHAIR_REQUIRED` | `feedback_critical_escalation_only_260508.md` | LLM judgment | **4.8 candidate** |
| `merge_readiness_judgment` | merge readiness composite (★ policy + Critical 7 + evidence trust 복합) | PR head sha + CI status + Gemini freshness | `MERGE_READY` / `merge-ready` + CI status checks | GitHub PR API + CI logs | 복합 | **4.8 candidate** |
| `lineage_rewrite_detection` | lineage rewrite 단독 (★ evidence trust + policy 복합) | task md sha256 history | `lineage` / `parent_task` + sha diff | `memory/tasks/task-NNNN.md` git log | evidence trust + policy | **4.8 candidate** |
| `owner_nudge_interpretation` | OWNER token action 단독 (★ policy + evidence trust 복합) | OWNER token action audit | `OWNER_TRIGGER_ONLY_CAPABILITY` / `OWNER_GEMINI_TRIGGER_ROUTER` | OWNER audit jsonl | 복합 | **4.8 candidate** |
| **`chain_resolve_verdict`** (★ R2 강화) | **multi-task chain / dependency / lineage / queue order / stale recovery 판단 포함** (★ verbatim) | multi-task chain outcome | `chain` / `dependency` / `lineage` / `queue_order` / `stale_recovery` | `memory/events/task-NNNN.chain-*.json` | LLM judgment + policy | **4.8 candidate** |
| **`attempt_n_escalation`** (★ R2 강화) | **retry_count / attempt-N / repeated failure / escalation threshold 판단 포함** (★ verbatim) | attempt-N hard limit | `retry_count` / `attempt-N` / `repeated_failure` / `escalation_threshold` | `memory/events/task-NNNN.attempt-N.json` + `feedback_attempt_n_hard_limit_doctrine_260513.md` | policy judgment | **4.8 candidate** |
| `gemini_external_trigger_gap_interpretation` | Gemini fresh 부재 + OWNER nudge router state | Gemini fresh + OWNER router | `GEMINI_EXTERNAL_TRIGGER_GAP` / `GEMINI_EXTERNAL_TRIGGER_STALE` / `OWNER_GEMINI_TRIGGER_ROUTER` | `feedback_gemini_external_trigger_gap_260509.md` + watcher audit | evidence trust + policy | **4.8 candidate** |
| **`regression_replay_verdict`** (★ R3 신규 verbatim) | regression replay outcome 단독 | regression test replay pass/fail + spec compliance | `RS-N replay` / `regression replay` / `harness PASS count` | `memory/events/task-NNNN.regression-*.json` + pytest log | **LLM judgment + policy** (★ spec compliance interpretation 포함) | **4.8 candidate** |
| **`finish_task_gate_verdict`** (★ R3 신규 verbatim) | finish-task gate composite outcome | finish-task scope-guard + tdd-check + qc + capability snapshot result | `finish-task` / `scope-guard` / `G3` / `G4` / `G5` / `G8` / `gate verdict` | `scripts/finish-task.sh` stderr + scope-violation jsonl + qc verdict | **policy + evidence trust + Critical 7** (★ spec gate + evidence integrity 복합) | **4.8 candidate** |
| **`taskctl_state_guard_scope_misfire`** (★ R3 신규 verbatim) | taskctl-state-guard B-3 scope misfire 단독 | taskctl-state-guard scope decision | `taskctl-state-guard` / `B-3` / `scope misfire` / `expected_files boundary` | `scripts/taskctl-state-guard.sh` audit + scope-decision audit | **policy + evidence trust** (★ scope decision 정합) | **4.8 candidate** |

### 4.3 Discriminator overlap precedence (★ R2 verbatim)

★ R2 verbatim "겹칠 경우 우선순위는 policy_judgment > chain_resolve_verdict > attempt_n_escalation 으로 둔다":

| overlap case | 우선순위 적용 |
|---|---|
| policy_judgment + chain_resolve_verdict | **policy_judgment** (★ 1st) |
| policy_judgment + attempt_n_escalation | **policy_judgment** (★ 1st) |
| chain_resolve_verdict + attempt_n_escalation | **chain_resolve_verdict** (★ 2nd · attempt_n_escalation 무시) |
| policy + chain + attempt 3 매칭 | **policy_judgment** (★ 1st) |

### 4.4 Subcase classifier decision rule — 18 subcase 처리 (★ R2/R3 verbatim)

```python
def classify_qc_subcase(qc_call):
    """
    R2 discriminator precedence: policy_judgment > chain_resolve_verdict > attempt_n_escalation
    R3 +3 subcase added.
    18 LLM-judgment subcases (★ 4.8 candidate) · 3 deterministic subcases (★ EXCLUDED) · unknown UNCLASSIFIED.
    """
    DETERMINISTIC_SUBCASES = {
        'severity_badge',
        'file_count',
        'tdd_check',
    }
    LLM_JUDGMENT_SUBCASES = {
        'gemini_review_check',
        'browser_verify',
        'security_audit',
        'policy_judgment',
        'evidence_trust_judgment',
        'critical_7_interpretation',
        'merge_readiness_judgment',
        'lineage_rewrite_detection',
        'owner_nudge_interpretation',
        'chain_resolve_verdict',
        'attempt_n_escalation',
        'gemini_external_trigger_gap_interpretation',
        'regression_replay_verdict',                  # ★ R3 verbatim 신규
        'finish_task_gate_verdict',                   # ★ R3 verbatim 신규
        'taskctl_state_guard_scope_misfire',          # ★ R3 verbatim 신규
    }
    # ★ R2 verbatim discriminator overlap precedence
    if has_policy_judgment_signal(qc_call):
        return CATEGORY.HEAVY_JUDGMENT  # 4.8 candidate (★ 1st)
    if has_chain_resolve_signal(qc_call):
        return CATEGORY.HEAVY_JUDGMENT  # 4.8 candidate (★ 2nd)
    if has_attempt_n_escalation_signal(qc_call):
        return CATEGORY.HEAVY_JUDGMENT  # 4.8 candidate (★ 3rd)
    if qc_call.subcase in LLM_JUDGMENT_SUBCASES:
        return CATEGORY.HEAVY_JUDGMENT
    if qc_call.subcase in DETERMINISTIC_SUBCASES:
        return CATEGORY.EXCLUDED
    return CATEGORY.UNCLASSIFIED
```

### 4.5 Judgment type taxonomy (★ v5 §4.4 유지 + R3 추가)

| judgment type | 정의 | v6 추가 subcase | 4.8 적용 |
|---|---|---|---|
| deterministic | numeric/boolean/regex check | (★ 추가 0) | NO |
| LLM judgment | text/image/multi-source synthesis | (★ 추가 0) | YES |
| policy judgment | doctrine/feedback 정합 | (★ 추가 0) | YES |
| evidence trust judgment | source attribution/lineage | (★ 추가 0) | YES |
| **복합** | 2 이상 동시 적용 | `regression_replay_verdict` (LLM + policy) · `finish_task_gate_verdict` (policy + evidence trust + Critical 7) · `taskctl_state_guard_scope_misfire` (policy + evidence trust) | YES |

### 4.6 R2/R3 self-check (★ Codex round 5 영역 정합)

| Codex round 5 지적 | v6 반영 |
|---|---|
| policy_judgment discriminator generic `feedback_* / doctrine / verbatim` 모호 | §4.2 policy_judgment row 강화 "policy/doctrine/forbidden/Critical7 판단 직접 포함" verbatim |
| chain_resolve_verdict ↔ attempt_n_escalation discriminator overlap (둘 다 attempt-N evidence key) | §4.2 chain_resolve_verdict row 강화 "multi-task chain / dependency / lineage / queue order / stale recovery" + attempt_n_escalation row 강화 "retry_count / attempt-N / repeated failure / escalation threshold" + §4.3 우선순위 precedence (policy > chain > attempt) |
| regression-replay verdict / finish-task gate verdict / taskctl-state-guard scope misfire 미열거 | §4.2 row 3 신규 + §4.4 LLM_JUDGMENT_SUBCASES 12 → 15 확장 + §4.5 복합 type 명시 |

---

## 5. Method A (overlay) — 사전 조건 A/B (★ v5 유지)

### 5.1 Method A = overlay (NOT bypass)

### 5.2 사전 조건 A/B 만

A: 기존 bot_settings.json 4.8-capable bot/route 명시 · B: chair-authorized per-dispatch overlay

### 5.3 사전 조건 C 제거 (★ v5 유지)

---

## 6. Structural enforcement rules — E3 분리 유지 (★ v5 §6 verbatim)

(★ v5 §6 verbatim 유지 · E3-a write-time guard ↔ E3-b post-pilot integrity check 분리 + §6.2 immutable 8 axis + §6.3 의도 설명)

---

## 7. Pilot pre-acceptance gates — **"결격" 명시 + slot pattern 매핑** (★ R1 verbatim 강제)

### 7.1 G1 — fallback-on-API-500 (★ v5 유지)

### 7.2 G2 — fallback-on-no-4.8-capable-route (★ v5 유지)

### 7.3 G3 — cost ceiling +50% / $15 (★ v5 유지)

### 7.4 G4 — latency ceiling +50% / 20분 (★ v5 유지)

### 7.5 G5 — baseline 결정성

#### 7.5.1 필수 baseline 3건 — **slot pattern 매핑** (★ R1 자체 정합 강화)

| slot | 분류 | slot-specific completion marker pattern |
|---|---|---|
| **slot 1** verifier | verifier baseline | `memory/events/task-NNNN+M_*verifier*_chair_closeout_*.json` 또는 `task-NNNN+M_accepted_with_known_caveats_*_closed_*.json` (★ verifier verdict 박힘) |
| **slot 2** executor | executor baseline | `memory/events/p1a_*_chair_closeout_*.json` / `p1b_*_chair_closeout_*.json` / `c1_*_chair_closeout_*.json` / `p2a_*_chair_closeout_*.json` (★ executor accepted closeout 박힘) |
| **slot 3** heavy_judgment / Codex-review | heavy_judgment 또는 Codex-review baseline | `memory/events/task-NNNN.v<N>-codex-round-<R>-rereview-result-*.json` (★ Codex round verdict 박힘) |

#### 7.5.2 Authoritative "가장 최근" source — 우선순위 3 단 + **"결격" 정의** (★ R1 verbatim 강제)

★ R1 verbatim "baseline marker가 다음 중 하나라도 해당하면 결격으로 본다":

| priority | timestamp source | path pattern |
|---|---|---|
| **1st** | completion marker timestamp | §7.5.1 slot-specific completion marker · `recorded_at` field |
| **2nd** | report timestamp | `memory/reports/task-NNNN(+M).md` · file mtime 또는 frontmatter `recorded_at` |
| **3rd** | dispatch marker timestamp | `memory/events/task-NNNN(+M).dispatched-YYYYMMDD.json` · `dispatched_at` field |

**"결격" 8 case** (★ R1 verbatim 1:1):

| # | 결격 사유 (★ verbatim) | detection rule |
|---|---|---|
| 1 | marker 파일 없음 | `os.path.exists()` False |
| 2 | JSON/YAML parse 실패 | `json.loads()` / `yaml.safe_load()` exception |
| 3 | required field 누락 | `recorded_at` / `task_id` / `status` 등 schema field 부재 |
| 4 | timestamp 없음 또는 비정상 | `recorded_at` 부재 또는 `datetime.fromisoformat()` 실패 또는 미래/원시시간 (★ 1970 또는 9999+) |
| 5 | task_id 불일치 | marker `task_id` ≠ 예상 lineage (★ slot-specific pattern 매핑 0) |
| 6 | status 가 accepted/closed/pass/pass_with_recommendations 계열 아님 | `status` field value 가 enum 외 (★ HOLD_FOR_CHAIR / REJECT / FAIL 포함 시 결격) |
| 7 | evidence sha/hash 불일치 | marker `sha256` field 가 실제 파일 sha256 ≠ |
| 8 | completion marker ↔ report/dispatch marker lineage 불일치 | 1st priority marker `task_id` ↔ 2nd priority `task_id` ↔ 3rd priority `task_id` 셋 중 1개라도 불일치 |

**Cascade rule** (★ R1 verbatim):
- 1st priority marker 결격 → 2nd priority source 로 이동
- 2nd 결격 → 3rd 로 이동
- 3rd 도 결격 → 해당 slot 유효 baseline 0 확보 → §7.5.3 pilot 불가 처리

#### 7.5.3 동일급 비교 강제 + slot 단위 pilot 불가 (★ v5 §7.5.3 유지)

- slot 1 verifier ↔ verifier baseline only · slot 2 executor ↔ executor baseline only · slot 3 heavy_judgment/Codex-review ↔ same-judgment only
- **mixed-slot 평균 금지**
- 동일급 baseline 부재 (★ 8 결격 case cascade 3rd 까지 모두 결격) → 해당 slot pilot 불가
- 유효 baseline 3건 (★ slot 1+2+3 모두 valid) 확보 못하면 **pilot dispatch 0 강제**

#### 7.5.4 G3/G4 동일급 baseline governance (★ v5 유지)

신규 dispatch 의 category 매칭 slot 의 동일급 baseline 만 사용 · 동일급 부재 → 해당 slot pilot 불가.

#### 7.5.5 보수적 기준 (★ v5 §7.5.6 유지)

cost / wall_time / output_tokens / api_error / retry_count / evidence_mutation_count 모두 baseline 중 최저 기준.

#### 7.5.6 4번째 후보 (★ v5 §7.5.7 유지)

secondary comparison only.

### 7.6 G6 — evidence integrity hash scope (★ v5 유지)

### 7.7 R1 self-check (★ Codex round 5 §7.5.2 영역 정합)

| Codex round 5 지적 | v6 반영 |
|---|---|
| "1st 결격 시에만 2nd" 의 "결격" 정의 모호 (★ malformed marker handling) | §7.5.2 결격 8 case 명시 (★ case 2 parse 실패 / case 3 required field 누락 / case 4 timestamp 비정상 포함) · cascade rule 명시 |
| slot 2 "accepted closeout 1건" 이 §7.5.2 slot-2-specific marker pattern 으로 매핑 부족 | §7.5.1 slot-specific completion marker pattern 명시 (★ slot 2 = p1a/p1b/c1/p2a chair_closeout marker) |

---

## 8. Acceptance Criteria

1. ★ R1 §7.5.2 "결격" 8 case + cascade + slot pattern 매핑 1:1 반영
2. ★ R2 §4.2 policy/chain/attempt discriminator 분리 + §4.3 우선순위 precedence 1:1 반영
3. ★ R3 §4.2 3 추가 subcase (regression_replay_verdict / finish_task_gate_verdict / taskctl_state_guard_scope_misfire) + judgment type 구분 1:1 반영
4. ★ R4 §3.3 single-branch unified + §3.4 table ↔ code 1:1 반영
5. ★ §5 / §6 / §7.1-7.4 / §7.6 v5 영역 변경 0
6. ★ bot_settings.json / dispatch.py / settings.json / finish-task.sh 변경 0
7. ★ PR / push / merge / GitHub write / 실제 dispatch 0
8. ★ task-2706~2709+1 evidence overwrite 0
9. ★ v1 / v2 / v3 / v4 / v5 모두 보존 · revert 0
10. ★ Codex round 6 OVERALL PASS / PASS_WITH_RECOMMENDATIONS 까지 locked 0 / pilot 0

---

## 9. v5 → v6 diff summary

| v5 영역 | v6 변경 | rationale |
|---|---|---|
| §3.3 has_risky_overlap() 2 branch (★ first read_only+edits + second triple-overlap) | **single-branch unified** (★ first branch 단일 predicate 로 4 case 흡수) | Codex round 5 AXIS_2 PWR · R4 verbatim "redundant second branch 제거" |
| §3.5 table 7 row | **single-predicate row 통합** (★ (a)(b)(c)(d) → 1 row) + `has_risky_overlap()` 결과 column 추가 | R4 verbatim "table ↔ code 1:1" |
| §4.2 policy_judgment row discriminator 모호 | **R2 verbatim 강화** "policy/doctrine/forbidden/Critical7 직접 포함" | Codex round 5 AXIS_3 · R2 verbatim |
| §4.2 chain_resolve_verdict / attempt_n_escalation discriminator overlap | **R2 verbatim 강화** chain (multi-task chain / dependency / lineage / queue order / stale recovery) · attempt (retry_count / attempt-N / repeated failure / escalation threshold) | R2 verbatim |
| §4.3 (신규) discriminator overlap 우선순위 | **policy > chain > attempt** verbatim | R2 verbatim |
| §4.2 15 subcase | **18 subcase 확장** (regression_replay_verdict / finish_task_gate_verdict / taskctl_state_guard_scope_misfire 신규) | Codex round 5 AXIS_3 · R3 verbatim |
| §4.4 LLM_JUDGMENT_SUBCASES 12 | **15 항목** + has_*_signal() priority check + R2 우선순위 적용 | R2/R3 verbatim |
| §4.5 복합 taxonomy | 3 신규 subcase 복합 분류 추가 | R3 verbatim |
| §7.5.2 cascade "결격" 정의 모호 | **R1 verbatim** 결격 8 case (marker 없음 / parse 실패 / field 누락 / timestamp 비정상 / task_id 불일치 / status 비정합 / sha 불일치 / lineage 불일치) | Codex round 5 AXIS_5 · R1 verbatim |
| §7.5.1 slot 2 "accepted closeout 1건" 매핑 부족 | §7.5.1 slot-specific marker pattern 명시 (slot 1 verifier_chair_closeout · slot 2 p1a/p1b/c1/p2a chair_closeout · slot 3 v<N>-codex-round-<R>-rereview) | Codex round 5 AXIS_5 · R1 자체 정합 강화 |
| §5 / §6 / §7.1-7.4 / §7.6 | **변경 0** | round 5 PASS / PWR 영역 보존 |

---

## 10. R1~R4 (Codex round 5 remaining) self-check

| ID | 회장 verbatim recommendation | v6 반영 위치 | status |
|---|---|---|---|
| **R1** | §7.5.2 "결격" 8 case + cascade | §7.5.1 slot pattern / §7.5.2 결격 8 case + cascade / §7.5.3 slot 단위 pilot 불가 / §7.7 self-check | ✓ ACCEPTED |
| **R2** | §4.2 discriminator 강화 + 우선순위 (policy > chain > attempt) | §4.2 policy/chain/attempt row 강화 / §4.3 우선순위 / §4.4 has_*_signal() priority / §4.6 self-check | ✓ ACCEPTED |
| **R3** | §4.2 3 추가 subcase + judgment type 구분 | §4.2 row 3 신규 / §4.4 LLM_JUDGMENT_SUBCASES 확장 / §4.5 복합 taxonomy / §4.6 self-check | ✓ ACCEPTED |
| **R4** | §3.3 single-branch + §3.4 table ↔ code 1:1 | §3.3 single-branch unified / §3.4 mirror / §3.5 single-predicate row / §3.6 self-check | ✓ ACCEPTED |

**총 4/4 ACCEPTED**

---

## 11. Allowed / Forbidden Files

### 11.1 expected_files (★ 본 v6 round)

1. `memory/tasks/task-2710_v6.md`
2. `memory/events/task-2710.v6-revision-created-260530.json`
3. `memory/events/task-2710.v6-codex-round-6-rereview-result-260530.json`

### 11.2 allowed_existing_file_edits

- **NONE**

### 11.3 forbidden_files

v5 §11.3 verbatim + `memory/tasks/task-2710_v5.md` (★ v5) 추가.

### 11.4 forbidden_actions

1. bot_settings.json / dispatch.py / settings.json / finish-task.sh 변경 0
2. PR / push / merge / GitHub write / 실제 dispatch 0
3. pilot dispatch 0
4. task-2710 locked 선언 0
5. 4.8 소급 적용 0
6. task-2709+1 추가 작업 0

---

## 12. ANU Doctrine Compliance

- ★ v1/v2/v3/v4/v5 modification 0
- ★ ANU 자체 코드 구현 0 · 모델 설정 변경 0 · pilot dispatch 0 · locked 선언 0
- ★ ANU 자체 분류 결정 0 (★ R1~R4 모두 회장 verbatim 매핑)
- ★ task-2706~2709+1 evidence overwrite 0
- ★ ANU 자체 OVERALL PASS 선언 0

---

## 13. Sentinel

★ task-2710 v6 = read-only design draft v6 · Codex round 5 remaining 4 recommendations (R1 결격 8 case · R2 discriminator 강화 + 우선순위 · R3 3 추가 subcase · R4 single-branch + table 1:1) 1:1 반영 · bot_settings.json 변경 0 · dispatch.py 변경 0 · settings.json 변경 0 · finish-task.sh 변경 0 · 코드 구현 0 · pilot dispatch 0 · locked 선언 0 · v1/v2/v3/v4/v5 보존. Codex round 6 PASS / PASS_WITH_RECOMMENDATIONS 전까지 pilot 0. 끝
