Skip the startup update check when started for an agent (#3097)

* Skip the startup update check when started for an agent

An app started with --control or EFFECTCRAFT_CONTROL_PORT still checked
for updates at start, and the modal "newer version available" prompt
blocked agent runs until a person dismissed it. Agent launches already
skip crash recovery and the Home screen; now they skip the startup update
check too. Help > Check for Updates is unaffected (it goes through
updates_ui::check / check_requested, independent of the startup flag).

Documents what a control-port launch skips in docs/control-protocol.md and
the main.rs module doc, with a unit test for the startup decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Control protocol docs: a window-start failure still shows a blocking message box

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Valentin Klein
2026-11-06 17:18:52 +01:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 779df34e13
commit 0f94a1f983
2 changed files with 30 additions and 2 deletions
+7
View File
@@ -9,6 +9,13 @@ effectcraft --control 9877 # or EFFECTCRAFT_CONTROL_PORT=9877
The port must be a number from 1 to 65535, and `--control` overrides the variable. A bad port or an
unknown option prints an error and the app exits with status 1 before it opens a window.
An app started with a control port is meant to be driven by an agent, so a normal launch does not
wait for a person: the window opens without taking keyboard focus, and the app skips crash recovery,
the Home screen (unless `--home` is given) and the startup update check. Help ▸ Check for Updates
still works. One exception: when the window cannot start at all, the app writes the error to
standard error and the session log and then shows it in a message box, and it exits only after
someone closes that box.
- **Transport:** TCP on `127.0.0.1` only, one JSON object per line in each direction. Connections are
persistent; requests on one connection are answered in order.
- **Request:** `{"id": 1, "method": "engine.execute", "params": {...}}` (`id` is echoed back, `params`