aboutsummaryrefslogtreecommitdiff
path: root/todo.org
diff options
context:
space:
mode:
Diffstat (limited to 'todo.org')
-rw-r--r--todo.org224
1 files changed, 115 insertions, 109 deletions
diff --git a/todo.org b/todo.org
index bb2b2de..d4ab083 100644
--- a/todo.org
+++ b/todo.org
@@ -34,12 +34,6 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest
* Rulesets Open Work
-** CANCELLED [#B] todo-cleanup.el per-area Open Work / Resolved pairs :feature:
-CLOSED: [2026-06-11 Thu]
-=--archive-done= assumes exactly one level-1 "Open Work" and one "Resolved" heading per todo.org. Home's consolidated file briefly carried per-area pairs and the pass skipped. Filed from home's 2026-06-11 addendum, then held the same evening when Craig flagged that he expected a single pair.
-
-Cancelled 2026-06-11: Craig confirmed the decision — one todo queue with a single Open Work / Resolved pair. Home reshapes its consolidated file to that form, and the existing single-pair tooling works unmodified. No code change needed.
-
** TODO [#B] Helper-instance support — concurrent same-project Claude :feature:spec:
:PROPERTIES:
:CREATED: [2026-06-11 Thu]
@@ -61,14 +55,9 @@ Implement Phase 1.5 of the generic-agent-runtime spec ([[file:docs/design/2026-0
Independent of the spec's phases 2-6 (runtime-neutral refactor), which stay gated on their own go/no-go.
-** VERIFY page-signal pager account deregistered — re-registration needs your hands
+** VERIFY [#C] page-signal pager account deregistered — re-registration needs your hands
Reported by .emacs.d 2026-06-12 01:01: the dedicated pager number (+15045173983, the Claude Pager Google Voice number on signal-cli) returns "User ... is not registered" on every send — Signal appears to have deregistered it (GV numbers get periodically re-verified). Re-registration requires captcha/SMS, which only you can do. Until then every page-signal call fails; .emacs.d's config-audit page fell back to email. Wrapper lives at claude-templates/bin/page-signal.
-** 2026-06-12 Fri @ 02:56:58 -0500 New personal projects are home regroupings — no mechanism needed
-Craig's call (2026-06-12): new personal projects will live in home, and there's no project-creation mechanism to build — he'll be working in home and simply decide to group some things differently. Nothing to do.
-
-Concurrence, verified: no template doc directs new personal work into ~/projects (first-session.org, install-ai.sh, and the README carry no such guidance; the only ~/projects references are discovery-root scans, which home and work still need). The situation as it stands: a new personal "project" is an area dir plus tasks inside home's existing =.ai/= machinery, no bootstrap step; =first-session.org= remains the bootstrap for standalone code projects in ~/code, unchanged and correct; "launch finances"-style trigger phrases for folded names degrade politely to the no-match candidate list, worth work only if real friction shows up.
-
** DOING [#C] Check that memories are sync'd across machines via git :spec:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-10
@@ -171,16 +160,6 @@ Expected: all four behave per the spec; any miss promotes to a bug task. (Agent-
:END:
A scheduled headless morning run chaining the existing pieces: startup checks, the triage-intake scan, a system health check — producing the prep doc plus a report and a notify ping, with all remediation propose-only. Staged adoption from the 2026-06-11 insights report's "Self-Healing Daily Ops Orchestrator": read-only first; promote individual routine remediations to auto only after each has a track record. Known blockers to design around: headless MCP auth (interactively-authenticated servers are absent in cron runs) and the consent boundary (triage Phase D, anything destructive).
-** DONE [#C] Monthly session-harvest workflow :feature:
-CLOSED: [2026-06-11 Thu]
-:PROPERTIES:
-:CREATED: [2026-06-11 Thu]
-:LAST_REVIEWED: 2026-06-11
-:END:
-A monthly pass over recent =.ai/sessions/= summaries across projects proposing promotion candidates: patterns for the catalog, durable facts for the KB, rule refinements, workflow learnings. Sibling cadence to the roam-hygiene timer; a workflow run on schedule, not a standing agent. From the 2026-06-11 insights report's "Canonical-Aware Knowledge & Workflow Curator" — the capture/promote machinery exists (pattern catalog, /codify, KB); this adds the mining cadence.
-
-Shipped 2026-06-11 as [[file:.ai/workflows/session-harvest.org][session-harvest.org]] (template + INDEX entry): five phases, four promotion lanes, /codify-grade gates + work-confidentiality scrub, =:LAST_HARVEST:= marker in notes.org, and the KB receipt-line metrics readout for the ~2026-07-10 checkpoint. Window filter reads session-filename date prefixes (mtime proved unreliable in a live test). First run due ~2026-07-11.
-
** TODO [#C] Build =create-documentation= skill for high-quality project/product docs :feature:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-10
@@ -818,93 +797,6 @@ The skill should reject:
public/library/API docs: =llms.txt= or markdown export is valuable, but normal
human navigation remains primary.
-** DONE [#C] Build =/update-skills= skill for keeping forks in sync with upstream :feature:
-CLOSED: [2026-06-11 Thu]
-:PROPERTIES:
-:LAST_REVIEWED: 2026-06-10
-:END:
-
-The rulesets repo has a growing set of forks (=arch-decide= from
-wshobson/agents, =playwright-js= from lackeyjb/playwright-skill, =playwright-py=
-from anthropics/skills/webapp-testing). Over time, upstream releases fixes,
-new templates, or scope expansions that we'd want to pull in without losing
-our local modifications. A skill should handle this deliberately rather than
-by manual re-cloning.
-
-Shipped 2026-06-11: [[file:.claude/commands/update-skills.md][/update-skills command]] + [[file:scripts/update-skills.py][helper script]] (17 bats tests) + three bootstrapped manifests under [[file:upstreams/][upstreams/]]. The first real upstream drift will exercise the interactive per-file/per-hunk flow end to end; the merge mechanics are covered by the test suite.
-
-*** 2026-06-11 Thu @ 17:05:28 -0500 Specification written as the shipped artifacts
-The command doc ([[file:.claude/commands/update-skills.md][update-skills.md]]) carries the user-facing spec: discovery, classification statuses, the per-file confirmation and per-hunk conflict flow, mark-synced semantics, and the missing-baseline fallback. The script's module docstring specifies the manifest schema. Two deviations from the 2026-05-16 design, with reasons: manifests live centrally at =upstreams/<name>/= instead of per-skill =.skill-upstream= dotfile dirs (arch-decide became two flat files in =commands/= and can't carry one — a =files= rename map covers it); baselines were seeded from the 2026-06-11 upstream HEADs since the true fork-point commits are unrecoverable, so pre-existing local modifications classify as =local-only= going forward.
-
-*** 2026-05-16 Sat @ 01:14:20 -0500 original goals and decisions
-**** Design decisions (agreed)
-
-- *Upstream tracking:* per-fork manifest =.skill-upstream= (YAML or JSON):
- - =url= (GitHub URL)
- - =ref= (branch or tag)
- - =subpath= (path inside the upstream repo when it's a monorepo)
- - =last_synced_commit= (updated on successful sync)
-- *Local modifications:* 3-way merge. Requires a pristine baseline snapshot of
- the upstream-at-time-of-fork. Store under =.skill-upstream/baseline/= or
- similar; committed to the rulesets repo so the merge base is reproducible.
-- *Apply changes:* skill edits files directly with per-file confirmation.
-- *Conflict policy:* per-hunk prompt inside the skill. When a 3-way merge
- produces a conflict, the skill walks each conflicting hunk and asks Craig:
- keep-local / take-upstream / both / skip. Editor-independent; works on
- machines where Emacs isn't available. Fallback when baseline is missing
- or corrupt (can't run 3-way merge): write =.local=, =.upstream=,
- =.baseline= files side-by-side and surface as manual review.
-
-**** V1 Scope
-
-- [ ] Skill at =~/code/rulesets/update-skills/=
-- [ ] Discovery: scan sibling skill dirs for =.skill-upstream= manifests
-- [ ] Helper script (bash or python) to:
- - Clone each upstream at =ref= shallowly into =/tmp/=
- - Compare current skill state vs latest upstream vs stored baseline
- - Classify each file: =unchanged= / =upstream-only= / =local-only= / =both-changed=
- - For =both-changed=: run =git merge-file --stdout <local> <baseline> <upstream>=;
- if clean, write result directly; if conflicts, parse the conflict-marker
- output and feed each hunk into the per-hunk prompt loop
-- [ ] Per-hunk prompt loop:
- - Show base / local / upstream side-by-side for each conflicting hunk
- - Ask: keep-local / take-upstream / both (concatenate) / skip (leave marker)
- - Assemble resolved hunks into the final file content
-- [ ] Per-fork summary output with file-level classification table
-- [ ] Per-file confirmation flow (yes / no / show-diff) BEFORE per-hunk loop
-- [ ] On successful sync: update =last_synced_commit= in the manifest
-- [ ] =--dry-run= to preview without writing
-
-**** V2+ (deferred)
-
-- [ ] Track upstream *releases* (tags) not just branches, so skill can propose
- "upgrade from v1.2 to v1.3" with release notes pulled in
-- [ ] Generate patch files as an alternative apply method (for users who prefer
- =git apply= / =patch= over in-place edits)
-- [ ] Non-interactive mode (=--non-interactive= / CI): skip conflict resolution,
- emit side-by-side files for later manual review
-- [ ] Auto-run on a schedule via Claude Code background agent
-- [ ] Summary of aggregate upstream activity across all forks (which forks have
- upstream changes waiting, which don't)
-- [ ] Optional editor integration: on machines with Emacs, offer
- =M-x smerge-ediff= as an alternate path for users who prefer ediff over
- per-hunk prompts
-
-**** Initial forks to enumerate (for manifest bootstrap)
-
-- [ ] =arch-decide= → =wshobson/agents= :: =plugins/documentation-generation/skills/architecture-decision-records= :: MIT
-- [ ] =playwright-js= → =lackeyjb/playwright-skill= :: =skills/playwright-skill= :: MIT
-- [ ] =playwright-py= → =anthropics/skills= :: =skills/webapp-testing= :: Apache-2.0
-
-**** Open questions
-
-- [ ] What happens when upstream *renames* a file we fork? Skill would see
- "file gone from upstream, still present locally" — drop, keep, or prompt?
-- [ ] What happens when upstream splits into multiple forks (e.g., a plugin
- reshuffles its structure)? Probably out of scope for v1; manual migration.
-- [ ] 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 :feature:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-10
@@ -962,6 +854,12 @@ Triggers that would prompt "let's build it now":
Upstream reference (do not vendor): ComposioHQ/awesome-claude-skills
=content-research-writer/SKILL.md=.
+** TODO [#D] todo-cleanup =--archive-done= reports 0 moves while moving subtrees :bug:
+:PROPERTIES:
+:CREATED: [2026-06-12 Fri]
+:END:
+Observed at the 2026-06-12 wrap: the pass relocated four closed subtrees from Open Work to Resolved (verified by the git diff, 109 lines each way) while printing "todo-cleanup --archive-done: 0 subtree(s) moved". Reporting-only defect, the moves were correct. Likely the counter resets or prints before the move loop tallies. Reproduce with closed level-2 tasks present, then fix the count line (ERT first).
+
** TODO [#D] Revisit =c4-*= rename if a second notation skill ships :chore:
:PROPERTIES:
:LAST_REVIEWED: 2026-06-10
@@ -2682,3 +2580,111 @@ What we're verifying: the SessionStart(clear) hook fires and the fresh context r
- In any project session with a live .ai/session-context.org (this rulesets session qualifies), type /clear
- Send any short message (the injected context loads but the model waits for your next keystroke)
Expected: the reply starts with "flushed." on its own line, restates the Active Goal and immediate Next Step, and does NOT run the startup workflow.
+** 2026-06-12 Fri @ 02:56:58 -0500 New personal projects are home regroupings — no mechanism needed
+Craig's call (2026-06-12): new personal projects will live in home, and there's no project-creation mechanism to build — he'll be working in home and simply decide to group some things differently. Nothing to do.
+
+Concurrence, verified: no template doc directs new personal work into ~/projects (first-session.org, install-ai.sh, and the README carry no such guidance; the only ~/projects references are discovery-root scans, which home and work still need). The situation as it stands: a new personal "project" is an area dir plus tasks inside home's existing =.ai/= machinery, no bootstrap step; =first-session.org= remains the bootstrap for standalone code projects in ~/code, unchanged and correct; "launch finances"-style trigger phrases for folded names degrade politely to the no-match candidate list, worth work only if real friction shows up.
+
+** DONE [#C] Build =/update-skills= skill for keeping forks in sync with upstream :feature:
+CLOSED: [2026-06-11 Thu]
+:PROPERTIES:
+:LAST_REVIEWED: 2026-06-10
+:END:
+
+The rulesets repo has a growing set of forks (=arch-decide= from
+wshobson/agents, =playwright-js= from lackeyjb/playwright-skill, =playwright-py=
+from anthropics/skills/webapp-testing). Over time, upstream releases fixes,
+new templates, or scope expansions that we'd want to pull in without losing
+our local modifications. A skill should handle this deliberately rather than
+by manual re-cloning.
+
+Shipped 2026-06-11: [[file:.claude/commands/update-skills.md][/update-skills command]] + [[file:scripts/update-skills.py][helper script]] (17 bats tests) + three bootstrapped manifests under [[file:upstreams/][upstreams/]]. The first real upstream drift will exercise the interactive per-file/per-hunk flow end to end; the merge mechanics are covered by the test suite.
+
+*** 2026-06-11 Thu @ 17:05:28 -0500 Specification written as the shipped artifacts
+The command doc ([[file:.claude/commands/update-skills.md][update-skills.md]]) carries the user-facing spec: discovery, classification statuses, the per-file confirmation and per-hunk conflict flow, mark-synced semantics, and the missing-baseline fallback. The script's module docstring specifies the manifest schema. Two deviations from the 2026-05-16 design, with reasons: manifests live centrally at =upstreams/<name>/= instead of per-skill =.skill-upstream= dotfile dirs (arch-decide became two flat files in =commands/= and can't carry one — a =files= rename map covers it); baselines were seeded from the 2026-06-11 upstream HEADs since the true fork-point commits are unrecoverable, so pre-existing local modifications classify as =local-only= going forward.
+
+*** 2026-05-16 Sat @ 01:14:20 -0500 original goals and decisions
+**** Design decisions (agreed)
+
+- *Upstream tracking:* per-fork manifest =.skill-upstream= (YAML or JSON):
+ - =url= (GitHub URL)
+ - =ref= (branch or tag)
+ - =subpath= (path inside the upstream repo when it's a monorepo)
+ - =last_synced_commit= (updated on successful sync)
+- *Local modifications:* 3-way merge. Requires a pristine baseline snapshot of
+ the upstream-at-time-of-fork. Store under =.skill-upstream/baseline/= or
+ similar; committed to the rulesets repo so the merge base is reproducible.
+- *Apply changes:* skill edits files directly with per-file confirmation.
+- *Conflict policy:* per-hunk prompt inside the skill. When a 3-way merge
+ produces a conflict, the skill walks each conflicting hunk and asks Craig:
+ keep-local / take-upstream / both / skip. Editor-independent; works on
+ machines where Emacs isn't available. Fallback when baseline is missing
+ or corrupt (can't run 3-way merge): write =.local=, =.upstream=,
+ =.baseline= files side-by-side and surface as manual review.
+
+**** V1 Scope
+
+- [ ] Skill at =~/code/rulesets/update-skills/=
+- [ ] Discovery: scan sibling skill dirs for =.skill-upstream= manifests
+- [ ] Helper script (bash or python) to:
+ - Clone each upstream at =ref= shallowly into =/tmp/=
+ - Compare current skill state vs latest upstream vs stored baseline
+ - Classify each file: =unchanged= / =upstream-only= / =local-only= / =both-changed=
+ - For =both-changed=: run =git merge-file --stdout <local> <baseline> <upstream>=;
+ if clean, write result directly; if conflicts, parse the conflict-marker
+ output and feed each hunk into the per-hunk prompt loop
+- [ ] Per-hunk prompt loop:
+ - Show base / local / upstream side-by-side for each conflicting hunk
+ - Ask: keep-local / take-upstream / both (concatenate) / skip (leave marker)
+ - Assemble resolved hunks into the final file content
+- [ ] Per-fork summary output with file-level classification table
+- [ ] Per-file confirmation flow (yes / no / show-diff) BEFORE per-hunk loop
+- [ ] On successful sync: update =last_synced_commit= in the manifest
+- [ ] =--dry-run= to preview without writing
+
+**** V2+ (deferred)
+
+- [ ] Track upstream *releases* (tags) not just branches, so skill can propose
+ "upgrade from v1.2 to v1.3" with release notes pulled in
+- [ ] Generate patch files as an alternative apply method (for users who prefer
+ =git apply= / =patch= over in-place edits)
+- [ ] Non-interactive mode (=--non-interactive= / CI): skip conflict resolution,
+ emit side-by-side files for later manual review
+- [ ] Auto-run on a schedule via Claude Code background agent
+- [ ] Summary of aggregate upstream activity across all forks (which forks have
+ upstream changes waiting, which don't)
+- [ ] Optional editor integration: on machines with Emacs, offer
+ =M-x smerge-ediff= as an alternate path for users who prefer ediff over
+ per-hunk prompts
+
+**** Initial forks to enumerate (for manifest bootstrap)
+
+- [ ] =arch-decide= → =wshobson/agents= :: =plugins/documentation-generation/skills/architecture-decision-records= :: MIT
+- [ ] =playwright-js= → =lackeyjb/playwright-skill= :: =skills/playwright-skill= :: MIT
+- [ ] =playwright-py= → =anthropics/skills= :: =skills/webapp-testing= :: Apache-2.0
+
+**** Open questions
+
+- [ ] What happens when upstream *renames* a file we fork? Skill would see
+ "file gone from upstream, still present locally" — drop, keep, or prompt?
+- [ ] What happens when upstream splits into multiple forks (e.g., a plugin
+ reshuffles its structure)? Probably out of scope for v1; manual migration.
+- [ ] Rate-limit / offline mode: if GitHub is unreachable, should skill fail
+ or degrade gracefully? Likely degrade; print warning per fork.
+
+** DONE [#C] Monthly session-harvest workflow :feature:
+CLOSED: [2026-06-11 Thu]
+:PROPERTIES:
+:CREATED: [2026-06-11 Thu]
+:LAST_REVIEWED: 2026-06-11
+:END:
+A monthly pass over recent =.ai/sessions/= summaries across projects proposing promotion candidates: patterns for the catalog, durable facts for the KB, rule refinements, workflow learnings. Sibling cadence to the roam-hygiene timer; a workflow run on schedule, not a standing agent. From the 2026-06-11 insights report's "Canonical-Aware Knowledge & Workflow Curator" — the capture/promote machinery exists (pattern catalog, /codify, KB); this adds the mining cadence.
+
+Shipped 2026-06-11 as [[file:.ai/workflows/session-harvest.org][session-harvest.org]] (template + INDEX entry): five phases, four promotion lanes, /codify-grade gates + work-confidentiality scrub, =:LAST_HARVEST:= marker in notes.org, and the KB receipt-line metrics readout for the ~2026-07-10 checkpoint. Window filter reads session-filename date prefixes (mtime proved unreliable in a live test). First run due ~2026-07-11.
+
+** CANCELLED [#B] todo-cleanup.el per-area Open Work / Resolved pairs :feature:
+CLOSED: [2026-06-11 Thu]
+=--archive-done= assumes exactly one level-1 "Open Work" and one "Resolved" heading per todo.org. Home's consolidated file briefly carried per-area pairs and the pass skipped. Filed from home's 2026-06-11 addendum, then held the same evening when Craig flagged that he expected a single pair.
+
+Cancelled 2026-06-11: Craig confirmed the decision — one todo queue with a single Open Work / Resolved pair. Home reshapes its consolidated file to that form, and the existing single-pair tooling works unmodified. No code change needed.
+