skills/sdd-propose/SKILL.md
Use when creating a new change with all SDD artifacts — proposal, delta specs, design, and tasks. Triggers: "propose a change", "create a change for X", "I want to implement feature Y", "start a new change", "let's build X".
npx skillsauth add ahgraber/skills sdd-proposeInstall 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.
Create a change directory with all SDD artifacts. Generates artifacts in dependency order: proposal → delta specs → design → tasks.
SPECS_ROOTis resolved by thesddrouter before this skill runs. Replace.specs/with your project's actual specs root in all paths below.
sdd-propose.sdd-translatesdd-derivesdd-applysdd-explore firstAsk the user:
user-auth-refresh, payment-retry)Read .specs/specs/ to understand existing baseline specs before generating deltas.
If .specs/specs/ is empty or does not exist, generate delta specs using only ADDED sections — all behavior is new.
If the user isn't sure about scope, offer sdd-explore first.
Create .specs/changes/<name>/proposal.md.
See references/sdd-change-formats.md for the proposal format.
Write with the user's input:
Present to user and confirm before continuing.
If .specs/.sdd/schema-config.yaml exists:
.specs/changes/<name>/schemas/before/.## Schema Impact section to proposal.md describing expected schema changes — new endpoints, new or modified models, removed operations.
See references/sdd-schema.md § 2 for the format..specs/changes/<name>/schemas/expected.md with a prose description of the expected schema diff. sdd-verify uses this to cross-check actual changes at verify time.If no schema config exists but .specs/schemas/ contains files, emit a visible warning:
WARNING: Found schema artifacts in
.specs/schemas/but no.specs/.sdd/schema-config.yaml. Schema snapshots will not be captured for this change. Runsdd-deriveor create the config manually to enable schema tracking.
If no schema config exists and .specs/schemas/ is empty or absent, skip silently.
Create .specs/changes/<name>/specs/<capability>/spec.md for each affected capability.
Order capabilities by build dependency — contract-defining and foundation capabilities before consumers — and use the same order in proposal.md's Scope list, in design.md's Decisions and Architecture, and in tasks.md's task groups.
See references/sdd-change-formats.md § 4 for the principle and worked example.
Read references/sdd-spec-formats.md § 1 before writing any requirement.
It defines what a requirement is (contract shapes, authoring primitive, artifact separation) and is the primary guidance for this phase.
For each affected capability, ask: what new contract are we adding, changing, or removing? State each requirement as a contract statement (guarantee, invariant, prohibition, precondition-consequence, or observable-state relationship — see § 1.1). Lean toward universal claims where they apply.
For each universal SHALL claim, apply the partition heuristic in references/sdd-spec-formats.md § 1.6: ask whether the claim's input space splits along semantic lines the spec already names (lifecycle states, identity/equivalence, multi-source composition, derived-pair invariants).
If yes, write one scenario per partition; if no, a single scenario is fine.
Use spec vocabulary only — never partition along code paths or write-sites.
Mechanism thinking is expected here — algorithms, thresholds, strategies, data structures.
Park those thoughts in the proposal's ## Approach section as they surface; they formalize in Phase 5 (design.md).
Do not put mechanism into the spec itself.
Delta-format rules:
sdd-sync replaces it wholesale (references/sdd-spec-formats.md § 4).
Note prior behavior in a > Previously: … line.Present specs to user and confirm before continuing.
Create .specs/changes/<name>/design.md.
See references/sdd-change-formats.md for the design format.
Include:
Recorded date or commit SHA.
sdd-verify will otherwise flag any SHALL without runnable evidence as CRITICAL, and uses Recorded for provenance checking.
See references/sdd-change-formats.md § 2 for the format.Only include sections with content — omit empty sections.
Present to user and confirm before continuing.
Create .specs/changes/<name>/tasks.md.
See references/sdd-change-formats.md for the tasks format.
Rules:
references/sdd-change-formats.md § 4 — each task must depend only on capabilities built by earlier tasks; never order alphabetically or by order of discussiondesign.md § Verification Waivers with a manual evidence reference.
sdd-verify enforces this rule.design.md (deduplication shortcuts, cache fast-paths, retry/fallback branches, idempotency early-returns, merge or composition steps).
Each foreseeable write-site needs its own paired evidence-producing test task — one test on the canonical path is not evidence for the shortcut, retry, or merge.
Write-sites that emerge later during implementation are handled by sdd-apply's write-site emergence rule and sdd-verify's write-site enumeration; covering the foreseeable ones here keeps verify from flagging them..specs/changes/<name>/proposal.md has Intent, Scope (in/out), Approachreferences/sdd-spec-formats.md § 1)references/sdd-spec-formats.md § 1.6 — when a positive signal fires, scenarios cover each partitiondesign.md or the proposal's Approach, not in spec textdesign.md has at least one Decision with rationaletasks.md has atomic tasks, and tasks/groups are ordered by build dependency per references/sdd-change-formats.md § 4 — no task depends on a capability not yet built by an earlier taskproposal.md Scope, design.md, and tasks.md groupsdesign.md § Verification Waivers with a manual evidence referencedesign.md (canonical path plus any alternative paths the design names — shortcuts, retries, merges) is paired with its own evidence-producing test task.specs/specs/ (baseline specs untouched).specs/changes/<name>/proposal.md.specs/changes/<name>/specs/<capability>/spec.md per affected capability (delta format).specs/changes/<name>/design.md.specs/changes/<name>/tasks.mdSummary: change name, capabilities affected, task count.
references/sdd-spec-formats.md § 1.5)references/sdd-spec-formats.md § 1.6 (lifecycle, identity, multi-source composition, derived-pair) — verify will flag this as partition-incomplete coveragedesign.md names alternative paths (shortcuts, retries, merges) — each foreseeable write-site needs its own paired test task, not just the canonical onereferences/sdd-change-formats.md § 4 so the implementer never builds in anticipation of a missing capabilityreferences/sdd-spec-formats.md — baseline spec, delta spec, scenario formatsreferences/sdd-change-formats.md — proposal, design, tasks formatsreferences/sdd-schema.md — schema artifacts and lifecycle policydevelopment
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`.