<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/.ai/workflows/task-audit.org, 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-06-12T12:30:57+00:00</updated>
<entry>
<title>docs(task-audit): add tag-vocabulary enforcement and verify-then-close</title>
<updated>2026-06-12T12:30:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-12T12:30:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=fbeef0c83b15eb7a82cdb8c2b999e232e4f997b6'/>
<id>urn:sha1:fbeef0c83b15eb7a82cdb8c2b999e232e4f997b6</id>
<content type='text'>
Two Phase C behaviors, both surfaced auditing an Emacs-config todo.org. Enforce a project's declared closed tag set (strip tags outside it) where the legend marks the set exhaustive, leaving open-vocabulary projects untouched. For a task whose code shipped but awaits a manual or visual check, file that check under the project's manual-testing parent (dedup first) and close the implementation task, rather than letting "done but unverified" linger half-open.
</content>
</entry>
<entry>
<title>feat(lint-org): reconcile follow-ups on write instead of appending</title>
<updated>2026-06-03T02:31:37+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-03T02:31:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=ac693a6b7fa7abe88f7778f8e793d5ddfd32f24e'/>
<id>urn:sha1:ac693a6b7fa7abe88f7778f8e793d5ddfd32f24e</id>
<content type='text'>
Every run appended a fresh dated "lint-org follow-ups" section with line-number-keyed entries, so the follow-ups file grew an unbounded pile of near-duplicate sections, kept entries whose finding had since resolved, and broke whenever the target file's line numbers shifted. Running an audit against a large todo.org surfaced exactly that drift: dead-link flags pointing at docs that now exist, and three stacked dated runs for one file.

Now lint-org rewrites the current file's section from the current run. Findings that no longer reproduce simply are not re-emitted, re-runs dedupe to one section, and entries key on checker plus message with the line as a trailing annotation, so a finding survives line shifts as the same entry. Other files' sections are left intact, and the strip step tolerates the old dated-header shape so existing follow-ups files migrate on first run. This changes the follow-ups file from an append-only log to the current outstanding findings per file.

task-audit's Phase C link-hygiene step now also reaps a matching dead-link entry when it fixes or verifies the link, scoped strictly to dead-link entries, so the audit and the follow-ups file stop drifting between lint runs.

Five follow-ups tests cover record-by-content, dedupe across runs, drop-on-resolve, and preserve-other-files. Mirrors synced.
</content>
</entry>
<entry>
<title>feat(task-audit): chain a task-review pass as the final phase</title>
<updated>2026-06-03T02:22:43+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-06-03T02:22:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=291103803495cd1937244dc7c993faaaf00023ab'/>
<id>urn:sha1:291103803495cd1937244dc7c993faaaf00023ab</id>
<content type='text'>
A task audit verified the surviving tasks are factually honest but left their relevance and priority untouched, so keeping the list lean still needed a separate task-review run. Added Phase F: after the audit stamps :LAST_AUDIT:, run task-review on the oldest-unreviewed batch in the same pass. The two stay distinct (audit owns facts and :LAST_AUDIT:, review owns relevance and the per-task :LAST_REVIEWED:); chaining just refreshes both markers in one invocation. open-tasks does not invoke task-review, so nothing there needed to change. Mirror synced.
</content>
</entry>
<entry>
<title>feat(workflows): audit-warranted pre-step + priority and tag enforcement</title>
<updated>2026-05-28T13:08:20+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-28T13:08:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=ee7049aaa62d0c38e83f20c0b3796e5eded4ca23'/>
<id>urn:sha1:ee7049aaa62d0c38e83f20c0b3796e5eded4ca23</id>
<content type='text'>
Two changes land together because each is broken without the other.

open-tasks.org gains a new Phase A.1, evaluated only in Next Mode. The
phase reads :LAST_AUDIT: from notes.org and walks five state signals
(reminder/task mismatch, passed scheduled date, "waiting on X" matches a
shipped X, dead file: link, sub-task &gt;75% DONE coverage). If the temporal
threshold of 14 days trips, or any signal fires, Next Mode offers a
task-audit run before producing the recommendation. Item 1 in the offer
is "run task-audit first" per the recommendation-at-item-1 convention.

task-audit.org gains two pieces. Phase C now enforces priority and
type-tag presence per the project's legend, applies the [#A] dating rule
from that legend, and re-assesses :quick: and :solo: from reconciled
facts. Unambiguous calls land autonomously. Ambiguous ones flag
NEEDS-USER instead of being guessed. A new Phase E stamps :LAST_AUDIT:
on completion.
</content>
</entry>
<entry>
<title>chore(ai): resync workflow and script mirror with canonical</title>
<updated>2026-05-23T18:02:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-23T18:02:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=3f802eb819bc9be572b230ac1bd142b7ce13d87f'/>
<id>urn:sha1:3f802eb819bc9be572b230ac1bd142b7ce13d87f</id>
<content type='text'>
The .ai/ mirror lagged claude-templates/.ai/ for three workflows (task-audit, task-review, triage-intake) and two scripts (screenshot.py and its test) — earlier commits updated the canonical copies without resyncing the mirror in the same commit. The startup rsync caught it up; this commit tracks the result so the two stay identical.
</content>
</entry>
<entry>
<title>feat(workflows): add task-audit content-reconciliation workflow</title>
<updated>2026-05-22T23:17:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-22T23:17:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=b3325f71b91d08ee1d355c926afc7edb3bb9b015'/>
<id>urn:sha1:b3325f71b91d08ee1d355c926afc7edb3bb9b015</id>
<content type='text'>
A task audit reconciles each open task's recorded content against reality (sessions, email, chat, ticketing, calendar, recordings) and fixes the stale facts. That's distinct from task-review, which grooms relevance and priority. The two compose: review keeps the list lean, and audit keeps the survivors factually honest. Registered it in the workflow INDEX with its trigger phrases.
</content>
</entry>
</feed>
