Commit Graph
165 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.8 24739b0515 file T-310: numpad digits should select prompt-card options
Filed under UI epic T-276. Prompt-card number shortcuts only
match the top number row (_digitKeys = digit1..digit9); numpad
1-9 fall through. numpadEnter is already handled, so numpad
parity is partial. Persisting the ticket changelog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:39:09 +02:00
jpmschweitzerandClaude Opus 4.8 46edc258e6 file T-309: lightbox click-outside-image should dismiss
Filed under UI epic T-276. Clicking the dimmed area beside a
smaller-than-94% image doesn't close the lightbox today — the
host backdrop only reaches the 6% margin. Persisting the ticket
changelog (no code change to piggyback on).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:37:46 +02:00
jpmschweitzerandClaude Opus 4.8 10a714e2c5 file T-308: surface Claude's task list docked above the input pane
Claude's TodoWrite/TaskCreate task list is currently neither parsed
(transcript_reader skips the event) nor rendered — invisible to the user.
Ticket covers modelling it from the transcript and docking a compact,
collapsible, display-only list directly above the composer in the Claude
conversation view. Filed under the UI epic T-276.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 11:28:11 +02:00
jpmschweitzerandClaude Opus 4.8 c53e53be91 align board: close 7 completed tickets stuck in active/ready
Bookkeeping only — these all had DONE/FIXED completion notes (and landed
commits) but were never transitioned off in_progress/ready:

  T-29   editor respects .editorconfig (d5da614)
  T-292  pty session_test flake — serial pty pass (0231cb4)
  T-236  pasted-image @path thumbnails (7fb1a10)
  T-254  pasted-image inline render — closed with T-236 (7fb1a10)
  T-241  ultrawide widget-test coverage (1411e19)
  T-253  clickable conversation links (1e8e37c)
  T-293  per-repo theme persistence (e7cbdcd)

Review queue is now empty; no open work left in active/ready.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 10:58:05 +02:00
jpmschweitzerandClaude Opus 4.8 9ed2475fe1 add ClideCollapserCard primitive + shared card metrics (T-305)
First slice of the conversation-panel card unification. Adds the
category-3 collapser primitive (lib/widgets/): a list of 1..N inner item
cards, collapsed ticker <-> expanded framed inner canvas, with the agreed
chrome — color drives the border + chevron/label tint, a fixed-width
counter slot, the status icon hard against the right edge, chevron hard
against the left edge, background + caret toggle (D-78 tail-follow). The
aggregate status/count/echoed-title are caller-computed, so the widget
stays free of conversation semantics; inner items keep their own per-item
status.

Also adds clide_card_metrics.dart — shared spacing constants (gap, radius,
header padding, counter slot width) for all three card categories.

Not yet wired into the stream (no user-visible change); migration of the
group/tool cards follows. Widget test + golden included.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 10:52:27 +02:00
jpmschweitzerandClaude Opus 4.8 8cc238cb75 file tickets T-306/T-307 for context-card + frame0 approval gate
T-306: card the injected "context" conversation block to match the
collapser-card frame the rest of the tool/group cards use, keeping the
D-78 muted/collapsed de-emphasis.

T-307: gate the frame0-wireframe skill on user approval after each shown
screen — wireframing is a design dialogue, not a batch generation run.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 10:18:13 +02:00
jpmschweitzerandClaude Opus 4.8 ef09441eb4 file T-305: unify collapser cards + wireframe
Two collapser-card families (ClideHolderCard group container, T-266; the
ConversationCard merged tool card, T-262) attach collapse differently and
render inconsistent header chrome — status mark placement, no fixed
counter slot, color knob on one but not the other. File T-305 (under the
T-276 UI tracker) to extract one ClideCollapserCard primitive both grab:
a `color` for border/text fidelity, a fixed-width counter slot, and the
status icon hard against the card edge.

Adds the Frame0 wireframe (collapsed color variants + expanded nested
cards) at docs/design/wireframes/cards/collapser-card.{json,png}.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 10:17:49 +02:00
jpmschweitzerandClaude Opus 4.8 2b59598894 migrate ticket changelog to record_id identity (D-26)
Rewrites the committed .pql/changelog/ from the old T-NNN-keyed format to
the record_id identity model (pql 1.10.0, D-26): tickets keyed by a ULID
record_id, the friendly T-NNN in ticket_idmap, references and hashes
recomputed. Produced by the one-off cmd/migrate-ids in the pql repo.

Other clones: install pql >= 1.10.0, then rm .pql/pql.db && pql plan
rebuild to regenerate the local DB from this changelog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 09:27:35 +02:00
jpmschweitzerandClaude Opus 4.8 301b6becf4 un-quarantine app_test open-folder hang (T-280)
The "Open Folder on a non-repo path" widget test wedged the runner ~10
minutes on a _RawReceivePort teardown hang. Root cause: project
validation shelled out to `git rev-parse` via Process.run, whose exit
ReceivePort leaks under the fake-async widget-test harness.

The KernelFixture now injects a pure-Dart `.git`-walk validator
(synchronous existsSync/typeSync, no native port), so the open-folder
flow is subprocess-free. Un-skipped the test and scoped the switcher
tap to the hat-bar ClideTappable to disambiguate it from the welcome
overlay's "clide" wordmark.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 23:43:16 +02:00
jpmschweitzerandClaude Opus 4.8 76346122aa fix bottom input box alignment when status bar hidden (T-298)
The composer (and any bottom-most pane content) ran flush into the
window's bottom resize-drag strip when the status bar was hidden, since
the bar normally covers that edge. Reserve ClideResizeBorder.edgeThickness
as a bottom inset in RootLayout whenever the status bar is not visible, so
the interaction zone bottom-anchors consistently either way.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 23:36:13 +02:00
jpmschweitzerandClaude Opus 4.8 cbeb2c2d5a fix T-287: silence GTK file-chooser GLib-GIO-CRITICAL noise
Root cause (confirmed by standalone reproducer): the Open Workspace
folder picker. GTK's GtkPlacesSidebar enumeration inside
gtk_file_chooser_dialog_new(SELECT_FOLDER) builds GFileInfo objects
without standard::size, then calls g_file_info_get_size() — a
GTK-internal bug that emits a GLib-GIO-CRITICAL pair on every pick.
Ruled out the T-138 clipboard channel.

Two-part fix:
- Switch pickDirectory to GtkFileChooserNative (portal-backed; runs
  out-of-process and silently in sandboxed/Flatpak builds).
- Install a narrowly-scoped GLib-GIO log handler that drops only the
  "g_file_info_get_size / without standard::size" message and forwards
  every other GLib-GIO critical untouched — the universal fix for the
  non-sandbox fallback path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 23:21:59 +02:00
jpmschweitzerandClaude Opus 4.8 ace13b36b7 note T-56 security redesign (D-90)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:57:53 +02:00
jpmschweitzerandClaude Opus 4.8 2791776ab7 close T-56 (Linux deep links); file T-303 (macOS delivery follow-up)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:41:45 +02:00
jpmschweitzerandClaude Opus 4.8 4057286632 clide:// deep link handler — open files at a line (T-56)
clide://open?path=&line= translates (in parseArgv) to editor.open, so an OS
scheme invocation routes through the existing CLI→IPC path into the running
window — single-instance for free, no new code path. Registered the scheme:
linux/clide.desktop MimeType x-scheme-handler/clide (Exec already passes %U) and
macOS Info.plist CFBundleURLTypes. Parser validates the action/path/line.

Linux works end to end (the OS passes the URL as argv). macOS URL DELIVERY (the
AppDelegate openURLs callback → forward into this path) is a follow-up — the
scheme is registered, but the native hook needs a real macOS machine to verify,
so it's not shipped blind. Also drops a stray import in clide_markdown_test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:41:00 +02:00
jpmschweitzerandClaude Opus 4.8 1411e19ab4 ultrawide layout test coverage + shared setSurfaceSize helper (T-241)
Add setSurfaceSize(tester, width) to the widget harness — the reusable way to
test width-sensitive layout at an ultrawide surface (a wide SizedBox under the
default 800px surface is clamped, so the view's physicalSize must be set), the
foundation T-241 asked for.

Ultrawide cases on the surfaces most prone to width-proportional bugs (the T-239
class): ClideMarquee stays static when a line fits a 3440 slot (it was only
tested narrow); the quick-open palette stays width-capped, not stretched edge to
edge. The status bar already covers 600+3440 (T-239).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:34:16 +02:00
jpmschweitzerandClaude Opus 4.8 7d8f58690f number-key + Enter shortcuts for interactive prompt buttons (T-240)
In a ToolPromptCard, number keys pick the matching button/option (labels are
prefixed 1./2./3.…) and Enter confirms the primary action — matching the Claude
CLI. Permission: 1=Allow, 2=Allow&remember (when offered) else Deny, 3=Deny.
AskUserQuestion: 1..N select/toggle the current question's options + Other.

The card autofocuses and the key handler self-guards on hasPrimaryFocus, so once
the user clicks into a note field the digits type normally and never fire a
button. Shared the permission/option actions between the buttons and the keys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:27:08 +02:00
jpmschweitzerandClaude Opus 4.8 dc8ae0beaa file T-300 + T-301 (clickable + repo-relative file refs in Claude convo)
Both under the UI tracker epic T-276. T-300: linkify file-path
references in the conversation so they open in the editor via
`clide editor open`. T-301: show in-repo paths relative to the repo
root — design open, needs discussion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:09:34 +02:00
jpmschweitzerandClaude Opus 4.8 86a52cd731 finish T-235 (persisted activity fold level); close T-132 via Q-34
T-235: app-scoped kActivityFoldLevelKey + a claude.activity.fold-level command
that cycles none→tools→thinking→everything; ClaudePane + team_panel_host read it
and re-fold live via the settings notifier. Unit tests for the helpers.

T-132 cleanup: the one blocked item (account/team token budget) is detached
(T-158), reframed as Q-34 'how + when to surface the budget given upstream
doesn't expose it', with T-158 as its backlog resolver. T-132 closed — all
doable work delivered.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 19:24:19 +02:00
jpmschweitzerandClaude Opus 4.8 eb7b738c17 correct T-132 status: in_progress (delivered bar T-158/T-235), not superseded
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 19:06:53 +02:00
jpmschweitzerandClaude Opus 4.8 548e3e17e8 pin collapse toggles to the status-bar screen edges + flip chevron live (T-294)
Two fixes to the just-shipped collapse toggles:
- They lived inside the centre StatusbarHost, so they shifted when a pane
  collapsed and the bar resized. Move them to the OUTER status-bar row ends
  (screen edges) so they stay put. StatusbarHost reverts to its prior layout.
- The toggle was a const widget that read isCollapsed in its own build; Flutter
  skips identical const children on rebuild, so the chevron never flipped. Pass
  collapsed/visible in from the parent's arrangement listener so it rebuilds and
  the chevron tracks the action direction. A 'flips live' test now guards it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:54:46 +02:00
jpmschweitzerandClaude Opus 4.8 c35bb50c0c file T-299 + remove gemini-report.md
Salvage the report's only actionable content — automate Dart osv-scanner
and native SHA256 verification in CI — into T-299, then drop the stray
root-level analysis doc (the rest was praise + an exploration trace;
recoverable from history at bf4b6be).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:43:02 +02:00
jpmschweitzerandClaude Opus 4.8 d7de14800d close T-294, T-296, T-297 (status-bar toggles, edit grouping, re-scroll)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:35:01 +02:00
jpmschweitzerandClaude Opus 4.8 2f9159606f file T-298: bottom input box misaligned when status bar is hidden
Composer/prompt box alignment depends on the status bar being present;
with it hidden the box sits weird. Should bottom-anchor independently.
Filed under T-276.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:06:47 +02:00
jpmschweitzerandClaude Opus 4.8 adbd8e285a harden SettingsStore against notify-after-dispose for fire-and-forget writes
set() doesn't await its file write, so a write in flight when the store is
disposed (app shutdown, or a closing test) would assert on a disposed
ChangeNotifier. Skip the post-write notify once disposed via a _disposed guard +
_safeNotify. Surfaced by the T-293 theme-persistence test flaking under the
loaded parallel run; also the correct behaviour for graceful shutdown.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:05:53 +02:00
jpmschweitzerandClaude Opus 4.8 24364e6329 file T-297: conversation doesn't re-scroll when bottom input resizes
When the interaction zone (D-78) grows for a permission / AskUserQuestion
prompt, the conversation viewport shrinks but the scroll offset isn't
adjusted, so tail content hides behind the box. Filed under T-276.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:01:20 +02:00
jpmschweitzerandClaude Opus 4.8 7fb1a10982 close T-236 + T-254 (inline pasted-image thumbnails, D-89)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:55:24 +02:00
jpmschweitzerandClaude Opus 4.8 6f67757240 T-296: spec live status tick — spinner while editing, check when each lands
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:46:12 +02:00
jpmschweitzerandClaude Opus 4.8 1d160a0bd2 T-296: add worked example (clide_markdown.dart run -> 3 edits / 2 steps / 7 edits)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:45:20 +02:00
jpmschweitzerandClaude Opus 4.8 57755ac676 file T-296: group consecutive same-file edits into one collapsed card
Bundle subsequent edits to the same file into a single ClideHolderCard
(reusing the T-230/T-266 folding), labelled "# edits" instead of
"# steps", with every per-edit report preserved on expand. Under T-276.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:44:07 +02:00
jpmschweitzerandClaude Opus 4.8 af39f5b98a T-294: resolve placement — toggles fixed at status-bar ends (design final)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:34:18 +02:00
jpmschweitzerandClaude Opus 4.8 8cc88bf7f9 T-294: glyph decision — Phosphor caret-line-left/right (0xe132 / 0xe130)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:33:22 +02:00
jpmschweitzerandClaude Opus 4.8 81e98bf3f3 T-294: fixed-end status-bar placement variant + space-reservation note
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:31:46 +02:00
jpmschweitzerandClaude Opus 4.8 ccd6b6174c flag T-294 ready — status-bar collapse-toggle design approved
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:29:19 +02:00
jpmschweitzerandClaude Opus 4.8 da3043308a T-294: move collapse toggles into the status bar
Revise the mock — toggles no longer float on the pane edges; they live in
the bottom status bar, pinned to the center pane's left/right edge so each
slides to the far end when its pane collapses.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:28:24 +02:00
jpmschweitzerandClaude Opus 4.8 0c44bd25f3 file T-295: clide image show is not tab-aware (opens in primary tab)
Bug found while showing a wireframe during T-294 — image-show renders into
the primary tab regardless of the active tab. Filed under T-276 UI epic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:26:07 +02:00
jpmschweitzerandClaude Opus 4.8 223de60853 T-294: Frame0 mock for pane collapse toggles + scope to visual affordance
Add the wireframe (states A/B) for edge-anchored collapse toggles on the
center pane. Records that collapse logic already exists (sidebar.collapse /
context.collapse commands) so the ticket is scoped to the mouse affordance.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:24:36 +02:00
jpmschweitzerandClaude Opus 4.8 cc92694c81 refine T-294: anchor collapse toggles on center-pane outer edges
Settled placement — one button per center-pane edge, fixed regardless of
adjacent pane state, so the same control collapses and re-opens.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:21:47 +02:00
jpmschweitzerandClaude Opus 4.8 a6f9e5bdeb file T-294: collapse buttons for sidebar and context pane (Frame0 mock)
Set up a Frame0 mock to talk through collapse/expand affordances for
the left sidebar and right context pane. Filed under the T-276 UI epic.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:18:51 +02:00
jpmschweitzerandClaude Opus 4.8 69346a5e25 flag T-293 ready
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:13:11 +02:00
jpmschweitzerandClaude Opus 4.8 e7cbdcd967 file T-293: chosen theme not persisted per-repo across loads
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:12:19 +02:00
jpmschweitzerandClaude Opus 4.8 5950b77d34 close T-292 (pty core-test starvation fixed)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:09:10 +02:00
jpmschweitzerandClaude Opus 4.8 0231cb41e0 run pty-tagged core tests serially to fix isolate-starvation flake (T-292)
ci/test_core.sh ran 'dart test test/ipc test/pty ... test/pql' in the default
parallel pool, so the real-PTY tests in test/pty competed for fds + CPU with the
other suites and the reader isolate was starved — intermittently failing 'write
sends keystrokes to child' under load. Split into a serial --tags pty pass and a
parallel --exclude-tags pty pass, mirroring ci/test.sh. Same 571 tests; pty pass
verified stable across repeated runs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:08:57 +02:00
jpmschweitzerandClaude Opus 4.8 fdccca1294 close T-278 (slash typeahead hyphen + Tab fixed by D-88 migration)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:03:30 +02:00
jpmschweitzerandClaude Opus 4.8 d8b9a4137e lock in slash typeahead hyphen + Tab-accept behaviour (T-278)
Both T-278 issues — typing '-' breaking the list, and flaky Tab-to-complete —
were resolved by the D-88 ClideTypeahead migration (T-286): the popover now
narrows live as you type (ValueNotifier-bridged suggestions) and the field keeps
focus (captureFocus:false), so '-' filters normally and Tab reliably accepts the
highlight. Add regression coverage: hyphenated queries in slash_commands_test and
a composer widget test that types through a hyphen then Tab-completes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 17:03:16 +02:00
jpmschweitzerandClaude Opus 4.8 b10ff321a3 file T-292: pty keystrokes test starves under parallel/coverage load
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:57:37 +02:00
jpmschweitzerandClaude Opus 4.8 d5da614473 close T-29 (editor honours .editorconfig); file T-290/T-291 follow-ups
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 12:46:51 +02:00
jpmschweitzerandClaude Opus 4.8 d4b39e430a route editor config through a source-agnostic EditorSettings model (T-29)
Introduce EditorSettings as the effective, source-agnostic editor configuration
the editor and save path obey. .editorconfig is demoted to one *source*
(editorconfig.dart now returns EditorSettings); editor_settings_resolver.dart is
the single composition seam where future sources — a settings panel, a clide
settings file — layer in via merge() without the editor changing.

The registry resolves settings on buffer load and, when a .editorconfig is saved
in-app, re-resolves every open buffer and emits editor.settings-changed (a hook
in save, not a filesystem watcher — the realistic case, cheaply). Buffer JSON
carries editorSettings. 100% line coverage on the new model + resolver.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 09:15:49 +02:00
jpmschweitzerandClaude Opus 4.8 55c66601c3 read .editorconfig and apply it on open + save (T-29)
New lib/src/editor/editorconfig.dart: a dependency-free INI parser, an
EditorConfig-flavour glob matcher (*, **, ?, [seq], {a,b}, {m..n}), and
directory-walk resolution honouring root=true with nearest-file / last-section
precedence. EditorRegistry resolves the config when a buffer opens (exposed on
the buffer JSON for the UI) and applies end_of_line / trim_trailing_whitespace /
insert_final_newline on save, reconciling the in-memory buffer when the text
changes. 100% line coverage on the new file.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 08:48:47 +02:00
jpmschweitzerandClaude Opus 4.8 48974d2a29 close the D-88 anchored-popover sweep (T-286, T-288)
Record the closing amendment on D-88: base blockers fixed, every anchored
surface migrated except quick-open (deliberately left bespoke — a persistent
centred widget that shares neither ClideMenu nor anchoring). Mark T-286 and
T-288 done.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 08:19:52 +02:00
jpmschweitzerandClaude Opus 4.8 020b29f9b7 file T-289 (right-click context menus with context-aware actions)
Rolling UI epic T-276 child. Secondary-tap context menu built on the
ClideAnchoredOverlay + ClideMenu primitives (D-88): a baseline of
copy/cut/paste/select-all driven by surface focus/selection, plus
context-aware items injected per surface (file-navigator duplicate/rename,
git-pane stage/unstage/revert). Injected actions map to clide verbs for
user/Claude parity (D-6).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 22:16:35 +02:00