--- id: "bug-1724" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "xceadmin" severity: "unknown" timestamp: "2026-08-28T00:00:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: ["src/xceadmin/meson-build.sh"] tags: ["xceadmin", "meson-build.sh", "repo-mirror", "live-e2e", "test-discovery", "symlink", "build-infra", "found-live", "root-caused", "live-verified"] related: [] legacy: true --- # bug-1724: 3 xceadmin live E2E tests… ## Description 3 xceadmin live E2E tests (test_e2e_live_push.py::test_live_config_push_against_real_single_node_controller, test_e2e_live_ha_push.py::test_live_config_push_against_primary_reaches_success_path, test_e2e_live_ha_push.py::test_live_config_push_against_standby_returns_standby_rejection_not_redirect) always SKIPPED under the meson-driven build path (`/xce-build xceadmin`, `nix build .#xcecore`) with 'no xce_controller binary found under xce.build/build.release/build.dbg', regardless of whether a real xce_controller/xceadmin binary actually existed anywhere in the checkout. ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause tests/_live_e2e_common.py's CONTROLLER_CANDIDATES/XCEADMIN_CANDIDATES/DEPLOY_HA_SH resolve paths relative to the test file's own on-disk location (Path(__file__).resolve().parents[2]). That works when pytest runs directly from the real checkout, but meson-build.sh copies the whole xceadmin test tree into an isolated out-of-tree repo-mirror before invoking pytest (to keep the meson build pure), and only ever symlinked ha/, src/configs, src/schema into that mirror -- never the sibling xce.build/build.release/build.dbg controller-binary directories, nor src/tools/ (deploy-ha.sh). So the mirror's own SRC_DIR (repo-mirror/src/) never had a controller subdir, a deploy-ha.sh, or a matching xceadmin binary at the expected relative path, no matter what was actually built in the real repo -- the skip was structural, not a signal about the real build state. ## Fix Two changes to meson-build.sh: (1) symlink each profile's `controller` subdirectory (xce.build/controller, build.release/controller, build.dbg/controller -- only the controller subdir, never the whole profile-root, since the profile-root can be an ancestor of the mirror itself when xceadmin is built in that same profile, which would create a self-referential symlink loop) into the mirror so CONTROLLER_CANDIDATES can find a real xce_controller wherever it was built; (2) symlink src/tools (checked-in, not a build-output dir, so a plain safe symlink like configs/schema) so DEPLOY_HA_SH resolves. For xceadmin's OWN binary, which genuinely is self-referential (the mirror lives inside that very build's own xceadmin output), routed around it via the existing XCEADMIN_BIN env-var override (resolve_binary_candidates in _live_e2e_common.py), set to $VENV_DIR/bin/xceadmin -- the binary this very meson-build.sh invocation just pip-installed -- before invoking pytest. Verified end-to-end via a real `xce-build.sh xceadmin debug build.dbg --incremental` run: all 3 tests now execute for real against a live controller/cluster instead of skipping. ## Verification _Not recorded (migrated from buglog.json)._ ## References _Not recorded (migrated from buglog.json)._