Propose design
You are drafting a design brief in the knowledge-iop vault. A
design brief is always paired with a problem brief via frames:.
Without the pair, the solution loses its "why" as soon as the context
evaporates — which is exactly what this convention exists to prevent.
Before drafting — search for the paired problem
- Invoke
vault-search with keywords from the topic to find the
matching problem brief.
- Zero matches → chain to
frame-problem first. Do not write a
design brief with frames: none unless the user explicitly asks
for it and has a reason; the escape hatch is deliberately annoying
to use. Resume here once the problem brief exists.
- One match, status
accepted or draft → this is your frame.
Proceed.
- One match, status
obsolete → the problem framing was set
aside. Ask the user whether to (a) supersede the obsolete problem
with a new framing (invoke frame-problem with supersedes:) or
(b) pick a different frame. Don't silently frame from an obsolete
problem.
- Multiple matches → ask the user which frame applies, listing
them with ids, status, and one-line titles.
Also search for existing design briefs on the topic via
vault_edges on the problem-brief id with kind: frames,
direction: incoming. A problem brief may have multiple designs —
check if yours is a competing alternative, a successor (supersedes),
or genuinely different.
Frontmatter shape
---
id: <YYYY-MM-DD>-<short-slug>
type: design-brief
status: draft
author: <person>
created: <YYYY-MM-DD>
frames: <problem-brief-id> # REQUIRED
arc: <arc-id | omit if orphan-of-arc>
scopes: [<scope-id>, ...]
supersedes: <id | null>
relates_to: [<id>, ...]
conflicts_with: [<id>, ...]
depends_on: [<id>, ...]
tags: [<tag>, ...]
---
frames: is required. Without it, this is not a design brief — it's
just opinions. If you truly can't frame it, the user must pass
frames: none with a free-text reason; push back once before
accepting that.
Filename
Write to briefs/<id>.md. Convention for slugs: <date>-<slug>
(no -design suffix — the type: field distinguishes it from the
problem brief). The date is the creation date.
Body
A design brief answers:
- What's the proposed approach? One paragraph before any
subsections. A reader should know the shape of the answer after
reading this alone.
- Why this approach? Cite the problem brief's constraints by
name. If the brief's reasoning doesn't lean on the framing, the
pairing isn't earning its keep — either the framing is wrong or
the design is unmoored.
- What does it look like? APIs, schemas, workflows, file
layouts, sequences — whatever makes it concrete. Prefer examples
over specs; specs age faster.
- What does it cost? Effort estimate, risk, what it breaks, who
must be involved. If you can't estimate, say so and note what
needs to happen to enable estimation.
- What alternatives did you consider? Two or three, with why
each was set aside. Include "do nothing" if it's on the table.
- What would change the analysis? The conditions under which
this design would be abandoned or superseded.
Write assuming a reader who has the paired problem brief open next to
this one. Don't restate the problem — reference it.
Drafting workflow
- Search the vault; confirm or chain to
frame-problem.
- Ask the user clarifying questions. A good design brief is 30%
drafting, 70% questioning.
- Propose frontmatter + body as a diff with the filename.
- Write the file on approval.
- Commit with
git add briefs/<id>.md && git commit -m "Design: <one-line>".
- If the user wants to move this to
proposed or accepted next,
invoke vault_check_transition with the new status first — it
will flag any blockers (framed problem still draft, depends_on
inquiry still open).
After commit
- Invoke
vault_check_transition before promoting status — it
catches common cascading violations.
- If the design will result in a decision, mention that the user can
invoke
record-decision later with derived_from: pointing at
this brief.
Do not
- Do not write a design brief without
frames:. If you catch
yourself about to, stop and invoke frame-problem instead.
- Do not edit an accepted design brief. Write a new one with
supersedes: <old-id>.
- Do not include the problem statement in the body — that lives in
the problem brief. Link, don't duplicate.
1---2name: propose-design3description: Draft a **design brief** — the "how do we solve it" half of the paired briefs convention in knowledge-iop. Every design brief must declare `frames:` pointing at a problem brief (or `frames: none` with a reason, discouraged). Use this whenever the user says things like "I need a design brief", "let's design a solution for X", "propose a design", "draft the design half", "how should we approach this". If no matching problem-brief exists in the vault, this skill will direct you to `frame-problem` first — solutions without framing are the anti-pattern the vault is built to prevent.4---56# Propose design78You are drafting a **design brief** in the knowledge-iop vault. A9design brief is always paired with a problem brief via `frames:`.10Without the pair, the solution loses its "why" as soon as the context11evaporates — which is exactly what this convention exists to prevent.1213## Before drafting — search for the paired problem14151. Invoke `vault-search` with keywords from the topic to find the16 matching problem brief.172. **Zero matches** → chain to `frame-problem` first. Do not write a18 design brief with `frames: none` unless the user explicitly asks19 for it and has a reason; the escape hatch is deliberately annoying20 to use. Resume here once the problem brief exists.213. **One match, status `accepted` or `draft`** → this is your frame.22 Proceed.234. **One match, status `obsolete`** → the problem framing was set24 aside. Ask the user whether to (a) supersede the obsolete problem25 with a new framing (invoke `frame-problem` with `supersedes:`) or26 (b) pick a different frame. Don't silently frame from an obsolete27 problem.285. **Multiple matches** → ask the user which frame applies, listing29 them with ids, status, and one-line titles.3031Also search for existing **design briefs** on the topic via32`vault_edges` on the problem-brief id with `kind: frames`,33`direction: incoming`. A problem brief may have multiple designs —34check if yours is a competing alternative, a successor (supersedes),35or genuinely different.3637## Frontmatter shape3839```yaml40---41id: <YYYY-MM-DD>-<short-slug>42type: design-brief43status: draft44author: <person>45created: <YYYY-MM-DD>46frames: <problem-brief-id> # REQUIRED47arc: <arc-id | omit if orphan-of-arc>48scopes: [<scope-id>, ...]49supersedes: <id | null>50relates_to: [<id>, ...]51conflicts_with: [<id>, ...]52depends_on: [<id>, ...]53tags: [<tag>, ...]54---55```5657`frames:` is required. Without it, this is not a design brief — it's58just opinions. If you truly can't frame it, the user must pass59`frames: none` with a free-text reason; push back once before60accepting that.6162## Filename6364Write to `briefs/<id>.md`. Convention for slugs: `<date>-<slug>`65(no `-design` suffix — the `type:` field distinguishes it from the66problem brief). The date is the creation date.6768## Body6970A design brief answers:71721. **What's the proposed approach?** One paragraph before any73 subsections. A reader should know the shape of the answer after74 reading this alone.752. **Why this approach?** Cite the problem brief's constraints by76 name. If the brief's reasoning doesn't lean on the framing, the77 pairing isn't earning its keep — either the framing is wrong or78 the design is unmoored.793. **What does it look like?** APIs, schemas, workflows, file80 layouts, sequences — whatever makes it concrete. Prefer examples81 over specs; specs age faster.824. **What does it cost?** Effort estimate, risk, what it breaks, who83 must be involved. If you can't estimate, say so and note what84 needs to happen to enable estimation.855. **What alternatives did you consider?** Two or three, with why86 each was set aside. Include "do nothing" if it's on the table.876. **What would change the analysis?** The conditions under which88 this design would be abandoned or superseded.8990Write assuming a reader who has the paired problem brief open next to91this one. Don't restate the problem — reference it.9293## Drafting workflow94951. Search the vault; confirm or chain to `frame-problem`.962. Ask the user clarifying questions. A good design brief is 30%97 drafting, 70% questioning.983. Propose frontmatter + body as a diff with the filename.994. Write the file on approval.1005. Commit with `git add briefs/<id>.md && git commit -m "Design:101 <one-line>"`.1026. If the user wants to move this to `proposed` or `accepted` next,103 invoke `vault_check_transition` with the new status first — it104 will flag any blockers (framed problem still draft, depends_on105 inquiry still open).106107## After commit108109- Invoke `vault_check_transition` before promoting status — it110 catches common cascading violations.111- If the design will result in a decision, mention that the user can112 invoke `record-decision` later with `derived_from:` pointing at113 this brief.114115## Do not116117- Do not write a design brief without `frames:`. If you catch118 yourself about to, stop and invoke `frame-problem` instead.119- Do not edit an accepted design brief. Write a new one with120 `supersedes: <old-id>`.121- Do not include the problem statement in the body — that lives in122 the problem brief. Link, don't duplicate.