@feltdb/core 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/agent-state.d.ts +20 -0
  2. package/dist/agent-state.d.ts.map +1 -1
  3. package/dist/agent-state.js +36 -0
  4. package/dist/build-identity.json +12 -4
  5. package/dist/cli/commands.js +187 -4
  6. package/dist/cli/publish-engine.js +116 -16
  7. package/dist/collection.d.ts.map +1 -1
  8. package/dist/collection.js +3 -0
  9. package/dist/create/build-identity.json +12 -4
  10. package/dist/create/managed-account.js +93 -35
  11. package/dist/create/package-versions.js +1 -1
  12. package/dist/create/server-source/Cargo.lock +6 -509
  13. package/dist/create/server-source/Cargo.toml +2 -13
  14. package/dist/create/server-source/crates/feltdb-client/Cargo.toml +1 -1
  15. package/dist/create/server-source/crates/feltdb-server/Cargo.toml +1 -1
  16. package/dist/create/server-source/crates/feltdb-server/src/main.rs +255 -12
  17. package/dist/create/server-source/crates/feltdb-wasm/Cargo.toml +1 -1
  18. package/dist/db.d.ts +11 -1
  19. package/dist/db.d.ts.map +1 -1
  20. package/dist/db.js +15 -2
  21. package/dist/error-codes.d.ts +5 -0
  22. package/dist/error-codes.d.ts.map +1 -1
  23. package/dist/error-codes.js +9 -1
  24. package/dist/http-db.d.ts +16 -0
  25. package/dist/http-db.d.ts.map +1 -1
  26. package/dist/http-db.js +36 -6
  27. package/dist/managed-recovery.d.ts +6 -0
  28. package/dist/managed-recovery.d.ts.map +1 -1
  29. package/dist/managed-recovery.js +9 -0
  30. package/dist/studio-app/assets/{feltdb_wasm-BjM1ylL3.js → feltdb_wasm-DtybUY0q.js} +1 -1
  31. package/dist/studio-app/assets/feltdb_wasm_bg-DsgIUwaB.wasm +0 -0
  32. package/dist/studio-app/assets/index-C4OffsZl.js +37 -0
  33. package/dist/studio-app/index.html +1 -1
  34. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  35. package/dist/wasm/package.json +1 -1
  36. package/dist/workload.d.ts +55 -3
  37. package/dist/workload.d.ts.map +1 -1
  38. package/dist/workload.js +23 -0
  39. package/dist/workspace/workspace-connection.d.ts.map +1 -1
  40. package/dist/workspace/workspace-connection.js +14 -3
  41. package/package.json +1 -1
  42. package/dist/create/server-source/crates/feltdb/Cargo.lock +0 -175
  43. package/dist/create/server-source/crates/feltdb/Cargo.toml +0 -102
  44. package/dist/create/server-source/crates/feltdb/LICENSE +0 -21
  45. package/dist/create/server-source/crates/feltdb/README.md +0 -75
  46. package/dist/create/server-source/crates/feltdb/benches/baselines/gate-13-redux.json +0 -370
  47. package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +0 -589
  48. package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +0 -247
  49. package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +0 -440
  50. package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +0 -275
  51. package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +0 -381
  52. package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +0 -467
  53. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +0 -489
  54. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +0 -281
  55. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +0 -606
  56. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +0 -531
  57. package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +0 -462
  58. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +0 -505
  59. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +0 -484
  60. package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +0 -758
  61. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +0 -421
  62. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +0 -329
  63. package/dist/create/server-source/crates/feltdb/src/acceptance_tests.rs +0 -1705
  64. package/dist/create/server-source/crates/feltdb/src/acquisition.rs +0 -286
  65. package/dist/create/server-source/crates/feltdb/src/admission.rs +0 -185
  66. package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +0 -507
  67. package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +0 -539
  68. package/dist/create/server-source/crates/feltdb/src/agent_state.rs +0 -320
  69. package/dist/create/server-source/crates/feltdb/src/agent_transition_contract.rs +0 -1545
  70. package/dist/create/server-source/crates/feltdb/src/analytics.rs +0 -521
  71. package/dist/create/server-source/crates/feltdb/src/application.rs +0 -2674
  72. package/dist/create/server-source/crates/feltdb/src/application_runtime.rs +0 -1070
  73. package/dist/create/server-source/crates/feltdb/src/authority.rs +0 -479
  74. package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +0 -847
  75. package/dist/create/server-source/crates/feltdb/src/authorization.rs +0 -1030
  76. package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +0 -1122
  77. package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority-client.rs +0 -32
  78. package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority.rs +0 -19
  79. package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +0 -1474
  80. package/dist/create/server-source/crates/feltdb/src/capabilities/mod.rs +0 -8
  81. package/dist/create/server-source/crates/feltdb/src/capabilities/search.rs +0 -418
  82. package/dist/create/server-source/crates/feltdb/src/capabilities/vector.rs +0 -482
  83. package/dist/create/server-source/crates/feltdb/src/capability.rs +0 -903
  84. package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +0 -263
  85. package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -77
  86. package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +0 -496
  87. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +0 -2574
  88. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +0 -212
  89. package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +0 -422
  90. package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +0 -445
  91. package/dist/create/server-source/crates/feltdb/src/content_distribution.rs +0 -465
  92. package/dist/create/server-source/crates/feltdb/src/convergence.rs +0 -634
  93. package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +0 -427
  94. package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +0 -376
  95. package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +0 -365
  96. package/dist/create/server-source/crates/feltdb/src/cron.rs +0 -294
  97. package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +0 -483
  98. package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +0 -477
  99. package/dist/create/server-source/crates/feltdb/src/distributed_tests.rs +0 -1003
  100. package/dist/create/server-source/crates/feltdb/src/distributed_transactions.rs +0 -1334
  101. package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +0 -368
  102. package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +0 -231
  103. package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +0 -482
  104. package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +0 -203
  105. package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +0 -317
  106. package/dist/create/server-source/crates/feltdb/src/equality_index.rs +0 -595
  107. package/dist/create/server-source/crates/feltdb/src/execution.rs +0 -426
  108. package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +0 -214
  109. package/dist/create/server-source/crates/feltdb/src/indexing.rs +0 -776
  110. package/dist/create/server-source/crates/feltdb/src/lib.rs +0 -7365
  111. package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +0 -234
  112. package/dist/create/server-source/crates/feltdb/src/materialization.rs +0 -184
  113. package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -266
  114. package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +0 -310
  115. package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +0 -736
  116. package/dist/create/server-source/crates/feltdb/src/observability.rs +0 -379
  117. package/dist/create/server-source/crates/feltdb/src/operation.rs +0 -290
  118. package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +0 -439
  119. package/dist/create/server-source/crates/feltdb/src/operation_log.rs +0 -349
  120. package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +0 -332
  121. package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +0 -718
  122. package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +0 -487
  123. package/dist/create/server-source/crates/feltdb/src/peer_registry.rs +0 -166
  124. package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +0 -289
  125. package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +0 -566
  126. package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +0 -3391
  127. package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +0 -203
  128. package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +0 -261
  129. package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +0 -502
  130. package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +0 -216
  131. package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +0 -303
  132. package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +0 -323
  133. package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +0 -531
  134. package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +0 -406
  135. package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +0 -436
  136. package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +0 -387
  137. package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +0 -378
  138. package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +0 -359
  139. package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +0 -372
  140. package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +0 -404
  141. package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +0 -376
  142. package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +0 -461
  143. package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +0 -2125
  144. package/dist/create/server-source/crates/feltdb/src/production_api.rs +0 -418
  145. package/dist/create/server-source/crates/feltdb/src/provenance.rs +0 -207
  146. package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +0 -126
  147. package/dist/create/server-source/crates/feltdb/src/query_performance.rs +0 -218
  148. package/dist/create/server-source/crates/feltdb/src/read_basis.rs +0 -257
  149. package/dist/create/server-source/crates/feltdb/src/references.rs +0 -404
  150. package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +0 -401
  151. package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +0 -501
  152. package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +0 -680
  153. package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +0 -163
  154. package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +0 -133
  155. package/dist/create/server-source/crates/feltdb/src/routing.rs +0 -409
  156. package/dist/create/server-source/crates/feltdb/src/semantic_decision.rs +0 -2029
  157. package/dist/create/server-source/crates/feltdb/src/semantic_query.rs +0 -599
  158. package/dist/create/server-source/crates/feltdb/src/sharding.rs +0 -549
  159. package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +0 -516
  160. package/dist/create/server-source/crates/feltdb/src/state_contract.rs +0 -6003
  161. package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +0 -222
  162. package/dist/create/server-source/crates/feltdb/src/state_facade.rs +0 -320
  163. package/dist/create/server-source/crates/feltdb/src/state_hash.rs +0 -291
  164. package/dist/create/server-source/crates/feltdb/src/state_model.rs +0 -4158
  165. package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +0 -379
  166. package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +0 -673
  167. package/dist/create/server-source/crates/feltdb/src/storage.rs +0 -273
  168. package/dist/create/server-source/crates/feltdb/src/submission.rs +0 -471
  169. package/dist/create/server-source/crates/feltdb/src/sync.rs +0 -495
  170. package/dist/create/server-source/crates/feltdb/src/sync_contract.rs +0 -822
  171. package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +0 -433
  172. package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +0 -462
  173. package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +0 -965
  174. package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +0 -1120
  175. package/dist/create/server-source/crates/feltdb/src/transactions.rs +0 -643
  176. package/dist/create/server-source/crates/feltdb/src/trigger.rs +0 -390
  177. package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +0 -749
  178. package/dist/create/server-source/crates/feltdb/src/versioned_object_substrate.rs +0 -708
  179. package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +0 -1269
  180. package/dist/create/server-source/crates/feltdb/src/workflow.rs +0 -713
  181. package/dist/create/server-source/crates/feltdb/src/workflow_acceptance_tests.rs +0 -510
  182. package/dist/create/server-source/crates/feltdb/src/workflow_integration.rs +0 -354
  183. package/dist/create/server-source/crates/feltdb/src/workflow_runtime.rs +0 -594
  184. package/dist/create/server-source/crates/feltdb/src/workload.rs +0 -4222
  185. package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +0 -456
  186. package/dist/create/server-source/crates/feltdb/tests/agent_state_native.rs +0 -1188
  187. package/dist/create/server-source/crates/feltdb/tests/agent_transition_contract_conformance.rs +0 -2884
  188. package/dist/create/server-source/crates/feltdb/tests/authority_process.rs +0 -297
  189. package/dist/create/server-source/crates/feltdb/tests/authority_transaction_identity.rs +0 -534
  190. package/dist/create/server-source/crates/feltdb/tests/bounded_read_contract.rs +0 -132
  191. package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +0 -299
  192. package/dist/create/server-source/crates/feltdb/tests/common/mod.rs +0 -96
  193. package/dist/create/server-source/crates/feltdb/tests/compaction_stall_contract.rs +0 -272
  194. package/dist/create/server-source/crates/feltdb/tests/crash_durability_contract.rs +0 -467
  195. package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +0 -309
  196. package/dist/create/server-source/crates/feltdb/tests/durable_backup_contract.rs +0 -445
  197. package/dist/create/server-source/crates/feltdb/tests/durable_corruption_contract.rs +0 -518
  198. package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +0 -392
  199. package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +0 -850
  200. package/dist/create/server-source/crates/feltdb/tests/fixtures/agent_transition_corpus.json +0 -23340
  201. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +0 -1916
  202. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +0 -1878
  203. package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +0 -1862
  204. package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_evidence.rs +0 -123
  205. package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_substrate_completion.rs +0 -299
  206. package/dist/create/server-source/crates/feltdb/tests/local_process_ownership.rs +0 -69
  207. package/dist/create/server-source/crates/feltdb/tests/managed_incident_regression.rs +0 -191
  208. package/dist/create/server-source/crates/feltdb/tests/operational_health_contract.rs +0 -278
  209. package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +0 -234
  210. package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +0 -947
  211. package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +0 -404
  212. package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +0 -916
  213. package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +0 -1045
  214. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +0 -347
  215. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +0 -361
  216. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +0 -330
  217. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +0 -93
  218. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +0 -622
  219. package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +0 -517
  220. package/dist/create/server-source/crates/feltdb/tests/production_certification.rs +0 -1153
  221. package/dist/create/server-source/crates/feltdb/tests/production_contract.rs +0 -771
  222. package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +0 -1383
  223. package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +0 -868
  224. package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +0 -221
  225. package/dist/create/server-source/crates/feltdb/tests/replicated_history_contract.rs +0 -417
  226. package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +0 -338
  227. package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +0 -1039
  228. package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +0 -739
  229. package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +0 -452
  230. package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +0 -81
  231. package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +0 -438
  232. package/dist/create/server-source/crates/feltdb/tests/semantic_decision.rs +0 -1165
  233. package/dist/create/server-source/crates/feltdb/tests/semantic_query.rs +0 -767
  234. package/dist/create/server-source/crates/feltdb/tests/semantic_query_contract.rs +0 -363
  235. package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +0 -1799
  236. package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +0 -1316
  237. package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +0 -358
  238. package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +0 -365
  239. package/dist/create/server-source/crates/feltdb/tests/state_ref_authority.rs +0 -918
  240. package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +0 -299
  241. package/dist/create/server-source/crates/feltdb/tests/storage_independent_versioned_object_substrate.rs +0 -328
  242. package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +0 -255
  243. package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +0 -249
  244. package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +0 -994
  245. package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +0 -484
  246. package/dist/studio-app/assets/feltdb_wasm_bg-TseJn2Ax.wasm +0 -0
  247. package/dist/studio-app/assets/index-1wd0uKua.js +0 -30
@@ -1,1916 +0,0 @@
1
- {
2
- "about": "Deterministic conformance corpus for the feltdb.state.conflict contract. Every case is executed by both the native and the WASM implementation and their canonical output bytes must be identical to each other and to expected_output. Cases with 'input' are canonically encoded by the harness and carry those bytes as canonical_input; cases with 'raw_input' are fed to the contract verbatim so that non-canonical and malformed envelopes are testable. State content is a string, and content that is not JSON classifies as JSON null rather than failing. Regenerate expected_output with FELTDB_STATE_CONFLICT_CONTRACT_BLESS=1 cargo test -p feltdb --test state_conflict_contract_conformance -- bless --ignored",
3
- "cases": [
4
- {
5
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
6
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
7
- "input": {
8
- "base": "{\"x\":1}",
9
- "contract": "feltdb.state.conflict",
10
- "left": "{\"x\":1}",
11
- "right": "{\"x\":1}",
12
- "version": 2
13
- },
14
- "name": "all_identical",
15
- "why": "no side changed anything, so there are no paths at all"
16
- },
17
- {
18
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"b\\\":[1,{\\\"c\\\":2}]}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"b\\\":[1,{\\\"c\\\":2}]}}\",\"right\":\"{\\\"a\\\":{\\\"b\\\":[1,{\\\"c\\\":2}]}}\",\"version\":2}",
19
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
20
- "input": {
21
- "base": "{\"a\":{\"b\":[1,{\"c\":2}]}}",
22
- "contract": "feltdb.state.conflict",
23
- "left": "{\"a\":{\"b\":[1,{\"c\":2}]}}",
24
- "right": "{\"a\":{\"b\":[1,{\"c\":2}]}}",
25
- "version": 2
26
- },
27
- "name": "all_identical_nested",
28
- "why": "structural equality, several levels down"
29
- },
30
- {
31
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
32
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
33
- "input": {
34
- "base": "{}",
35
- "contract": "feltdb.state.conflict",
36
- "left": "{}",
37
- "right": "{}",
38
- "version": 2
39
- },
40
- "name": "all_empty",
41
- "why": "three empty states"
42
- },
43
- {
44
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
45
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
46
- "input": {
47
- "base": "{\"x\":1}",
48
- "contract": "feltdb.state.conflict",
49
- "left": "{\"x\":2}",
50
- "right": "{\"x\":1}",
51
- "version": 2
52
- },
53
- "name": "left_changed_right_unchanged",
54
- "why": "a one-sided change is Independent"
55
- },
56
- {
57
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
58
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
59
- "input": {
60
- "base": "{\"x\":1}",
61
- "contract": "feltdb.state.conflict",
62
- "left": "{\"x\":1}",
63
- "right": "{\"x\":2}",
64
- "version": 2
65
- },
66
- "name": "right_changed_left_unchanged",
67
- "why": "the mirror, which records different values"
68
- },
69
- {
70
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
71
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
72
- "input": {
73
- "base": "{\"x\":1}",
74
- "contract": "feltdb.state.conflict",
75
- "left": "{\"x\":2}",
76
- "right": "{\"x\":2}",
77
- "version": 2
78
- },
79
- "name": "both_changed_identically",
80
- "why": "agreeing edits converge"
81
- },
82
- {
83
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":3}\",\"version\":2}",
84
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
85
- "input": {
86
- "base": "{\"x\":1}",
87
- "contract": "feltdb.state.conflict",
88
- "left": "{\"x\":2}",
89
- "right": "{\"x\":3}",
90
- "version": 2
91
- },
92
- "name": "both_changed_differently",
93
- "why": "disagreeing edits conflict"
94
- },
95
- {
96
- "canonical_input": "{\"base\":\"{\\\"a\\\":1,\\\"b\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":2,\\\"b\\\":1}\",\"right\":\"{\\\"a\\\":1,\\\"b\\\":2}\",\"version\":2}",
97
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
98
- "input": {
99
- "base": "{\"a\":1,\"b\":1}",
100
- "contract": "feltdb.state.conflict",
101
- "left": "{\"a\":2,\"b\":1}",
102
- "right": "{\"a\":1,\"b\":2}",
103
- "version": 2
104
- },
105
- "name": "different_top_level_fields",
106
- "why": "edits to unrelated members do not interact"
107
- },
108
- {
109
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2,\\\"b\\\":1}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":2}}\",\"version\":2}",
110
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
111
- "input": {
112
- "base": "{\"o\":{\"a\":1,\"b\":1}}",
113
- "contract": "feltdb.state.conflict",
114
- "left": "{\"o\":{\"a\":2,\"b\":1}}",
115
- "right": "{\"o\":{\"a\":1,\"b\":2}}",
116
- "version": 2
117
- },
118
- "name": "different_nested_fields",
119
- "why": "the same, one level down"
120
- },
121
- {
122
- "canonical_input": "{\"base\":\"{\\\"l\\\":{\\\"x\\\":1},\\\"r\\\":{\\\"y\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"l\\\":{\\\"x\\\":2},\\\"r\\\":{\\\"y\\\":1}}\",\"right\":\"{\\\"l\\\":{\\\"x\\\":1},\\\"r\\\":{\\\"y\\\":2}}\",\"version\":2}",
123
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"l\"},{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"r\"},{\"Key\":\"y\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
124
- "input": {
125
- "base": "{\"l\":{\"x\":1},\"r\":{\"y\":1}}",
126
- "contract": "feltdb.state.conflict",
127
- "left": "{\"l\":{\"x\":2},\"r\":{\"y\":1}}",
128
- "right": "{\"l\":{\"x\":1},\"r\":{\"y\":2}}",
129
- "version": 2
130
- },
131
- "name": "different_sibling_subtrees",
132
- "why": "edits in separate subtrees"
133
- },
134
- {
135
- "canonical_input": "{\"base\":\"{\\\"a\\\":1,\\\"b\\\":1,\\\"c\\\":1,\\\"d\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":2,\\\"b\\\":2,\\\"c\\\":1,\\\"d\\\":1}\",\"right\":\"{\\\"a\\\":1,\\\"b\\\":1,\\\"c\\\":2,\\\"d\\\":2}\",\"version\":2}",
136
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"c\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"d\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
137
- "input": {
138
- "base": "{\"a\":1,\"b\":1,\"c\":1,\"d\":1}",
139
- "contract": "feltdb.state.conflict",
140
- "left": "{\"a\":2,\"b\":2,\"c\":1,\"d\":1}",
141
- "right": "{\"a\":1,\"b\":1,\"c\":2,\"d\":2}",
142
- "version": 2
143
- },
144
- "name": "multiple_independent_changes",
145
- "why": "several one-sided edits on each side"
146
- },
147
- {
148
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":1}\",\"right\":\"{\\\"b\\\":2}\",\"version\":2}",
149
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":1,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
150
- "input": {
151
- "base": "{}",
152
- "contract": "feltdb.state.conflict",
153
- "left": "{\"a\":1}",
154
- "right": "{\"b\":2}",
155
- "version": 2
156
- },
157
- "name": "independent_addition_each_side",
158
- "why": "each side adds a different member"
159
- },
160
- {
161
- "canonical_input": "{\"base\":\"{\\\"a\\\":1,\\\"b\\\":2}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"b\\\":2}\",\"right\":\"{\\\"a\\\":1}\",\"version\":2}",
162
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
163
- "input": {
164
- "base": "{\"a\":1,\"b\":2}",
165
- "contract": "feltdb.state.conflict",
166
- "left": "{\"b\":2}",
167
- "right": "{\"a\":1}",
168
- "version": 2
169
- },
170
- "name": "independent_removal_each_side",
171
- "why": "each side removes a different member"
172
- },
173
- {
174
- "canonical_input": "{\"base\":\"{\\\"drop\\\":2,\\\"keep\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"drop\\\":2,\\\"keep\\\":1,\\\"new\\\":3}\",\"right\":\"{\\\"keep\\\":1}\",\"version\":2}",
175
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"drop\"}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":null},{\"path\":[{\"Key\":\"new\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":3,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
176
- "input": {
177
- "base": "{\"drop\":2,\"keep\":1}",
178
- "contract": "feltdb.state.conflict",
179
- "left": "{\"drop\":2,\"keep\":1,\"new\":3}",
180
- "right": "{\"keep\":1}",
181
- "version": 2
182
- },
183
- "name": "left_adds_right_removes_elsewhere",
184
- "why": "an addition and a removal at unrelated paths"
185
- },
186
- {
187
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":3}}\",\"version\":2}",
188
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
189
- "input": {
190
- "base": "{\"o\":{\"a\":1}}",
191
- "contract": "feltdb.state.conflict",
192
- "left": "{\"o\":{\"a\":2}}",
193
- "right": "{\"o\":{\"a\":3}}",
194
- "version": 2
195
- },
196
- "name": "relation_same_disagreeing",
197
- "why": "same path, different values: Conflict"
198
- },
199
- {
200
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
201
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
202
- "input": {
203
- "base": "{\"o\":{\"a\":1}}",
204
- "contract": "feltdb.state.conflict",
205
- "left": "{\"o\":{\"a\":2}}",
206
- "right": "{\"o\":{\"a\":2}}",
207
- "version": 2
208
- },
209
- "name": "relation_same_agreeing",
210
- "why": "same path, same value: Convergent"
211
- },
212
- {
213
- "canonical_input": "{\"base\":\"{\\\"o\\\":{}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
214
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
215
- "input": {
216
- "base": "{\"o\":{}}",
217
- "contract": "feltdb.state.conflict",
218
- "left": "{\"o\":{\"a\":1}}",
219
- "right": "{\"o\":{\"a\":2}}",
220
- "version": 2
221
- },
222
- "name": "relation_same_added_disagreeing",
223
- "why": "both add the same member differently"
224
- },
225
- {
226
- "canonical_input": "{\"base\":\"{\\\"o\\\":{}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"version\":2}",
227
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":1,\"right_value\":1}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
228
- "input": {
229
- "base": "{\"o\":{}}",
230
- "contract": "feltdb.state.conflict",
231
- "left": "{\"o\":{\"a\":1}}",
232
- "right": "{\"o\":{\"a\":1}}",
233
- "version": 2
234
- },
235
- "name": "relation_same_added_agreeing",
236
- "why": "both add the same member identically"
237
- },
238
- {
239
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{}}\",\"right\":\"{\\\"o\\\":{}}\",\"version\":2}",
240
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
241
- "input": {
242
- "base": "{\"o\":{\"a\":1}}",
243
- "contract": "feltdb.state.conflict",
244
- "left": "{\"o\":{}}",
245
- "right": "{\"o\":{}}",
246
- "version": 2
247
- },
248
- "name": "relation_same_removed_both",
249
- "why": "both remove the same member"
250
- },
251
- {
252
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
253
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
254
- "input": {
255
- "base": "{\"o\":{\"a\":1}}",
256
- "contract": "feltdb.state.conflict",
257
- "left": "{\"o\":{}}",
258
- "right": "{\"o\":{\"a\":2}}",
259
- "version": 2
260
- },
261
- "name": "relation_same_removed_vs_changed",
262
- "why": "removal against modification at one path"
263
- },
264
- {
265
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":7}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
266
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
267
- "input": {
268
- "base": "{\"o\":{\"a\":1}}",
269
- "contract": "feltdb.state.conflict",
270
- "left": "{\"o\":7}",
271
- "right": "{\"o\":{\"a\":2}}",
272
- "version": 2
273
- },
274
- "name": "relation_ancestor_replaced_scalar",
275
- "why": "THE REPORTED DEFECT: left replaces the parent with a scalar while right edits the child"
276
- },
277
- {
278
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
279
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
280
- "input": {
281
- "base": "{\"o\":{\"a\":1}}",
282
- "contract": "feltdb.state.conflict",
283
- "left": "{}",
284
- "right": "{\"o\":{\"a\":2}}",
285
- "version": 2
286
- },
287
- "name": "relation_ancestor_removed",
288
- "why": "left removes the parent while right edits the child"
289
- },
290
- {
291
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":[1]}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
292
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":[1],\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
293
- "input": {
294
- "base": "{\"o\":{\"a\":1}}",
295
- "contract": "feltdb.state.conflict",
296
- "left": "{\"o\":[1]}",
297
- "right": "{\"o\":{\"a\":2}}",
298
- "version": 2
299
- },
300
- "name": "relation_ancestor_replaced_array",
301
- "why": "left turns the parent into an array while right edits the child"
302
- },
303
- {
304
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":null}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
305
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
306
- "input": {
307
- "base": "{\"o\":{\"a\":1}}",
308
- "contract": "feltdb.state.conflict",
309
- "left": "{\"o\":null}",
310
- "right": "{\"o\":{\"a\":2}}",
311
- "version": 2
312
- },
313
- "name": "relation_ancestor_replaced_null",
314
- "why": "left nulls the parent while right edits the child"
315
- },
316
- {
317
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":1}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"flat\\\"}\",\"right\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":2}}}\",\"version\":2}",
318
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"m\":{\"a\":1}},\"left_value\":\"flat\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"m\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
319
- "input": {
320
- "base": "{\"o\":{\"m\":{\"a\":1}}}",
321
- "contract": "feltdb.state.conflict",
322
- "left": "{\"o\":\"flat\"}",
323
- "right": "{\"o\":{\"m\":{\"a\":2}}}",
324
- "version": 2
325
- },
326
- "name": "relation_ancestor_two_levels",
327
- "why": "left replaces a grandparent while right edits the grandchild"
328
- },
329
- {
330
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1]\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
331
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Conflict\",\"base_value\":{\"o\":{\"a\":1}},\"left_value\":[1],\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
332
- "input": {
333
- "base": "{\"o\":{\"a\":1}}",
334
- "contract": "feltdb.state.conflict",
335
- "left": "[1]",
336
- "right": "{\"o\":{\"a\":2}}",
337
- "version": 2
338
- },
339
- "name": "relation_ancestor_at_root",
340
- "why": "left replaces the whole state while right edits a member"
341
- },
342
- {
343
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":1,\\\"c\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":7}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2,\\\"b\\\":2,\\\"c\\\":2}}\",\"version\":2}",
344
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1,\"b\":1,\"c\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"b\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"c\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
345
- "input": {
346
- "base": "{\"o\":{\"a\":1,\"b\":1,\"c\":1}}",
347
- "contract": "feltdb.state.conflict",
348
- "left": "{\"o\":7}",
349
- "right": "{\"o\":{\"a\":2,\"b\":2,\"c\":2}}",
350
- "version": 2
351
- },
352
- "name": "relation_ancestor_over_several_descendants",
353
- "why": "one parent replacement against several descendant edits"
354
- },
355
- {
356
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{\\\"o\\\":7}\",\"version\":2}",
357
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":7},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
358
- "input": {
359
- "base": "{\"o\":{\"a\":1}}",
360
- "contract": "feltdb.state.conflict",
361
- "left": "{\"o\":{\"a\":2}}",
362
- "right": "{\"o\":7}",
363
- "version": 2
364
- },
365
- "name": "relation_descendant_replaced_scalar",
366
- "why": "the mirror of the reported defect"
367
- },
368
- {
369
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{}\",\"version\":2}",
370
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
371
- "input": {
372
- "base": "{\"o\":{\"a\":1}}",
373
- "contract": "feltdb.state.conflict",
374
- "left": "{\"o\":{\"a\":2}}",
375
- "right": "{}",
376
- "version": 2
377
- },
378
- "name": "relation_descendant_removed",
379
- "why": "right removes the parent while left edits the child"
380
- },
381
- {
382
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":1}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":2}}}\",\"right\":\"{\\\"o\\\":\\\"flat\\\"}\",\"version\":2}",
383
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"m\":{\"a\":1}},\"left_value\":null,\"right_value\":\"flat\"},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"m\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
384
- "input": {
385
- "base": "{\"o\":{\"m\":{\"a\":1}}}",
386
- "contract": "feltdb.state.conflict",
387
- "left": "{\"o\":{\"m\":{\"a\":2}}}",
388
- "right": "{\"o\":\"flat\"}",
389
- "version": 2
390
- },
391
- "name": "relation_descendant_two_levels",
392
- "why": "right replaces a grandparent while left edits the grandchild"
393
- },
394
- {
395
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2,\\\"b\\\":1}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":2}}\",\"version\":2}",
396
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
397
- "input": {
398
- "base": "{\"o\":{\"a\":1,\"b\":1}}",
399
- "contract": "feltdb.state.conflict",
400
- "left": "{\"o\":{\"a\":2,\"b\":1}}",
401
- "right": "{\"o\":{\"a\":1,\"b\":2}}",
402
- "version": 2
403
- },
404
- "name": "relation_disjoint_siblings",
405
- "why": "sibling members do not overlap"
406
- },
407
- {
408
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"b\\\":1,\\\"bc\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"b\\\":2,\\\"bc\\\":1}}\",\"right\":\"{\\\"a\\\":{\\\"b\\\":1,\\\"bc\\\":2}}\",\"version\":2}",
409
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"a\"},{\"Key\":\"bc\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
410
- "input": {
411
- "base": "{\"a\":{\"b\":1,\"bc\":1}}",
412
- "contract": "feltdb.state.conflict",
413
- "left": "{\"a\":{\"b\":2,\"bc\":1}}",
414
- "right": "{\"a\":{\"b\":1,\"bc\":2}}",
415
- "version": 2
416
- },
417
- "name": "relation_disjoint_string_prefix",
418
- "why": "a.b and a.bc are disjoint: components are compared whole, not as strings"
419
- },
420
- {
421
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"x\\\":1,\\\"xyz\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"x\\\":2,\\\"xyz\\\":1}}\",\"right\":\"{\\\"a\\\":{\\\"x\\\":1,\\\"xyz\\\":2}}\",\"version\":2}",
422
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"a\"},{\"Key\":\"xyz\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
423
- "input": {
424
- "base": "{\"a\":{\"x\":1,\"xyz\":1}}",
425
- "contract": "feltdb.state.conflict",
426
- "left": "{\"a\":{\"x\":2,\"xyz\":1}}",
427
- "right": "{\"a\":{\"x\":1,\"xyz\":2}}",
428
- "version": 2
429
- },
430
- "name": "relation_disjoint_longer_string_prefix",
431
- "why": "the same, where one key is a strict string prefix of the other"
432
- },
433
- {
434
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"0\\\":1},\\\"b\\\":[1]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"0\\\":2},\\\"b\\\":[1]}\",\"right\":\"{\\\"a\\\":{\\\"0\\\":1},\\\"b\\\":[2]}\",\"version\":2}",
435
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"0\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"b\"},{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
436
- "input": {
437
- "base": "{\"a\":{\"0\":1},\"b\":[1]}",
438
- "contract": "feltdb.state.conflict",
439
- "left": "{\"a\":{\"0\":2},\"b\":[1]}",
440
- "right": "{\"a\":{\"0\":1},\"b\":[2]}",
441
- "version": 2
442
- },
443
- "name": "relation_disjoint_key_against_index",
444
- "why": "a Key component never matches an Index component"
445
- },
446
- {
447
- "canonical_input": "{\"base\":\"{\\\"l\\\":{\\\"x\\\":1},\\\"r\\\":{\\\"y\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"l\\\":{\\\"x\\\":2},\\\"r\\\":{\\\"y\\\":1}}\",\"right\":\"{\\\"l\\\":{\\\"x\\\":1},\\\"r\\\":{\\\"y\\\":2}}\",\"version\":2}",
448
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"l\"},{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"r\"},{\"Key\":\"y\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
449
- "input": {
450
- "base": "{\"l\":{\"x\":1},\"r\":{\"y\":1}}",
451
- "contract": "feltdb.state.conflict",
452
- "left": "{\"l\":{\"x\":2},\"r\":{\"y\":1}}",
453
- "right": "{\"l\":{\"x\":1},\"r\":{\"y\":2}}",
454
- "version": 2
455
- },
456
- "name": "relation_disjoint_unrelated_subtrees",
457
- "why": "changes in wholly separate subtrees"
458
- },
459
- {
460
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"x\\\":1,\\\"y\\\":1}}}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"x\\\":2,\\\"y\\\":1}}}}}\",\"right\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"x\\\":1,\\\"y\\\":2}}}}}\",\"version\":2}",
461
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"},{\"Key\":\"c\"},{\"Key\":\"d\"},{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"},{\"Key\":\"c\"},{\"Key\":\"d\"},{\"Key\":\"y\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
462
- "input": {
463
- "base": "{\"a\":{\"b\":{\"c\":{\"d\":{\"x\":1,\"y\":1}}}}}",
464
- "contract": "feltdb.state.conflict",
465
- "left": "{\"a\":{\"b\":{\"c\":{\"d\":{\"x\":2,\"y\":1}}}}}",
466
- "right": "{\"a\":{\"b\":{\"c\":{\"d\":{\"x\":1,\"y\":2}}}}}",
467
- "version": 2
468
- },
469
- "name": "relation_disjoint_deep_siblings",
470
- "why": "sibling leaves five levels down"
471
- },
472
- {
473
- "canonical_input": "{\"base\":\"{\\\"far\\\":1,\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"far\\\":1,\\\"o\\\":7}\",\"right\":\"{\\\"far\\\":2,\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
474
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"far\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
475
- "input": {
476
- "base": "{\"far\":1,\"o\":{\"a\":1}}",
477
- "contract": "feltdb.state.conflict",
478
- "left": "{\"far\":1,\"o\":7}",
479
- "right": "{\"far\":2,\"o\":{\"a\":2}}",
480
- "version": 2
481
- },
482
- "name": "relation_overlap_alongside_independent",
483
- "why": "an overlap in one subtree does not make an unrelated change conflict"
484
- },
485
- {
486
- "canonical_input": "{\"base\":\"{\\\"far\\\":1,\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"far\\\":2,\\\"o\\\":7}\",\"right\":\"{\\\"far\\\":2,\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
487
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"far\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2},{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
488
- "input": {
489
- "base": "{\"far\":1,\"o\":{\"a\":1}}",
490
- "contract": "feltdb.state.conflict",
491
- "left": "{\"far\":2,\"o\":7}",
492
- "right": "{\"far\":2,\"o\":{\"a\":2}}",
493
- "version": 2
494
- },
495
- "name": "relation_overlap_alongside_convergent",
496
- "why": "an overlap alongside an agreeing change elsewhere"
497
- },
498
- {
499
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"s\\\"}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
500
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":\"s\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
501
- "input": {
502
- "base": "{\"o\":{\"a\":1}}",
503
- "contract": "feltdb.state.conflict",
504
- "left": "{\"o\":\"s\"}",
505
- "right": "{\"o\":{\"a\":2}}",
506
- "version": 2
507
- },
508
- "name": "relation_parent_object_to_scalar",
509
- "why": "object to scalar over a child edit"
510
- },
511
- {
512
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":[]}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
513
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":[],\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
514
- "input": {
515
- "base": "{\"o\":{\"a\":1}}",
516
- "contract": "feltdb.state.conflict",
517
- "left": "{\"o\":[]}",
518
- "right": "{\"o\":{\"a\":2}}",
519
- "version": 2
520
- },
521
- "name": "relation_parent_object_to_array",
522
- "why": "object to array over a child edit"
523
- },
524
- {
525
- "canonical_input": "{\"base\":\"{\\\"o\\\":[1]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"0\\\":1}}\",\"right\":\"{\\\"o\\\":[2]}\",\"version\":2}",
526
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":[1],\"left_value\":{\"0\":1},\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
527
- "input": {
528
- "base": "{\"o\":[1]}",
529
- "contract": "feltdb.state.conflict",
530
- "left": "{\"o\":{\"0\":1}}",
531
- "right": "{\"o\":[2]}",
532
- "version": 2
533
- },
534
- "name": "relation_parent_array_to_object",
535
- "why": "array to object over an element edit"
536
- },
537
- {
538
- "canonical_input": "{\"base\":\"{\\\"o\\\":[1]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"s\\\"}\",\"right\":\"{\\\"o\\\":[2]}\",\"version\":2}",
539
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":[1],\"left_value\":\"s\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
540
- "input": {
541
- "base": "{\"o\":[1]}",
542
- "contract": "feltdb.state.conflict",
543
- "left": "{\"o\":\"s\"}",
544
- "right": "{\"o\":[2]}",
545
- "version": 2
546
- },
547
- "name": "relation_parent_array_to_scalar",
548
- "why": "array to scalar over an element edit"
549
- },
550
- {
551
- "canonical_input": "{\"base\":\"{\\\"o\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"right\":\"{\\\"o\\\":2}\",\"version\":2}",
552
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":{\"a\":1},\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
553
- "input": {
554
- "base": "{\"o\":1}",
555
- "contract": "feltdb.state.conflict",
556
- "left": "{\"o\":{\"a\":1}}",
557
- "right": "{\"o\":2}",
558
- "version": 2
559
- },
560
- "name": "relation_parent_scalar_to_object",
561
- "why": "a scalar base cannot have a descendant edit"
562
- },
563
- {
564
- "canonical_input": "{\"base\":\"{\\\"o\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":[1]}\",\"right\":\"{\\\"o\\\":2}\",\"version\":2}",
565
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":[1],\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
566
- "input": {
567
- "base": "{\"o\":1}",
568
- "contract": "feltdb.state.conflict",
569
- "left": "{\"o\":[1]}",
570
- "right": "{\"o\":2}",
571
- "version": 2
572
- },
573
- "name": "relation_parent_scalar_to_array",
574
- "why": "the same, becoming an array"
575
- },
576
- {
577
- "canonical_input": "{\"base\":\"[1,2,3]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[9,2,3]\",\"right\":\"[8,2,3]\",\"version\":2}",
578
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":9,\"right_value\":8}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
579
- "input": {
580
- "base": "[1,2,3]",
581
- "contract": "feltdb.state.conflict",
582
- "left": "[9,2,3]",
583
- "right": "[8,2,3]",
584
- "version": 2
585
- },
586
- "name": "relation_array_same_index",
587
- "why": "the same index edited by both branches"
588
- },
589
- {
590
- "canonical_input": "{\"base\":\"[1,2,3]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[9,2,3]\",\"right\":\"[1,8,3]\",\"version\":2}",
591
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":9,\"right_value\":null},{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":8}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
592
- "input": {
593
- "base": "[1,2,3]",
594
- "contract": "feltdb.state.conflict",
595
- "left": "[9,2,3]",
596
- "right": "[1,8,3]",
597
- "version": 2
598
- },
599
- "name": "relation_array_different_indexes",
600
- "why": "different indexes stay independent: under positional semantics both edits survive"
601
- },
602
- {
603
- "canonical_input": "{\"base\":\"[{\\\"a\\\":1}]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[]\",\"right\":\"[{\\\"a\\\":2}]\",\"version\":2}",
604
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":null},{\"path\":[{\"Index\":0},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
605
- "input": {
606
- "base": "[{\"a\":1}]",
607
- "contract": "feltdb.state.conflict",
608
- "left": "[]",
609
- "right": "[{\"a\":2}]",
610
- "version": 2
611
- },
612
- "name": "relation_array_element_removed_vs_edited_inside",
613
- "why": "removing an element while the other branch edits inside it is an overlap"
614
- },
615
- {
616
- "canonical_input": "{\"base\":\"[{\\\"a\\\":1}]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[7]\",\"right\":\"[{\\\"a\\\":2}]\",\"version\":2}",
617
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Index\":0},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
618
- "input": {
619
- "base": "[{\"a\":1}]",
620
- "contract": "feltdb.state.conflict",
621
- "left": "[7]",
622
- "right": "[{\"a\":2}]",
623
- "version": 2
624
- },
625
- "name": "relation_array_element_replaced_vs_edited_inside",
626
- "why": "replacing an element with a scalar while the other branch edits inside it"
627
- },
628
- {
629
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,9]\",\"right\":\"[1,2,3]\",\"version\":2}",
630
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":9,\"right_value\":null},{\"path\":[{\"Index\":2}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":null,\"right_value\":3}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
631
- "input": {
632
- "base": "[1,2]",
633
- "contract": "feltdb.state.conflict",
634
- "left": "[1,9]",
635
- "right": "[1,2,3]",
636
- "version": 2
637
- },
638
- "name": "relation_array_append_vs_edit_elsewhere",
639
- "why": "an append and an edit at a different index"
640
- },
641
- {
642
- "canonical_input": "{\"base\":\"[1]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1,2]\",\"version\":2}",
643
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
644
- "input": {
645
- "base": "[1]",
646
- "contract": "feltdb.state.conflict",
647
- "left": "[1,2]",
648
- "right": "[1,2]",
649
- "version": 2
650
- },
651
- "name": "relation_array_append_both_agreeing",
652
- "why": "both branches append the same element"
653
- },
654
- {
655
- "canonical_input": "{\"base\":\"[1]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1,3]\",\"version\":2}",
656
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
657
- "input": {
658
- "base": "[1]",
659
- "contract": "feltdb.state.conflict",
660
- "left": "[1,2]",
661
- "right": "[1,3]",
662
- "version": 2
663
- },
664
- "name": "relation_array_append_both_disagreeing",
665
- "why": "both branches append different elements"
666
- },
667
- {
668
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[0,1,2]\",\"right\":\"[1,9]\",\"version\":2}",
669
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":0,\"right_value\":null},{\"path\":[{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":2,\"left_value\":1,\"right_value\":9},{\"path\":[{\"Index\":2}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
670
- "input": {
671
- "base": "[1,2]",
672
- "contract": "feltdb.state.conflict",
673
- "left": "[0,1,2]",
674
- "right": "[1,9]",
675
- "version": 2
676
- },
677
- "name": "relation_array_prepend_vs_index_edit",
678
- "why": "a prepend is positional, so it touches the index the other branch edited"
679
- },
680
- {
681
- "canonical_input": "{\"base\":\"[1,2,3]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1,9,3]\",\"version\":2}",
682
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":9},{\"path\":[{\"Index\":2}],\"classification\":\"Independent\",\"base_value\":3,\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
683
- "input": {
684
- "base": "[1,2,3]",
685
- "contract": "feltdb.state.conflict",
686
- "left": "[1,2]",
687
- "right": "[1,9,3]",
688
- "version": 2
689
- },
690
- "name": "relation_array_removal_vs_earlier_index_edit",
691
- "why": "a tail removal and an edit at an untouched earlier index"
692
- },
693
- {
694
- "canonical_input": "{\"base\":\"{\\\"o\\\":[1,2]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"flat\\\"}\",\"right\":\"{\\\"o\\\":[1,9]}\",\"version\":2}",
695
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":[1,2],\"left_value\":\"flat\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":2,\"left_value\":null,\"right_value\":9}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
696
- "input": {
697
- "base": "{\"o\":[1,2]}",
698
- "contract": "feltdb.state.conflict",
699
- "left": "{\"o\":\"flat\"}",
700
- "right": "{\"o\":[1,9]}",
701
- "version": 2
702
- },
703
- "name": "relation_array_whole_replacement_vs_index_edit",
704
- "why": "replacing the array wholesale against editing one of its elements"
705
- },
706
- {
707
- "canonical_input": "{\"base\":\"{\\\"o\\\":[{\\\"a\\\":1}]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":[7]}\",\"right\":\"{\\\"o\\\":[{\\\"a\\\":2}]}\",\"version\":2}",
708
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":7,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Index\":0},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
709
- "input": {
710
- "base": "{\"o\":[{\"a\":1}]}",
711
- "contract": "feltdb.state.conflict",
712
- "left": "{\"o\":[7]}",
713
- "right": "{\"o\":[{\"a\":2}]}",
714
- "version": 2
715
- },
716
- "name": "relation_array_nested_deeper",
717
- "why": "an overlap two container levels down"
718
- },
719
- {
720
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":3}\",\"version\":2}",
721
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
722
- "input": {
723
- "base": "{\"x\":1}",
724
- "contract": "feltdb.state.conflict",
725
- "left": "{\"x\":2}",
726
- "right": "{\"x\":3}",
727
- "version": 2
728
- },
729
- "name": "same_path_different_values",
730
- "why": "the canonical conflict"
731
- },
732
- {
733
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":3}}\",\"version\":2}",
734
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
735
- "input": {
736
- "base": "{\"o\":{\"a\":1}}",
737
- "contract": "feltdb.state.conflict",
738
- "left": "{\"o\":{\"a\":2}}",
739
- "right": "{\"o\":{\"a\":3}}",
740
- "version": 2
741
- },
742
- "name": "same_nested_path_different_values",
743
- "why": "a conflict one level down"
744
- },
745
- {
746
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"replaced\\\"}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"version\":2}",
747
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":\"replaced\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
748
- "input": {
749
- "base": "{\"o\":{\"a\":1}}",
750
- "contract": "feltdb.state.conflict",
751
- "left": "{\"o\":\"replaced\"}",
752
- "right": "{\"o\":{\"a\":2}}",
753
- "version": 2
754
- },
755
- "name": "parent_changed_vs_child_changed",
756
- "why": "replacing a subtree while the other side edits inside it: an overlap, so a conflict"
757
- },
758
- {
759
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":2}}\",\"right\":\"{\\\"o\\\":\\\"replaced\\\"}\",\"version\":2}",
760
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":null,\"right_value\":\"replaced\"},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
761
- "input": {
762
- "base": "{\"o\":{\"a\":1}}",
763
- "contract": "feltdb.state.conflict",
764
- "left": "{\"o\":{\"a\":2}}",
765
- "right": "{\"o\":\"replaced\"}",
766
- "version": 2
767
- },
768
- "name": "child_changed_vs_parent_changed",
769
- "why": "and the mirror conflicts too"
770
- },
771
- {
772
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":1}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":\\\"flat\\\"}\",\"right\":\"{\\\"o\\\":{\\\"m\\\":{\\\"a\\\":2}}}\",\"version\":2}",
773
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"}],\"classification\":\"Conflict\",\"base_value\":{\"m\":{\"a\":1}},\"left_value\":\"flat\",\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"m\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
774
- "input": {
775
- "base": "{\"o\":{\"m\":{\"a\":1}}}",
776
- "contract": "feltdb.state.conflict",
777
- "left": "{\"o\":\"flat\"}",
778
- "right": "{\"o\":{\"m\":{\"a\":2}}}",
779
- "version": 2
780
- },
781
- "name": "grandparent_vs_grandchild",
782
- "why": "the same overlap two levels apart"
783
- },
784
- {
785
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
786
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
787
- "input": {
788
- "base": "{}",
789
- "contract": "feltdb.state.conflict",
790
- "left": "{\"x\":1}",
791
- "right": "{\"x\":2}",
792
- "version": 2
793
- },
794
- "name": "addition_vs_addition_different",
795
- "why": "both sides add the same member differently"
796
- },
797
- {
798
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
799
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":1,\"right_value\":1}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
800
- "input": {
801
- "base": "{}",
802
- "contract": "feltdb.state.conflict",
803
- "left": "{\"x\":1}",
804
- "right": "{\"x\":1}",
805
- "version": 2
806
- },
807
- "name": "addition_vs_addition_identical",
808
- "why": "both sides add the same member identically"
809
- },
810
- {
811
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
812
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
813
- "input": {
814
- "base": "{\"x\":1}",
815
- "contract": "feltdb.state.conflict",
816
- "left": "{}",
817
- "right": "{\"x\":2}",
818
- "version": 2
819
- },
820
- "name": "removal_vs_modification",
821
- "why": "differing kinds conflict even where a merge might reconcile"
822
- },
823
- {
824
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{}\",\"version\":2}",
825
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
826
- "input": {
827
- "base": "{\"x\":1}",
828
- "contract": "feltdb.state.conflict",
829
- "left": "{\"x\":2}",
830
- "right": "{}",
831
- "version": 2
832
- },
833
- "name": "modification_vs_removal",
834
- "why": "and its mirror"
835
- },
836
- {
837
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
838
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
839
- "input": {
840
- "base": "{\"x\":1}",
841
- "contract": "feltdb.state.conflict",
842
- "left": "{}",
843
- "right": "{}",
844
- "version": 2
845
- },
846
- "name": "removal_vs_removal",
847
- "why": "both sides removing agree, because kind and new value both match"
848
- },
849
- {
850
- "canonical_input": "{\"base\":\"{\\\"x\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":5}\",\"right\":\"{\\\"x\\\":{\\\"a\\\":2}}\",\"version\":2}",
851
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":5,\"right_value\":null},{\"path\":[{\"Key\":\"x\"},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
852
- "input": {
853
- "base": "{\"x\":{\"a\":1}}",
854
- "contract": "feltdb.state.conflict",
855
- "left": "{\"x\":5}",
856
- "right": "{\"x\":{\"a\":2}}",
857
- "version": 2
858
- },
859
- "name": "object_to_scalar_vs_scalar_change",
860
- "why": "a type transition against an ordinary edit at the same path"
861
- },
862
- {
863
- "canonical_input": "{\"base\":\"{\\\"x\\\":{\\\"a\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":[]}\",\"right\":\"{\\\"x\\\":[1]}\",\"version\":2}",
864
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":{\"a\":1},\"left_value\":[],\"right_value\":[1]}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
865
- "input": {
866
- "base": "{\"x\":{\"a\":1}}",
867
- "contract": "feltdb.state.conflict",
868
- "left": "{\"x\":[]}",
869
- "right": "{\"x\":[1]}",
870
- "version": 2
871
- },
872
- "name": "object_vs_array_at_same_path",
873
- "why": "two different type transitions at one path"
874
- },
875
- {
876
- "canonical_input": "{\"base\":\"{\\\"x\\\":[1,2]}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":\\\"flat\\\"}\",\"right\":\"{\\\"x\\\":[1,3]}\",\"version\":2}",
877
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":[1,2],\"left_value\":\"flat\",\"right_value\":null},{\"path\":[{\"Key\":\"x\"},{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":2,\"left_value\":null,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
878
- "input": {
879
- "base": "{\"x\":[1,2]}",
880
- "contract": "feltdb.state.conflict",
881
- "left": "{\"x\":\"flat\"}",
882
- "right": "{\"x\":[1,3]}",
883
- "version": 2
884
- },
885
- "name": "array_to_scalar_vs_array_edit",
886
- "why": "replacing an array against editing inside it, at one path"
887
- },
888
- {
889
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":{\\\"a\\\":1}}\",\"right\":\"{\\\"x\\\":[1]}\",\"version\":2}",
890
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":{\"a\":1},\"right_value\":[1]}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
891
- "input": {
892
- "base": "{\"x\":1}",
893
- "contract": "feltdb.state.conflict",
894
- "left": "{\"x\":{\"a\":1}}",
895
- "right": "{\"x\":[1]}",
896
- "version": 2
897
- },
898
- "name": "scalar_to_object_vs_scalar_to_array",
899
- "why": "one path, two incompatible new shapes"
900
- },
901
- {
902
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":{\\\"a\\\":1}}\",\"right\":\"{\\\"x\\\":{\\\"a\\\":1}}\",\"version\":2}",
903
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":{\"a\":1},\"right_value\":{\"a\":1}}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
904
- "input": {
905
- "base": "{\"x\":1}",
906
- "contract": "feltdb.state.conflict",
907
- "left": "{\"x\":{\"a\":1}}",
908
- "right": "{\"x\":{\"a\":1}}",
909
- "version": 2
910
- },
911
- "name": "same_type_transition_both_sides",
912
- "why": "identical type transitions converge"
913
- },
914
- {
915
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":null}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
916
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":null,\"right_value\":1}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
917
- "input": {
918
- "base": "{}",
919
- "contract": "feltdb.state.conflict",
920
- "left": "{\"x\":null}",
921
- "right": "{\"x\":1}",
922
- "version": 2
923
- },
924
- "name": "missing_vs_null",
925
- "why": "adding a member as null against adding it as a value"
926
- },
927
- {
928
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{}\",\"version\":2}",
929
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":1,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
930
- "input": {
931
- "base": "{}",
932
- "contract": "feltdb.state.conflict",
933
- "left": "{\"x\":1}",
934
- "right": "{}",
935
- "version": 2
936
- },
937
- "name": "missing_vs_value_one_side",
938
- "why": "only one side adds"
939
- },
940
- {
941
- "canonical_input": "{\"base\":\"{\\\"x\\\":null}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
942
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
943
- "input": {
944
- "base": "{\"x\":null}",
945
- "contract": "feltdb.state.conflict",
946
- "left": "{\"x\":1}",
947
- "right": "{\"x\":2}",
948
- "version": 2
949
- },
950
- "name": "null_vs_value",
951
- "why": "both sides change away from null, differently"
952
- },
953
- {
954
- "canonical_input": "{\"base\":\"{\\\"x\\\":null}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
955
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":1,\"right_value\":1}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
956
- "input": {
957
- "base": "{\"x\":null}",
958
- "contract": "feltdb.state.conflict",
959
- "left": "{\"x\":1}",
960
- "right": "{\"x\":1}",
961
- "version": 2
962
- },
963
- "name": "null_vs_value_agreeing",
964
- "why": "both sides change away from null, identically"
965
- },
966
- {
967
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":null}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
968
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
969
- "input": {
970
- "base": "{\"x\":1}",
971
- "contract": "feltdb.state.conflict",
972
- "left": "{\"x\":null}",
973
- "right": "{\"x\":2}",
974
- "version": 2
975
- },
976
- "name": "value_vs_null",
977
- "why": "one side nulls the member, the other changes it"
978
- },
979
- {
980
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":null}\",\"right\":\"{\\\"x\\\":null}\",\"version\":2}",
981
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
982
- "input": {
983
- "base": "{\"x\":1}",
984
- "contract": "feltdb.state.conflict",
985
- "left": "{\"x\":null}",
986
- "right": "{\"x\":null}",
987
- "version": 2
988
- },
989
- "name": "value_to_null_both_sides",
990
- "why": "both sides null the member"
991
- },
992
- {
993
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{\\\"x\\\":null}\",\"version\":2}",
994
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
995
- "input": {
996
- "base": "{\"x\":1}",
997
- "contract": "feltdb.state.conflict",
998
- "left": "{}",
999
- "right": "{\"x\":null}",
1000
- "version": 2
1001
- },
1002
- "name": "removal_vs_null_insertion",
1003
- "why": "removing against setting to null is a kind mismatch"
1004
- },
1005
- {
1006
- "canonical_input": "{\"base\":\"{\\\"x\\\":null}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1007
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1008
- "input": {
1009
- "base": "{\"x\":null}",
1010
- "contract": "feltdb.state.conflict",
1011
- "left": "{}",
1012
- "right": "{}",
1013
- "version": 2
1014
- },
1015
- "name": "null_base_removed_both_sides",
1016
- "why": "removing a null member from both sides"
1017
- },
1018
- {
1019
- "canonical_input": "{\"base\":\"{\\\"x\\\":null}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{\\\"x\\\":null}\",\"version\":2}",
1020
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1021
- "input": {
1022
- "base": "{\"x\":null}",
1023
- "contract": "feltdb.state.conflict",
1024
- "left": "{}",
1025
- "right": "{\"x\":null}",
1026
- "version": 2
1027
- },
1028
- "name": "null_base_removed_one_side",
1029
- "why": "removing a null member from one side"
1030
- },
1031
- {
1032
- "canonical_input": "{\"base\":\"{\\\"o\\\":{\\\"a\\\":null,\\\"b\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"o\\\":{\\\"a\\\":1,\\\"b\\\":null}}\",\"right\":\"{\\\"o\\\":{\\\"a\\\":null}}\",\"version\":2}",
1033
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"o\"},{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":1,\"right_value\":null},{\"path\":[{\"Key\":\"o\"},{\"Key\":\"b\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1034
- "input": {
1035
- "base": "{\"o\":{\"a\":null,\"b\":1}}",
1036
- "contract": "feltdb.state.conflict",
1037
- "left": "{\"o\":{\"a\":1,\"b\":null}}",
1038
- "right": "{\"o\":{\"a\":null}}",
1039
- "version": 2
1040
- },
1041
- "name": "nested_null_and_missing_together",
1042
- "why": "several null and absence transitions at once"
1043
- },
1044
- {
1045
- "canonical_input": "{\"base\":\"{\\\"n\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":42}\",\"right\":\"{\\\"n\\\":42.0}\",\"version\":2}",
1046
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":42,\"right_value\":42.0}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1047
- "input": {
1048
- "base": "{\"n\":1}",
1049
- "contract": "feltdb.state.conflict",
1050
- "left": "{\"n\":42}",
1051
- "right": "{\"n\":42.0}",
1052
- "version": 2
1053
- },
1054
- "name": "integer_vs_float_same_magnitude",
1055
- "why": "42 and 42.0 are different values, so the sides conflict"
1056
- },
1057
- {
1058
- "canonical_input": "{\"base\":\"{\\\"n\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":42}\",\"right\":\"{\\\"n\\\":42}\",\"version\":2}",
1059
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":42,\"right_value\":42}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1060
- "input": {
1061
- "base": "{\"n\":1}",
1062
- "contract": "feltdb.state.conflict",
1063
- "left": "{\"n\":42}",
1064
- "right": "{\"n\":42}",
1065
- "version": 2
1066
- },
1067
- "name": "identical_integer_change",
1068
- "why": "the same integer on both sides converges"
1069
- },
1070
- {
1071
- "canonical_input": "{\"base\":\"{\\\"n\\\":1.0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":2.5}\",\"right\":\"{\\\"n\\\":2.5}\",\"version\":2}",
1072
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Convergent\",\"base_value\":1.0,\"left_value\":2.5,\"right_value\":2.5}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1073
- "input": {
1074
- "base": "{\"n\":1.0}",
1075
- "contract": "feltdb.state.conflict",
1076
- "left": "{\"n\":2.5}",
1077
- "right": "{\"n\":2.5}",
1078
- "version": 2
1079
- },
1080
- "name": "identical_float_change",
1081
- "why": "the same float on both sides converges"
1082
- },
1083
- {
1084
- "canonical_input": "{\"base\":\"{\\\"n\\\":0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":1}\",\"right\":\"{\\\"n\\\":2}\",\"version\":2}",
1085
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1086
- "input": {
1087
- "base": "{\"n\":0}",
1088
- "contract": "feltdb.state.conflict",
1089
- "left": "{\"n\":1}",
1090
- "right": "{\"n\":2}",
1091
- "version": 2
1092
- },
1093
- "name": "numeric_replacement_conflict",
1094
- "why": "different numbers at one path"
1095
- },
1096
- {
1097
- "canonical_input": "{\"base\":\"{\\\"n\\\":0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":18446744073709551615}\",\"right\":\"{\\\"n\\\":-9223372036854775808}\",\"version\":2}",
1098
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":18446744073709551615,\"right_value\":-9223372036854775808}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1099
- "input": {
1100
- "base": "{\"n\":0}",
1101
- "contract": "feltdb.state.conflict",
1102
- "left": "{\"n\":18446744073709551615}",
1103
- "right": "{\"n\":-9223372036854775808}",
1104
- "version": 2
1105
- },
1106
- "name": "large_values",
1107
- "why": "u64 and i64 extremes survive the round trip"
1108
- },
1109
- {
1110
- "canonical_input": "{\"base\":\"{\\\"n\\\":0.0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":3.141592653589793}\",\"right\":\"{\\\"n\\\":2.718281828459045}\",\"version\":2}",
1111
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":0.0,\"left_value\":3.141592653589793,\"right_value\":2.718281828459045}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1112
- "input": {
1113
- "base": "{\"n\":0.0}",
1114
- "contract": "feltdb.state.conflict",
1115
- "left": "{\"n\":3.141592653589793}",
1116
- "right": "{\"n\":2.718281828459045}",
1117
- "version": 2
1118
- },
1119
- "name": "float_precision_conflict",
1120
- "why": "floats needing full precision are recorded exactly"
1121
- },
1122
- {
1123
- "canonical_input": "{\"base\":\"{\\\"n\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":0}\",\"right\":\"{\\\"n\\\":0.0}\",\"version\":2}",
1124
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":0,\"right_value\":0.0}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1125
- "input": {
1126
- "base": "{\"n\":1}",
1127
- "contract": "feltdb.state.conflict",
1128
- "left": "{\"n\":0}",
1129
- "right": "{\"n\":0.0}",
1130
- "version": 2
1131
- },
1132
- "name": "zero_vs_float_zero",
1133
- "why": "0 and 0.0 are different values"
1134
- },
1135
- {
1136
- "canonical_input": "{\"base\":\"{\\\"n\\\":42}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":42.0}\",\"right\":\"{\\\"n\\\":42}\",\"version\":2}",
1137
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Independent\",\"base_value\":42,\"left_value\":42.0,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1138
- "input": {
1139
- "base": "{\"n\":42}",
1140
- "contract": "feltdb.state.conflict",
1141
- "left": "{\"n\":42.0}",
1142
- "right": "{\"n\":42}",
1143
- "version": 2
1144
- },
1145
- "name": "branch_changes_only_the_numeric_variant",
1146
- "why": "42 to 42.0 is a change, so one branch moved and the other did not"
1147
- },
1148
- {
1149
- "canonical_input": "{\"base\":\"{\\\"n\\\":42}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":42.0}\",\"right\":\"{\\\"n\\\":42.0}\",\"version\":2}",
1150
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Convergent\",\"base_value\":42,\"left_value\":42.0,\"right_value\":42.0}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1151
- "input": {
1152
- "base": "{\"n\":42}",
1153
- "contract": "feltdb.state.conflict",
1154
- "left": "{\"n\":42.0}",
1155
- "right": "{\"n\":42.0}",
1156
- "version": 2
1157
- },
1158
- "name": "both_branches_change_only_the_numeric_variant",
1159
- "why": "both branches move 42 to 42.0, which is the same change on both sides"
1160
- },
1161
- {
1162
- "canonical_input": "{\"base\":\"{\\\"n\\\":0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":0.0}\",\"right\":\"{\\\"n\\\":0}\",\"version\":2}",
1163
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Independent\",\"base_value\":0,\"left_value\":0.0,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1164
- "input": {
1165
- "base": "{\"n\":0}",
1166
- "contract": "feltdb.state.conflict",
1167
- "left": "{\"n\":0.0}",
1168
- "right": "{\"n\":0}",
1169
- "version": 2
1170
- },
1171
- "name": "zero_variant_change_one_side",
1172
- "why": "0 to 0.0 is a change even though the magnitude is equal"
1173
- },
1174
- {
1175
- "canonical_input": "{\"base\":\"{\\\"n\\\":0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":\\\"1\\\"}\",\"right\":\"{\\\"n\\\":1}\",\"version\":2}",
1176
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":\"1\",\"right_value\":1}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1177
- "input": {
1178
- "base": "{\"n\":0}",
1179
- "contract": "feltdb.state.conflict",
1180
- "left": "{\"n\":\"1\"}",
1181
- "right": "{\"n\":1}",
1182
- "version": 2
1183
- },
1184
- "name": "numeric_string_vs_number",
1185
- "why": "\"1\" and 1 are a type transition on one side"
1186
- },
1187
- {
1188
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[9,2]\",\"right\":\"[8,2]\",\"version\":2}",
1189
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":9,\"right_value\":8}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1190
- "input": {
1191
- "base": "[1,2]",
1192
- "contract": "feltdb.state.conflict",
1193
- "left": "[9,2]",
1194
- "right": "[8,2]",
1195
- "version": 2
1196
- },
1197
- "name": "array_same_index_both_sides",
1198
- "why": "the same position edited differently conflicts"
1199
- },
1200
- {
1201
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[9,2]\",\"right\":\"[9,2]\",\"version\":2}",
1202
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":9,\"right_value\":9}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1203
- "input": {
1204
- "base": "[1,2]",
1205
- "contract": "feltdb.state.conflict",
1206
- "left": "[9,2]",
1207
- "right": "[9,2]",
1208
- "version": 2
1209
- },
1210
- "name": "array_same_index_agreeing",
1211
- "why": "the same position edited identically converges"
1212
- },
1213
- {
1214
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[9,2]\",\"right\":\"[1,8]\",\"version\":2}",
1215
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":9,\"right_value\":null},{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":8}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1216
- "input": {
1217
- "base": "[1,2]",
1218
- "contract": "feltdb.state.conflict",
1219
- "left": "[9,2]",
1220
- "right": "[1,8]",
1221
- "version": 2
1222
- },
1223
- "name": "array_different_indexes",
1224
- "why": "different positions are independent"
1225
- },
1226
- {
1227
- "canonical_input": "{\"base\":\"[1]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1,2]\",\"version\":2}",
1228
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1229
- "input": {
1230
- "base": "[1]",
1231
- "contract": "feltdb.state.conflict",
1232
- "left": "[1,2]",
1233
- "right": "[1,2]",
1234
- "version": 2
1235
- },
1236
- "name": "array_append_both_sides_same",
1237
- "why": "both sides appending the same element converges"
1238
- },
1239
- {
1240
- "canonical_input": "{\"base\":\"[1]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1,3]\",\"version\":2}",
1241
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1242
- "input": {
1243
- "base": "[1]",
1244
- "contract": "feltdb.state.conflict",
1245
- "left": "[1,2]",
1246
- "right": "[1,3]",
1247
- "version": 2
1248
- },
1249
- "name": "array_append_both_sides_different",
1250
- "why": "both sides appending different elements conflicts"
1251
- },
1252
- {
1253
- "canonical_input": "{\"base\":\"[1]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1,2]\",\"right\":\"[1]\",\"version\":2}",
1254
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":2,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1255
- "input": {
1256
- "base": "[1]",
1257
- "contract": "feltdb.state.conflict",
1258
- "left": "[1,2]",
1259
- "right": "[1]",
1260
- "version": 2
1261
- },
1262
- "name": "array_append_one_side",
1263
- "why": "only one side appends"
1264
- },
1265
- {
1266
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1]\",\"right\":\"[1,2]\",\"version\":2}",
1267
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1268
- "input": {
1269
- "base": "[1,2]",
1270
- "contract": "feltdb.state.conflict",
1271
- "left": "[1]",
1272
- "right": "[1,2]",
1273
- "version": 2
1274
- },
1275
- "name": "array_removal_one_side",
1276
- "why": "only one side truncates"
1277
- },
1278
- {
1279
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1]\",\"right\":\"[1]\",\"version\":2}",
1280
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Convergent\",\"base_value\":2,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1281
- "input": {
1282
- "base": "[1,2]",
1283
- "contract": "feltdb.state.conflict",
1284
- "left": "[1]",
1285
- "right": "[1]",
1286
- "version": 2
1287
- },
1288
- "name": "array_removal_both_sides",
1289
- "why": "both sides truncating the same tail converges"
1290
- },
1291
- {
1292
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[1]\",\"right\":\"[1,9]\",\"version\":2}",
1293
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":2,\"left_value\":null,\"right_value\":9}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1294
- "input": {
1295
- "base": "[1,2]",
1296
- "contract": "feltdb.state.conflict",
1297
- "left": "[1]",
1298
- "right": "[1,9]",
1299
- "version": 2
1300
- },
1301
- "name": "array_removal_vs_edit_at_index",
1302
- "why": "truncation against an edit at the dropped index"
1303
- },
1304
- {
1305
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[0,1,2]\",\"right\":\"[1,2]\",\"version\":2}",
1306
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":0,\"right_value\":null},{\"path\":[{\"Index\":1}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":1,\"right_value\":null},{\"path\":[{\"Index\":2}],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":2,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1307
- "input": {
1308
- "base": "[1,2]",
1309
- "contract": "feltdb.state.conflict",
1310
- "left": "[0,1,2]",
1311
- "right": "[1,2]",
1312
- "version": 2
1313
- },
1314
- "name": "array_prepend_one_side",
1315
- "why": "a prepend is positional, so it touches every index"
1316
- },
1317
- {
1318
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[0,1,2]\",\"right\":\"[9,1,2]\",\"version\":2}",
1319
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":0,\"right_value\":9},{\"path\":[{\"Index\":1}],\"classification\":\"Convergent\",\"base_value\":2,\"left_value\":1,\"right_value\":1},{\"path\":[{\"Index\":2}],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":2,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1320
- "input": {
1321
- "base": "[1,2]",
1322
- "contract": "feltdb.state.conflict",
1323
- "left": "[0,1,2]",
1324
- "right": "[9,1,2]",
1325
- "version": 2
1326
- },
1327
- "name": "array_prepend_both_sides_different",
1328
- "why": "two different prepends collide at every index"
1329
- },
1330
- {
1331
- "canonical_input": "{\"base\":\"[1,2]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[2,1]\",\"right\":\"[1,9]\",\"version\":2}",
1332
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Index\":1}],\"classification\":\"Conflict\",\"base_value\":2,\"left_value\":1,\"right_value\":9}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1333
- "input": {
1334
- "base": "[1,2]",
1335
- "contract": "feltdb.state.conflict",
1336
- "left": "[2,1]",
1337
- "right": "[1,9]",
1338
- "version": 2
1339
- },
1340
- "name": "array_reorder_vs_edit",
1341
- "why": "a reorder against an in-place edit"
1342
- },
1343
- {
1344
- "canonical_input": "{\"base\":\"[{\\\"a\\\":1},{\\\"b\\\":1}]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[{\\\"a\\\":2},{\\\"b\\\":1}]\",\"right\":\"[{\\\"a\\\":1},{\\\"b\\\":2}]\",\"version\":2}",
1345
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0},{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Index\":1},{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1346
- "input": {
1347
- "base": "[{\"a\":1},{\"b\":1}]",
1348
- "contract": "feltdb.state.conflict",
1349
- "left": "[{\"a\":2},{\"b\":1}]",
1350
- "right": "[{\"a\":1},{\"b\":2}]",
1351
- "version": 2
1352
- },
1353
- "name": "array_nested_change_each_side",
1354
- "why": "edits inside different array elements"
1355
- },
1356
- {
1357
- "canonical_input": "{\"base\":\"[{\\\"a\\\":1}]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[{\\\"a\\\":2}]\",\"right\":\"[{\\\"a\\\":3}]\",\"version\":2}",
1358
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0},{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1359
- "input": {
1360
- "base": "[{\"a\":1}]",
1361
- "contract": "feltdb.state.conflict",
1362
- "left": "[{\"a\":2}]",
1363
- "right": "[{\"a\":3}]",
1364
- "version": 2
1365
- },
1366
- "name": "array_nested_change_same_element",
1367
- "why": "edits inside the same array element, same member"
1368
- },
1369
- {
1370
- "canonical_input": "{\"base\":\"[[1]]\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[[2]]\",\"right\":\"[[3]]\",\"version\":2}",
1371
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Index\":0},{\"Index\":0}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1372
- "input": {
1373
- "base": "[[1]]",
1374
- "contract": "feltdb.state.conflict",
1375
- "left": "[[2]]",
1376
- "right": "[[3]]",
1377
- "version": 2
1378
- },
1379
- "name": "array_of_arrays_conflict",
1380
- "why": "a conflict two array levels down"
1381
- },
1382
- {
1383
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"x\\\":1,\\\"y\\\":1}}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"x\\\":2,\\\"y\\\":1}}}}\",\"right\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"x\\\":1,\\\"y\\\":2}}}}\",\"version\":2}",
1384
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"},{\"Key\":\"c\"},{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"},{\"Key\":\"c\"},{\"Key\":\"y\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1385
- "input": {
1386
- "base": "{\"a\":{\"b\":{\"c\":{\"x\":1,\"y\":1}}}}",
1387
- "contract": "feltdb.state.conflict",
1388
- "left": "{\"a\":{\"b\":{\"c\":{\"x\":2,\"y\":1}}}}",
1389
- "right": "{\"a\":{\"b\":{\"c\":{\"x\":1,\"y\":2}}}}",
1390
- "version": 2
1391
- },
1392
- "name": "deeply_nested_independent_edits",
1393
- "why": "edits ten levels down in different branches"
1394
- },
1395
- {
1396
- "canonical_input": "{\"base\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"e\\\":{\\\"f\\\":{\\\"g\\\":{\\\"h\\\":{\\\"i\\\":{\\\"j\\\":1}}}}}}}}}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"e\\\":{\\\"f\\\":{\\\"g\\\":{\\\"h\\\":{\\\"i\\\":{\\\"j\\\":2}}}}}}}}}}\",\"right\":\"{\\\"a\\\":{\\\"b\\\":{\\\"c\\\":{\\\"d\\\":{\\\"e\\\":{\\\"f\\\":{\\\"g\\\":{\\\"h\\\":{\\\"i\\\":{\\\"j\\\":3}}}}}}}}}}\",\"version\":2}",
1397
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"},{\"Key\":\"b\"},{\"Key\":\"c\"},{\"Key\":\"d\"},{\"Key\":\"e\"},{\"Key\":\"f\"},{\"Key\":\"g\"},{\"Key\":\"h\"},{\"Key\":\"i\"},{\"Key\":\"j\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1398
- "input": {
1399
- "base": "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":{\"g\":{\"h\":{\"i\":{\"j\":1}}}}}}}}}}",
1400
- "contract": "feltdb.state.conflict",
1401
- "left": "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":{\"g\":{\"h\":{\"i\":{\"j\":2}}}}}}}}}}",
1402
- "right": "{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":{\"g\":{\"h\":{\"i\":{\"j\":3}}}}}}}}}}",
1403
- "version": 2
1404
- },
1405
- "name": "deeply_nested_conflict",
1406
- "why": "one path, ten levels down, edited by both sides"
1407
- },
1408
- {
1409
- "canonical_input": "{\"base\":\"{\\\"k00\\\":0,\\\"k01\\\":0,\\\"k02\\\":0,\\\"k03\\\":0,\\\"k04\\\":0,\\\"k05\\\":0,\\\"k06\\\":0,\\\"k07\\\":0,\\\"k08\\\":0,\\\"k09\\\":0,\\\"k10\\\":0,\\\"k11\\\":0,\\\"k12\\\":0,\\\"k13\\\":0,\\\"k14\\\":0,\\\"k15\\\":0,\\\"k16\\\":0,\\\"k17\\\":0,\\\"k18\\\":0,\\\"k19\\\":0}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"k00\\\":1,\\\"k01\\\":1,\\\"k02\\\":1,\\\"k03\\\":1,\\\"k04\\\":1,\\\"k05\\\":1,\\\"k06\\\":1,\\\"k07\\\":1,\\\"k08\\\":1,\\\"k09\\\":1,\\\"k10\\\":1,\\\"k11\\\":1,\\\"k12\\\":1,\\\"k13\\\":1,\\\"k14\\\":1,\\\"k15\\\":1,\\\"k16\\\":1,\\\"k17\\\":1,\\\"k18\\\":1,\\\"k19\\\":1}\",\"right\":\"{\\\"k00\\\":2,\\\"k01\\\":2,\\\"k02\\\":2,\\\"k03\\\":2,\\\"k04\\\":2,\\\"k05\\\":2,\\\"k06\\\":2,\\\"k07\\\":2,\\\"k08\\\":2,\\\"k09\\\":2,\\\"k10\\\":2,\\\"k11\\\":2,\\\"k12\\\":2,\\\"k13\\\":2,\\\"k14\\\":2,\\\"k15\\\":2,\\\"k16\\\":2,\\\"k17\\\":2,\\\"k18\\\":2,\\\"k19\\\":2}\",\"version\":2}",
1410
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"k00\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k01\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k02\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k03\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k04\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k05\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k06\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k07\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k08\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k09\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k10\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k11\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k12\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k13\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k14\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k15\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k16\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k17\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k18\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2},{\"path\":[{\"Key\":\"k19\"}],\"classification\":\"Conflict\",\"base_value\":0,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1411
- "input": {
1412
- "base": "{\"k00\":0,\"k01\":0,\"k02\":0,\"k03\":0,\"k04\":0,\"k05\":0,\"k06\":0,\"k07\":0,\"k08\":0,\"k09\":0,\"k10\":0,\"k11\":0,\"k12\":0,\"k13\":0,\"k14\":0,\"k15\":0,\"k16\":0,\"k17\":0,\"k18\":0,\"k19\":0}",
1413
- "contract": "feltdb.state.conflict",
1414
- "left": "{\"k00\":1,\"k01\":1,\"k02\":1,\"k03\":1,\"k04\":1,\"k05\":1,\"k06\":1,\"k07\":1,\"k08\":1,\"k09\":1,\"k10\":1,\"k11\":1,\"k12\":1,\"k13\":1,\"k14\":1,\"k15\":1,\"k16\":1,\"k17\":1,\"k18\":1,\"k19\":1}",
1415
- "right": "{\"k00\":2,\"k01\":2,\"k02\":2,\"k03\":2,\"k04\":2,\"k05\":2,\"k06\":2,\"k07\":2,\"k08\":2,\"k09\":2,\"k10\":2,\"k11\":2,\"k12\":2,\"k13\":2,\"k14\":2,\"k15\":2,\"k16\":2,\"k17\":2,\"k18\":2,\"k19\":2}",
1416
- "version": 2
1417
- },
1418
- "name": "many_simultaneous_conflicts",
1419
- "why": "a wide object where every member collides"
1420
- },
1421
- {
1422
- "canonical_input": "{\"base\":\"{\\\"conf\\\":1,\\\"conv\\\":1,\\\"ind\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"conf\\\":2,\\\"conv\\\":9,\\\"ind\\\":2}\",\"right\":\"{\\\"conf\\\":3,\\\"conv\\\":9,\\\"ind\\\":1}\",\"version\":2}",
1423
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"conf\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3},{\"path\":[{\"Key\":\"conv\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":9,\"right_value\":9},{\"path\":[{\"Key\":\"ind\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1424
- "input": {
1425
- "base": "{\"conf\":1,\"conv\":1,\"ind\":1}",
1426
- "contract": "feltdb.state.conflict",
1427
- "left": "{\"conf\":2,\"conv\":9,\"ind\":2}",
1428
- "right": "{\"conf\":3,\"conv\":9,\"ind\":1}",
1429
- "version": 2
1430
- },
1431
- "name": "mixed_severities_in_one_result",
1432
- "why": "independent, convergent and conflicting paths together, so overall takes the maximum"
1433
- },
1434
- {
1435
- "canonical_input": "{\"base\":\"{\\\"a\\\":1,\\\"b\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":2,\\\"b\\\":2}\",\"right\":\"{\\\"a\\\":1,\\\"b\\\":2}\",\"version\":2}",
1436
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1437
- "input": {
1438
- "base": "{\"a\":1,\"b\":1}",
1439
- "contract": "feltdb.state.conflict",
1440
- "left": "{\"a\":2,\"b\":2}",
1441
- "right": "{\"a\":1,\"b\":2}",
1442
- "version": 2
1443
- },
1444
- "name": "convergent_and_independent_only",
1445
- "why": "no conflict, so overall falls to Convergent"
1446
- },
1447
- {
1448
- "canonical_input": "{\"base\":\"{\\\"p\\\":{\\\"x\\\":1},\\\"q\\\":{\\\"y\\\":1},\\\"r\\\":{\\\"z\\\":1}}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"p\\\":{\\\"x\\\":2},\\\"q\\\":{\\\"y\\\":1},\\\"r\\\":{\\\"z\\\":2}}\",\"right\":\"{\\\"p\\\":{\\\"x\\\":3},\\\"q\\\":{\\\"y\\\":2},\\\"r\\\":{\\\"z\\\":2}}\",\"version\":2}",
1449
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"p\"},{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3},{\"path\":[{\"Key\":\"q\"},{\"Key\":\"y\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"r\"},{\"Key\":\"z\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1450
- "input": {
1451
- "base": "{\"p\":{\"x\":1},\"q\":{\"y\":1},\"r\":{\"z\":1}}",
1452
- "contract": "feltdb.state.conflict",
1453
- "left": "{\"p\":{\"x\":2},\"q\":{\"y\":1},\"r\":{\"z\":2}}",
1454
- "right": "{\"p\":{\"x\":3},\"q\":{\"y\":2},\"r\":{\"z\":2}}",
1455
- "version": 2
1456
- },
1457
- "name": "multiple_branches_of_the_tree",
1458
- "why": "several subtrees changed on both sides"
1459
- },
1460
- {
1461
- "canonical_input": "{\"base\":\"{\\\"café\\\":\\\"naïve\\\",\\\"☕\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"café\\\":\\\"naif\\\",\\\"☕\\\":1}\",\"right\":\"{\\\"café\\\":\\\"naïve\\\",\\\"☕\\\":2}\",\"version\":2}",
1462
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"café\"}],\"classification\":\"Independent\",\"base_value\":\"naïve\",\"left_value\":\"naif\",\"right_value\":null},{\"path\":[{\"Key\":\"☕\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1463
- "input": {
1464
- "base": "{\"café\":\"naïve\",\"☕\":1}",
1465
- "contract": "feltdb.state.conflict",
1466
- "left": "{\"café\":\"naif\",\"☕\":1}",
1467
- "right": "{\"café\":\"naïve\",\"☕\":2}",
1468
- "version": 2
1469
- },
1470
- "name": "unicode_keys_and_values",
1471
- "why": "non-ASCII survives parsing, classification and re-encoding"
1472
- },
1473
- {
1474
- "canonical_input": "{\"base\":\"{\\\"\\\":1,\\\"0\\\":1,\\\"a.b\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"\\\":1,\\\"0\\\":1,\\\"a.b\\\":2}\",\"right\":\"{\\\"\\\":2,\\\"0\\\":2,\\\"a.b\\\":1}\",\"version\":2}",
1475
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"0\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2},{\"path\":[{\"Key\":\"a.b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1476
- "input": {
1477
- "base": "{\"\":1,\"0\":1,\"a.b\":1}",
1478
- "contract": "feltdb.state.conflict",
1479
- "left": "{\"\":1,\"0\":1,\"a.b\":2}",
1480
- "right": "{\"\":2,\"0\":2,\"a.b\":1}",
1481
- "version": 2
1482
- },
1483
- "name": "unusual_object_keys",
1484
- "why": "keys that look like paths or indices stay opaque"
1485
- },
1486
- {
1487
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":1}\",\"right\":\"{\\\"a\\\":2}\",\"version\":2}",
1488
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":1,\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1489
- "input": {
1490
- "base": "{}",
1491
- "contract": "feltdb.state.conflict",
1492
- "left": "{\"a\":1}",
1493
- "right": "{\"a\":2}",
1494
- "version": 2
1495
- },
1496
- "name": "empty_to_populated_both_sides",
1497
- "why": "both sides populate an empty base differently"
1498
- },
1499
- {
1500
- "canonical_input": "{\"base\":\"{\\\"a\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1501
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1502
- "input": {
1503
- "base": "{\"a\":1}",
1504
- "contract": "feltdb.state.conflict",
1505
- "left": "{}",
1506
- "right": "{}",
1507
- "version": 2
1508
- },
1509
- "name": "populated_to_empty_both_sides",
1510
- "why": "both sides empty a populated base"
1511
- },
1512
- {
1513
- "canonical_input": "{\"base\":\"{\\\"a\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{\\\"a\\\":1}\",\"version\":2}",
1514
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1515
- "input": {
1516
- "base": "{\"a\":1}",
1517
- "contract": "feltdb.state.conflict",
1518
- "left": "{}",
1519
- "right": "{\"a\":1}",
1520
- "version": 2
1521
- },
1522
- "name": "populated_to_empty_one_side",
1523
- "why": "one side empties a populated base"
1524
- },
1525
- {
1526
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":{}}\",\"right\":\"{\\\"x\\\":[]}\",\"version\":2}",
1527
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":{},\"right_value\":[]}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1528
- "input": {
1529
- "base": "{\"x\":1}",
1530
- "contract": "feltdb.state.conflict",
1531
- "left": "{\"x\":{}}",
1532
- "right": "{\"x\":[]}",
1533
- "version": 2
1534
- },
1535
- "name": "empty_object_vs_empty_array",
1536
- "why": "two different empty containers at one path"
1537
- },
1538
- {
1539
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":{}}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
1540
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":{},\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1541
- "input": {
1542
- "base": "{\"x\":1}",
1543
- "contract": "feltdb.state.conflict",
1544
- "left": "{\"x\":{}}",
1545
- "right": "{\"x\":2}",
1546
- "version": 2
1547
- },
1548
- "name": "empty_object_vs_scalar",
1549
- "why": "an empty object against a scalar at one path"
1550
- },
1551
- {
1552
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":[]}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
1553
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":[],\"right_value\":2}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1554
- "input": {
1555
- "base": "{\"x\":1}",
1556
- "contract": "feltdb.state.conflict",
1557
- "left": "{\"x\":[]}",
1558
- "right": "{\"x\":2}",
1559
- "version": 2
1560
- },
1561
- "name": "empty_array_vs_scalar",
1562
- "why": "an empty array against a scalar at one path"
1563
- },
1564
- {
1565
- "canonical_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"[]\",\"right\":\"{}\",\"version\":2}",
1566
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Independent\",\"base_value\":{},\"left_value\":[],\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1567
- "input": {
1568
- "base": "{}",
1569
- "contract": "feltdb.state.conflict",
1570
- "left": "[]",
1571
- "right": "{}",
1572
- "version": 2
1573
- },
1574
- "name": "top_level_empty_to_array",
1575
- "why": "the states themselves change shape"
1576
- },
1577
- {
1578
- "canonical_input": "{\"base\":\"1\",\"contract\":\"feltdb.state.conflict\",\"left\":\"2\",\"right\":\"3\",\"version\":2}",
1579
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":2,\"right_value\":3}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1580
- "input": {
1581
- "base": "1",
1582
- "contract": "feltdb.state.conflict",
1583
- "left": "2",
1584
- "right": "3",
1585
- "version": 2
1586
- },
1587
- "name": "top_level_scalar_states",
1588
- "why": "three scalar states"
1589
- },
1590
- {
1591
- "canonical_input": "{\"base\":\"null\",\"contract\":\"feltdb.state.conflict\",\"left\":\"null\",\"right\":\"null\",\"version\":2}",
1592
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1593
- "input": {
1594
- "base": "null",
1595
- "contract": "feltdb.state.conflict",
1596
- "left": "null",
1597
- "right": "null",
1598
- "version": 2
1599
- },
1600
- "name": "top_level_null_states",
1601
- "why": "three null states"
1602
- },
1603
- {
1604
- "canonical_input": "{\"base\":\"null\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
1605
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Conflict\",\"base_value\":null,\"left_value\":{\"x\":1},\"right_value\":{\"x\":2}}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1606
- "input": {
1607
- "base": "null",
1608
- "contract": "feltdb.state.conflict",
1609
- "left": "{\"x\":1}",
1610
- "right": "{\"x\":2}",
1611
- "version": 2
1612
- },
1613
- "name": "top_level_null_base",
1614
- "why": "a null base populated by both sides"
1615
- },
1616
- {
1617
- "canonical_input": "{\"base\":\"not json at all\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
1618
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":{\"x\":1},\"right_value\":{\"x\":1}}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1619
- "input": {
1620
- "base": "not json at all",
1621
- "contract": "feltdb.state.conflict",
1622
- "left": "{\"x\":1}",
1623
- "right": "{\"x\":1}",
1624
- "version": 2
1625
- },
1626
- "name": "unparseable_base",
1627
- "why": "unparseable base content classifies as JSON null"
1628
- },
1629
- {
1630
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"garbage\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
1631
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Independent\",\"base_value\":{\"x\":1},\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1632
- "input": {
1633
- "base": "{\"x\":1}",
1634
- "contract": "feltdb.state.conflict",
1635
- "left": "garbage",
1636
- "right": "{\"x\":1}",
1637
- "version": 2
1638
- },
1639
- "name": "unparseable_left",
1640
- "why": "unparseable left content classifies as JSON null"
1641
- },
1642
- {
1643
- "canonical_input": "{\"base\":\"{\\\"x\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"]\",\"version\":2}",
1644
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Independent\",\"base_value\":{\"x\":1},\"left_value\":null,\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1645
- "input": {
1646
- "base": "{\"x\":1}",
1647
- "contract": "feltdb.state.conflict",
1648
- "left": "{\"x\":1}",
1649
- "right": "]",
1650
- "version": 2
1651
- },
1652
- "name": "unparseable_right",
1653
- "why": "unparseable right content classifies as JSON null"
1654
- },
1655
- {
1656
- "canonical_input": "{\"base\":\"a\",\"contract\":\"feltdb.state.conflict\",\"left\":\"b\",\"right\":\"c\",\"version\":2}",
1657
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1658
- "input": {
1659
- "base": "a",
1660
- "contract": "feltdb.state.conflict",
1661
- "left": "b",
1662
- "right": "c",
1663
- "version": 2
1664
- },
1665
- "name": "unparseable_all_three",
1666
- "why": "three unparseable states are three JSON nulls, so nothing changed"
1667
- },
1668
- {
1669
- "canonical_input": "{\"base\":\"\",\"contract\":\"feltdb.state.conflict\",\"left\":\"\",\"right\":\"\",\"version\":2}",
1670
- "expected_output": "{\"classification\":{\"path_conflicts\":[],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1671
- "input": {
1672
- "base": "",
1673
- "contract": "feltdb.state.conflict",
1674
- "left": "",
1675
- "right": "",
1676
- "version": 2
1677
- },
1678
- "name": "empty_content_strings",
1679
- "why": "empty content is not JSON either, so it is JSON null"
1680
- },
1681
- {
1682
- "canonical_input": "{\"base\":\"{\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\",\"version\":2}",
1683
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":{\"x\":1},\"right_value\":null}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1684
- "input": {
1685
- "base": "{",
1686
- "contract": "feltdb.state.conflict",
1687
- "left": "{\"x\":1}",
1688
- "right": "{",
1689
- "version": 2
1690
- },
1691
- "name": "unparseable_base_only_left_changes",
1692
- "why": "an unparseable base with one side moving"
1693
- },
1694
- {
1695
- "canonical_input": "{\"base\":\"null\",\"contract\":\"feltdb.state.conflict\",\"left\":\"not json\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
1696
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Independent\",\"base_value\":null,\"left_value\":null,\"right_value\":{\"x\":1}}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1697
- "input": {
1698
- "base": "null",
1699
- "contract": "feltdb.state.conflict",
1700
- "left": "not json",
1701
- "right": "{\"x\":1}",
1702
- "version": 2
1703
- },
1704
- "name": "literal_null_content_vs_unparseable",
1705
- "why": "content that is literally null and content that fails to parse are indistinguishable"
1706
- },
1707
- {
1708
- "canonical_input": "{\"base\":\"{\\\"x\\\":\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
1709
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":{\"x\":1},\"right_value\":{\"x\":1}}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1710
- "input": {
1711
- "base": "{\"x\":",
1712
- "contract": "feltdb.state.conflict",
1713
- "left": "{\"x\":1}",
1714
- "right": "{\"x\":1}",
1715
- "version": 2
1716
- },
1717
- "name": "truncated_json_content",
1718
- "why": "a truncated document does not parse and becomes null"
1719
- },
1720
- {
1721
- "canonical_input": "{\"base\":\"{\\\"x\\\":1} extra\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":1}\",\"right\":\"{\\\"x\\\":1}\",\"version\":2}",
1722
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[],\"classification\":\"Convergent\",\"base_value\":null,\"left_value\":{\"x\":1},\"right_value\":{\"x\":1}}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1723
- "input": {
1724
- "base": "{\"x\":1} extra",
1725
- "contract": "feltdb.state.conflict",
1726
- "left": "{\"x\":1}",
1727
- "right": "{\"x\":1}",
1728
- "version": 2
1729
- },
1730
- "name": "trailing_content_in_state",
1731
- "why": "trailing bytes make the content unparseable"
1732
- },
1733
- {
1734
- "canonical_input": "{\"base\":\"{\\\"b\\\":1,\\\"a\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"a\\\":2,\\\"b\\\":1}\",\"right\":\"{\\\"a\\\":1,\\\"b\\\":2}\",\"version\":2}",
1735
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"a\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":2,\"right_value\":null},{\"path\":[{\"Key\":\"b\"}],\"classification\":\"Independent\",\"base_value\":1,\"left_value\":null,\"right_value\":2}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1736
- "input": {
1737
- "base": "{\"b\":1,\"a\":1}",
1738
- "contract": "feltdb.state.conflict",
1739
- "left": "{\"a\":2,\"b\":1}",
1740
- "right": "{\"a\":1,\"b\":2}",
1741
- "version": 2
1742
- },
1743
- "name": "non_canonical_member_order_in_content",
1744
- "why": "content is parsed, so its member order does not reach the classification"
1745
- },
1746
- {
1747
- "canonical_input": "{\"base\":\" {\\\"x\\\" : 1} \",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":2}\",\"version\":2}",
1748
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":2,\"right_value\":2}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1749
- "input": {
1750
- "base": " {\"x\" : 1} ",
1751
- "contract": "feltdb.state.conflict",
1752
- "left": "{\"x\":2}",
1753
- "right": "{\"x\":2}",
1754
- "version": 2
1755
- },
1756
- "name": "whitespace_in_content",
1757
- "why": "insignificant whitespace inside content changes nothing"
1758
- },
1759
- {
1760
- "canonical_input": "{\"base\":\"{\\\"x\\\":1,\\\"x\\\":2}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"x\\\":2}\",\"right\":\"{\\\"x\\\":3}\",\"version\":2}",
1761
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"x\"}],\"classification\":\"Independent\",\"base_value\":2,\"left_value\":null,\"right_value\":3}],\"overall\":\"Independent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1762
- "input": {
1763
- "base": "{\"x\":1,\"x\":2}",
1764
- "contract": "feltdb.state.conflict",
1765
- "left": "{\"x\":2}",
1766
- "right": "{\"x\":3}",
1767
- "version": 2
1768
- },
1769
- "name": "duplicate_member_in_content",
1770
- "why": "a repeated member inside content resolves last-wins"
1771
- },
1772
- {
1773
- "canonical_input": "{\"base\":\"{\\\"n\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":1e2}\",\"right\":\"{\\\"n\\\":100.0}\",\"version\":2}",
1774
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Convergent\",\"base_value\":1,\"left_value\":100.0,\"right_value\":100.0}],\"overall\":\"Convergent\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1775
- "input": {
1776
- "base": "{\"n\":1}",
1777
- "contract": "feltdb.state.conflict",
1778
- "left": "{\"n\":1e2}",
1779
- "right": "{\"n\":100.0}",
1780
- "version": 2
1781
- },
1782
- "name": "non_canonical_number_in_content",
1783
- "why": "1e2 and 100.0 are the same float"
1784
- },
1785
- {
1786
- "canonical_input": "{\"base\":\"{\\\"n\\\":1}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{\\\"n\\\":-0}\",\"right\":\"{\\\"n\\\":0}\",\"version\":2}",
1787
- "expected_output": "{\"classification\":{\"path_conflicts\":[{\"path\":[{\"Key\":\"n\"}],\"classification\":\"Conflict\",\"base_value\":1,\"left_value\":-0.0,\"right_value\":0}],\"overall\":\"Conflict\"},\"contract\":\"feltdb.state.conflict\",\"version\":2}",
1788
- "input": {
1789
- "base": "{\"n\":1}",
1790
- "contract": "feltdb.state.conflict",
1791
- "left": "{\"n\":-0}",
1792
- "right": "{\"n\":0}",
1793
- "version": 2
1794
- },
1795
- "name": "negative_zero_in_content",
1796
- "why": "-0 is a float and never equals the integer 0"
1797
- },
1798
- {
1799
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1800
- "name": "malformed_not_json",
1801
- "raw_input": "not json at all",
1802
- "why": "bytes that are not JSON at all"
1803
- },
1804
- {
1805
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1806
- "name": "malformed_empty_input",
1807
- "raw_input": "",
1808
- "why": "zero bytes"
1809
- },
1810
- {
1811
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1812
- "name": "malformed_truncated_envelope",
1813
- "raw_input": "{\"base\":",
1814
- "why": "an envelope that ends mid-value"
1815
- },
1816
- {
1817
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1818
- "name": "malformed_trailing_content",
1819
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2} trailing",
1820
- "why": "a complete envelope followed by more bytes"
1821
- },
1822
- {
1823
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1824
- "name": "malformed_top_level_array",
1825
- "raw_input": "[]",
1826
- "why": "the envelope must be an object"
1827
- },
1828
- {
1829
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1830
- "name": "malformed_missing_base",
1831
- "raw_input": "{\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1832
- "why": "a required member is absent"
1833
- },
1834
- {
1835
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1836
- "name": "malformed_missing_left",
1837
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"right\":\"{}\",\"version\":2}",
1838
- "why": "a required member is absent"
1839
- },
1840
- {
1841
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1842
- "name": "malformed_missing_right",
1843
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"version\":2}",
1844
- "why": "a required member is absent"
1845
- },
1846
- {
1847
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1848
- "name": "malformed_unknown_envelope_member",
1849
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"extra\":true,\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1850
- "why": "the contract denies unknown members"
1851
- },
1852
- {
1853
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1854
- "name": "malformed_duplicate_envelope_member",
1855
- "raw_input": "{\"base\":\"{}\",\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1856
- "why": "a repeated envelope member is rejected"
1857
- },
1858
- {
1859
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1860
- "name": "malformed_state_is_not_a_string",
1861
- "raw_input": "{\"base\":{\"x\":1},\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1862
- "why": "state content is a string, not a parsed value"
1863
- },
1864
- {
1865
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1866
- "name": "malformed_state_is_null",
1867
- "raw_input": "{\"base\":null,\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1868
- "why": "state content is a string, and null is not one"
1869
- },
1870
- {
1871
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1872
- "name": "malformed_version_is_float",
1873
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2.0}",
1874
- "why": "version is an integer"
1875
- },
1876
- {
1877
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1878
- "name": "malformed_version_is_negative",
1879
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":-1}",
1880
- "why": "version is unsigned"
1881
- },
1882
- {
1883
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_ID_MISMATCH\"},\"version\":2}",
1884
- "name": "contract_id_mismatch",
1885
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.other\",\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1886
- "why": "a well-formed input addressed to another contract"
1887
- },
1888
- {
1889
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_VERSION_UNSUPPORTED\"},\"version\":2}",
1890
- "name": "contract_version_unsupported",
1891
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":3}",
1892
- "why": "a well-formed input at an unimplemented version"
1893
- },
1894
- {
1895
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_VERSION_UNSUPPORTED\"},\"version\":2}",
1896
- "name": "contract_version_one_is_no_longer_implemented",
1897
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.conflict\",\"left\":\"{}\",\"right\":\"{}\",\"version\":1}",
1898
- "why": "version 1 collided on equal paths only; its semantics are gone, not silently reinterpreted"
1899
- },
1900
- {
1901
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_INPUT_INVALID\"},\"version\":2}",
1902
- "name": "malformed_and_misaddressed",
1903
- "raw_input": "{\"base\":\"{}\",\"contract\":\"feltdb.state.other\",\"extra\":1,\"left\":\"{}\",\"right\":\"{}\",\"version\":2}",
1904
- "why": "shape is validated before identity, so this is an input error"
1905
- },
1906
- {
1907
- "expected_output": "{\"contract\":\"feltdb.state.conflict\",\"error\":{\"code\":\"CONTRACT_VERSION_UNSUPPORTED\"},\"version\":2}",
1908
- "name": "envelope_members_in_any_order",
1909
- "raw_input": "{\"version\":1,\"right\":\"{\\\"x\\\":3}\",\"left\":\"{\\\"x\\\":2}\",\"contract\":\"feltdb.state.conflict\",\"base\":\"{\\\"x\\\":1}\"}",
1910
- "why": "the envelope is an object, so its member order is not semantic"
1911
- }
1912
- ],
1913
- "contract": "feltdb.state.conflict",
1914
- "contract_version": 2,
1915
- "corpus_version": 1
1916
- }