Skip to content

CI and route fixes: device tools on the Messages route, ACP follow-up race, day-dividers timing, apt mirror fallback - #880

Merged
Dkm0315 merged 2 commits into
mainfrom
fix/ci-route-fixes
Nov 15, 2026
Merged

Dkm0315 merged 2 commits into
mainfrom
fix/ci-route-fixes

Conversation

@Dkm0315

@Dkm0315 Dkm0315 commented Nov 15, 2026

Copy link
Copy Markdown
Contributor

CI and route fixes for four issues.

What the user can now do

  • With "Let agents use devices" on, a Full access Claude chat on a router runs over the router's Messages API again. Before, the device tool server kept every such turn on the Codex client. The Messages route drops the device server and its note, as it already did for the browser, canvas, office and delegation servers. The Claude Code route keeps the device tools.
  • CI on Linux no longer fails when one apt mirror can't find xvfb, xauth or desktop-file-utils, or stalls. scripts/ci-apt-install.sh points the Ubuntu sources at kernel.org, then Azure, then Ubuntu's archive, and makes two passes over the list with a time limit on each attempt. The Linux build job and the Ubuntu 24.04 container job both use it.
  • Two flaky tests are now reliable:
    • acp-route-160: follow-ups wait for the previous turn to settle.
    • day-dividers: the test counts timestamp parses instead of timing them.

Spec cases

  • MUS-SPEC-03-866A (new): device tools don't move a Claude turn off the Messages API.
  • MUS-SPEC-03-866B (new): Claude Code on a router keeps the device tools. This is a guard; it also passes before the change.
  • MUS-SPEC-20-770A (new): day dividers don't re-parse timestamps.
  • MUS-SPEC-22-876A and 22-876B (new): the apt step falls back across mirrors, and both Linux jobs use it.
  • MUS-SPEC-03-160D and 160E: the Environment field now records the 150 ms end delay and the settle-before-send rule.

Red, at fe91b85 (node --experimental-transform-types --import ./tests/pin-device-platform.mjs --test --test-concurrency=1 tests/<file>)

  • claude-messages-lane: exit 1, 7 passed and 1 failed. The 866A turn went to the Codex client.
  • acp-route-160: exit 1, 8 passed and 2 failed, both "Chat is already running; stop it first". The fake agent now answers 150 ms after its last words, which makes the CI race deterministic.
  • ci-apt-install: exit 1, 0 passed and 2 failed (there was no script yet).
  • day-dividers: this was a flake, so there was no red on main. As a mutation check, I disabled the parse cache in dayDividers.ts; the test then failed with 3 passed and 1 failed.

Green, at a4f0209 (same command)

  • claude-messages-lane: 8 passed, 0 failed. It also passes with MUSTER_DEVICE_MCP_LAUNCHER set in the environment, because the harness now sets or clears every launcher.
  • router-claude-code-730: 5 passed, 0 failed.
  • acp-route-160: 10 passed, 0 failed.
  • day-dividers: 4 passed, 0 failed.
  • ci-apt-install: 2 passed, 0 failed.
  • delegation-44 and office-skills-772: 12 passed each.
  • resource-errors and device-noun: 4 passed each.
  • check-spec: 812 cases OK.
  • check-test-coverage: no orphan files.
  • npm run typecheck: exit 0.

Not verified

  • The apt script hasn't run against real mirrors locally. It ran under bash 3.2 on macOS with a stand-in apt-get. This PR's Linux jobs are the end-to-end check.
  • computer-mcp needs a built dist, so it wasn't run locally. CI builds and runs it.
  • Locally, acp-route-160 failed 3 tests on a clean checkout because the safe-write helper wasn't built. npm test builds it in pretest, so this isn't a bug.

Fixes #866
Fixes #877
Fixes #770
Fixes #876

- #866: a Claude turn on the Messages lane with device tools on (red: goes to the Codex client); guard that Claude Code keeps the device server; lane harnesses set or clear every tool launcher.
- #877: the fake ACP agent answers 150 ms after its last words, which makes the follow-up race in 160D/160E deterministic (red: Chat is already running).
- #770: count timestamp parses instead of timing dividerRows; a 5 ms average stays as a backstop.
- #876: tests for scripts/ci-apt-install.sh and its use in both Linux jobs (red: no script).
- Router Messages route: the device MCP server is dropped like the browser, canvas and delegation servers, and its note goes with it, so device tools no longer move Claude turns back to the Codex client. Claude Code keeps the server.
- acp-route-160: a follow-up waits for the previous turn to settle before it is sent.
- CI: scripts/ci-apt-install.sh points the Ubuntu sources at each mirror in turn (kernel.org, Azure, Ubuntu), twice, with a time limit per attempt; both Linux jobs use it, including the Ubuntu 24.04 container.
@Dkm0315
Dkm0315 merged commit 44600fe into main Nov 15, 2026
11 checks passed
@Dkm0315
Dkm0315 deleted the fix/ci-route-fixes branch November 15, 2026 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant