diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-20 15:08:32 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-20 15:08:32 -0400 |
| commit | e6b27ba85c0a5adc5925fc08165ce58beb4d8800 (patch) | |
| tree | 8bcb3f111bd9f55fbb43634f5ce0f3cb902c1046 | |
| parent | e9bd073b8133c50a2df425196e32fdf3f5c4c2bd (diff) | |
| download | rulesets-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.org | 42 | ||||
| -rw-r--r-- | todo.org | 17 |
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 @@ -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. |
