@feltdb/core 0.8.4 → 0.8.5

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 (149) hide show
  1. package/dist/create/package-versions.js +1 -1
  2. package/dist/create/server-source/Cargo.lock +165 -0
  3. package/dist/create/server-source/Cargo.toml +9 -0
  4. package/dist/create/server-source/crates/feltdb/Cargo.toml +3 -0
  5. package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +44 -44
  6. package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +12 -24
  7. package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +7 -13
  8. package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +13 -10
  9. package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +12 -9
  10. package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +78 -25
  11. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +16 -13
  12. package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +13 -5
  13. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +41 -22
  14. package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +33 -15
  15. package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +100 -33
  16. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +56 -20
  17. package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +116 -41
  18. package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +186 -55
  19. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +64 -26
  20. package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +46 -15
  21. package/dist/create/server-source/crates/feltdb/src/admission.rs +8 -15
  22. package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +43 -13
  23. package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +15 -42
  24. package/dist/create/server-source/crates/feltdb/src/analytics.rs +65 -19
  25. package/dist/create/server-source/crates/feltdb/src/application.rs +113 -30
  26. package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +475 -140
  27. package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +17 -15
  28. package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -1
  29. package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +59 -15
  30. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +266 -114
  31. package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +25 -7
  32. package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +10 -15
  33. package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +3 -11
  34. package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +14 -5
  35. package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +21 -25
  36. package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +14 -11
  37. package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +103 -22
  38. package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +18 -15
  39. package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +12 -8
  40. package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +1 -5
  41. package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +87 -23
  42. package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +3 -7
  43. package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +10 -9
  44. package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +1 -6
  45. package/dist/create/server-source/crates/feltdb/src/indexing.rs +35 -38
  46. package/dist/create/server-source/crates/feltdb/src/lib.rs +507 -6
  47. package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +4 -1
  48. package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -1
  49. package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +1 -2
  50. package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +107 -30
  51. package/dist/create/server-source/crates/feltdb/src/observability.rs +19 -6
  52. package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +12 -11
  53. package/dist/create/server-source/crates/feltdb/src/operation_log.rs +9 -4
  54. package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +65 -18
  55. package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +193 -57
  56. package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +37 -27
  57. package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +38 -10
  58. package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +20 -14
  59. package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +394 -229
  60. package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +8 -6
  61. package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +11 -13
  62. package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +79 -70
  63. package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +3 -3
  64. package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +33 -11
  65. package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +6 -6
  66. package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +14 -56
  67. package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +29 -27
  68. package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +35 -17
  69. package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +8 -2
  70. package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +59 -15
  71. package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +70 -17
  72. package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +23 -6
  73. package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +12 -3
  74. package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +41 -11
  75. package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +56 -25
  76. package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +701 -245
  77. package/dist/create/server-source/crates/feltdb/src/production_api.rs +31 -13
  78. package/dist/create/server-source/crates/feltdb/src/query_performance.rs +6 -8
  79. package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +5 -5
  80. package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +48 -18
  81. package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +30 -11
  82. package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +6 -3
  83. package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +4 -3
  84. package/dist/create/server-source/crates/feltdb/src/sharding.rs +36 -10
  85. package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +516 -0
  86. package/dist/create/server-source/crates/feltdb/src/state_contract.rs +13 -4
  87. package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +222 -0
  88. package/dist/create/server-source/crates/feltdb/src/state_facade.rs +82 -54
  89. package/dist/create/server-source/crates/feltdb/src/state_hash.rs +2 -2
  90. package/dist/create/server-source/crates/feltdb/src/state_model.rs +1514 -537
  91. package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +6 -3
  92. package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +672 -0
  93. package/dist/create/server-source/crates/feltdb/src/submission.rs +5 -11
  94. package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +6 -8
  95. package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +24 -35
  96. package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +24 -8
  97. package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +248 -59
  98. package/dist/create/server-source/crates/feltdb/src/transactions.rs +17 -20
  99. package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +749 -0
  100. package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +1 -0
  101. package/dist/create/server-source/crates/feltdb/src/workload.rs +512 -4
  102. package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +3 -4
  103. package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +299 -0
  104. package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +288 -0
  105. package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +392 -0
  106. package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +436 -220
  107. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +1916 -0
  108. package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +1878 -0
  109. package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +1862 -0
  110. package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +2 -1
  111. package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +80 -25
  112. package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +5 -8
  113. package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +52 -44
  114. package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +33 -16
  115. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +22 -7
  116. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +41 -22
  117. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +25 -8
  118. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +9 -6
  119. package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +120 -69
  120. package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +21 -10
  121. package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +1032 -0
  122. package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +868 -0
  123. package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +221 -0
  124. package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +338 -0
  125. package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +1039 -0
  126. package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +739 -0
  127. package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +427 -0
  128. package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +3 -3
  129. package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +25 -22
  130. package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +1799 -0
  131. package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +1316 -0
  132. package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +53 -61
  133. package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +156 -61
  134. package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +299 -0
  135. package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +255 -0
  136. package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +249 -0
  137. package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +994 -0
  138. package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +2 -1
  139. package/dist/create/server-source/crates/feltdb-server/src/auth.rs +164 -13
  140. package/dist/create/server-source/crates/feltdb-server/src/main.rs +326 -6
  141. package/dist/studio-app/assets/{feltdb_wasm-CVQWgXO-.js → feltdb_wasm-DaNwCLRX.js} +1 -1
  142. package/dist/studio-app/assets/feltdb_wasm_bg-DnsHNv6g.wasm +0 -0
  143. package/dist/studio-app/assets/{index-DwgNAIIX.js → index-j8IlhNqJ.js} +1 -1
  144. package/dist/studio-app/index.html +1 -1
  145. package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
  146. package/dist/workload.d.ts +2 -1
  147. package/dist/workload.d.ts.map +1 -1
  148. package/package.json +1 -1
  149. package/dist/studio-app/assets/feltdb_wasm_bg-CNVpvaZV.wasm +0 -0
@@ -0,0 +1,1916 @@
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
+ }