# backlog triage spec (Track D · read-only triage · 정리 실행 0) — 260522

회장 결정(2026-05-22): Track D backlog 인벤토리(640 dirty / stash 10 / pre-existing audit fail 3)는 본 batch 와 섞지 않는다. **본 문서는 read-only triage spec** — 위험도/소유 task/정리 순서/audit 계획만 제안. **정리·삭제·commit·revert·stash pop/drop·replacement_pr_runner 수정·finish-task.sh 수정·marker 삭제 전부 본 단계 금지.**

기반: [[backlog_inventory_260522]](실측 데이터) + [[feedback-audit-baseline-3way-blob-verify-260521]](3-way blob audit doctrine) + [[feedback-stash-accumulation-doctrine-260513]] + [[feedback-finish-task-shared-branch-gate-misfire-260521]].

---

## 1. 분리 원칙 (회장 재확인)

| 항목 | 본 batch 와의 관계 | 권한 |
|---|---|---|
| foreign dirty 640 (회장 명시 "5"와 괴리) | 절대 혼합 금지 | 본 spec 에서 triage 계획만 |
| stash 10 (5초과 WARN 정책 대상) | 절대 혼합 금지 | triage 계획만 |
| pre-existing test_stash_origin_audit_compat 3 fail | 절대 혼합 금지 | triage 계획만 |
| **replacement_pr_runner.py tracked M(working tree dirty)** | 절대 혼합 금지 | **3-way blob audit 계획 작성만, 파일 무수정** |

각 항목 = 별도 후속 task (회장 결정 발행). 본 spec 은 그 별도 task 들의 입력 evidence + 진행 순서 제안 까지만.

---

## 2. 위험도/우선순위 매트릭스

### 2.1 working tree dirty 640 (`feedback_audit_baseline_3way_blob_verify_260521` 적용 대상)
- **위험도 HIGH 범주(즉시 별도 task 권장)**:
  - `utils/replacement_pr_runner.py` (tracked M) — 회장 금지대상 파일이 working tree 에서 dirty. baseline 신뢰성 자체가 위태로움. **별도 3-way blob audit 우선 처리(§3)**.
  - 코드/스크립트/config 132개 중 tracked M (config/constants.json 등): 누적 origin 미상 → blame/mtime 별 owner task 식별 필요.
- **위험도 MEDIUM 범주**: memory/specs 7건(spec/changelog M), memory/reports 120건·tasks 111건 누적
- **위험도 LOW 범주(.gitignore 대상)**: runtime/operational churn 104(memory/events/bot-activity·member-status·pipeline-status·canary·audit-trail·dashboard/data 등 자동생성 상태파일) + memory/backups 삭제 7
- **소유 task 귀속 방법**: per-file `git blame -L 1,5 HEAD -- <file>` + `stat -c %y <file>`(mtime) 교차 → 가장 최근 손댄 task md 와 매핑. 다수가 finish-task git-gate quarantine 잔여 추정.
- **정리 순서(권장)**:
  1. HIGH(replacement_pr_runner 등) — 3-way blob audit → 회장 결정
  2. LOW(runtime churn) — .gitignore 정책 + git rm --cached(별도 task)
  3. MEDIUM(reports/tasks/specs) — 범주별 일괄 정리 task
  4. code/script 132 중 untracked anu_v3 스캐폴딩 — 누적 미머지 스택 별도 audit

### 2.2 stash 10 (`feedback_stash_accumulation_doctrine_260513` 적용 대상)
- **위험도 MEDIUM** — finish-task git-gate quarantine 잔여 다수(stash@{0~3}: task-2623/2576/2570/2569). WIP stash(@{4~9}) 다수.
- **소유 task 귀속**: 각 stash 메시지에서 task ID 추출(name 명시).
- **정리 순서(권장)**:
  1. WIP stash(@{4~9}) 우선 review → 머지된 task 면 drop, 미머지면 별도 검토
  2. quarantine stash(@{0~3}) — finish-task.sh 가 만든 격리물. pop 정책 정착 후 처리(task-2571 후속 미완)
- **pop/drop 본 단계 절대 금지** — 별도 stash 정리 task 에서만.

### 2.3 pre-existing test_stash_origin_audit_compat 3 fail
- **위험도 LOW** (callback/merge-ready 기능 무관)
- **원인**: origin/main 의 `scripts/finish-task.sh` 가 테스트 기대 stash audit guard(-gt 5 WARN · if-x guard · guard 2회 출현) 미포함 → spec/impl mismatch.
- **소유 task 귀속**: finish-task stash audit guard 도입 미완(task-2569/2571 계열 후속)
- **정리 순서**: finish-task.sh 에 누락 guard 도입 → 3 fail 해소. 별도 task 발행 권장.

---

## 3. ★ replacement_pr_runner 3-way blob audit 계획 (read-only)

회장 금지대상 파일이 main workspace working tree 에서 tracked M(dirty) — baseline 신뢰성 위태. `feedback_audit_baseline_3way_blob_verify_260521` doctrine 그대로 적용.

### 3.1 evidence 수집 (read-only)
```
# 1. HEAD blob sha (커밋된 본)
git rev-parse "HEAD:utils/replacement_pr_runner.py"
# 2. origin/main blob sha (원격 main 본)
git rev-parse "origin/main:utils/replacement_pr_runner.py"
# 3. working tree blob sha (현재 디스크 본)
git hash-object utils/replacement_pr_runner.py
# 4. 라인수 카운트 (3-way)
git show HEAD:utils/replacement_pr_runner.py | wc -l
git show origin/main:utils/replacement_pr_runner.py | wc -l
wc -l < utils/replacement_pr_runner.py
# 5. diff (working vs HEAD)
git diff -- utils/replacement_pr_runner.py
```

### 3.2 판정 기준
- 3 blob sha 동일 → 가짜 dirty(stat dirty, content identical) → working tree status refresh 필요(별도 처리)
- HEAD == origin/main ≠ working → 로컬 미커밋 변경(누가/언제 손댐: blame + mtime)
- HEAD == working ≠ origin/main → 로컬 commit 이 origin 보다 앞섬(미머지 변경)
- 3개 모두 다름 → 가장 위험: stash leftover + 로컬 변경 혼재 가능

### 3.3 caller graph 추가 audit
- caller graph 는 **`.worktrees/*` leftover 제외 main repo 만** 집계 (feedback doctrine 그대로)
- `grep -rn "replacement_pr_runner" --include='*.py' /home/jay/workspace --exclude-dir=.worktrees`

### 3.4 본 단계 산출 (read-only, 변경 0)
- 3-way blob sha + 라인수 + diff (수치만 캡처)
- caller graph 결과 (참조 그래프만)
- 위험도 판정 + 권장 조치(=별도 task 안)
- **파일 자체는 무수정** — git checkout/restore/reset/stash 어떤 변경 명령도 미실행

### 3.5 별도 audit task 발행 조건
3.2 판정이 HIGH(3개 모두 다름 또는 HEAD≠origin/main) 일 때, **회장 결정 후 별도 audit task 발행** — 본 spec 은 그 task 의 입력 evidence 까지만.

---

## 4. 별도 후속 task 후보 (회장 결정 발행)

각 항목 = 독립 task. 본 batch 무관. 발행 여부는 회장 결정.

1. **working tree 위생 triage** — 640 dirty 범주별 정리(runtime churn .gitignore + 누적 스캐폴딩 audit)
2. **replacement_pr_runner 3-way blob audit** — §3 계획 실행 후 위험도 따른 별도 조치
3. **stash 10 정리** — WIP/quarantine 분류 후 별도 task
4. **finish-task.sh stash audit guard 도입** — 3 pre-existing fail 해소
5. **누적 anu_v3 untracked 스캐폴딩 audit** — 미머지 신규 모듈 정리/병합/폐기 결정

---

## 5. 본 단계 금지 (회장 verbatim)

- foreign dirty 정리 금지
- stash pop/drop 금지
- replacement_pr_runner 수정/commit/revert/stash 금지
- finish-task.sh 수정 금지
- marker 삭제 금지
- 본 spec 의 권장 사항을 spec 작성 외 실행 금지

**원칙**: read-only triage. 모든 정리 행위는 회장 결정 + 별도 task 발행 후에만.
