aboutsummaryrefslogtreecommitdiff
path: root/todo.org
Commit message (Collapse)AuthorAgeFilesLines
* docs(todo): file [#C] :spec: TODO to build Craig's writing voice profile ↵Craig Jennings2026-05-291-0/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | from real corpora Files a TODO under Rulesets Open Work to mine Craig's actual writing (sent email across all three accounts, commit messages, PR bodies, org files he authored, slack threads, long-form artifacts) into a grounded voice profile. The voice/SKILL.md patterns today are observation-derived. Some are spot-on. Others are intuition. A corpus pass would tell us which patterns are genuinely Craig's voice, which were guesses, and which Craig-specific positive traits the current ruleset misses entirely. Output: voice/references/voice-profile.org with findings cited to evidence samples, plus a reconciliation pass against voice/SKILL.md to confirm, strengthen, weaken, add, or remove patterns based on what the corpus shows. Approach phased into corpus assembly, analysis (subagent-friendly), draft profile, reconcile-with-user. The body includes a privacy note: raw corpus stays out of commits if the project's remote ever stops being private. There's no urgency. The work is useful but optional, hence [#C].
* docs(todo): schedule Signal MCP server install for 2026-05-29Craig Jennings2026-05-291-112/+132
| | | | | | | | | | | | | | | | | | | | | | | Files a [#B] :feature: TODO under Rulesets Open Work to install rymurr/signal-mcp as an MCP server. The MCP gives Claude native tool access to send_message_to_user, send_message_to_group, and receive_message instead of shelling out to the page-signal wrapper. The differentiator is receive_message. Claude can listen for replies and act on them, enabling page-as-confirm flows and structured Q&A across devices. Dependency: signal-cli has to be registered with the Google Voice number first. Sending from Craig's primary number to itself doesn't notify (Signal treats it as one account on linked devices). The MCP server takes --user-id at startup, one account per instance, so it has to point at the GV account. Implementation touches mcp/servers.json (stdio entry), mcp/README.org (dependency note), and possibly mcp/secrets.env.gpg if any auth material needs encrypting. Verification: make install-mcp followed by make check-mcp shows signal-mcp ok. Smoke-test via a tool call. The task is scheduled for 2026-05-29.
* feat(mcp): add uninstall + --check + README section for MCP pipelineCraig Jennings2026-05-281-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | Three coupled additions close the MCP pipeline thread. mcp/install.py grew --uninstall and --check modes via argparse. The default install behavior is unchanged. --uninstall iterates over servers.json and runs `claude mcp remove <name> -s user` for each, skipping anything not registered. Idempotent. --check is the dry-run drift report. For each server, classify as ok (in both servers.json and `claude mcp list`), MISSING (configured but not registered), or EXTRA (registered but not in servers.json). Exit non-zero only on MISSING since EXTRA entries are often deliberate (the claude.ai web servers register out-of-band). Smoke test against the live config: 9 ok, 0 missing, 3 EXTRA, exit 0. Two new Makefile targets: - make uninstall-mcp invokes the --uninstall mode. - make check-mcp invokes the --check mode. README.org gained an MCP section under Two install modes covering all three targets, the OAuth-token-on-disk story, and a pointer to mcp/README.org for the full pipeline. Closes TODO #7 (uninstall + --check) and TODO #8 (README MCP section).
* fix(sync-check): ignore generated python and elisp artifactsCraig Jennings2026-05-281-1/+2
| | | | | | | | | | | | | | Pre-commit caught a false-positive on its first real-world run. The .ai/scripts/__pycache__ directory created by make test (pytest writes .pyc and .pytest_cache, emacs writes .elc) was flagged as drift against the canonical's clean tree. Added matching --exclude patterns to the diff -rq check and the --fix rsync calls. Patterns: __pycache__, *.pyc, *.pyo, .pytest_cache, *.elc. The --fix excludes prevent rsync's --delete from wiping the mirror's __pycache__ when the canonical has none. Four new bats tests cover the exclusions. All 12 pass.
* feat(status): add `make status` for compact health summaryCraig Jennings2026-05-281-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | scripts/status.sh prints a six-line summary composing existing checks: - audit + doctor (one call, since audit.sh runs doctor internally) - canonical/mirror sync state via sync-check.sh - open todo count under * <Project> Open Work - inbox count (excluding .gitkeep and PROCESSED- prefixes) - git working-tree state with ahead/behind upstream Sample output: rulesets status — 2026-05-28 09:13 CDT audit Summary: 41 ok, 0 warnings, 2 failures sync canonical = mirror todo 22 open inbox 1 unprocessed git main dirty — in sync with origin/main The script adds no new logic beyond formatting. `make status` is the entry point. The scope here is limited per the triage disposition for codex item #12. The rest of #12 was rejected. `make sync` duplicates the existing sync flow, `make health` wraps existing checks without adding signal, `make bootstrap-project` duplicates `install-ai` + `install-lang`.
* feat(sync-check): canonical/mirror drift detection + pre-commit hookCraig Jennings2026-05-281-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | scripts/sync-check.sh diffs claude-templates/.ai/{protocols.org, workflows,scripts} against the .ai/ mirror. Exits 0 when clean, 1 with a diff report on drift, 2 outside a rulesets-shaped repo or git checkout. --fix mode rsyncs canonical -> mirror and re-checks, then prompts to re-stage. githooks/pre-commit wraps the script. Commits abort on drift so the issue surfaces at publish time, not at the next session's startup rsync. Two new Makefile targets: - make sync-check [FIX=1] runs the script (FIX=1 passes --fix through). - make install-githooks sets core.hooksPath=githooks (idempotent). scripts/tests/sync-check.bats holds 8 tests covering clean, drift-per-path, --fix, extra-file removal, missing canonical, and outside-git. All eight pass. This catches the exact drift I had to fix manually during this morning's audit pass. The mirror's open-tasks.org PROPERTIES drawer sat below a sub-heading because the mirror commit was older than canonical.
* feat(open-tasks): archive-done sweep at start of Phase ACraig Jennings2026-05-281-1/+2
| | | | | | | | | | | | | | | | | | open-tasks.org Phase A now runs `emacs --batch -q -l .ai/scripts/todo-cleanup.el --archive-done todo.org` as a pre-step before the parallel read batch. A level-2 task that completed during the session sits as ** DONE under Open Work until something archives it, which means Next Mode would surface it as a "what's next" candidate between cleanups. The pre-step ensures Phase A's read of todo.org reflects current state. The pre-step skips only in an explicit read-only or dry-run context. Default is always to sweep. Common Mistake #13 records "recommending a freshly-DONE task" with the pointer back to the pre-step. The proposal came from a pearl handoff on 2026-05-28.
* chore(intake): triage codex backlog into 5 actionable TODOs + dispositionsCraig Jennings2026-05-281-12/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Walked the 14-item codex enhancement backlog with Craig and recorded dispositions in docs/design/2026-05-28-rulesets-enhancement-backlog.org under a new "Triage Dispositions" section. The triage TODO closed. Accept (filed below as TODOs): - Item #8 .aiignore for agent inventory exclusions ([#C] :chore:) - Item #10 Workflow test harness for drift and integrity tests ([#C] :feature:) Pilot or scope-limit (filed below): - Item #5 Token-tier pilot on startup.org and triage-intake.org ([#C] :feature:) - Item #7 Canonical/mirror drift detection via pre-commit hook or make sync-check ([#C] :feature:quick:solo:). Rejected the wholesale dedupe. The dual source is a feature. - Item #12 make status only ([#C] :feature:quick:solo:). Rejected the rest of #12. Convention, not tracked: - Item #11 script interface normalization (adopt as scripts are touched) - Item #13 ADR layer (watch-and-wait on growth signal) Reject with rationale (recorded in the backlog doc): - Item #1 broader runtime-neutral arc. Heavy infrastructure for marginal payoff at current use. - Item #3 INDEX.org compression. Already token-efficient. Parallel layer adds drift risk. - Item #4 universal catalog.json. Looks valuable on paper, rots fast in practice. - Item #6 install manifest JSON. Current Makefile pattern works. Data layer adds indirection. - Item #9 project-facts.org. Duplicates notes.org's role. - Item #14 local model profiles. Premature without a real use case. Item #2 (per-agent live session files) was already filed earlier today as the Codex Phase 1 [#B] TODO, slicing the broader item #1 arc.
* chore(intake): file codex enhancement backlog as docs/design + triage TODOCraig Jennings2026-05-281-0/+22
| | | | | | | | | | | | | | | | | | Codex left a 14-item enhancement backlog for rulesets at inbox/enhancements.org overnight. Moved it to docs/design/2026-05-28-rulesets-enhancement-backlog.org as the canonical reference and filed a single [#C] :spec: TODO to walk the items and decide accept-as-TODO, fold, defer, or reject for each. Two of the 14 already have homes: item #1 (runtime-neutral core) aligns with the existing Generic agent runtime support spec (#16), and item #2 (per-agent live session files) is exactly the Codex Phase 1 [#B] TODO filed earlier today. The triage focuses on the remaining 12. Also cleared the last-session PROCESSED-prefixed inbox file (open-tasks-hybrid-friction-cascade). The cascade+friction restructure it tracked landed in this morning's open-tasks.org edits, so the reference is no longer needed.
* fix(todo): move task #15 PROPERTIES drawer above sub-headingsCraig Jennings2026-05-281-4/+4
| | | | | | | | The dated sub-entry added in the audit pass left the LAST_REVIEWED line below the first level-3 heading, where the staleness checker can't see it (it scans only between the level-2 heading and the next heading of any depth). The fix moves the PROPERTIES drawer to its standard org-mode placement, immediately after the level-2 heading.
* chore(audit): task-audit pass + pearl intake from 2026-05-28 morningCraig Jennings2026-05-281-29/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | All 16 open tasks bucketed and updated. 14 received autonomous Phase C edits (13 type-tag additions per the new scheme plus #15's body refresh for the accumulating pearl signal). Phase D adjudicated two priority bumps and the morning's inbox spillover. Phase E stamped :LAST_AUDIT: in notes.org Workflow State. Autonomous Phase C: - Tagged tasks 1-11 and 13-14 with their type tag (:feature:, :chore:, :spec:), bumped LAST_REVIEWED to 2026-05-28. Tasks 12, 15, 16 already carried type tags. - Refreshed task #15 body to reference the four pearl pattern-catalog notes now in docs/design/ (six worked patterns total). Phase D adjudication: - #15 (cross-project pattern catalog) bumped [#C] to [#B]. Pearl shipped 6 worked examples plus a synthesizing principle and is asking for spec-review iterations. Design questions still open but evidence is past the tipping point. - Filed new [#B] :feature: TODO for the codex Phase 1 race-fix (AI_AGENT_ID + session-context.d/<id>.org), lifted from the broader runtime spec (#16). Phase 1 alone is low-risk and fixes a real correctness issue under simultaneous agents. Pearl intake (4 inbox files from this morning): - Moved 0155 (patterns 4-5) and 0303 (pattern 6) into docs/design/ alongside the prior two pattern-catalog notes. Referenced from #15. - Filed new [#C] :chore:quick:solo: TODO for pearl 0138's --archive-done sweep at the start of open-tasks.org Phase A. - Filed new [#C] :feature:solo: TODO for pearl 0226's spec-review.org Phase 6 implementation-task enumeration. - Deleted 0124. Already implemented this session as the audit-warranted pre-step plus the LAST_AUDIT stamp now live in the workflow files.
* docs(todo): add priority and tag schemeCraig Jennings2026-05-281-0/+27
| | | | | | | | | | | | | | | | Adds an explicit [#A]-[#D] legend at the top of todo.org defining what each priority level means in practice. Type and effort tag conventions live alongside, since task-audit enforces both. [#A] now requires a SCHEDULED or DEADLINE date. A task that can't be dated isn't really [#A]. It belongs at [#B]. Tags split two ways. Type tags (:feature:, :chore:, :spec:, :bug:) are mandatory. Effort and autonomy tags (:quick:, :solo:) are optional and orthogonal. Both can apply to the same task. Seeds a Workflow State section in notes.org for the :LAST_AUDIT: marker that open-tasks.org Next Mode reads to decide whether to offer a task-audit run. The marker starts unset. The first task-audit run populates it.
* feat(workflows): backfill iteration history in spec workflowsCraig Jennings2026-05-281-1/+2
| | | | | | Closes the org-drill backfill TODO. Both workflow files now carry a bottom "Review and iteration history" section with four entries: Draft 1 (linear-emacs origin, 2026-05-23, placeholder timestamp), Review-and-Fold (commit 7f2aea1, 2026-05-23), Requirement addition (commit 55adf6e, 2026-05-28), and this backfill commit. Canonical and mirror updated together. Working directory working/spec-workflows-iteration-history-backfill/ removed on this commit. The spec-response cycle on the working draft (two Codex reviews, three rulesets responses) validated the entry-shape and the content before splice. Codex caught file-history conflation that would have made per-file provenance inaccurate. Craig's direct rationale on the Iteration 1 and Iteration 3 Why lines replaced the original INFERRED markers.
* docs(todo): clarify what blocks the iteration-history backfill TODOCraig Jennings2026-05-281-1/+1
| | | | The earlier body listed two reasons to wait: a file-conflict block (correct, since spec-review.org and spec-response.org have uncommitted edits) and a guess that the entry-shape spec might still change (inference without evidence). The revised dependency drops the guess. The read-only research portion can run in parallel without touching the files.
* chore(intake): file org-drill iteration-history backfill as TODOCraig Jennings2026-05-281-0/+17
| | | | The org-drill inbox asks rulesets to backfill =Review and iteration history= sections on spec-review.org and spec-response.org. It lands as a follow-up TODO because the requirement itself is still being established in uncommitted WIP.
* chore(intake): file pearl pattern-catalog and codex runtime spec as TODOsCraig Jennings2026-05-281-0/+33
| | | | Moved three inbox notes into docs/design/ so the task body links survive: pearl's two pattern-catalog handoffs and codex's v0 generic-agent-runtime spec. Added two corresponding TODOs under Rulesets Open Work, both [#C].
* chore(todo): full review pass — re-stamp, drop stale schedules, refresh ↵Craig Jennings2026-05-261-20/+19
| | | | | | daily-prep task Walked all 14 open tasks. Re-stamped LAST_REVIEWED to 2026-05-26, dropped the past SCHEDULED dates from the research-writer and Skill-Seekers wait-for-trigger tasks, tagged the Makefile consolidation :quick:solo:, and refreshed the daily-prep delegation task to reflect the triage-intake engine/plugin split.
* chore(todo): add coverage-summary language-bundle taskCraig Jennings2026-05-251-0/+29
|
* chore(todo): review and stamp ten stale tasksCraig Jennings2026-05-251-3/+33
| | | | Re-grade /research-writer to [#C] (deferred until a real research-writing task triggers it) and tag the two MCP tasks :solo:quick:. The rest confirmed as-is.
* chore(ai): archive session record, regen lint follow-ups, fix dangling todo linkCraig Jennings2026-05-241-1/+1
| | | | The claude-memory clone was removed this session, so the todo entry's file: link to it would dangle — switched to plain text.
* chore(todo): reopen memory-sync task after reversing the migrationCraig Jennings2026-05-241-2/+4
|
* chore(todo): close cross-machine memory sync via dedicated repoCraig Jennings2026-05-231-3/+7
| | | | I closed the memory-sync task. Memory now lives in a dedicated private claude-memory.git on cjennings.net, with each project's memory dir symlinked into a local clone so new memory lands in the working tree and a push syncs it. I settled on that over stow/dotfiles and over keeping it in rulesets, since rulesets sits on every session's startup-pull path and memory churn would dirty it. The task's dated entries carry the decision and the shipped details.
* chore(ai): archive session record, sweep completed tasks, queue follow-upsCraig Jennings2026-05-221-460/+455
| | | | Archived the session record. Moved six completed tasks from Open Work to Resolved: the 2026-05-04 audit-pass parent, the two commits.md overlay tasks, the make-remove feature, the mcp/ install-pipeline doc, and the wrap-it-up GitHub-host quick fix. Queued the one lint judgment and the task-review staleness note in the inbox for next-session processing.
* chore(todo): close the mcp/ install-pipeline doc itemCraig Jennings2026-05-221-1/+3
|
* chore(todo): close make-remove and audit-parent itemsCraig Jennings2026-05-221-3/+8
|
* chore(todo): close the two commits.md overlay tasksCraig Jennings2026-05-221-7/+7
|
* chore(todo): promote the two deferred commits.md audit items to top-level tasksCraig Jennings2026-05-221-15/+12
|
* chore(todo): close brainstorm audit itemCraig Jennings2026-05-221-6/+3
|
* chore(todo): close playwright networkidle + emoji audit itemsCraig Jennings2026-05-221-13/+6
|
* chore(todo): close hooks code audit itemsCraig Jennings2026-05-221-13/+6
|
* chore(todo): close hooks README audit itemCraig Jennings2026-05-221-5/+3
|
* chore(todo): close verification/testing/subagents audit itemsCraig Jennings2026-05-221-21/+12
|
* chore(todo): close language-ruleset audit itemsCraig Jennings2026-05-221-24/+12
|
* chore(todo): close architecture audit itemsCraig Jennings2026-05-221-45/+24
|
* chore(todo): close branch-workflow and c4 audit itemsCraig Jennings2026-05-221-36/+18
|
* chore(todo): close v2mom, prompt-engineering, and codify audit itemsCraig Jennings2026-05-221-36/+18
|
* chore(todo): close frontend, security, and pairwise audit itemsCraig Jennings2026-05-221-44/+18
|
* chore(todo): close add-tests audit items (1 fixed, 1 moot)Craig Jennings2026-05-221-12/+6
|
* chore(todo): close debugging-skills audit itemsCraig Jennings2026-05-221-17/+9
|
* chore(todo): close playwright headed/headless itemCraig Jennings2026-05-221-6/+3
|
* chore(todo): close PR-response audit items (2 fixed, 2 moot)Craig Jennings2026-05-221-24/+12
|
* chore(todo): close review-code CI-trust and CLAUDE.md-citation itemsCraig Jennings2026-05-221-15/+7
|
* chore(todo): close GH-assumption and review-code strengths tasksCraig Jennings2026-05-221-5/+5
|
* chore(ai): archive session record and task-review todo cleanupCraig Jennings2026-05-201-96/+94
| | | | Archive the DONE task-review implementation and the cancelled OV-1 skill from Open Work to Resolved. The follow-ups file picks up one lint judgment and the review-habit staleness line for the next daily-prep.
* chore(todo): close the task-review implementation as doneCraig Jennings2026-05-201-2/+3
| | | | The habit is built and smoke-tested — the staleness script with count and --list modes, the wrap-up health check, the task-review workflow, and the startup nudge all shipped, and the first review cycle ran clean against the live list. The elisp component was dropped under Shape B. The daily habit carries on through the startup nudge and the wrap-up watchdog.
* chore(todo): re-grade and prune tasks in a review passCraig Jennings2026-05-201-5/+26
| | | | This is the first task-review cycle. I re-graded create-documentation, the 2026-05-04 audit review pass, and /update-skills from [#A] to [#C]; bumped the wrap-it-up GitHub-remote chore to [#A] and tagged it :quick:; and cancelled the OV-1 DoDAF skill. The kept and re-graded tasks get a :LAST_REVIEWED: stamp so the staleness watchdog and the rotation know they've been looked at.
* docs(design): record task-review Shape B revisionCraig Jennings2026-05-201-8/+9
| | | | | | The spec recommended an Emacs keystroke mode (task-review.el). Implementation went the other way — a pure Claude workflow, no elisp — because the interactive mode would couple a rulesets-owned file to archsetup's init.el, and the daily Claude touchpoint already exists in daily-prep. I added a Revision section at the top recording the change: pure workflow, rulesets-owned, the task-review.org / open-tasks.org name swap, the staleness --list selection, and the startup nudge promoted to template-level. The elisp architecture and ERT sections stay as a record of the abandoned approach, flagged superseded. The todo task moves to DOING with per-component status: everything but the smoke test is done, and component 3 (the elisp) is dropped.
* chore(ai): archive session record and wrap-up lint followupsCraig Jennings2026-05-191-13/+12
| | | | Records this session's process-rule additions (Discovery check in commits.md Step 1; mechanical primary trigger for session-context writes), ai launcher polish (per-project opening line + explicit end-of-session window placement), and the new triggers.md for cross-project launch phrases. Lint-followups carries the recurring misplaced-heading judgment at line 2143 (false positive: `**` inside `=...=` verbatim, leave alone) plus a date-coverage list, both deferred per the task-review spec.
* chore(todo): close Phase A inbox-blind-spot task as mootCraig Jennings2026-05-191-1/+4
| | | | | | The bug was real on 2026-05-15 but is moot in current state. inbox-send.py's discovery scans ~/code/* and ~/projects/* single-level, so claude-templates/ (two levels under ~/code/) is never routable as a target. The 2026-05-15 incident was a one-time manual workaround because rulesets/inbox/ didn't exist yet; 470085f added that root inbox and the same session removed claude-templates/inbox/. Nothing routes to the subtree inbox now, and the subtree inbox doesn't exist. Phase A scanning only ./inbox/ is correct given current state. No code change needed; this is just a depth-based completion flip per the todo-format convention.
* docs(design): task-review spec + filed [#A] taskCraig Jennings2026-05-161-0/+14
| | | | | | docs/design/task-review.org captures the brainstorm output for a daily 5-min keystroke-driven review habit that walks 7 oldest-unreviewed top-level [#A]/[#B]/[#C] tasks per session, rotating through the list over ~12 days. Replaces wrap-it-up.org's date-coverage scan once implemented; the watchdog flips from "do all priorities have dates?" to "is the review habit happening?" with a 30-day threshold. todo.org gets a [#A] entry at the top of Rulesets Open Work pointing at the spec, so the implementation work isn't lost. Six components in the spec's Next Steps: extract task-review-staleness.sh, replace the wrap-up section, author task-review.el in archsetup, author the workflow file plus INDEX entry, add the startup nudge, smoke test.