@feltdb/core 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-state.d.ts +20 -0
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js +36 -0
- package/dist/build-identity.json +12 -4
- package/dist/cli/commands.js +187 -4
- package/dist/cli/publish-engine.js +116 -16
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +3 -0
- package/dist/create/build-identity.json +12 -4
- package/dist/create/managed-account.js +93 -35
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +6 -509
- package/dist/create/server-source/Cargo.toml +2 -13
- package/dist/create/server-source/crates/feltdb-client/Cargo.toml +1 -1
- package/dist/create/server-source/crates/feltdb-server/Cargo.toml +1 -1
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +255 -12
- package/dist/create/server-source/crates/feltdb-wasm/Cargo.toml +1 -1
- package/dist/db.d.ts +11 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +15 -2
- package/dist/error-codes.d.ts +5 -0
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +9 -1
- package/dist/http-db.d.ts +16 -0
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +36 -6
- package/dist/managed-recovery.d.ts +6 -0
- package/dist/managed-recovery.d.ts.map +1 -1
- package/dist/managed-recovery.js +9 -0
- package/dist/studio-app/assets/{feltdb_wasm-BjM1ylL3.js → feltdb_wasm-DtybUY0q.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-DsgIUwaB.wasm +0 -0
- package/dist/studio-app/assets/index-C4OffsZl.js +37 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/wasm/package.json +1 -1
- package/dist/workload.d.ts +55 -3
- package/dist/workload.d.ts.map +1 -1
- package/dist/workload.js +23 -0
- package/dist/workspace/workspace-connection.d.ts.map +1 -1
- package/dist/workspace/workspace-connection.js +14 -3
- package/package.json +1 -1
- package/dist/create/server-source/crates/feltdb/Cargo.lock +0 -175
- package/dist/create/server-source/crates/feltdb/Cargo.toml +0 -102
- package/dist/create/server-source/crates/feltdb/LICENSE +0 -21
- package/dist/create/server-source/crates/feltdb/README.md +0 -75
- package/dist/create/server-source/crates/feltdb/benches/baselines/gate-13-redux.json +0 -370
- package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +0 -589
- package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +0 -247
- package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +0 -440
- package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +0 -275
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +0 -381
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +0 -467
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +0 -489
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +0 -281
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +0 -606
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +0 -531
- package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +0 -462
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +0 -505
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +0 -484
- package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +0 -758
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +0 -421
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +0 -329
- package/dist/create/server-source/crates/feltdb/src/acceptance_tests.rs +0 -1705
- package/dist/create/server-source/crates/feltdb/src/acquisition.rs +0 -286
- package/dist/create/server-source/crates/feltdb/src/admission.rs +0 -185
- package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +0 -507
- package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +0 -539
- package/dist/create/server-source/crates/feltdb/src/agent_state.rs +0 -320
- package/dist/create/server-source/crates/feltdb/src/agent_transition_contract.rs +0 -1545
- package/dist/create/server-source/crates/feltdb/src/analytics.rs +0 -521
- package/dist/create/server-source/crates/feltdb/src/application.rs +0 -2674
- package/dist/create/server-source/crates/feltdb/src/application_runtime.rs +0 -1070
- package/dist/create/server-source/crates/feltdb/src/authority.rs +0 -479
- package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +0 -847
- package/dist/create/server-source/crates/feltdb/src/authorization.rs +0 -1030
- package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +0 -1122
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority-client.rs +0 -32
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority.rs +0 -19
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +0 -1474
- package/dist/create/server-source/crates/feltdb/src/capabilities/mod.rs +0 -8
- package/dist/create/server-source/crates/feltdb/src/capabilities/search.rs +0 -418
- package/dist/create/server-source/crates/feltdb/src/capabilities/vector.rs +0 -482
- package/dist/create/server-source/crates/feltdb/src/capability.rs +0 -903
- package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +0 -263
- package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -77
- package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +0 -496
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +0 -2574
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +0 -212
- package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +0 -422
- package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +0 -445
- package/dist/create/server-source/crates/feltdb/src/content_distribution.rs +0 -465
- package/dist/create/server-source/crates/feltdb/src/convergence.rs +0 -634
- package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +0 -427
- package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +0 -376
- package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +0 -365
- package/dist/create/server-source/crates/feltdb/src/cron.rs +0 -294
- package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +0 -483
- package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +0 -477
- package/dist/create/server-source/crates/feltdb/src/distributed_tests.rs +0 -1003
- package/dist/create/server-source/crates/feltdb/src/distributed_transactions.rs +0 -1334
- package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +0 -368
- package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +0 -231
- package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +0 -482
- package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +0 -203
- package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +0 -317
- package/dist/create/server-source/crates/feltdb/src/equality_index.rs +0 -595
- package/dist/create/server-source/crates/feltdb/src/execution.rs +0 -426
- package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +0 -214
- package/dist/create/server-source/crates/feltdb/src/indexing.rs +0 -776
- package/dist/create/server-source/crates/feltdb/src/lib.rs +0 -7365
- package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +0 -234
- package/dist/create/server-source/crates/feltdb/src/materialization.rs +0 -184
- package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -266
- package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +0 -310
- package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +0 -736
- package/dist/create/server-source/crates/feltdb/src/observability.rs +0 -379
- package/dist/create/server-source/crates/feltdb/src/operation.rs +0 -290
- package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +0 -439
- package/dist/create/server-source/crates/feltdb/src/operation_log.rs +0 -349
- package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +0 -332
- package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +0 -718
- package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +0 -487
- package/dist/create/server-source/crates/feltdb/src/peer_registry.rs +0 -166
- package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +0 -289
- package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +0 -566
- package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +0 -3391
- package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +0 -203
- package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +0 -261
- package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +0 -502
- package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +0 -216
- package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +0 -303
- package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +0 -323
- package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +0 -531
- package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +0 -406
- package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +0 -436
- package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +0 -387
- package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +0 -378
- package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +0 -359
- package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +0 -372
- package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +0 -404
- package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +0 -376
- package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +0 -461
- package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +0 -2125
- package/dist/create/server-source/crates/feltdb/src/production_api.rs +0 -418
- package/dist/create/server-source/crates/feltdb/src/provenance.rs +0 -207
- package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +0 -126
- package/dist/create/server-source/crates/feltdb/src/query_performance.rs +0 -218
- package/dist/create/server-source/crates/feltdb/src/read_basis.rs +0 -257
- package/dist/create/server-source/crates/feltdb/src/references.rs +0 -404
- package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +0 -401
- package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +0 -501
- package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +0 -680
- package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +0 -163
- package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +0 -133
- package/dist/create/server-source/crates/feltdb/src/routing.rs +0 -409
- package/dist/create/server-source/crates/feltdb/src/semantic_decision.rs +0 -2029
- package/dist/create/server-source/crates/feltdb/src/semantic_query.rs +0 -599
- package/dist/create/server-source/crates/feltdb/src/sharding.rs +0 -549
- package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +0 -516
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +0 -6003
- package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +0 -222
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +0 -320
- package/dist/create/server-source/crates/feltdb/src/state_hash.rs +0 -291
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +0 -4158
- package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +0 -379
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +0 -673
- package/dist/create/server-source/crates/feltdb/src/storage.rs +0 -273
- package/dist/create/server-source/crates/feltdb/src/submission.rs +0 -471
- package/dist/create/server-source/crates/feltdb/src/sync.rs +0 -495
- package/dist/create/server-source/crates/feltdb/src/sync_contract.rs +0 -822
- package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +0 -433
- package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +0 -462
- package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +0 -965
- package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +0 -1120
- package/dist/create/server-source/crates/feltdb/src/transactions.rs +0 -643
- package/dist/create/server-source/crates/feltdb/src/trigger.rs +0 -390
- package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +0 -749
- package/dist/create/server-source/crates/feltdb/src/versioned_object_substrate.rs +0 -708
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +0 -1269
- package/dist/create/server-source/crates/feltdb/src/workflow.rs +0 -713
- package/dist/create/server-source/crates/feltdb/src/workflow_acceptance_tests.rs +0 -510
- package/dist/create/server-source/crates/feltdb/src/workflow_integration.rs +0 -354
- package/dist/create/server-source/crates/feltdb/src/workflow_runtime.rs +0 -594
- package/dist/create/server-source/crates/feltdb/src/workload.rs +0 -4222
- package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +0 -456
- package/dist/create/server-source/crates/feltdb/tests/agent_state_native.rs +0 -1188
- package/dist/create/server-source/crates/feltdb/tests/agent_transition_contract_conformance.rs +0 -2884
- package/dist/create/server-source/crates/feltdb/tests/authority_process.rs +0 -297
- package/dist/create/server-source/crates/feltdb/tests/authority_transaction_identity.rs +0 -534
- package/dist/create/server-source/crates/feltdb/tests/bounded_read_contract.rs +0 -132
- package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/common/mod.rs +0 -96
- package/dist/create/server-source/crates/feltdb/tests/compaction_stall_contract.rs +0 -272
- package/dist/create/server-source/crates/feltdb/tests/crash_durability_contract.rs +0 -467
- package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +0 -309
- package/dist/create/server-source/crates/feltdb/tests/durable_backup_contract.rs +0 -445
- package/dist/create/server-source/crates/feltdb/tests/durable_corruption_contract.rs +0 -518
- package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +0 -392
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +0 -850
- package/dist/create/server-source/crates/feltdb/tests/fixtures/agent_transition_corpus.json +0 -23340
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +0 -1916
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +0 -1878
- package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +0 -1862
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_evidence.rs +0 -123
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_substrate_completion.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/local_process_ownership.rs +0 -69
- package/dist/create/server-source/crates/feltdb/tests/managed_incident_regression.rs +0 -191
- package/dist/create/server-source/crates/feltdb/tests/operational_health_contract.rs +0 -278
- package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +0 -234
- package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +0 -947
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +0 -404
- package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +0 -916
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +0 -1045
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +0 -347
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +0 -361
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +0 -330
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +0 -93
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +0 -622
- package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +0 -517
- package/dist/create/server-source/crates/feltdb/tests/production_certification.rs +0 -1153
- package/dist/create/server-source/crates/feltdb/tests/production_contract.rs +0 -771
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +0 -1383
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +0 -868
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +0 -221
- package/dist/create/server-source/crates/feltdb/tests/replicated_history_contract.rs +0 -417
- package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +0 -338
- package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +0 -1039
- package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +0 -739
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +0 -452
- package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +0 -81
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +0 -438
- package/dist/create/server-source/crates/feltdb/tests/semantic_decision.rs +0 -1165
- package/dist/create/server-source/crates/feltdb/tests/semantic_query.rs +0 -767
- package/dist/create/server-source/crates/feltdb/tests/semantic_query_contract.rs +0 -363
- package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +0 -1799
- package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +0 -1316
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +0 -358
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +0 -365
- package/dist/create/server-source/crates/feltdb/tests/state_ref_authority.rs +0 -918
- package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/storage_independent_versioned_object_substrate.rs +0 -328
- package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +0 -255
- package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +0 -249
- package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +0 -994
- package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +0 -484
- package/dist/studio-app/assets/feltdb_wasm_bg-TseJn2Ax.wasm +0 -0
- package/dist/studio-app/assets/index-1wd0uKua.js +0 -30
|
@@ -1,439 +0,0 @@
|
|
|
1
|
-
/// Operation Algebra Registry
|
|
2
|
-
///
|
|
3
|
-
/// Declares the convergence semantics and merge algebra for every
|
|
4
|
-
/// operation type in FeltDB. Gate 2 requires every replicated operation
|
|
5
|
-
/// to declare how it converges under concurrent application.
|
|
6
|
-
///
|
|
7
|
-
/// This registry is the foundation of operation-specific CRDT semantics.
|
|
8
|
-
use std::collections::HashMap;
|
|
9
|
-
|
|
10
|
-
/// Conflict classification for an operation
|
|
11
|
-
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
|
12
|
-
pub enum ConflictType {
|
|
13
|
-
/// Commutative: can be applied in any order
|
|
14
|
-
Commutative,
|
|
15
|
-
/// Register: LWW (last-write-wins by timestamp)
|
|
16
|
-
Register,
|
|
17
|
-
/// Set CRDT: union on add, tombstone on remove
|
|
18
|
-
SetCRDT,
|
|
19
|
-
/// Counter CRDT: additive
|
|
20
|
-
CounterCRDT,
|
|
21
|
-
/// Custom: user-provided merge semantics
|
|
22
|
-
Custom(String),
|
|
23
|
-
/// Transaction: requires precondition/consensus
|
|
24
|
-
Transaction,
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/// How this operation converges with concurrent applications
|
|
28
|
-
#[derive(Clone, Debug, PartialEq, Eq)]
|
|
29
|
-
pub enum ConvergenceSemantic {
|
|
30
|
-
/// All orderings produce identical result
|
|
31
|
-
StrictlyCommutative,
|
|
32
|
-
/// Deterministic merge function resolves concurrent versions
|
|
33
|
-
DeterministicMerge,
|
|
34
|
-
/// Requires consensus/total ordering
|
|
35
|
-
ConsensusRequired,
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/// Declared convergence algebra for an operation type
|
|
39
|
-
#[derive(Clone, Debug)]
|
|
40
|
-
pub struct OperationAlgebra {
|
|
41
|
-
pub operation_type: String,
|
|
42
|
-
pub read_set_bound: String, // "single_record", "multiple_records", etc
|
|
43
|
-
pub write_set_bound: String, // "single_record", "multiple_records", etc
|
|
44
|
-
pub conflict_type: ConflictType,
|
|
45
|
-
pub convergence_semantic: ConvergenceSemantic,
|
|
46
|
-
pub merge_function_description: String,
|
|
47
|
-
pub commutativity_proof: Option<String>, // Reference to commutative algebra proof
|
|
48
|
-
pub determinism_proof: Option<String>, // Reference to determinism proof
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
impl OperationAlgebra {
|
|
52
|
-
pub fn new(
|
|
53
|
-
operation_type: &str,
|
|
54
|
-
read_set_bound: &str,
|
|
55
|
-
write_set_bound: &str,
|
|
56
|
-
conflict_type: ConflictType,
|
|
57
|
-
convergence_semantic: ConvergenceSemantic,
|
|
58
|
-
merge_function_description: &str,
|
|
59
|
-
) -> Self {
|
|
60
|
-
Self {
|
|
61
|
-
operation_type: operation_type.to_string(),
|
|
62
|
-
read_set_bound: read_set_bound.to_string(),
|
|
63
|
-
write_set_bound: write_set_bound.to_string(),
|
|
64
|
-
conflict_type,
|
|
65
|
-
convergence_semantic,
|
|
66
|
-
merge_function_description: merge_function_description.to_string(),
|
|
67
|
-
commutativity_proof: None,
|
|
68
|
-
determinism_proof: None,
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
pub fn with_proofs(
|
|
73
|
-
mut self,
|
|
74
|
-
commutativity: Option<String>,
|
|
75
|
-
determinism: Option<String>,
|
|
76
|
-
) -> Self {
|
|
77
|
-
self.commutativity_proof = commutativity;
|
|
78
|
-
self.determinism_proof = determinism;
|
|
79
|
-
self
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
pub fn is_commutative(&self) -> bool {
|
|
83
|
-
self.convergence_semantic == ConvergenceSemantic::StrictlyCommutative
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
pub fn is_deterministic(&self) -> bool {
|
|
87
|
-
self.convergence_semantic != ConvergenceSemantic::ConsensusRequired
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/// Registry of all operation types and their convergence algebra
|
|
92
|
-
pub struct OperationAlgebraRegistry {
|
|
93
|
-
algebras: HashMap<String, OperationAlgebra>,
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
impl OperationAlgebraRegistry {
|
|
97
|
-
/// Create new registry with standard operations
|
|
98
|
-
pub fn new() -> Self {
|
|
99
|
-
let mut registry = Self {
|
|
100
|
-
algebras: HashMap::new(),
|
|
101
|
-
};
|
|
102
|
-
registry.register_standard_operations();
|
|
103
|
-
registry
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/// Register all standard FeltDB operation types
|
|
107
|
-
fn register_standard_operations(&mut self) {
|
|
108
|
-
// SetField: Last-Write-Wins register
|
|
109
|
-
self.register(
|
|
110
|
-
OperationAlgebra::new(
|
|
111
|
-
"SetField",
|
|
112
|
-
"single_record.field",
|
|
113
|
-
"single_record.field",
|
|
114
|
-
ConflictType::Register,
|
|
115
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
116
|
-
"LWW: max(timestamp, value)",
|
|
117
|
-
)
|
|
118
|
-
.with_proofs(
|
|
119
|
-
None,
|
|
120
|
-
Some("Deterministic: higher timestamp wins deterministically".to_string()),
|
|
121
|
-
),
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
// Increment: Counter CRDT (commutative addition)
|
|
125
|
-
self.register(
|
|
126
|
-
OperationAlgebra::new(
|
|
127
|
-
"Increment",
|
|
128
|
-
"single_record.field",
|
|
129
|
-
"single_record.field",
|
|
130
|
-
ConflictType::CounterCRDT,
|
|
131
|
-
ConvergenceSemantic::StrictlyCommutative,
|
|
132
|
-
"Counter CRDT: sum(all_increments)",
|
|
133
|
-
)
|
|
134
|
-
.with_proofs(
|
|
135
|
-
Some("Commutative: addition commutes over integers".to_string()),
|
|
136
|
-
Some("Deterministic: sum is deterministic".to_string()),
|
|
137
|
-
),
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
// AddToSet: Set CRDT (union on add)
|
|
141
|
-
self.register(
|
|
142
|
-
OperationAlgebra::new(
|
|
143
|
-
"AddToSet",
|
|
144
|
-
"single_record.set",
|
|
145
|
-
"single_record.set",
|
|
146
|
-
ConflictType::SetCRDT,
|
|
147
|
-
ConvergenceSemantic::StrictlyCommutative,
|
|
148
|
-
"Set CRDT: union(all_adds)",
|
|
149
|
-
)
|
|
150
|
-
.with_proofs(
|
|
151
|
-
Some("Commutative: set union is commutative".to_string()),
|
|
152
|
-
Some("Deterministic: union is deterministic".to_string()),
|
|
153
|
-
),
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
// RemoveFromSet: Set CRDT (tombstone semantics)
|
|
157
|
-
self.register(
|
|
158
|
-
OperationAlgebra::new(
|
|
159
|
-
"RemoveFromSet",
|
|
160
|
-
"single_record.set",
|
|
161
|
-
"single_record.set",
|
|
162
|
-
ConflictType::SetCRDT,
|
|
163
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
164
|
-
"Set CRDT: (set - tombstones) ∪ (tombstones resolved by causal ordering)",
|
|
165
|
-
)
|
|
166
|
-
.with_proofs(
|
|
167
|
-
None,
|
|
168
|
-
Some("Deterministic: tombstone semantics with causal ordering".to_string()),
|
|
169
|
-
),
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
// Create: Conflict detection (earliest timestamp wins deterministically)
|
|
173
|
-
self.register(
|
|
174
|
-
OperationAlgebra::new(
|
|
175
|
-
"Create",
|
|
176
|
-
"none",
|
|
177
|
-
"single_record",
|
|
178
|
-
ConflictType::Register,
|
|
179
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
180
|
-
"Deterministic: min(timestamp, id) for create conflicts",
|
|
181
|
-
)
|
|
182
|
-
.with_proofs(
|
|
183
|
-
None,
|
|
184
|
-
Some("Deterministic: total order via (timestamp, node_id)".to_string()),
|
|
185
|
-
),
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
// Delete: Tombstone semantics (deterministic)
|
|
189
|
-
self.register(
|
|
190
|
-
OperationAlgebra::new(
|
|
191
|
-
"Delete",
|
|
192
|
-
"single_record",
|
|
193
|
-
"single_record",
|
|
194
|
-
ConflictType::Register,
|
|
195
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
196
|
-
"Tombstone: delete_timestamp determines visibility",
|
|
197
|
-
)
|
|
198
|
-
.with_proofs(
|
|
199
|
-
None,
|
|
200
|
-
Some("Deterministic: tombstone ordering via timestamp and node_id".to_string()),
|
|
201
|
-
),
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
// Transfer: Business invariant (requires consensus/transaction)
|
|
205
|
-
self.register(
|
|
206
|
-
OperationAlgebra::new(
|
|
207
|
-
"Transfer",
|
|
208
|
-
"source_record,dest_record",
|
|
209
|
-
"source_record,dest_record",
|
|
210
|
-
ConflictType::Transaction,
|
|
211
|
-
ConvergenceSemantic::ConsensusRequired,
|
|
212
|
-
"Transaction: requires precondition validation and consensus ordering",
|
|
213
|
-
)
|
|
214
|
-
.with_proofs(
|
|
215
|
-
None,
|
|
216
|
-
Some("Consensus: total ordering via distributed log".to_string()),
|
|
217
|
-
),
|
|
218
|
-
);
|
|
219
|
-
|
|
220
|
-
// Append: Sequence ordering (vector clock ordering)
|
|
221
|
-
self.register(
|
|
222
|
-
OperationAlgebra::new(
|
|
223
|
-
"Append",
|
|
224
|
-
"single_sequence",
|
|
225
|
-
"single_sequence",
|
|
226
|
-
ConflictType::Custom("SequenceOrdering".to_string()),
|
|
227
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
228
|
-
"Sequence: vector clock establishes total order",
|
|
229
|
-
)
|
|
230
|
-
.with_proofs(
|
|
231
|
-
None,
|
|
232
|
-
Some("Deterministic: vector clock provides causal lineage".to_string()),
|
|
233
|
-
),
|
|
234
|
-
);
|
|
235
|
-
|
|
236
|
-
// Noop: No-operation (trivially commutative)
|
|
237
|
-
self.register(
|
|
238
|
-
OperationAlgebra::new(
|
|
239
|
-
"Noop",
|
|
240
|
-
"none",
|
|
241
|
-
"none",
|
|
242
|
-
ConflictType::Commutative,
|
|
243
|
-
ConvergenceSemantic::StrictlyCommutative,
|
|
244
|
-
"No-operation: idempotent, affects nothing",
|
|
245
|
-
)
|
|
246
|
-
.with_proofs(
|
|
247
|
-
Some("Trivially commutative: no state affected".to_string()),
|
|
248
|
-
Some("Trivially deterministic: no change produced".to_string()),
|
|
249
|
-
),
|
|
250
|
-
);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/// Register an operation algebra
|
|
254
|
-
pub fn register(&mut self, algebra: OperationAlgebra) {
|
|
255
|
-
self.algebras
|
|
256
|
-
.insert(algebra.operation_type.clone(), algebra);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/// Look up algebra for operation type
|
|
260
|
-
pub fn get(&self, operation_type: &str) -> Option<&OperationAlgebra> {
|
|
261
|
-
self.algebras.get(operation_type)
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/// Check if operation type is registered
|
|
265
|
-
pub fn contains(&self, operation_type: &str) -> bool {
|
|
266
|
-
self.algebras.contains_key(operation_type)
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/// Get all registered algebras
|
|
270
|
-
pub fn all_algebras(&self) -> Vec<&OperationAlgebra> {
|
|
271
|
-
self.algebras.values().collect()
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/// Verify all registered operations declare convergence semantics
|
|
275
|
-
pub fn verify_all_declared(&self) -> Result<(), Vec<String>> {
|
|
276
|
-
let undeclared: Vec<String> = self
|
|
277
|
-
.algebras
|
|
278
|
-
.values()
|
|
279
|
-
.filter(|a| a.convergence_semantic == ConvergenceSemantic::ConsensusRequired)
|
|
280
|
-
.map(|a| a.operation_type.clone())
|
|
281
|
-
.collect();
|
|
282
|
-
|
|
283
|
-
if undeclared.is_empty() {
|
|
284
|
-
Ok(())
|
|
285
|
-
} else {
|
|
286
|
-
Err(undeclared)
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/// Count operations by convergence semantic
|
|
291
|
-
pub fn convergence_statistics(&self) -> HashMap<String, usize> {
|
|
292
|
-
let mut stats = HashMap::new();
|
|
293
|
-
for algebra in self.algebras.values() {
|
|
294
|
-
let key = format!("{:?}", algebra.convergence_semantic);
|
|
295
|
-
*stats.entry(key).or_insert(0) += 1;
|
|
296
|
-
}
|
|
297
|
-
stats
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
impl Default for OperationAlgebraRegistry {
|
|
302
|
-
fn default() -> Self {
|
|
303
|
-
Self::new()
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
#[cfg(test)]
|
|
308
|
-
mod tests {
|
|
309
|
-
use super::*;
|
|
310
|
-
|
|
311
|
-
#[test]
|
|
312
|
-
fn test_registry_creation() {
|
|
313
|
-
let registry = OperationAlgebraRegistry::new();
|
|
314
|
-
assert!(registry.algebras.len() > 0);
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
#[test]
|
|
318
|
-
fn test_setfield_is_lww_register() {
|
|
319
|
-
let registry = OperationAlgebraRegistry::new();
|
|
320
|
-
let setfield = registry.get("SetField").unwrap();
|
|
321
|
-
|
|
322
|
-
assert_eq!(setfield.conflict_type, ConflictType::Register);
|
|
323
|
-
assert_eq!(
|
|
324
|
-
setfield.convergence_semantic,
|
|
325
|
-
ConvergenceSemantic::DeterministicMerge
|
|
326
|
-
);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
#[test]
|
|
330
|
-
fn test_increment_is_commutative() {
|
|
331
|
-
let registry = OperationAlgebraRegistry::new();
|
|
332
|
-
let increment = registry.get("Increment").unwrap();
|
|
333
|
-
|
|
334
|
-
assert!(increment.is_commutative());
|
|
335
|
-
assert_eq!(increment.conflict_type, ConflictType::CounterCRDT);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
#[test]
|
|
339
|
-
fn test_addtoset_is_commutative() {
|
|
340
|
-
let registry = OperationAlgebraRegistry::new();
|
|
341
|
-
let addtoset = registry.get("AddToSet").unwrap();
|
|
342
|
-
|
|
343
|
-
assert!(addtoset.is_commutative());
|
|
344
|
-
assert_eq!(addtoset.conflict_type, ConflictType::SetCRDT);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
#[test]
|
|
348
|
-
fn test_transfer_requires_consensus() {
|
|
349
|
-
let registry = OperationAlgebraRegistry::new();
|
|
350
|
-
let transfer = registry.get("Transfer").unwrap();
|
|
351
|
-
|
|
352
|
-
assert!(!transfer.is_commutative());
|
|
353
|
-
assert_eq!(
|
|
354
|
-
transfer.convergence_semantic,
|
|
355
|
-
ConvergenceSemantic::ConsensusRequired
|
|
356
|
-
);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
#[test]
|
|
360
|
-
fn test_custom_registration() {
|
|
361
|
-
let mut registry = OperationAlgebraRegistry::new();
|
|
362
|
-
let custom = OperationAlgebra::new(
|
|
363
|
-
"MyCustomOp",
|
|
364
|
-
"any",
|
|
365
|
-
"any",
|
|
366
|
-
ConflictType::Custom("my_merge".to_string()),
|
|
367
|
-
ConvergenceSemantic::DeterministicMerge,
|
|
368
|
-
"Custom merge semantics",
|
|
369
|
-
);
|
|
370
|
-
|
|
371
|
-
registry.register(custom);
|
|
372
|
-
assert!(registry.contains("MyCustomOp"));
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
#[test]
|
|
376
|
-
fn test_convergence_statistics() {
|
|
377
|
-
let registry = OperationAlgebraRegistry::new();
|
|
378
|
-
let stats = registry.convergence_statistics();
|
|
379
|
-
|
|
380
|
-
// Should have entries for different convergence semantics
|
|
381
|
-
assert!(stats.len() > 0);
|
|
382
|
-
// Most operations should be deterministic or commutative
|
|
383
|
-
let has_deterministic = stats.values().any(|count| *count > 0);
|
|
384
|
-
assert!(has_deterministic);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
#[test]
|
|
388
|
-
fn test_algebra_with_proofs() {
|
|
389
|
-
let algebra = OperationAlgebra::new(
|
|
390
|
-
"TestOp",
|
|
391
|
-
"test",
|
|
392
|
-
"test",
|
|
393
|
-
ConflictType::Commutative,
|
|
394
|
-
ConvergenceSemantic::StrictlyCommutative,
|
|
395
|
-
"test merge",
|
|
396
|
-
)
|
|
397
|
-
.with_proofs(Some("proof1".to_string()), Some("proof2".to_string()));
|
|
398
|
-
|
|
399
|
-
assert!(algebra.commutativity_proof.is_some());
|
|
400
|
-
assert!(algebra.determinism_proof.is_some());
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
#[test]
|
|
404
|
-
fn test_all_standard_operations_registered() {
|
|
405
|
-
let registry = OperationAlgebraRegistry::new();
|
|
406
|
-
|
|
407
|
-
let operations = vec![
|
|
408
|
-
"SetField",
|
|
409
|
-
"Increment",
|
|
410
|
-
"AddToSet",
|
|
411
|
-
"RemoveFromSet",
|
|
412
|
-
"Create",
|
|
413
|
-
"Delete",
|
|
414
|
-
"Transfer",
|
|
415
|
-
"Append",
|
|
416
|
-
"Noop",
|
|
417
|
-
];
|
|
418
|
-
|
|
419
|
-
for op in operations {
|
|
420
|
-
assert!(registry.contains(op), "Operation {} not registered", op);
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
#[test]
|
|
425
|
-
fn test_operation_is_deterministic() {
|
|
426
|
-
let registry = OperationAlgebraRegistry::new();
|
|
427
|
-
|
|
428
|
-
// Commutative and deterministic merge are deterministic
|
|
429
|
-
let setfield = registry.get("SetField").unwrap();
|
|
430
|
-
assert!(setfield.is_deterministic());
|
|
431
|
-
|
|
432
|
-
let increment = registry.get("Increment").unwrap();
|
|
433
|
-
assert!(increment.is_deterministic());
|
|
434
|
-
|
|
435
|
-
// Consensus operations are NOT deterministic without consensus authority
|
|
436
|
-
let transfer = registry.get("Transfer").unwrap();
|
|
437
|
-
assert!(!transfer.is_deterministic());
|
|
438
|
-
}
|
|
439
|
-
}
|