sdd-workflow
Skill1 starsChanged 22 days agoMITView on GitHub
The team's spec-driven development workflow: the /specify -> /plan -> /tasks -> /implement -> /verify -> /archive stages, the XS/S/M/L size lanes with their artifact budgets, the non-negotiables, and the spec change management pointer. Preloaded into every delivery-team agent.
4 other projects use a version of this.
Adopted by
Most recently taken up by
- LuisSambrano/antigravity-configtheir own version, first seen Nov 8, 2026
- luanmorenommaciel/agentspectheir own version, first seen Oct 8, 2026
- Sapere-IA/sdd-onboarding-kittheir own version, first seen Oct 6, 2026
- theinterneti/TTA.devtheir own version, first seen Apr 4, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- luanmorenommaciel/agentspec★ 256same name
- Sapere-IA/sdd-onboarding-kit★ 19same name
- LuisSambrano/antigravity-config★ 8same name
- theinterneti/TTA.dev★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- AGENTS.mdAGENTS.md
- context7-cliSkill
- decision-protocolSkill
- frontend-designSkill
- gitlab-accessSkill
- hallmarkSkill
- harness-cleanerSkill
- image-genSkill
- k8s-debugSkill
- retroSkill
- ste100Skill
- teammate-protocolSkill
- team-wikiSkill
- technical-seoSkill
- ux-copySkill
- vector-genSkill
- web-design-guidelinesSkill
- writing-for-agentsSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 56
Every code module is traceable to a
plan.mdelement: If you cannot point to the plan element your code implements, you are off-spec — … - Very specific: line 67
If the target project does not yet have a specs/ directory, the coordinator creates one as the first action of the first feature — and at …
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Spec-Driven Development (team standard)
This team strongly follows spec-driven development in the GitHub SpecKit lineage. When the team is deployed into a target project, that project becomes the single source of truth for specs — every feature lives in <project>/specs/NNN-<feature-slug>/. The team builds nothing in the target project that isn't traceable to a spec there.
Important: this configuration repo contains only the team definition. It does NOT contain project-specific
specs/artifacts. All paths below are relative to the working directory of the target project, never to this config repo.
The workflow has five stages plus a verification gate:
| Stage | File (in target project) | Owner |
/specify | specs/NNN-<feature-slug>/spec.md | product-owner |
/plan | specs/NNN-<feature-slug>/plan.md (+ contracts/ for HTTP/data APIs) | lead-system-architect |
/tasks | specs/NNN-<feature-slug>/tasks.md | team-lead-coordinator |
/implement | source code + tests | senior-software-engineer |
/implement (infra) | specs/NNN-<feature-slug>/deploy.md + Dockerfile / manifests | devops-infra-expert |
/verify | gate; entry appended to specs/verify-log.md (batched, never a per-feature MR) | team-lead-coordinator |
/archive | move to specs/archive/<year>/NNN-<slug>/; rides the same batched MR | team-lead-coordinator |
Size lanes — spec weight is tiered by risk
Specification weight is tiered by risk, exactly as review weight is (Tier 0/1/2, below). The full /specify + /plan pipeline is priced for a new contract or a new service (→ RP-18).
The coordinator assigns a size lane at intake, records it in tasks.md and in the spec's size: frontmatter field, and classifies by what the change touches — never by how the request is framed (the same objective test as the UI-touching rule).
| Lane | Use when the change touches… | Artifacts |
| XS | nothing user-visible and no behavior: doc-only, comment-only, or a bugfix with no behavior change | one row in tasks.md; no spec, no plan |
| S | presentation, copy, styling, a tuned value, or a contained bugfix — and none of: a contract or API, persisted data or schema, infra/deploy topology, auth or secrets, money, legal/GDPR surface, or a second deployed artifact | spec.md ≤120 lines, S template (product-owner.md); design notes are a section in it, plus tasks.md (always). No plan.md — and no architect-authored governing document under any other filename (→ RP-26) |
| M | new or changed behavior inside existing contracts, inside one deployed artifact | spec.md ≤250 lines + plan.md ≤250 lines (+ contracts/ where applicable) |
| L | any of the exclusions listed under S | the full pipeline, no line budget |
Lane rules, all binding:
- A tier-up must name a lane-S exclusion from the table above — a contract or API, persisted data or schema, infra/deploy topology, auth or secrets, money, legal/GDPR surface, or a second deployed artifact. Tiering down from a set lane still needs the human's explicit approval (a lighter-lane recommendation at dispatch is not a tier-down); tiering up is no longer free, because "tier up freely" became the default resolution for document volume rather than an escape valve for risk (→ RP-26).
- Bookkeeping volume never sets the lane. Supersession restatement, ID counts, spec history, and retiring an ADR are not exclusions and do not justify M or L; there is no rule that an ADR needs a
plan.mdto be retired in, and a lane-S spec's Decisions section retires one fine (→ RP-26). - The line budgets are
/verifygates, not advice. A spec or plan over its lane's budget is a blocker, cleared either by cutting it or by re-classifying the feature up a lane on the record — never by waiving the number. - Meet the budget by moving material, not by deleting it. Measurements, derivations, rejected alternatives, restated superseded requirements (
evidence/superseded-ids.md, perspec-change-management.mdrule 2), and evidence go tospecs/NNN-<slug>/evidence/or the run'scollaboration-traces/entry, cited by link — a spec states what must be true, it is not the notebook that got you there. - S spawns no architect and collapses the consultation round-trip: the product owner answers acceptance questions as comments on the single MR thread, not as a separately spawned task — and when the stakeholder's request states the whole change, the request is the acceptance criteria and no PO comment is owed (→ RP-66);
lead-system-architectis not spawned at S, and a design question raised by the reviewer is the re-classification trigger (→ RP-46). If a contract, data, infra, auth, money, or legal question appears, the feature was never S — re-classify before continuing. - S runs the simulated-user gate only when it changes navigation or a user flow. Styling, spacing, copy, and tuned-value changes record
ux=n/awith the reason; M/L UI work always runs it (→ RP-46). - A visual tweak runs S light. The diff is at most five CSS declarations and no markup, script, route, asset or text.
spec.mdis ≤40 lines. A merged AC it replaces is restated in full in that spec (noevidence/file), with the forward pointer from spec-change-management rule 5. One assertion per changed declaration, before and after screenshots at 375 px and desktop on the MR, and no assumption challenge. Thecode-reviewerlooks at those screenshots as the independent visual check, because the reviewer drew nothing; no extra instance (→ RP-64). - Tests are verified once, by CI. A green pipeline on the reviewed SHA is the evidence; neither the reviewer nor the coordinator rebuilds or re-runs the suite (→ RP-49).
- S ships as one MR: spec, code, and tests on one branch, reviewed once. The product owner authors
spec.mdonfeature/NNN-<slug>(cut fromorigin/main, in its own worktree) and pushes without opening an MR; the engineer then takes that branch in its own worktree, adds code and tests, and opens the single MR covering both. Every review gate still applies in full — attestation, design check, copy check, scope integrity, SHA-pinned merge. Only the document count and the MR count shrink. - Artifact type is never a reason to split an MR. One feature ships in as few MRs as its risk tiers allow: S is one; M defaults to two (governing documents, then implementation, per non-negotiable 1); L splits by risk tier, never by filename.
- On a shared feature branch the reviewer must be a different instance from every instance that committed to it, not merely from whoever opened the MR. One branch with two authors is still two authors.
- Rework does not inherit its predecessor's lane — a follow-up to a shipped feature is classified on its own diff (→ RP-18).
Non-negotiables (apply in the target project)
- No
/implementwork begins until the lane's governing documents are committed to the target project —spec.md, plusplan.mdfor lanes M and L. "Committed" means merged tomain, not merely pushed to a feature branch (→ RP-08). Hard ordering, encoded as a task-list dependency. Lane S is the exception by construction: its spec and its code ship in one MR, so the ordering is internal to that MR and there is no separate spec merge to sequence. - Every test file references the AC IDs it covers in a header comment (e.g.,
# covers AC-1.1, AC-2.3, FR-4). - Every code module is traceable to a
plan.mdelement. If you cannot point to the plan element your code implements, you are off-spec — stop and clarify with the architect. - The coordinator's
/verifystep is the only path to "done." It confirms every[MUST-TEST]AC has a passing test and every plan element has corresponding code — and, whenever the change ships via anything not rebuilt automatically by the same CI run as the code (a container image, a manually-published data/asset bundle, a CDN-fronted static file, a separately-deployed service), that the fix is confirmed against the actually deployed/live system, not just a green test suite and a merged MR. Passing tests and a merged MR are necessary, not sufficient: caching, deployment-sequencing, and artifact-publish drift can each mask a correct fix indefinitely and make "still broken" and "confirmed fixed" reports both look plausible depending purely on which client or cache state the report came from. "Merged" is not "done" until live behavior is checked from a clean/uncached client./verifyalso blocks on a stale MR description: if review-round commits changed what the MR does after the description was first written, the author must update the description to match the final diff before merge — a description that still describes an earlier, superseded version of the change is a/verifyblocker, since future agents (and future you) will trust that text over re-reading the diff. Merges must be SHA-pinned to the reviewed commit:glab mr merge <id> --sha <reviewed-sha> --squash --remove-source-branch— GitLab refuses the merge if the branch head has moved past the SHA aREVIEW-ATTESTATIONnamed, turning that check from an audit-time assertion into a server-enforced one (confirmed 2026-08-15, feature 016: an MR sat approved against a stale attestation after two post-approval pushes, caught only by agents manually re-checking SHAs). - Task breakdown must enumerate every deployed artifact affected by a changed shared contract, not just the one the feature is nominally about. When a change alters a contract, interface, path scheme, or shared build-context dependency consumed by more than one independently-deployed artifact (sibling services in the same repo, or a consumer in another repo entirely),
/tasksmust include one explicit task per affected artifact to rebuild/republish and repoint its deploy manifest — found by checking every consumer of the changed contract, never assumed from the feature's primary framing. Within a single repo,git diff <last-deployed-sha>..<merge-sha> --statper build context is the recommended concrete technique for finding affected artifacts; across repos, the equivalent is an explicit consumer inventory. A GitOps manifest pinned to an immutable image SHA does not move on its own — nothing rebuilds or repoints it except an explicit task. Tests passing and CI green for the one artifact you were focused on do not imply the others were updated. - Size lanes replace the old trivial-fix escape hatch (see "Size lanes" above). XS is that hatch; S, M, and L sit between it and the full pipeline. The coordinator assigns the lane, and the default is no longer full ceremony — it is the lightest lane the change's actual surface allows.
- Push your artifacts to the target project's remote. Every artifact you produce (spec.md, plan.md, tasks.md, source code, deploy.md, Dockerfiles, manifests, etc.) is committed and pushed to a feature branch in the target project's git repository — typically
feature/NNN-<slug>. Use a GitLab MCP server or authenticatedglabCLI by default; if neither works, halt and request configuration or explicit approval for a named alternative, never route through a browser, workflow platform, or another service's credential merely because it is available. Effective scope comes from the selected tool's configured authentication, and missing GitLab access never permits silently skipping the push (→ RP-31, RP-33). - Map every AC before implementation.
tasks.mdnames each criterion's validation method, stage, evidence location, and owner, including ACs without[MUST-TEST];/tasksblocks incomplete maps and/verifychecks the promised evidence. XS with no ACs recordsn/a. (→ RP-34) - Challenge assumptions once for M/L. During the existing governing-document MR review, a domain-matched independent reviewer posts the bounded
ASSUMPTION-CHALLENGEdefined in${CLAUDE_PLUGIN_ROOT}/.claude/process/harness-quality-loop.md; it preserves the verbatim request, adds no extra review round, and blocks implementation on unresolved in-scope findings. XS and S do not run this challenge. (→ RP-34) - Measure failed gates before changing the harness. Append the compact failure record to the run's existing postmortem, then review matching repeat keys before proposing a durable rule;
${CLAUDE_PLUGIN_ROOT}/.claude/process/harness-quality-loop.mddefines the formats and decision rule. (→ RP-34)
Feature numbering is sequential and immutable per target project (NNN = 001, 002, …). Once assigned, never renumber. Take the next NNN as the highest number found on origin/main, every remote branch and every open MR, plus one; a target project with CI also fails the pipeline on two specs/NNN-* directories sharing a number (→ RP-60). Feature slug is short kebab-case (weather-forecast, user-onboarding).
If the target project does not yet have a specs/ directory, the coordinator creates one as the first action of the first feature — and at the same time updates the target project's AGENTS.md (or equivalent) to note that SDD is now the convention there.
Spec Change Management
spec.md is immutable once its feature branch merges to main. Statuses run Draft → Active, then Withdrawn / Superseded-by: NNN / Historic in specs/archive/<year>/; status: and folder location always change in the same commit, or neither does. Never delete a spec directory — archive it.
Before you /amend, /cancel, supersede, partially supersede, remove, or archive any spec, read ${CLAUDE_PLUGIN_ROOT}/.claude/process/spec-change-management.md in full. It is the authoritative flow and carries invariants you cannot infer from this summary. The one that most often bites implementers: under partial supersession an ID may be reused only where it replaces that exact ID, every genuinely new requirement or criterion takes an ID the superseded spec does not use, and every test header cites the spec number alongside the AC ID (covers AC-1.1 — 028, never bare) because both specs are authoritative at once (→ RP-10).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

