skills/sdd-translate/SKILL.md
Use when translating or migrating existing specs from another tool or format (Spec Kit, Kiro, ADRs, Jira, Confluence, Word docs, or custom markdown requirements) into SDD spec format. Also use when the user says "convert these specs", "migrate to SDD", "translate from X to SDD", or "import specs".
npx skillsauth add ahgraber/skills sdd-translateInstall 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.
Convert existing specifications from other frameworks, tools, or formats into SDD spec files.
SPECS_ROOTis resolved by thesddrouter before this skill runs. Replace.specs/with your project's actual specs root in all paths below.
sdd-translate.sdd-derive insteadsdd-verify to check completenessBaseline specs (.specs/specs/) document implemented behavior.
Translated specs should only go to baseline when the codebase already implements the described behavior.
digraph output_type {
"Codebase implements\nthe described behavior?" [shape=diamond];
"Translate to baseline specs\n(.specs/specs/)" [shape=box];
"Translate to change directory\n(.specs/changes/<name>/)\nADDED-only delta specs" [shape=box];
"Codebase implements\nthe described behavior?" -> "Translate to baseline specs\n(.specs/specs/)" [label="yes — documenting what exists"];
"Codebase implements\nthe described behavior?" -> "Translate to change directory\n(.specs/changes/<name>/)\nADDED-only delta specs" [label="no — greenfield or aspirational"];
}
How to check: After inventorying source specs (Phase 1), survey the codebase for relevant implementation.
If the capabilities described in the source specs have no corresponding code, the translated specs are aspirational — generate a change directory with ADDED-only delta specs, a proposal.md, and optionally a tasks.md.
If the codebase already implements the described behavior, translate directly to baseline.
Identify source format and structure:
spec.md + plan.md with Markdown headingsRead all source files before generating anything.
Group into capabilities — logical groupings that will each become one .specs/specs/<capability>/spec.md:
auth/, payments/, notifications/api/, frontend/, workers/ordering/, fulfillment/Before generating specs, count requirements across all source material:
| Signal | Action | | ---------------------- | ------------------------------------------------------- | | ≤ 8 requirements total | Single capability, proceed directly | | 9–20 requirements | Split into 2–4 capabilities, proceed | | 20+ requirements | Present capability split to user, wait for confirmation |
When decomposing, present the proposed split:
Proposed capabilities:
- auth/ → login, session, token management (5 reqs)
- payments/ → billing, subscriptions (6 reqs)
- ui/ → themes, layout (4 reqs)
Proceed with this split? (or suggest changes)
When the output type is a change directory (greenfield or aspirational — see Determine Output Type above), present capabilities in build-dependency order rather than alphabetically; the implementer will work through them in the order shown.
See references/sdd-change-formats.md § 4.
For baseline output (code already exists), ordering is a presentation choice — alphabetical is fine.
Output path depends on the output type decision above:
.specs/specs/<capability>/spec.md following SDD baseline format..specs/changes/<name>/ with:
proposal.md — intent, scope, approach (see references/sdd-change-formats.md)specs/<capability>/spec.md — ADDED-only delta specstasks.md — when implementation steps are clear (optional)Preserve the Phase 2 build-dependency order in proposal.md Scope and tasks.md when present.
If implementation steps are unclear and tasks.md is omitted, mention any ordering assumptions in the output summary.
See references/sdd-spec-formats.md for both baseline and delta spec formats.
Add a source attribution blockquote at the top of each generated spec (see format reference Section 2):
Translated from {source tool/format} on {date} Source: {source file or description}
Read references/sdd-spec-formats.md § 1 before translating.
The translation is from the source doc's grammar into SDD contract statements (see § 1.1 contract shapes).
Source docs from other tools (Spec Kit, Jira, ADRs, prose) commonly mix WHAT and HOW in the same sentence; translate only the contract, and route mechanism detail to design.md or discard it.
When the translated requirement is a universal SHALL, apply the partition heuristic in references/sdd-spec-formats.md § 1.6 to the source's acceptance criteria.
Source docs frequently capture only the happy-path acceptance criterion; if the heuristic flags a partition the source did not cover, surface the gap as an Uncertainty rather than fabricating scenarios.
Translation rules:
| Source pattern | SDD translation |
| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| "Users can X" | The system SHALL allow users to X |
| Acceptance criteria bullets | #### Scenario: entries with GIVEN/WHEN/THEN (as evidence of the requirement — see § 1.5) |
| "It should Y" | The system SHOULD Y |
| "Required: Z" | The system MUST Z |
| Implementation detail (class names, libraries) | Move to ## Technical Notes (baseline) or design.md (change directory); omit from the requirement |
| Named algorithm / threshold / strategy (e.g., "use TF-IDF bottom quartile", "retry 3 times") | Translate to the property it produces (e.g., "queries that produce no relevant documents"); route the named strategy to design.md |
| Phase-gated steps (plan.md, tasks.md) | Omit — not behavior |
| "As a user, I want X so that Y" | The system SHALL allow users to X (discard the "so that" rationale) |
| "Shall not / Must not" | The system SHALL NOT / MUST NOT {prohibited behavior} |
| Numbered requirement IDs (e.g., REQ-001:) | Strip the ID prefix; preserve the requirement text |
Critical rules:
references/sdd-spec-formats.md § 1.1 (guarantee, invariant, prohibition, precondition-consequence, observable-state relationship)#### (4 hashtags), requirements use ### (3 hashtags)## Purpose or ## Technical NotesCommon to both output types:
### Requirement: uses RFC 2119 keywords (SHALL/MUST/SHOULD/MAY)references/sdd-spec-formats.md § 1.1 — a property about observable state that stands on its own without its scenariosreferences/sdd-spec-formats.md § 1.6 — when a positive signal fires, scenarios cover each partition (or the gap is recorded as an Uncertainty)#### heading level (not ### or #####)## Technical Notes (baseline) or design.md (change directory), not left in the requirement textBaseline output only:
## Purpose section present in each specChange directory output only:
proposal.md exists with Intent, Scope, Approachproposal.md Scope and tasks.md preserve build-dependency order when the translation produced implementer-facing change artifacts## Purpose or ## Technical Notes in delta specsIf .specs/.sdd/schema-config.yaml exists:
.specs/schemas/ — this establishes the baseline for all future sdd-verify conformance checks..specs/schemas/.schema-sources.yaml with the generation date.If no schema config exists but schema artifacts are detected in the repo (e.g., openapi.yaml, .proto files, schema.graphql), suggest creating .specs/.sdd/schema-config.yaml before the first sdd-verify run:
"Detected schema artifacts. A
.specs/.sdd/schema-config.yamlwould letsdd-verifycross-validate implementation against these specs. Seereferences/sdd-schema.md§ 3 for the format. Say 'skip' to dismiss."
If no schema config and no artifacts detected, skip silently.
Baseline (code exists):
.specs/specs/<capability>/spec.md per capabilityChange directory (greenfield/aspirational):
.specs/changes/<name>/proposal.md.specs/changes/<name>/specs/<capability>/spec.md (ADDED-only delta format).specs/changes/<name>/tasks.md (when applicable)Summary: capabilities created, requirement count per capability, translation notes and assumptions.
/users then insert into users table" is mechanism in both the source and a literal translation.
Translate to the property the source was trying to guarantee ("a user account is created") and route the mechanism to design.md.
See references/sdd-spec-formats.md § 1..specs/specs/ asserts implemented behavior; if nothing is built yet, use a change directory with ADDED-only delta specsreferences/sdd-spec-formats.md — baseline spec and scenario formatsreferences/sdd-schema.md — schema config format 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`.