Merge behaviour (measured)
1.0.0, frozen 2026-10). Backward compatible within 1.x (§16.4). Supersedes the draft v0.1, kept as a historical record; 0.1 files open through the 0.1 → 1.0 migration (§16.2).https://getkimo.design/schema/kimo-1.0.json (JSON Schema draft 2020-12), generated into packages/core-schema/schema/kimo-1.0.schema.json . The 0.1 schema stays published at …/kimo-0.1.json (schema/kimo-0.1.schema.json, frozen).@kimo/core-schema (packages/core-schema). Where this document and the implementation disagree, that is a bug in one of them; file an issue.docs/teardown.md §10. Every place where this spec resolves an ambiguity in, or deviates from, that section is listed in §20.The table layout targets clean results from plain line-based git merge (merge drivers only run where configured locally; GitHub/GitLab and CI ignore merge=kimo). Measured with git merge-file (git 2.50; myers, histogram and patience agree) on canonical files, in test/git-merge.test.ts:
| Concurrent change (ours / theirs) | Result |
|---|---|
| Insert nodes at different positions | clean |
| Edit adjacent nodes | clean |
| Delete a node / edit the node before it, or two entries below it | clean |
| Reparent a node / edit another | clean |
| Edit a variable / add a node | clean |
| Append after the last node / edit the first | clean |
| Remove the last node / edit another | clean |
| Delete a node / edit the node right after it | conflict (git removes the deleted line with the blank line after it, so the hunks touch) |
| Both append different nodes after the last node | conflict (same insertion point) |
| Both edit the same node | conflict (true conflict) |
Live sync (CRDT). Record-valued instance fields (overrides, args, props) and imports merge per key, so concurrent changes of different override paths, args or library aliases all survive. Semantic conflicts are not repaired automatically: two concurrent aliases that are each acyclic can merge into an alias cycle (VARIABLE_CYCLE); the resolver guards it, the document stays editable, and the user breaks the cycle by giving one variable a literal value.
Independent edits: 8 of 10 scenarios merge cleanly, and every clean result is the canonical serialization of both changes applied. A .gitattributes template ships with *.kimo merge=kimo diff=kimo; kimo merge (semantic, three-way) can also run as a pre-merge step in CI.