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 | |
| 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.
| -rw-r--r-- | .ai/sessions/2026-06-11-14-58-daily-prep-screenshot-hooks-org-tables.org | 80 | ||||
| -rw-r--r-- | todo.org | 105 |
2 files changed, 145 insertions, 40 deletions
diff --git a/.ai/sessions/2026-06-11-14-58-daily-prep-screenshot-hooks-org-tables.org b/.ai/sessions/2026-06-11-14-58-daily-prep-screenshot-hooks-org-tables.org new file mode 100644 index 0000000..50831f2 --- /dev/null +++ b/.ai/sessions/2026-06-11-14-58-daily-prep-screenshot-hooks-org-tables.org @@ -0,0 +1,80 @@ +#+TITLE: Session Context — 2026-06-11 04:39 +#+DATE: 2026-06-11 + +* Summary + +** Active Goal +Process the startup inbox (5 items), then work the task list: the daily-prep template rewrite and the screenshot.py --launch crash fix (Craig's picks, no-approvals), the SessionStart-on-clear hook (which became a make-install distribution fix), the statusline adoption (mid-session archsetup handoff), the session-title hook for remote sessions (Craig's feature ask), and the wide org-table handling (standard + lint + helper, Craig picked all three). + +** Decisions +- Daily-prep canonical rewritten to Craig's strict three-section template (Heads-Up / Day's Priorities / Meetings / Focus Blocks); Create/Update run modes with a mandatory priorities gate in Create (disagreement = todo.org staleness signal); retired Standup Briefs / Upcoming Deadlines / Anchor Tasks sections, standup-only mode, and the thin-link convention. Four refinements from Craig's review folded in. +- screenshot.py --launch: both archsetup fix directions plus an --x11 escape hatch, because ratio's emacs is GTK3+X11 (not pgtk) and the safe Wayland-forced default would have killed the primary use case. Error message hints at the flag so the flow self-heals. +- Token-rotation helper: held per Craig's own 2026-05-31 decision in the task body (can't verify without revoking a live token; write-and-verify in one pass when imminent). Flagged instead of building unverifiable code. +- SessionStart-on-clear hook: the feature had already shipped 2026-06-02; the real bug was make install not covering hooks. Fixed the distribution gap (DEFAULT_HOOKS now linked by make install), closing the whole class. +- Session titles: "host project" (ratio rulesets, velox work) via a SessionStart(startup|resume) hook using hookSpecificOutput.sessionTitle (Claude Code 2.1.152+); silent when a title exists so /rename isn't clobbered. +- Org-table standard promoted from work's notes.org to claude-rules/org-tables.md; lint check is judgment-only by design (reflow is a visible layout change); helper reflows mechanically and is idempotent via continuation-group merging. + +** Data Collected / Findings +- The org-table "standard" the todo task referenced was never written in rulesets — it lived only in work's .ai/notes.org. Render-width semantics (links measure at visible label, never split) preserved in the promotion. +- ratio environment: emacs is GTK3+X11 (no pgtk); hostname isn't installed (Arch/inetutils) — uname -n instead; bash tilde-expands an unquoted replacement ~ back to $HOME (broke the statusline cwd abbreviation); the shell env carried a stale HYPRLAND_INSTANCE_SIGNATURE from before yesterday's compositor crash. +- elisp: split-string clobbers the global regex match data — capture match bounds before calling it inside a string-match loop (bit wot-tokenize). +- Idempotent table reflow needs hline-aware logical-row grouping: merge a rule-delimited group only when each trailing line has an empty cell (continuation heuristic), so plain multi-row tables keep line-per-row meaning. +- rg -rn 'pat' replaces matches with literal "n" (-r is --replace) — mangled the first read of the work standard. + +** Files Modified +- claude-templates/.ai/workflows/daily-prep.org (full rewrite) + INDEX.org (new modes) + mirrors; spec + decisions handoff preserved in docs/design/ (2ffb01c). +- claude-templates/.ai/scripts/screenshot.py + tests (+6, 30 total) + mirrors: wayland_cmd, clients_on_workspace, teardown unmap-wait, --x11 (7095d62). Verified live on ratio incl. 3x emacs -Q repro. +- Makefile: make install links DEFAULT_HOOKS + .claude/*.sh; scripts/tests/install-hooks-link.bats (d576fc2); .claude/statusline-command.sh adopted with uname -n + escaped-tilde fixes + statusline-command.bats (3df14fc). +- hooks/session-title.sh + settings.json + settings-snippet.json + session-title-hook.bats (bdc9a5d). +- claude-rules/org-tables.md (new rule); .ai/scripts/wrap-org-table.el (+23 ERT); lint-org.el org-table-standard check (+5 ERT, 32 total) + mirrors (8d790f3). +- todo.org: SessionStart hook + wide org-table tasks closed DONE with resolutions; /clear manual test filed. +- Handoffs: work x3 (rewrite landed, org-tables FYI), archsetup x2 (screenshot fix, statusline adoption + install-hooks note). All inbox items processed; inbox empty. + +** Next Steps +- Next session (Craig's standing instruction at wrap): build the monthly session-harvest workflow AND /update-skills, both in no-approvals mode. +- Craig's quick manual tests: /clear mid-session should reply "flushed." + goal restatement (todo.org test entry); session titles should read "ratio rulesets"-style on web/mobile for new sessions. +- Still open for Craig: memories DOING manual tests + other-machine roam setup; runtime-spec phases 2-6 go/no-go; token-rotation stays held until a rotation is imminent. + +KB: promoted 0 / consulted no + +* Session Log + +** 2026-06-11 04:39 Startup + inbox inventory + +Startup ran clean: rulesets and project repo current, nothing new to link, .ai/ synced from templates (no churn — only a cosmetic key-reorder in .claude/settings.json from the harness). No crash-recovery anchor, no active reminders, no pending decisions, 0 stale tasks, 0 cross-agent pending. + +Craig picked option 1, then amended: implement the screenshot fix too, both in no-approvals mode. + +** 2026-06-11 ~04:50 Daily-prep rewrite + screenshot fix implemented + +Rewrote claude-templates/.ai/workflows/daily-prep.org wholesale per the work handoff spec + four refinements: strict three-section template (Heads-Up / Day's Priorities / Meetings / Focus Blocks), Create/Update run modes with triage-freshness check, mandatory priorities review gate (Create), retired Standup Briefs / Upcoming Deadlines / Anchor Tasks sections and standup-only mode and the thin-link convention, per-event-type content rules, calendar writes after the gate, Living Document history kept with supersession notes + a full 2026-06-11 entry. INDEX.org daily-prep entry updated to the new modes. + +screenshot.py --launch fix (TDD: 6 new tests red, then green, 30/30 passing): wayland_cmd() wraps the launched command with env -u DISPLAY GDK_BACKEND=wayland QT_QPA_PLATFORM=wayland so no XWayland surface can exist to race the headless-output teardown (the Hyprland 0.55.2 SIGABRT root cause from archsetup's coredump analysis); teardown now polls clients_on_workspace() until the launched clients actually unmap (5s cap + 0.2s grace) before removing the output. Module docstring documents that X11-only apps now fail to map under --launch. + +About to live-test --launch on ratio (the crash machine): foot first, then the exact repro emacs -Q. If this session dies, the compositor crashed — the fix needs direction-1-only (teardown wait) re-examined. + +** 2026-06-11 05:08 Verified, committed, pushed, replied + +Live verification on ratio (stale HYPRLAND_INSTANCE_SIGNATURE in the shell env — Hyprland restarted after yesterday's crash; probed the live socket): foot capture clean under the Wayland-forced default. Discovery: ratio's emacs is GTK3+X11 (not pgtk), so forcing Wayland breaks emacs capture entirely — added an --x11 opt-in flag (XWayland allowed, protected by the teardown unmap-wait) with a self-healing hint in the no-window error. The exact crash repro (emacs -Q under --x11) ran 3x: capture correct (verified the PNG shows emacs on the headless output), compositor alive, teardown clean. + +Full suite green (409+54+12 pytest, ERT, bats — the 3 grep hits were test names containing "error"). sync-check --fix synced mirrors. /review-code --staged: Approve, no Critical/Important (2 Minors noted, no action). Inbox filed: spec → docs/design/2026-06-10-daily-prep-template-spec.org, rewrite handoff → docs/design/2026-06-11-daily-prep-rewrite-handoff.org, crash analysis → docs/design/2026-06-10-screenshot-launch-crash-analysis.org; refinements + FYI deleted. Inbox empty. + +Commits (voice-passed, gate skipped per tracked-.ai/ + no-approvals): 2ffb01c feat(workflows) daily-prep rewrite (+ INDEX.org modes update), 7095d62 fix(scripts) screenshot --launch crash. Pushed cf95763..7095d62. Replies sent: work (rewrite landed, project-extension notes, offer to fold worked-example corners) and archsetup (fix landed, --x11 discovery, retire the unsafe-on-live-sessions memory). Inbox pass tally: 5 processed, 4 accepted (2 implement, 1 fold, 1 file-then-implement per Craig), 1 FYI deleted, 0 rejected. notes.org LAST_INBOX_PROCESS already stamped 2026-06-11. + +** 2026-06-11 11:36 Task picks: token-rotation held, SessionStart hook became an install fix, statusline adopted + +Craig asked for top tasks + top solo tasks, then picked token-rotation and the SessionStart hook. Token-rotation: the task body carries Craig's 2026-05-31 hold ("write and verify in one pass when a rotation is imminent" — the OAuth re-grant can't be triggered without revoking a live token), so I respected the hold and flagged it. SessionStart hook: investigation showed the feature already shipped 2026-06-02 (hooks/session-clear-resume.sh + settings.json entry) — the todo task duplicated it. The real bug: make install didn't cover hooks, so the symlink never reached ratio and the hook errored silently on every /clear. Fixed by folding DEFAULT_HOOKS linking into make install (bats: scripts/tests/install-hooks-link.bats, 4 tests), startup.org docs updated (canonical + mirror), task closed DONE with a one-keystroke manual test filed (/clear should yield "flushed." + goal restatement). Commit d576fc2. + +Mid-session inbox (3 arrived): work ack (daily-prep canonical synced, extension updated, first real Create run is Friday's prep — deleted), home memory-sweep ack (12 promoted/7 local, roam 89f068f — deleted), archsetup statusline heads-up (acted on: settings.json statusLine entry committed; statusline-command.sh adopted into .claude/ + make install linking via CLAUDE_CONFIG *.sh; fixed hostname→uname -n and the unescaped-tilde re-expansion; 5 bats tests; ratio's standalone file replaced with the managed symlink; verified rendering "[date] cjennings ratio:~/code/rulesets on main"). Commit 3df14fc. Both pushed (7095d62..3df14fc). Reply sent to archsetup. Inbox empty. + +** 2026-06-11 ~11:45 Session-title hook for remote sessions + +Craig asked whether Claude Code can now name remote sessions. claude-code-guide agent + docs fetch confirmed: SessionStart hooks can set hookSpecificOutput.sessionTitle since 2.1.152 (applied on startup/resume sources, ignored on clear/compact). Craig wants "host project" titles (ratio chime, velox work). Built hooks/session-title.sh (TDD, 6 bats tests in scripts/tests/session-title-hook.bats): uname -n + git-toplevel basename (cwd basename fallback), silent when session_title already set so /rename isn't clobbered. Wired settings.json + settings-snippet.json with matcher startup|resume. Linked via make install (the hooks linking from d576fc2 made that automatic). Verified through the symlink: cwd ~/projects/work/deepsat → "ratio work". Full suite green. Commit bdc9a5d, pushed. Takes effect from the next session start on each machine; visible check is the session list on web/mobile. + +** 2026-06-11 14:26 Wide org-table handling — all three pieces shipped + +Craig picked option 2 (standard + lint + helper in one pass). Found the actual written standard in work's .ai/notes.org "Org Table Standard" (120-col render-width budget, links measure at visible label and never split, continuation rows, rule under header + every logical row) — the rulesets task had assumed it was written here; it wasn't. Shipped: (c) claude-rules/org-tables.md (generalized, linked into ~/.claude/rules by make install); (a) .ai/scripts/wrap-org-table.el (TDD, 23 ERT tests — two real bugs caught mid-build: split-string clobbering regex match data in tokenize, and idempotence requiring hline-aware logical-row grouping with the continuation-group heuristic: merge a rule-delimited group only when its trailing lines each have an empty cell); (b) lint-org.el org-table-standard judgment check reusing the helper's parsing (5 new ERT tests, 32 total). End-to-end demo verified: 150-col table → budget shape, idempotent, lint-clean. Full suite green. Commit 8d790f3 pushed. Task closed DONE. FYI handoff sent to work (their notes.org copy can stay or become a pointer; arch-NN set named as first wrap target). + +** Inbox detail (from startup) + +Inbox: 5 items. (1) work daily-prep template spec (22KB source-of-truth doc) + (2) work daily-prep rewrite handoff (settled decisions, supersedes the 2026-06-10-1011 note) + (3) work four-template-refinements (folds into the rewrite) — together one substantive task: rewrite canonical daily-prep.org. (4) archsetup screenshot.py --launch crash root cause (XWayland configure-request races headless-output teardown; two fix directions; harness fix is rulesets'). (5) archsetup memory-sweep FYI (broadcast ack, no action). Dispositions being surfaced to Craig. @@ -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. |
