aboutsummaryrefslogtreecommitdiff
path: root/claude-rules/todo-format.md
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-20 23:12:02 -0400
committerCraig Jennings <c@cjennings.net>2026-06-20 23:12:02 -0400
commit8a50088b063a7e0e7a79e8f7aa799ee6185fd814 (patch)
treeaa8f3fda0bc0069f5d425f47417d269deb91a45e /claude-rules/todo-format.md
parentd9d3be90921d57577115fc778542219bfebe72ab (diff)
downloadrulesets-8a50088b063a7e0e7a79e8f7aa799ee6185fd814.tar.gz
rulesets-8a50088b063a7e0e7a79e8f7aa799ee6185fd814.zip
docs: level-2 VERIFY completes task-shaped, not as a dated header
The old rule dated a resolved VERIFY at every depth, including the top level. A level-2 dated header carries no keyword, so todo-cleanup's --archive-done can never archive it and task-review drops it from selection. Now a top-level VERIFY closes like any other top-level task (DONE/CANCELLED + CLOSED:), and dated rewrites are reserved for level 3 and deeper. Updated the rule and the three places that encoded the old behavior: todo-format.md, respond-to-cj-comments.md, and process-inbox.org. Also repaired two pre-existing level-2 dated headers.
Diffstat (limited to 'claude-rules/todo-format.md')
-rw-r--r--claude-rules/todo-format.md54
1 files changed, 34 insertions, 20 deletions
diff --git a/claude-rules/todo-format.md b/claude-rules/todo-format.md
index b1fb57b..b9e93bb 100644
--- a/claude-rules/todo-format.md
+++ b/claude-rules/todo-format.md
@@ -130,7 +130,7 @@ becomes
The agenda view (`org-agenda`) shows entries at the section + top-task level. Letting `**` tasks stay task-shaped preserves their visibility as "things that recently shipped." Letting `***+` sub-tasks flip to dated entries keeps the agenda from being clogged with a long list of completed sub-tasks at every depth — those become history within their parent instead.
-`VERIFY` is the documented exception: it follows the dated-rewrite rule at **all** depths (including `**`), because a resolved VERIFY is an answered question rather than a finished task. See the VERIFY section below.
+`VERIFY` follows the dated-rewrite rule at `***` and deeper, the same as any sub-task. At `**` it does *not*: a top-level VERIFY completes task-shaped — a `DONE`/`CANCELLED` keyword plus a `CLOSED:` line, exactly like a top-level `TODO`. Dated headers never appear at `**`. Level 2 always carries a terminal keyword; dated headers are a `***`-and-deeper shape only. See the VERIFY section below.
## VERIFY tasks
@@ -191,19 +191,31 @@ The sibling rule is the active force that keeps `todo.org` flat. Without
it, VERIFYs accumulate one level deeper than their trigger every time —
turning a clean parent tree into a long pole of nested sub-headings.
-### Completion — dated rewrite + content replacement
+### Completion — depth decides the heading shape
-When a VERIFY resolves, **rewrite the heading and body together** at the
-same depth — regardless of whether the VERIFY is at `**` or `***`:
+When a VERIFY resolves, **rewrite the heading and body together**. The body
+replacement is the same at every depth (step 2 below); the heading shape
+depends on the VERIFY's level, mirroring the depth-based rule for ordinary
+tasks — dated entries at `***` and deeper, terminal keyword at `**`.
-1. **Replace the heading.** Drop the `VERIFY` keyword (and any priority
- cookie / tags) and replace with a timestamp + short description:
+1. **Replace the heading — by depth.**
- *** 2026-05-15 Fri @ 14:00:00 -0500 <what was answered or done>
+ - **At `***` and deeper — dated event-log entry.** Drop the `VERIFY`
+ keyword (and any priority cookie / tags) and replace with a timestamp +
+ short description:
- Generate the timestamp with `date "+%Y-%m-%d %a @ %H:%M:%S %z"`.
- Match the original depth (a `**` VERIFY becomes `** YYYY-MM-DD ...`;
- a `***` VERIFY becomes `*** YYYY-MM-DD ...`).
+ *** 2026-05-15 Fri @ 14:00:00 -0500 <what was answered or done>
+
+ Generate the timestamp with `date "+%Y-%m-%d %a @ %H:%M:%S %z"`.
+
+ - **At `**` — terminal keyword, like any top-level task.** Change
+ `VERIFY` to `DONE` (answered / check passed) or `CANCELLED` (abandoned),
+ keep the heading text, priority cookie, and tags, and add a
+ `CLOSED: [YYYY-MM-DD Day]` line. Never a dated heading — a `**` dated
+ header is a defect; repair it to `DONE`/`CANCELLED` + `CLOSED:`.
+
+ ** DONE [#B] <original VERIFY topic> :tags:
+ CLOSED: [2026-05-15 Fri]
2. **Replace the body.** Drop the original question/instruction prose and
replace with either:
@@ -213,16 +225,18 @@ same depth — regardless of whether the VERIFY is at `**` or `***`:
instruction or pending-decision marker — what was done, when, where
the artifact lives).
-The completed VERIFY becomes an in-place event log entry. The original
-question is preserved by the dated heading + body shape; anyone scanning
-the agenda or `git log` can see what was asked and what landed.
-
-**Note on the top-level case.** Regular `**` DONE tasks stay task-shaped
-with a `DONE` keyword + `CLOSED:` line per *Completion — depth-based*
-above. VERIFYs at `**` are the exception — they convert to dated log
-entries on completion because a resolved VERIFY isn't a "done task," it's
-an answered question. The dated-rewrite rule wins for VERIFYs at all
-depths.
+Either way the completed VERIFY records what was asked and what landed: at
+`***` and deeper as a dated event-log entry, at `**` as a `DONE`/`CANCELLED`
+task whose body holds the answer. Anyone scanning the agenda or `git log`
+can see both.
+
+**Note on the top-level case.** A `**` VERIFY completes exactly like a `**`
+`TODO`: a `DONE`/`CANCELLED` keyword + `CLOSED:` line, with the answer or
+action in the body. The earlier habit of dating a resolved top-level VERIFY
+— treating "answered question, not a finished task" as license for a `**`
+dated header — is retired. It put dated headers at level 2, where the agenda
+truncates them out of a clean keyword scan. Dated rewrite is for `***` and
+deeper only; `**` always carries a terminal keyword.
### Don't leave stale placeholders