4.9 KiB
4.9 KiB
Spec-Driven Development (Non-Negotiable)
This is the governing principle of the orchestrator: no code without a spec.
Core Rule
The coding agent MUST NOT write implementation code until a written, approved spec exists for what it is about to build. This prevents:
- Guessing at requirements
- Making assumptions about behavior
- Building features the user didn't ask for
- Architectural drift from undocumented decisions
What Counts as a Spec
A spec is a written document (in docs/ or inline in a task file) that includes:
- What is being built (feature/component/fix)
- Why it's needed (user story, problem statement)
- Acceptance criteria (testable conditions for "done")
- Constraints (tech stack, performance, security, compatibility)
- Out of scope (what this does NOT do)
Minimum viable spec for a single task:
## Task: [Name]
**Goal:** [One sentence]
**Acceptance Criteria:**
- [ ] Criterion 1
- [ ] Criterion 2
**Constraints:** [Any limits]
**Out of Scope:** [What we're not doing]
Spec Lifecycle
1. Spec Creation (Before G2)
- Orchestrator (or user) writes the spec
- Spec is stored in
docs/specs/or embedded indocs/requirements.md - For brownfield: existing behavior must be documented first
2. Spec Approval (Before Implementation)
- User reviews and approves (in gated mode)
- Or orchestrator validates completeness (in autonomous mode)
- Spec is marked APPROVED in
docs/specs/or status.json
3. Spec → Task Mapping (G3/G4)
- Each task in
docs/g4-task-plan.mdMUST reference a spec section - Format:
Spec: requirements.md#feature-nameorSpec: specs/auth.md - Tasks without spec references are BLOCKED
4. Implementation (Coding Agent)
- Agent receives: spec + task description + context
- Agent MUST NOT invent features not in spec
- Agent MUST flag spec gaps and request clarification (not guess)
5. Verification Against Spec
- Orchestrator checks implementation against acceptance criteria
- Deviation from spec = FAIL (not creative license)
Enforcement Points
Gate G1 (Planning Approved)
docs/requirements.mdmust exist with testable requirements- Acceptance criteria must be explicit, not vague
Gate G2 (Architecture Approved)
docs/specs/directory must exist with at least one spec file- Or
docs/requirements.mdmust have spec-level detail for v1 features - ADR references must point to spec decisions
Gate G3/G4 (Build)
- Each task prompt MUST include:
- Spec reference
- Acceptance criteria from spec
- Explicit boundaries
run_gate.pyblocks tasks without--spec-refargument
Coding Agent Prompt Template
All coding agent prompts MUST include this preamble:
## SPEC-DRIVEN RULES
1. You are implementing ONLY what is specified below.
2. Do NOT add features, abstractions, or "improvements" not in spec.
3. If the spec is unclear or incomplete, STOP and ask for clarification.
4. Do NOT guess at requirements. Ever.
5. Your output will be verified against the acceptance criteria below.
## SPEC
[Insert spec section here]
## ACCEPTANCE CRITERIA
[Insert criteria here]
## TASK
[Insert specific task]
Red Flags (Auto-Fail)
The following trigger automatic gate failure:
- Task executed without spec reference
- Coding agent added unrequested features
- Acceptance criteria missing or vague ("should work well")
- Implementation diverged from spec without change request
- Assumptions documented as facts
Change Requests
If requirements change mid-build:
- Run
change_impact.pyto assess impact - Update spec documents
- Re-approve affected specs
- Update traceability matrix
- Only then resume implementation
No "I'll just add this quickly" — all changes go through spec update.
Spec Templates
Feature Spec (docs/specs/feature-name.md)
# Feature: [Name]
## Overview
[1-2 sentences]
## User Story
As a [user type], I want [goal] so that [benefit].
## Acceptance Criteria
- AC-1: Given [context], when [action], then [result]
- AC-2: Given [context], when [action], then [result]
## Allowed Scope Files
- src/path/to/feature/**
- tests/path/to/feature/**
## Technical Constraints
- [Stack/performance/security constraints]
## Dependencies
- [Other features, APIs, services]
## Out of Scope
- [What this feature explicitly does NOT do]
## Open Questions
- [Anything needing clarification before implementation]
API Endpoint Spec
# Endpoint: [Method] [Path]
## Purpose
[What this endpoint does]
## Request
- Method: [GET/POST/etc]
- Path: [/api/v1/resource]
- Auth: [Required/None/Scope]
- Body: [Schema or example]
## Response
- Success: [Status + schema]
- Errors: [Status codes + meanings]
## Validation Rules
- [Field validations]
## Side Effects
- [Database changes, events emitted, etc]
Summary
Spec → Approve → Implement → Verify
No shortcuts. No guessing. No "I assumed you wanted..."
The spec is the contract. Deviate = Fail.