jpmschweitzerandClaude 96b26e29f0 add app test suite — unit, widget, golden, a11y (168 tests)
Four layers under app/test/:

  * kernel/, extension/ — unit tests for every kernel service and
    the extension contract. i18n fallback chain gets the full
    matrix (exact/lang/default/placeholder, namespace isolation,
    unknown namespace, interpolation). Theme resolver and
    extension-manager topo sort covered.
  * widgets/, builtin/ — widget tests for every primitive and each
    Tier 0 built-in. Assertions reach into the Semantics node so
    a missing label fails structurally, not visually.
  * goldens/ — Alchemist + Ahem font for cross-platform pixel
    stability; primitives only (button, tab bar, icon set). No
    goldens for compositions — they'd churn through every tier.
  * a11y/ — contract-level gate: semantic coverage walks the
    built-in catalogue, contrast walks every token pair in every
    bundled theme against WCAG-AA thresholds (catches real
    regressions: the first run caught `tab.inactive_text` at 2.81
    in summer-night), i18n coverage asserts every referenced key
    exists in its catalog (exists-in-map, not "key == value" — too
    ambiguous for keys that happen to equal their translation).

Helpers under helpers/: `KernelFixture.create()` boots a
KernelServices with in-memory stores + a FakeDaemonClient (no
socket, drivable connected-state), `widget_harness` wraps a
widget in the minimum tree that resolves theme + i18n.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-21 15:47:14 +02:00
2026-04-20 20:30:51 +02:00

clide

A Flutter desktop IDE for Claude Code. Markdown-first content, pql-powered queries, canvas and graph surfaces, a Go sidecar handling PTYs / subprocesses / git / pql. Claude drives the UI through a clide CLI.

Currently pre-v2.0, scaffolding. The north-star design lives in docs/initial-plan.md; architectural decisions are captured in docs/ADRs/. The Python Textual v1.2.0 implementation is archived under legacy/ for reference.

Three surfaces, one tool

  • app/ — Flutter desktop application (Linux / macOS; Windows is a stretch).
  • sidecar/ — Go sidecar/CLI, single binary with two modes: clide <subcommand> (one-shot for Claude) and clide --daemon (long-running sidecar for the app). Owns PTYs, subprocesses, file watchers, git, pql invocations.
  • pql — external supporter tool. clide wraps it for every query surface; never re-implements it.

Why the rebuild?

The Python Textual implementation (legacy/) proved the pane model but capped at terminal-only rendering. A short-lived experiment (claudian, April 2026) explored an Obsidian-plugin approach and was abandoned because Obsidian is Electron, and the user's history with terminal-in-Electron ruled that host out.

Flutter desktop resolves both constraints: native Skia rendering avoids Electron's failure modes, xterm.dart gives us a solid terminal surface, and the pane model can be rebuilt natively. The Obsidian ideas worth keeping (canvas, graph) fold in; everything else (vault concept, inline query tables, plugin ecosystem inheritance) doesn't.

Status

No build yet beyond the repo scaffold. Tier 0 acceptance: sidecar daemon runs, Flutter app connects, empty IDE shell appears with placeholders.

License

MIT. See LICENSE.

S
Description
CLI Claude
Readme MIT
32 MiB
Languages
Dart 86.3%
Python 8.2%
Tree-sitter Query 1.7%
Shell 0.8%
C 0.6%
Other 2.2%