<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/.claude/commands/lint-org.md, branch main</title>
<subtitle>Claude Code skills, rules, and language bundles
</subtitle>
<id>https://git.cjennings.net/rulesets/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/rulesets/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/'/>
<updated>2026-07-14T06:27:17+00:00</updated>
<entry>
<title>fix(scripts): stop org table helpers rewriting block content</title>
<updated>2026-07-14T06:27:17+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-14T06:27:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=951b6fc63129577a80e1d46f46eeafff005fe636'/>
<id>urn:sha1:951b6fc63129577a80e1d46f46eeafff005fe636</id>
<content type='text'>
Both helpers treated any pipe-led line as a table row, so ASCII art in an example block got mangled into a bordered table (a work file took a 1949-line reformat on 2026-07-09). The scanners now track the open block's type and skip its content. Only the matching end marker closes a block, so a literal end_src quoted inside an example block can't re-expose it.

The deeper cause was wrap-org-table's load-time dispatch: it fired when lint-org merely required the library, running the reformatter over files lint-org was only asked to report on. It now dispatches only when named as the entry script. lint-org's CLI is also report-only by default now. Writes require --fix, and the wrap-up workflow and lint command pass it.
</content>
</entry>
<entry>
<title>feat(lint-org): flag level-2 dated headers as a completion defect</title>
<updated>2026-06-21T03:28:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-21T03:28:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=f6dde4e0fe21022966196e19d535f2bb7abcfcdb'/>
<id>urn:sha1:f6dde4e0fe21022966196e19d535f2bb7abcfcdb</id>
<content type='text'>
A `** &lt;YYYY-MM-DD&gt; …` 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).
</content>
</entry>
<entry>
<title>feat(lint-org): add /lint-org command + file design spec</title>
<updated>2026-05-14T23:46:32+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-14T23:46:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=9f62a7cadf37e3f453efbb0cdf253bcafb1b6393'/>
<id>urn:sha1:9f62a7cadf37e3f453efbb0cdf253bcafb1b6393</id>
<content type='text'>
A new /lint-org command at .claude/commands/lint-org.md orchestrates
the elisp script: invokes it, parses the stdout plist stream, walks
each judgment item with the user via inline numbered options (per
interaction.md, no popup), and reports pre/post-pass deltas. Two
modes: interactive (default, walks judgments now) and mechanical-only
(defers them to a follow-ups file via --followups-file).

The spec at .ai/specs/lint-org-skill-spec.md is the design doc that
motivated this work, captured from yesterday's manual 55→1 lint pass
on todo.org.

todo.org gains a [#A] entry pointing at the spec.
</content>
</entry>
</feed>
