# task-2503+1 Gemini 4건 회장 결정 후속 처리 (다그다 단독)

- 작업 유형: **Gemini review thread 회장 판정 적용 (minimal patch + dismiss/resolve)**
- 작업 레벨: **Lv.2** (PR #57 단일 파일 1줄 수정 + thread resolve 4건)
- 담당: **3팀 다그다 (dev3)**
- 우선순위: **★★ blocking — queue position 1**
- Track: **task-2503+1 / PR #57 CLEAN 마무리**
- 일시: 2026-05-08
- 회장 결정: 2026-05-08 직접 명시 (Thread별 판정 + 다그다 단일 재지시)

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

> PR #57 Gemini 4건 중 Thread 3만 minimal patch. Thread 1/2/4는 evidence 코멘트 후 resolve. 추가 변경 일체 금지. queue 1→2→3 유지.

## 회장 결정 4건 판정 (절대 준수)

### Thread 1 (HIGH, line 177) — git log --grep regex
- **판정**: FALSE-POSITIVE
- **처리**: evidence dismiss + thread resolve
- **Gemini 답글 본문**: "Fixed in commit 831af145 by adding `-F` (`--fixed-strings`) flag to `git log --grep`. Current line 177 already contains `-F` flag, so `[task_id]` is treated as a literal string. No further change needed."
- **변경 금지**: line 177 이미 `-F` 플래그 적용됨. 재수정 절대 금지.

### Thread 2 (MEDIUM, line 20) — WORKSPACE 하드코딩
- **판정**: STYLE-ONLY
- **처리**: evidence dismiss + thread resolve
- **Gemini 답글 본문**: "Dismissed by chair decision. `WORKSPACE_ROOT` env var override exists; on the current single-host operations the `/home/jay/workspace` fallback is operationally safer than `os.getcwd()` (which can produce a wrong path when invoked from arbitrary cwd). Will be addressed in a separate config-hardening task if needed."
- **변경 금지**: line 20 그대로 유지.

### Thread 3 (MEDIUM, line 149) — fc49/46c1 hash 하드코딩 ★ minimal patch
- **판정**: REAL CODE QUALITY ISSUE
- **처리**: 본 PR에서 **minimal fix만** + thread resolve
- **허용 수정 (정확히 이 1줄만)**:
  - **수정 전 (line 148-150)**:
    ```python
                    if re.search(r"\bmerged\b", low) and (
                        "main" in low or "pr #" in low or "fc49" in low or "46c1" in low
                    ):
    ```
  - **수정 후**:
    ```python
                    if re.search(r"\bmerged\b", low) and (
                        "main" in low or "pr #" in low
                    ):
    ```
- **수정 범위**: utils/merge_topology_gate.py 단일 파일, 1줄 변경 (`or "fc49" in low or "46c1" in low` 제거)
- **금지**: 다른 line 변경 / 다른 파일 수정 / refactor / 주석 추가 모두 금지
- **Gemini 답글 본문**: "Applied chair decision. Removed task-specific hash prefixes (`fc49`, `46c1`). General evidence tokens `main` / `pr #` retained. Regression: task-2502.merged / task-2503.merged dependency-satisfied checks still PASS via the other 4 evidence paths (.done event / task-timer.merge_commit / git log --grep -F / gh pr list)."

### Thread 4 (MEDIUM, line 915) — audit_log race condition
- **판정**: STYLE-ONLY / infra concern
- **처리**: evidence dismiss + thread resolve
- **Gemini 답글 본문**: "Dismissed by chair decision. Current dispatch pipeline is cron-based sequential, so concurrent writes to `AUDIT_LOG_PATH` are operationally negligible. File-locking will be addressed in a dedicated audit-infra hardening task when dispatch parallelization lands."
- **변경 금지**: line 915 그대로 유지.

## 다그다 실행 절차 (정확히 이 순서)

### 1. branch 진입 + 동기화
```bash
cd /home/jay/workspace  # 또는 dev3 worktree
git fetch origin
git checkout <task-2503+1 branch>
git pull --ff-only origin <task-2503+1 branch>
```

### 2. minimal patch 적용 (Thread 3만)
- utils/merge_topology_gate.py line 149에서 `or "fc49" in low or "46c1" in low` 제거
- 정확히 위 spec의 "수정 후" 형태와 일치해야 함
- 다른 어떤 변경도 금지

### 3. 자기참조 + 회귀 + scope guard 사전 검증
- effective diff (origin/main 기준)이 기존 허용 6파일 내에서만 유지되는지 확인
- forbidden path 0건
- 22/22 회귀 PASS
- 자기참조 PASS

### 4. commit + push
```bash
git add utils/merge_topology_gate.py
git commit -m "fix(task-2503+1): drop task-specific hash prefixes from merged evidence (Gemini Thread 3, chair decision 2026-05-08)"
git push origin <task-2503+1 branch>
```

### 5. CI 재확인
- 11/11 SUCCESS 확인 후 진행
- 1건이라도 fail 시 즉시 중단 + 보고

### 6. Gemini thread 4건 resolve (graphql mutation)
- Thread 1: 답글 + resolve
- Thread 2: 답글 + resolve
- Thread 3: 답글 + resolve
- Thread 4: 답글 + resolve
- 답글 본문은 위 spec의 "Gemini 답글 본문" 그대로 사용

### 7. mergeStateStatus 확인
- `gh pr view 57 --json mergeStateStatus` → CLEAN 확인
- BLOCKED / DIRTY 시 즉시 보고

### 8. .done 발행
- 정상 절차대로 .done 발행 + 보고서 작성

## allowed_resources

```yaml
allowed_resources:
  read_only_paths:
    - "memory/tasks/task-2503*"
    - "memory/feedback/feedback_merge_topology_gate_260508.md"
    - "memory/feedback/feedback_amendment_not_enforced_260508.md"
    - "memory/events/task-2503.classifications"
    - "memory/events/task-2503+1.gate-bypass-via-cron"
    - "memory/events/task-2503+1.catch22-bootstrap"
    - "memory/events/task-2503+1.chair-override"
    - "memory/specs/merge-topology-gate-schema.yml"
    - "memory/task-timers.json"
    - ".env.keys"
  paths:
    - "memory/tasks/task-2503+1*"
    - "memory/reports/task-2503+1*"
    - "memory/events/task-2503+1*"
    - "utils/merge_topology_gate.py"
  forbidden_actions:
    - "다른 파일 수정 (utils/merge_topology_gate.py 외)"
    - "line 149 외 다른 line 수정"
    - "refactor / 주석 추가 / 변수명 변경"
    - "amendment 무시 / mid-dispatch correction 무시"
    - "thread 4건 resolve 누락"
    - "mergeStateStatus 미확인"
    - "PR #56 / PR #55 머지 (queue 위반)"
    - "main 직접 push"
    - "force push"
    - "fc49/46c1 하드코딩 원복"
```

## queue 유지 (회장 §6)

- PR #57 task-2503+1 replacement = **queue position 1** (CLEAN 후 1번째 머지)
- PR #56 task-2506 = queue position 2 (PR #57 머지 후)
- PR #55 task-2507 = queue position 3 (PR #56 머지 후)
- **PR #57 CLEAN 전까지 PR #56/#55 머지 금지**

## 완료 조건

1. ✅ Thread 3 minimal patch 적용 (1줄 수정)
2. ✅ effective diff 6파일 내 유지 + forbidden path 0건
3. ✅ 회귀 22/22 PASS
4. ✅ 자기참조 PASS
5. ✅ CI 11/11 SUCCESS
6. ✅ Gemini thread 4건 resolve (회장 명시 답글 본문 사용)
7. ✅ PR #57 mergeStateStatus = CLEAN
8. ✅ .done 발행 + 보고서

## 시스템 3문서 참조

- 본 task 모체: `memory/tasks/task-2503+1.md`
- amendment 보호: `memory/feedback/feedback_amendment_not_enforced_260508.md`
- composite 3종: `memory/feedback/feedback_composite_three_types_260508.md`
- 정책 본체: `memory/feedback/feedback_merge_topology_gate_260508.md`
