Files
clide/decisions
jpmschweitzerandClaude c94ad2c05b
test / unit + widget + golden + a11y (push) Successful in 1m30s
test / integration_test (xvfb) (push) Failing after 1m14s
test / bundle smoke (xvfb 5s) (push) Failing after 1m3s
test / daemon subprocess + web WASM smoke (push) Successful in 1m42s
restructure licenses.yaml: self + runtime deps + dev deps
Three sections instead of one flat list. `self:` carries clide's own
MIT license (rendered first in the About screen so the user knows
what they're running before the dependency list). `dependencies:`
covers artefacts that actually ship in the binary — JetBrainsMono,
JosefinSans, yaml. `dev_dependencies:` tracks build-time tooling
(mocktail, alchemist, flutter_lints, lints, test) for audit
completeness without polluting the user-facing About panel.

Also backfilled the two root-package dev deps that were missed the
first pass: `lints: 5.0.0` and `test: 1.25.8` (root pubspec, not
app/). Root LICENSE mirrored into app/assets/LICENSE + declared as
a bundled asset so the About screen can read it at runtime (Flutter
can't reference paths above the package root).

D-042 updated to describe the three-section split and the dev-vs-
runtime distinction.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-04-22 08:26:36 +02:00
..

Decisions

Confirmed decisions, open questions, and rejected alternatives for clide.

Decisions are split by domain. When unsure where a record belongs: if it constrains how we build, it's architecture. If it defines what ships to users, it's extensions / accessibility. If it defines how we verify, it's testing. If it defines what the toolchain looks like, it's tooling. If it defines how the team works, it's process.

Cross-domain records live in one file with [D-NNN]-shaped cross- references in related files. Split threshold: when any file exceeds ~350 lines, review whether it should split (see settled-reach's questions-*.md split pattern for precedent).

Domain files

File Domain
architecture.md Core, rendering, IPC, kernel, panel manager
extensions.md Extension contract, Lua runtime, grain, contribution points
accessibility.md A11y + i18n policy, WCAG gates
testing.md Test pyramid, drivers, client-side constraint
tooling.md Toolchain, supply chain, CI, ignore strategy
process.md Q&D system, kanban, commit conventions, changelog
rejected.md Rejected alternatives across all domains
questions.md Master index of open questions
questions-architecture.md Architecture Qs
questions-extensions.md Extension Qs
questions-accessibility.md A11y / i18n Qs
questions-testing.md Testing Qs
questions-process.md Process + tooling Qs

Record shape

Confirmed decisions (D-NNN):

### D-NNN: Short title
- **Date:** YYYY-MM-DD
- **Decision:** one-sentence summary, then details.
- **Rationale:** why this over alternatives.
- **Cost:** known downsides / what we're accepting.
- **Raised by:** who proposed / endorsed.

Domain-specific fields (Kill switch:, Evaluation reports:, Amendment:, Cross-reference:) are additive. Amendments are inline and dated: **Amendment (YYYY-MM-DD):** …. Cross-references use markdown anchor links with the full slug: [D-005](architecture.md#d-005-dart-core-ptyc-peer).

Open questions (Q-NNN):

### Q-NNN: Short question-form title
- **Status:** Open | Partially resolved → [D-NNN] | Resolved → [D-NNN]
- **Question:** ...
- **Context:** ...
- **Assigned to:** (optional)
- **Source:** (optional)

Rejected alternatives (R-NNN):

### R-NNN: Short rejected-option title
- **Rejected:** YYYY-MM-DD
- **Reason:** ...
- **Cross-reference:** [D-NNN] (what was picked instead)

Claiming an ID

Until the pql planning subcommands land (Q-021), claim IDs by inspecting the highest existing D-NNN / Q-NNN / R-NNN in the target file and incrementing.

Once pql decisions claim D <domain> "title" exists, use that — same semantics, no race on concurrent sessions.

Querying

Stopgap today: tools/scripts/plan decisions … reads and writes .pql/pql.db (gitignored; markdown is source of truth). Replaced by pql decisions … when pql ships parity — see D-040 and R-011.

Common queries:

tools/scripts/plan decisions list --type confirmed --domain architecture
tools/scripts/plan decisions show D-005 --with-refs
tools/scripts/plan decisions coverage     # D-records without tickets
tools/scripts/plan decisions validate     # pre-push parser gate

Adding a decision

  1. Edit the appropriate domain file.
  2. Follow the record shape above.
  3. Run tools/scripts/plan decisions validate (also runs in make push-check).
  4. Commit. The SQLite index rebuilds from markdown on any tools/scripts/plan decisions sync.