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:
Parley Hatch 2026-03-19 22:54:02 -06:00
parent 5bd2cabaf9
commit 85b682e6a9
2 changed files with 135 additions and 0 deletions

1
.gitignore vendored
View file

@ -16,5 +16,6 @@ Thumbs.db
# Local environment # Local environment
.claude/ .claude/
docs/ docs/
design/
CLAUDE.md CLAUDE.md

View 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.