From d9d3be90921d57577115fc778542219bfebe72ab Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sat, 20 Jun 2026 23:04:19 -0400 Subject: docs: capture ntfy, flashcard, and triage phone-push proposals Three contributions came in from the home and work projects: a proposal to promote the self-hosted ntfy phone channel into a general two-way agent-comms tool, a flashcard multi-tag tooling change to reconcile into the canonical scripts, and a triage-intake auto-mode phone-push delivery step. I preserved each as a design bundle under docs/design and queued the build/reconcile work, since all three change shared assets and need review before landing. --- todo.org | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'todo.org') diff --git a/todo.org b/todo.org index 7ace4f8..48fd31c 100644 --- a/todo.org +++ b/todo.org @@ -34,15 +34,10 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest * Rulesets Open Work -** VERIFY [#B] Parked: add =~/.dotfiles= to the ai launcher's project discovery (from archsetup) -:PROPERTIES: -:CREATED: [2026-06-16 Tue] -:END: -What arrived: archsetup asks to add =maybe_add_candidate "$HOME/.dotfiles"= to =build_candidates()= in =claude-templates/bin/ai= (right after the =~/.emacs.d= line), so the fzf picker and by-name launch see =~/.dotfiles= now that it's a bootstrapped AI project. Completes the =~/.dotfiles= install done earlier this session. Synced asset, so it parks per the no-approvals Skeptical Review gate rather than self-applying. - -Skeptical review: change is correct and minimal — verified =build_candidates()= scans only =~/.emacs.d= / =~/code/*= / =~/projects/*=, and =maybe_add_candidate= guards on =.ai/protocols.org= so the line is inert where =~/.dotfiles= isn't bootstrapped (same safety as the =~/.emacs.d= line). The sender's "check for a discovery test" concern resolves to nothing: no bin/ai test enumerates candidate roots. The =ai-roots.txt= generalization the sender raises is correctly deferred (not needed for two single-$HOME roots). +** 2026-06-20 Sat @ 21:59:42 -0400 ~/.dotfiles discovery added to ai launcher; bootstrapped on velox +Craig reported =~/.dotfiles= missing from the launcher picker. Two root causes, both fixed: (1) applied the parked one-liner =maybe_add_candidate "$HOME/.dotfiles"= in =build_candidates()= (=claude-templates/bin/ai=, after the =~/.emacs.d= line); (2) =~/.dotfiles/.ai/= was absent on velox — the 2026-06-16 bootstrap was on another machine and =.ai/= is gitignored, so it never traveled — re-bootstrapped via =install-ai.sh --gitignore ~/.dotfiles=. -Prepared change: [[file:working/ai-dotfiles-discovery/proposed.diff]] + [[file:working/ai-dotfiles-discovery/request.org]]. Apply is one line; sync-check mirrors it. Sender notified it's parked. Say "approve the parked dotfiles discovery" to apply. +Verified end-to-end: =build_candidates()= now lists =~/.dotfiles= (protocols.org guard passes). sync-check clean (bin/ai is single-canonical, no mirror). By-name launch =ai ~/.dotfiles= already worked via single_mode's marker-only check. working/ai-dotfiles-discovery/ staging dir removed. ** VERIFY [#B] Helper-instance support — concurrent same-project Claude :feature:spec: :PROPERTIES: @@ -319,6 +314,24 @@ Craig's "your call" (2026-06-16) answered in [[file:docs/design/2026-06-16-auton *** VERIFY Review the autonomous-batch execution spec Review [[file:docs/design/2026-06-16-autonomous-batch-execution-spec.org]] (covers both this and Phase E) and ratify (or adjust) its six open decisions. Implementation-ready once no decision is still TODO. +** TODO [#C] ntfy phone channel as general two-way agent-comms :feature:spec: +:PROPERTIES: +:CREATED: [2026-06-20 Sat] +:END: +Proposal from the home project (2026-06-17): promote the self-hosted ntfy-over-Tailscale phone channel it built and verified on ratio into a general two-way agent-comms tool rulesets owns. Full proposal: [[file:docs/design/2026-06-17-ntfy-agent-comms-proposal.org]] (as-built runbook stays in the home project at =working/phone-notifications/spec.org=). What rulesets would decide: canonicalize =phone-notify= (send) plus a new =phone-recv= (check-since) as synced bin scripts; the per-machine config/secret convention (token in =~/.config/phone-notify/config= chmod 600 today, vs GPG-encrypted in dotfiles); a reference =ntfy-inbound-handler= plus systemd user-unit for event-driven delivery (Tier A subscriber routes inbound to inbox/notify, Tier B inbound spawns an agent session, Tier C notify a live session — harness research); approval-button workflows for the commits.md gates when Craig is away from the desk (tap-to-approve, the high-value concrete use); and the relationship to the retired cross-agent-comms scripts (ntfy may be the transport they lacked). Worked via =spec-create=. Blocks the triage-intake phone-push task below. + +** TODO [#C] Reconcile flashcard multi-tag tooling into canonical :chore: +:PROPERTIES: +:CREATED: [2026-06-20 Sat] +:END: +The work project edited two synced scripts locally as a stopgap (2026-06-17) and asked rulesets to fold them into the canonical so the next sync doesn't revert them. Preserved bundle: [[file:docs/design/2026-06-17-flashcard-multitag-note.md][note]], [[file:docs/design/2026-06-17-flashcard-multitag-to-anki.py][to-anki.py]], [[file:docs/design/2026-06-17-flashcard-multitag-stats.py][stats.py]]. Change: support a second org tag on drill headings (=:fundamental:drill:=) for curated subset decks. =flashcard-to-anki.py= — broaden =CARD_RE= to match a trailing tag block (a heading is a card when =drill= is among its tags), bound the card body by any L1/L2 heading, add =--tag-filter = (emit only cards carrying that tag) and =--guid-salt = (separate GUID space so a subset deck imports non-empty without disturbing the full deck's SRS state). =flashcard-stats.py= — same =CARD_RE=/=HEADING_RE= broadening plus a drill-membership guard. Use the preserved to-anki.py (the 0953 version: dropped an unused =heading_tags()= helper, tightened =CARD_RE= =(.*?)=→=(.+?)= for parity with stats). Apply to both =.ai/scripts/= and =claude-templates/.ai/scripts/=, add a multi-tag bats case to =flashcard-sync.bats= (a =:foo:drill:= heading parses; =--tag-filter foo= returns only those), verify the full deck still parses to 465 and =--tag-filter fundamental= returns 100, then sync-check + make test. Shared-asset change, so review-gated. + +** TODO [#C] triage-intake.org auto mode — push each sweep to phone (ntfy) :feature: +:PROPERTIES: +:CREATED: [2026-06-20 Sat] +:END: +The work project (2026-06-18) added a "Push each sweep to Craig's phone (ntfy) — the primary delivery" subsection under "Trigger and delivery" in triage-intake.org auto mode, and asks to fold it into the canonical engine plus re-sync. Preserved bundle: [[file:docs/design/2026-06-18-triage-intake-phone-push-note.org][note]] + [[file:docs/design/2026-06-18-triage-intake-phone-push-workflow.org][edited workflow]]. Auto mode is the away-from-desk / vacation mode, so phone-notify becomes the primary delivery each sweep (fuller end-of-sweep output: per-source deltas, open-PR/Linear state, awaiting-ack list, one-line verdict, timestamp; SCAN FAILED banner on any source failure), plus phone-recv polling each sweep for Craig's replies. Falls back to inline when phone-notify is absent. Depends on the ntfy agent-comms task above (phone-notify/phone-recv must be canonicalized first). Shared template-workflow change, so review-gated. + ** TODO [#D] Build =create-documentation= skill for high-quality project/product docs :feature: :PROPERTIES: :LAST_REVIEWED: 2026-06-15 -- cgit v1.2.3