aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-30 13:30:19 -0500
committerCraig Jennings <c@cjennings.net>2026-05-30 13:30:19 -0500
commit82e99ff8a4eb6d5aaba6ee02da3b5318a73b2125 (patch)
tree2a0129bf7f8e7b3e68cb61f4860da72a30f0e576
parenta6313954fc297ee4a6c1c42ba903730a364cd5df (diff)
downloadrulesets-82e99ff8a4eb6d5aaba6ee02da3b5318a73b2125.tar.gz
rulesets-82e99ff8a4eb6d5aaba6ee02da3b5318a73b2125.zip
chore(ai): refresh session log and workflow-state marker
-rw-r--r--.ai/notes.org2
-rw-r--r--.ai/session-context.org69
2 files changed, 70 insertions, 1 deletions
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.