diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-11 14:59:09 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-11 14:59:09 -0500 |
| commit | 73cae49c464d157aeedfedd108ee20bd19816140 (patch) | |
| tree | 49b302b37fdfc57353eed9963af9bbb72d2e72fe /todo.org | |
| parent | 6f575e64b1e9f5d9332db73b1e6427d500f90f48 (diff) | |
| download | rulesets-73cae49c464d157aeedfedd108ee20bd19816140.tar.gz rulesets-73cae49c464d157aeedfedd108ee20bd19816140.zip | |
chore: archive session record, reflow todo table, file done work
The wide voice-pass table in todo.org reflows to the 120-column standard (the new lint check's first real catch), and the two tasks closed today move to Resolved.
Diffstat (limited to 'todo.org')
| -rw-r--r-- | todo.org | 105 |
1 files changed, 65 insertions, 40 deletions
@@ -34,34 +34,6 @@ Tags are assigned and refreshed by =task-audit=; =task-review= keeps them honest * Rulesets Open Work -** DONE [#C] Wide org-table handling — helper/lint/standard :spec: -CLOSED: [2026-06-11 Thu] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-11 -:END: -The org-table standard keeps project-doc tables <=120 cols with multi-line wrapped cells and a rule between rows, but nothing enforces it and hand-wrapping a wide cell into multi-row form is tedious and error-prone. Decide among: (a) a helper that auto-wraps a wide table into multi-row cells at a target width, (b) a lint check that flags tables over the width budget, (c) tighten the written standard with a worked before/after example. Likely some combination. A worked before/after example exists in a work-project prep doc (a 6-col table reformatted by hand to a 4-col multi-row-cell version), to be reproduced generically when this lands. - -Out of a work-project handoff 2026-06-09. - -Resolution 2026-06-11: all three shipped. (c) The standard, generalized from the work project's notes.org local copy, is now claude-rules/org-tables.md (globally loaded; render-width semantics — links measure at their visible label, never split a link) with the worked wrapped-table example. (a) .ai/scripts/wrap-org-table.el reflows tables mechanically: render-width measurement, link-atomic tokenizing, column shrink-to-floor allocation, continuation rows, rules between logical rows; idempotent (rule-delimited continuation groups merge back before re-wrapping); 23 ERT tests. (b) lint-org.el gained an org-table-standard judgment check (width overruns, missing rules; conformant wrapped tables not false-flagged); 5 new ERT tests, 32 total. Verified end-to-end on a demo file: 150-col table reflowed to budget, idempotent second pass, lint clean on the result. - -** DONE [#C] SessionStart-on-clear hook for auto-resume :feature: -CLOSED: [2026-06-11 Thu] -:PROPERTIES: -:LAST_REVIEWED: 2026-06-11 -:END: -Add a SessionStart hook (matcher: clear) in settings.json that auto-injects "read .ai/session-context.org and resume if present, else run startup.org". Today /flush prompts the user to /clear and the next session relies on the model re-reading session-context; the hook makes resume automatic on /clear. Keep full startup.org for genuine fresh starts (new day, other machine, been away). Likely lands as claude-templates workflow notes plus the hook in settings.json. - -The checkpoint+resume halves already shipped as /flush. This is the remaining automation piece. Out of a work-project handoff 2026-06-09 (process tooling, belongs in rulesets not the work project). - -Resolution 2026-06-11: the hook itself had already shipped 2026-06-02 (hooks/session-clear-resume.sh + the SessionStart clear entry in the tracked settings.json — this task duplicated it). What was actually broken: make install didn't cover hooks, so the symlink never reached machines that hadn't run make install-hooks by hand, and the hook errored silently on every /clear. Fixed by folding default-hook linking into make install (startup's Phase A.0 now propagates hooks machine-wide), with bats coverage in scripts/tests/install-hooks-link.bats. Both hook branches verified on ratio; the live /clear fire is a one-keystroke manual test. -*** TODO Manual testing and validation :test: -**** /clear mid-session resumes from the anchor -What we're verifying: the SessionStart(clear) hook fires and the fresh context resumes instead of cold-starting. -- 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. - ** DOING [#C] Check that memories are sync'd across machines via git :spec: :PROPERTIES: :LAST_REVIEWED: 2026-06-10 @@ -1237,18 +1209,45 @@ From Strunk & White, Orwell's "Politics and the English Language", Plain English *** Personal-style pass placement -| # | Pass | Mode | Why | -|---|------|------|-----| -| 1 | First-person voice rewrite | personal only | Forces "I" voice; wrong for academic prose where third-person and "we" are conventional | -| 2 | Jargon-fragment → complete sentence | both | Universal clarity, no genre conflict | -| 3 | Semicolon → period/comma | personal only | Semicolons are conventional in long-form / academic prose | -| 4 | Contractions ("it's", "don't") | personal only | Academic and formal writing typically avoids contractions | -| 5 | Sentence split on conjunctions | personal only | Foucault, Hegel, Adorno deliberately use long compound sentences | -| 6 | Felt-experience narration ("I'll feel this every time") | personal only | Personal essays *use* felt-experience as content | -| 7 | Noun-ified verbs ("the ask", "a learn", "the spend") | both | Targets corporate-speak with curated wordlist; doesn't catch philosophical nominalizations like "the becoming" | -| 8 | Sentence fragments → complete (in prose) | personal only | Fragments are valid stylistic devices in literary prose | -| 9 | Terse cut (rhetorical padding: "worth noting", "it's important to understand") | personal only | Tier 1 omit-needless-words covers the worst offenders universally; aggressive cut conflicts with academic register | -| 10 | Public-artifact scope check (local paths, private repos, personal tooling) | personal only — *flag-only*, no auto-rewrite | Operational/safety check, not stylistic; auto-masking risks silently editing meaningful text | +| # | Pass | Mode | Why | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 1 | First-person voice rewrite | personal only | Forces "I" voice; wrong for | +| | | | academic prose where third-person | +| | | | and "we" are conventional | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 2 | Jargon-fragment → complete sentence | both | Universal clarity, no genre | +| | | | conflict | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 3 | Semicolon → period/comma | personal only | Semicolons are conventional in | +| | | | long-form / academic prose | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 4 | Contractions ("it's", "don't") | personal only | Academic and formal writing | +| | | | typically avoids contractions | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 5 | Sentence split on conjunctions | personal only | Foucault, Hegel, Adorno | +| | | | deliberately use long compound | +| | | | sentences | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 6 | Felt-experience narration ("I'll | personal only | Personal essays *use* | +| | feel this every time") | | felt-experience as content | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 7 | Noun-ified verbs ("the ask", "a | both | Targets corporate-speak with | +| | learn", "the spend") | | curated wordlist; doesn't catch | +| | | | philosophical nominalizations like | +| | | | "the becoming" | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 8 | Sentence fragments → complete (in | personal only | Fragments are valid stylistic | +| | prose) | | devices in literary prose | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 9 | Terse cut (rhetorical padding: | personal only | Tier 1 omit-needless-words covers | +| | "worth noting", "it's important to | | the worst offenders universally; | +| | understand") | | aggressive cut conflicts with | +| | | | academic register | +|----+-------------------------------------+-------------------------------------+-------------------------------------| +| 10 | Public-artifact scope check (local | personal only — *flag-only*, no | Operational/safety check, not | +| | paths, private repos, personal | auto-rewrite | stylistic; auto-masking risks | +| | tooling) | | silently editing meaningful text | +|----+-------------------------------------+-------------------------------------+-------------------------------------| *** Inclusive-language pass — explicitly excluded @@ -2603,3 +2602,29 @@ Email and Slack content is private. The corpus must NOT enter any commit unless The voice skill earns its place when Craig sees the rewrite and recognizes it as his own voice rather than a "clean" AI voice that approximates him. Today the skill catches common AI tells (em-dashes, semicolons, the felt-experience tic), which is useful. Corpus-grounding would make it catch the absence of *Craig-specific positive traits* — the phrasings he actually reaches for — not just the AI traits he doesn't. Likely improves =/voice personal= output quality on PR bodies, commit messages, and email drafts. Compound interest over the long run. +** DONE [#C] Wide org-table handling — helper/lint/standard :spec: +CLOSED: [2026-06-11 Thu] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-11 +:END: +The org-table standard keeps project-doc tables <=120 cols with multi-line wrapped cells and a rule between rows, but nothing enforces it and hand-wrapping a wide cell into multi-row form is tedious and error-prone. Decide among: (a) a helper that auto-wraps a wide table into multi-row cells at a target width, (b) a lint check that flags tables over the width budget, (c) tighten the written standard with a worked before/after example. Likely some combination. A worked before/after example exists in a work-project prep doc (a 6-col table reformatted by hand to a 4-col multi-row-cell version), to be reproduced generically when this lands. + +Out of a work-project handoff 2026-06-09. + +Resolution 2026-06-11: all three shipped. (c) The standard, generalized from the work project's notes.org local copy, is now claude-rules/org-tables.md (globally loaded; render-width semantics — links measure at their visible label, never split a link) with the worked wrapped-table example. (a) .ai/scripts/wrap-org-table.el reflows tables mechanically: render-width measurement, link-atomic tokenizing, column shrink-to-floor allocation, continuation rows, rules between logical rows; idempotent (rule-delimited continuation groups merge back before re-wrapping); 23 ERT tests. (b) lint-org.el gained an org-table-standard judgment check (width overruns, missing rules; conformant wrapped tables not false-flagged); 5 new ERT tests, 32 total. Verified end-to-end on a demo file: 150-col table reflowed to budget, idempotent second pass, lint clean on the result. +** DONE [#C] SessionStart-on-clear hook for auto-resume :feature: +CLOSED: [2026-06-11 Thu] +:PROPERTIES: +:LAST_REVIEWED: 2026-06-11 +:END: +Add a SessionStart hook (matcher: clear) in settings.json that auto-injects "read .ai/session-context.org and resume if present, else run startup.org". Today /flush prompts the user to /clear and the next session relies on the model re-reading session-context; the hook makes resume automatic on /clear. Keep full startup.org for genuine fresh starts (new day, other machine, been away). Likely lands as claude-templates workflow notes plus the hook in settings.json. + +The checkpoint+resume halves already shipped as /flush. This is the remaining automation piece. Out of a work-project handoff 2026-06-09 (process tooling, belongs in rulesets not the work project). + +Resolution 2026-06-11: the hook itself had already shipped 2026-06-02 (hooks/session-clear-resume.sh + the SessionStart clear entry in the tracked settings.json — this task duplicated it). What was actually broken: make install didn't cover hooks, so the symlink never reached machines that hadn't run make install-hooks by hand, and the hook errored silently on every /clear. Fixed by folding default-hook linking into make install (startup's Phase A.0 now propagates hooks machine-wide), with bats coverage in scripts/tests/install-hooks-link.bats. Both hook branches verified on ratio; the live /clear fire is a one-keystroke manual test. +*** TODO Manual testing and validation :test: +**** /clear mid-session resumes from the anchor +What we're verifying: the SessionStart(clear) hook fires and the fresh context resumes instead of cold-starting. +- 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. |
