From 82e99ff8a4eb6d5aaba6ee02da3b5318a73b2125 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sat, 30 May 2026 13:30:19 -0500 Subject: chore(ai): refresh session log and workflow-state marker --- .ai/notes.org | 2 +- .ai/session-context.org | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 .ai/session-context.org diff --git a/.ai/notes.org b/.ai/notes.org index 062af89..216712f 100644 --- a/.ai/notes.org +++ b/.ai/notes.org @@ -79,6 +79,6 @@ Format: Markers maintained by workflows to record when they last ran. Read by other workflows that gate their behavior on freshness. :LAST_AUDIT: 2026-05-28 -:LAST_INBOX_PROCESS: 2026-05-29 +:LAST_INBOX_PROCESS: 2026-05-30 Format: one =:MARKER: YYYY-MM-DD= line per workflow. Workflows overwrite their own marker on completion. diff --git a/.ai/session-context.org b/.ai/session-context.org new file mode 100644 index 0000000..95e95c2 --- /dev/null +++ b/.ai/session-context.org @@ -0,0 +1,69 @@ +#+TITLE: Session — lint-followups inbox pass +#+DATE: 2026-05-30 + +* Summary + +** Active Goal +** Decisions +** Data Collected / Findings +** Files Modified +** Next Steps + +* Session Log + +** 2026-05-30 07:30 CDT — startup + inbox + +Startup ran clean: both repos current, no crashed session, no reminders/pending decisions, no cross-agent messages, no stale tasks, language bundle clean. One inbox item: =lint-followups.org=, five lint findings on =todo.org= from the lint-org pipeline (script source). + +Triaged the five against the actual lines: +- 1213 invalid-custom-id-link — link points to nonexistent CUSTOM_ID =#16 Generic agent runtime support=; target heading (1165) has no CUSTOM_ID. Real. Fix: fuzzy heading link. +- 1176, 2429 obsolete-properties-drawer — two =LAST_REVIEWED= drawers sit at the bottom of their task bodies, detached from the heading, so org treats them as inert text. Real. Fix: relocate each drawer to directly under its heading (1165 and 2415). +- 2371, 1718 misplaced-heading — both flag verbatim org markup inside prose (=** DONE=, =** Startup Pull Ordering=). Verbatim-marker false-positive class (seen 2026-05-25). No change. + +Craig chose: fix the 3 real findings, dismiss the 2 false positives, clear the inbox file in one commit. + +Applied: relocated both =LAST_REVIEWED= drawers to directly under their headings (Generic-agent-runtime TODO and Iteration-history-backfill DONE); converted the =#16= custom-id link to a fuzzy heading link. Verified with =lint-org --check todo.org= — the three findings are gone; only the two false-positive misplaced-heading items remain (now at lines 2370/1717). =.ai/session-context.org= stays out of the commit (live anchor, renamed at wrap-up). + +Reconciled (0 behind / 0 ahead), reviewed staged diff inline (Approve, no findings), drafted the commit message, ran =/voice personal= (em-dash fix only), committed as =e305924= "chore(todo): fix lint findings on todo.org" — todo.org + inbox deletion. Author confirmed Craig Jennings. Inbox now empty. Stamped =:LAST_INBOX_PROCESS: 2026-05-30= in notes.org. Pushed to origin/main (=0c16004..e305924=) after a clean pre-push reconcile (0 behind, 1 ahead). + +** 2026-05-30 ~12:47 CDT — second inbox pass (drill-to-anki handoffs) + +Checked inbox on Craig's request. Two handoffs had arrived from health + work, both about drill-to-anki. Discovered the work session had committed 80e76cb + 23d87c1 to rulesets cross-project (drill-deck-review workflow + drawer-stripping script extension); already integrated, HEAD was at 23d87c1. + +Health handoff-1: two drill-to-anki default tweaks. Craig picked option 1 (implement now, raw basename for deck name; file work's helper scripts as a [#C] TODO). + +Implemented handoff-1 TDD-style: wrote test_drill_to_anki.py red-first (genanki stubbed in sys.modules so the uv-only dep doesn't block import), then changed default_output_path → ~/sync/phone/anki/ and default_deck_name → raw input basename (dropped title_from_org as now-dead). Updated docstring + arg help. Mirror-synced, sync-check clean, full suite green (331/1skip + 54 hooks + 24 + 23 ERT + bats). Committed 038d59b (feat(drill-to-anki): ...) — LOCAL, not pushed yet. + +Mid-work, a burst of newer files arrived from work (12:51, 12:57): drill-deck-stats.py, drill-deck-diff-ids.py, drill-deck-sync wrapper, an updated drill-deck-review.org, and two notes. The 12:51 follow-up says Craig GREEN-LIT all three scripts on the work side and sent an apply-ready bundle (with explicit rulesets-side apply instructions). The 12:57 note adds a title-audit tweak to stats.py + the workflow. + +CONFLICT: the bundle's "green-lit, install it" contradicts the "file as TODO" Craig picked here minutes earlier. Holding — surfacing to Craig before applying. Also flagged: handoff-1's 1b change (deck name = basename) already neutralizes the #+TITLE org-drill-jargon leak for the default path, overlapping work's title-audit. + +Working tree currently holds the premature [#C] TODO (todo.org) + docs/design preservation of the two earlier scripts, pending Craig's decision on the bundle. + +*** Resolution: Craig said "incorporate any flashcard items" — apply the bundle. + +Installed the three scripts (drill-deck-stats.py, drill-deck-diff-ids.py, drill-deck-sync) to canonical + mirror, chmod +x. Replaced drill-deck-review.org with the bundle version (Helper Scripts section, Deck-title subsection, script refs in phases). Reconciled the workflow's stale output-path prose: it claimed drill-to-anki.py defaults to ~/sync/org/drill/, which 038d59b changed to ~/sync/phone/anki/ — fixed lines 37, 253-256, and dropped the now-moot Common Mistake about outputting to the script default. Lines 30/32/256 keep ~/sync/org/drill/ where it correctly names the org-source home. + +Added tests: test_drill_deck_stats.py (is_prompt_form pure + CLI clean/dirty/missing-file), test_drill_deck_diff_ids.py (card_id_map + CLI identical/dropped-id), drill-deck-sync.bats (no-args, missing-file, stats-gate-failure). 11 pytest + 3 bats, all green. Removed the premature [#C] TODO (todo.org back to committed state) and the docs/design preservation. sync-check clean, full suite 342/1skip + 54 hooks + 24 + 23 ERT + bats green. Deleted the 4 inbox bundle files; inbox empty. + +Committed 0234e52 (chore(scripts): ...). Pushed 038d59b + 0234e52 together: =23d87c1..0234e52= on origin/main after clean pre-push reconcile (0 behind, 2 ahead). + +Work's follow-up said "no additional follow-ups open," so no reply sent (accepted handoff). The workflow output-path reconciliation propagates to work via the normal rsync on their next startup. + +Still uncommitted (session housekeeping for wrap-up): notes.org :LAST_INBOX_PROCESS: stamp, this session-context.org. + +** 2026-05-30 ~13:25 CDT — /add-tests for the flashcard + untested scripts + +Craig ran /add-tests "for all those scripts if they need it" + asked which other scripts lack tests. Inventory: every script under .ai/scripts/ maps to a test except cross-project-broadcast.py and daily-prep-agenda.el (zero), and drill-to-anki.py was only partially covered (default helpers only). Craig picked option 3 (everything). + +Wrote, TDD-verified each batch: +- test_drill_to_anki.py extended +22: parse, strip_org_metadata, section_to_tag, escape_html, stable_id. build/make_model skipped (genanki framework glue). No bugs surfaced. +- test_drill_deck_stats.py +2 (missing-title WARN, PROPERTIES-mismatch WARN), test_drill_deck_diff_ids.py +1 (appeared-IDs note path). +- test_cross_project_broadcast.py new (12): is_broadcastable, discover (SEARCH_ROOTS monkeypatched to tmp tree), sender_project, inbox_send_path. +- test-daily-prep-agenda.el new (15 ERT): dp-iso-date, dp-bucket (clock pinned via dynamic let), dp-format-entry, dp-collect end-to-end on a temp org file. + +Testability refactor: daily-prep-agenda.el's batch entrypoint fired on any load, blocking ERT. Gated it behind dp--cli-invocation-p (same readable-files check lint-org.el uses). Real-file invocation unchanged; no-arg run now no-ops. + +Verified: sync-check clean, full suite 379/1skip + 54 hooks + 15 + 24 + 23 ERT + bats, all green. Committed a631395 (test(scripts): ...), pushed =0234e52..a631395= after clean reconcile. + +No other scripts lack tests now. The only deliberate coverage gaps: drill-to-anki build/make_model and the drill-deck-sync clean end-to-end path, all of which need uv-resolved genanki and are left to integration. -- cgit v1.2.3