Files
clide/governance/rejected/architecture.md
T
jpmschweitzerandClaude 63195d1ec8
test / unit + widget + golden + a11y (push) Failing after 31s
test / integration_test (xvfb) (push) Has been skipped
test / bundle smoke (xvfb 5s) (push) Has been skipped
test / daemon subprocess + web WASM smoke (push) Has been skipped
test / dart doc (lib API) (push) Failing after 1m2s
migrate DQR tree to governance/ layout (pql D-21)
pql 1.4.30 introduces a per-type subdirectory layout for decision
records: governance/{decisions,questions,rejected}/<domain>.md. The
parser infers record type from the parent subdir and domain from
the filename stem, replacing the flat decisions/<file>.md layout
with questions-X and rejected prefixes.

Moves:
- 6 D-files to governance/decisions/ (accessibility, architecture,
  extensions, process, testing, tooling)
- 5 Q-files to governance/questions/ (stripped the questions- prefix)
- rejected.md split by domain to governance/rejected/{architecture
  (5), process (4), accessibility (1), testing (1)}.md — split per
  cross-reference target.

Drops:
- decisions/README.md (auto-regenerated as governance/README.md by
  pql init below the records marker)
- decisions/questions.md (hand-curated index pointing at the per-
  domain files; redundant once pql generates the index, and the
  "load-bearing" curation was already present in each Q-record's
  Context field).

Convention-driven; not a clide-specific change. Counts unchanged
across migration: 106 decisions, 95 tickets, 134 refs, 0 broken.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-11 18:34:20 +02:00

3.1 KiB

Rejected — Architecture

Alternatives considered and rejected, with rationale preserved for future reference.


R-2: Go sidecar

  • Rejected: 2026-04-20 (was ADR 0002; superseded by D-5)
  • Reason: The ADR picked Go on two premises — (a) the heavy work belongs in a language separate from the UI layer, and (b) pql is Go so muscle memory transfers. Both broke on reassessment. The sidecar stripped of PTY is I/O-bound glue that dart:io covers cleanly (unix sockets, JSON-lines framing, process tables, shell-outs). The real axis was separate process vs shared language, not Go vs Rust, and separate-process is what matters (session persistence needs the daemon to outlive the app), not language. PTY is the one place Dart is genuinely weak — Dart's multi-threaded VM can't safely fork() — and that single constraint forces a native helper regardless, independent of whether the rest of the core is Dart. Once a small native helper is accepted, the question "does everything else need to be in that same native language" answers itself: no. Go sidecar directory dissolved; ptyc (C, PTY-only, pql-peer) is the surviving native supporter tool.
  • Cross-reference: D-5

R-3: MaterialApp root

  • Rejected: 2026-04-21
  • Reason: Dragged in Material theming, default icons, and platform chrome that fought the custom three-tier theme pipeline (D-9). Every bundled theme had to override Material defaults to look like clide; the overrides were visible in widget tests as "why is this ElevatedButton colored this way."
  • Cross-reference: D-7

R-7: CupertinoApp root

  • Rejected: 2026-04-21
  • Reason: iOS-opinionated; wrong shell for a Linux-primary desktop IDE. Same theming-collision problem as R-3.
  • Cross-reference: D-7

R-8: Riverpod / Provider / BLoC for state

  • Rejected: 2026-04-21
  • Reason: Violates D-31. ChangeNotifier + ListenableBuilder ship in the SDK, fake trivially, and cover the state model we need. The ergonomic wins of Riverpod / Provider don't clear the "new dependency" bar at clide's scale.
  • Cross-reference: D-10

R-12: MaterialApp wrapper from design handoff

  • Rejected: 2026-04-22
  • Reason: The design handoff delivers theme files as MaterialApp/ThemeData Dart classes. This is the delivery format of claude.ai/design, not a design intent. Adopting Material's widget system would contradict D-7 (bare WidgetsApp, no Material/Cupertino). We translate the palette tokens and syntax roles into our existing YAML + SurfaceTokens pipeline.
  • Cross-reference: D-43