Cell i:branch_delete×change:distinct-branch (crates/omnigraph-server/tests/server.rs ~4197) intermittently fails in CI's Test Workspace job:
assertion `left == right` failed: [i:branch_delete×change:distinct-branch] change
left: 4xx (the /change response)
right: 200
The cell asserts that a /change on main succeeds while a different branch is concurrently deleted ("both should succeed"). Under contention the change's publish appears to hit a manifest CAS conflict caused by the unrelated branch delete and surfaces a non-200 instead of retrying.
Occurrences (identical signature, both on PRs not touching the engine/server concurrency paths):
Two candidate resolutions (one of them is right, the test is currently asserting whichever we want the contract to be):
- The
/change path should absorb/rebase manifest CAS conflicts caused by unrelated-branch deletes (the non-strict write queue already rebases other contention) — then the test is correct and this is an engine bug.
- Concurrent unrelated-branch deletes legitimately surface a retryable conflict — then the cell's "both succeed" expectation should accept the documented conflict semantics.
Per invariants.md, observable behavior is contract (Hyrum); whichever way this lands, the matrix cell should pin it deterministically (failpoint-sequenced rather than timing-raced) so the answer stops being probabilistic.
Cell
i:branch_delete×change:distinct-branch(crates/omnigraph-server/tests/server.rs ~4197) intermittently fails in CI's Test Workspace job:The cell asserts that a
/changeonmainsucceeds while a different branch is concurrently deleted ("both should succeed"). Under contention the change's publish appears to hit a manifest CAS conflict caused by the unrelated branch delete and surfaces a non-200 instead of retrying.Occurrences (identical signature, both on PRs not touching the engine/server concurrency paths):
Two candidate resolutions (one of them is right, the test is currently asserting whichever we want the contract to be):
/changepath should absorb/rebase manifest CAS conflicts caused by unrelated-branch deletes (the non-strict write queue already rebases other contention) — then the test is correct and this is an engine bug.Per invariants.md, observable behavior is contract (Hyrum); whichever way this lands, the matrix cell should pin it deterministically (failpoint-sequenced rather than timing-raced) so the answer stops being probabilistic.