Skip to content

acpmux: ACPMUX_HARNESS_FIXTURE serves a capture fixture's harnesses and health - #26333

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
capture-fixture/acpmux-harness-fixture
Oct 27, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
capture-fixture/acpmux-harness-fixture

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

acpmux reads ACPMUX_HARNESS_FIXTURE at start. It names a JSON file of harness profiles and health rows, and the daemon serves those in place of what it would find on the host, so a screenshot rig's before and after builds show the same Settings > Agents > Harnesses data on any machine.

The ask, from Leo's standing order for the infra lane: "get the proper reasonable features in. Period." The concrete problem it fixes: live captures of a Harnesses change (cmux#26083) could not be matched. Each host listed its own harnesses, and the running daemon ignored a seeded harness-health.json as soon as it ran its own check.

What the variable does

The file looks like {"harnesses": {ID: HarnessProfile}, "health": [HarnessHealth]}. With the variable set:

  • The catalog joins the fixture's harnesses in place of discovery (PATH, ~/.acpx and the cached ACP Registry). Profile files still join.
  • _acpmux/harness/health serves the fixture's rows as every check, including refresh, checkLatest and rescan. Nothing is probed, fetched or saved.
  • Every update path refuses: auto-update, _acpmux/harness/update, the cached update plan and update prepare.
  • None of these run: launcher verification, live model lists (cached or probed), model probes of a fixture harness, _acpmux/registry and _acpmux/harness/add.
  • The file is opened with O_NOFOLLOW. If the variable is set but empty, or the file is missing or unparsable, the daemon refuses to start, so a capture can never silently show the host's harnesses.

Risk

Low. With the variable unset, every path runs as before. The one refactor is moving auto-default selection into pick_auto_default, and its behaviour is unchanged. A signed app passes only an allowlist of variables to its daemon (AcpmuxDaemonLauncher.signedInheritedKeys), so only DEV builds and hand-run daemons can receive this one. A session the person starts on a fixture harness still runs that profile's argv; the rig never opens one.

Evidence

  • Rust: lib tests for the parser, the health service and catalog joining. tests/harness_fixture.rs drives the real daemon binary: harnesses, health with and without refresh, a refused update, a refused registry read, the fixture harness never started, no health copy saved, and an empty or missing fixture stopping the start.
  • Live rig, cmux#26083 (Settings > Agents > Harnesses). The same fixture file was used for both captures: Codex 0.3.1 → 0.4.0 (npm), Claude Code 2.0.5 → 2.0.9 (needs sudo) and GitHub Copilot 1.4.0 (current). Before is e519622e (the merge's parent) and after is d65a93cf (the merge). Each capture ran with this change applied on top (refs capture-fixture/26083-before and -after). The rows match; the after adds the update cards cmux#26083 introduced.
Before (e519622e + fixture) After (d65a93cf + fixture)
before light after light
before dark after dark

Companion rig change (the capture state's harnessFixture field): manaflow-ai/cmuxterm-hq.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 3 commits October 27, 2026 11:30
…nd health

A screenshot rig's before and after builds read the same harness catalog
and health rows from a JSON file instead of this host's PATH, probes and
registries; updates are refused and nothing is saved. Unset, nothing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
…s, the registry and an empty variable

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@cursor

cursor Bot commented Oct 27, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

…Settings.fixture

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-1aetuy created for this PR by the cmux coordinator.

@github-actions

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review abb284d: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr26333 -f ref=capture-fixture/acpmux-harness-fixture -f platform=macos -f backend_mode=local

@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Oct 27, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 27, 2026

Copy link
Copy Markdown

Found 2 test failures on Blacksmith runners:

Failures

Test View Logs
nightly.yml must derive the embedded key and sign every appcast through the helper/
nightly.yml must derive the embedded key and sign every appcast through the helper
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra xhigh, next-review): SHIP at abb284d

No blocking findings.

Static review of the supplied diff and files; tests were not run.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40581569324 at afa75ae failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at 1c1632b. This pull request is one of 4 merged since: #26267, #26143, #26211, #26333.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

This branch was previously deployed

3 inactive deployments
artifacts — abb284d4 Deployed Oct 27, 2026 by teamleaderleo via add the Windows daemon to the tree #66674
sentry-dsyms — abb284d4 Deployed Oct 27, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #66674
ci-routing-agent — abb284d4 Deployed Oct 27, 2026 by teamleaderleo via wait for same-key tree publisher #66674
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant