aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-20 15:08:32 -0400
committerCraig Jennings <c@cjennings.net>2026-05-20 15:08:32 -0400
commite6b27ba85c0a5adc5925fc08165ce58beb4d8800 (patch)
tree8bcb3f111bd9f55fbb43634f5ce0f3cb902c1046
parente9bd073b8133c50a2df425196e32fdf3f5c4c2bd (diff)
downloadrulesets-e6b27ba85c0a5adc5925fc08165ce58beb4d8800.tar.gz
rulesets-e6b27ba85c0a5adc5925fc08165ce58beb4d8800.zip
docs(design): record task-review Shape B revision
The spec recommended an Emacs keystroke mode (task-review.el). Implementation went the other way — a pure Claude workflow, no elisp — because the interactive mode would couple a rulesets-owned file to archsetup's init.el, and the daily Claude touchpoint already exists in daily-prep. I added a Revision section at the top recording the change: pure workflow, rulesets-owned, the task-review.org / open-tasks.org name swap, the staleness --list selection, and the startup nudge promoted to template-level. The elisp architecture and ERT sections stay as a record of the abandoned approach, flagged superseded. The todo task moves to DOING with per-component status: everything but the smoke test is done, and component 3 (the elisp) is dropped.
-rw-r--r--docs/design/task-review.org42
-rw-r--r--todo.org17
2 files changed, 37 insertions, 22 deletions
diff --git a/docs/design/task-review.org b/docs/design/task-review.org
index 79b7d4e..6c6dac7 100644
--- a/docs/design/task-review.org
+++ b/docs/design/task-review.org
@@ -6,9 +6,25 @@
* Metadata
- Date: 2026-05-16
-- Status: Draft
+- Status: Implemented — revised, see *Revision* below
- Supersedes: =wrap-it-up.org= date-coverage scan (lines 177-213 at design time)
+* Revision — 2026-05-20: Shape B (pure Claude workflow), rulesets-owned
+
+The implementation reversed the recommended approach. What actually shipped:
+
+- *Pure Claude workflow, not Emacs elisp.* The "Recommended" approach below (custom =org-agenda= + keystroke minor mode in =task-review.el=) was dropped. The interactive elisp would have to be =require='d into Craig's running Emacs — an =init.el= line in the =archsetup= repo — which couples a rulesets-owned file to another repo's config. Since rulesets owns workflows and Craig already runs a daily Claude session (daily-prep), the friction objection that killed the "/task-review Claude command" alternative no longer holds. The habit is now =claude-templates/.ai/workflows/task-review.org=: Claude surfaces the batch, walks each task, and stamps =:LAST_REVIEWED:= via edits. No elisp, no =task-review.el=, no ERT — *component 3 and the ERT test surface are dropped*. Everything below that describes =task-review.el=, its exports, keymap, =defcustom= vars, and ERT tests is superseded.
+
+- *Owned entirely by rulesets.* Earlier framing put =task-review.el= in =archsetup/dotfiles/=. With no elisp, archsetup is uninvolved. All references below to =archsetup/dotfiles/common/.emacs.d/lisp/= are void.
+
+- *Name collision resolved.* =task-review.org= already existed as a task-listing + next-pick workflow. It was renamed to =open-tasks.org= (keeping its triggers minus "task review"); the new hygiene habit took the =task-review.org= name and the "task review" trigger.
+
+- *Selection.* =task-review-staleness.sh= (component 1) gained a =--list <file> <N>= mode that emits the N oldest-unreviewed tasks for the workflow to walk — one source of truth for both the count (wrap-up/startup) and the batch (the habit).
+
+- *Startup nudge promoted to template-level.* The open question "promote the startup reminder to template-level?" is resolved yes: it lives in template =startup.org= (Phase A count, Phase C surface), not the project-only =startup-extras.org=. Shape B distributes the workflow to every project via sync, so the per-project gating no longer applies.
+
+The Problem statement, the rejected-approaches analysis, the selection algorithm, and the state model (=:LAST_REVIEWED:= property) below all still hold. The architecture and testing sections describe the abandoned elisp design — kept as a record of the decision, not as the plan.
+
* Problem
The wrap-up's date-coverage scan flags every open =[#A]= / =[#B]=
@@ -307,22 +323,20 @@ implementation:
* Next Steps
-1. /Implementation/ — direct work (not =start-work=; the design is
- the planning artifact). Order:
+Implementation status (revised to Shape B — see *Revision*):
- a. Extract staleness script (=claude-templates/.ai/scripts/task-review-staleness.sh=) with bats tests.
- b. Edit =wrap-it-up.org= to call the staleness script with threshold 30.
- c. Author =task-review.el= in =archsetup/dotfiles/common/.emacs.d/lisp/= with ERT tests.
- d. Author =task-review.org= workflow in =claude-templates/.ai/workflows/= and add INDEX entry.
- e. Add startup-extras block to =rulesets/.ai/project-workflows/startup-extras.org=.
- f. Smoke test in =rulesets/= against live =todo.org=.
+- [X] =task-review-staleness.sh= + bats (=--list= and count modes).
+- [X] =wrap-it-up.org= health check at threshold 30.
+- [X] Existing =task-review.org= renamed to =open-tasks.org= (freed the name).
+- [X] New Shape-B =task-review.org= workflow + INDEX entry.
+- [X] Startup nudge in template =startup.org= (Phase A count, Phase C surface), threshold 7.
+- [-] =task-review.el= + ERT — *dropped* (Shape B is a pure workflow).
+- [ ] Smoke test against live =todo.org= — run one real review cycle.
-2. /First cycle/ — run daily for ~2 weeks, gauge whether the habit
- sticks. Adjust =task-review-batch-size= if 7/day feels wrong.
+Then:
-3. /Retire/ — once the habit is established and trusted, the date-
- coverage scan retirement is complete. The review-habit health
- check stays as the watchdog.
+1. /First cycle/ — run daily for ~2 weeks, gauge whether the habit sticks. Adjust the batch size (default 7) if it feels wrong.
+2. /Retire/ — once the habit is established and trusted, the date-coverage scan retirement is complete. The review-habit health check stays as the watchdog.
* References
diff --git a/todo.org b/todo.org
index 4b76ffd..69604e7 100644
--- a/todo.org
+++ b/todo.org
@@ -7,17 +7,18 @@ Project-scoped (not the global =~/sync/org/roam/inbox.org= list).
* Rulesets Open Work
-** TODO [#A] Implement task-review daily-habit per spec
+** DOING [#A] Implement task-review daily-habit per spec
Spec: [[file:docs/design/task-review.org]]
-Retires =wrap-it-up.org='s date-coverage scan and replaces it with a daily 5-min keystroke-driven review (N=7 oldest-unreviewed top-level =[#A]= / =[#B]= / =[#C]= tasks per session, ~12-day rotation). Six components per the spec's Next Steps:
+Retires =wrap-it-up.org='s date-coverage scan and replaces it with a daily list-hygiene review (N=7 oldest-unreviewed top-level =[#A]= / =[#B]= / =[#C]= tasks per session, ~12-day rotation). Built as a pure Claude workflow — Shape B, no elisp; see the spec's Revision section for why the elisp approach was dropped.
-1. Extract =task-review-staleness.sh= to =claude-templates/.ai/scripts/= with bats tests.
-2. Replace date-coverage scan in =wrap-it-up.org= (lines 177-213) with the health-check block.
-3. Author =task-review.el= in =archsetup/dotfiles/common/.emacs.d/lisp/= with ERT tests.
-4. Author =task-review.org= workflow in =claude-templates/.ai/workflows/= + INDEX entry.
-5. Add startup-nudge block to =.ai/project-workflows/startup-extras.org=.
-6. Smoke test against live =todo.org=.
+Status:
+1. [X] =task-review-staleness.sh= + bats (count + =--list= modes).
+2. [X] =wrap-it-up.org= health check (threshold 30).
+3. [-] =task-review.el= — dropped (Shape B is a pure workflow, not an Emacs mode).
+4. [X] New =task-review.org= workflow + INDEX entry (the existing listing workflow was renamed to =open-tasks.org= to free the name).
+5. [X] Startup nudge in template =startup.org= (threshold 7), not the project-only startup-extras layer.
+6. [ ] Smoke test against live =todo.org= — run one real review cycle.
Triggered by: 2026-05-16 brainstorm on retiring the date-coverage scan.