# Advisory Depth Rule This rule defines **how deep** an analysis, recommendation, brainstorm, concept explanation, or plan critique must go before the agent sends a response. It applies to: - Multi-file wiki reports (research-lane, link-verifier, adversarial-reviewer). - Direct-response answers when the controller did not dispatch a subagent. - Brainstorming and design conversations about wiki structure, document policy, taxonomy decisions. - Concept explanations and "explain X" questions (especially for `wiki/concepts/` extraction candidates). - Plan gap reviews for wiki promotion pipelines (`/ingest`, `/projectize`, `/interviewize`, `/blogify`). - Single-finding recommendations inside any of the above. **Wiki scope:** 본 rule은 LLM Wiki 문서 작업의 자문 깊이를 강제한다. 코드(Java/CA) 자문의 동일 rule은 ca-tmpl `.agents/plugins/ca-superpowers/rules/advisory-depth.md` 가 처리한다 — 7 Contracts 의 골격은 동일하나 본 rule 의 예시·검증 명령·외부 인용 표준이 wiki 컨텍스트로 채워져 있다. The user does not use this CLI to hear "this looks fine" or "this is a good idea". They use it for **practical engineering advice they could not produce alone**. Shallow advice is a failure even when the facts are correct. ## Core Contracts The agent must satisfy all four contracts below on any qualifying response. ### Contract 1 — Goal → Assumption → Problem → Action Chain Every finding, recommendation, or critique must be expressed as a causal chain with **explicit real-world assumptions** between the source text and the critique. The chain has seven required fields. None can be omitted. ```text - **원래 목표 / Original goal:** - 인용 / Verbatim quote: "" - 위치 / Source location: `:` (or `:-` for ranges) - 해석 / Interpretation: - **현재 상태 / Current state:** - 인용 / Verbatim quote: "" - 위치 / Source location: `:` - 또는 / Or: "해당 라인 없음 — 명세에 명시되지 않음" (only when the gap is the absence itself) - **실무 가정 / Real-world assumptions (NEW, REQUIRED):** 명시적 가정이 없으면 비판은 "에이전트가 상상한 구현"에 대한 비판이 되어 신뢰성을 잃는다. 최소 1개, 일반적으로 2~3개의 명시적 가정을 나열한다. 1. **가정 A:** 1000 RPS", "team is using Kubernetes", "this branch will be implemented as-written"> - **무효 조건 / Falsifies if:** - **검증 방법 / How user can verify in their context:** 2. **가정 B:** ... 3. **가정 C:** ... - **간극 / Gap (given the assumptions hold):** - **구체적 실패 모드 / Concrete failure mode:** - **재현 조건 / Reproduction condition:** - **이 finding이 무효화되는 시나리오 / When this finding doesn't apply:** - **필요 조치 / Required action:** - **조치 근거 / Why this action:** - **대안 / Alternatives considered:** 3~5 enumerated per Contract 2. - **반대 논거 / Counterarguments (NEW, REQUIRED — minimum 1, typical 2~3):** 이 권고를 적용하지 말아야 하는 시나리오, 또는 이 비판이 과장된 케이스를 명시한다. 자기 권고에 대한 self-critique이며, falsification 가능성을 더 폭넓게 확보하는 단계다. 1. **반대 A:** <이 권고가 틀릴 수 있는 시나리오, 또는 권고 비용이 효익을 초과하는 케이스> - **반대 근거:** <왜 이 시나리오에서는 권고가 부적절한가> - **사용자가 자기 환경에서 이 반대를 검증하는 방법:** <한 줄 체크> 2. **반대 B:** <또 다른 falsification 시나리오> 3. **반대 C:** ... 반대 논거가 0개라면 finding은 자동 `BLOCKED`. 자기 권고에 반대할 시나리오를 단 하나도 떠올리지 못한다면, 그 권고는 충분히 검증되지 않은 것이다. ``` A finding without a cited Original goal (verbatim + line) is `INFERENCE` and must be labeled as such. A finding without a concrete failure mode in Gap is opinion, not advice. **A finding without explicit Real-world assumptions is forbidden** — the agent must surface the implementation, scale, or context assumption that turns the spec text into a critique-worthy situation, so the user can immediately tell whether the assumption applies to their reality. Bare findings like "성능이 떨어질 수 있다" or "고려가 필요하다" are forbidden. They must be expanded into a Gap with a named failure mode (for example, "스레드 풀 200 큐 + AbortPolicy → 큐 포화 시 RejectedExecutionException → outbox publish 손실"). ### Why Assumption Surfacing matters When the source text is ambiguous, in-progress (e.g., "검토", "TBD"), or stated at one level (e.g., "decision" vs. "implementation note"), the agent often imagines the worst-case implementation and critiques that. The critique then targets an imagined implementation, not the actual spec. Examples of past failures this rule fixes: - Spec says `"NTP drift > 5초 시 readiness fail 검토"` (line 116). Agent imagines `"synchronous NTP query inside the readiness probe"` and critiques DoS risk. - **Without assumption surfacing:** the critique sounds authoritative but targets an imagined naive implementation. - **With assumption surfacing:** the agent must write `"가정: 검토 단계에서 동기 호출로 구현될 것"`. The user immediately sees: "no, my plan is async — this critique doesn't apply" or "yes, I had not thought about sync vs async — this critique stands". - Spec says `"management port 9001 분리"` and does not specify SecurityFilterChain. Agent imagines `"no filter chain configured, exposed to internet"`. - **Without assumption surfacing:** "9001 포트가 무방비로 노출됨" — overconfident. - **With assumption surfacing:** `"가정: 사용자가 management context를 위한 별도 SecurityFilterChain을 아직 구성하지 않았음"`. User: "아, 나 이미 구성했어" → critique no longer applies, no false alarm. The rule is not to weaken critiques — it is to make critiques falsifiable. A critique whose assumption is wrong should be visibly rejectable in 5 seconds, not waste the user's time chasing a non-existent problem. ### Contract 2 — Decision-Relevant Option Coverage When the user mentions any ordering, comparison, design choice, or "how should I do X", the agent must cover the **decision-relevant option space**, not only the option the user happens to have named. Factorial permutations that are equivalent under the same dependency constraints are not separate options. Concrete rule of thumb: - If the user names 1 ordering of N items, build the dependency DAG first. Identify blocking edges, reorderable groups, parallel groups, and skippable steps; compare only materially distinct topological schedules. Do not enumerate all `N!` permutations. - If the user names 1 design approach, enumerate at least the canonical alternatives (typically 3–5). - If the user asks "which library", enumerate the realistic candidates with their distinct trade-offs. - If the user describes a workflow with N steps, list which steps can be reordered, which can be parallelized, which can be skipped, and which are blocking. For each option in the enumeration, the response provides: ```text - **케이스 / Case:** - **적용 상황 / When it fits:** - **고려사항 / Considerations:** - **장점 / Pros:** - **단점 / Cons:** - **비교 / Compared to others:** ``` After enumerating, the agent provides a **conditional recommendation**, not a flat "use X". The form is: ```text - If → use