Decision-Linked Development (DLD) — a workflow for recording, linking, and maintaining development decisions alongside code. Skills for planning, recording, implementing, auditing, and documenting decisions via @decision annotations.
68
Quality
68%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
You are helping the developer record a development decision. This should be a focused, low-ceremony conversation — not an interrogation.
Use the AskUserQuestion tool for all questions and prompts. This provides a structured input experience for the user rather than waiting for freeform replies.
Shared scripts:
../dld-common/scripts/next-id.sh
../dld-common/scripts/regenerate-index.sh
../dld-common/scripts/update-status.shSkill-specific scripts:
scripts/create-decision.shCheck that dld.config.yaml exists at the repo root. If not, tell the user to run /dld-init first and stop.
dld.config.yaml to understand the project structure (flat vs namespaced, decisions directory, namespaces list)decisions/PRACTICES.md if it exists — be aware of project conventions when helping structure the decisiondecisions/records/<namespace>/PRACTICES.md if it exists for the relevant namespaceIf the user provided context with the skill invocation, use it. Otherwise ask:
What decision are you recording? Tell me what you decided, why, and what code it affects.
Listen for:
Only ask follow-up questions if the rationale or scope is genuinely unclear. Maximum 3-5 questions total. Don't interrogate — if the developer gave enough context, move on.
Good reasons to ask:
Scan existing decision files for potential relationships:
If you find related decisions, mention them and ask whether this decision supersedes any of them.
If the project is namespaced, determine which namespace this decision belongs to. Infer from the code references if possible, otherwise ask.
Run the next-id script:
bash ../dld-common/scripts/next-id.shThis outputs the next available ID (e.g., DL-004).
Compose the markdown body with the relevant sections (Context, Decision, Rationale, Consequences). Omit sections that aren't relevant, but always include Context and Decision.
Then run the create-decision script, piping the body via printf with \n for newlines (do not use literal newlines in the body argument — use \n escape sequences so the entire command stays on one logical line):
printf "## Context\n\nWhat prompted this decision.\n\n## Decision\n\nWhat was decided.\n\n## Rationale\n\nWhy this choice.\n\n## Consequences\n\nWhat becomes easier or harder." | bash scripts/create-decision.sh \
--id "DL-NNN" \
--title "Short descriptive title" \
--namespace "billing" \
--tags "tag1, tag2" \
--supersedes "DL-003, DL-007" \
--body-stdinFlags --namespace, --tags, --supersedes are optional. The script creates the file with YAML frontmatter and the body content, and outputs the file path.
Note: If the body contains literal
%characters, escape them as%%(printf format string requirement).
If this decision supersedes others, also update their status:
bash ../dld-common/scripts/update-status.sh DL-003 supersededbash ../dld-common/scripts/regenerate-index.shDecision DL-NNN recorded as
proposed.Next steps:
/dld-implement DL-NNN— implement this decision/dld-decide— record another decision