Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4fa4ce1bac | ||
|
|
7d951a247f |
@@ -16,6 +16,20 @@ heading, and (b) bumping `pubspec.yaml` `version:` in the same commit.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [2.3.2] — 2026-06-11
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- **Ticket and decision sidebars reliably load on first open (real fix).** The
|
||||||
|
2.3.1 re-fetch-on-open helped only when a project is picked *after* the window
|
||||||
|
is up; with sticky-startup the project opens during boot, before the panes
|
||||||
|
mount, so they never saw the event. The underlying cause was a race: the boot
|
||||||
|
IPC-server swap (to the launch CWD) and the project-open swap (to the repo)
|
||||||
|
ran concurrently, and the late-finishing boot swap could clobber the repo
|
||||||
|
bind — leaving the daemon's pql/git/files pointed at the launch directory
|
||||||
|
(HOME) and the sidebars erroring on a stale/global pql.db. Swaps are now
|
||||||
|
serialized so the repo bind always wins. (T-352)
|
||||||
|
|
||||||
## [2.3.1] — 2026-06-10
|
## [2.3.1] — 2026-06-10
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ self:
|
|||||||
# Auto-synced from pubspec.yaml `version:` by `make gen-build-info`
|
# Auto-synced from pubspec.yaml `version:` by `make gen-build-info`
|
||||||
# (runs implicitly on every build/run/test). Don't hand-edit; bump
|
# (runs implicitly on every build/run/test). Don't hand-edit; bump
|
||||||
# pubspec instead.
|
# pubspec instead.
|
||||||
version: "2.3.1"
|
version: "2.3.2"
|
||||||
homepage: https://github.com/postmeridiem/clide
|
homepage: https://github.com/postmeridiem/clide
|
||||||
license: MIT
|
license: MIT
|
||||||
license_file: assets/LICENSE
|
license_file: assets/LICENSE
|
||||||
|
|||||||
+21
-1
@@ -116,7 +116,11 @@ Future<void> main() async {
|
|||||||
McpServer? mcpServer;
|
McpServer? mcpServer;
|
||||||
final ipcLog = Logger();
|
final ipcLog = Logger();
|
||||||
|
|
||||||
Future<void> swapIpcServer(DaemonDispatcher dispatcher, Directory workRoot) async {
|
// IPC-server swaps must run one-at-a-time — see the swapIpcServer wrapper
|
||||||
|
// below doSwapIpcServer for why. (T-352)
|
||||||
|
Future<void> swapChain = Future<void>.value();
|
||||||
|
|
||||||
|
Future<void> doSwapIpcServer(DaemonDispatcher dispatcher, Directory workRoot) async {
|
||||||
if (kIsWeb) return;
|
if (kIsWeb) return;
|
||||||
// Already serving this exact workspace? Reuse the live server.
|
// Already serving this exact workspace? Reuse the live server.
|
||||||
// The startup factory binds the launch CWD, then the project-open
|
// The startup factory binds the launch CWD, then the project-open
|
||||||
@@ -173,6 +177,22 @@ Future<void> main() async {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Serialize IPC-server swaps. The boot factory fires a swap to the launch
|
||||||
|
// CWD with unawaited(); the project-open flow then fires another to the
|
||||||
|
// real repo. Unserialized, the two interleave and the late-finishing boot
|
||||||
|
// swap can clobber the repo bind — reconnecting the daemon client to the
|
||||||
|
// launch-CWD (HOME) socket, so pql/git/files run against the wrong
|
||||||
|
// workspace. That surfaced as the ticket/decision sidebars failing on first
|
||||||
|
// load (stale/global pql.db) yet working after a manual refresh. Chaining
|
||||||
|
// every swap makes them apply in call order; the repo swap is issued last
|
||||||
|
// and therefore wins. (T-352)
|
||||||
|
Future<void> swapIpcServer(DaemonDispatcher dispatcher, Directory workRoot) {
|
||||||
|
final next = swapChain.then((_) => doSwapIpcServer(dispatcher, workRoot));
|
||||||
|
// A failed swap must not break the chain for the next one.
|
||||||
|
swapChain = next.catchError((Object _) {});
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
DaemonDispatcher buildDispatcher(
|
DaemonDispatcher buildDispatcher(
|
||||||
DaemonBus events,
|
DaemonBus events,
|
||||||
Toolchain tc,
|
Toolchain tc,
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ description: >-
|
|||||||
subsystem handlers (pane, files, editor, git, pql), and the
|
subsystem handlers (pane, files, editor, git, pql), and the
|
||||||
extension framework.
|
extension framework.
|
||||||
publish_to: none
|
publish_to: none
|
||||||
version: 2.3.1
|
version: 2.3.2
|
||||||
repository: https://github.com/postmeridiem/clide
|
repository: https://github.com/postmeridiem/clide
|
||||||
# Short user-facing tagline (the welcome subtitle, web meta
|
# Short user-facing tagline (the welcome subtitle, web meta
|
||||||
# description, etc.). Baked into lib/src/build_info.g.dart by
|
# description, etc.). Baked into lib/src/build_info.g.dart by
|
||||||
|
|||||||
Reference in New Issue
Block a user