diff --git a/.claude/skills/README.md b/.claude/skills/README.md new file mode 100644 index 00000000..36ad049c --- /dev/null +++ b/.claude/skills/README.md @@ -0,0 +1,23 @@ +# Clide Claude-Code skills + +Skills are reusable instruction packs Claude Code loads on demand. Each one +lives in its own directory with a `SKILL.md` (frontmatter + body) and any +helper scripts. This index is for humans skimming what's available; Claude +discovers skills automatically from the directory structure. + +| Skill | Purpose | +|---|---| +| [`d2-diagram`](d2-diagram/SKILL.md) | Generate technical diagrams from `.d2` source with the d2 CLI; renders to PNG. | +| [`frame0-wireframe`](frame0-wireframe/SKILL.md) | Author UI wireframes as local JSON and sync to the Frame0 desktop app for rendering + export. | +| [`git-commit`](git-commit/SKILL.md) | Commit conventions for this repo — message style, CHANGELOG discipline (40/60 word cap), attribution trailer, safety rules. | +| [`pql`](pql/SKILL.md) | Query and plan against the markdown vault via the `pql` CLI (decisions, tickets, structural queries). | +| [`skill-create`](skill-create/SKILL.md) | Guidance for creating new skills — SKILL.md structure, bundling scripts, packaging. | +| [`testmode`](testmode/SKILL.md) | Run and interpret the `ClideTestApp` platform integration harness; smoke-test after toolchain / IPC / theme / native changes. | +| [`ui-design`](ui-design/SKILL.md) | Visual design guide — surface tokens, control geometry, Phosphor icons. | +| [`whats-next`](whats-next/SKILL.md) | Dependency-driven batch selection against the pql backlog. Walks the initiative/epic tree, filters unblocked work, refines, optionally activates. | + +## Adding a skill + +Use the `skill-create` skill (or follow its SKILL.md by hand). Add a row to +the table above so the inventory stays accurate; the index is otherwise just +a directory listing. diff --git a/CHANGELOG.md b/CHANGELOG.md index 76c76901..c317f365 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,6 +103,10 @@ heading, and (b) bumping `pubspec.yaml` `version:` in the same commit. - `make push-check-full` added — runs `push-check` plus integration + smoke for pre-release checks. Integration tests skip the hanging theme_picker case (T-116) until that's fixed (T-103). +- Governance bookkeeping: D-66 amended (floor at `coverage_floor:` in + `pubspec.yaml`); `licenses.yaml` reconciled with `pubspec.yaml`; + Q-1/Q-2/Q-3/Q-25 triaged; `.claude/skills/README.md` inventory + added; `--no-fatal-infos` dropped from `ci/test.sh` (T-113). - Terminal panes now render bold attributes with a real bold weight — bundled JetBrainsMono Bold + BoldItalic are registered with the `JetBrainsMono` family at `weight: 700`. The painter's bold diff --git a/assets/licenses.yaml b/assets/licenses.yaml index ba27e0ff..f976b6c7 100644 --- a/assets/licenses.yaml +++ b/assets/licenses.yaml @@ -216,21 +216,11 @@ dev_dependencies: license: BSD-3-Clause purpose: Flutter-team-recommended analyzer lint set (app/). - - name: lints - kind: dart-package - version: "5.0.0" - homepage: https://pub.dev/packages/lints - license: BSD-3-Clause - purpose: >- - Dart-team-recommended analyzer lint set for the Flutter-free - core package at the repo root. - - name: test kind: dart-package - version: "1.25.8" + version: "1.30.0" homepage: https://pub.dev/packages/test license: BSD-3-Clause purpose: >- - Dart test runner for the core package (Flutter-free; the app - uses flutter_test from the Flutter SDK for widget + golden - coverage). + Dart test runner for the Flutter-free PTY tests under + `dart test --tags forkpty` (flutter_test is used elsewhere). diff --git a/ci/test.sh b/ci/test.sh index c551823c..a918ed36 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -6,7 +6,7 @@ set -euo pipefail cd "$(dirname "$0")/.." echo "==> flutter analyze" -flutter analyze --no-fatal-infos +flutter analyze echo "==> dart format (whole tree)" dart format --set-exit-if-changed . diff --git a/governance/decisions/testing.md b/governance/decisions/testing.md index 8484a94e..fe5c7858 100644 --- a/governance/decisions/testing.md +++ b/governance/decisions/testing.md @@ -62,6 +62,7 @@ Test pyramid, drivers, client-side constraint. ### D-66: Line coverage gate at 95%, ratcheted from current - **Date:** 2026-05-06 +- **Amendment (2026-05-17):** Floor location consolidated — the committed floor lives at `coverage_floor:` in `pubspec.yaml` (single source of truth); `coverage/floor.txt` is no longer used. The 95% target was reached on 2026-05-17; floor is **95** as of that date (T-91 closed). A pre-push **CHANGELOG concision gate** (`ci/changelog_gate.sh`) runs alongside the coverage gate; both live under `make push-check`. A separate `make push-check-full` adds `test-integration` + `smoke-bundle` for pre-release checks (T-103). - **Decision:** The pre-push gate runs `flutter test --coverage --exclude-tags forkpty`, parses `coverage/lcov.info`, and hard-fails if total line coverage drops below a committed floor at `coverage/floor.txt`. The floor starts at the actual current coverage (≈35%, dragged down by `lib/src/terminal/`'s 0.4%) and only ever ratchets up. The end target is 95%; getting there is tracked as a campaign of deliberate floor bumps under one epic ticket. **No carve-outs** — code under `lib/` is owned regardless of file-header attribution, including the terminal emulator port. Branch coverage is not gated (Dart's lcov output models it weakly). Lint suppressions to dodge the gate are never acceptable. - **Rationale:** A flat 95% threshold today blocks every push; an informational coverage report rots into noise. The committed-floor ratchet makes "don't make it worse" the durable rule and turns the journey to 95% into explicit, reviewed bumps rather than a single overnight cliff. Excluding `forkpty`-tagged tests matches `ci/test.sh` (forkpty + flutter test runner are incompatible — see `test/pty/session_test.dart`). - **Cost:** Pre-push wall time grows by `flutter test --coverage` (currently ≈11 s on this tree). Acceptable within D-29's < 90 s budget; reassess if it slips. Floor bumps require an explicit edit to `coverage/floor.txt` in the same commit that adds tests — so contributors can't silently raise it. diff --git a/governance/questions/architecture.md b/governance/questions/architecture.md index dbdb0aaa..d1a5d89d 100644 --- a/governance/questions/architecture.md +++ b/governance/questions/architecture.md @@ -9,18 +9,21 @@ ticket persistence. - **Status:** Open - **Question:** The daemon's token auth is coarse (allow all / deny all). Do we need per-subsystem grants later (e.g. restrict `git push`), and if so, what's the model — capability tokens? An explicit grant table per client? Time-limited grants? - **Context:** Surfaced in the old ADR 0006 open-questions footer; deferred until Tier 1 is in real use. +- **Triage (2026-05-17):** Still open. Tier 1 has shipped but the IPC socket server itself is unimplemented (T-99). Re-evaluate once the socket lands and external CLI clients exist. - **Source:** ADR 0006 (migrated to [D-6](architecture.md)). ### Q-2: Back-pressure on event streams - **Status:** Open - **Question:** A subscriber that falls behind on `pane.output` (a firehose) needs a policy: drop oldest, block producer, coalesce, or kill subscriber. Which? - **Context:** The event bus is in-memory; back-pressure policy is undefined. Defer until Tier 1 is in real use and we have a real firehose to measure against. +- **Triage (2026-05-17):** Still open. PTY panes ship and produce real firehoses, but no subscriber has fallen behind in observed use. Re-evaluate when a multi-client IPC scenario (T-99) makes this measurable. - **Source:** ADR 0006 (migrated to [D-6](architecture.md)). ### Q-3: Event persistence + audit/undo - **Status:** Open - **Question:** Events are in-memory only in v1. If a future need (audit log, undo history) wants persistence, is it a property of the bus or a subsystem that subscribes and writes? - **Context:** ADR 0006 leaned "subsystem that subscribes and writes" but didn't commit. +- **Triage (2026-05-17):** Still open; no concrete trigger yet. Revisit when the first persistence requirement lands (likely Tier-6 audit/undo). - **Source:** ADR 0006 (migrated to [D-6](architecture.md)). ### Q-4: `.canvas` schema compatibility with Obsidian @@ -69,6 +72,7 @@ ticket persistence. - **Status:** Open - **Question:** The design handoff uses JetBrains Mono for all UI text (tab labels, file paths, status bar, sidebar labels), reserving Josefin Sans only for display/title text. Our current implementation uses Josefin Sans as the ambient UI face with JetBrains Mono only for code/terminal/diff surfaces. Which direction? - **Context:** The design's "mono everywhere" rationale: clide is an IDE for people who like grids. The current Josefin Sans rationale: visual distinction between chrome text and code text, warmer feel. Both are valid — this is a feel decision, not a technical one. +- **Triage (2026-05-17):** Still open. The Josefin-Sans-as-UI-face implementation has shipped and is the current default; the design's "mono everywhere" direction remains unrealised. Convert to a D-record when the design call is made. - **Source:** 2026-04-22 design handoff review. ### Q-26: Small screen layout (< 1000px)