aboutsummaryrefslogtreecommitdiff
path: root/.claude
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-20 23:28:47 -0400
committerCraig Jennings <c@cjennings.net>2026-06-20 23:28:47 -0400
commitf6dde4e0fe21022966196e19d535f2bb7abcfcdb (patch)
tree5bb56e120e0be84e66eaf82bb8b12c1837b0747e /.claude
parent76e55591e2a66e8ef42ee6e4535882545ee3d33b (diff)
downloadrulesets-f6dde4e0fe21022966196e19d535f2bb7abcfcdb.tar.gz
rulesets-f6dde4e0fe21022966196e19d535f2bb7abcfcdb.zip
feat(lint-org): flag level-2 dated headers as a completion defect
A `** <YYYY-MM-DD> …` heading carries no keyword, so todo-cleanup's --archive-done can never archive it and task-review drops it from selection. The new level-2-dated-header check (custom, like org-table-standard) emits a judgment item per offending heading so the wrap-up sweep routes it to the next morning's review. Judgment-only, never auto-fixed: the repair needs a DONE-vs-CANCELLED call and the original heading text. Three ERT cases cover it (flagged at level 2, clean for DONE+CLOSED, clean for a level-3 dated entry).
Diffstat (limited to '.claude')
-rw-r--r--.claude/commands/lint-org.md1
1 files changed, 1 insertions, 0 deletions
diff --git a/.claude/commands/lint-org.md b/.claude/commands/lint-org.md
index 953629c..64ec967 100644
--- a/.claude/commands/lint-org.md
+++ b/.claude/commands/lint-org.md
@@ -50,6 +50,7 @@ Out of scope (refuse, don't try to lint):
| `invalid-fuzzy-link` | (1) Repair to a `[[*Heading]]` ref if a similar heading exists. (2) Drop to `=verbatim label=` text. (3) Skip. |
| `misplaced-heading` *(verbatim-asterisk case)* | (1) Strip asterisks and rephrase to preserve semantics. (2) Convert surrounding markup to `~code~` style. (3) Skip. |
| `suspicious-language-in-src-block` | (1) Emit an Emacs init one-liner that registers the language. (2) Change the block label to `text` or `example`. (3) Skip. |
+| `level-2-dated-header` *(custom check, not org-lint)* | A `** <YYYY-MM-DD> …` heading is a completion defect per `todo-format.md` (no keyword, so `--archive-done` can't archive it). (1) Convert to `DONE`/`CANCELLED` + `CLOSED:`, keeping the heading text — the usual fix. (2) Demote to `***` if it's really a mis-leveled sub-entry. (3) Skip (a dated-log-format org file where `**` dates are intentional). |
| anything else | Surface the raw `org-lint` message and ask the user how to proceed. |
## Phase A — Run the script