The mando-side half of the E2E harness branch poc/e2e-tests was rebased off its stale base (bugfix/BE-3333) onto origin/develop, closing ~135 commits of drift. Branch is now 3 ahead / 0 behind develop, committed and pushed, gates green. This note records what survived the rebase, the two compile/test breakages the rebase forced, and three local-environment gotchas discovered on the way.
For Agents
Resolves the “rebase decision open” warning in mando-cli-e2e-harness-2026-08-04. The CSV insert endpoint is no longer untracked working-tree state — it is a real commit on
poc/e2e-tests. Local build/test on Apple Silicon still needs.cargo/config.toml(see Apple Silicon PyO3 link failure).
What the branch carries now
Three commits, in order:
- Removal of an orphaned
datapoint/json.rs— dead after upstream restructuring. - Dev-gated CSV insert endpoint (
save_data_csv_route.rs) — thePOST /data/insert/csv/{*datapoint_id}route mounted only whenMANDO_TEST_ENDPOINTS=true. It had lived as untracked working-tree-only code for weeks; it is now committed and pushed. - E2E suite scaffold —
e2e/test_set_1.
Five EBS SMB commits skipped as superseded
The old branch carried five EBS SMB fix commits. All five were dropped during the rebase because develop already carries them verbatim — confirmed by diffing ebs.rs after the skip and finding it byte-identical. No cherry-picking or reconciliation was needed.
Rebase-forced fixes
MandoServiceConfig renamed upstream
crate::service::MandoServiceConfig was renamed to mando_repository::model::DataPointRepositoryConfig in the 135 commits of drift.
The default
cargo testhides this class of breakageThe
appmodule is feature-gated. A barecargo testsilently skips it, so the branch looked green whilesave_data_csv_route.rsdid not compile. The rename was only caught with--features app.Rule: on mando, a local gate that omits
--features app/--all-featuresis not a gate. Compare with the CI-parity rule in mando-ci-lib-only-test-gate-2026-07-22 — same failure mode (a gate whose scope silently excludes the code you changed), different axis (feature flags rather than target kinds).
Env-var race in the CSV route tests
The new route’s tests set, read, and cleared MANDO_TEST_ENDPOINTS in-process. Under cargo’s default parallel test threads this is a real data race between tests, not a flake in the code under test.
Fix, two parts:
- Pass the gate flag into
test_routeras an argument rather than reading it from the ambient environment. - Guard every remaining
set/read/clearof the var behind aMutex.
This is the same bug class as the upstream flake in Upstream flaky test to report.
Local dev gotchas
Apple Silicon PyO3 link failure
py_mando and py_mando_simulation fail to link on this machine with unresolved _Py_* symbols.
Cause: .cargo/config.toml is gitignored local config, so a fresh checkout has none.
Fix: copy the checked-in example.
cp .cargo/config.toml.example .cargo/config.tomlThe example carries the needed rustflags for PyO3 cdylib targets:
[target.aarch64-apple-darwin]
rustflags = ["-C", "link-arg=-undefined", "-C", "link-arg=dynamic_lookup"]The example file also holds secrets
That is why
.cargo/config.tomlis never committed. Fresh checkouts must copy the example manually — there is no bootstrap step that does it for you.
build/generated/flows/*.rs re-dirty on every build
mando-bess/build/generated/flows/*.rs show up modified after every local build. They are regenerated unformatted; running rustfmt on them makes them byte-identical to HEAD.
Do not commit them
Pre-existing annoyance, not caused by this branch. Leave them dirty or rustfmt them back; never include them in a commit.
Two more upstream drifts, found only by the live run (evening)
The rebase pulled in two env-var changes that no gate catches. Both fixed in e2e/suite.yaml; branch head is now 2af0c6c9 after the attribution-free history rewrite.
| Var | Drift | Consequence |
|---|---|---|
MANDO_SETUP_ACTIVE_VERSION=V1_4 | now REQUIRED | service crashloops without it |
MANDO_FLOW_SCHEDULER_DISABLED | renamed to MANDO_SETUP_SCHEDULER_DISABLED | old name silently dead; the 0 5 * * * * data-update cron fires mid-suite and breaks unmatched_max: 0 |
Same MANDO_FLOW_* → MANDO_SETUP_* prefix migration first recorded in mando-local-host-run-recipe-2026-07-23. Full live-run record: mando-cli-e2e-live-green-2026-08-05.
Upstream flaky test to report
Worth raising with the mando team — an env-var race between two tests in the same module:
| Tests | mando_bess::debug_error::tests::gate_enabled_when_var_is_true vs gate_defaults_off_when_var_unset |
| Shared state | MANDO_DEBUG_MOCK_ERROR |
| Symptom | fails roughly 2 of 3 parallel runs |
| Passes | single-threaded |
| Why CI is green | the pipeline runs --test-threads=1, which masks it |
Same bug class as the CSV-route race fixed above; the remedy is the same (pass the gate in, or serialize the env access behind a Mutex).
Catalogued alongside the other known flakes in mando-known-flaky-tests-2026-07-15.
Related
- mando-cli-e2e-harness-2026-08-04 — the harness this branch is the server half of; its “rebase decision open” warning is now resolved.
- mando-e2e-ci-green-2026-08-05 — this branch now runs the full dev pipeline (
.branch_rules:devgainedpoc/*) and its E2E job is green. - mando-cli-e2e-live-green-2026-08-05 — the live GREEN 8/8 run against this branch, plus the
DataPointIdserde drift and the new alphanumeric-fragment restriction to raise upstream. - mando-repos-history-rewrite-2026-08-05 — why the branch head is
2af0c6c9. - mando-cli-gitlab-release-flow-2026-08-05 — the same-day mando-cli CI/release work.
- mando-known-flaky-tests-2026-07-15 — catalogue including the
debug_errorenv race above. - mando-ci-lib-only-test-gate-2026-07-22 — the sibling “your gate does not compile what you changed” lesson.
- Mando CI-CD — why the pipeline’s
--test-threads=1masks env races. - py-mando — the crate whose local link step needs
.cargo/config.toml. - Mando AGENTS.md Master Guide — pre-push gate checklist.