aboutsummaryrefslogtreecommitdiff
path: root/claude-rules/todo-format.md
diff options
context:
space:
mode:
Diffstat (limited to 'claude-rules/todo-format.md')
-rw-r--r--claude-rules/todo-format.md33
1 files changed, 33 insertions, 0 deletions
diff --git a/claude-rules/todo-format.md b/claude-rules/todo-format.md
index 55530de..5e9ca32 100644
--- a/claude-rules/todo-format.md
+++ b/claude-rules/todo-format.md
@@ -33,6 +33,37 @@ When a project's `todo.org` lacks the section, add it before filing or
grading further tasks — propose the priority semantics and tag set from the
project's existing usage, and confirm with Craig.
+### Hard definitions: `:solo:` and `:quick:` (fixed across projects)
+
+A project's scheme may add or rename its other tags, but these two carry
+fixed definitions everywhere, because autonomous execution
+(work-the-backlog / the no-approvals speedrun) reads `:solo:` as its
+eligibility gate and trusts the author's tag rather than re-deriving
+autonomy at run time.
+
+- **`:solo:` — autonomy.** The task can be completed *and verified* without
+ Craig's involvement beyond at most one or two quick decisions that can be
+ stated and answered before work starts. No open design question, no
+ "weigh these approaches," no waiting on Craig mid-task. Three gates, all
+ must hold: *buildable* (the agent has the capability and access),
+ *verifiable by the agent* (an objective or local check it can run itself —
+ handing off a residual human-in-the-loop confirmation as a structured
+ manual-testing reminder does not disqualify), and *no deliberation* (a
+ quick, upfront-answerable factual question is allowed — it gets batched
+ into the speedrun's pre-flight Q&A; a genuine design or preference call
+ is not). A wrong `:solo:` is worse than none: it tells Craig he can hand
+ the task off and walk away when he can't.
+- **`:quick:` — effort hint only.** Likely 30 minutes or less from start
+ through verification. Informational, for batching and estimating a run's
+ duration; never an eligibility gate. `:quick:` and `:solo:` are
+ orthogonal — a bounded refactor can be `:solo:` but slow; a five-minute
+ change hinging on a preference call is `:quick:` but not `:solo:`.
+
+Both tags are applied at task creation and **re-checked as a mandatory
+step** in the task-review and task-audit workflows, so the run-time gate
+can trust the tag. A review or audit that skips the `:solo:`/`:quick:`
+assessment is incomplete.
+
### Bug priority from severity × frequency (mandatory where a codebase exists)
Some projects carry a codebase — source the project maintains under version
@@ -172,6 +203,8 @@ becomes
*** 2026-05-15 Fri @ 12:58:08 -0500 Wired yasnippet for universal availability
+**Enforcement.** This is applied at close time by whoever closes the task, but an interactive org close (`org-log-done` flips the keyword to `DONE` and stamps `CLOSED:`) never applies the dated rewrite, so level-3+ closes accumulate as `DONE` keywords. `todo-cleanup.el --convert-subtasks` (run in the `clean-todo` and wrap-up cleanup passes) normalizes them mechanically: it rewrites any level-3+ `DONE`/`CANCELLED`/`FAILED` heading into the dated form above, pulling the timestamp from the `CLOSED` cookie and keeping the heading text verbatim (a batch tool can't reliably past-tense a title — polish wording by hand where it matters). `lint-org.el` flags any that slip through (checker `subtask-done-not-dated`). So the depth rule holds even when tasks are closed interactively rather than by an agent applying this section.
+
### Why depth-based
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.