--- title: 하네스 정합성 스위프 (Tier A) — 설계 date: 2026-07-14 status: draft kind: design-spec slice: 1-of-N (harness review 적용) revision: 3 (spec 리뷰 2차 반영 — A1 portable-only 경로 + A3 BLOCKED 고정 + A1 hook별 E2E 표) --- # 하네스 정합성 스위프 (Tier A) ## 0. 한 줄 목표 문서·설정이 실제 repo 상태와 어긋난 곳을 바로잡는다. **아키텍처는 건드리지 않는다.** ## 1. 배경 외부에서 받은 "LLM Wiki 하네스 구조·효율성 리뷰"를 적용하기로 했다. 리뷰는 partial Repomix 스냅샷(raw/·wiki/ 본문 미포함) 기반이라, 적용 전 각 주장을 실제 repo 근거로 **선별(triage)** 했다. 선별 결과 ~8개 semi-independent 프로젝트가 6 phase 로 나온다 — 단일 spec 으로 다룰 수 없다. 이 문서는 그중 **첫 슬라이스 = Tier A(정합성 스위프)** 만 다룬다. 나머지(B/C 티어)는 §7 백로그에 기록만 한다. Tier A 선택 이유: 근거 확실, 소규모, 아키텍처 lock-in 0, live bug 포함, 빠름. > **rev.2 노트:** 이 spec 자체를 리뷰받아 반영했다. 주요 변경 — (1) A1 완료 기준을 "직접 실행"이 아닌 > "실제 Hook E2E 관측"으로 격상, (2) A3 를 모호한 "트랜잭션"이 아닌 **명시적 허용 write set** 으로 고정 + > **agent runtime contract 변경**으로 재분류, (3) A4 범위를 live 문서 전체로 확대(historical 기록 제외), > (4) JSON/TOML 구문 검증·기존 hook test·의미 패리티 표·git-diff allowlist 추가. ## 2. 선별 근거 (verified) | 주장 | 판정 | 근거 | |---|---|---| | Antigravity 훅 command 대상 절대경로가 부재 | **CONFIRMED** | `.agents/hooks.json` → `/home/donghyeon/dev/llm-wiki-private/...`; `/home/donghyeon/dev` 자체가 부재(`ls` 실패). | | 해당 claim/structure Python 검사가 정상 실행 불가 | **CONFIRMED** | 경로 부재로 `python3 <경로>` 실패. | | Hook 실패 시 Antigravity 가 작업을 완전 허용(fail-open)한다 / "강제 0" | **UNVERIFIED** | Antigravity 의 command-실패 처리(fail-open vs fail-closed)를 실행 로그로 확인 안 함. 단정 금지. global `wiki-hard-gate` 만 생존은 **LIKELY**(로그 확인 필요). | | Codex 가 CLAUDE.md fallback 로드 (문서 서술) | **CONFIRMED (문서 오류)** | 루트에 `AGENTS.md` 존재 → `.codex/config.toml:2-3` 주석대로 fallback 은 "AGENTS.md 없을 때만" 발동. `CLAUDE.md:82`(Hooks bullet) "codex 가 본 CLAUDE.md 를 읽음(AGENTS.md 중복 불필요)" 은 거꾸로. | | wiki-doc-author "1 file" vs Parent 갱신 모순 | **CONFIRMED** | STOP #5 / "What NOT" 이 "2개 이상 파일 수정 금지"인데 정상 create/migrate 는 target + Parent hub 2개 Edit. | | doc-author 카테고리 "7 vs 8" | **CONFIRMED (SSOT·agent.json 만)** | SSOT `.agents/plugins/.../wiki-doc-author.md:73` "Category ∉ 7 허용"·agent.json STOP #2/table — 8개 나열하며 7. Claude 사본은 "8종"(드리프트). | | doc-author validator "8개 모두" vs grep 그룹 7개 | **CONFIRMED (agent.json 만)** | agent.json output schema `Post-Write Validator ... (8개 모두)` 인데 validator 블록 grep 그룹 7개. | | doc-author migrate "본문 보존 vs 정규화 모순" | **REJECTED (오독)** | body 보존 + frontmatter/Parent/Sources placeholder **추가**만 분리(L144·L156-157 line-count BLOCKED). 결함 아님. | | 인벤토리 숫자 stale | **CONFIRMED** | 실측(§4 A4 명령): templates 27, rules 14, Claude agents 12, Antigravity executable agents 10, agent-prompt SSOT 10, commands 23. | | `scripts/` 디렉터리 자체 부재 | **CONFIRMED (stale)** | `scripts/` 는 존재(`scripts/deep-research/`). `sync_automation.py` 만 부재. | ## 3. 범위 ### In scope - A1: Antigravity 훅 경로 복구 (Hook runtime configuration 변경) - A2: Codex 문서 오류 정정 (운영 문서 정정) - A3: wiki-doc-author 계약 결함 3종 정정 (**agent runtime contract 변경**) - A4: 인벤토리 숫자 정정 (운영 문서 정정) ### Explicitly out of scope (→ §7 백로그) harness/ 재구조화 · rules→skills 이관 · template-v2 · SSOT 생성기(B1) · 3-채널 출력(B2) · deep-research 런타임 하드닝(B3) · 훅 증분화+wiki-index(B4) · 훅 matcher 과범위(`*`) 최적화 · AGENTS.md source_type 목록 완전성 · **historical 기록**(`docs/superpowers/plans/*`, `notes/*`)의 stale 숫자. **이번 슬라이스에서 절대 손대지 않는다.** ## 4. 항목별 설계 ### A1 — Antigravity 훅 부활 (Hook runtime configuration) **대상:** `.agents/hooks.json` 의 다음 **4개 command entry** (전부 절대경로 `/home/donghyeon/dev/...` 사용): 1. `wiki-claim-gate.PreToolUse` 2. `wiki-claim-gate.Stop` 3. `wiki-structure-gate.PreToolUse` 4. `wiki-structure-gate.PostToolUse` `wiki-hard-gate`(global `~/.gemini/antigravity-cli/hooks/...`)는 정상 — 건드리지 않음. **핵심 미확정:** Antigravity 가 hook command 를 어느 cwd 에서 실행하는지 불명(hook input payload 의 `cwd` 필드 ≠ command 실행 cwd). 따라서 단순 상대경로가 repo 루트로 resolve 된다고 **가정 금지**. **구현 전략 (진단 우선):** 1. **CWD 진단** — 임시 진단 command(예: `pwd`, `git rev-parse --show-toplevel`, `env` 를 파일에 기록)로 Antigravity hook 의 실제 실행 cwd·환경변수를 관측한다. 2. **경로 형태 확정 (portable-only 우선순위 사다리).** 절대경로를 "올바른 현재 경로"로 교체하는 것은 같은 버그를 다른 절대경로로 연장할 뿐(이동·clone 시 재사망) → **임시 진단 외 최종안으로 채택 금지**. 다음 우선순위로 확정한다: - **1순위:** Antigravity 가 제공하는 workspace/repository 환경변수(있다면). 진단 §5-A1 로 존재 확인. - **2순위:** `git rev-parse --show-toplevel` 로 repo root 도출. - **3순위:** launcher 파일(`.agents/hooks/run-wiki-hook.py`)이 자기 파일 위치 기준으로 repo root 탐색 후 `.claude/hooks/