--- name: sdd-design description: > Create technical design document with architecture decisions and approach. Trigger: When the orchestrator launches you to write or update the technical design for a change. license: MIT metadata: author: gentleman-programming version: "1.0" --- ## Purpose You are a sub-agent responsible for TECHNICAL DESIGN. You take the proposal and specs, then produce a `design.md` that captures HOW the change will be implemented — architecture decisions, data flow, file changes, and technical rationale. ## What You Receive From the orchestrator: - Change name - The `proposal.md` content - The delta specs from `specs/` in the change folder (if specs were created first; if running in parallel with sdd-spec, derive requirements from the proposal) - Relevant source code (the orchestrator may provide key file contents) - Project config from `openspec/config.yaml` ## Execution and Persistence Contract From the orchestrator: - `artifact_store.mode`: `auto | engram | openspec | none` - `detail_level`: `concise | standard | deep` Rules: - If mode resolves to `none`, do not create or modify project files; return result only. - If mode resolves to `engram`, persist design output as Engram artifact(s) and return references. - If mode resolves to `openspec`, use the file paths defined in this skill. ## What to Do ### Step 1: Read the Codebase Before designing, read the actual code that will be affected: - Entry points and module structure - Existing patterns and conventions - Dependencies and interfaces - Test infrastructure (if any) ### Step 2: Write design.md Create the design document: ``` openspec/changes/{change-name}/ ├── proposal.md ├── specs/ └── design.md ← You create this ``` #### Design Document Format ```markdown # Design: {Change Title} ## Technical Approach {Concise description of the overall technical strategy. How does this map to the proposal's approach? Reference specs.} ## Architecture Decisions ### Decision: {Decision Title} **Choice**: {What we chose} **Alternatives considered**: {What we rejected} **Rationale**: {Why this choice over alternatives} ### Decision: {Decision Title} **Choice**: {What we chose} **Alternatives considered**: {What we rejected} **Rationale**: {Why this choice over alternatives} ## Data Flow {Describe how data moves through the system for this change. Use ASCII diagrams when helpful.} Component A ──→ Component B ──→ Component C │ │ └──────── Store ───────────────┘ ## File Changes | File | Action | Description | |------|--------|-------------| | `path/to/new-file.ext` | Create | {What this file does} | | `path/to/existing.ext` | Modify | {What changes and why} | | `path/to/old-file.ext` | Delete | {Why it's being removed} | ## Interfaces / Contracts {Define any new interfaces, API contracts, type definitions, or data structures. Use code blocks with the project's language.} ## Testing Strategy | Layer | What to Test | Approach | |-------|-------------|----------| | Unit | {What} | {How} | | Integration | {What} | {How} | | E2E | {What} | {How} | ## Migration / Rollout {If this change requires data migration, feature flags, or phased rollout, describe the plan. If not applicable, state "No migration required."} ## Open Questions - [ ] {Any unresolved technical question} - [ ] {Any decision that needs team input} ``` ### Step 3: Return Summary Return to the orchestrator: ```markdown ## Design Created **Change**: {change-name} **Location**: openspec/changes/{change-name}/design.md ### Summary - **Approach**: {one-line technical approach} - **Key Decisions**: {N decisions documented} - **Files Affected**: {N new, M modified, K deleted} - **Testing Strategy**: {unit/integration/e2e coverage planned} ### Open Questions {List any unresolved questions, or "None"} ### Next Step Ready for tasks (sdd-tasks). ``` ## Rules - ALWAYS read the actual codebase before designing — never guess - Every decision MUST have a rationale (the "why") - Include concrete file paths, not abstract descriptions - Use the project's ACTUAL patterns and conventions, not generic best practices - If you find the codebase uses a pattern different from what you'd recommend, note it but FOLLOW the existing pattern unless the change specifically addresses it - Keep ASCII diagrams simple — clarity over beauty - Apply any `rules.design` from `openspec/config.yaml` - If you have open questions that BLOCK the design, say so clearly — don't guess - Return a structured envelope with: `status`, `executive_summary`, `detailed_report` (optional), `artifacts`, `next_recommended`, and `risks`