Repository navigation
chore: address review follow-ups from #73 / #74 / #8 - #75
Conversation
- useKeybinds: add Reorder Tabs and Pin Agents modals to the capture-phase bailout block so global keybinds (cmd+1..9, cmd+t, alt+d, cmd+W) stop firing while a "transient draft" modal is open. Mirrors the existing newAgentPlacement bailout. - CommandPalette: openDispatchAttach was referenced in commandContext but missing from the useMemo dep array; align the deps with the ctx object to match openPinAgents et al. - ghosts: ghostsFromSemanticTurn now short-circuits when turn.isCompactionSynthesis === true, so the durable on-disk ghost JSONL stops accumulating raw <analysis>/<summary> XML for /compact synthesis turns. PR #74 hid these turns in the feed (StreamingTurn + foldEvent + workspaceState), but ghosts are written through a separate path that bypassed that fix. - .gitignore: scope-creep that's been showing in git status — temp/ (forensic scratch dumps) and vendor/in_progress/ (reproduction harnesses next to vendor/claude-code-src/). - docs: commit the dispatch-pin-agents plan that drove #73, in the same paper-trail style as docs/superpowers/plans/ 2026-04-29-dispatch-detached-sessions.md alongside #37. No behavior change for compaction turns in the feed — that already shipped in #74. This is purely about closing the on-disk leak and the small UX gaps the review surfaced. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- useKeybinds: extend the modal bailout to attach-detached-to-grid. Previously only newAgentPlacementOpen was checked, but the same NewAgentPlacementOverlay is opened by dispatchAttachIntent (see App.tsx:112 placementOverlayOpen). Subscribe to both store flags and route Escape to the matching close action. - useKeybinds: preventDefault on shortcut chords (cmd / alt) under all three modal bailouts. Without it, returning early from the global capture handler stops cc-shell's listener but leaves the Electron / macOS defaults intact — cmd+W would still close the window, cmd+T would still open a tab, alt+digit would shift focus. Now those chords are swallowed while non-chord keys (j/k/Space/Enter/Arrows) continue to bubble to the modal's own onKeyDown. - .gitignore: anchor /temp/ with a leading slash so we only catch the repo-root scratch dir, not any nested directory named "temp". vendor/in_progress/ was already path-scoped. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Pushed Finding 1 (MEDIUM) — placement overlay under attach mode Finding 2 (LOW) — chord defaults leaking past Cross-cutting note — unanchored Build clean ( The four manual smokes from the review verdict are still outstanding — leaving the test plan checkboxes for whoever runs the app. |
Summary
Five small follow-ups from the post-merge reviews of #73 (pin agents), #74 (compaction placeholder), and headless #8 (compaction-synthesis tag). All non-critical; nothing here changes shipped behavior in the feed — this is closing nits and one on-disk leak.
What's in this PR
useKeybinds— modal bailout for Reorder Tabs + Pin Agents (#73)Both modals already own their internal keys via their own
onKeyDown(Enter / Space / Arrow / j / k / Escape), but if the modal's inner div loses focus, the capture-phase global handler inuseKeybindsstill fires cmd+1..9 / cmd+t / alt+d / cmd+W underneath. Mirror the existingnewAgentPlacementOpenbailout: consume Escape, swallow everything else.CommandPalette— missing dep in commandContext useMemo (#73)openDispatchAttachis referenced in the ctx object but was missing from the dep array. Aligns deps with what the ctx actually closes over. No runtime effect today (parent re-renders re-create the closure), but ESLint and future refactors care.ghostsFromSemanticTurn— compaction synthesis short-circuit (#74)PR #74 hid the compaction synthesis turn in the streaming feed (StreamingTurn + foldEvent + workspaceState), but ghosts are written through a separate durable JSONL under
<userData>/ghost-logs/. That path bypassed the placeholder: every/compactrun was still leaking raw<analysis>...</analysis><summary>...</summary>XML to disk, invisible in the UI but bloating the file and polluting debug bundles. Closes the gap with a=== truefail-closed guard at the top of the function..gitignore—temp/andvendor/in_progress/Both have been showing up in
git statusfor weeks.temp/is forensic scratch (e.g.session-respawn-oom-root-cause.md);vendor/in_progress/holds reproduction harnesses (paste-submit-repro,dictation-repro,opencode) that sit next tovendor/claude-code-src/and are emphatically not part of cc-shell.docs/superpowers/plans/2026-05-11-dispatch-pin-agents.mdPlan doc that drove the 12-task implementation in PR #73. Matches the precedent set by
docs/superpowers/plans/2026-04-29-dispatch-detached-sessions.mdcommitted alongside #37 — agentic decision-making is transparent in the repo, not in a separate doc that drifts.Test plan
npm run build:app— passes clean (11.7s, no TS errors in touched files)cmd+1/cmd+t/alt+d— should be swallowed, modal stays focused/compactin a real Claude session — confirm<userData>/ghost-logs/<session>.jsonldoes NOT contain any<analysis>or<summary>XML after compaction completes🤖 Generated with Claude Code