# task-2553+1 — F1-solo clean replacement (isolated-worktree evidence source)

> **Status**: clean replacement PR (F1-solo). 6-file effective diff. PR#102 원본 보존, F2/token transport 무변경, merge 0, same-branch push 0.

## F1 (단독)

`anu_v2/owner_trigger_pat.py` 의 `/gemini review` comment trigger endpoint/args allowlist 강화 (token transport 무관, task-2553+1 §2). 보존 79-test 인터페이스 결합 없는 단독 신규 회귀 `tests/regression/test_owner_trigger_2553_plus1_high_fix.py` 동봉.

## 경계

- effective diff = 정확히 6 파일 (회장 §5 single authority).
- F2 / phase3 / mqe / preserved tests 변경 0.
- evidence source = fresh origin/main 7346df82 isolated worktree (task-2553+8 refinement).

## task-2553+10 — Gemini medium thread resolution (is_duplicate_trigger 스트리밍)

- **thread**: `owner_trigger_pat.py:263` gemini-code-assist medium (2026-05-17T03:51:31Z) — `is_duplicate_trigger` 가 `read_text()+splitlines()` 로 audit jsonl 전량 메모리 적재.
- **분류**: **(A) style-only / perf-micro** — behavior-preserving, docstring "jsonl append-only — 한 줄씩 파싱" 설계의도 정합, expected_files 6 내 해결. (real-bug / false-positive / scope-expansion 아님.)
- **ANU-Codex adjudication**: ANU lean (A) ↔ 독립 Codex GO (behavior-preserving, in-scope, SEVERITY NONE) → 수렴.
- **해소**: `is_duplicate_trigger` 본문만 `with path.open("r",encoding="utf-8") as f: for line in f:` 스트리밍 전환. 시맨틱 1:1 (매칭 True / 깨진 라인 skip / 미존재·OSError False / 마커 우선). 9-R.3 decode-error parity: `except OSError` 만 유지(UnicodeDecodeError 양 형태 전파).
- **증명**: parity probe 15/15 PARITY_HOLDS (9-R.5 적대적 + 9-R.3) + 신규 회귀 4 PASS. F2 token transport block sha `b0214073…7560` pre==post byte-identical. F1 fix hunk `784f9d55…85aa` 무변(라인 시프트만). PR #128 effective diff = 정확히 6 파일 유지.
- **무변 anchor**: owner_trigger_pat.py pre `536611b5…86a6d` → post `7b7d996a…7135` (변경=is_duplicate_trigger 본문 한정).
