Sdd translate
Agent skills
npx -y skills add ahgraber/skills --skill sdd-translateAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
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".
SKILL.md
15.0 KB, as published. Nobody here has run it
SDD Translate
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.
Invocation Notice
- Inform the user when this skill is being invoked by name:
sdd-translate.
When to Use
- Migrating from Spec Kit, Kiro, ADRs, Jira, Confluence, or similar
- Converting structured requirements documents into SDD format
- Reverse-engineering third-party spec output into SDD specs
When Not to Use
- No existing specs to translate — use
sdd-deriveinstead - Already in SDD format — run
sdd-verifyto check completeness
Determine Output Type
Baseline 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.
Process
Phase 1: Inventory Source Specs
-
Identify source format and structure:
- Spec Kit →
spec.md+plan.mdwith Markdown headings - Kiro → steering docs + requirements files
- ADRs → architecture decision records (context/decision/consequences)
- Jira/Linear → issue descriptions + acceptance criteria
- Prose documents → natural language requirements
- Spec Kit →
-
Read all source files before generating anything.
-
Group into capabilities — logical groupings that will each become one
.specs/specs/<capability>/spec.md:- By feature area:
auth/,payments/,notifications/ - By component:
api/,frontend/,workers/ - By bounded context:
ordering/,fulfillment/
- By feature area:
Phase 2: Assess Scope and Plan Decomposition
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.
Phase 3: Translate Each Capability
Output path depends on the output type decision above:
-
Baseline (code exists): produce
.specs/specs/<capability>/spec.mdfollowing SDD baseline format. -
Change directory (greenfield/aspirational): create
.specs/changes/<name>/with:proposal.md— intent, user stories, scope, approach (seereferences/sdd-change-formats.md§ 1.1)specs/<capability>/spec.md— ADDED-only delta specs, each requirement carrying aServes:backlink to a proposal storytasks.md— when implementation steps are clear (optional)
Also seed .specs/NORTH-STAR.md if absent — draft a candidate product north star from the source specs for the user to ratify; each user story ladders to it.
When the source uses user-story grammar ("As a … I want … so that …"), the story belongs in proposal.md § User Stories (keep the "so that {value}" clause); translate only the WHAT into the requirement and point its Serves: line back at the story.
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" | Baseline: The system SHALL allow users to X (value layer dropped — baseline is value-free). Change directory: capture the story incl. "so that Y" in proposal.md § User Stories and add a Serves: backlink on the requirement |
| "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:
- Every translated requirement is a contract statement in one of the shapes from
references/sdd-spec-formats.md§ 1.1 (guarantee, invariant, prohibition, precondition-consequence, observable-state relationship) - Every scenario must have GIVEN, WHEN, THEN (bold labels, exact casing)
- Scenarios use
####(4 hashtags), requirements use###(3 hashtags) - Baseline output: no delta markers (ADDED/MODIFIED/REMOVED)
- Change directory output: use ADDED sections only (all behavior is new); no
## Purposeor## Technical Notes - Change directory value layer: author
## User Storiesinproposal.md(keep each "so that {value}" clause) and add aServes:backlink to each delta requirement; seed.specs/NORTH-STAR.mdif absent. Baseline output is value-free — no stories or backlinks.
Phase 4: Validate Output
Common to both output types:
- Every
### Requirement:uses RFC 2119 keywords (SHALL/MUST/SHOULD/MAY) - Every scenario uses GIVEN/WHEN/THEN with bold labels
- Each requirement is a contract statement in one of the shapes from
references/sdd-spec-formats.md§ 1.1 — a property about observable state that stands on its own without its scenarios - Universal SHALL claims have partition coverage per the heuristic in
references/sdd-spec-formats.md§ 1.6 — when a positive signal fires, scenarios cover each partition (or the gap is recorded as an Uncertainty) - Scenarios use
####heading level (not###or#####) - Implementation details and named strategies from source were routed to
## Technical Notes(baseline) ordesign.md(change directory), not left in the requirement text
Baseline output only:
-
## Purposesection present in each spec - No delta markers (ADDED/MODIFIED/REMOVED)
Change directory output only:
- All specs use ADDED sections only (delta format)
-
proposal.mdexists with Intent, User Stories, Scope, Approach - Each user story keeps its "so that {value}" clause and ladders to
NORTH-STAR.md - Each delta requirement carries a
Serves:backlink to a proposal story -
proposal.mdScope andtasks.mdpreserve build-dependency order when the translation produced implementer-facing change artifacts - No
## Purposeor## Technical Notesin delta specs
Phase 5: Schema Snapshot (if schemas configured)
If .specs/.sdd/schema-config.yaml exists:
- Generate schema snapshots using the configured extraction commands.
- Store in
.specs/schemas/— this establishes the baseline for all futuresdd-verifyconformance checks. - Update
.specs/schemas/.schema-sources.yamlwith 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.
Output
Baseline (code exists):
.specs/specs/<capability>/spec.mdper capability
Change 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.
Common Mistakes
- Translating source-doc grammar without translating the content — a Jira ticket saying "POST to
/usersthen insert intouserstable" 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 todesign.md. Seereferences/sdd-spec-formats.md§ 1. - Using non-RFC-2119 language ("the system will", "users can") instead of SHALL/MUST/SHOULD
- One giant spec instead of capability decomposition for large surface areas
- Including delta markers (ADDED/MODIFIED) in baseline specs
- Not reading all source files before generating output
- Writing baseline specs for a greenfield project —
.specs/specs/asserts implemented behavior; if nothing is built yet, use a change directory with ADDED-only delta specs - Discarding the "so that {value}" clause when producing a change directory — it should become a proposal user story with the requirement's
Serves:backlink; only baseline output (which is value-free) drops the value layer
References
references/sdd-spec-formats.md— baseline spec and scenario formatsreferences/sdd-schema.md— schema config format and lifecycle policy