@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
@@ -3,7 +3,6 @@
3
3
  /// Generates multiple orderings of the same operation set to test
4
4
  /// whether independent nodes converge to identical state regardless
5
5
  /// of message delivery order.
6
-
7
6
  use crate::transactions::Operation;
8
7
  use rand::seq::SliceRandom;
9
8
  use rand::SeedableRng;
@@ -30,7 +29,10 @@ pub struct OperationSchedule {
30
29
 
31
30
  impl OperationSchedule {
32
31
  pub fn new(strategy: ScheduleStrategy, operations: Vec<Operation>) -> Self {
33
- Self { strategy, operations }
32
+ Self {
33
+ strategy,
34
+ operations,
35
+ }
34
36
  }
35
37
 
36
38
  pub fn id(&self) -> String {
@@ -78,7 +80,10 @@ impl PermutationScheduler {
78
80
  /// Generate a comprehensive test set:
79
81
  /// - All deterministic permutations
80
82
  /// - N random permutations
81
- pub fn comprehensive_schedules(operations: &[Operation], random_count: usize) -> Vec<OperationSchedule> {
83
+ pub fn comprehensive_schedules(
84
+ operations: &[Operation],
85
+ random_count: usize,
86
+ ) -> Vec<OperationSchedule> {
82
87
  let mut schedules = Self::deterministic_schedules(operations);
83
88
  schedules.extend(Self::random_schedules(operations, random_count));
84
89
  schedules
@@ -115,7 +120,7 @@ impl PermutationScheduler {
115
120
  mod tests {
116
121
  use super::*;
117
122
  use crate::convergence::VectorClock;
118
- use crate::transactions::{OperationId, OperationCommand, StateVersion};
123
+ use crate::transactions::{OperationCommand, OperationId, StateVersion};
119
124
  use std::collections::HashMap;
120
125
 
121
126
  fn create_test_operation(seq: u64, collection: &str, record_id: &str, value: i32) -> Operation {
@@ -165,7 +170,10 @@ mod tests {
165
170
 
166
171
  // All should be RandomSeed variants
167
172
  for schedule in &schedules {
168
- assert!(matches!(schedule.strategy, ScheduleStrategy::RandomSeed { .. }));
173
+ assert!(matches!(
174
+ schedule.strategy,
175
+ ScheduleStrategy::RandomSeed { .. }
176
+ ));
169
177
  }
170
178
  }
171
179
 
@@ -181,8 +189,16 @@ mod tests {
181
189
 
182
190
  // Same seed should produce same order
183
191
  for i in 0..3 {
184
- let ops1: Vec<u64> = schedules1[i].operations.iter().map(|o| o.operation_id.sequence).collect();
185
- let ops2: Vec<u64> = schedules2[i].operations.iter().map(|o| o.operation_id.sequence).collect();
192
+ let ops1: Vec<u64> = schedules1[i]
193
+ .operations
194
+ .iter()
195
+ .map(|o| o.operation_id.sequence)
196
+ .collect();
197
+ let ops2: Vec<u64> = schedules2[i]
198
+ .operations
199
+ .iter()
200
+ .map(|o| o.operation_id.sequence)
201
+ .collect();
186
202
  assert_eq!(ops1, ops2);
187
203
  }
188
204
  }
@@ -222,7 +238,11 @@ mod tests {
222
238
 
223
239
  for schedule in &schedules {
224
240
  assert_eq!(schedule.operations.len(), 3);
225
- let seq: Vec<u64> = schedule.operations.iter().map(|o| o.operation_id.sequence).collect();
241
+ let seq: Vec<u64> = schedule
242
+ .operations
243
+ .iter()
244
+ .map(|o| o.operation_id.sequence)
245
+ .collect();
226
246
  assert!(seq.contains(&1));
227
247
  assert!(seq.contains(&2));
228
248
  assert!(seq.contains(&3));
@@ -240,7 +260,11 @@ mod tests {
240
260
  let schedules = PermutationScheduler::deterministic_schedules(&ops);
241
261
  let original = &schedules[0];
242
262
 
243
- let seq: Vec<u64> = original.operations.iter().map(|o| o.operation_id.sequence).collect();
263
+ let seq: Vec<u64> = original
264
+ .operations
265
+ .iter()
266
+ .map(|o| o.operation_id.sequence)
267
+ .collect();
244
268
  assert_eq!(seq, vec![1, 2, 3]);
245
269
  }
246
270
 
@@ -255,7 +279,11 @@ mod tests {
255
279
  let schedules = PermutationScheduler::deterministic_schedules(&ops);
256
280
  let reversed = &schedules[1];
257
281
 
258
- let seq: Vec<u64> = reversed.operations.iter().map(|o| o.operation_id.sequence).collect();
282
+ let seq: Vec<u64> = reversed
283
+ .operations
284
+ .iter()
285
+ .map(|o| o.operation_id.sequence)
286
+ .collect();
259
287
  assert_eq!(seq, vec![3, 2, 1]);
260
288
  }
261
289
  }
@@ -5,7 +5,6 @@
5
5
  /// process writes → crash → restart → recover
6
6
  ///
7
7
  /// Critical test: Same data after arbitrary crash/recovery cycles.
8
-
9
8
  use std::collections::HashMap;
10
9
 
11
10
  /// Point at which to inject a crash during persistence
@@ -26,7 +25,7 @@ pub enum PersistenceCrashPoint {
26
25
  /// Write-ahead log entry (simplified)
27
26
  #[derive(Clone, Debug, Eq, PartialEq)]
28
27
  pub struct WALEntry {
29
- pub lsn: u64, // Log sequence number
28
+ pub lsn: u64, // Log sequence number
30
29
  pub operation_id: String,
31
30
  pub data: Vec<u8>,
32
31
  pub checksum: u32,
@@ -178,7 +177,10 @@ impl DurablePersistenceLayer {
178
177
 
179
178
  /// Simulate disk corruption: flip random bytes
180
179
  pub fn corrupt_tail(&mut self, num_entries_affected: usize) {
181
- let start = self.committed_log.len().saturating_sub(num_entries_affected);
180
+ let start = self
181
+ .committed_log
182
+ .len()
183
+ .saturating_sub(num_entries_affected);
182
184
  for entry in &mut self.committed_log[start..] {
183
185
  if !entry.data.is_empty() {
184
186
  entry.data[0] ^= 0xFF; // Flip all bits in first byte
@@ -229,7 +231,9 @@ impl Default for DurablePersistenceLayer {
229
231
  /// Result of a write operation
230
232
  #[derive(Clone, Debug, Eq, PartialEq)]
231
233
  pub enum WriteResult {
232
- Success { lsn: u64 },
234
+ Success {
235
+ lsn: u64,
236
+ },
233
237
  Crashed {
234
238
  written_to_buffer: bool,
235
239
  fsynced: bool,
@@ -321,7 +325,10 @@ impl PersistenceContractVerifier {
321
325
  if scenario.corrupted_count > 0 {
322
326
  // If corruption occurred, it should be detected or entry dropped
323
327
  // (not silently included in recovered)
324
- let expected_max = scenario.written_operations.len().saturating_sub(scenario.corrupted_count);
328
+ let expected_max = scenario
329
+ .written_operations
330
+ .len()
331
+ .saturating_sub(scenario.corrupted_count);
325
332
  if scenario.recovered_operations.len() > expected_max {
326
333
  corrupted_undetected += 1;
327
334
  }
@@ -353,7 +360,9 @@ impl Default for PersistenceContractVerifier {
353
360
  /// Result of fsync durability verification
354
361
  #[derive(Clone, Debug, Eq, PartialEq)]
355
362
  pub enum FsyncDurabilityResult {
356
- Satisfied { scenarios_checked: usize },
363
+ Satisfied {
364
+ scenarios_checked: usize,
365
+ },
357
366
  Violated {
358
367
  scenario: String,
359
368
  written: usize,
@@ -400,13 +409,7 @@ mod tests {
400
409
  PersistenceCrashPoint::AfterFsyncBeforeReturn,
401
410
  );
402
411
 
403
- assert!(matches!(
404
- result,
405
- WriteResult::Crashed {
406
- fsynced: true,
407
- ..
408
- }
409
- ));
412
+ assert!(matches!(result, WriteResult::Crashed { fsynced: true, .. }));
410
413
  assert_eq!(wal.get_log().len(), 1);
411
414
  }
412
415
 
@@ -524,7 +527,10 @@ mod tests {
524
527
  );
525
528
 
526
529
  let result = verifier.verify_corruption_detection();
527
- assert!(matches!(result, CorruptionDetectionResult::Satisfied { .. }));
530
+ assert!(matches!(
531
+ result,
532
+ CorruptionDetectionResult::Satisfied { .. }
533
+ ));
528
534
  }
529
535
 
530
536
  #[test]