Skip to content

Semantic Conflicts

This is where many frameworks stop.

Two agents can be perfectly isolated and still make semantically incompatible changes.

Kroki

There may be no textual Git conflict at all. Every diff applies cleanly. Every branch is green in isolation. And trunk is broken the moment two of them land.

Why Git can't see it

Git's merge algorithm is a textual one. It reasons about lines, not meaning. It has no model of:

  • an interface contract that two implementations must satisfy
  • an invariant that two call sites both rely on
  • a behaviour that a test asserts and a refactor quietly relaxes
  • an assumption about when something is called, not just how

Agents make this worse for a specific reason: they are fast, confident, and — unlike a human teammate — they don't overhear anything. Two engineers changing process() in the same week usually find out at standup. Two agents never do.

The failure mode to design against

Not merge conflicts. Merge conflicts are loud and Git already handles them. The failure mode is silent semantic divergence: a green build made of pieces nobody validated together.

Three ways out

There are only three real answers, and a mature setup uses all three:

Answer Mechanism Page
Don't let two writers touch one domain at once Single Write Authority Ownership
Split work so their outputs can't overlap Decomposition along architectural seams Decomposition
Catch it at the gate with real evidence Contract tests, architecture checks, merge queue Integration

The rest of this site is essentially those three answers, in detail.