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
|
# Local environment
|
||||||
.claude/
|
.claude/
|
||||||
docs/
|
docs/
|
||||||
|
design/
|
||||||
CLAUDE.md
|
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