aboutsummaryrefslogtreecommitdiff
path: root/.ai/workflows/spec-review.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-28 03:22:25 -0500
committerCraig Jennings <c@cjennings.net>2026-05-28 03:22:25 -0500
commit55adf6e304d1325861710c0475c3db377d4c0506 (patch)
treeb4f61d58cad586a821c9c9e89862507446f5efc7 /.ai/workflows/spec-review.org
parente83e323148e1c4295233a25b1375f661cc65fbef (diff)
downloadrulesets-55adf6e304d1325861710c0475c3db377d4c0506.tar.gz
rulesets-55adf6e304d1325861710c0475c3db377d4c0506.zip
feat(workflows): add iteration-history requirement to spec workflows
Specs reviewed under either workflow now carry a bottom =Review and iteration history= section. Each entry is an org subheading with a compound id (timestamp, contributor, role) plus What/Why/Artifacts body fields. The id is opaque. Timestamp, contributor, and role concatenate without implying any decision ordering. spec-review.org adds the gate item, the entry-shape spec, and a "Preserve iteration provenance" principle. spec-response.org adds the matching Phase 4 step and a "history explains provenance" principle. Canonical and mirror updated together.
Diffstat (limited to '.ai/workflows/spec-review.org')
-rw-r--r--.ai/workflows/spec-review.org22
1 files changed, 21 insertions, 1 deletions
diff --git a/.ai/workflows/spec-review.org b/.ai/workflows/spec-review.org
index 2bdcf73..d0c49c2 100644
--- a/.ai/workflows/spec-review.org
+++ b/.ai/workflows/spec-review.org
@@ -29,7 +29,8 @@ A review is complete when:
1. *The implementation-readiness gate has been evaluated* and a rubric label assigned (=Ready= / =Ready with caveats= / =Not ready= / =Needs research=).
2. *If ready:* the user is told plainly ("This spec is implementation-ready. I have no further blocking review notes."), and the review stops — no churn for its own sake.
3. *If not ready:* a =<spec>-review.org= file is written next to the spec, in the standard structure, with every finding specific and actionable (current behavior named, risk explained, change recommended, blocking-or-not stated).
-4. *Deferred work is logged* to =todo.org= (v1 = =[#B]=, vNext/someday = =[#D]=), not left only in chat.
+4. *The spec's review history is updated* with who reviewed it, when, which iteration it was, what changed or was recommended, and why.
+5. *Deferred work is logged* to =todo.org= (v1 = =[#B]=, vNext/someday = =[#D]=), not left only in chat.
*Measurable validation:* after reading the review, an implementer knows exactly what to decide or change before starting, and an author running spec-response can give every finding an accept/modify/reject without guessing what it means.
@@ -155,6 +156,22 @@ The most useful reviews move a spec from =Not ready= to =Ready with caveats= or
Finding severity maps to blocking power: *high-priority findings block =Ready=* — they hold the rubric at =Not ready= (or =Ready with caveats= if the author accepts and tracks them) until dispositioned; *medium-priority findings are the author's discretion* and don't block. State the blocking status on each finding so the author running spec-response knows which ones gate the rubric.
+Then update the spec's review history. Specs should carry a bottom section named =Review and iteration history= (or the nearest existing equivalent) that tracks each material author/reviewer pass. Add a concise entry for this review even when the spec is ready and no review file is written.
+
+Each entry is an org subheading with a compound id followed by three body fields.
+
+Heading format: =YYYY-MM-DD Day @ HH:MM:SS -ZZZZ — Contributor — Role=
+
+The timestamp + contributor + role concatenate as an opaque id — nothing more should be read into it. Timestamp matches the project's todo-format event-log convention and gives natural temporal sort without implying any decision ordering. Contributor uses short parenthetical project context where session matters (e.g. =Claude Code (linear-emacs)=, =Claude Code (rulesets)=, =Codex=, =Craig Jennings=). Role can be compound (e.g. =reviewer + responder=) when one pass fused multiple roles. Author, reviewer, responder, verifier, and researcher are the standard role names.
+
+Body fields:
+
+- *What changed or was recommended:* high-signal summary, not a duplicate of the whole review.
+- *Why:* the decision pressure or rationale that caused the contribution.
+- *Artifacts:* links to the review file, response/disposition section, commits, task IDs, or source checks when useful.
+
+If the spec has no such section, add it at the bottom. Keep the history short and cumulative; it is provenance for future readers, not a session transcript.
+
Then log deferred work to =todo.org=: v1 implementation = =[#B]= (unless urgent or speculative); vNext/someday = =[#D]=. Tag =:feature:= / =:bug:= / =:refactor:= / =:test:= / =:quick:= / =:solo:= only when accurate. Don't leave important deferred decisions only in chat.
* Principles to Follow
@@ -173,6 +190,9 @@ The spec says fetched comments render as subheadings but doesn't define whether
** Decide readiness first, critique second
The gate is the product of the review. A long critique on a spec that's actually ready just creates churn; a "looks fine" on one that isn't ships hidden decisions.
+** Preserve iteration provenance
+Future reviewers and implementers need to know not just the current decision, but how the spec got there: how many review/response loops happened, who contributed, what they changed or recommended, and why. Keep that record in the spec itself under =Review and iteration history= so the trail survives deleted review files, chat loss, and agent handoffs.
+
** Be strict about ownership
Especially for org-mode features: a user treats visible text as editable unless the representation says otherwise. Make generated-vs-editable explicit.