Commit Graph
614 Commits
Author SHA1 Message Date
jpmschweitzerandClaude 968c3dbfa8 promote the Ctrl+K theme picker into a Settings modal
The status-bar popover already handles quick theme switching, so a
separate theme-only modal was redundant. Repurpose it as a general
Settings surface whose first (currently only) section is Appearance:
base themes, sorted, with a High-contrast toggle for -hc siblings,
reusing the theme_families helpers shared with the popover.

Command id stays theme.pick (the welcome theme-link and tests
reference it); only the title and the view it opens change.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 09:32:20 +02:00
jpmschweitzerandClaude ffd22069a7 mark T-239 done in plan changelog
Ticket was fixed and pushed earlier but left in_progress; persist the
done transition that only lived in the local pql.db.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-06 08:48:22 +02:00
jpmschweitzerandClaude Opus 4.8 cbea0b4fcd file tickets: compaction-progress UI + pane-list subject + socket hygiene
Persist three new tickets to the planning changelog:
- T-244: Claude pane shows no UI/status-bar progress while compacting (D-77)
- T-246: pane list omits the loaded subject; CLI can't tell which
  ticket/decision/file a detail pane shows (D-6)
- T-247: clide CLI ignores CLIDE_SOCK and auto-discovers; stale sockets
  orphaned in the runtime dir (D-6)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:31:19 +02:00
jpmschweitzerandClaude Opus 4.8 62c6a60ec7 add clide ui toast — raise a toast from the CLI (T-245)
The drive-half complement to the toast system (D-6 parity, like ui.open):
`clide ui toast "msg" [--severity success|warning|error|info] [--duration MS]`
publishes a message on the kernel MessageBus 'toast' channel, which the
ToastService consumes — so a hosted Claude session or any script can surface
"done/failed" on the user's screen. The channel literal is kept in ui_command
(not imported from the kernel) so the daemon command stays Flutter-free.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:30:46 +02:00
jpmschweitzerandClaude Opus 4.8 1f09abcfd7 add toast notification system (T-50)
Non-modal operation-feedback toasts, bottom-right: a ClideToast card per
severity (success/warning/error/info), auto-dismiss (errors linger), queue
with a visible cap, slide+fade in, manual dismiss, live-region a11y.

ToastService is a MessageBus consumer — components raise a toast by publishing
to the 'toast' channel (publishToast helper), so emitters stay decoupled from
the UI. GitController's push/pull are the first emitters. ToastOverlay mounts
in the app-root Stack.

Also adds comprehensive GitController coverage: importing it for the toast
emitter test first pulled the whole file into the coverage denominator, so the
controller is now tested end to end (status/stage/commit/stash/push/pull).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:14:42 +02:00
jpmschweitzer 55ed3013e1 index D-84 in governance README 2026-06-05 23:13:30 +02:00
jpmschweitzer c2dc22be78 decide diff view placement: editor-mode above Claude (D-84, closes T-42; impl tracked in T-243) 2026-06-05 17:17:53 +02:00
jpmschweitzerandClaude Opus 4.8 62c5b88835 root-cause T-122 + restore 95% coverage; fix recents-row overflow
T-122: WelcomeView "hangs when recents are non-empty" was not a render/marquee
bug — SettingsStore.set does real file I/O, and awaiting settings.set +
loadRecents inside a testWidgets body runs it in fake-async, trapping the
completion so the await never returns. Fix: seed via tester.runAsync. Un-skip
the welcome recents test; add render/sticky/open-recent coverage.

Coverage: new test/app_test.dart covers the app shell (RootLayout, slots,
rails, spines, editor split, hat bar, intents, keymap, project switcher +
dialogs); welcome recents + events/types fill the rest. Total 92.04% -> 95.13%.

Also fixes a real bug found en route: the recent-project row (welcome +
switcher) overflowed instead of ellipsizing a long path (T-122).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 15:24:37 +02:00
jpmschweitzer 51ae7c61f1 quiet test reporter to failures-only + front-load coverage in push-check (T-242) 2026-06-05 15:24:11 +02:00
jpmschweitzer 59808179a1 note ultrawide layout + testing in ui-design skill (T-239/T-241) 2026-06-05 12:03:29 +02:00
jpmschweitzer 987e7e933a cover ultrawide in the status-bar layout test (T-239) 2026-06-05 12:02:00 +02:00
jpmschweitzer eda304f544 lay out status bar as explicit left/right groups (T-239) 2026-06-05 11:56:38 +02:00
jpmschweitzer 5dc5ec744f plan: refine T-240 with CLI first-char digit pattern 2026-06-05 11:41:16 +02:00
jpmschweitzer a712c26126 plan: file T-240 (number-key shortcuts for prompt buttons) 2026-06-05 11:39:01 +02:00
Jeroen SchweitzerandClaude a0e6f0fcba document the commit-directly-to-main workflow
Record that this solo-dev repo lands routine work straight on main and
does not use a branch-first flow, so the generic assistant default of
branching before committing on the default branch does not apply here.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-05 11:06:30 +02:00
Jeroen SchweitzerandClaude 23c75d67c5 remove retired pql-plan.json snapshot
The pre-D-15 plan snapshot is no longer read — planning state lives in
.pql/changelog/ and is replayed into pql.db on clone/merge. pql plan
import only touches this file behind --legacy, so it is dead weight.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-05 10:52:23 +02:00
Jeroen SchweitzerandClaude eecb95f464 close T-65, T-182, T-189, T-190, T-191 as done
These five were stuck in_progress locally while the source machine had
already closed them, but that machine's close never reached the
git-tracked changelog (no done-transition in .pql/changelog/, all remotes
in sync) — likely a write-through/hook gap in its pql bookkeeping.

Closed here after confirming the work is genuinely complete: each
ticket's acceptance criteria were verified against the code and the
backing tests run green (130 passing across the vim preset, Claude
sidebar sub-tabs, and the reader back/forward, pin, and edit-pencil
suites).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-05 10:52:17 +02:00
jpmschweitzer 478b2355e1 drop a theme-switcher widget test that hung pumpAndSettle (T-237) 2026-06-04 07:48:54 +02:00
jpmschweitzer fcca2b48d9 plan: file T-239 (status-bar right-alignment bug) 2026-06-03 23:42:17 +02:00
jpmschweitzer dc84f4ca49 fix status items to the center block's right edge (T-237) 2026-06-03 23:34:55 +02:00
jpmschweitzerandClaude Opus 4.8 d4a295b38d plan: close T-237 (theme-picker polish)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 23:31:15 +02:00
jpmschweitzerandClaude Opus 4.8 643417edbb right-align the status bar's global items (T-237)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 23:11:04 +02:00
jpmschweitzerandClaude Opus 4.8 5fcc42bd8c tidy the theme switcher popover (T-237)
Per demo feedback on the T-234 status-bar popover: collapse the -hc
theme rows into a single 'High contrast' toggle at the top (applies the
chosen base theme's -hc sibling live, falling back to the base when none
exists); list base themes only, sorted by display name; widen 240->280
and ellipsize rows so 'Catppuccin Mocha' no longer wraps; swap the swatch
dot for the Phosphor palette icon; lowercase the bar label to match the
all-lowercase status bar (proper case kept in the a11y label).

New pure theme_families helpers (base/sibling/resolve), unit-tested.
Modal picker_view consistency + the status-bar right-alignment remain on
T-237.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 22:46:17 +02:00
jpmschweitzerandClaude Opus 4.8 fb29254851 fold Claude tool activity into a collapsible card (T-230)
A heavy agent turn buried user/Claude prose under a wall of tool-call/
result rows. A pure grouping pass (activity_cluster.dart) folds runs of
consecutive meta items into clusters; the conversation view renders each
cluster as one collapsible activity card — collapsed by default with a
live one-line ticker of the latest step + a step count, click/Enter to
expand the steps in order. Sticky items (user messages, Claude prose,
and FAILED results) render first-class and seal the cluster.

Fold level is switchable (FoldLevel none/tools/thinking/everything);
default L1 folds tool calls+results while keeping diffs and thinking
first-class. The grouping logic is fully unit-tested; the card is
keyboard + screen-reader accessible. Persisting the level via a user
setting + control is the tracked follow-up T-235.

Closes T-230 (under T-132).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:19:10 +02:00
jpmschweitzerandClaude Opus 4.8 b4bbbc8a62 add a status-bar theme switcher with live popover (T-234)
A far-right status-bar control shows the current theme and opens an
anchored popover (not the full-screen modal) to switch live: click or
keyboard (arrow/Enter to pick, Esc/tap-away to dismiss without change).
Reuses ThemeController.available/select; the theme.pick palette command
is unchanged (D-6 parity). Registered at priority 110 so it sits in the
status bar's right group.

Closes T-234 (under no parent; demo polish).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:04:39 +02:00
jpmschweitzerandClaude Opus 4.8 3ff09dfb6e docs: note the don't-retune-published-themes rule in ui-design
Records the D-69 lesson surfaced live: a named theme's palette is a user
contract — ship an -hc sibling for a11y rather than retuning the artist's
colours. Includes the baseline-vs-extended split and the Catppuccin Latte
case where even the baseline chrome pairs are too soft.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:54:13 +02:00
jpmschweitzerandClaude Opus 4.8 884207c59e add Catppuccin Mocha theme (+ high-contrast sibling)
Ships catppuccin-mocha (faithful to the official Catppuccin Mocha
palette) and catppuccin-mocha-hc (high-contrast sibling per D-69 — the
faithful palette is never retuned to pass the gate). Both bundled and
gated: mocha clears baseline AA, mocha-hc clears the strict extended
set. Catppuccin MIT palette recorded in licenses.yaml.

Closes T-82 (Mocha + hc meets every acceptance bullet; faithful Latte
deferred — it can't clear baseline AA without retuning, a separate call).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:51:06 +02:00
jpmschweitzerandClaude Opus 4.8 4c77f32ad2 docs: remove the pql-improvements notes
The internal pql-improvement notes are retired; the actionable items
live as pql tickets now.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:16:39 +02:00
jpmschweitzerandClaude Opus 4.8 80fbdbc073 plan: back up ticket T-234 (theme-switcher status-bar popout)
Export the pql db so the newly-created T-234 lands in the committed
changelog -- the gitignored pql.db rebuilds from this on branch switch
(D-67), so an un-exported ticket would vanish.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:15:04 +02:00
jpmschweitzerandClaude Opus 4.8 a08f75ae1c make CLI argv args reach typed command handlers (T-232)
Parameterized subsystem commands were unreachable from the CLI: the
argv translator emits {positional, flags} but the handlers read named
top-level keys (args['path'], args['id'], ...), and nothing mapped
between them -- so 'clide editor open <path>' returned 'path is
required'. The fix needed no new mechanism: D-74's CommandSchema.normalize
already folds the argv shape into named args by a declared positional
ordering; these commands just never registered a schema.

Adopts it for the navigation/drive surface -- editor.open/activate/read/
save/close, files.read/ls, pane.close/focus/resize/write -- with
non-required positional schemas, so the only effect is positional->named
mapping plus numeric coercion of line/cols/rows. Handlers unchanged;
missing-arg errors unchanged. Edit-mutation verbs, pane.spawn, and git
arg verbs are deferred (noted on the ticket).

Takes effect on app restart (the dispatcher is built once at boot).

Closes T-232 (under T-208 'Give Claude hands').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:47:34 +02:00
jpmschweitzerandClaude Opus 4.8 4e5d7b1347 plan: refine T-212 with proactive install-prompt-on-launch scope
Live dogfooding hit a stale clide symlink (GUI runner, not the C
client), so T-212 should proactively detect a missing/stale clide on
launch and offer to install -- not just expose a palette command.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:34:12 +02:00
jpmschweitzerandClaude Opus 4.8 09d1a6370a add clide ui open to drive GUI readers from the CLI (T-231)
The drive-half complement to clide status (observe): an agent can now
open a doc in a GUI reader from the CLI so it can show the user what
it's looking at. 'clide ui open tickets T-48' (decisions by id,
markdown by path) publishes a 'selection' to the kernel MessageBus that
the reader's ReaderNav picks up.

The verb (ui_command.dart) is decoupled from the kernel via a publish
callback, wired in main.dart to the post-boot-captured MessageBus, so it
stays Flutter-free under dart test. Reads CLI positionals or named args.

Also files T-232 (CLI argv args don't reach typed handlers -- the gating
drive-the-IDE bug) and T-233 (diff-panel ui.open follow-up).

Closes T-231 (under T-208).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:30:36 +02:00
jpmschweitzerandClaude Opus 4.8 0d1eb0e0a9 plan: ticket CLI-driven reader open (T-231)
Dogfooding showed Epic C gave the CLI the observe half of D-6 parity
but not the drive half: no verb opens a doc in a UI reader because
nothing bridges the IPC layer to the kernel MessageBus. Files T-231
to add a ui.open/view.open verb under T-208.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:19:52 +02:00
jpmschweitzerandClaude Opus 4.8 8682564903 add clide status orientation snapshot; close Epic C (T-221)
clide status returns a one-shot snapshot for an orienting agent: the
workspace root, a git summary (branch/ahead/behind/clean/counts), the
active editor buffer + selection, the read-only readers' viewed docs
(new ReaderNavRegistry.currentByReader, the T-220 fold), focusedFile,
the live view-pane list (T-219), and the layout (slots + visibility +
focus mode). Previously 'status' was an unknown command (exit 3).

The verb handler (status_command.dart) is a thin Flutter-free wrapper;
the snapshot is assembled in main.dart where the live kernel + subsystem
state is in scope, with readerNav captured post-boot. Composite shape is
verified live; the pieces are unit-tested.

Closes T-221 and T-218 (Epic C) under T-208 'Give Claude hands' --
the observe half of D-6 parity is now in place.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:51:15 +02:00
jpmschweitzerandClaude Opus 4.8 6c4c48bfc2 add a permission-mode cycler to the primary Claude pane
T-226. The primary pane showed the permission mode but had no way to
change it (only the cockpit roster did, T-181). Add three affordances,
all cycling the safe trio default -> acceptEdits -> plan over the
stream-json control channel:

- Ctrl/Cmd+M while the composer is focused, intercepted at the composer
  so it targets that pane's session. Shift+Tab (the CLI chord) is
  deliberately NOT used — Tab/Shift+Tab are real a11y focus-traversal
  intents since T-204.
- The status-line mode label is now an interactive badge (ClideTappable):
  click, or focus + Enter/Space, cycles it.
- A "Claude: Cycle permission mode" palette command targeting the primary
  session.

bypassPermissions stays out of every cycle path here — it's reachable
only via the cockpit's explicit confirm (T-181). Shared helpers
(nextSafePermissionMode, statusSegmentsAroundMode) live in claude_status;
the cockpit's existing copy is left untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:45:52 +02:00
jpmschweitzerandClaude Opus 4.8 bda53b3bb1 add wireframe for the meta-message activity card
Low-fidelity Frame0 sketch for T-230: collapsed state (sticky prose +
one-line live ticker with step count) and expanded state (folded
tool-call/result rows, plus a surfaced error row that breaks the
cluster). JSON source + exported PNG.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:18:10 +02:00
jpmschweitzerandClaude Opus 4.8 0e71d98b81 record composer-epic and meta-clustering tickets in the plan backup
Planning-backup sync for the tickets filed/closed this session: the
T-229 composer-ergonomics epic and its children (T-227/T-228/T-163,
now done) and the new T-230 meta-message clustering story under T-132.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:18:01 +02:00
jpmschweitzerandClaude Opus 4.8 7725aaf916 plan: close T-220 as done-by-prior-work; refocus T-221
The editor already reflects UI opens/active/selection into EditorRegistry
via the editor.open / editor.activate / editor.set-content IPC flow, so
T-220's acceptance already holds for code files. Closes it with that
rationale and folds the only real remainder -- the read-only reader's
viewed file -- into T-221's clide status scope (focused file = active
editor buffer OR active reader doc).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:01:34 +02:00
jpmschweitzerandClaude Opus 4.8 be06b94754 register live GUI panes into clide pane list (T-219)
Per D-6 parity / D-83, make the kernel tabs the user sees (Claude,
Files, Editor, viewers) visible to the CLI. The PTY-backed PaneRegistry
can't model widget panes, so rather than mirror state (and risk drift),
pane.list snapshots the kernel PanelRegistry + LayoutArrangement at
request time via an injected view-pane source.

New Flutter-free ViewPane value type + snapshotViewPanes kernel bridge;
the daemonClientFactory now passes the PanelRegistry through so the
dispatcher can read it. pane.list merges PTY panes (source absent) with
UI tabs (source: ui, with slot/title/active/visible).

Acceptance (GUI-open: pane list enumerates live panes) needs a running
app to confirm end-to-end; unit-tested at the snapshot + dispatch level.

Closes T-219 (under T-218 / T-208 'Give Claude hands').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:49:57 +02:00
jpmschweitzerandClaude Opus 4.8 4508be76ac focus the Claude composer on a background tap
T-227. A tap on empty conversation area now lands the cursor in the
composer. The conversation area is wrapped in a translucent
GestureDetector whose onTap focuses a pane-owned composer FocusNode, so
message links, copy buttons, and the SelectableRegion's selection drags
keep winning their own gestures — only an unclaimed tap reaches us. It's
a no-op while a prompt holds the interaction zone (D-78), so a tap never
pulls focus over an open prompt.

The composer learned to accept an external focus node (the pane owns it,
so it survives composer remounts) and attaches its key handling to
whichever node it's given.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:09:17 +02:00
jpmschweitzerandClaude Opus 4.8 ab5d63debd add Up/Down prompt history to the Claude composer
T-163. Up/Down walk previously-sent prompts, Claude-CLI-style: Up steps
to older entries only once the caret is on the first line (so multi-line
edits move line-by-line first), Down returns toward newer ones and, past
the newest, restores the in-progress draft that was stashed on entry.

History is per-session, owned by the pane (appended on submit, deduping
immediate repeats) and read by the composer. Previewing entries is
suppressed from the draft report, so browsing history never overwrites
the persisted draft (T-228) — and a remount mid-browse restores the real
draft, not a preview. History nav only applies when the slash typeahead
is closed; Up/Down still drive the typeahead when it's open.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:04:59 +02:00
jpmschweitzerandClaude Opus 4.8 b4a02dc533 persist the Claude composer draft across UI swaps
T-228. Typing in the composer was lost whenever the input was torn down
and rebuilt — most visibly when a permission prompt takes the composer's
place (D-78), since the prompt card replaces the composer widget and its
TextEditingController went with it.

Hoist the draft out of the widget: ClaudeComposer gains initialValue +
onDraftChanged, and the pane holds a per-session draft map, seeding the
composer on (re)mount and clearing the entry on submit. Keying the
composer by session id means switching sessions in a pane swaps to that
session's own draft. Text and caret both survive.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:00:48 +02:00
jpmschweitzerandClaude Opus 4.8 78c1e28c0e plan: ticket the Claude work-mode cycler (T-226)
Dogfooding surfaced that the Claude pane displays the permission mode
but has no quick switcher equivalent to the CLI's Shift+Tab cycle. Files
T-226 with implementer detail; also records T-219/T-220 in_progress.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:44:55 +02:00
jpmschweitzerandClaude Opus 4.8 f6552435f4 bootstrap clide-hosted Claude sessions (Epic B)
Per D-83 the clide-hosted stream-json session is the primary dogfood
target — the process clide spawns, so the one clide can fully equip.
Adds a Flutter-free agent_bootstrap module and injects it centrally in
ClaudeSessionOrchestrator.spawn so every hosted session (primary,
secondary, fork, teammate) is handed:

- CLIDE_SOCK (the per-workspace socket, D-70) + CLIDE_WORKSPACE in its
  env, and `clide` prepended to PATH when not already resolvable, so
  `clide …` works with zero manual socket discovery (T-215);
- a system-prompt context note (--append-system-prompt) telling it it is
  inside clide and how to drive the IDE via `clide …`, plus the D-6
  parity contract; the note merges with the team preamble into one
  --append-system-prompt (T-216);
- a Bash(clide:*) allow rule (--allowedTools) so clide calls aren't
  prompted (T-217).

The PATH resolver no-ops when clide is already on PATH (installed case,
T-211) and falls back to ~/.local/bin and the dev native/<os>-<arch>
tree; it degrades gracefully when none is found. Pure helpers are
unit-tested; the fork-args test is made position-independent.

Closes T-214, T-215, T-216, T-217 (under T-208 "Give Claude hands").

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:21:34 +02:00
jpmschweitzerandClaude Opus 4.8 501018ddc9 decide the dogfood agent model (D-83)
Records D-83 answering Gap 5 of docs/self-analysis.md: clide commits to
both "Claude inside clide" models, with the clide-HOSTED stream-json
session (D-77/D-78) as the PRIMARY dogfood target — the process clide
spawns, hence the one Epic B (T-214) bootstraps (CLIDE_SOCK/CLIDE_WORKSPACE
+ PATH + context note + Bash(clide *) allow rule). The EXTERNAL CLI driver
(D-68) stays a first-class but SECONDARY, best-effort integration: manual
install (T-212), no promise to observe its non-clide tool use.

Scopes the D-6 parity contract (Epic C / T-218) to clide's own surfaces
reflected through the CLI in both directions; an external agent's
side-channel reads/tests/git are explicitly out of parity scope.

Closes T-224 (under T-208 "Give Claude hands").

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:08:20 +02:00
jpmschweitzerandClaude Opus 4.8 4ac52664ea ship the clide CLI on PATH (Epic A)
`make build`/`make install` now compile the C `clide` client by default
(clide-cli is a prereq of both), and `make install` places that binary at
$(INSTALL_DIR)/clide on Linux and macOS instead of symlinking the Flutter
GUI runner. The GUI still launches via its desktop entry / clide.app.
macOS install now delivers the CLI too; macOS uninstall removes it.

Adds a regression test asserting clideVersion (build_info.g.dart) stays
equal to pubspec.yaml version, so an agent keying off `clide version` is
never misled.

Closes T-210, T-211, T-213 (under T-209 / T-208 "Give Claude hands").

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:01:13 +02:00
jpmschweitzerandClaude Opus 4.8 adcc79c9a5 cover Vim edit-ops and extension edge branches
Lift line coverage back over the 95% floor after the Flutter 3.44.1
merge nudged it to 94.99%. Adds tests for the changeWord/no-op-edit/
empty-paste/word-motion-edge branches in vim_edit_ops, the lone-key
flush path in SequenceMatcher, and the keybindings-ui / vim extension
identity + deactivate paths.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:48:27 +02:00
jpmschweitzerandClaude Opus 4.8 ec67f3323a refresh Linux golden baselines for Flutter 3.44.1
Sub-pixel rendering nudges from the SDK bump (3.41.7 -> 3.44.1), the
Linux counterpart to the macOS baseline refresh already on origin. No
widget changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:20:32 +02:00
Jeroen SchweitzerandClaude Opus 4.8 02bc4803fc docs: note the pql README-sync bug in pql-improvements
Adds issue #7 — pql decisions sync regenerates governance/README.md and
relists resolved questions as open (dropping the Resolved section), which
also yields a persistent false-dirty diff.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:08:42 +02:00
Jeroen SchweitzerandClaude Opus 4.8 171abf628f refresh macOS golden baselines
Sub-pixel rendering drift (~8px) from the committed goldens/macos/ baselines
for button, icon, and tab-bar. Regenerated on macOS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:00:30 +02:00