skills/sdd-apply/SKILL.md
Use when implementing tasks from a change's tasks.md. Triggers: "apply tasks", "implement the change", "work through tasks", "start implementing", "continue implementing", "apply the change".
npx skillsauth add ahgraber/skills sdd-applyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Implement tasks from SPECS_ROOT/changes/<name>/tasks.md.
Check off each task as it completes.
SPECS_ROOTis resolved by thesddrouter before this skill runs. Replace.specs/with your project's actual specs root in all paths below.
sdd-apply.If tasks.md does not exist for the active change: STOP.
"No tasks to implement. Run
sdd-proposefirst to create the change artifacts."
Do not proceed without tasks.md.
Never reference ephemeral scaffolding in any persisted artifact.
Ephemeral scaffolding includes:
Task 7.4, T12)Group 8, G3)D12, design §4.2)These must not appear in:
Tasks, groups, and design-section IDs are scaffolding for the current change.
Once archived, only the spec name persists — references to ephemeral IDs become meaningless noise to future readers.
Name things after what they do, not where they came from in tasks.md or design.md.
If you catch yourself writing "D12 wiring" or "Task 7.4 implementation," restate it in terms of the behavior or component being changed.
This applies whether or not the commit-message skill is available.
When drafting a commit message during apply:
commit-message if it is loadable in this environment.type(scope): subject) that describes what changed and why, and apply the constraints above.tasks.md and implementation should begin or continuetasks.md exists — run sdd-propose firstsdd-verify, then sdd-sync, then sdd-archive.specs/changes/<name>/tasks.md — full task list.specs/changes/<name>/design.md — architectural decisions to follow.specs/changes/<name>/specs/ — delta specs for behavioral requirements.specs/specs/ — baseline specs for full contextreferences/sdd-change-formats.md § 4 — each task should depend only on capabilities built by earlier tasks.
The schema-config rule below is the named instance: if .specs/.sdd/schema-config.yaml exists, identify tasks that define schema contracts (endpoint definitions, model schemas, DDL changes) and confirm they are sequenced before any tasks that consume them.
Surface any ordering gaps to the user before implementing (advisory — the user may decide the order is intentional).Check tasks.md for already-completed tasks (- [x]).
Start from the first unchecked task.
If all tasks are complete:
"All tasks are already complete. Run
sdd-verifyto confirm the implementation, thensdd-syncandsdd-archive."
Stop.
For each unchecked task:
pytest with no --ignore / --deselect / -m filters).
Inner-loop iteration may use a narrower scope, but the verification you act on — and any pass/fail count you report — must come from a broad-scope run.
If you exclude any path, marker, or file, name the exclusion and justify it in the same message.
"Not part of this change" is not a valid justification for a class or module rewrite — every test that imports the rewritten symbol is part of the change by definition.
If a test fails, stop and resolve the failure before proceeding to the next step.tasks.md: - [ ] → - [x]Follow design decisions in design.md — don't diverge without reason.
Follow behavioral requirements in delta specs — these define what "correct" means.
Apply the Critical Constraints above to every artifact you produce — code, comments, and commit messages alike.
If .specs/.sdd/schema-config.yaml exists and a task consumes a schema contract that is not yet defined, pause before implementing it.
Surface the dependency gap and confirm with the user whether to reorder tasks in tasks.md first.
A SHALL requirement may end up with multiple code paths that produce or modify the contract-asserted value during implementation — not just the canonical path. Common examples: deduplication shortcuts, cache fast-paths, retry/fallback branches, idempotency early-returns, merge or composition steps that write the same fields.
When implementing a task introduces such a path for an existing SHALL:
tasks.md that exercises the contract through the new path.
The new test task must produce runnable evidence (test, schema check, or captured output) — same standard as the original SHALL coverage rule.A test exercising only the canonical path does not stand in for evidence on a shortcut, retry, or composition path.
This rule is what sdd-verify's write-site enumeration is checking; cover it at apply time and verify has nothing to flag.
When unsure whether a path is contract-relevant, surface it to the user rather than skipping the test task silently.
Before checking off the final task (hard gate):
rg/grep for tests that import any symbol you changed and confirm they ran in step 1.
The blast-radius check is what catches tests pinned to rewritten classes or modules that a marker filter would silently skip.When the gate passes and all tasks are checked off:
"All tasks complete. Recommended next steps:
- Run
sdd-verifyto confirm implementation matches the change artifacts- Run
sdd-syncto merge delta specs into main specs- Run
sdd-archiveto complete the change"
This skill can be invoked at any point after tasks.md exists — not only when all artifacts are complete.
design.md or delta specs before continuing.proposal.md and tasks.md.D12) — in code, comments, commit messages, or PR descriptions (see Critical Constraints)commit-message when it is available, or without applying the Critical Constraints when it is notreferences/sdd-schema.md — schema config format (§ 3) and lifecycle policy (§ 4)development
Use when writing or reviewing tests for Python behavior, contracts, async lifecycles, or reliability paths. Also use when tests are flaky, coupled to implementation details, missing regression coverage, slow to run, or when unclear what tests a change needs. Use for multi-Python version testing (nox) and free-threaded Python thread-safety validation.
development
Use when the user wants rigorous, non-sycophantic editorial feedback on a draft, essay, blog post, or argument through back-and-forth dialogue — pressure-testing thesis, structure, argument, clarity, tone, and evidence. Triggers: "be my sparring partner", "pressure-test this draft", "poke holes in my argument", "is this ready to publish", "sharpen this post", "where is this weak". Not for one-shot copyediting, proofreading, or ghostwriting.
testing
Use when distilling the through-line gist of one or more sources — the spine, argument, tension, or recurring frame running through a set of documents, notes, research, or transcripts, OR across the ideas within a single rich piece — into a few concise paragraphs. Triggers: "synthesize", "what's the through-line/gist", "extract the insight", "pull these together". Not for faithful summary or condensation that covers what a source says, nor for comparisons or catalogs where enumeration is the deliverable.
development
Use when writing or reviewing tests in any language, or diagnosing a suite that is slow, brittle, or hard to read. Triggers: "write tests", "how should I test this", "what kind of test", "test is flaky/fragile", "should I mock this", "test is hard to read". For Python-specific guidance see `python-testing`.