Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Spec-Driven Development (SDD) Blueprint

Most AI coding tools assume you have a monorepo. One codebase, one context, one agent that can see everything.

That's not reality for most companies.

Enterprises run polyrepo architectures — separate services, separate teams, separate repos. Each codebase is big. Each has its own patterns, its own history, its own conventions. Merging them into a monorepo isn't happening.

So when you use AI coding tools, you hit a wall. You can get help inside one codebase at a time. But the coordination — decomposing a feature across services, keeping contracts in sync, sequencing work so nothing breaks — that's the hard part. And no tool solves it.

SDD Blueprint is a framework that solves this. It introduces a central spec repository that sits above your service repos and coordinates AI-assisted development across them.


Getting Started

  1. Clone the repo with workspace submodules:

     git clone --recurse-submodules git@github.com:tankibaj/spec-driven-dev.git
    cd spec-driven-dev

    Already cloned without submodules? Run git submodule init && git submodule update.

  2. Orient yourself:

    • spec/ — browse any feature folder to see a real spec, test scenarios, and work packages
    • docs/reference/ — product glossary, user personas, role definitions
    • docs/architecture/ — ADRs, patterns, system design
    • workspaces/ — git submodules, each with CI-generated docs (openapi.json, entities.md for BE; routes.md, consumed-endpoints.md for FE)

AI agents: your entry point is CLAUDE.md, loaded automatically on every session.


How It Works

SDD decomposes a feature into four phases. Each phase produces artifacts. Each artifact requires human approval before the next phase begins.

Phase 0 Phase 1 Phase 2+3 Phase 4
PRD → Feature Spec → Test Spec → Implementation
(what & why) (acceptance + Work Packages (AI executes
criteria) (scoped units) WPs in parallel)
flowchart TD
PRD["PRD: What + Why"] --> FS["Feature Spec (FS): Goals + Acceptance Criteria + Impact Analysis"]
FS --> TS["Test Spec (TS): Test scenarios derived from FS"]
TS --> BE["Work Package — Backend (WP-BE)"]
TS --> FE["Work Package — Frontend (WP-FE)"]
BE --> BR["Backend Repo (via git submodule)"]
FE --> FR["Frontend Repo (via git submodule)"]
Loading

Phase 0 — PRD (Product Requirements Document)

Define what to build, why, and for whom. No implementation details. Just the problem and the proposed solution at a high level.

Human reviews and approves before moving on.

Phase 1 — Feature Spec (FS) + Impact Analysis

Define acceptance criteria — testable, unambiguous conditions that the feature must satisfy. Run impact analysis across workspaces. Identify which contracts (OpenAPI specs, data schemas) are affected and how.

Human reviews and approves before moving on.

Phase 2+3 — Test Spec + Work Packages (TS + WPs)

Break the feature spec into scoped work packages, each targeting a single workspace repo. Each WP has:

  • A target workspace (e.g. order-service, storefront-app)
  • Specific acceptance criteria it satisfies
  • Contract changes it must implement
  • A definition of done with test requirements

Work packages are sized so an AI agent can execute one in a single session with full context. Independent WPs targeting different repos run in parallel.

Human reviews and approves before moving on.

Phase 4 — Implementation

AI agents execute the approved work packages. Each agent works inside a single workspace repo with a scoped, well-defined task. Contracts ensure the pieces fit together. Tests verify each WP against the acceptance criteria.

No guessing. No drift. Every line of code traces back to an approved spec.

StepOwnerReviewerSkill
PRD (Product Requirements Document)Human + AI agentHuman/prd
Feature Spec (FS) + Impact AnalysisHuman + AI agentHuman/spec
Test Spec (TS) + Work Packages (WP)AI agentHuman (reviews both together)/plan
ImplementationAI agentHuman (DoD checklist)/implement

Humans define what to build. AI agents break it down into testable scenarios and implementable work packages. Humans review and approve via status.yaml before anything moves forward.

To start a new feature: create a folder under spec/ named {feature-ID}-{slug} (e.g. 002-user-registration), then invoke the skills in order. Every artifact must reach approved status before the next phase begins.


AI Skills

Skills are reusable workflows that guide the AI agent through each SDD phase. You invoke them by name in your AI coding tool.

SDD Workflow Skills

SkillWhen to useWhat it produces
/prdStarting a new feature — define what and why before any spec workPRD-XXX.md in the feature folder
/specAfter the PRD is approved — define acceptance criteria with impact analysisFS-XXX.md + IA-XXX.md
/planAfter the FS is approved — derive test scenarios and split into work packagesTS-XXX.md + WP-XXX-BE.md / WP-XXX-FE.md
/implementAfter WPs are approved — orchestrates execution across workspace reposCode in workspace submodules

Maintenance Skills

SkillWhen to useWhat it produces
/workspace-contextFirst-time setup, after major implementation phases, or when workspace docs are staleCLAUDE.md in each workspace repo

Adding a Code Repo

Every service or app lives in its own git repo, linked here as a submodule. Two steps:

1. Add the submodule:

git submodule add <repo-url> workspaces/<service-name>

2. Register it in routes.yaml:

workspaces:
my-new-service:
path: workspaces/my-new-servicetype: backend # backend | frontendlanguage: python # python | typescriptcontracts:
- workspaces/my-new-service/docs/api/openapi.json

The routes.yaml entry is how the AI agent knows which workspace a Work Package targets. Without it, WPs can't be routed to your repo.


Where Things Live

DirectoryPurposeWhen to look here
spec/Feature specs, test specs, work packages, and per-feature status.yamlYou are building or reviewing a feature
docs/reference/Glossary, personas, rolesYou need domain context
docs/architecture/ADRs, patterns, system designYou need architecture decisions or standards
docs/project.mdProject metadata — domain, methodology, standardsYou need project context
routes.yamlRoutes work packages to workspace reposYou need to know which repo a work package targets
.claude/rules/Agent guardrails — loaded and enforced on every sessionYou want to understand or change agent behavior
.claude/skills/Reusable agent skill definitions (see "AI Skills" above)You want to understand or modify a workflow
workspaces/Git submodules — each service/app is a separate repoYou are implementing a work package
Full directory tree
spec-hub/
├── spec/
│ └── {XXX}-{slug}/ # One folder per feature (feature ID + slug)
│ ├── PRD-XXX.md # PRD (Product Requirements Document)
│ ├── FS-XXX.md # Feature Spec
│ ├── IA-XXX.md # Impact Analysis
│ ├── TS-XXX.md # Test Spec
│ ├── WP-XXX-BE.md # Backend Work Package
│ ├── WP-XXX-FE.md # Frontend Work Package
│ └── status.yaml # Phase progress, artifact approval states, blockers
│
├── docs/
│ ├── reference/
│ │ ├── glossary.md
│ │ ├── personas.md
│ │ └── roles.md
│ ├── architecture/ # ADRs, patterns, system design
│ └── project.md # Project metadata — domain, methodology, standards
│
├── routes.yaml # Routes work packages to workspace repos
│
├── .claude/
│ ├── rules/ # Agent guardrails (loaded every session)
│ └── skills/ # Reusable agent skill definitions
│
├── workspaces/ # Part of this repo; each child is a git submodule
│ ├── order-service/ # → git submodule (backend repo)
│ │ ├── docs/api/openapi.json # CI-generated OpenAPI spec (read-only)
│ │ └── docs/schema/entities.md # CI-generated entity definitions (read-only)
│ ├── storefront-app/ # → git submodule (frontend repo)
│ │ ├── docs/routes.md # CI-generated route manifest (read-only)
│ │ └── docs/consumed-endpoints.md # CI-generated API dependency manifest (read-only)
│ └── ...
├── CLAUDE.md # AI agent entry point
├── CLAUDE.learnings.md # Institutional memory (structured by category)
└── README.md # This file — human-facing documentation

Branching & Git Workflow

RepoPatternExample
Spec-hubspec/{feature-ID}-{slug}spec/001-guest-checkout
Workspace (backend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-BE
Workspace (frontend)feat/{feature-ID}-{WP-ID}feat/001-WP-001-FE
  • Spec-hub: one branch per feature. All spec artifacts committed there. Merged to main when the feature reaches Phase 4.
  • Workspaces: one branch per Work Package. BE and FE always get separate branches.
  • main is protected. No direct commits — not by humans, not by agents.

Commit message convention

feat(001): implement guest order placement saga ← workspace
spec(002): generate test spec and work packages ← spec-hub
chore(001): bootstrap order-service workspace ← scaffold

Always include the feature ID in parentheses. See .claude/rules/branching-strategy.md for the full convention.


Feature Status Tracking

Every feature folder contains a status.yaml file that the AI agent keeps current throughout the workflow. It is the single source of truth for where a feature stands.

feature: 001-guest-checkoutcurrent_phase: 4artifacts: # draft | awaiting_review | approved | rejectedPRD-001: { status: approved, date: 2026-04-03 }FS-001: { status: approved, date: 2026-04-03 }IA-001: { status: approved, date: 2026-04-03 }TS-001: { status: approved, date: 2026-04-03 }WP-001-BE: { status: approved, date: 2026-04-03 }WP-001-FE: { status: approved, date: 2026-04-03 }phase_4: # not_started | in_progress | blocked | doneWP-001-BE: { status: in_progress, last_checkpoint: "saga step 2 — reserve stock" }WP-001-FE: { status: not_started }blockers: []notes: ~

When a session is interrupted, the agent reads status.yaml first and resumes from last_checkpoint — not from scratch.


ID Conventions

ArtifactPatternExample
PRD (Product Requirements Document)PRD-XXXPRD-001
Feature SpecFS-XXXFS-001
Impact AnalysisIA-XXXIA-001
Test SpecTS-XXXTS-001
Backend Work PackageWP-XXX-BEWP-001-BE
Frontend Work PackageWP-XXX-FEWP-001-FE
Architecture DecisionADR-XXXADR-001

About

A spec-first framework for coordinating AI-coding-agent development across polyrepo architectures

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors