The two-repo E2E harness was run against a live stack for the first time and came back GREEN 8/8, twice, from wiped volumes, against the rebased mando branch. Getting there required fixing three separate upstream drifts that no unit test in either repo could have caught, plus one upstream behavior change that needs to go back to the mando team.
Status
mando e2e runverified GREEN 8/8 on two consecutive runs from wiped volumes. mando side at2af0c6c9(branch head after the history rewrite). mando-cli fix is MR !6 onbugfix/e2e-datapoint-id-string.
Follow-up the same evening — GREEN in real CI too
The suite then passed inside mando’s GitLab pipeline (
E2E Data Suite Linux Dev, pipeline2735150017, 72s), running--external-stackagainstpostgres:17+wiremock/wiremock:3xsidecars withmando_bessas a background host process. Full record: mando-e2e-ci-green-2026-08-05. Both execution modes — locally-orchestrated compose and CI-provided stack — are now verified on the same suite.
Drift 1 — DataPointId serde became a bare string (the predicted trap, fired verbatim)
The 08-04 handover warned that mando-cli’s datapoints query body is hand-mirrored from mando’s types, so only a live run could catch schema drift. That is exactly what happened.
| Was | {"id": {"id": "...", "id_fragments": [...]}} — a struct |
| Now | "bess/..." — a bare JSON string (upstream rewrote both Deserialize and Serialize) |
| Symptom | 400 from POST /data/query/v2 |
| Unit tests | stayed green throughout |
Fix (mando-cli): src/e2e/datapoints.rs, data_point_id() now emits json!(dp_id) instead of the two-field object. Four tests updated, including the serde-mirror test query_body_deserializes_as_the_service_would_read_it — its Filter.id is now a String.
The self-confirming-test trap, second act
This is the same failure mode catalogued as Critical 1 in mando-cli-e2e-harness-2026-08-04: the mirror test round-trips mando-cli’s own model, so it proves self-consistency and nothing else. The 08-04 note predicted the trap in writing; it still fired, because a hand-mirrored wire type has no mechanism to notice upstream moving. A live run is the only gate on this seam. Any future change to the mirror must be validated against a running service, never against
cargo test.
Drift 2 + 3 — two env vars in mando’s e2e/suite.yaml
Both fixed on the mando side (e2e/suite.yaml, branch head 2af0c6c9).
| Var | Drift | Consequence if wrong |
|---|---|---|
MANDO_SETUP_ACTIVE_VERSION=V1_4 | now REQUIRED | service crashloops at boot without it |
MANDO_FLOW_SCHEDULER_DISABLED | renamed to MANDO_SETUP_SCHEDULER_DISABLED | old name is silently dead — the 0 5 * * * * data-update cron fires mid-suite and breaks unmatched_max: 0 |
The rename is silent, and it breaks the suite non-deterministically
Nothing rejects the obsolete
MANDO_FLOW_SCHEDULER_DISABLED; the scheduler simply stays enabled. The failure then shows up as an unrelated-looking mock assertion (unmatched_max: 0violated by cron-triggered outbound calls) at whatever point in the run the cron happens to land. SameMANDO_FLOW_*→MANDO_SETUP_*prefix migration already recorded in mando-local-host-run-recipe-2026-07-23 — the.cargo/config.toml.examplestaleness and this suite staleness are the same upstream move.
New upstream behavior change — DataPointId::new rejects non-alphanumeric fragments
Raise with the mando team
DataPointId::newnow rejects any path fragment that is not purely ASCII alphanumeric. Ids with an underscore inside a segment — e.g.bess/fi_north/soc_state, and the wholein_/out_corpus naming convention — now return 400 on query.
This is a behavior change, not a harness bug. Open questions for the team: is the restriction intended, and if so what is the migration path for existing ids that carry underscores?
Doc drift to fix on our side: mando-cli’s docs/e2e-guide.md documents underscore-bearing ids as valid examples. That guidance is now wrong and must be corrected once the upstream intent is confirmed.
Related
- mando-e2e-ci-green-2026-08-05 — the same suite green in GitLab CI hours later; proves
--external-stackand records the boot-env whack-a-mole. - mando-cli-e2e-harness-2026-08-04 — the harness itself; its “never run live” warning is now closed by this note.
- mando-e2e-rebase-2026-08-05 — the mando-side rebase that pulled in the drifting upstream code.
- mando-repos-history-rewrite-2026-08-05 — why the mando branch head is
2af0c6c9. - mando-cli-gitlab-release-flow-2026-08-05 — the same-day v0.4.0 release.
- mando-local-host-run-recipe-2026-07-23 — the
MANDO_SETUP_*env prefix migration in its earlier form. - mando-cli-flow-run-2026-07-28 —
flow run --bundle, the per-set primitive the suite drives.