aboutsummaryrefslogtreecommitdiff
path: root/.ai/workflows/spec-create.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-12 19:15:15 -0500
committerCraig Jennings <c@cjennings.net>2026-06-12 19:15:15 -0500
commit7c052535f371c67956947a5afe711c71350feaf4 (patch)
tree8ef25952f98223ed892b1714878c722f7ed59aaf /.ai/workflows/spec-create.org
parentf11dd5c4e70ebbf487205aa72998e87b123d7f9d (diff)
downloadrulesets-7c052535f371c67956947a5afe711c71350feaf4.tar.gz
rulesets-7c052535f371c67956947a5afe711c71350feaf4.zip
feat(workflows): spec decisions become org TODO/DONE tasks
Each spec decision is now an org TODO task that flips to DONE when the decision-maker agrees, with a [/] cookie on the Decisions heading and a Discussion child for disputes. This replaces the inline State: proposed | accepted | superseded field. spec-response folds settled decisions by flipping them to DONE. spec-review's readiness gate and Ready rubric require the cookie to read complete. A spec can't move past draft to implementation-ready while any decision is still TODO. From the .emacs.d handoff 2026-06-12.
Diffstat (limited to '.ai/workflows/spec-create.org')
-rw-r--r--.ai/workflows/spec-create.org25
1 files changed, 15 insertions, 10 deletions
diff --git a/.ai/workflows/spec-create.org b/.ai/workflows/spec-create.org
index 42f36b9..daf56f7 100644
--- a/.ai/workflows/spec-create.org
+++ b/.ai/workflows/spec-create.org
@@ -48,12 +48,12 @@ Capture, in this order:
1. *Design* — overview first, then detail. Write the reasoning as *prose, not bullet dumps* — prose exposes weak logic that bullets let you hide. Use bullets only for genuinely enumerable lists. When the thing has an interface, use the *two-altitude* split (Rust RFC): explain it once for a user/caller, once for an implementer.
2. *Alternatives considered* — the load-bearing section authors skip and reviewers need most. For each option, force a why-not with the MADR grammar: "Good, because… / Bad, because… / Neutral, because…". Even one rejected option, with the reason, beats presenting one path as inevitable.
-3. *Decisions* — capture each real choice as an inline mini-ADR (Nygard's spine):
- - =State:= proposed | accepted | superseded
+3. *Decisions* — capture each real choice as an org =TODO= task carrying an inline mini-ADR (Nygard's spine):
+ - The heading is =** TODO <Decision name>=. It flips to =DONE= when the decision-maker agrees with the call; until then it stays =TODO=.
- =Context:= the forces motivating the choice
- =Decision:= the call, stated actively ("We will…")
- =Consequences:= what gets easier *and* what gets harder (both halves — a decision with only upsides is under-examined)
- An *open* decision is simply =State: proposed= plus an *owner* and a *by-when*; resolving it flips to =accepted= with the rationale in Decision. Never rewrite a resolved decision — mark it =superseded= and keep the old one. Keep decisions inline here; promote to a standalone numbered ADR only when a decision outlives or spans beyond this one spec. (The decision =State= is distinct from the spec-wide =Status= in the metadata header.)
+ An *open* decision is a =TODO= task with an *owner* and a *by-when*; agreeing flips it to =DONE=. If the decision-maker doesn't agree, it stays =TODO= and the back-and-forth continues under a =*** Discussion= child header — never overwrite the decision body to win an argument. Put a =[/]= statistics cookie on the =* Decisions= heading so the resolved tally is visible at a glance. To revisit a =DONE= decision, either reopen it to =TODO= (carrying the new dispute in its =*** Discussion= thread, prior text preserved) or write a fresh decision that supersedes it; don't silently rewrite the old one. Keep decisions inline here; promote to a standalone numbered ADR only when a decision outlives or spans beyond this one spec. (The per-decision =TODO/DONE= is distinct from the spec-wide =Status= in the metadata header — see the implementation-ready gate in Phase 6.)
** Phase 3 — Make it buildable
@@ -90,7 +90,7 @@ This is where the spec earns a "Ready" from review: an engineer must be able to
** Phase 6 — Hand-off readiness
Self-assess against =spec-review='s rubric before handing off, so the review starts from a clean spec instead of catching basics:
-- *Decisions:* no =State: proposed= decisions remain, or the author *consciously accepts* the risk of building with one open (recorded).
+- *Decisions:* every decision is =DONE= (the =[/]= cookie reads complete), or the author *consciously accepts* the risk of building with one still =TODO= (recorded). *Implementation-ready gate:* the spec Status cannot move past =draft= to an implementation-ready state while any decision is still =TODO=.
- *APIs:* every external API assumption is verified or listed as a research prerequisite — otherwise the honest verdict is =Needs research=.
- *Self-rubric:* Ready / Ready with caveats / Not ready / Needs research. If it isn't at least =Ready with caveats=, keep drafting.
- *Defer:* log open decisions and vNext items to =todo.org= (v1 work =[#B]=, vNext/someday =[#D]=) — don't leave them only in the spec.
@@ -105,10 +105,14 @@ Then it's ready for =spec-review.org=. Snapshot-vs-living rule: keep the spec li
,#+DATE: <YYYY-MM-DD>
,* Metadata
-| Status | draft |
-| Owner | <name> |
-| Reviewer | <name(s)> |
+| Status | draft |
+|----------+---------------|
+| Owner | <name> |
+|----------+---------------|
+| Reviewer | <name(s)> |
+|----------+---------------|
| Related | [[file:...][task / ticket]] |
+|----------+---------------|
,* Summary
<2-3 sentences: what this is and why it exists.>
@@ -135,13 +139,14 @@ Then it's ready for =spec-review.org=. Snapshot-vs-living rule: keep the spec li
- Bad, because <…>
- Neutral, because <…>
-,* Decisions
-,** <Decision name>
-- State: proposed | accepted | superseded
+,* Decisions [/]
+,** TODO <Decision name>
- Owner / by-when: <name> / <when> (open decisions only)
- Context: <forces>
- Decision: We will <…>
- Consequences: easier <…>; harder <…>
+,*** Discussion (only while the decision is contested / not yet agreed)
+- <ongoing back-and-forth; the decision flips to DONE when agreed>
,* Implementation phases
,** Phase 1 — <smallest noun phrase>