0.5.211, all three desktops (macOS / Windows / Linux), run-without-AI login leg: after the hand-off the client re-points its API client to :4243 but checkFirstRunStatus keeps polling :8080 — 61/61 attempts on each — and parks on "Backend unreachable. Please restart the app."
Gate run: https://github.com/CIRISAI/CIRISAgent/actions/runs/34249106309 (CIRISAgent release/2.11.0 @ a33151b20, ciris-client 0.5.211, ciris-server 0.5.203). The no-AI setup pass is 7/7 on all three (announce 3/3 against the exec'd node on :4243); the login pass then finds screen='Startup' elements=2: [btn_debug_logs_toggle, btn_startup_retry] on every desktop. The with-AI legs are green with live answers, so this is specific to the hand-off window, and it is common code (identical lines on Windows and Linux), so Android/iOS will hit it too once their artifacts land.
#46 and #47 are confirmed fixed in this run: the hold is released ("Session already open — the post-setup hold is moot, releasing it") and the roster wait is skipped ("backend is the node on :4243 — no agent service roster to wait for"). This is the one caller #43's b9099f6 did not move.
macOS per-launch client log (ciris_desktop_setup.20260908T161048.log), verbatim, line-numbered:
242: [INFO][CIRISApiClient] [completeSetup] Setup complete: success=true, message=Setup completed successfully. Starting agent processor...
245: [INFO][CIRISApiClient] [setLocalNodeUrl] local node is http://127.0.0.1:4243 (was http://127.0.0.1:8080)
246: [INFO][CIRISApiClient] [updateBaseUrl] Updating baseUrl from http://127.0.0.1:8080 to http://127.0.0.1:4243
247: [INFO][CIRISApiClient] [recreateApiInstances] Recreating SDK API instances with baseUrl=http://127.0.0.1:4243
249: [CIRISApp] [INFO][BACKEND] after setup the backend is :4243
271: [INFO][StartupViewModel] [STARTUP][WAIT][8865ms] backend is the node on :4243 — no agent service roster to wait for
317: [CIRISApp] [INFO] Session already open — the post-setup hold is moot, releasing it
320: [INFO][StartupViewModel] [STARTUP][STATUS] Checking setup status...
323: [ERROR][CIRISApiClient] [getSetupStatus] Exception: ConnectException: Connection refused
338: [checkFirstRunStatus] [INFO] Connection error, retrying in 500ms... (ConnectException)
339: [INFO][StartupViewModel] [STARTUP][STATUS] Waiting for backend... (attempt 1)
340: [checkFirstRunStatus] [INFO] Attempt 2/61: Checking setup status at http://127.0.0.1:8080
397: [backend] backend down: BudgetExpired(budgetMs=5000)
398: [backend] reviving, attempt 1/5
399: [PythonRuntime.desktop] startServer() called, checking for server at http://127.0.0.1:4243
401: [PythonRuntime.desktop] Health check attempt 0: true
403: [backend] wait opened (revive requested), budget=90000ms
1490: [checkFirstRunStatus] [INFO] Attempt 61/61: Checking setup status at http://127.0.0.1:8080
1511: [CIRISApp] [ERROR] Backend unreachable, cannot determine setup status
1512: [ERROR][StartupViewModel] [STARTUP][ERROR] Error detected: Backend unreachable. Please restart the app.
1513: [INFO][StartupViewModel] [STARTUP][PHASE] READY -> ERROR (ERROR)
Every one of the 61 checkFirstRunStatus attempts after line 249 targets http://127.0.0.1:8080; none targets :4243. Meanwhile the client's own reviver (lines 399/401) checks :4243 and gets Health check attempt 0: true — the node is up and healthy the whole time; the agent exec'd into it at 16:11:00.657 and :8080 never comes back by design (desktop hand-off = exec, CIRISAgent e115d5546).
Windows (ciris_desktop_setup.20260908T161022.log), same shape:
249: [CIRISApp] [INFO][BACKEND] after setup the backend is :4243
317: [CIRISApp] [INFO] Session already open � the post-setup hold is moot, releasing it
340: [checkFirstRunStatus] [INFO] Attempt 2/61: Checking setup status at http://127.0.0.1:8080
531: [backend] reviving, attempt 1/5
532: [PythonRuntime.desktop] startServer() called, checking for server at http://127.0.0.1:4243
1490: [checkFirstRunStatus] [INFO] Attempt 61/61: Checking setup status at http://127.0.0.1:8080
1511: [CIRISApp] [ERROR] Backend unreachable, cannot determine setup status
1614: [PythonRuntime.desktop] startServer() called, checking for server at http://127.0.0.1:4243
Linux (ciris_desktop_setup.20260908T160937.log): 61/61 at :8080 as well; gate verdict linux run-without-AI login failed — Interact unreachable against a node-only backend.
Ask: StartupViewModel.checkFirstRunStatus / CIRISApiClient.getSetupStatus should follow ActiveBackend like the rest of the client now does — and when the backend is the node there is no /v1/setup/status to poll (that is an agent route): the node answering /v1/identity after a recorded run-without-AI hand-off is "setup complete", the same way you already short-circuit the service roster. Expected on our side after the fix: the three desktop no-AI login/reset legs clear; Android reset may still show CIRISServer#563.
Screenshot: shots/macos-login-noai.png in the run's live-qa-macos-ios artifact ("ERROR — Backend unreachable. Please restart the app." with the retry button).
0.5.211, all three desktops (macOS / Windows / Linux), run-without-AI login leg: after the hand-off the client re-points its API client to :4243 but
checkFirstRunStatuskeeps polling:8080— 61/61 attempts on each — and parks on "Backend unreachable. Please restart the app."Gate run: https://github.com/CIRISAI/CIRISAgent/actions/runs/34249106309 (CIRISAgent
release/2.11.0@ a33151b20, ciris-client 0.5.211, ciris-server 0.5.203). The no-AI setup pass is 7/7 on all three (announce 3/3 against the exec'd node on :4243); the login pass then findsscreen='Startup' elements=2: [btn_debug_logs_toggle, btn_startup_retry]on every desktop. The with-AI legs are green with live answers, so this is specific to the hand-off window, and it is common code (identical lines on Windows and Linux), so Android/iOS will hit it too once their artifacts land.#46 and #47 are confirmed fixed in this run: the hold is released ("Session already open — the post-setup hold is moot, releasing it") and the roster wait is skipped ("backend is the node on :4243 — no agent service roster to wait for"). This is the one caller #43's
b9099f6did not move.macOS per-launch client log (
ciris_desktop_setup.20260908T161048.log), verbatim, line-numbered:Every one of the 61
checkFirstRunStatusattempts after line 249 targetshttp://127.0.0.1:8080; none targets :4243. Meanwhile the client's own reviver (lines 399/401) checks:4243and getsHealth check attempt 0: true— the node is up and healthy the whole time; the agent exec'd into it at 16:11:00.657 and :8080 never comes back by design (desktop hand-off = exec, CIRISAgent e115d5546).Windows (
ciris_desktop_setup.20260908T161022.log), same shape:Linux (
ciris_desktop_setup.20260908T160937.log): 61/61 at:8080as well; gate verdictlinux run-without-AI login failed — Interact unreachable against a node-only backend.Ask:
StartupViewModel.checkFirstRunStatus/CIRISApiClient.getSetupStatusshould followActiveBackendlike the rest of the client now does — and when the backend is the node there is no/v1/setup/statusto poll (that is an agent route): the node answering/v1/identityafter a recorded run-without-AI hand-off is "setup complete", the same way you already short-circuit the service roster. Expected on our side after the fix: the three desktop no-AI login/reset legs clear; Android reset may still show CIRISServer#563.Screenshot:
shots/macos-login-noai.pngin the run'slive-qa-macos-iosartifact ("ERROR — Backend unreachable. Please restart the app." with the retry button).