Commit 2e1bcb8
authored
fix(desktop): ask before replacing a different CLI runtime (#4508)
* fix(desktop): ask before replacing a different CLI runtime
Opening the App while the default CLI runtime was a different revision
silently installed the App's bundled snapshot, which could move a
separately updated CLI backwards.
A start now classifies the installed runtime first:
- no installed runtime: install the bundled snapshot, so a fresh machine
still bootstraps in one launch;
- the bundled snapshot already installed: nothing to do;
- a different runtime installed: publish `runtime_pairing_required` with
both revisions and stop before services, instead of replacing it.
The boot surface renders that decision on the first screen - "update App
and runtime" checks this App's channel and continues into the verified
install, "use this App's runtime" installs the bundled snapshot and
reconnects the same window - and no longer escalates a decision into the
startup error projection. An approved update journal still finishes its
installation without asking again, and an explicit `LOOPX_BIN` override is
still never replaced automatically.
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
* fix(doctor): name the App/runtime pairing choice in desktop advice
`loopx doctor` told operators that a mismatched App "may replace the CLI
runtime" without saying what to do about it. The reported advice now names
the decision the App asks for, and the contract test asserts that wording
instead of a promise of silent replacement.
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
* docs(desktop): document the App/runtime pairing choice
Record that automatic runtime preparation now applies only when nothing is
installed, that a different installed runtime is the operator's decision,
and what each choice does to the two layers. The LoopX project skill keeps
its warning for older builds while naming the current behavior.
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
* test(desktop): cover the runtime pairing decision surface
The browser smoke drives the boot surface through the decision: both
choices stay available, nothing installs before one is chosen, the native
boot-failure callback cannot overwrite it, escalation never relabels it as
an error, the layout holds at phone width, and "update" checks then installs
while "use this App's runtime" issues the align action and retires the
chooser once services connect. The unit test keeps the pairing evidence
bounded and free of private detail.
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
* chore(dashboard): rebuild the packaged workspace for the pairing phase
The workspace update panel carries the new App phase, so the packaged chat
assets must match a clean source build. Adds the new generation, keeps the
previous one in the retention manifest, and repoints index.html.
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
---------
Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
Co-authored-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>1 parent 4aaad69 commit 2e1bcb8
15 files changed
Lines changed: 768 additions & 94 deletions
File tree
- apps
- desktop/loopx-control-plane
- src-tauri/src
- static
- presentation/dashboard/src/features/personal-workspace
- examples
- loopx
- web/chat
- assets
- skills/loopx-project
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
53 | 60 | | |
54 | 61 | | |
55 | 62 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
30 | 36 | | |
31 | 37 | | |
32 | 38 | | |
| |||
219 | 225 | | |
220 | 226 | | |
221 | 227 | | |
| 228 | + | |
222 | 229 | | |
223 | 230 | | |
224 | 231 | | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
225 | 238 | | |
226 | 239 | | |
227 | 240 | | |
| |||
231 | 244 | | |
232 | 245 | | |
233 | 246 | | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
234 | 253 | | |
235 | 254 | | |
236 | 255 | | |
| |||
0 commit comments