skills/spec/SKILL.md
Use when creating software specifications. Triggers include "spec", "specification", "design doc", "PRD", "requirements analysis", "architecture design", "domain modeling", "API design", "technical spec"
npx skillsauth add toongri/oh-my-toong-playground specInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform user requirements into structured specification documents. Each area is optional, proceeding only with necessary steps.
Design Areas are default analytical lenses — proven tools to surface and structure design needs. They are NOT an exhaustive list. Any design concern discovered during the spec process — whether it maps to a predefined Area or not — must be explicitly addressed through the Emergent Concern Protocol.
Spec is a human-in-the-loop co-design process, not an AI-design process. The user (human) is the architect of the design; spec (this skill, AI) is the dialogue partner kept in the loop at every step — AI surfaces concerns, proposes options, and facilitates decisions; the user chooses direction, validates fit, and owns outcomes. The "loop" is the iterative AI-proposes → user-decides → record cycle; the human must be IN the loop, not consulted at the end.
Every design content — Area entry choice, Step result, recorded decision, acceptance criterion — originates from or is validated by user dialogue. AI MUST NOT generate spec content unilaterally and submit it for rubber-stamp approval; that flow inverts authorship and breaks the human-in-the-loop contract. The only legitimate authorship pattern is: AI proposes → user decides → record captures the user as the decision owner.
Every downstream rule in this skill (Iron Law gates, Checkpoint Protocol, Decision Interview Gate, Multi-AI Review, Rich Context Pattern) is a mechanical expression of this human-in-the-loop philosophy. If any rule appears to permit AI-unilateral content generation, the rule is being mis-applied — re-read this section first, then re-read the rule.
NO STEP SKIPPING:
- Every Step MUST present results/proposals to user
- "Already known" info → Present as proposal, get user approval
- AI judgment NEVER substitutes user confirmation
NO AREA COMPLETION WITHOUT:
1. All Steps in the Area completed with user confirmation
2. spec-reviewer pass (APPROVE or COMMENT) verdict received (review loop resolved)
3. User explicitly declares "Area complete"
4. All acceptance criteria testable
5. No "TBD" or vague placeholders remaining
6. Document saved to $OMT_DIR/specs/
Violating the letter of these rules IS violating the spirit. No exceptions.
Fact-grounded shortcuts — "this Area is straightforward, spec-reviewer would just APPROVE", "the user already confirmed it implicitly", "I know the protocol so the reference read is unnecessary", "no records means Wrapup can be skipped" — do NOT constitute exceptions. They are exactly the rationalizations the Iron Law exists to block. Apply the spirit: would an independent senior reviewer accept this Area as complete?
Wrapup is MANDATORY when ANY records exist across ANY area. NO EXCEPTIONS. NEVER SKIP.
A design document is the design as it stands today — written as if every decision had been correct from the first stroke. The audit trail of how it got there (rationale, alternatives evaluated, concerns raised and resolved) belongs in records/, not in design.md. The git log of both design.md and records/ is the chronology — neither artifact narrates its own change history.
Reviewers and prior iterations shape the design; they do not annotate it. Absorb every finding (spec-reviewer verdict, user amendment, fact-check correction, decision revision) into the design itself, then erase the seam. The reader of design.md should not be able to reconstruct the order in which decisions were made, nor which were once different.
| # | Pattern | Where it belongs instead |
|---|---|---|
| 1 | ## Progress Status table / Last Updated line / Status: Step N 진행 중 header at top of design.md, AND inline work-in-progress markers like (재작성 예정), (TBD), (작성 중) next to references | state.json (already persisted there — never duplicate to design.md) |
| 2 | Closure markers in any form — Round 1+2 verdict closure, Round N REQUEST_CHANGES, Round N mechanical fixes 4개 closure, verdict cycle tables, AND external-input closures (Notion 댓글 ② closure, Q5 closure, Amendment closure, **Closed** — ...) — anything that says "this issue is now resolved" inside design.md | Recast the underlying concern and its resolution into the topic's existing record as current-state decision rationale — do NOT copy the closure marker label/framing verbatim. The fact stands on its own in design.md; the record holds what was decided, not that closure happened. |
| 3 | Any narration of how the document changed — prose deltas ("이전 design §2.1.1의 phantom columns 제거", "record 1/2의 framing은 record 3에 의해 대체됨", "record cascade 1 → 2 → 3"), strikethrough (~~old framing~~ → new framing (Round 7)), AMENDMENT callouts (⚠️ AMENDMENT (2026-05-19, Area review fact-check): ...), amendment notes inside Mermaid diagrams (Note over W,DB: ⚠️ AMENDMENT 2026-05-19 ...). Exception: live architectural divergence from a coexisting sibling design (e.g., "this 5-responsibility decomposition is structurally different from program-report-message's 3-layer shape") is a current design fact, not a how-it-changed narration — it stays in design.md. The discipline targets self-history (this design's earlier versions), not peer-difference (a sibling design that exists today). | Nowhere. The current design.md describes what is. What was is git. Rewrite the affected section; do not annotate the change. |
| 4 | Inline provenance markers (record 3 D1), (record 2 Round 1 M1), (SD record 3), (Gemini Round 7 지적 반영), (Notion 댓글 ④ closure) next to design facts — any parenthetical pointing to where the decision came from rather than what the decision is | Drop them. The fact stands on its own; the record/external source exists in records/ (or Notion) for readers who want the why. |
| 5 | Process-step headings copied from the workflow into design.md body — "Step 1: Context Review", "Step 5: Document Generation + Area Completion", "Step N 결과", "Step N 종합 — 모든 alternative closure" | Drop the workflow scaffolding entirely. design.md is structured by the Area's Output Template (e.g., Tables / Repository / Index / Migration), NOT by the N-step process you used to author it. |
| 6 | Dedicated review-process sections — entire sections devoted to the review event itself: ## 5.1 Area Review (1차) — verdict REQUEST_CHANGES, ## 5.2 Blocking Concerns 처리, ## 5.3 Round 2 mechanical fixes — 완전 closure, ## 5.4 record N commitment 통합, ## Risks 통합 (record N + PAA 종합) | The most severe form of leak — an entire heading dedicated to the negotiation. Recast the underlying concerns and resolutions into the existing topic record as current-state decision rationale — do NOT copy process headings, verdict labels, closure framing, or chronology verbatim. design.md inherits only the resulting facts, never a heading announcing "here is what review changed". |
A records/{n}-{topic}.md filename reference is permitted in prose where it adds genuine comprehension value (e.g., pointing readers to the alternatives evaluated). An inline parenthetical provenance marker is not. The distinction is mechanical:
| Form | Verdict | Example |
|---|---|---|
| Filename citation in prose | OK | "See records/3-event-reference-dedup-and-layer-refactor.md for the alternatives evaluated for dedup_key shape." |
| Inline provenance parenthetical next to a design fact | BANNED (row 4) | "...dedup_key = event-reference format (record 3 D1)" / "...5 책임 단위 (record 3 D2)" |
If the citation could be removed without changing the design content, it is provenance ornament and must go. If removing the filename reference would leave a reader unable to locate the alternative-evaluation context they need, it earns its keep.
If a reader needs that context, they open records/. They never need it to read design.md.
Records are also final-state. Each records/{n}-{topic}.md reflects the topic's current decided state — not a snapshot of a moment in time. When review or further deliberation changes the decision, update the existing record file in place rather than creating a parallel record-N-revised.md. The git log is the chronology; the record file is today. The Silent Incorporation Discipline applies symmetrically across artifacts: design.md and records/ each describe the design as it now stands, differing only in granularity (design.md = the artifact, records/ = the decision rationale).
Without this discipline, design.md grows a parallel timeline of how the design was negotiated, and that timeline starts to compete with the design itself. Future readers (implementers, next-spec authors, auditors) waste budget filtering history from facts. Implementers misread provenance markers as design constraints. The records/ folder, which was the right home for that history, becomes secondary. Silent incorporation keeps each artifact load-bearing in exactly one role.
Violating the letter of this discipline IS violating the spirit. "Just one verdict-closure note for traceability", "just a (record 3) marker so implementers find the rationale" — both are exactly the rationalizations this discipline exists to block. Traceability lives in records/; design.md is the artifact, not the negotiation log.
| Rule | Why | |------|-----| | Testable acceptance criteria | Untestable = unverifiable | | Error cases defined | Happy path only = production incidents | | Every Step presents to user | Skipped steps = missed requirements | | User confirmation at every Step | Agent decisions = user blamed | | Area completion = spec-reviewer pass + user gate | Unchecked areas = compounding errors | | No Step/Area skipping ever | "Simple" hides complexity | | Design proposals include potential risks | Hidden risks = surprise in production | | spec.md structure immutable (Area sections only — progress state lives in state.json, never in design.md/spec.md body) | Area sections enable resume traceability; progress is state.json's job (Silent Incorporation Discipline §row 1) | | design.md and records/ are both final-state; decision rationale (concerns and their resolutions) lives in records/, chronology of how the artifact evolved lives in git — never inline in either artifact | A negotiation log inside design.md poisons the artifact and duplicates state.json; chronology narration inside records/ duplicates git |
(Emergent Concern Protocol has its own local Rationalization Guards — see § Emergent Concern Protocol.)
| Thought | Reality / Violated Rule |
|---|---|
| "This Area is obvious — spec-reviewer would just APPROVE anyway." | Area Completion requires spec-reviewer verdict received (Iron Law row 2). "Would have APPROVE'd" is not the verdict. Delegate the review. |
| "The user said 'Area complete' so both gates are satisfied." | Two gates are independent: spec-reviewer pass AND user declaration. User declaration alone does not pass the quality gate. |
| "I know this decision is clear-cut — no Rich Context Pattern needed, just record it." | IRON RULE: No record without prior user interview. Rich Context Pattern is mandatory for design decisions. Bypass = invalid record. |
| "We're resuming from a prior session; the Checkpoint Protocol was already satisfied." | No carryover. Checkpoint Protocol runs at EVERY Step in the current session. Prior-session state is data, not a satisfied gate. |
| "No records appear to exist, so Wrapup can be skipped." | Skip only when records/ folders contain ZERO files across ALL areas. Verify before skipping. "Appears to be" is not verification. |
| "I'll batch multiple questions for efficiency." | Questioning Protocol: exactly ONE question per message. Bundling is prohibited. |
| "I know what's in core-protocols.md, full-read is unnecessary." | Reference Full-Read Mandate (see below). Inline contracts and references are complementary, not redundant. |
| "Reference files are lookup so reading is optional." | False. Class A references (core-protocols.md, persistence.md, area-entry-criteria.md, wrapup.md) are trigger-conditional MANDATORY full-read. Optional refers to WHEN, not WHETHER. Once the trigger fires, full read top-to-bottom is mandate. Class B (Design Area refs, diagram-selection.md, custom-design-concern.md, templates/record.md) is lookup-only; do not conflate the two classes. |
| "head -120 of core-protocols.md is enough / I'll cherry-pick the relevant section." | Partial-read of Class A is explicitly forbidden by ## Reference Full-Read Mandate. Single Read call, beginning to end. No offset+limit, no head, no skim. |
| "I read persistence.md in a previous session, so the cache covers me." | Prior session reads do NOT carry over. Per-session cache applies only within the current session. Re-read in the current session at the trigger. Trust-without-verify violation. |
| "I'll call Skill(skill: 'spec-review') — that's the review entity, right?" | Wrong layer. spec-review is a skill auto-injected into the spec-reviewer subagent's isolated context (per agents/spec-reviewer.md frontmatter skills: spec-review). Dispatch is ALWAYS Agent(subagent_type="spec-reviewer", ...) from main; calling Skill(spec-review) directly pulls Chairman orchestration logic into main and bypasses subagent isolation. Prose mentions of "spec-reviewer pass / verdict / feedback" refer to the verdict produced by that Agent call, never to a Skill invocation. |
| "I need a (record 3 D1) marker next to this design fact so implementers can find the rationale." | Silent Incorporation Discipline forbids it. Traceability is the records/ folder's job — records/3-...md already names the decision; design.md must stand without provenance crutches. Inline markers train readers to chase records mid-read instead of trusting the artifact. |
| "I'll keep a short 'Round 2 verdict closure' note in design.md — it's traceability." | Same discipline. Reviewer history (verdicts received, mechanical fixes applied, phantom columns once present) lives in records/. design.md is what is, not what was changed. "Just a short note" is the leak path that grew the entire §5 negotiation log in the prior audit. |
| "Future reviewers will re-raise the same concerns if I don't mark how the design evolved inside design.md." | Deliberate Divergence handles that — it goes into the re-submission delegation prompt to spec-reviewer, not into design.md body. The reviewer reads the prompt, the design reader reads the design; they have different contexts. |
| "The ## Progress Status table at the top of design.md helps the user see where we are." | state.json already persists this. design.md duplicating it means two sources of truth and two places to forget to update. Step status belongs to state.json; design.md is final-state only. |
| "Using ## Step 1: Context Review / ## Step 5: Document Generation as design.md section headings makes the structure obvious." | Wrong structure. The Area's Output Template (e.g., Tables / Repository / Index / Migration) is the design.md skeleton; the 5-step process is your workflow, not the reader's. Process-as-structure leaks authoring scaffolding into the artifact. |
| "(Notion 댓글 ② closure 2026-05-18), (Q5 closure) markers aren't reviewer history — they're external-input traces, so the discipline doesn't apply." | Same discipline. design.md is the design as it stands today; how the decision was harvested (reviewer verdict, Notion comment, user Q&A, fact-check call) is uniformly history. The fact in the body is sufficient; the source — internal record or external Notion link — lives in records/. Categorizing the source does not exempt the closure marker. |
All of these mean: orchestration habit is overriding the Iron Law. Stop. Honor the gate.
Pre-action signals — catch the bypass before the gate is missed. If you observe any of these, halt and reset to the violated mandate.
records/ folders contain files but Wrapup has not runoffset + limit on Class A files (core-protocols.md, persistence.md, area-entry-criteria.md, wrapup.md) — these MUST be read in a single call, beginning to end, full file## Progress Status table, Last Updated: line, or Status: Step N blockquote anywhere inside design.md (state.json is the only home for that)design.md body (change history lives in git, decision rationale in records/)(record 3 D1), (record 2 Round 1 M1), (SD record 3) next to a design fact in design.mddesign.md — the Area's Output Template structure (e.g., Tables / Repository / Index / Migration) is the skeleton, not your workflowdesign.md (## N.M Area Review (1차) — verdict REQUEST_CHANGES, ## N.M Blocking Concerns 처리, ## N.M Round N mechanical fixes — 완전 closure, ## N.M record N commitment 통합, ## Risks 통합 (record N + PAA 종합), ## N.M Step N 종합 — 모든 alternative closure) — entire-heading-level leak of the negotiation log; move to records/Each flag = halt. Restart at the violated mandate. No partial-credit recovery.
| Principle | Rationale | |-----------|-----------| | Design review tone, not lecture tone | The user is the architect; you are the reviewer. Present observations and questions, not explanations. | | Trade-offs over verdicts | When risks or concerns exist, present them as trade-offs with alternatives — never as definitive problems with a single correct answer. | | Intent, responsibility, boundary over code | Focus design discussions on WHY and WHO-OWNS-WHAT, not HOW-TO-IMPLEMENT. | | Surface what must be thought about before implementation | Your primary value is pulling out unconsidered concerns, not confirming what the user already knows. |
Before starting spec work, load context files from ~/.omt/$OMT_PROJECT/context/.
| File | Contents |
|------|----------|
| project.md | Project overview, tech stack, module boundaries |
| conventions.md | Naming conventions, code style, architectural patterns |
| decisions.md | Recurring tradeoff situations and team's established positions |
| gotchas.md | Known pitfalls, workarounds, non-obvious constraints |
Graceful skip: If ~/.omt/$OMT_PROJECT/context/ does not exist, or any file is missing or empty, skip silently. Do NOT error, warn, or ask the user about missing context files.
Trust level: Architecture-level and convention-level topics from context files are authoritative — use them directly without explore verification.
Trigger fires here: Before Area Selection (initial assessment — evaluating which Design Areas to enter), full-read area-entry-criteria.md per
## Reference Full-Read Mandateand emit the read evidence line. Partial-read forbidden.
Interpretation rule: Enter when ANY condition is met. Skip when ALL conditions are met.
| Area | Designs | Key Entry Signal | |------|---------|-----------------| | Requirements Analysis | Problem definition, business requirements, use cases, NFRs | Requirements ambiguous or acceptance criteria not testable | | Solution Design | Architecture decisions, component responsibilities, data flow | Multiple solution approaches possible | | Domain Model | Aggregates, entities, value objects, state machines | 3+ entity states or complex business rules | | Data Schema | Table schemas, constraints, indexes, migrations | New tables or schema changes needed | | Interface Contract | API endpoints, error handling, versioning | External interface exposed | | Integration Pattern | Sync/async communication, error/recovery flows | Cross-system communication involved | | AI Responsibility Contract | AI delegation boundaries, quality criteria | System delegates decisions to AI/LLM | | Operations Plan | Custom metrics, logging, feature flags | Custom monitoring beyond standard APM | | Frontend / UX Surface | Component architecture, state management, styling | Frontend is significant part of system | | Data / ML Pipeline | Data flow, ingestion, transformation, ML serving | Data pipeline is core component | | Security / Privacy | Auth strategy, authorization model, data protection | Custom auth or sensitive data handling |
Designs: Context files for future reference (project.md, conventions.md, decisions.md, gotchas.md)
Enter when:
Skip when:
records/ folder across all areasTrigger fires here: Before Wrapup entry (when records exist across any area's
records/folder), full-read wrapup.md per## Reference Full-Read Mandateand emit the read evidence line. Partial-read forbidden.
Supporting files: references/diagram-selection.md (diagram type selection), templates/record.md (record format)
digraph spec_workflow {
rankdir=LR;
node [shape=box, style=rounded];
Requirements [label="Requirements"];
SolutionDesign [label="Solution Design"];
DesignAreas [label="Design Areas\n(Dynamic)"];
RecordsCheck [label="Records\nexist?", shape=diamond];
Wrapup [label="Wrapup\n(MANDATORY)", style="rounded,bold", penwidth=3];
Complete [label="Spec\nComplete", shape=doublecircle];
Requirements -> SolutionDesign;
SolutionDesign -> DesignAreas;
DesignAreas -> RecordsCheck;
RecordsCheck -> Wrapup [label="YES\n(MANDATORY)"];
RecordsCheck -> Complete [label="NO"];
Wrapup -> Complete;
}
Note: If ANY records/ folder contains files, Wrapup is MANDATORY before completion.
Area Selection preview: Note: If records are created during any Area, Wrapup will be added as a MANDATORY final step.
| Need | Agent | When | |------|-------|------| | Existing codebase patterns | explore | Find current implementations, conventions, integration points | | Technical decisions, trade-offs | oracle | Architecture choices, design alternatives, risk assessment | | External documentation research | librarian | Official docs, library specs, API references, best practices | | Multi-AI design feedback | spec-reviewer | MANDATORY at Area completion |
| Action | YOU Do | DELEGATE | |--------|--------|----------| | Area entry/exit control | Yes | - | | Checkpoint questions & user gates | Yes | - | | Design content drafting | Yes | - | | Decision record writing | Yes | - | | Emergent concern triage | Yes | - | | Codebase pattern discovery | NEVER | explore | | Design alternative analysis | NEVER | oracle | | External library research | NEVER | librarian | | Area completion review | NEVER | spec-reviewer |
RULE: Workflow control, design drafting, user gates, records = Do directly. Pattern search, analysis, external docs, review = DELEGATE.
Reference: Read references/core-protocols.md for Explore, Oracle, Librarian trigger conditions and Explore/Librarian Prompt Guide. Apply when dispatching subagents.
| Scope | What Applies | |-------|-------------| | All Design Areas | Interview Quality Protocol (this section) | | Requirements / Solution Design only | + Ambiguity Score (Clarity Scoring) + Phase Transition Gate |
NEVER burden the user with questions the codebase can answer.
| Question Type | Ask User? | Action | |---------------|-----------|--------| | "Which project contains X?" | NO | Use explore first | | "What patterns exist in the codebase?" | NO | Use explore first | | "Where is X implemented?" | NO | Use explore first | | "What's the current architecture?" | NO | Use oracle | | "What's the tech stack?" | NO | Use explore first | | "What's your timeline?" | YES | Ask user (via AskUserQuestion) | | "Should we prioritize speed or quality?" | YES | Ask user (via AskUserQuestion) | | "What's the scope boundary?" | YES | Ask user (via AskUserQuestion) |
The ONLY questions for users are about PREFERENCES, not FACTS.
When user has no preference or cannot decide, select best practice autonomously. Quality is the priority—achieve it through proactive context gathering, not user interrogation. Autonomous decisions still require full Questioning Protocol quality (Context→Tension→Question) when presenting the decision rationale.
When users respond vaguely to design questions ("~is enough", "just do ~", "decide later"):
See each Design Area reference file for domain-specific clarification examples.
Mandatory Trigger Rules (not suggestions):
| Situation | Method | Why | |-----------|--------|-----| | Decision with 2-4 clear options | AskUserQuestion | Provides structured choices | | Open-ended/subjective question | Plain text question | Requires free-form answer | | Yes/No confirmation | Plain text question | AskUserQuestion is overkill | | Complex trade-off decision | Markdown analysis + AskUserQuestion | Deep context + structured choice |
Do NOT force AskUserQuestion for open-ended questions. If the answer is open-ended, just ask in plain text.
Reference: Read references/core-protocols.md for Question Quality Standard with good/bad examples. Apply when crafting AskUserQuestion options.
For complex technical decisions, provide rich context via markdown BEFORE asking a single AskUserQuestion.
Structure (Context → Tension → Question):
Rules:
When user explicitly defers ("skip", "I don't know", "your call", "you decide", "no preference"):
THE RULE: Ask exactly ONE question per message. Wait for answer. Then ask the next.
This applies to ALL question types - AskUserQuestion, plain text questions, clarifications. No exceptions.
Structural Verification Criteria:
WRONG: "Please answer the following questions: 1. ... 2. ... 3. ... 4. ..."
RIGHT: "Are Jira comment keywords also trigger targets?"
→ (wait for answer)
"Can multiple errors be reported in a single ticket?"
→ (wait for answer)
...
When multiple questions are pending within a step, ask in order: Blocking → Important → Nice-to-have.
| Priority | Definition | Delay Cost | |----------|-----------|------------| | Blocking | Answer changes the structural direction of subsequent steps (scope boundary, technology constraint, architectural decision) | Rework across multiple steps | | Important | Answer affects one specific area but does not alter the overall direction | Local revision only | | Nice-to-have | Answer provides polish or detail. Can be deferred without structural impact | None — defer freely |
Constraint: Priority ordering applies WITHIN a step. Do NOT collect questions across steps to reorder them.
Continue until YOU have no questions left. Not after 2-3 questions. Keep the design dialogue going until every ambiguity is resolved.
EVERY Step MUST complete this protocol. No exceptions. No skipping.
Trigger fires here: Before the first Step Checkpoint Protocol entry of the session (OR first subagent dispatch, first Question Quality Standard consultation, first Area Completion entry, first Multi-AI Review delegation, or first Record creation — whichever comes first), full-read core-protocols.md per
## Reference Full-Read Mandateand emit the read evidence line. One full-read per session covers ALL 6 trigger conditions of this file. Partial-read forbidden.
Key steps (see reference for details): Present results → User confirmation → Save → Update state → Decision Interview Gate (BLOCKING) → Record decisions → Emergent Concern Check → Regenerate spec.md → Announce completion → Wait for user confirmation
MANDATORY at Area completion. After completing all Steps in an Area, ALWAYS delegate to spec-reviewer.
Reference: Read references/core-protocols.md for feedback loop workflow, spec-reviewer delegation template, feedback consensus protocol, and verdict handling. Apply at Area completion review.
Reference: Read references/core-protocols.md for Decision Recognition Checklist, Decision Interview Protocol, record creation procedure, and deferred concern records. Apply when decisions are identified.
IRON RULE: No record without prior user interview. Every recordable decision MUST be discussed with the user BEFORE creating a record.
When errors or omissions in previous Areas are discovered during design:
Example: When discovering new state transition rules in Domain Model, add the relevant scenario to Requirements' Use Cases before continuing
New features or requirements NOT in the original spec scope MUST be redirected to a separate spec. The current spec session handles only the originally scoped work.
When a design concern surfaces that is not covered by the selected Design Areas — whether discovered by AI analysis or raised by the user — it must be explicitly triaged.
| Option | When | Procedure |
|--------|------|-----------|
| (A) Promote to new Design Area | The concern is large and complex enough to stand as an independent design domain | Define name/scope → See references/custom-design-concern.md → Apply the same Checkpoint/Review/Completion Protocol as existing Areas |
| (B) Merge into existing Area | The concern naturally fits within the scope of an existing (planned) Area | Add concern to that Area's scope → Design together when that Area is processed |
| (C) Defer and Record | The concern is out of scope for the current spec or low priority | Record it (concern name, discovery point, defer reason) → List as deferred concern in Wrapup |
| Rationalization | Counter | |-----------------|---------| | "The user didn't explicitly ask for this, so I'll skip it" | AI-initiated surfacing is mandatory: AI MUST raise any concern discovered during analysis, regardless of whether the user requested it. | | "This falls under Scope Guard" | Distinguish Scope Guard from Emergent Concern: Adding a new feature → Scope Guard. Unaddressed design need within existing scope → Emergent Concern Protocol. | | "This can be sufficiently handled in an existing Area" | Merge decisions also require explicit triage: Auto-merge is prohibited. The 3-way triage MUST be presented to the user. | | "It's simple enough that a separate Area isn't needed" | Triage is required regardless of size: Whenever a concern is identified, triage is mandatory regardless of complexity. |
For all review/confirm patterns:
Trigger note: This protocol consumes core-protocols.md. If this is the first fire of any core-protocols.md trigger condition this session, full-read NOW per
## Reference Full-Read Mandateand emit the read evidence line. Otherwise, per-session cache applies (one full-read covers all 6 trigger conditions). Partial-read forbidden regardless of cache state.
Two gates must BOTH be passed:
SPEC IS NOT COMPLETE UNTIL:
design.md savedrecords/ folder)If records exist and Wrapup not done → BLOCKED. Cannot announce spec completion.
After user confirms "Spec complete", present execution options via AskUserQuestion:
Question: "Spec is complete. How would you like to proceed?"
Options:
Plan implementation (/prometheus) (Recommended for complex specs)
Skill(skill: "prometheus") with spec file path as contextExecute directly (/sisyphus) (Recommended for focused specs)
Skill(skill: "sisyphus") with spec file path as contextRevise spec
IMPORTANT: On execution selection, MUST invoke the chosen skill via Skill(). Do NOT tell the user to run a command manually. Do NOT implement directly — spec is a specification agent, not an executor.
"Solution Design complete. Select Design Areas for this project."
"[Design Area Name] complete. Proceeding to next selected Design Area: [Next Area Name]."
Or if last Design Area: "[Design Area Name] complete. All selected Design Areas finished. Proceeding to Wrapup."
If Design Area was recommended but user deselected: "Skipping [Design Area Name] as requested. Proceeding to [Next Area Name or Wrapup]."
Trigger fires here: At session start (Resume workflow) AND before the first state.json write of the session, full-read persistence.md per
## Reference Full-Read Mandateand emit the read evidence line. One full-read per session covers all subsequent persistence operations. Partial-read forbidden.
Reference files in this skill divide into two classes. Honor each class strictly.
These 4 files contain protocol logic that orchestrates multiple Steps. Partial-read produces corrupted protocol execution. At each trigger, read the full file in a single Read call with NO offset and NO limit parameters. Per-session cache applies — one full-read covers subsequent triggers of the same file.
| Trigger condition | Reference (full-read mandatory) | |---|---| | First Step completion (Checkpoint Protocol entry) OR first subagent dispatch OR first Question Quality Standard consultation OR Area Completion entry OR Multi-AI Review OR Record creation | core-protocols.md | | Session start (Resume workflow) OR first state.json write | references/persistence.md | | Area Selection (initial assessment) | references/area-entry-criteria.md | | Wrapup entry (records exist) | references/wrapup.md |
Read evidence line (emit once per file in your visible message after the read completes, including line count to prove full-file read):
Reference full-read: <filename> (lines 1-N, full file) at trigger <trigger name> - done
Missing evidence at the triggering action = mandate violation.
These files are consulted only when the corresponding domain enters scope. Selective reads are acceptable.
references/diagram-selection.md — when a diagram is neededreferences/custom-design-concern.md — when promoting an Emergent Concern to a new Arearequirements.md, solution-design.md, domain-model.md, data-schema.md, interface-contract.md, integration-pattern.md, ai-responsibility-contract.md, operations-plan.md, frontend-ux-surface.md, data-ml-pipeline.md, security-privacy.md) — when entering that specific Areatemplates/record.md — when creating a record filetools
Use at the end of a work session to review the WHOLE session and record entities worth pinning. This is the manual, deliberate complete-sweep review — NOT an automated nudge. Triggers on "wrap up", "wrap-up", "session wrap", "end of session", "what should I pin".
documentation
Use when initializing the pins knowledge graph for the first time in a project. Guides the user through creating pins.yaml (the storage manifest). Triggers on "setup pins", "initialize pins", "create pins.yaml", "first-run pins".
testing
Use when you need to record a single pin entity to the knowledge graph. Invokes lib/pins record() to validate and write a canonical .md file. Triggers on "record pin", "pin this", "save this as a pin".
databases
Use when looking up pins by type, tags, or source. Drives lib/pins/query.ts to retrieve matching pin entries from the knowledge graph. Supersedes the legacy manual ls+frontmatter procedure.