diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-02 23:07:48 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-02 23:07:48 -0500 |
| commit | fe3bd8fb20094ed4ebfea499fad6f551bc1e1800 (patch) | |
| tree | 94dd1814b7e6e85c8d625127604baa5cbb293be4 | |
| parent | ac693a6b7fa7abe88f7778f8e793d5ddfd32f24e (diff) | |
| download | rulesets-fe3bd8fb20094ed4ebfea499fad6f551bc1e1800.tar.gz rulesets-fe3bd8fb20094ed4ebfea499fad6f551bc1e1800.zip | |
chore(ai): archive session record
Promoted the flush workflow into rulesets as a /flush skill plus a canonicalized SessionStart(clear) hook, then ran the four open :solo: tasks: start-work Justify and Approach gate additions, a task-review chain on task-audit, and lint-org follow-ups reconcile-on-write.
| -rw-r--r-- | .ai/sessions/2026-06-02-23-06-flush-promotion-and-solo-task-batch.org | 58 | ||||
| -rw-r--r-- | todo.org | 58 |
2 files changed, 85 insertions, 31 deletions
diff --git a/.ai/sessions/2026-06-02-23-06-flush-promotion-and-solo-task-batch.org b/.ai/sessions/2026-06-02-23-06-flush-promotion-and-solo-task-batch.org new file mode 100644 index 0000000..5a92e52 --- /dev/null +++ b/.ai/sessions/2026-06-02-23-06-flush-promotion-and-solo-task-batch.org @@ -0,0 +1,58 @@ +#+TITLE: Flush Promotion + Autonomous :solo: Task Batch +#+AUTHOR: Craig Jennings & Claude +#+DATE: 2026-06-02 + +* Summary + +** Active Goal + +Process the flush handoff from the work project (promote it into rulesets), then run all four open :solo: tasks autonomously in no-approvals mode. Ten commits, all pushed to origin/main. + +** Decisions + +- *Flush promoted as a /flush skill, not a project-workflow doc.* The post-clear hook was already global, so packaging the pre-clear checkpoint half as a skill makes both halves callable from any project with no per-project sync. Hook canonicalized to hooks/session-clear-resume.sh with the ~/.claude/hooks/ symlink; settings.json + settings-snippet.json wired so fresh machines get it on make install-hooks. +- *Preserve substantive handoff bundles — don't delete after implementing.* Craig flagged that deleting the flush bundle after implementing was wrong. The implement-now "just delete" disposition is for noise, not validated design history. Restored the rationale + original flush.org into docs/design/2026-06-02-flush-promotion.org and saved a feedback memory. Later re-sends of the bundle were deduped against the implemented + preserved work and cleared. +- *Flush refinement: read notes.org before the anchor on resume.* A second work handoff, implemented the same evening. The anchor carries session state; notes.org carries standing knowledge (code paths, conventions, contacts) a resumed session needs. Runtime-guarded on notes.org presence. +- *no-approvals for the :solo: batch.* Craig curated the set by tagging four tasks :solo:, then said "do all the :solo: tasks in no-approval workflow mode" + "commit and push everything." Interaction gates dropped; review-code / voice / tests / reconcile / logging stayed on. +- *lint-org follow-ups: append-log → converged-per-file-state.* Reconcile-on-write rewrites the current file's section from the current run, so resolved findings drop, re-runs dedupe, and entries key on content (checker + msg) rather than line number. Flagged the semantics change for Craig to revisit if he'd rather keep an append log. + +** Data Collected / Findings + +- The live ~/.claude/hooks/session-clear-resume.sh was a real file (not canonical) and byte-identical to the inbox artifact; canonicalized into hooks/ and symlinked. +- open-tasks.org does not invoke task-review (it routes "task review" away), so chaining task-review onto task-audit had no consistency constraint to honor. +- lint-org.el (410 lines) appended a dated section per run with line-keyed entries — the exact source of the followups drift. Reconcile rewrite is TDD'd: 27/27 ERT green, 5 followups tests (record-by-content, dedupe, drop-on-resolve, preserve-other-files, plus the existing noop/check-mode). +- Two minor voice slips in commit bodies (an em-dash in 2cff51e, a semicolon/comma-splice elsewhere). Left in git log; not worth a force-push. + +** Files Modified + +- flush/SKILL.md (new), hooks/session-clear-resume.sh (canonicalized + notes.org-before-anchor), hooks/settings-snippet.json, .claude/settings.json — flush promotion + refinement (526df6d, 2433e74). +- docs/design/2026-06-02-flush-promotion.org (new) — preserved handoff bundle + refinement record (3bebb54, refinement appended in 2433e74). +- .claude/commands/start-work.md — Justify gate "reasons not to do this" (8ab5ec1); Approach gate spec-prerequisite check (2cff51e). +- claude-templates/.ai/workflows/task-audit.org (+ mirror) — Phase F chains task-review; Phase C reaps dead-link entries (2911038, ac693a6). +- claude-templates/.ai/scripts/lint-org.el (+ mirror) + tests — reconcile-on-write (ac693a6). +- todo.org — 4 :solo: tasks DONE, task-review stamps, :quick: tags, new start-work Approach task filed. +- Memory: feedback_preserve_substantive_handoff_bundles.md + MEMORY.md pointer. + +** Next Steps + +- *Pattern catalog [#B]* is the one open high-priority task, gated on Craig reviewing the spec at docs/design/2026-06-02-pattern-catalog-spec.org. Pearl available for iterations. +- Open [#C]s: memories-synced-across-machines (needs a direction decision), create-documentation skill, and the rotation batch (update-skills, research-writer, etc.). +- The lint-org follow-ups semantics change (append → converged) is worth a second look if Craig wants it to stay an append log with just dedupe. +- First real adopters of the new /flush skill, the task-audit Phase F chain, and the start-work gate additions are the live tests — all verified locally but not yet exercised on a consuming project. + +* Session Log + +** 2026-06-02 — startup + flush handoff +Clean startup (no crash anchor). Inbox carried a three-file flush handoff from work + a lint-followups staleness note. Processed the flush handoff: authored /flush skill, canonicalized the hook, wired settings + snippet. Committed 526df6d; filed the start-work Approach task (47a8a4e). + +** 2026-06-02 — preserve-the-bundle correction +Craig flagged the deleted flush bundle should have been kept. Restored it as docs/design/2026-06-02-flush-promotion.org (3bebb54), saved a feedback memory. Two later re-sends from work were deduped against the implemented + preserved work and cleared. + +** 2026-06-02 — task review +Walked the 7-oldest-unreviewed batch: all Keep, stamped :LAST_REVIEWED:, :quick: on the two start-work tasks (656f11d). Staleness >7d dropped from 3 to 0. + +** 2026-06-02 — flush refinement +Implemented the notes.org-before-anchor resume refinement from a second work handoff (2433e74); verified all three hook branches. + +** 2026-06-02 — no-approvals :solo: batch +Craig tagged four tasks :solo: and invoked no-approvals. Shipped in order: start-work Justify "reasons not to do this" (8ab5ec1), start-work Approach spec-prerequisite check (2cff51e), task-audit Phase F task-review chain (2911038), lint-org reconcile-on-write + task-audit dead-link reaping (ac693a6, TDD 27/27). Each committed + pushed with review + voice + full suite green. @@ -34,37 +34,6 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest * Rulesets Open Work -** DONE [#C] task-review pass at end of task-audit :chore:solo: -CLOSED: [2026-06-02 Tue] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-02 -:END: -Have the =task-audit= workflow chain a =task-review= pass as its final phase, so a freshly-audited list also gets the lighter staleness/honesty sweep without a second invocation. The legend already notes the division of labor — task-audit assigns and refreshes tags, task-review keeps them honest in passing — so running task-review at the tail of task-audit closes the loop in one pass. Edit =claude-templates/.ai/workflows/task-audit.org= (and the synced mirror) to add the final phase; check whether =open-tasks.org= already invokes task-review so the chaining stays consistent. - -** DONE [#C] lint-followups drift — reconcile-on-write + audit dead-link reaping :feature:solo: -CLOSED: [2026-06-02 Tue] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-02 -:END: -From an .emacs.d handoff (2026-06-02): running task-audit against a large todo.org proved several =.ai/lint-followups.org= entries stale (four dead-link flags pointed at docs that now exist; three near-duplicate dated lint runs had piled up). Two fixes, scoped separately. - -1. =lint-org= workflow/script (the real fix): reconcile-on-write. Before appending a run, drop entries whose finding no longer reproduces (dead link now resolves, flagged block/timestamp now clean) and dedupe against the prior run instead of re-logging. Key entries by content/finding rather than line number, so they survive edits to the target file (line numbers go stale immediately). -2. =task-audit.org= (small, narrow): in the Phase C link-hygiene step, when fixing/verifying a =file:= link, also reap any matching dead-link entry in the project's lint-followups file so the two artifacts don't drift. Scope explicitly to dead-link entries — do NOT pull general lint cleanup into the audit; that mixes two concerns and slows the audit. - -** DONE [#C] start-work Justify gate: explicit "reasons not to do this" item :feature:quick:solo: -CLOSED: [2026-06-02 Tue] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-02 -:END: -From a work handoff (2026-06-02, surfaced running /start-work on a clean low-risk refactor). The Phase 2 Justify gate has "Downsides" and "Alternatives considered" but no forced devil's-advocate verdict on "should we even do this?" Add a "top reasons not to do this" item: surface the top three objections if any exist; when none rise to a real objection, state one line instead of manufacturing three (e.g. "Nothing material argues against this; no reason to defer or drop it"). Building the case against the work before committing is cheapest exactly at this gate, which is its purpose. Edit the start-work skill's Justify-gate phase. - -** DONE [#C] start-work Approach gate: spec-needed check :feature:quick:solo: -CLOSED: [2026-06-02 Tue] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-02 -:END: -From Craig (2026-06-02). The Approach phase should consider whether the work needs a spec when one doesn't already exist. For a big task, this isn't a silent skip — the pre-confirmation summary must explicitly report why a spec isn't needed, so the decision is visible and challengeable at the gate rather than assumed. Small tasks can pass without comment. Edit the start-work skill's Approach-gate phase to add the spec-needed consideration and the big-task report-why-not requirement. - ** TODO [#B] Cross-project pattern catalog :spec:thinking: :PROPERTIES: :LAST_REVIEWED: 2026-06-02 @@ -2501,3 +2470,30 @@ If GV registration is still pending when this task runs, block here and surface *** Why this matters =page-signal= is the fast path (a hook, a script, a make recipe can call it without an MCP round-trip). The MCP server is the smart path. When Claude wants to send and then *react to the reply*, the CLI can't do that — only the MCP server can. The two complement each other; this task adds the second half. +** DONE [#C] task-review pass at end of task-audit :chore:solo: +CLOSED: [2026-06-02 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-02 +:END: +Have the =task-audit= workflow chain a =task-review= pass as its final phase, so a freshly-audited list also gets the lighter staleness/honesty sweep without a second invocation. The legend already notes the division of labor — task-audit assigns and refreshes tags, task-review keeps them honest in passing — so running task-review at the tail of task-audit closes the loop in one pass. Edit =claude-templates/.ai/workflows/task-audit.org= (and the synced mirror) to add the final phase; check whether =open-tasks.org= already invokes task-review so the chaining stays consistent. +** DONE [#C] lint-followups drift — reconcile-on-write + audit dead-link reaping :feature:solo: +CLOSED: [2026-06-02 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-02 +:END: +From an .emacs.d handoff (2026-06-02): running task-audit against a large todo.org proved several =.ai/lint-followups.org= entries stale (four dead-link flags pointed at docs that now exist; three near-duplicate dated lint runs had piled up). Two fixes, scoped separately. + +1. =lint-org= workflow/script (the real fix): reconcile-on-write. Before appending a run, drop entries whose finding no longer reproduces (dead link now resolves, flagged block/timestamp now clean) and dedupe against the prior run instead of re-logging. Key entries by content/finding rather than line number, so they survive edits to the target file (line numbers go stale immediately). +2. =task-audit.org= (small, narrow): in the Phase C link-hygiene step, when fixing/verifying a =file:= link, also reap any matching dead-link entry in the project's lint-followups file so the two artifacts don't drift. Scope explicitly to dead-link entries — do NOT pull general lint cleanup into the audit; that mixes two concerns and slows the audit. +** DONE [#C] start-work Justify gate: explicit "reasons not to do this" item :feature:quick:solo: +CLOSED: [2026-06-02 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-02 +:END: +From a work handoff (2026-06-02, surfaced running /start-work on a clean low-risk refactor). The Phase 2 Justify gate has "Downsides" and "Alternatives considered" but no forced devil's-advocate verdict on "should we even do this?" Add a "top reasons not to do this" item: surface the top three objections if any exist; when none rise to a real objection, state one line instead of manufacturing three (e.g. "Nothing material argues against this; no reason to defer or drop it"). Building the case against the work before committing is cheapest exactly at this gate, which is its purpose. Edit the start-work skill's Justify-gate phase. +** DONE [#C] start-work Approach gate: spec-needed check :feature:quick:solo: +CLOSED: [2026-06-02 Tue] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-02 +:END: +From Craig (2026-06-02). The Approach phase should consider whether the work needs a spec when one doesn't already exist. For a big task, this isn't a silent skip — the pre-confirmation summary must explicitly report why a spec isn't needed, so the decision is visible and challengeable at the gate rather than assumed. Small tasks can pass without comment. Edit the start-work skill's Approach-gate phase to add the spec-needed consideration and the big-task report-why-not requirement. |
