aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-26 02:31:33 -0500
committerCraig Jennings <c@cjennings.net>2026-05-26 02:31:33 -0500
commitb7b932d208849b69917ab076f5d990ce6a208fdd (patch)
treedc00d53e53f9e35cdbb53ca515015d1a10157b53
parent15cca70d2b8badd3314b87d4cd00cb21bf5ef113 (diff)
downloadrulesets-b7b932d208849b69917ab076f5d990ce6a208fdd.tar.gz
rulesets-b7b932d208849b69917ab076f5d990ce6a208fdd.zip
chore(todo): full review pass — re-stamp, drop stale schedules, refresh 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.
-rw-r--r--todo.org39
1 files changed, 19 insertions, 20 deletions
diff --git a/todo.org b/todo.org
index 6f910b0..4fe67d3 100644
--- a/todo.org
+++ b/todo.org
@@ -9,7 +9,7 @@ Project-scoped (not the global =~/sync/org/roam/inbox.org= list).
** TODO [#C] Check that memories are sync'd across machines via git
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-20
+:LAST_REVIEWED: 2026-05-26
:END:
*** 2026-05-16 Sat @ 01:12:52 -0500 Spec
#+begin_src cj: comment
@@ -49,7 +49,7 @@ Created bare =git@cjennings.net:claude-memory.git=, cloned to =~/.claude-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
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-20
+:LAST_REVIEWED: 2026-05-26
:END:
Create a Claude skill named =create-documentation= that can plan, write,
@@ -686,7 +686,7 @@ The skill should reject:
** TODO [#C] Build =/update-skills= skill for keeping forks in sync with upstream
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-20
+:LAST_REVIEWED: 2026-05-26
:END:
The rulesets repo has a growing set of forks (=arch-decide= from
@@ -771,9 +771,8 @@ write the specification here.
or degrade gracefully? Likely degrade; print warning per fork.
** TODO [#C] Build /research-writer — clean-room synthesis for research-backed long-form
-SCHEDULED: <2026-05-15 Fri>
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
:END:
Gap in current rulesets: between =brainstorm= (idea refinement → design doc)
@@ -829,9 +828,8 @@ 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
-SCHEDULED: <2026-05-15 Fri>
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
:END:
=Skill Seekers= ([[https://github.com/yusufkaraaslan/Skill_Seekers]]) is a Python
@@ -878,7 +876,7 @@ discard and stick with hand briefing.
** TODO [#C] Revisit =c4-*= rename if a second notation skill ships
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
:END:
Current naming keeps =c4-analyze= and =c4-diagram= as-is (framework prefix
@@ -1024,7 +1022,7 @@ 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:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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.
@@ -1045,14 +1043,14 @@ Useful for diagnosing connection failures and for the eventual =make doctor= int
** TODO [#C] Update =README.org= with MCP install pipeline section :solo:quick:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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.
@@ -1077,7 +1075,7 @@ The flow tonight worked but took a handful of manual steps. One script collapses
** TODO [#C] Decide on category-3 rule copies in the deepsat tree
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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:
@@ -1089,7 +1087,7 @@ For each: read the file, diff against the rulesets canonical, decide whether it'
** TODO [#C] Audit language-specific rule files for cross-project duplication
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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:
@@ -1100,9 +1098,9 @@ The four canonical rules (=commits=, =testing=, =verification=, =subagents=) are
The Elisp pair is the most suspicious — three repos using essentially the same rules. Audit: diff these across the projects, check for drift, then decide whether to canonicalize them under =~/code/rulesets/claude-rules/languages/<lang>/= and symlink, or leave them as project-local.
-** TODO [#C] Consolidate =claude-templates/Makefile= after fold :chore:
+** TODO [#C] Consolidate =claude-templates/Makefile= after fold :chore:quick:solo:
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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.
@@ -1116,21 +1114,22 @@ 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
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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. Now that =triage-intake.org= exists as a standalone scan over the same source set, daily-prep could call it and consume its synthesis instead of duplicating the source-scan logic — DRYs up a 57k-line workflow and keeps both flows in sync when sources change.
+=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.
Scope:
- Identify the sections in =daily-prep.org= that do the inline triage (the email / Slack / Linear / PR / calendar fan-out, plus the "Sources checked: ..." footer at the top of each generated prep doc).
-- Replace those sections with "run =triage-intake.org=" and adapt the downstream sections (Heads-up, Day's Priorities, Carry-forwards) to read triage-intake's synthesis output rather than the inline scan results.
+- Replace those sections with "run the =triage-intake.org= engine" and adapt the downstream sections (Heads-up, Day's Priorities, Carry-forwards) to read the engine's synthesis output rather than the inline scan results.
- Verify the generated prep doc still has the same shape (Heads-up + Day's Priorities + Carry-forwards + Sources checked).
+- Reconcile source coverage: daily-prep's inline triage scans work accounts (3 Gmail, Slack, Linear, GHE PRs) that are project-specific plugins under =.ai/project-workflows/=, not general plugins. The delegation must ensure the engine loads those project plugins (Phase 0 globs both dirs) so nothing daily-prep currently scans drops out.
-Origin: came up while authoring =triage-intake.org= on 2026-05-11.
+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
:PROPERTIES:
-:LAST_REVIEWED: 2026-05-25
+:LAST_REVIEWED: 2026-05-26
: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.