From 1fb4786f182ee5d9729fcfa52457b016bffa8c2e Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 6 May 2026 23:51:46 +0200 Subject: [PATCH] sweep remaining analyze infos to zero MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clears the 19 misc lint hits left after the test_app print sweep + libc.dart suppression. By rule: - `withOpacity(α)` → `withValues(alpha: α)` (deprecated_member_use) in `painter.dart:187` and `terminal_view.dart:318`. - `Pointer.elementAt(n)` → `Pointer + n` (deprecated_member_use) in `native_pty.dart:306` and `session.dart:187`. - Brace single-statement for/if bodies in `native_pty.dart` (×3) and `decisions_view.dart` (curly_braces_in_flow_control_ structures). - `IsolateClient` and `InProcessClient` constructors switched to `super.log` / `super.events` parameters (use_super_parameters); associated unused imports of `kernel/src/log.dart` and `kernel/src/events/bus.dart` removed in the same files. - `InProcessClient._dispatcher` field + getter/setter pair folded into a single mutable public `dispatcher` field (unnecessary_getters_setters). - `_buildDispatcher` local in `lib/main.dart` renamed to `buildDispatcher` (no_leading_underscores_for_local_identifiers). - `_onTapDown(_)` in `terminal_view.dart` typed as `TapDownDetails _` (strict_top_level_inference). - `operator []=(...)` in `circular_buffer.dart` given an explicit `void` return type (strict_top_level_inference). - `CustomKeyboardListener` and `TerminalGestureDetector` callsites reordered so `child:` lands last (sort_child_properties_last). - `CustomTextEdit` constructor declared `const` (prefer_const_constructors_in_immutables). - `LinkedHashMap()` in `paragraph_cache.dart` collapsed to a `{}` literal (prefer_collection_literals); the now-unused `dart:collection` import dropped. Project analyze: 19 → 0 issues. `make test` stays green; coverage unchanged at 52.72%. Co-Authored-By: Claude --- .pql/pql-plan.json | 214 +++++++++--------- lib/builtin/claude/src/claude_pane.dart | 4 +- lib/builtin/decisions/src/decisions_view.dart | 3 +- lib/kernel/src/ipc/in_process.dart | 18 +- lib/kernel/src/ipc/isolate_client.dart | 7 +- lib/main.dart | 6 +- lib/src/pty/native_pty.dart | 14 +- lib/src/pty/session.dart | 2 +- lib/src/terminal/src/terminal_view.dart | 6 +- lib/src/terminal/src/ui/custom_text_edit.dart | 2 +- .../src/ui/gesture/gesture_handler.dart | 2 +- lib/src/terminal/src/ui/painter.dart | 2 +- lib/src/terminal/src/ui/paragraph_cache.dart | 3 +- .../terminal/src/utils/circular_buffer.dart | 2 +- 14 files changed, 141 insertions(+), 144 deletions(-) diff --git a/.pql/pql-plan.json b/.pql/pql-plan.json index c56efac1..8b1f8394 100644 --- a/.pql/pql-plan.json +++ b/.pql/pql-plan.json @@ -1,5 +1,5 @@ { - "exported_at": "2026-05-06T21:46:36Z", + "exported_at": "2026-05-06T21:51:46Z", "decisions": [ { "id": "D-1", @@ -9,7 +9,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-3", @@ -19,7 +19,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-4", @@ -29,7 +29,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-5", @@ -39,7 +39,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-6", @@ -49,7 +49,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-7", @@ -59,7 +59,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-8", @@ -69,7 +69,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-9", @@ -79,7 +79,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-10", @@ -89,7 +89,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-11", @@ -99,7 +99,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-12", @@ -109,7 +109,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-13", @@ -119,7 +119,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-14", @@ -129,7 +129,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-15", @@ -139,7 +139,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-16", @@ -149,7 +149,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-17", @@ -159,7 +159,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-18", @@ -169,7 +169,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-19", @@ -179,7 +179,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-20", @@ -189,7 +189,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/accessibility.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-21", @@ -199,7 +199,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/accessibility.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-22", @@ -209,7 +209,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/accessibility.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-23", @@ -219,7 +219,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-24", @@ -229,7 +229,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-25", @@ -239,7 +239,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-26", @@ -249,7 +249,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-27", @@ -259,7 +259,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-28", @@ -269,7 +269,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-29", @@ -279,7 +279,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-30", @@ -289,7 +289,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-31", @@ -299,7 +299,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-32", @@ -309,7 +309,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-33", @@ -319,7 +319,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-34", @@ -329,7 +329,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-35", @@ -339,7 +339,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-36", @@ -349,7 +349,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-37", @@ -359,7 +359,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-38", @@ -369,7 +369,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-39", @@ -379,7 +379,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-40", @@ -389,7 +389,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-41", @@ -399,7 +399,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-42", @@ -409,7 +409,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-43", @@ -419,7 +419,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-44", @@ -429,7 +429,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-45", @@ -439,7 +439,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-46", @@ -449,7 +449,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-47", @@ -459,7 +459,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-48", @@ -469,7 +469,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-49", @@ -479,7 +479,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-50", @@ -489,7 +489,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-51", @@ -499,7 +499,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-52", @@ -509,7 +509,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-53", @@ -519,7 +519,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-54", @@ -529,7 +529,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-55", @@ -539,7 +539,7 @@ "status": "active", "date": "2026-04-23", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-56", @@ -549,7 +549,7 @@ "status": "active", "date": "2026-04-23", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-57", @@ -559,7 +559,7 @@ "status": "active", "date": "2026-04-23", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-58", @@ -569,7 +569,7 @@ "status": "active", "date": "2026-04-23", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-59", @@ -579,7 +579,7 @@ "status": "active", "date": "2026-04-25", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-60", @@ -589,7 +589,7 @@ "status": "active", "date": "2026-04-26", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-61", @@ -599,7 +599,7 @@ "status": "active", "date": "2026-04-26", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-62", @@ -609,7 +609,7 @@ "status": "active", "date": "2026-04-26", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-63", @@ -619,7 +619,7 @@ "status": "active", "date": "2026-04-26", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-64", @@ -629,7 +629,7 @@ "status": "active", "date": "2026-05-03", "file_path": "decisions/architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-65", @@ -639,7 +639,7 @@ "status": "active", "date": "2026-04-26", "file_path": "decisions/tooling.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "D-66", @@ -649,7 +649,7 @@ "status": "active", "date": "2026-05-06", "file_path": "decisions/testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-1", @@ -658,7 +658,7 @@ "title": "Authorisation granularity on the IPC socket", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-2", @@ -667,7 +667,7 @@ "title": "Back-pressure on event streams", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-3", @@ -676,7 +676,7 @@ "title": "Event persistence + audit/undo", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-4", @@ -685,7 +685,7 @@ "title": "`.canvas` schema compatibility with Obsidian", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-5", @@ -694,7 +694,7 @@ "title": "IPC wire-format stability + `schema_version:`", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-6", @@ -703,7 +703,7 @@ "title": "Window chrome — native frame vs frameless custom", "status": "resolved", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-7", @@ -712,7 +712,7 @@ "title": "macOS app bundle signing / notarisation", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-8", @@ -721,7 +721,7 @@ "title": "Extension API shape — widgets, subcommands, both?", "status": "open", "file_path": "decisions/questions-extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-9", @@ -730,7 +730,7 @@ "title": "Lua runtime vendoring", "status": "open", "file_path": "decisions/questions-extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-10", @@ -739,7 +739,7 @@ "title": "Extension manifest `schema_version:`", "status": "open", "file_path": "decisions/questions-extensions.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-11", @@ -748,7 +748,7 @@ "title": "Coverage gates — hard thresholds vs soft reporting", "status": "open", "file_path": "decisions/questions-testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-12", @@ -757,7 +757,7 @@ "title": "Screen-reader automation (axe-core via Playwright)", "status": "open", "file_path": "decisions/questions-testing.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-13", @@ -766,7 +766,7 @@ "title": "Web production-mode a11y", "status": "open", "file_path": "decisions/questions-accessibility.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-14", @@ -775,7 +775,7 @@ "title": "i18n plurals / gender / date-format tooling", "status": "open", "file_path": "decisions/questions-accessibility.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-15", @@ -784,7 +784,7 @@ "title": "Editor tab — full LSP vs tree-sitter-only highlight", "status": "open", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-16", @@ -793,7 +793,7 @@ "title": "`tree-sitter-dart` grammar maintenance", "status": "open", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-17", @@ -802,7 +802,7 @@ "title": "Icon set growth", "status": "open", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-18", @@ -811,7 +811,7 @@ "title": "Theme hot-reload in release builds", "status": "open", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-19", @@ -820,7 +820,7 @@ "title": "(withdrawn)", "status": "resolved", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-20", @@ -829,7 +829,7 @@ "title": "Kernel DB service — namespaced SQL access?", "status": "open", "file_path": "decisions/questions-process.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-21", @@ -838,7 +838,7 @@ "title": "Pql absorbs planning vs keeps separate", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-22", @@ -847,7 +847,7 @@ "title": "Ticket persistence strategy", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-23", @@ -856,7 +856,7 @@ "title": "SSH-remote development — run clide against a remote workspace", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-25", @@ -865,7 +865,7 @@ "title": "Body text face — mono everywhere vs Josefin Sans UI + mono code", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-26", @@ -874,7 +874,7 @@ "title": "Small screen layout (\u003c 1000px)", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-27", @@ -883,7 +883,7 @@ "title": "Two-editor split", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-28", @@ -892,7 +892,7 @@ "title": "Terminal strip scope — shell only or logs/errors/tests", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-29", @@ -901,7 +901,7 @@ "title": "Branch picker location", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-30", @@ -910,7 +910,7 @@ "title": "Focus behavior when editor is dirty and viewer is peeked", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "Q-31", @@ -919,7 +919,7 @@ "title": "XWayland fallback for frameless — proper Wayland protocol needed", "status": "open", "file_path": "decisions/questions-architecture.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-2", @@ -929,7 +929,7 @@ "status": "active", "date": "2026-04-20", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-3", @@ -939,7 +939,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-4", @@ -949,7 +949,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-5", @@ -959,7 +959,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-6", @@ -969,7 +969,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-7", @@ -979,7 +979,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-8", @@ -989,7 +989,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-9", @@ -999,7 +999,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-10", @@ -1009,7 +1009,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-11", @@ -1019,7 +1019,7 @@ "status": "active", "date": "2026-04-21", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" }, { "id": "R-12", @@ -1029,7 +1029,7 @@ "status": "active", "date": "2026-04-22", "file_path": "decisions/rejected.md", - "synced_at": "2026-05-06 21:45:50" + "synced_at": "2026-05-06 21:51:08" } ], "decision_refs": [ diff --git a/lib/builtin/claude/src/claude_pane.dart b/lib/builtin/claude/src/claude_pane.dart index e01692aa..c9f61f44 100644 --- a/lib/builtin/claude/src/claude_pane.dart +++ b/lib/builtin/claude/src/claude_pane.dart @@ -214,9 +214,7 @@ class _ClaudePaneState extends State { final b64 = e.data['bytes_b64']; if (b64 is String) { _outputBuf.write(utf8.decode(base64Decode(b64), allowMalformed: true)); - if (_flushTimer == null) { - _flushTimer = Timer(Duration.zero, _flushOutput); - } + _flushTimer ??= Timer(Duration.zero, _flushOutput); } case 'pane.exit': setState(() => _statusLine = widget.isPrimary ? 'session exited — restart clide to retry' : 'session exited'); diff --git a/lib/builtin/decisions/src/decisions_view.dart b/lib/builtin/decisions/src/decisions_view.dart index 8ef1b76f..e40e4854 100644 --- a/lib/builtin/decisions/src/decisions_view.dart +++ b/lib/builtin/decisions/src/decisions_view.dart @@ -123,8 +123,9 @@ class _DecisionsViewState extends State { final tokens = ClideTheme.of(context).surface; if (_loading) return const Center(child: ClideText('Loading decisions...', muted: true)); if (_error != null) return Padding(padding: const EdgeInsets.all(12), child: ClideText(_error!, muted: true)); - if (_decisions.isEmpty) + if (_decisions.isEmpty) { return const Padding(padding: EdgeInsets.all(12), child: ClideText('No decisions found.\nRun `pql decisions sync` to index.', muted: true)); + } final lf = _filter.toLowerCase(); final hasFilter = lf.isNotEmpty; diff --git a/lib/kernel/src/ipc/in_process.dart b/lib/kernel/src/ipc/in_process.dart index 025c1a38..b263d1a9 100644 --- a/lib/kernel/src/ipc/in_process.dart +++ b/lib/kernel/src/ipc/in_process.dart @@ -1,20 +1,14 @@ import 'package:clide/clide.dart'; import 'package:clide/kernel/src/ipc/client.dart'; -import 'package:clide/kernel/src/events/bus.dart'; -import 'package:clide/kernel/src/log.dart'; class InProcessClient extends DaemonClient { InProcessClient({ - required Logger log, - required DaemonBus events, - required DaemonDispatcher dispatcher, - }) : _dispatcher = dispatcher, - super(socketPath: '', log: log, events: events); + required super.log, + required super.events, + required this.dispatcher, + }) : super(socketPath: ''); - DaemonDispatcher _dispatcher; - - DaemonDispatcher get dispatcher => _dispatcher; - set dispatcher(DaemonDispatcher d) => _dispatcher = d; + DaemonDispatcher dispatcher; int _nextReqId = 0; @override @@ -30,6 +24,6 @@ class InProcessClient extends DaemonClient { Future request(String cmd, {Map args = const {}}) { final id = '${_nextReqId++}'; final req = IpcRequest(id: id, cmd: cmd, args: args); - return _dispatcher.dispatch(req); + return dispatcher.dispatch(req); } } diff --git a/lib/kernel/src/ipc/isolate_client.dart b/lib/kernel/src/ipc/isolate_client.dart index 582d8af7..e9035f33 100644 --- a/lib/kernel/src/ipc/isolate_client.dart +++ b/lib/kernel/src/ipc/isolate_client.dart @@ -13,16 +13,15 @@ import 'package:clide/clide.dart'; import 'package:clide/kernel/src/events/bus.dart'; import 'package:clide/kernel/src/events/types.dart'; import 'package:clide/kernel/src/ipc/client.dart'; -import 'package:clide/kernel/src/log.dart'; class IsolateClient extends DaemonClient { IsolateClient({ - required Logger log, - required DaemonBus events, + required super.log, + required super.events, required SendPort backendPort, }) : _backendPort = backendPort, _events = events, - super(socketPath: '', log: log, events: events); + super(socketPath: ''); final SendPort _backendPort; final DaemonBus _events; diff --git a/lib/main.dart b/lib/main.dart index 14cf249c..2afdba99 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -73,7 +73,7 @@ Future main() async { InProcessClient? ipcClient; DaemonBus? daemonBus; - DaemonDispatcher _buildDispatcher(DaemonBus events, Toolchain tc, Directory workRoot) { + DaemonDispatcher buildDispatcher(DaemonBus events, Toolchain tc, Directory workRoot) { final dispatcher = DaemonDispatcher(); final eventSink = _BusEventSink(events); final paneRegistry = PaneRegistry(events: eventSink); @@ -101,7 +101,7 @@ Future main() async { : (log, events) { daemonBus = events; final workRoot = FilesService.atCwd(events: _BusEventSink(events)).root; - final dispatcher = _buildDispatcher(events, toolchain, workRoot); + final dispatcher = buildDispatcher(events, toolchain, workRoot); ipcClient = InProcessClient(log: log, events: events, dispatcher: dispatcher); return ipcClient!; }, @@ -109,7 +109,7 @@ Future main() async { ? null : (path) async { if (ipcClient == null || daemonBus == null) return; - ipcClient!.dispatcher = _buildDispatcher(daemonBus!, toolchain, Directory(path)); + ipcClient!.dispatcher = buildDispatcher(daemonBus!, toolchain, Directory(path)); }, ); diff --git a/lib/src/pty/native_pty.dart b/lib/src/pty/native_pty.dart index 8c3a1539..221c6ac3 100644 --- a/lib/src/pty/native_pty.dart +++ b/lib/src/pty/native_pty.dart @@ -216,9 +216,13 @@ class NativePty { ffi.Pointer ws, ) { malloc.free(shell); - for (var i = 0; i < argc; i++) malloc.free(argv[i]); + for (var i = 0; i < argc; i++) { + malloc.free(argv[i]); + } malloc.free(argv); - for (var i = 0; i < envc; i++) malloc.free(envp[i]); + for (var i = 0; i < envc; i++) { + malloc.free(envp[i]); + } malloc.free(envp); malloc.free(wd); calloc.free(fdOut); @@ -298,12 +302,14 @@ class NativePty { if (_dead || bytes.isEmpty) return 0; final buf = malloc(bytes.length); try { - for (var i = 0; i < bytes.length; i++) buf[i] = bytes[i]; + for (var i = 0; i < bytes.length; i++) { + buf[i] = bytes[i]; + } var written = 0; while (written < bytes.length) { final n = _nativeWrite( _fd, - buf.elementAt(written).cast(), + (buf + written).cast(), bytes.length - written, ); if (n < 0) { diff --git a/lib/src/pty/session.dart b/lib/src/pty/session.dart index cef702d4..2fb7b750 100644 --- a/lib/src/pty/session.dart +++ b/lib/src/pty/session.dart @@ -184,7 +184,7 @@ class PtySession { while (written < bytes.length) { final n = libc.write( _masterFd, - buf.elementAt(written), + buf + written, bytes.length - written, ); if (n < 0) { diff --git a/lib/src/terminal/src/terminal_view.dart b/lib/src/terminal/src/terminal_view.dart index c776039a..de323a65 100644 --- a/lib/src/terminal/src/terminal_view.dart +++ b/lib/src/terminal/src/terminal_view.dart @@ -278,12 +278,12 @@ class TerminalViewState extends State { } else if (!widget.readOnly) { // Only listen for key input from a hardware keyboard. child = CustomKeyboardListener( - child: child, focusNode: _focusNode, autofocus: widget.autofocus, onInsert: _onInsert, onComposing: _onComposing, onKeyEvent: _handleKeyEvent, + child: child, ); } @@ -315,7 +315,7 @@ class TerminalViewState extends State { ); child = Container( - color: widget.theme.background.withOpacity(widget.backgroundOpacity), + color: widget.theme.background.withValues(alpha: widget.backgroundOpacity), padding: widget.padding, child: child, ); @@ -347,7 +347,7 @@ class TerminalViewState extends State { widget.onTapUp?.call(details, offset); } - void _onTapDown(_) { + void _onTapDown(TapDownDetails _) { if (_controller.selection != null) { _controller.clearSelection(); } else { diff --git a/lib/src/terminal/src/ui/custom_text_edit.dart b/lib/src/terminal/src/ui/custom_text_edit.dart index d781ec5e..2dad0b06 100644 --- a/lib/src/terminal/src/ui/custom_text_edit.dart +++ b/lib/src/terminal/src/ui/custom_text_edit.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class CustomTextEdit extends StatefulWidget { - CustomTextEdit({ + const CustomTextEdit({ super.key, required this.child, required this.onInsert, diff --git a/lib/src/terminal/src/ui/gesture/gesture_handler.dart b/lib/src/terminal/src/ui/gesture/gesture_handler.dart index 9814a43e..892cd0a4 100644 --- a/lib/src/terminal/src/ui/gesture/gesture_handler.dart +++ b/lib/src/terminal/src/ui/gesture/gesture_handler.dart @@ -64,7 +64,6 @@ class _TerminalGestureHandlerState extends State { @override Widget build(BuildContext context) { return TerminalGestureDetector( - child: widget.child, onTapUp: widget.onTapUp, onSingleTapUp: onSingleTapUp, onTapDown: onTapDown, @@ -78,6 +77,7 @@ class _TerminalGestureHandlerState extends State { onDragStart: onDragStart, onDragUpdate: onDragUpdate, onDoubleTapDown: onDoubleTapDown, + child: widget.child, ); } diff --git a/lib/src/terminal/src/ui/painter.dart b/lib/src/terminal/src/ui/painter.dart index a4376257..b4a965e7 100644 --- a/lib/src/terminal/src/ui/painter.dart +++ b/lib/src/terminal/src/ui/painter.dart @@ -184,7 +184,7 @@ class TerminalPainter { var color = cellFlags & CellFlags.inverse == 0 ? resolveForegroundColor(cellData.foreground) : resolveBackgroundColor(cellData.background); if (cellData.flags & CellFlags.faint != 0) { - color = color.withOpacity(0.5); + color = color.withValues(alpha: 0.5); } final style = _textStyle.toTextStyle( diff --git a/lib/src/terminal/src/ui/paragraph_cache.dart b/lib/src/terminal/src/ui/paragraph_cache.dart index 0fb5bfbb..a19c2eac 100644 --- a/lib/src/terminal/src/ui/paragraph_cache.dart +++ b/lib/src/terminal/src/ui/paragraph_cache.dart @@ -1,6 +1,5 @@ // Based on xterm.dart v4.0.0 by xuty (MIT). See LICENSE in this directory. -import 'dart:collection'; import 'dart:ui'; import 'package:flutter/widgets.dart'; @@ -8,7 +7,7 @@ import 'package:flutter/widgets.dart'; class _LruCache { _LruCache(this._maxSize); final int _maxSize; - final _map = LinkedHashMap(); + final _map = {}; V? operator [](K key) { final value = _map.remove(key); diff --git a/lib/src/terminal/src/utils/circular_buffer.dart b/lib/src/terminal/src/utils/circular_buffer.dart index 5175f1ef..a561545d 100644 --- a/lib/src/terminal/src/utils/circular_buffer.dart +++ b/lib/src/terminal/src/utils/circular_buffer.dart @@ -108,7 +108,7 @@ class IndexAwareCircularBuffer { /// Sets the element at the specified [index] in the list. Throws if the /// index is out of bounds. - operator []=(int index, T value) { + void operator []=(int index, T value) { RangeError.checkValueInInterval(index, 0, length - 1, 'index'); _adoptChild(index, value); }