---
task_id: task-2419
type: context
scope: task
created: 2026-05-03
updated: 2026-05-03
status: completed
---

# 맥락 노트: task-2419

**task**: task-2419

---

## 결정 근거

### [핵심 결정 1] finish-task.sh 무수정 원칙
- **결정**: Fix 2 violation detector를 standalone CLI로만 제공. finish-task.sh 통합 하지 않음.
- **이유**: task 파일 forbidden_paths에 명시 (`scripts/finish-task.sh` 변경 금지). task-2417 진행 중인 다른 작업과 충돌 회피 목적.
- **대안 기각**: detector를 finish-task.sh에 직접 통합하면 task-2417 머지 시 충돌 발생. standalone CLI는 후속 task에서 안전하게 통합 가능.

### [핵심 결정 2] DIRECT-WORKFLOW.md Step 0 무수정
- **결정**: Fix 3 MC 강제 read의 봇 응답 검증 부분은 본 task 범위 외. dispatch에서 mc_pending 마커만 생성.
- **이유**: task 파일 forbidden_paths에 `prompts/DIRECT-WORKFLOW.md` 명시. task-2417과 충돌 회피.
- **대안**: 마커 생성 + 검증 룰만 제공. 후속 task에서 봇 응답 검증을 통합.

### [핵심 결정 3] pre-commit hook은 기존 .git/hooks/pre-commit에 추가
- **결정**: 기존 modularity-lint pre-commit 보존, 메모리 검사를 그 다음에 호출.
- **이유**: pre-commit hook은 단일 파일이며 멀티 hook이 일반적 패턴. 기존 검사 보존이 회귀 0 보장.
- **대안 기각**: pre-commit framework로 전환은 범위 초과 + 환경 변경 위험.

### [핵심 결정 4] 룰 spec은 YAML (단일 소스)
- **결정**: `memory/specs/memory-violation-rules.yaml` 단일 파일에 룰 정의.
- **이유**: 회장 메모리 `feedback_modularity_mindset.md` 단일 소스 원칙. detector + 미래 통합 도구가 같은 spec 참조.
- **포맷**:
  ```yaml
  rules:
    - id: rule-001
      name: "main 직접 머지 금지"
      pattern: "^Merge.*into main"
      target: "commit_messages"
      severity: high
  ```

### [핵심 결정 5] mc_pending 마커는 utils/memory_check.py 헬퍼로 단일 소스
- **결정**: 마커 생성 로직을 `utils/memory_check.py`에 헬퍼 함수 추가, dispatch는 호출만.
- **이유**: 모듈화 + 테스트 용이성. dispatch 두 호출(2745, 3731)에서 동일 헬퍼 사용 → DRY.

## 참조 자료

- 작업 파일: `/home/jay/workspace/memory/tasks/task-2419.md`
- 기존 메모리 시스템:
  - `dispatch/__init__.py:2233-2310` (_check_memory_before_dispatch)
  - `dispatch/__init__.py:2745, 3731` (issue_mc 호출)
  - `utils/memory_check.py` (MC 발급)
  - `scripts/whisper-compile.py:264, 374` (★ 자동 주입 — 본 task 무수정)
- pre-commit hook: `/home/jay/workspace/.git/hooks/pre-commit` (modularity-lint)
- MEMORY.md: `/home/jay/workspace/memory/MEMORY.md` (135줄, ★ 항목 다수)
- 회장 메모리:
  - `feedback_no_dead_code_skills.md` (시스템 통합 의무)
  - `feedback_modularity_mindset.md` (단일 소스)

## 주의사항

- **forbidden_paths 절대 수정 금지**: `scripts/finish-task.sh`, `prompts/DIRECT-WORKFLOW.md`, `dashboard/**`, `teams/shared/**` 등
- **dispatch 두 issue_mc 호출 모두 수정 필요**: 2745 (복합 위임), 3731 (단일 위임). 누락 시 한쪽 경로에서 마커 미생성.
- **pre-commit hook 성능**: feedback_*.md 검사만 추가, 다른 파일은 빠르게 스킵. < 500ms 목표.
- **회귀 0**: 기존 issue_mc는 그대로 유지. 마커 생성은 추가 호출만.
- **테스트 환경**: pytest 실행 시 실제 .git/hooks 트리거되지 않도록 fixture에서 mock 또는 임시 git repo 사용.

## 3 Step Why 결과 (G1 검증용)

- 1st: ★ 메모리 dead code 차단 = 회장 명시 자동화 100% 달성
- 2nd: 코드 게이트 강제가 LLM 자가 검증보다 100% 결정적
- 3rd: 단일 소스(YAML) + 3-Layer 방어(commit/dispatch/detector) → 회장 메모리 정확 부합
- 일관성: A→B→C 모두 "코드 강제 자동화" 일관됨 ✅

## Codex 사전 검증 결과 (G1)

### 1차 검증 (2026-05-03 14:50)
- PASS: false
- critical: 2개 (충돌, MC 시점)
- 반영: plan 갱신, mc_pending 마커 → log entry pending 필드로 변경

### 2차 검증 (2026-05-03 14:52)
- PASS: false (잔여 critical 1개)
- critical 잔여: "MC 강제 read 제어면 부재" — task 본문 구조적 한계 (forbidden_paths가 워크플로우 지점을 모두 막음)
- 헤르메스 결정: 본 task = **인프라 제공 단계만**. 강제 read 통합은 후속 task로 분리. plan/checklist에 명시.
- 회장 메모리 `feedback_no_dead_code_skills.md` 정신: "단계적 통합도 시스템 통합". 본 task가 데이터 layer를 단단히 깔면, 후속 task에서 봇 prompt + 검증 흐름을 추가만 하면 됨 (회피 0, 추가만).

### Codex 권고 반영 사항
1. ✅ memory-check-log.json 구조화 필드 추가 (`memory_item_id`, `source_path`, `item_type`, `ack_required`, `ack_state`)
2. ✅ pre-commit hook 버전관리 + `scripts/pre-commit-install.sh` 재설치 흐름
3. ✅ detector CLI `--task-id`, `--commit`, `--diff-base`, `--staged` 4개 모드
4. ✅ `SKIP_MEMORY_CHECK=1` 환경변수 우회 (--no-verify 외 경로 제공)
5. ⏭️ MC 강제 read 통합 (DIRECT-WORKFLOW.md Step 0) → 후속 task로 분리 (task-2417 종료 후)
