# [DRAFT — HOLD] task-2727 ANU system artifact hygiene / evidence-preserving quarantine policy

> ★ 설계 초안 + 옵션 매트릭스. **삭제 0 / stash·reset·clean 전체 금지** doctrine 준수. 실제 정리는 회장 승인 후. 단일소스 진단: `memory/events/diagnosis_finish_task_external_dirty_260603.json`.

## 목표 (회장 A-task-2727)
shared main 의 ANU system artifact 누적(memory/events·tasks·reports·specs·backups 등 ~781+)을 **삭제 없이** 보존/ignore/archive/commit 중 어떤 방식으로 정리할지 옵션 매트릭스. (task-2726 가 근본이라면, 2727 은 누적 위생 — 둘 보완)

## 대상 dirty (진단 기준)
- ANU_SYSTEM_ARTIFACT: memory/events(284)·tasks(266)·reports(231)·specs(62)·daily(14)·events/archive(28) — 운영 산출물(감사 가치, 코드 아님)
- DELETED: memory/backups/system-spec/*(79 D — 의도 삭제, 미커밋)
- TRANSIENT: memory/logs/app.log.*(M — gitignore 대상 후보)
- ★ source(config/anu_v3/schemas/tests/utils)는 본 task 범위 밖(별도 owner 확인 — task-2726/diagnosis #3)

## ★ 옵션 매트릭스 (4)
| 옵션 | 방식 | 장점 | 단점/위험 | 권한 | 감사보존 |
|---|---|---|---|---|---|
| **O1 .gitignore 확장** | memory/events·tasks·reports·daily·backups 를 .gitignore 추가 → status 에서 제외 | 즉효(dirty 0화), 비파괴, 미래 누적도 무시 | git 추적 포기(나중에 커밋 불가), 일부 감사 산출물 untracked 영구화 | 회장 승인(.gitignore = .github 아님, dispatch 허용 범위지만 정책결정) | 디스크 보존(git 밖) |
| **O2 일괄 commit** | memory/* artifact 를 `chore(memory): artifact snapshot` 1커밋 → tracked·clean | 감사 완전 보존(git history), dirty 0화 | repo 비대(수천 파일), 커밋 노이즈, 향후 매 task 마다 재누적 | 회장 승인(main commit) | git history 완전 |
| **O3 archive 이동** | memory/events·reports 의 종료분을 memory/archive/<date>/ 로 이동(git mv 또는 mv) → 활성 dir 정리 | 활성 dir 경량화, 보존 | 이동 자체가 dirty, 경로 참조 깨질 수 있음(report_path 등) | 회장 승인 | 보존(경로 변경) |
| **O4 하이브리드(권장)** | logs=O1(ignore) + backups deleted=commit 정리 + events/tasks/reports=O1 ignore(또는 주기 archive) + decision/incident 핵심만 tracked | 노이즈↓ + 핵심 감사 tracked | 분류 규칙 필요 | 회장 승인 | 선택 보존 |

## expected_files 후보 (옵션별)
- O1/O4: `.gitignore` (memory artifact 패턴 추가) + (선택) `memory/.gitignore` 정책 문서.
- O2: 정리 commit (코드 파일 0, artifact 만).
- O3: 이동 스크립트 + 경로 참조 영향 분석.
- ★ 어느 옵션이든 **삭제 0** — git rm/clean 금지, ignore 또는 이동/commit 만.

## regression / 영향 분석
- report_path/result_path 참조 무결성: O3(이동) 시 memory/reports/<task>.md 참조하는 코드(critical_gap verifier 등) 경로 영향 → 회귀 필요.
- finish-task dirty 체크: O1(ignore) 시 dirty 0화 → EXTERNAL_DIRTY 완화(task-2726 근본과 보완). 단 task-2726 가 worktree 격리하면 O1 없이도 해소 → 우선순위는 task-2726.
- 신규 task 누적: O1 이 미래 재누적 방지에 가장 효과적.

## risk / rollback
- **위험 MEDIUM**: 감사 산출물 — 삭제 절대 금지. O1(ignore) 은 git 밖이라 디스크 보존(안전). O2(commit) 은 비가역적 repo 비대(rollback=revert). O3(이동) 은 경로 깨짐 위험.
- **rollback**: O1 .gitignore revert / O2 commit revert / O3 mv 역이동. O1 이 가장 안전·가역.
- git stash/reset/clean/delete **전체 금지**(회장 doctrine) 준수.

## 위험도/권한/승인
- shared main 변경(ignore/commit/이동) = **회장 승인 + 옵션 택1**. ANU 독단 정리 금지.
- task-2726(근본 worktree 격리)이 우선 — 2727 은 누적 위생(보완). 둘 순서/병행 회장 결정.

## 권고
**O4 하이브리드** (logs ignore + backups deleted commit + events/tasks/reports ignore-or-archive + 핵심 decision tracked) + **task-2726 우선**. 단 옵션 택1·실행은 회장 승인 후.

## ★★ O4 하이브리드 implementation-ready policy packet (회장 Track B — 구현 금지, 정책 확정용)

### O4 분류 규칙 (artifact class → action)
| artifact class | 경로 패턴 | action | 근거 |
|---|---|---|---|
| TRANSIENT_LOG | `memory/logs/app.log*`, `*.tmp`, `__pycache__/` | **ignore**(.gitignore) | 재생성 가능·감사가치 0 |
| BULK_OPERATIONAL | `memory/events/*.json`(일반)·`memory/tasks/task-*.md`·`memory/reports/*.md`·`memory/daily/*` | **ignore + 주기 archive**(분기) | 대량·코드아님·디스크 보존 충분 |
| AUDIT_CRITICAL | `memory/events/*decision*.json`·`*incident*`·`*.bounded-loop-decision.json`·`*finding-attribution*`·`memory/state/*.json`·`memory/specs/*` | **commit-tracked** | 거버넌스 단일소스·git history 필요 |
| DELETED_INTENTIONAL | `memory/backups/system-spec/*`(79 D) | **commit 정리**(삭제 확정 기록) | 의도 삭제 미커밋 상태 종결 |

### migration steps (회장 승인 후 실행 — 지금 0)
1. `.gitignore` 에 TRANSIENT_LOG + BULK_OPERATIONAL 패턴 추가(단 AUDIT_CRITICAL 경로는 `!` negation 으로 재포함).
2. AUDIT_CRITICAL 현재 untracked 분 `git add` → `chore(memory): track governance artifacts` 1커밋.
3. DELETED_INTENTIONAL 79 D `git add -u memory/backups/system-spec/` → `chore: finalize system-spec backup removal` 커밋.
4. BULK_OPERATIONAL 기존 tracked 분은 유지(이미 history). 신규는 ignore 로 미추적.
5. (선택·분기) BULK archive: `memory/events/` 종료 분기분 → `memory/archive/<YYYYQn>/` git mv(경로 참조 영향 분석 선행).
- ★ 어느 단계도 **삭제/clean/reset 0** — ignore·add·mv 만. stash 0.

### audit preservation plan
- ignore 대상은 **디스크 보존**(git 밖, rm 안 함) → 감사 시 파일시스템 직접 조회 가능.
- AUDIT_CRITICAL 은 git history 완전 보존(commit-tracked) → blame/log 추적 가능.
- archive 이동분은 경로만 변경, 내용 보존 + `memory/archive/INDEX.md` 매핑 기록.
- 회수성: ignore→track 전환은 `git add -f` 로 언제든 복구.

### rollback plan
- step1(.gitignore): revert 1커밋 → 추적 복원.
- step2/3(commit): `git revert <sha>` → tracked 해제.
- step5(archive mv): 역 git mv → 원위치. INDEX.md 동시 revert.
- 전 단계 **비파괴**라 데이터 손실 rollback 불필요(경로/추적상태만 가역).

### expected_files 후보 (O4 확정)
1. `.gitignore` (TRANSIENT+BULK ignore + AUDIT negation)
2. `memory/.gitignore-policy_260603.md` (분류 규칙 문서 — 선택)
3. (archive 채택 시) `memory/archive/INDEX.md` + 이동 스크립트
- 코드 파일 0. source(config/anu_v3/utils) 미접촉.

### 위험도/권한/승인 (O4)
- 위험 LOW-MEDIUM(비파괴·가역). `.gitignore` 수정 = shared main 변경 → **회장 승인 필수**.
- task-2726(worktree 격리)이 dirty 판정을 worktree 한정하면 O4 없이도 EXTERNAL_DIRTY 해소 → **O4 는 위생 보완**(중복 안전판). 순서: 2726 우선, O4 병행 정책확정·실행은 2726 수렴 후 회장 택1.
- AUDIT_CRITICAL negation 누락 시 거버넌스 단일소스 untracked 위험 → 분류 규칙 검증 필수.

## 상태
DRAFT_HOLD (O4 implementation-ready) — auto_continue_allowed=false. chair_required_reason: `.gitignore`/commit/archive = shared main 변경 회장 승인 + 옵션 확정. 분류규칙·migration·audit보존·rollback·expected_files 완비. 삭제 0. 코드 0. 실제 ignore/archive/commit 미실행.
