Install
$ agentstack add skill-genkovich-sdd-sequences ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Skill: sequences
Draws the runtime view of an already-designed feature: for each critical flow it produces a Mermaid sequenceDiagram block — generic participants, happy path plus the error branches the spec demands — and writes them into docs/features//sad.md §6. One flow at a time, user confirms each. The diagrams are the bridge between the static design (§5 building blocks) and the data layer: every persist/read step you draw becomes a hint for the indexes data-model will need.
This skill keeps only its own machinery. Question phrasing is shared → [../_shared/ask-style.md](../shared/ask-style.md). Flow count is driven by the spec, not a cap — every §4 user story / §5 acceptance criterion is covered (size may collapse detail, never coverage) → [../_shared/size-matrix.md](../shared/size-matrix.md). Each diagram is confirmed in prose, never as raw Mermaid → [../_shared/diagram-presentation.md](../shared/diagram-presentation.md); whether each flow is confirmed per-diagram or written-and-summarized follows the interview-depth setting → [../_shared/interview-depth.md](../shared/interview-depth.md).
Owner
Tech Lead (drives the runtime decomposition). The PM confirms that each drawn flow matches a real user story; a backend engineer flags persist steps that imply a new index.
Inputs
- `` — same feature slug used by every earlier stage.
- Gate (hard-refuse if missing):
docs/features//sad.md. The §5 building-block view names the participants; §6 is where flows are written. Ifsad.mdis absent → STOP and point: «rundesignfirst — sequences are written into its §6». - (Expected)
sad.mdfrontmattertarget_surfaces— picks the participant vocabulary (UI-driven flows for a UI surface). Absent or empty → warn («surfaces undeclared — re-rundesign, or proceeding asbackend-service») and treat as[backend-service](→ [../_shared/surfaces.md](../_shared/surfaces.md)); never silently guess a UI surface. - Strongly expected:
docs/features//spec.md— §4 user stories tell you which flows exist; §5 acceptance criteria are the coverage floor — every AC must be shown by a flow, a branch, or an explicit non-runtime N/A (the step-7 coverage check). Present by this stage in the normal pipeline; if genuinely absent, fall back to §6/§5 ofsad.mdfor the flow list and note that AC-coverage can't be verified. - (Optional)
docs/features//.size— depth hint for detail (XS/S may collapse a flow's internal steps), never for coverage. Absent → default to M and say so loudly in the handoff — «size M (default — no.size; run/sdd:classify-size)». - (Optional)
.claude/sdd.local.mdinterview_depth(else medium) — governs only the diagram-confirmation UX (per-diagram prose+ask vs. write+summarize-and-proceed);sequencesdoes not open its own depth question (it honors the setting, or a--depth=arg if passed).
Protocol
- Gate.
test -f docs/features//sad.md→ fail = refuse with the pointer above. Then read §5 (participants) and §6 (any flows already drawn — this skill is additive, never rewrite an existing block). - Pick the flows — spec-driven, no cap. List the flows from
spec.md§4 user stories + §5 acceptance criteria (absent the spec, from §6 itself): one flow per critical user story / distinct runtime path. There is no fixed cap — draw as many flows as the user stories and ACs need (the old "3–5" cap silently under-covered). Then plan AC coverage: map every §5 AC to where it will be shown — a dedicated flow, analt/elsebranch inside the relevant flow, or explicitly non-runtime (e.g. a middleware-enforced 401, a build-time check) with a one-line reason. Size only collapses detail (XS/S may show fewer internal steps per flow), never coverage. Confirm the flow list and the AC→flow map with oneAskUserQuestionbefore drawing — phrasing per [../_shared/ask-style.md](../_shared/ask-style.md). - Map participants — generic only. For each flow, draw participants from a fixed generic vocabulary: `
,,,,,. Do **not** invent concrete service or technology names — those aredesign/data-modeldecisions, not runtime-view ones. **Whensad.mdfrontmattertargetsurfacesdeclares a UI surface** (web-frontend/mobile-app/desktop-app), draw the flows it touches as **UI-driven** —(actor) →→→— so the user-visible step is shown, not just the service call (→ [../shared/surfaces.md](../_shared/surfaces.md)). A backend-only /cli/workerfeature keeps the service-level vocabulary (no).stays generic, like every other participant — never a framework or component name. If a flow needs a participant §5 never declared, note it («flow needs`, not in §5 — flag for design») and still draw it. - Sync vs async. If the spec describes a webhook, scheduled job, queued/event-driven step, or any third-party callback → async: add an idempotency-key check as the handler's first step, a retry note (
Note over ,: retry N times with backoff), and a dead-letter branch in analtafter N failures. Otherwise → sync (request → response). - Draft each flow from [
./templates/sequence.md](./templates/sequence.md): a precondition note, the happy-path messages, analt/elsefor the error branches the spec's acceptance criteria require, and a postcondition note. Mark every write as a generic persist note —Note over ,: persists— sodata-modelsees what to index. Keep messages verb-first and free of HTTP verbs / status numbers / SQL. - Present + confirm each flow, one at a time — in prose, never raw Mermaid. Per [
../_shared/diagram-presentation.md](../shared/diagram-presentation.md): for each drafted flow, write the block into §6 under a###heading (so Obsidian renders it), validate it parses per [../_shared/mermaid-check.md](../shared/mermaid-check.md), then describe it in prose — the happy path plus everyalt/elsebranch in plain words. Never paste the rawsequenceDiagramsource as the question. Confirm by prose, governed by the interview-depth setting: at medium/hard, oneAskUserQuestionper flow with the 4-state actions from [../_shared/ask-style.md](../shared/ask-style.md) (Accept / Fix / Save-as-OQ / Drop) — on Fix, regenerate + overwrite that one block, re-validate, re-describe (one round, second answer final); on Drop, remove the block again. At easy, write + a one-line prose summary into the assumptions ledger and proceed (no per-flow question). Never touch a flow already present in §6. Maintain the edits-log per [../_shared/socratic-loop.md](../shared/socratic-loop.md). - Use-case + AC → flow coverage check (before finalizing). Two passes, surfaced as one coverage table:
- Use-case pass (§4). List every §4 user story and the flow(s) that realize it. Every retained user story maps to ≥1 flow (a US with no flow is a gap — draft + confirm one, or de-scope it back through
specify/clarify, never silently skip).specifyalready guarantees every §4 US carries ≥1 AC andclarifyre-catches a US with none, so this pass is the runtime-view echo of that floor — both ends now checked, not just transitively assumed. - AC pass (§5). List every §5 AC and where it is now shown — a dedicated flow, an
alt/elsebranch, or an explicit non-runtime N/A (with its one-line reason, e.g. «AC-7: middleware-enforced 401, not a runtime flow»).
If a Drop/Save-as-OQ during step 6 left a user story or an AC uncovered, draft + confirm the missing flow or branch (the step 5–6 mini-loop) before proceeding, or record the explicit N/A with the user. No §4 user story and no §5 AC may be silently uncovered. (Completeness is independent of depth + size; this gate holds even at easy/XS.)
- Finalize: order, validate, propose commit. Order the §6 blocks to match §4. Re-validate every
sequenceDiagramblock per [../_shared/mermaid-check.md](../shared/mermaid-check.md) as the backstop (balancedalt/else/end, declared participants; fix any that don't parse before committing). Append any flagged items (new participants, decisions worth an ADR) as a short note at the end of §6 — flag only, never auto-write an ADR. Propose commitsequences: runtime flows. Then emit the stage-handoff block per [../_shared/handoff.md](../shared/handoff.md) — What I did + Review (sad.md§6) + Run next (/clear, then/sdd:data-model, which uses the persist notes to choose indexes; for XS/S with no schema change — no new entity/column/index in any drawn flow — add the fast-lane alternative↳ or /sdd:api, per the [size-matrix fast lane](../_shared/size-matrix.md)).
Definition of Done
sad.md §6holds a MermaidsequenceDiagramfor every critical user story / distinct runtime path — no fixed cap; size may collapse a flow's internal detail, never its coverage.- Every §4 user story maps to ≥1 flow, and every §5 AC maps to a flow, an
alt/elsebranch, or an explicit non-runtime N/A — the step-7 coverage check passed on both passes (use-case + AC); nothing is silently uncovered (holds at every depth + size). - Each flow was confirmed in prose (medium/hard) or written + summarized (easy) — never by pasting raw
sequenceDiagramsource as the question. - Every block uses only generic participants (`
/////) — no concrete technology or service names. A declared UI surface usesin a UI-driven flow (→→→`); a backend-only feature omits it. - Each flow shows the error branches its spec acceptance criteria require, not happy-path only; every mutating step carries a generic persist note for
data-model. - Every async flow has an idempotency-key step, a retry note, and a dead-letter branch.
- Pre-existing §6 blocks are untouched; new participants / ADR-worthy decisions are flagged, not silently added.
Anti-patterns
- Concrete participants.
Postgres,content-api, a specific broker — the legacy trap. Participants stay generic; naming the tech is the job ofdesign/data-model. - Capping the flow count (the old "3–5") and silently under-covering. Flow count is driven by §4/§5 — every AC is shown by a flow, a branch, or an explicit N/A. A dogfood run that drew only 2 flows for a spec with 6 ACs is the exact failure this skill now forbids.
- Pasting raw Mermaid as the confirmation.
sequenceDiagramsource in the terminal is unreadable — the user approves blind. Confirm in prose; let Obsidian render the written block (per [../_shared/diagram-presentation.md](../_shared/diagram-presentation.md)). - Happy path only when the spec lists explicit error acceptance criteria. Each flow gets happy + the demanded error branches.
- One mega-diagram for the whole feature. Split per flow; a cross-cutting flow gets its own
### Cross-cutting:heading. - Auto-writing ADRs. This skill only flags decisions (idempotency strategy, retry shape, sync-vs-async); ADRs come from
decide-adror a human. - Rewriting an existing §6 block. Additive only — editing a drawn flow is a deliberate manual diff.
- Inventing a participant §5 never declared without flagging it. §5 is the source of truth; the flag lets
designreconcile it.
References & template
- [
../_shared/ask-style.md](../_shared/ask-style.md) — canonical question/option phrasing for steps 2 and 6. - [
../_shared/diagram-presentation.md](../_shared/diagram-presentation.md) — how each flow is confirmed (write → validate → prose-describe → confirm/proceed); never raw Mermaid as the question. - [
../_shared/interview-depth.md](../_shared/interview-depth.md) — the depth setting that governs per-flow ask vs. write-and-summarize (read from settings; sequences asks no depth question of its own). - [
../_shared/mermaid-check.md](../_shared/mermaid-check.md) — parse-validation run on each block at step 6 and again as the step-8 backstop. - [
../_shared/size-matrix.md](../_shared/size-matrix.md) — collapses a flow's detail for XS/S (never its coverage — every AC is still shown). - [
../_shared/surfaces.md](../shared/surfaces.md) — a declared UI surface adds `to the vocabulary and draws UI-driven flows; read fromsad.mdtargetsurfaces`. - [
./templates/sequence.md](./templates/sequence.md) — generic-participantsequenceDiagramscaffold (sync + async), embedded inline in sad.md §6.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: genkovich
- Source: genkovich/sdd
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.