@lix-js/sdk 0.6.0-preview.4 → 0.6.0-preview.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 (234) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +65 -64
  3. package/dist/engine-wasm/index.js +4 -4
  4. package/dist/engine-wasm/wasm/lix_engine.d.ts +5 -5
  5. package/dist/engine-wasm/wasm/lix_engine.js +130 -118
  6. package/dist/engine-wasm/wasm/lix_engine.wasm +0 -0
  7. package/dist/engine-wasm/wasm/lix_engine.wasm.d.ts +9 -8
  8. package/dist/generated/builtin-schemas.d.ts +69 -69
  9. package/dist/generated/builtin-schemas.js +94 -94
  10. package/dist/open-lix.d.ts +33 -26
  11. package/dist/open-lix.js +10 -10
  12. package/dist/sqlite/index.js +86 -30
  13. package/dist-engine-src/README.md +3 -3
  14. package/dist-engine-src/src/backend/capabilities.rs +67 -0
  15. package/dist-engine-src/src/backend/conformance/baseline.rs +1127 -0
  16. package/dist-engine-src/src/backend/conformance/factory.rs +93 -0
  17. package/dist-engine-src/src/backend/conformance/failure_tests.rs +608 -0
  18. package/dist-engine-src/src/backend/conformance/fixtures.rs +26 -0
  19. package/dist-engine-src/src/backend/conformance/mod.rs +75 -0
  20. package/dist-engine-src/src/backend/conformance/model.rs +28 -0
  21. package/dist-engine-src/src/backend/conformance/model_based.rs +257 -0
  22. package/dist-engine-src/src/backend/conformance/persistence.rs +204 -0
  23. package/dist-engine-src/src/backend/conformance/projection.rs +21 -0
  24. package/dist-engine-src/src/backend/conformance/pushdown.rs +24 -0
  25. package/dist-engine-src/src/backend/conformance/runner.rs +90 -0
  26. package/dist-engine-src/src/backend/conformance/scan.rs +24 -0
  27. package/dist-engine-src/src/backend/conformance/write.rs +16 -0
  28. package/dist-engine-src/src/backend/error.rs +94 -0
  29. package/dist-engine-src/src/backend/in_memory.rs +670 -0
  30. package/dist-engine-src/src/backend/mod.rs +36 -9
  31. package/dist-engine-src/src/backend/predicate.rs +80 -0
  32. package/dist-engine-src/src/backend/traits.rs +260 -0
  33. package/dist-engine-src/src/backend/types.rs +224 -81
  34. package/dist-engine-src/src/binary_cas/context.rs +8 -8
  35. package/dist-engine-src/src/binary_cas/kv.rs +234 -259
  36. package/dist-engine-src/src/{version → branch}/context.rs +12 -12
  37. package/dist-engine-src/src/branch/lifecycle.rs +221 -0
  38. package/dist-engine-src/src/branch/mod.rs +13 -0
  39. package/dist-engine-src/src/branch/refs.rs +321 -0
  40. package/dist-engine-src/src/branch/stage_rows.rs +67 -0
  41. package/dist-engine-src/src/branch/types.rs +21 -0
  42. package/dist-engine-src/src/catalog/context.rs +18 -18
  43. package/dist-engine-src/src/catalog/snapshot.rs +8 -8
  44. package/dist-engine-src/src/changelog/bench_support.rs +785 -0
  45. package/dist-engine-src/src/changelog/change.rs +1 -0
  46. package/dist-engine-src/src/changelog/codec.rs +497 -0
  47. package/dist-engine-src/src/changelog/commit.rs +1 -0
  48. package/dist-engine-src/src/changelog/context.rs +1614 -0
  49. package/dist-engine-src/src/changelog/mod.rs +29 -0
  50. package/dist-engine-src/src/changelog/store.rs +163 -0
  51. package/dist-engine-src/src/changelog/test_support.rs +54 -0
  52. package/dist-engine-src/src/changelog/types.rs +213 -0
  53. package/dist-engine-src/src/commit_graph/context.rs +317 -274
  54. package/dist-engine-src/src/commit_graph/mod.rs +2 -4
  55. package/dist-engine-src/src/commit_graph/types.rs +22 -42
  56. package/dist-engine-src/src/commit_graph/walker.rs +133 -103
  57. package/dist-engine-src/src/common/error.rs +52 -18
  58. package/dist-engine-src/src/common/identity.rs +2 -2
  59. package/dist-engine-src/src/common/mod.rs +1 -1
  60. package/dist-engine-src/src/domain.rs +42 -46
  61. package/dist-engine-src/src/engine.rs +74 -96
  62. package/dist-engine-src/src/{entity_identity.rs → entity_pk.rs} +89 -92
  63. package/dist-engine-src/src/functions/context.rs +56 -52
  64. package/dist-engine-src/src/functions/state.rs +51 -52
  65. package/dist-engine-src/src/init.rs +288 -154
  66. package/dist-engine-src/src/json_store/context.rs +15 -266
  67. package/dist-engine-src/src/json_store/mod.rs +26 -0
  68. package/dist-engine-src/src/json_store/store.rs +103 -718
  69. package/dist-engine-src/src/json_store/types.rs +4 -9
  70. package/dist-engine-src/src/lib.rs +49 -19
  71. package/dist-engine-src/src/live_state/context.rs +654 -790
  72. package/dist-engine-src/src/live_state/mod.rs +9 -3
  73. package/dist-engine-src/src/live_state/overlay.rs +4 -4
  74. package/dist-engine-src/src/live_state/types.rs +30 -21
  75. package/dist-engine-src/src/live_state/visibility.rs +514 -71
  76. package/dist-engine-src/src/plugin/install.rs +48 -48
  77. package/dist-engine-src/src/plugin/manifest.rs +7 -7
  78. package/dist-engine-src/src/plugin/materializer.rs +0 -275
  79. package/dist-engine-src/src/plugin/plugin_manifest.json +4 -3
  80. package/dist-engine-src/src/schema/builtin/lix_binary_blob_ref.json +2 -2
  81. package/dist-engine-src/src/schema/builtin/lix_branch_descriptor.json +34 -0
  82. package/dist-engine-src/src/schema/builtin/lix_branch_ref.json +48 -0
  83. package/dist-engine-src/src/schema/builtin/lix_change.json +3 -3
  84. package/dist-engine-src/src/schema/builtin/lix_commit.json +1 -1
  85. package/dist-engine-src/src/schema/builtin/lix_label_assignment.json +6 -6
  86. package/dist-engine-src/src/schema/builtin/mod.rs +18 -20
  87. package/dist-engine-src/src/schema/compatibility.rs +11 -11
  88. package/dist-engine-src/src/schema/definition.json +2 -2
  89. package/dist-engine-src/src/schema/definition.rs +5 -5
  90. package/dist-engine-src/src/schema/key.rs +3 -3
  91. package/dist-engine-src/src/schema/mod.rs +1 -1
  92. package/dist-engine-src/src/schema/tests.rs +18 -18
  93. package/dist-engine-src/src/session/context.rs +803 -148
  94. package/dist-engine-src/src/session/create_branch.rs +94 -0
  95. package/dist-engine-src/src/session/execute.rs +223 -83
  96. package/dist-engine-src/src/session/merge/analysis.rs +9 -3
  97. package/dist-engine-src/src/session/merge/{version.rs → branch.rs} +119 -129
  98. package/dist-engine-src/src/session/merge/conflicts.rs +2 -2
  99. package/dist-engine-src/src/session/merge/mod.rs +5 -6
  100. package/dist-engine-src/src/session/merge/stats.rs +7 -11
  101. package/dist-engine-src/src/session/mod.rs +15 -12
  102. package/dist-engine-src/src/session/switch_branch.rs +113 -0
  103. package/dist-engine-src/src/session/transaction.rs +495 -14
  104. package/dist-engine-src/src/sql2/{classify.rs → bind/classify.rs} +3 -75
  105. package/dist-engine-src/src/sql2/bind/error.rs +5 -0
  106. package/dist-engine-src/src/sql2/bind/expr.rs +29 -0
  107. package/dist-engine-src/src/sql2/bind/mod.rs +12 -0
  108. package/dist-engine-src/src/sql2/{udfs/public_call.rs → bind/public_udf.rs} +71 -3
  109. package/dist-engine-src/src/sql2/bind/read.rs +65 -0
  110. package/dist-engine-src/src/sql2/bind/statement.rs +2236 -0
  111. package/dist-engine-src/src/sql2/bind/table.rs +273 -0
  112. package/dist-engine-src/src/sql2/bind/write.rs +86 -0
  113. package/dist-engine-src/src/sql2/branch_scope.rs +436 -0
  114. package/dist-engine-src/src/sql2/catalog/capability.rs +20 -0
  115. package/dist-engine-src/src/sql2/catalog/entity_surface.rs +296 -0
  116. package/dist-engine-src/src/sql2/catalog/mod.rs +15 -0
  117. package/dist-engine-src/src/sql2/catalog/registry.rs +556 -0
  118. package/dist-engine-src/src/sql2/catalog/schema.rs +88 -0
  119. package/dist-engine-src/src/sql2/catalog/surface.rs +41 -0
  120. package/dist-engine-src/src/sql2/change_materialization.rs +122 -0
  121. package/dist-engine-src/src/sql2/context.rs +36 -30
  122. package/dist-engine-src/src/sql2/error.rs +1 -1
  123. package/dist-engine-src/src/sql2/exec/bound_public_write.rs +1593 -0
  124. package/dist-engine-src/src/sql2/exec/datafusion.rs +5266 -0
  125. package/dist-engine-src/src/sql2/exec/fast_write.rs +82 -0
  126. package/dist-engine-src/src/sql2/exec/mod.rs +24 -0
  127. package/dist-engine-src/src/sql2/exec/write.rs +661 -0
  128. package/dist-engine-src/src/sql2/filesystem_planner.rs +72 -77
  129. package/dist-engine-src/src/sql2/filesystem_visibility.rs +21 -21
  130. package/dist-engine-src/src/sql2/history_projection.rs +8 -8
  131. package/dist-engine-src/src/sql2/history_route.rs +35 -31
  132. package/dist-engine-src/src/sql2/mod.rs +28 -23
  133. package/dist-engine-src/src/sql2/optimize/datafusion.rs +1 -0
  134. package/dist-engine-src/src/sql2/optimize/mod.rs +2 -0
  135. package/dist-engine-src/src/sql2/optimize/simple_write.rs +116 -0
  136. package/dist-engine-src/src/sql2/parse/mod.rs +69 -0
  137. package/dist-engine-src/src/sql2/parse/normalize.rs +1 -0
  138. package/dist-engine-src/src/sql2/plan/branch_scope.rs +24 -0
  139. package/dist-engine-src/src/sql2/plan/mod.rs +5 -0
  140. package/dist-engine-src/src/sql2/plan/predicate.rs +22 -0
  141. package/dist-engine-src/src/sql2/plan/write.rs +147 -0
  142. package/dist-engine-src/src/sql2/predicate_typecheck.rs +258 -0
  143. package/dist-engine-src/src/sql2/{version_provider.rs → providers/branch.rs} +218 -214
  144. package/dist-engine-src/src/sql2/{change_provider.rs → providers/change.rs} +156 -42
  145. package/dist-engine-src/src/sql2/{directory_provider.rs → providers/directory.rs} +291 -322
  146. package/dist-engine-src/src/sql2/{directory_history_provider.rs → providers/directory_history.rs} +56 -42
  147. package/dist-engine-src/src/sql2/providers/entity.rs +1484 -0
  148. package/dist-engine-src/src/sql2/{entity_history_provider.rs → providers/entity_history.rs} +43 -31
  149. package/dist-engine-src/src/sql2/{file_provider.rs → providers/file.rs} +323 -316
  150. package/dist-engine-src/src/sql2/{file_history_provider.rs → providers/file_history.rs} +60 -46
  151. package/dist-engine-src/src/sql2/{history_provider.rs → providers/history.rs} +46 -32
  152. package/dist-engine-src/src/sql2/{lix_state_provider.rs → providers/lix_state.rs} +359 -329
  153. package/dist-engine-src/src/sql2/providers/mod.rs +508 -0
  154. package/dist-engine-src/src/sql2/read_only.rs +2 -2
  155. package/dist-engine-src/src/sql2/session.rs +47 -96
  156. package/dist-engine-src/src/sql2/storage/constraints.rs +1 -0
  157. package/dist-engine-src/src/sql2/storage/mod.rs +1 -0
  158. package/dist-engine-src/src/sql2/test_support/differential.rs +712 -0
  159. package/dist-engine-src/src/sql2/test_support/generators.rs +354 -0
  160. package/dist-engine-src/src/sql2/test_support/mod.rs +2 -0
  161. package/dist-engine-src/src/sql2/udfs/{lix_active_version_commit_id.rs → lix_active_branch_commit_id.rs} +7 -7
  162. package/dist-engine-src/src/sql2/udfs/mod.rs +3 -6
  163. package/dist-engine-src/src/sql2/write_normalization.rs +45 -22
  164. package/dist-engine-src/src/storage/conformance.rs +399 -0
  165. package/dist-engine-src/src/storage/context.rs +552 -288
  166. package/dist-engine-src/src/storage/mod.rs +48 -10
  167. package/dist-engine-src/src/storage/point.rs +440 -0
  168. package/dist-engine-src/src/storage/read_scope.rs +43 -64
  169. package/dist-engine-src/src/storage/reader.rs +867 -0
  170. package/dist-engine-src/src/storage/scan.rs +784 -0
  171. package/dist-engine-src/src/storage/spaces.rs +236 -0
  172. package/dist-engine-src/src/storage/stats.rs +80 -0
  173. package/dist-engine-src/src/storage/write_set.rs +962 -0
  174. package/dist-engine-src/src/storage_bench.rs +136 -4828
  175. package/dist-engine-src/src/test_support.rs +360 -138
  176. package/dist-engine-src/src/tracked_state/bench_support.rs +394 -0
  177. package/dist-engine-src/src/tracked_state/codec.rs +155 -1057
  178. package/dist-engine-src/src/tracked_state/commit_root_rebuild.rs +358 -0
  179. package/dist-engine-src/src/tracked_state/context.rs +1927 -993
  180. package/dist-engine-src/src/tracked_state/diff.rs +1715 -261
  181. package/dist-engine-src/src/tracked_state/merge.rs +74 -88
  182. package/dist-engine-src/src/tracked_state/mod.rs +19 -16
  183. package/dist-engine-src/src/tracked_state/{materialization.rs → row_materialization.rs} +50 -178
  184. package/dist-engine-src/src/tracked_state/storage.rs +243 -191
  185. package/dist-engine-src/src/tracked_state/tree.rs +247 -371
  186. package/dist-engine-src/src/tracked_state/types.rs +49 -42
  187. package/dist-engine-src/src/transaction/bench_support.rs +407 -0
  188. package/dist-engine-src/src/transaction/commit.rs +821 -713
  189. package/dist-engine-src/src/transaction/context.rs +705 -600
  190. package/dist-engine-src/src/transaction/mod.rs +13 -2
  191. package/dist-engine-src/src/transaction/normalization.rs +63 -76
  192. package/dist-engine-src/src/transaction/prep.rs +13 -13
  193. package/dist-engine-src/src/transaction/schema_resolver.rs +19 -5
  194. package/dist-engine-src/src/transaction/staging.rs +228 -434
  195. package/dist-engine-src/src/transaction/types.rs +41 -98
  196. package/dist-engine-src/src/transaction/validation.rs +382 -446
  197. package/dist-engine-src/src/untracked_state/codec.rs +337 -29
  198. package/dist-engine-src/src/untracked_state/context.rs +7 -7
  199. package/dist-engine-src/src/untracked_state/materialization.rs +2 -2
  200. package/dist-engine-src/src/untracked_state/mod.rs +1 -1
  201. package/dist-engine-src/src/untracked_state/storage.rs +659 -157
  202. package/dist-engine-src/src/untracked_state/types.rs +21 -21
  203. package/package.json +71 -68
  204. package/dist-engine-src/src/backend/kv.rs +0 -358
  205. package/dist-engine-src/src/backend/testing.rs +0 -658
  206. package/dist-engine-src/src/commit_store/codec.rs +0 -887
  207. package/dist-engine-src/src/commit_store/context.rs +0 -944
  208. package/dist-engine-src/src/commit_store/materialization.rs +0 -84
  209. package/dist-engine-src/src/commit_store/mod.rs +0 -16
  210. package/dist-engine-src/src/commit_store/storage.rs +0 -600
  211. package/dist-engine-src/src/commit_store/types.rs +0 -215
  212. package/dist-engine-src/src/schema/builtin/lix_version_descriptor.json +0 -34
  213. package/dist-engine-src/src/schema/builtin/lix_version_ref.json +0 -48
  214. package/dist-engine-src/src/session/create_version.rs +0 -88
  215. package/dist-engine-src/src/session/merge/apply.rs +0 -23
  216. package/dist-engine-src/src/session/optimization9_sql2_bench.rs +0 -100
  217. package/dist-engine-src/src/session/switch_version.rs +0 -110
  218. package/dist-engine-src/src/sql2/entity_provider.rs +0 -3211
  219. package/dist-engine-src/src/sql2/execute.rs +0 -3533
  220. package/dist-engine-src/src/sql2/public_bind/assignment.rs +0 -46
  221. package/dist-engine-src/src/sql2/public_bind/capability.rs +0 -41
  222. package/dist-engine-src/src/sql2/public_bind/dml.rs +0 -172
  223. package/dist-engine-src/src/sql2/public_bind/mod.rs +0 -26
  224. package/dist-engine-src/src/sql2/public_bind/table.rs +0 -168
  225. package/dist-engine-src/src/sql2/version_scope.rs +0 -394
  226. package/dist-engine-src/src/storage/types.rs +0 -501
  227. package/dist-engine-src/src/tracked_state/by_file_index.rs +0 -98
  228. package/dist-engine-src/src/tracked_state/materializer.rs +0 -488
  229. package/dist-engine-src/src/transaction/live_state_overlay.rs +0 -35
  230. package/dist-engine-src/src/version/lifecycle.rs +0 -221
  231. package/dist-engine-src/src/version/mod.rs +0 -13
  232. package/dist-engine-src/src/version/refs.rs +0 -330
  233. package/dist-engine-src/src/version/stage_rows.rs +0 -67
  234. package/dist-engine-src/src/version/types.rs +0 -21
@@ -2,7 +2,7 @@ mod context;
2
2
  mod overlay;
3
3
  mod reader;
4
4
  mod types;
5
- mod visibility;
5
+ pub(crate) mod visibility;
6
6
 
7
7
  #[allow(unused_imports)]
8
8
  pub(crate) use context::{LiveStateContext, LiveStateStoreReader};
@@ -10,6 +10,12 @@ pub(crate) use context::{LiveStateContext, LiveStateStoreReader};
10
10
  pub(crate) use reader::LiveStateReader;
11
11
  #[allow(unused_imports)]
12
12
  pub(crate) use types::{
13
- Bound, LiveStateFilter, LiveStateProjection, LiveStateRowIdentity, LiveStateRowRequest,
14
- LiveStateScanRequest, MaterializedLiveStateRow, ScanConstraint, ScanField, ScanOperator,
13
+ Bound, LiveStateFilter, LiveStateProjection, LiveStateRowFilter, LiveStateRowIdentity,
14
+ LiveStateRowRequest, LiveStateScanRequest, MaterializedLiveStateRow, ScanConstraint, ScanField,
15
+ ScanOperator,
16
+ };
17
+ #[allow(unused_imports)]
18
+ pub(crate) use visibility::{
19
+ expanded_branch_ids, overlay_scan_rows, resolve_visible_rows, StagedLiveStateRows,
20
+ VisibilityBranchScope, VisibilityRequest,
15
21
  };
@@ -5,7 +5,7 @@ use crate::live_state::{LiveStateRowIdentity, MaterializedLiveStateRow};
5
5
  /// Applies the local untracked overlay to tracked live-state rows.
6
6
  ///
7
7
  /// The visible live-state contract is "latest local untracked row wins" for
8
- /// the same version/schema/entity/file identity. This keeps SQL providers from
8
+ /// the same branch/schema/entity/file identity. This keeps SQL providers from
9
9
  /// knowing whether a visible row came from tracked changelog projection or from
10
10
  /// local untracked state.
11
11
  pub(crate) fn overlay_untracked_rows(
@@ -48,7 +48,7 @@ mod tests {
48
48
  fn different_identities_are_preserved() {
49
49
  let tracked = live_row("tracked", false, Some("change-tracked"));
50
50
  let mut untracked = live_row("untracked", true, None);
51
- untracked.entity_id = crate::entity_identity::EntityIdentity::single("other");
51
+ untracked.entity_pk = crate::entity_pk::EntityPk::single("other");
52
52
 
53
53
  let rows = overlay_untracked_rows(vec![tracked], vec![untracked]);
54
54
 
@@ -57,7 +57,7 @@ mod tests {
57
57
 
58
58
  fn live_row(value: &str, untracked: bool, change_id: Option<&str>) -> MaterializedLiveStateRow {
59
59
  MaterializedLiveStateRow {
60
- entity_id: crate::entity_identity::EntityIdentity::single("entity"),
60
+ entity_pk: crate::entity_pk::EntityPk::single("entity"),
61
61
  schema_key: "schema".to_string(),
62
62
  file_id: None,
63
63
  snapshot_content: Some(format!("{{\"value\":\"{value}\"}}")),
@@ -69,7 +69,7 @@ mod tests {
69
69
  change_id: change_id.map(str::to_string),
70
70
  commit_id: None,
71
71
  untracked,
72
- version_id: "global".to_string(),
72
+ branch_id: "global".to_string(),
73
73
  }
74
74
  }
75
75
  }
@@ -1,4 +1,4 @@
1
- use crate::entity_identity::EntityIdentity;
1
+ use crate::entity_pk::EntityPk;
2
2
  use crate::tracked_state::MaterializedTrackedStateRow;
3
3
  use crate::untracked_state::{
4
4
  MaterializedUntrackedStateRow, UntrackedStateFilter, UntrackedStateRowRequest,
@@ -11,7 +11,7 @@ use crate::{NullableKeyFilter, Value};
11
11
  /// generated fields should be caught before this type is constructed.
12
12
  #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
13
13
  pub(crate) struct MaterializedLiveStateRow {
14
- pub(crate) entity_id: EntityIdentity,
14
+ pub(crate) entity_pk: EntityPk,
15
15
  pub(crate) schema_key: String,
16
16
  pub(crate) file_id: Option<String>,
17
17
  pub(crate) snapshot_content: Option<String>,
@@ -23,13 +23,13 @@ pub(crate) struct MaterializedLiveStateRow {
23
23
  pub(crate) change_id: Option<String>,
24
24
  pub(crate) commit_id: Option<String>,
25
25
  pub(crate) untracked: bool,
26
- pub(crate) version_id: String,
26
+ pub(crate) branch_id: String,
27
27
  }
28
28
 
29
29
  impl From<MaterializedUntrackedStateRow> for MaterializedLiveStateRow {
30
30
  fn from(row: MaterializedUntrackedStateRow) -> Self {
31
31
  MaterializedLiveStateRow {
32
- entity_id: row.entity_id,
32
+ entity_pk: row.entity_pk,
33
33
  schema_key: row.schema_key,
34
34
  file_id: row.file_id,
35
35
  snapshot_content: row.snapshot_content,
@@ -41,7 +41,7 @@ impl From<MaterializedUntrackedStateRow> for MaterializedLiveStateRow {
41
41
  change_id: None,
42
42
  commit_id: None,
43
43
  untracked: true,
44
- version_id: row.version_id,
44
+ branch_id: row.branch_id,
45
45
  }
46
46
  }
47
47
  }
@@ -70,7 +70,7 @@ impl TryFrom<&MaterializedLiveStateRow> for MaterializedTrackedStateRow {
70
70
  };
71
71
 
72
72
  Ok(MaterializedTrackedStateRow {
73
- entity_id: row.entity_id.clone(),
73
+ entity_pk: row.entity_pk.clone(),
74
74
  schema_key: row.schema_key.clone(),
75
75
  file_id: row.file_id.clone(),
76
76
  snapshot_content: row.snapshot_content.clone(),
@@ -87,7 +87,7 @@ impl TryFrom<&MaterializedLiveStateRow> for MaterializedTrackedStateRow {
87
87
  impl From<&MaterializedLiveStateRow> for MaterializedUntrackedStateRow {
88
88
  fn from(row: &MaterializedLiveStateRow) -> Self {
89
89
  MaterializedUntrackedStateRow {
90
- entity_id: row.entity_id.clone(),
90
+ entity_pk: row.entity_pk.clone(),
91
91
  schema_key: row.schema_key.clone(),
92
92
  file_id: row.file_id.clone(),
93
93
  snapshot_content: row.snapshot_content.clone(),
@@ -96,7 +96,7 @@ impl From<&MaterializedLiveStateRow> for MaterializedUntrackedStateRow {
96
96
  created_at: row.created_at.clone(),
97
97
  updated_at: row.updated_at.clone(),
98
98
  global: row.global,
99
- version_id: row.version_id.clone(),
99
+ branch_id: row.branch_id.clone(),
100
100
  }
101
101
  }
102
102
  }
@@ -104,7 +104,7 @@ impl From<&MaterializedLiveStateRow> for MaterializedUntrackedStateRow {
104
104
  /// Which indexed field a live-state scan constraint applies to.
105
105
  #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
106
106
  pub(crate) enum ScanField {
107
- EntityId,
107
+ EntityPk,
108
108
  FileId,
109
109
  }
110
110
 
@@ -136,12 +136,14 @@ pub(crate) enum ScanOperator {
136
136
  /// Identity-centered filter for visible live entities.
137
137
  #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize, Default)]
138
138
  pub(crate) struct LiveStateFilter {
139
+ #[serde(default)]
140
+ pub(crate) rows: LiveStateRowFilter,
139
141
  #[serde(default)]
140
142
  pub(crate) schema_keys: Vec<String>,
141
143
  #[serde(default)]
142
- pub(crate) entity_ids: Vec<EntityIdentity>,
144
+ pub(crate) entity_pks: Vec<EntityPk>,
143
145
  #[serde(default)]
144
- pub(crate) version_ids: Vec<String>,
146
+ pub(crate) branch_ids: Vec<String>,
145
147
  #[serde(default)]
146
148
  pub(crate) file_ids: Vec<NullableKeyFilter<String>>,
147
149
  #[serde(default)]
@@ -152,12 +154,19 @@ pub(crate) struct LiveStateFilter {
152
154
  pub(crate) include_tombstones: bool,
153
155
  }
154
156
 
157
+ #[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
158
+ pub(crate) enum LiveStateRowFilter {
159
+ #[default]
160
+ All,
161
+ None,
162
+ }
163
+
155
164
  impl From<LiveStateFilter> for UntrackedStateFilter {
156
165
  fn from(filter: LiveStateFilter) -> Self {
157
166
  Self {
158
167
  schema_keys: filter.schema_keys,
159
- entity_ids: filter.entity_ids,
160
- version_ids: filter.version_ids,
168
+ entity_pks: filter.entity_pks,
169
+ branch_ids: filter.branch_ids,
161
170
  file_ids: filter.file_ids,
162
171
  }
163
172
  }
@@ -185,8 +194,8 @@ pub(crate) struct LiveStateScanRequest {
185
194
  #[derive(Debug, Clone, PartialEq)]
186
195
  pub(crate) struct LiveStateRowRequest {
187
196
  pub(crate) schema_key: String,
188
- pub(crate) version_id: String,
189
- pub(crate) entity_id: EntityIdentity,
197
+ pub(crate) branch_id: String,
198
+ pub(crate) entity_pk: EntityPk,
190
199
  pub(crate) file_id: NullableKeyFilter<String>,
191
200
  }
192
201
 
@@ -194,8 +203,8 @@ impl From<&LiveStateRowRequest> for UntrackedStateRowRequest {
194
203
  fn from(request: &LiveStateRowRequest) -> Self {
195
204
  Self {
196
205
  schema_key: request.schema_key.clone(),
197
- version_id: request.version_id.clone(),
198
- entity_id: request.entity_id.clone(),
206
+ branch_id: request.branch_id.clone(),
207
+ entity_pk: request.entity_pk.clone(),
199
208
  file_id: request.file_id.clone(),
200
209
  }
201
210
  }
@@ -204,18 +213,18 @@ impl From<&LiveStateRowRequest> for UntrackedStateRowRequest {
204
213
  /// Stable visible-row identity used for overlay composition.
205
214
  #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
206
215
  pub(crate) struct LiveStateRowIdentity {
207
- pub(crate) version_id: String,
216
+ pub(crate) branch_id: String,
208
217
  pub(crate) schema_key: String,
209
- pub(crate) entity_id: EntityIdentity,
218
+ pub(crate) entity_pk: EntityPk,
210
219
  pub(crate) file_id: Option<String>,
211
220
  }
212
221
 
213
222
  impl LiveStateRowIdentity {
214
223
  pub(crate) fn from_row(row: &MaterializedLiveStateRow) -> Self {
215
224
  Self {
216
- version_id: row.version_id.clone(),
225
+ branch_id: row.branch_id.clone(),
217
226
  schema_key: row.schema_key.clone(),
218
- entity_id: row.entity_id.clone(),
227
+ entity_pk: row.entity_pk.clone(),
219
228
  file_id: row.file_id.clone(),
220
229
  }
221
230
  }