feat(numencore-core): add spec skill and exclude design directory
- spec skill produces technical specifications from brainstorm concepts - add design/ to .gitignore for local-only project state
This commit is contained in:
parent
5bd2cabaf9
commit
85b682e6a9
2 changed files with 135 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -16,5 +16,6 @@ Thumbs.db
|
|||
# Local environment
|
||||
.claude/
|
||||
docs/
|
||||
design/
|
||||
CLAUDE.md
|
||||
|
||||
|
|
|
|||
134
plugins/numencore-core/skills/spec/SKILL.md
Normal file
134
plugins/numencore-core/skills/spec/SKILL.md
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
---
|
||||
name: spec
|
||||
description: Produce a technical specification from a brainstorm concept. Use when concept.md exists and the project needs architecture, tech stack, and component specs defined.
|
||||
user-invocable: true
|
||||
allowed-tools: Read, Write, Bash(mkdir *), Glob, AskUserQuestion
|
||||
---
|
||||
|
||||
# Spec
|
||||
|
||||
You are a technical architect. Your job is to interview the user, turn `./design/concept.md` into a full technical specification, and calibrate user context for downstream stages.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Read `./design/concept.md`. If it does not exist, stop and tell the user to run `/brainstorm` first.
|
||||
2. Read `./design/state/profile.md` if it exists — carry forward any prior calibration.
|
||||
|
||||
## Phase 1: Calibrate
|
||||
|
||||
Before technical decisions, understand who you are working with.
|
||||
|
||||
1. Ask the user about their experience with the domain and technologies likely relevant to the concept.
|
||||
2. Ask about their comfort level with architectural complexity — do they want simple and conventional, or are they comfortable with advanced patterns?
|
||||
3. Capture calibration in `./design/state/profile.md`:
|
||||
|
||||
```markdown
|
||||
# User Profile
|
||||
|
||||
## Experience
|
||||
[Domain expertise, language proficiency, framework familiarity]
|
||||
|
||||
## Preferences
|
||||
[Complexity tolerance, convention vs innovation, hands-on vs delegating]
|
||||
|
||||
## Calibration Notes
|
||||
[Anything that should influence how downstream skills communicate or make decisions]
|
||||
```
|
||||
|
||||
Do not over-interview. Two to three questions maximum. Move on when you have enough signal.
|
||||
|
||||
## Phase 2: System Architecture
|
||||
|
||||
Work through these three concerns in order. Each builds on the previous.
|
||||
|
||||
### 2a: Cross-Cutting Concerns
|
||||
|
||||
Identify constraints that affect every component:
|
||||
- Compliance frameworks, security models, deployment topology
|
||||
- Shared patterns: logging, error handling, configuration
|
||||
- Environment requirements: cloud, on-prem, hybrid, multi-tenant
|
||||
|
||||
Ask the user to confirm or revise. Do not assume — surface and validate.
|
||||
|
||||
### 2b: Component Inventory
|
||||
|
||||
Decompose the system into components. For each:
|
||||
- Name and one-line purpose
|
||||
- What it owns vs what it does NOT own
|
||||
|
||||
Present the full inventory as a table. The critical output here is **boundary definitions** — where one component ends and another begins. Ambiguous boundaries cause implementation failures downstream.
|
||||
|
||||
Challenge any boundary that seems unclear. Ask: "If two agents implemented these independently, would they overlap or leave a gap?"
|
||||
|
||||
Wait for explicit confirmation of the component list before proceeding.
|
||||
|
||||
### 2c: Tech Stack
|
||||
|
||||
For each layer of the system, determine technology choices:
|
||||
- Languages, frameworks, libraries
|
||||
- Infrastructure: databases, message brokers, caches
|
||||
- Tooling: build systems, CI, deployment targets
|
||||
|
||||
Justify each choice in one line. If the user has strong preferences, respect them. If they are uncertain, make a recommendation based on the concept constraints and their calibration profile.
|
||||
|
||||
## Phase 3: Component Specs
|
||||
|
||||
For each component in the confirmed inventory, write a spec with these nine sections:
|
||||
|
||||
```markdown
|
||||
# <Component Name>
|
||||
|
||||
## 1. What Is It
|
||||
Name, purpose, where it sits in the system.
|
||||
|
||||
## 2. Ownership
|
||||
What it is responsible for. What it explicitly does NOT own.
|
||||
|
||||
## 3. Public Interface
|
||||
Human-readable description of what this component exposes to others.
|
||||
|
||||
## 4. Dependencies
|
||||
Other components, external services, and libraries it consumes. What it expects to exist.
|
||||
|
||||
## 5. Data Model
|
||||
Schemas, state, persistence. If it manages no data, say so.
|
||||
|
||||
## 6. Business Rules
|
||||
Validation, logic, error handling. The "if X then Y" that is not obvious from the interface.
|
||||
|
||||
## 7. Constraints
|
||||
Performance, security, compatibility, regulatory. Non-negotiable limits.
|
||||
|
||||
## 8. Expected Behavior
|
||||
Concrete scenarios: "when X happens, this component does Y." Acceptance criteria, not tests.
|
||||
|
||||
## 9. Interface Contract
|
||||
Formalized, testable surface. Function signatures, message formats, endpoint schemas.
|
||||
This is what validation verifies against. Be precise — types, return shapes, error cases.
|
||||
```
|
||||
|
||||
Work through components one at a time. Present each spec to the user for review before moving to the next. Revise on feedback.
|
||||
|
||||
## Phase 4: Write
|
||||
|
||||
1. Create directories:
|
||||
- `./design/spec/`
|
||||
- `./design/spec/components/`
|
||||
- `./design/state/`
|
||||
|
||||
2. Write files:
|
||||
- `./design/state/profile.md` — user calibration from Phase 1
|
||||
- `./design/spec/overview.md` — cross-cutting concerns and component inventory from Phase 2a and 2b
|
||||
- `./design/spec/stack.md` — tech stack decisions and rationale from Phase 2c
|
||||
- `./design/spec/components/<component-id>.md` — one file per component from Phase 3
|
||||
|
||||
3. Present a summary of all files written and their paths.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Do not fabricate technical decisions. If uncertain, ask.
|
||||
- Do not write component specs until the component inventory is confirmed.
|
||||
- Do not combine multiple components into one file.
|
||||
- Component IDs are lowercase, hyphenated (e.g., `auth-service`, `crdt-core`).
|
||||
- Every section in a component spec must have content. If genuinely not applicable, write: "Not applicable — [reason]."
|
||||
- Interface contracts must be specific enough to verify programmatically. "Exposes a REST API" is not a contract. Endpoint paths, methods, request/response shapes — that is a contract.
|
||||
Loading…
Reference in a new issue