The conflict study
8,396 merge commits across 130 public repositories, replayed to see how often task files actually conflict.
Before building on the claim that an append-only journal removes merge conflicts, we checked how often those conflicts happen to other people. Not by asking — by counting.
Method
Backlog.md and git-issues keep tasks as files in git, so the history of their merges is readable.
- GitHub code search found 245 public repositories with
backlog/tasks/or.issues/. - Each was cloned partially (
--filter=blob:none --no-checkout). - Every merge commit was replayed with
git merge-tree --write-treeon its two parents. Git itself reports whether a conflict arises — this is not a heuristic, it is the same machinery a real merge uses. - Conflicts were then filtered by path to the task files.
Why not git show --cc
The first attempt used a combined diff and produced false positives: --cc
reports files created in the merge commit itself as differing from both parents.
Replaying the merge has no such flaw.
Results
| Measure | Value |
|---|---|
| Candidates found | 245 |
| Dropped: no task files | 42 |
| Dropped: no merge commits | 73 |
| Usable | 130 |
| Merge commits replayed | 8,396 |
| Conflicting anywhere | 681 (8.1%) |
| Conflicting in task files | 44 (0.52%) |
| Repositories where it happened | 20 of 130 — 15.4% |
Verdict against thresholds set in advance
| Threshold | Condition | Result |
|---|---|---|
| Confirmed | more than 30% of repositories | no |
| Inconclusive | 10–30% | ← 15.4% |
| Refuted | under 10% | no |
The hypothesis was neither confirmed nor refuted. It landed in the middle band, closer to the lower edge.
What that means, without dressing it up
The problem is real but rare. A conflict in task files happens in roughly one merge in two hundred. A team doing 20 merges a month meets one every five months. That is why conflict-freedom is our proof and not our headline.
The distribution is very uneven. In 110 of 130 repositories there were none at all. But a handful carry seven, five, five. A minority of teams do feel this regularly — a narrower segment than expected, and one that can be named.
The most valuable finding: the type
Classifying 28 conflicts from the six most active repositories:
| Type | Count | What it means | Removed by append-only |
|---|---|---|---|
CONFLICT (content) | 25 (89%) | Two branches edited the same task | Yes — exactly our scenario |
CONFLICT (add/add) | 2 (7%) | Two branches created tasks with the same id | Not automatically |
CONFLICT (modify/delete) | 1 (4%) | One branch edited, the other deleted | Yes |
The overwhelming majority of real conflicts are precisely the type our architecture removes by construction. The mechanism hits what it aims at.
The other measurement
Probe A asked whether the problem exists. Probe C asked what the answer costs an AI agent once it does: 948 bytes, constant as the project grows.
Raw data
The full results, the per-repository breakdown and the CSV are in the product repository: probe-a-results.md and probe-a-data.csv.