aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-28 08:18:10 -0500
committerCraig Jennings <c@cjennings.net>2026-05-28 08:18:10 -0500
commitdb7f82711978da5e7f152297942854c7b753f480 (patch)
tree68ea4ce52cbb278114acf0243fe7397d2f1d6efc /todo.org
parentee7049aaa62d0c38e83f20c0b3796e5eded4ca23 (diff)
downloadrulesets-db7f82711978da5e7f152297942854c7b753f480.tar.gz
rulesets-db7f82711978da5e7f152297942854c7b753f480.zip
chore(audit): task-audit pass + pearl intake from 2026-05-28 morning
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.
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org105
1 files changed, 76 insertions, 29 deletions
diff --git a/todo.org b/todo.org
index 12bdd25..2595ec6 100644
--- a/todo.org
+++ b/todo.org
@@ -1,4 +1,4 @@
-#+TITLE: Rulesets — Open Work
+#+TITLE: Rulesets — Work
#+AUTHOR: Craig Jennings
#+DATE: 2026-04-19
@@ -34,9 +34,9 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest
* Rulesets Open Work
-** TODO [#C] Check that memories are sync'd across machines via git
+** TODO [#C] Check that memories are sync'd across machines via git :spec:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
*** 2026-05-16 Sat @ 01:12:52 -0500 Spec
#+begin_src cj: comment
@@ -74,9 +74,9 @@ Created bare =git@cjennings.net:claude-memory.git=, cloned to =~/.claude-memory=
*** 2026-05-24 Sun @ 01:53:35 -0500 Reversed the migration — back to unmanaged per-project memory
Cancelled the follow-up brainstorm and undid the dedicated-repo migration at Craig's call. Moved all 7 memory dirs back to =~/.claude/projects/<enc>/memory/= (content preserved), deleted the =~/.claude-memory= clone, and deleted the bare =claude-memory.git= on the server. Memory is back to its original at-risk state, so the task reopens at [#C] pending a direction. The brainstorm landed on a two-tier idea for whenever this resumes: promote general lessons into a rulesets-tracked file symlinked into =~/.claude/rules/= (loaded into every project natively, one repo), and keep project-specific memory under each project's own =.ai/memory/= (committed where =.ai/= is tracked, at-risk where it's gitignored). Not implemented.
-** TODO [#C] Build =create-documentation= skill for high-quality project/product docs
+** TODO [#C] Build =create-documentation= skill for high-quality project/product docs :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Create a Claude skill named =create-documentation= that can plan, write,
@@ -711,9 +711,9 @@ The skill should reject:
public/library/API docs: =llms.txt= or markdown export is valuable, but normal
human navigation remains primary.
-** TODO [#C] Build =/update-skills= skill for keeping forks in sync with upstream
+** TODO [#C] Build =/update-skills= skill for keeping forks in sync with upstream :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
The rulesets repo has a growing set of forks (=arch-decide= from
@@ -797,9 +797,9 @@ write the specification here.
- [ ] Rate-limit / offline mode: if GitHub is unreachable, should skill fail
or degrade gracefully? Likely degrade; print warning per fork.
-** TODO [#C] Build /research-writer — clean-room synthesis for research-backed long-form
+** TODO [#C] Build /research-writer — clean-room synthesis for research-backed long-form :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Gap in current rulesets: between =brainstorm= (idea refinement → design doc)
@@ -854,9 +854,9 @@ Triggers that would prompt "let's build it now":
Upstream reference (do not vendor): ComposioHQ/awesome-claude-skills
=content-research-writer/SKILL.md=.
-** TODO [#C] Try Skill Seekers on a real DeepSat docs-briefing need
+** TODO [#C] Try Skill Seekers on a real DeepSat docs-briefing need :chore:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
=Skill Seekers= ([[https://github.com/yusufkaraaslan/Skill_Seekers]]) is a Python
@@ -901,9 +901,9 @@ discard and stick with hand briefing.
- Companion =skill-seekers-configs= community repo has only 8 stars
despite main's 12.9k — ecosystem thinner than headline adoption
-** TODO [#C] Revisit =c4-*= rename if a second notation skill ships
+** TODO [#C] Revisit =c4-*= rename if a second notation skill ships :chore:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Current naming keeps =c4-analyze= and =c4-diagram= as-is (framework prefix
@@ -1047,9 +1047,9 @@ having a skill to generate or check OV-1-shaped artifacts. Don't build
speculatively — defense-specific notations are narrow enough that each
skill should be driven by a concrete contract need, not aspiration.
-** TODO [#C] Add =make uninstall-mcp= + =mcp/install.py --check= for symmetry :solo:quick:
+** TODO [#C] Add =make uninstall-mcp= + =mcp/install.py --check= for symmetry :feature:solo:quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Currently the MCP install pipeline only flows one direction. No way to remove rulesets-managed MCP servers in one command. No way to ask "what's the drift between =servers.json= and =claude mcp list=" without eyeballing.
@@ -1068,16 +1068,16 @@ Dry-run mode. Decrypt secrets, but instead of registering, print the drift repor
Useful for diagnosing connection failures and for the eventual =make doctor= integration.
-** TODO [#C] Update =README.org= with MCP install pipeline section :solo:quick:
+** TODO [#C] Update =README.org= with MCP install pipeline section :chore:solo:quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
=README.org= covers global install, per-project language bundles, and design principles, but doesn't mention =make install-mcp= or the =mcp/= directory. Add a short section after "Per-project language bundles" describing the user-scope MCP install pattern (decrypt → expand → register) and pointing at the eventual =mcp/README.org=.
-** TODO [#C] Token-rotation helper for =@a-bonus/google-docs-mcp= OAuth refresh
+** TODO [#C] Token-rotation helper for =@a-bonus/google-docs-mcp= OAuth refresh :feature:quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
When a Google refresh token gets revoked (re-grant scopes, removed Connected App, account password reset), recovery is currently manual: run =npx -y @a-bonus/google-docs-mcp= with the right env, follow the URL in a browser, kill the process, base64-encode the new =token.json=, decrypt =secrets.env.gpg=, replace the var, re-encrypt. A small =mcp/refresh-google-docs-token.sh <profile>= would chain that into one command.
@@ -1100,9 +1100,9 @@ rm /tmp/secrets.env.tmp
The flow tonight worked but took a handful of manual steps. One script collapses it.
-** TODO [#C] Decide on category-3 rule copies in the deepsat tree
+** TODO [#C] Decide on category-3 rule copies in the deepsat tree :chore:quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
While symlinking personal-project =.claude/rules/= mirrors to the rulesets canonical on 2026-05-07, two locations didn't fit the "personal mirror → symlink" pattern and were left untouched pending judgment:
@@ -1112,9 +1112,9 @@ While symlinking personal-project =.claude/rules/= mirrors to the rulesets canon
For each: read the file, diff against the rulesets canonical, decide whether it's an intentional diverge (leave alone), stale (sync content), or should canonicalize (replace with symlink and accept the cross-repo dependency). The orchestration_dashboard_mvp pair is the project where Vrezh's PR review surfaced this whole thread, so any decision there has team-visibility implications.
-** TODO [#C] Audit language-specific rule files for cross-project duplication
+** TODO [#C] Audit language-specific rule files for cross-project duplication :chore:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
The four canonical rules (=commits=, =testing=, =verification=, =subagents=) are now symlinked across the five personal-project mirrors as of 2026-05-07. But several language-specific rule files exist in multiple project mirrors and may be duplicated or drifted:
@@ -1127,7 +1127,7 @@ The Elisp pair is the most suspicious — three repos using essentially the same
** TODO [#C] Consolidate =claude-templates/Makefile= after fold :chore:quick:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Sibling follow-up from the fold child (2026-05-15). After the subtree merge, =rulesets/claude-templates/Makefile= still has its standalone =install= / =uninstall= / =list= / =test-scripts= targets. The =install= target's =bin/ai= logic is now duplicated in =rulesets/Makefile=. Both work; the redundancy is harmless but worth cleaning up.
@@ -1139,9 +1139,9 @@ Options:
Triggered by: 2026-05-15 fold session's refactor audit (commit =2d645fc=).
-** TODO [#C] Refactor =daily-prep.org= to delegate to =triage-intake.org= for the triage section
+** TODO [#C] Refactor =daily-prep.org= to delegate to =triage-intake.org= for the triage section :chore:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
=daily-prep.org= still does its own inline triage (Gmail × 3 accounts, Slack, Linear, GHE PRs, calendars) as part of the full prep flow. =triage-intake.org= is now a source-agnostic engine that loads =triage-intake.<source>.org= plugins (refactored 2026-05-26), so daily-prep could call the engine and consume its synthesis instead of duplicating the source-scan logic. That DRYs up a large workflow and keeps both flows in sync when sources change — a source change now lives in one plugin that both flows pick up.
@@ -1154,9 +1154,9 @@ Scope:
Origin: came up while authoring =triage-intake.org= on 2026-05-11; body refreshed after the engine/plugin refactor on 2026-05-26.
-** TODO [#C] Templatize =make coverage-summary= into the language bundles
+** TODO [#C] Templatize =make coverage-summary= into the language bundles :feature:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-26
+:LAST_REVIEWED: 2026-05-28
:END:
Borrow dotemacs's =make coverage-summary= into the language bundles. After =make coverage= writes a coverage file, =coverage-summary= prints per-unit covered/total with percentages, a unit-weighted project number, and a list of source files present on disk but missing from the coverage report.
@@ -1183,7 +1183,7 @@ Reference (dotemacs): =scripts/coverage-summary.el=, =modules/coverage-core.el=,
Origin: handoff from the .emacs.d session, 2026-05-25.
-** TODO [#C] Cross-project pattern catalog :spec:thinking:
+** TODO [#B] Cross-project pattern catalog :spec:thinking:
From pearl handoffs [[file:docs/design/2026-05-27-pattern-catalog-pearl-notes.org][2026-05-27]] + [[file:docs/design/2026-05-28-pattern-catalog-no-empty-input.org][2026-05-28 follow-up]].
Meta-question: how do good patterns travel from project A to project B? Pearl shipped three worked examples worth capturing — one-prompt picker with typed prefix (pearl-pick-source), magit-transient state buttons, and "no empty input as meaningful" (none-sentinel as first candidate). Each is a small principle with wide surface area; without a catalog, every project re-derives them from scratch.
@@ -1197,6 +1197,9 @@ Open design questions before any implementation:
Pearl recommends a one-page spec (problem + design + open questions + acceptance) before implementation. Pearl available to come back for spec-review iterations.
+*** 2026-05-28 Thu @ 08:12:55 -0500 Pearl shipped patterns 4-6, filed alongside the prior two
+Three more pearl handoffs landed and were filed during this audit. Filed: [[file:docs/design/2026-05-28-pattern-catalog-prompt-labels-and-defaults.org][prompt-labels-and-defaults]] (patterns 4-5: label-matches-behavior, default-most-common with friction-proportional-to-consequence) and [[file:docs/design/2026-05-28-pattern-catalog-prompt-collapse.org][prompt-collapse]] (pattern 6: collapse N orthogonal prompts into one enriched prompt). The catalog's evidence base is now four pearl notes in =docs/design/= covering six patterns plus the synthesizing principle Pearl articulated — "choices on screen, accurately labeled, ordered by what the user most often wants, friction sized to the cost of being wrong."
+
:PROPERTIES:
:LAST_REVIEWED: 2026-05-28
:END:
@@ -1216,6 +1219,50 @@ Before any implementation: needs a real review pass on the spec, and a decision
:LAST_REVIEWED: 2026-05-28
:END:
+** TODO [#B] Codex Phase 1 — AI_AGENT_ID + session-context.d/<id>.org :feature:
+:PROPERTIES:
+:CREATED: [2026-05-28 Thu]
+:LAST_REVIEWED: 2026-05-28
+:END:
+
+Lifted from the broader codex runtime spec ([[file:docs/design/2026-05-28-generic-agent-runtime-spec.org]]) as the immediate-correctness slice independent of the larger arc. The singleton =.ai/session-context.org= is unsafe under simultaneous agents — two LLMs running in the same project at the same time would overwrite each other's session state.
+
+Scope: introduce an =AI_AGENT_ID= environment variable and split the single =session-context.org= into a per-agent =session-context.d/<id>.org= directory. No other phases of the runtime refactor are in this task — keep the surface small, fix the race, ship.
+
+Touches: =.ai/protocols.org= (rename rule + recovery anchor), =.ai/workflows/startup.org= (Phase A check), wrap-up workflow (rename target), per-project session record discoverability.
+
+Verification: simulate two agents sharing a project (separate AI_AGENT_ID values) and confirm session-context writes land in distinct files without interleaving.
+
+Parent: see [[#16 Generic agent runtime support][Generic agent runtime support — Codex spec v0]] above for the larger arc this is sliced from.
+
+** TODO [#C] Run =--archive-done= sweep at start of =open-tasks.org= Phase A :chore:quick:solo:
+:PROPERTIES:
+:CREATED: [2026-05-28 Thu]
+:LAST_REVIEWED: 2026-05-28
+:END:
+
+From pearl handoff 2026-05-28. =open-tasks.org= Next Mode reads =* Project Open Work= and skips =* Project Resolved= correctly, but a level-2 task that completed during a session sits as =** DONE= under Open Work until something archives it. Between cleanups, a freshly-DONE task can surface as a "what's next" candidate.
+
+Proposed fix: as the first step of =open-tasks.org= Phase A, run =emacs --batch -q -l .ai/scripts/todo-cleanup.el --archive-done todo.org=, then read =todo.org=. The cleanup tool already exists; this is wiring it into the workflow.
+
+Cost: a few hundred ms at the start of every "what's next" invocation. Win: recommendations never include DONE work.
+
+Optional refinement: gate behind a check for read-only / dry-run mode if that's ever introduced. The default invocation archives.
+
+** TODO [#C] Enumerate implementation tasks in =spec-review.org= Phase 6 :feature:solo:
+:PROPERTIES:
+:CREATED: [2026-05-28 Thu]
+:LAST_REVIEWED: 2026-05-28
+:END:
+
+From pearl handoff 2026-05-28. =spec-review.org= Phase 6 currently says "log deferred work to =todo.org=: v1 implementation = [#B] ... vNext/someday = [#D]." That covers deferred and v1 in passing but doesn't lift the spec's =Implementation phases= section into a drop-in =todo.org= block.
+
+Proposed addition to Phase 6: a structured step that reads the spec's =Implementation phases= section and produces a =[#B] TODO= entry per phase (subject line, tags, one-line body, pointer back to spec), plus a final entry for the test surface (unit / integration / e2e / manual-verify mirroring the spec's =Acceptance criteria= when present). Emit under a new section "Implementation tasks (drop-in for todo.org)" in the review file. Format follows =todo-format.md= (terse heading, body holds context, tags on heading).
+
+Three wins: handoff is one paste not a re-read; forces specs to be implementable in pieces (a spec without a phase decomposition fails this step, surfacing the shape problem); closes the loop on =Acceptance criteria= as manual-verify entries.
+
+If the spec lacks an =Implementation phases= section, the step is the prompt to ask the author to add one before =Ready=.
+
** DONE [#C] Iteration-history backfill for spec-review and spec-response :docs:followup:
CLOSED: [2026-05-28 Thu]
Source: org-drill inbox 2026-05-28.