aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-24 00:15:18 -0400
committerCraig Jennings <c@cjennings.net>2026-06-24 00:15:18 -0400
commit278f15430460b3c7e2309381a016bbcfc45f9dc1 (patch)
tree53fc90d34c4cad13e8ce31c3568a8a7e1c35539b
parentf83d4bbe6772c472f10efb0e298116abd6f97922 (diff)
downloadrulesets-278f15430460b3c7e2309381a016bbcfc45f9dc1.tar.gz
rulesets-278f15430460b3c7e2309381a016bbcfc45f9dc1.zip
chore: archive session record + todo cleanup
Wrap of the inbox-consolidation / chime-fix / wrap-teardown / roam-sync session. Archives the session record, stamps the inbox-process marker, and applies todo hygiene (2 completed subtrees archived, one table reflowed to the 120-col standard). Claude-Session: https://claude.ai/code/session_017PtX1nt1rtYVATuzmzBS4f
-rw-r--r--.ai/notes.org2
-rw-r--r--.ai/sessions/2026-06-24-00-14-inbox-consolidation-wrap-teardown-roam-fix.org85
-rw-r--r--todo.org29
3 files changed, 101 insertions, 15 deletions
diff --git a/.ai/notes.org b/.ai/notes.org
index 79b158f..fcb9c4a 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-06-15
-:LAST_INBOX_PROCESS: 2026-06-23 (2 handoffs implemented: inbox-zero capture-guard, install-lang neutral-default CLAUDE.md; bash bundle filed [#C])
+:LAST_INBOX_PROCESS: 2026-06-23 (chime validate-el.sh Phase 2 cd-to-tests fix applied + pushed e5aab19, reply sent; earlier same day: inbox-zero capture-guard, install-lang neutral-default CLAUDE.md, bash bundle filed [#C])
Format: one =:MARKER: YYYY-MM-DD= line per workflow. Workflows overwrite their own marker on completion.
diff --git a/.ai/sessions/2026-06-24-00-14-inbox-consolidation-wrap-teardown-roam-fix.org b/.ai/sessions/2026-06-24-00-14-inbox-consolidation-wrap-teardown-roam-fix.org
new file mode 100644
index 0000000..084a233
--- /dev/null
+++ b/.ai/sessions/2026-06-24-00-14-inbox-consolidation-wrap-teardown-roam-fix.org
@@ -0,0 +1,85 @@
+#+TITLE: Session — inbox consolidation, chime fix, wrap-teardown, roam-sync fix
+
+* Summary
+
+** Active Goal
+
+Continuation past an earlier wrap (Craig chose to keep going). Ran a "1 then 2
+then 3" sequence, then a follow-on fix and a recurring-loop setup. All shipped
+and pushed; ended on a clean wrap. No open work item carried forward.
+
+** What shipped (all pushed to origin/main)
+
+1. *Inbox consolidation* (24ca58d). Merged process-inbox + monitor-inbox +
+ inbox-zero into one =inbox.org= engine: shared core (value gate, skeptical
+ review, disposition ladder, reply discipline, capture-guard, priority-scheme)
+ + process/monitor/roam/auto modes. Repointed every caller (INDEX, protocols,
+ startup, wrap-up, triage-intake, broadcast, two script comments, two
+ claude-rules files), deleted the three old files. Built from the Ready spec
+ (all 4 phases). Closed todo.org [#B] consolidation + [#C] empty-sweep; the
+ fully-unattended /schedule pass stays the [#D] vNext task.
+2. *Chime validate-el.sh fix* (e5aab19). Added the one-line =(cd tests/)= before
+ the Phase 2 ERT load in the canonical elisp hook — restores regression b2e9038
+ lost when .claude refreshed to canonical. Verified identical to chime's diff +
+ shellcheck-clean; replied to chime.
+3. *Wrap-teardown rulesets side* (f87f59c) + *Stop-hook wiring* (96cd34f).
+ Craig's decisions: both summary qualifiers ("with summary" / "and summarize"),
+ Emacs-timer countdown, cj/ai-term-live-count gate. Built hooks/ai-wrap-
+ teardown.sh (Stop hook, sentinel-gated, 8 bats green), settings-snippet +
+ live .claude/settings.json Stop block, wrap-it-up Teardown-mode section +
+ Step 6 + checklist, INDEX. Companion spec (cj/ai-term-quit, -live-count,
+ -shutdown-countdown) routed to .emacs.d; it confirmed receipt + filed it.
+4. *Roam-sync fix* (f83d4bb). Roam mode no longer git-pulls the chronically-dirty
+ roam repo — the scan reads the working tree, the rare write edits + triggers
+ roam-sync (which commits-first-then-rebases). Fixes the loop failing every
+ cycle on a dirty tree.
+
+** Decisions
+
+- Wrap-teardown: both non-destructive qualifiers accepted; Emacs run-at-time
+ countdown; cj/ai-term-live-count safety gate (Craig, 2026-06-23).
+- Roam triage hands git to roam-sync rather than pulling (Craig picked option 1,
+ 2026-06-24). Trade-off accepted: generic roam-sync commit message; provenance
+ lives in todo.org + session log.
+- This wrap is a NORMAL wrap, not the new teardown — that feature isn't
+ operational until the Stop hook activates next session and the .emacs.d
+ companion lands.
+
+** Open / carryover
+
+- *wrap-teardown task is DOING*, blocked on: (c) .emacs.d lands the three
+ companion functions (handoff in its inbox, confirmed received); (d) the manual-
+ validation checklist under the task in todo.org (needs Craig's live Emacs/tmux).
+ Install steps (a) hook symlink + (b) settings Stop block are done.
+- *Deferred dirty (Craig's call):* docs/design/2026-06-15-fix-speedrun-workflow-
+ proposal.org — his in-flight "fix speedrun" → "speedrun" rename, only in that
+ file; ~20 references remain elsewhere. Left untouched again.
+- *12 top-level tasks unreviewed >30 days* — the daily task-review keeps slipping;
+ a task-review cycle is overdue.
+- The one :quick: task (token-rotation helper) is held by decision until a real
+ token rotation is imminent (can't verify without a live browser re-grant).
+
+KB: promoted 0 / consulted no. The durable lessons this session (don't pull the
+roam repo during triage; Stop-hook sentinel decoupling for teardown) landed in
+the canonical workflows + hook themselves, so a KB node would only duplicate what
+the repo now records.
+
+* Session Log
+
+** 2026-06-23 Tue @ 22:52:33 -0400 — flushed
+Clean boundary after the earlier wrap/push. Resume = build the inbox consolidation from the Ready spec, then wrap-teardown.
+
+** 2026-06-23 Tue @ 23:07:23 -0400 — inbox consolidation built
+Built the full inbox.org engine from the Ready spec (all four phases): shared core + process/monitor/roam/auto modes, absorbing the three old workflows. Repointed every live caller, deleted the old files, synced the mirror. Verified: workflow-integrity OK both trees (42 workflows), stale-ref grep clean, sync-check clean, make test green. /review-code → Approve, /voice personal on the message. Pushed 24ca58d. Closed [#B] consolidation + [#C] empty-sweep; [#D] /schedule stays vNext.
+
+** 2026-06-23 Tue @ ~23:15 -0400 — chime validate-el fix
+Processed the chime handoff (inbox.org process mode): applied the one-line Phase 2 cd-to-tests fix to the canonical elisp hook, verified identical to chime's diff + shellcheck-clean. Pushed e5aab19, replied to chime, cleared the inbox.
+
+** 2026-06-23 Tue @ ~23:30 -0400 — wrap-teardown rulesets side
+Craig decided the three open questions. Built the Stop hook (8 bats green, shellcheck clean), settings wiring, wrap-it-up Step 6 + Teardown-mode section + checklist, INDEX. Pushed f87f59c. Routed the cj/ai-term-* companion spec to .emacs.d. On Craig's "why can't you do install steps" push: wired the live .claude/settings.json Stop block (it's a tracked repo file) + ran make install-hooks — pushed 96cd34f. .emacs.d confirmed receipt + filed the companion.
+
+** 2026-06-24 Wed @ ~00:00 -0400 — auto inbox zero loop + roam-sync fix
+Set up the auto inbox zero /loop (cron, every 10 min). First two cycles found only a .emacs.d FYI (companion received) + nothing for rulesets in roam. The roam pull failed on a dirty tree; root-caused it (constant captures + 15-min roam-sync timer = chronically dirty) and Craig picked the full fix (option 1): roam mode never pulls — read-only scan + edit-then-trigger-roam-sync. Pushed f83d4bb, replaced the loop prompt (job a37f53bc), then stopped the loop on Craig's go.
+
+** 2026-06-24 Wed @ 00:14:02 -0400 — wrap
+Stopped the loop. Checked todo.org: nothing speedrunnable (the one :quick: task is held by decision; the rest are substantive specs/features or blocked DOING). Ran a normal wrap (teardown feature not operational this session). todo-cleanup archived 2 done subtrees, lint reformatted one table, inbox clean, roam sweep a no-op.
diff --git a/todo.org b/todo.org
index 5cf79c5..14e073f 100644
--- a/todo.org
+++ b/todo.org
@@ -40,13 +40,6 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest
:END:
vNext from the inbox-consolidation spec. =auto inbox zero= (v1) is the interactive =/loop= recurring check that waits for Craig's yes before executing. A fully-unattended =/schedule= cron pass that fires while Craig is away needs its own contract before it can ship: read-only vs may-mutate =todo.org= / =~/org/roam/inbox.org=, how a find surfaces asynchronously when Craig isn't at the session, how dedup state persists across runs that don't share a session, and what session/auth context a cron run carries. Design it after v1 consolidation lands. From the inbox-consolidation spec-review (Codex finding 1). See [[file:docs/inbox-workflow-consolidation-spec.org][spec]].
-** DONE [#B] Consolidate inbox/triage workflows + scheduled inbox check :chore:
-CLOSED: [2026-06-23 Tue]
-:PROPERTIES:
-:CREATED: [2026-06-23 Tue]
-:END:
-Built per the Ready spec: =process-inbox= + =monitor-inbox= + =inbox-zero= merged into one =inbox.org= engine (shared core + process/monitor/roam modes + the interactive =auto inbox zero= =/loop= mode); =triage-intake= and =no-approvals= stay separate. Callers repointed (INDEX, protocols, startup Phase C, wrap-up Step 3), old files deleted, stale-ref grep clean, workflow-integrity + sync-check + full suite green. The fully-unattended =/schedule= cron pass is vNext (see the =[#D]= task above). [[file:docs/inbox-workflow-consolidation-spec.org][spec]].
-
** DOING [#B] wrap-it-up teardown + "wrap it up and shutdown" :feature:
:PROPERTIES:
:CREATED: [2026-06-23 Tue]
@@ -56,6 +49,9 @@ Two additions to =wrap-it-up.org=, designed by Craig (home, 2026-06-23). Item 1:
*** 2026-06-23 Tue @ 23:31:59 -0400 Built the rulesets side; companion routed to .emacs.d
Craig's three decisions (2026-06-23): non-destructive qualifier is *both* "with summary" and "and summarize"; countdown is an Emacs =run-at-time= timer; the gate uses =cj/ai-term-live-count=. Built and pushed: =hooks/ai-wrap-teardown.sh= (Stop hook, sentinel-gated, 8 bats tests green), =hooks/settings-snippet.json= Stop wiring, =wrap-it-up.org= Teardown-mode section + Step 6 + checklist, INDEX trigger update. Architecture: both teardown and shutdown fire from the Stop hook via a basename-keyed sentinel (=/tmp/ai-wrap-teardown-<proj>=, =/tmp/ai-wrap-shutdown-<proj>=) dropped only at the end of Step 6 after commit+push, so the valediction flushes first. No bin script — the gate/countdown/teardown are all =emacsclient= calls into the companion. Companion spec (=cj/ai-term-quit=, =cj/ai-term-live-count=, =cj/ai-term-shutdown-countdown=) routed to .emacs.d via inbox-send. Remaining: .emacs.d lands the three functions, then the manual end-to-end validation below. Task stays DOING until both sides verify.
+*** 2026-06-23 Tue @ 23:40 .emacs.d received + filed the companion spec
+Per a roam-inbox FYI from .emacs.d (2026-06-23 23:38): both ai-term handoffs (multi-LLM support + this wrap-teardown companion spec) landed and are filed as .emacs.d tasks. The teardown one is flagged for its own focused session to land alongside the rulesets half. Part (c) is now in progress on the .emacs.d side.
+
*** TODO Manual testing and validation :test:
What we're verifying: the wrap-teardown + shutdown feature end to end, once =.emacs.d/modules/ai-term.el= has the three companion functions and the =Stop= hook is installed (=make install-hooks= + the =settings-snippet.json= Stop block in =~/.claude/settings.json=). These need a live Emacs daemon + tmux + an =aiv-<proj>= ai-term session; they can't be driven from a script.
@@ -87,13 +83,6 @@ What we're verifying: no sentinel is dropped before commit + push succeeds.
- Trigger a teardown wrap in a state where the push would fail (e.g. temporarily point the remote somewhere unreachable).
Expected: the wrap surfaces the push failure and stops; no =/tmp/ai-wrap-*-<proj>= sentinel is created, so no teardown fires.
-** DONE [#C] inbox-zero: delete empty roam entries on triage :feature:
-CLOSED: [2026-06-23 Tue]
-:PROPERTIES:
-:CREATED: [2026-06-23 Tue]
-:END:
-Done in commit 3da2725 (empty-entry sweep folded into Phase D's reconcile, after capture-guard + pull, with the claimed-item removal) and carried into the consolidated =inbox.org= roam mode (Phase B =empty= bucket + Phase D sweep). From the roam inbox 2026-06-23.
-
** TODO [#C] Multiple agent-source improvements :spec:
:PROPERTIES:
:CREATED: [2026-06-23 Tue]
@@ -2945,3 +2934,15 @@ CLOSED: [2026-06-23 Tue]
Built =languages/bash/= the same session it was filed: bash.md + bash-testing.md rules, a shellcheck PostToolUse validate hook (covers =.sh=, =.bash=, and extensionless shell scripts by shebang; 8 bats tests), a shellcheck pre-commit githook, settings.json wiring, gitignore-add.txt, and a "Bash/shell project" CLAUDE.md. shfmt left out of the blocking path on purpose (shell has no canonical style). Makefile test target now discovers =languages/*/tests/*.bats=.
No =languages/= bundle fits a shell-heavy project. archangel (437 =.sh= files) and archsetup are bash projects with nothing that matches; installing elisp/python gives them the wrong language rules. Build a =languages/bash/= bundle on the elisp/go pattern: =claude/rules/bash.md= (style — =set -euo pipefail=, quoting, =[[ ]]=, trap/cleanup) + =bash-testing.md= (bats conventions), a PostToolUse validate hook (=shellcheck= on edited =.sh=), a =githooks/pre-commit= running shellcheck on staged shell files, =settings.json= wiring, =gitignore-add.txt=, and its own =CLAUDE.md= headed "Bash/shell project." Urgency dropped 2026-06-23: install-lang now seeds the language-neutral default CLAUDE.md when a bundle ships none, so a bash project no longer gets a mislabeled "Elisp project" header — the bundle is now the accurate-rules win, not a mislabel fix. From archangel 2026-06-23 ([[file:docs/design/2026-06-23-install-lang-claude-md-gap.org][handoff]]).
+** DONE [#B] Consolidate inbox/triage workflows + scheduled inbox check :chore:
+CLOSED: [2026-06-23 Tue]
+:PROPERTIES:
+:CREATED: [2026-06-23 Tue]
+:END:
+Built per the Ready spec: =process-inbox= + =monitor-inbox= + =inbox-zero= merged into one =inbox.org= engine (shared core + process/monitor/roam modes + the interactive =auto inbox zero= =/loop= mode); =triage-intake= and =no-approvals= stay separate. Callers repointed (INDEX, protocols, startup Phase C, wrap-up Step 3), old files deleted, stale-ref grep clean, workflow-integrity + sync-check + full suite green. The fully-unattended =/schedule= cron pass is vNext (see the =[#D]= task above). [[file:docs/inbox-workflow-consolidation-spec.org][spec]].
+** DONE [#C] inbox-zero: delete empty roam entries on triage :feature:
+CLOSED: [2026-06-23 Tue]
+:PROPERTIES:
+:CREATED: [2026-06-23 Tue]
+:END:
+Done in commit 3da2725 (empty-entry sweep folded into Phase D's reconcile, after capture-guard + pull, with the claimed-item removal) and carried into the consolidated =inbox.org= roam mode (Phase B =empty= bucket + Phase D sweep). From the roam inbox 2026-06-23.