From ac693a6b7fa7abe88f7778f8e793d5ddfd32f24e Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Tue, 2 Jun 2026 21:31:37 -0500 Subject: feat(lint-org): reconcile follow-ups on write instead of appending 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. --- todo.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'todo.org') diff --git a/todo.org b/todo.org index 6bcc095..0c2daf3 100644 --- a/todo.org +++ b/todo.org @@ -41,7 +41,8 @@ CLOSED: [2026-06-02 Tue] :END: Have the =task-audit= workflow chain a =task-review= pass as its final phase, so a freshly-audited list also gets the lighter staleness/honesty sweep without a second invocation. The legend already notes the division of labor — task-audit assigns and refreshes tags, task-review keeps them honest in passing — so running task-review at the tail of task-audit closes the loop in one pass. Edit =claude-templates/.ai/workflows/task-audit.org= (and the synced mirror) to add the final phase; check whether =open-tasks.org= already invokes task-review so the chaining stays consistent. -** TODO [#C] lint-followups drift — reconcile-on-write + audit dead-link reaping :feature:solo: +** DONE [#C] lint-followups drift — reconcile-on-write + audit dead-link reaping :feature:solo: +CLOSED: [2026-06-02 Tue] :PROPERTIES: :LAST_REVIEWED: 2026-06-02 :END: -- cgit v1.2.3