fix: 하네스 제거 및 keycloak 문서 보강

This commit is contained in:
DongHyeonka
2026-07-25 12:53:13 +09:00
parent 6c53ded9cb
commit d71669eb59
2329 changed files with 138239 additions and 172816 deletions
-1
View File
@@ -1 +0,0 @@
../vault/00-system/rules/subagent-input-contracts.md
+87
View File
@@ -0,0 +1,87 @@
# rules/subagent-input-contracts — 서브에이전트/명령 입력 계약
> `rules/` 의 방법론 규칙. controller(메인 에이전트 또는 `/branch-spec` 같은 오케스트레이터)가 **dispatch 전에 무엇을 모아야 하는가**를 agent별 form schema로 고정한다.
> 목적: agent 가 `NEEDS_CONTEXT` 로 멈추는 일을 줄이고 *되묻지 않는* 조립을 가능하게 한다.
> **SSOT 주의** — 각 agent 의 권위 있는 입력 정의는 그 agent 본문(`.claude/agents/<name>.md` 의 `## Required Inputs`)이다. 본 문서는 그것을 *재사용 가능한 체크 형태로 요약·참조*할 뿐, 값을 복제하지 않는다. 충돌 시 agent 본문이 우선.
## 원칙 (3-rule)
| Rule | 의미 |
|---|---|
| **C1. Pre-fill** | controller 는 dispatch 전에 아래 표의 *필수* 입력을 모두 채운다. 못 채우면 (a) 자동조사로 보강하거나 (b) 명시적 라벨(`UNSUPPORTED_DECISION` 등)로 남긴다 — 추측해서 FACT 로 채우지 않는다(CLAUDE.md §11). |
| **C2. Missing → 행동 명시** | 각 필수 입력에는 *누락 시 행동*이 정의돼 있다. "조용히 추측" 은 금지. `NEEDS_CONTEXT` / 자동조사 / 라벨 중 하나. |
| **C3. No SSOT 이중화** | 본 계약은 agent 본문을 참조만 한다. 입력 **(예: 허용 source_type 목록)은 agent 본문·`rules/naming-conventions.md`·`rules/tag-taxonomy.md` 에서 가져온다. |
## 입력 계약 표
표기: **필수** = dispatch 전 반드시 / 선택 = 있으면 사용 / *누락 시 행동* = 빈 채로 dispatch 됐을 때.
### `/branch-spec <slug>` (오케스트레이터 명령)
| 입력 | 구분 | 누락 시 행동 |
|---|---|---|
| `branch_slug` | 필수 | 인자 비면 사용자에게 요청(종료) |
| 대상 노트 존재 (`raw/branch-notes/<slug>.md`) | 필수(전제) | 없으면 `/branch` 먼저 안내(종료) |
| `parent` (project 또는 parent branch) | 필수 | 노트의 `## Parent` 에서 읽음. 없으면 `NEEDS_CONTEXT` |
| `sources[]` (외부 자료 URL 또는 `[[raw/...]]`) | 조립 입력 | URL → `wiki-source-summarizer` dispatch. 하나도 없으면 결정마다 자동조사(아래) |
| `decision_candidates[]` | 조립 입력 | source Claim 에서 자동 도출 시도 |
| `scope.in[]` / `scope.out[]` | 조립 입력 | 비면 in-scope 만 채우고 out 은 빈 채로 `Should-fix` 보고 |
자동조사 bound: 근거 없는 결정 회당 최대 **6개** 까지 `wiki-decision-researcher` dispatch. 초과분은 `deferred` 로 보고(silent 절단 금지). 조사 후에도 근거 없으면 `UNSUPPORTED_DECISION` + trade-off 한 줄.
### `/project-spec <slug> <목표> [근거 URL ...]` (오케스트레이터 명령)
project-note hub 를 ca-skeleton caliber 로 채우고 끝에 readiness 게이트([[rules/project-readiness-gate]]). `/branch-spec` 의 hub 짝.
| 입력 | 구분 | 누락 시 행동 |
|---|---|---|
| `project_slug` | 필수 | 인자 비면 사용자에게 요청(종료 — 대상 파일 모름) |
| 대상 노트 존재 (`raw/project-notes/<slug>.md`) | 필수(전제) | 없으면 `/project` 먼저 안내(종료) |
| `goal` (프로젝트 목표 prose) | 필수 | **종료 말고** `AskUserQuestion` 으로 물어 받아 진행 |
| `owner_decisions[]` (범위/우선순위/성공기준 임계) | 사용자 소유 | 추측·`UNSUPPORTED` 금지 — `AskUserQuestion`(하네스 내장 툴) 으로 직접 질의 |
| `sources[]` (URL) | 조립 입력 | hub 결정 근거는 `wiki-source-summarizer`(parent = `[[raw/project-notes/<slug>]]`) dispatch |
직접 dispatch: **`wiki-source-summarizer`**(§5 hub 소싱) + **`project-readiness-auditor`**(§9 게이트) 둘뿐. `wiki-decision-researcher`(결정별 깊은 대안조사)는 `parent_branch` 계약상 **branch 단계로 이관**`/project-spec` 에서 안 부른다. `wiki-diagram-reviewer`(≥95)는 사용자가 별도 실행(게이트 강제 아님). 자동소싱 bound 6개·초과분 `deferred`(R3 면제).
차이(`/branch-spec` 대비): ① 사용자 소유 결정은 `UNSUPPORTED` 라벨이 아니라 `AskUserQuestion`(hub in-the-loop), ② 게이트는 readiness(R1~R4) 단일, ③ 사용자 행동으로만 해소되는 Blocking(다이어그램·소유결정)은 `Ready-pending-user` 로 종료(무한루프 금지).
### `wiki-source-summarizer`
권위: `.claude/agents/wiki-source-summarizer.md``## Required Inputs` (링크 아님 — Obsidian 은 `.claude/` 를 색인하지 않으므로 백틱 코드로만 표기). 요약:
| 입력 | 구분 | 누락 시 행동 |
|---|---|---|
| `url` | 필수 | `NEEDS_CONTEXT` |
| `source_type` (`official-doc` \| `company-tech-blog`) | 필수 | 다른 값이면 reject |
| `parent` + 이 자료가 정당화하는 결정(한 줄) | 필수 | `NEEDS_CONTEXT` |
| `claim_id_prefix` / `file_slug` / `vendor` | 선택 | slug·URL 에서 도출 |
### `wiki-decision-researcher`
| 입력 | 구분 | 누락 시 행동 |
|---|---|---|
| `decision_topic` | 필수 | `NEEDS_CONTEXT` |
| `parent_branch` | 필수 | `NEEDS_CONTEXT` |
| `constraints` (선택 조건/요구사항) | 필수 | 비면 일반 비교만 — `Should-fix` 보고 |
| `N` (대안 개수) | 선택 | 기본 3 |
### `wiki-doc-author`
권위: `.claude/agents/wiki-doc-author.md``## Required Inputs`. 요약:
| 입력 | 구분 | 누락 시 행동 |
|---|---|---|
| `mode` (`create` \| `migrate`) | 필수 | controller 에 reduction 요청 |
| `category` | 필수 | `NEEDS_CONTEXT` |
| `title` | 필수 | `NEEDS_CONTEXT` |
| `parent` (daily-note·project-note 제외) | 필수 | 추정 금지 — `NEEDS_CONTEXT` |
| `file_slug` | 선택 | title 에서 도출(create) |
| branch-note 의 `sources[]` + `claim_evidence` | 필수(branch-note) | 없으면 `NEEDS_CONTEXT` 또는 `UNSUPPORTED_DECISION` 라벨 |
## 명명된 실패 모드
- `UNFILLED_REQUIRED_INPUT` (C1): 필수 입력이 비었는데 자동조사·라벨 중 어느 것도 적용 안 됨.
- `SILENT_GUESS` (C1): 근거 없는 값을 추측해 FACT 로 채움 — 금지.
- `MISSING_FALLBACK_ACTION` (C2): 입력 누락에 대한 행동이 정의되지 않음.
- `SSOT_DUPLICATION` (C3): 입력 값을 agent 본문에서 참조하지 않고 본 계약에 복제 — drift 위험.
- `UNBOUNDED_RESEARCH` (`/branch-spec`): 자동조사가 bound 없이 확장.