@feltdb/core 0.8.4 → 0.8.6
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/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +165 -0
- package/dist/create/server-source/Cargo.toml +9 -0
- package/dist/create/server-source/crates/feltdb/Cargo.toml +3 -0
- package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +44 -44
- package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +12 -24
- package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +7 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +13 -10
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +12 -9
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +78 -25
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +16 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +13 -5
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +41 -22
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +33 -15
- package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +100 -33
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +56 -20
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +116 -41
- package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +186 -55
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +64 -26
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +46 -15
- package/dist/create/server-source/crates/feltdb/src/admission.rs +8 -15
- package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +43 -13
- package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +15 -42
- package/dist/create/server-source/crates/feltdb/src/analytics.rs +65 -19
- package/dist/create/server-source/crates/feltdb/src/application.rs +113 -30
- package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +475 -140
- package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +17 -15
- package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +266 -114
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +25 -7
- package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +10 -15
- package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +3 -11
- package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +14 -5
- package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +21 -25
- package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +14 -11
- package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +103 -22
- package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +18 -15
- package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +12 -8
- package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +1 -5
- package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +87 -23
- package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +3 -7
- package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +10 -9
- package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +1 -6
- package/dist/create/server-source/crates/feltdb/src/indexing.rs +35 -38
- package/dist/create/server-source/crates/feltdb/src/lib.rs +1648 -46
- package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +4 -1
- package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +1 -2
- package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +107 -30
- package/dist/create/server-source/crates/feltdb/src/observability.rs +19 -6
- package/dist/create/server-source/crates/feltdb/src/operation.rs +39 -0
- package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +12 -11
- package/dist/create/server-source/crates/feltdb/src/operation_log.rs +9 -4
- package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +65 -18
- package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +193 -57
- package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +37 -27
- package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +38 -10
- package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +20 -14
- package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +394 -229
- package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +8 -6
- package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +11 -13
- package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +79 -70
- package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +3 -3
- package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +33 -11
- package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +6 -6
- package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +14 -56
- package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +29 -27
- package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +35 -17
- package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +8 -2
- package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +70 -17
- package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +23 -6
- package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +12 -3
- package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +41 -11
- package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +56 -25
- package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +701 -245
- package/dist/create/server-source/crates/feltdb/src/production_api.rs +31 -13
- package/dist/create/server-source/crates/feltdb/src/query_performance.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +5 -5
- package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +48 -18
- package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +30 -11
- package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +4 -3
- package/dist/create/server-source/crates/feltdb/src/sharding.rs +36 -10
- package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +516 -0
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +13 -4
- package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +222 -0
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +82 -54
- package/dist/create/server-source/crates/feltdb/src/state_hash.rs +2 -2
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +1565 -536
- package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +672 -0
- package/dist/create/server-source/crates/feltdb/src/storage.rs +9 -3
- package/dist/create/server-source/crates/feltdb/src/submission.rs +5 -11
- package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +24 -35
- package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +24 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +248 -59
- package/dist/create/server-source/crates/feltdb/src/transactions.rs +17 -20
- package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +749 -0
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +1 -0
- package/dist/create/server-source/crates/feltdb/src/workload.rs +512 -4
- package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +3 -4
- package/dist/create/server-source/crates/feltdb/tests/bounded_read_contract.rs +132 -0
- package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/compaction_stall_contract.rs +272 -0
- package/dist/create/server-source/crates/feltdb/tests/crash_durability_contract.rs +467 -0
- package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +309 -0
- package/dist/create/server-source/crates/feltdb/tests/durable_backup_contract.rs +445 -0
- package/dist/create/server-source/crates/feltdb/tests/durable_corruption_contract.rs +518 -0
- package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +392 -0
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +436 -220
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +1916 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +1878 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +1862 -0
- package/dist/create/server-source/crates/feltdb/tests/operational_health_contract.rs +278 -0
- package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +2 -1
- package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +80 -25
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +5 -8
- package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +52 -44
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +33 -16
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +22 -7
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +41 -22
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +25 -8
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +9 -6
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +120 -69
- package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +21 -10
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +1365 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +868 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +221 -0
- package/dist/create/server-source/crates/feltdb/tests/replicated_history_contract.rs +417 -0
- package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +338 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +1039 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +739 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +427 -0
- package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +3 -3
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +25 -22
- package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +1799 -0
- package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +1316 -0
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +53 -61
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +156 -61
- package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +255 -0
- package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +249 -0
- package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +994 -0
- package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +442 -0
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +16 -1
- package/dist/create/server-source/crates/feltdb-server/src/auth.rs +164 -13
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +695 -47
- package/dist/create/server-source/crates/feltdb-server/src/metrics.rs +21 -0
- package/dist/studio-app/assets/{feltdb_wasm-CVQWgXO-.js → feltdb_wasm-C1VhI-U5.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-C8HXbAXb.wasm +0 -0
- package/dist/studio-app/assets/{index-DwgNAIIX.js → index-Bbos1m2U.js} +1 -1
- package/dist/studio-app/index.html +1 -1
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/workload.d.ts +2 -1
- package/dist/workload.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-CNVpvaZV.wasm +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// One release train keeps generated applications installable. The repository
|
|
2
2
|
// validation script checks these values against every workspace manifest.
|
|
3
|
-
export const FELTDB_PACKAGE_VERSION = '0.8.
|
|
3
|
+
export const FELTDB_PACKAGE_VERSION = '0.8.6';
|
|
4
4
|
export const feltdbPackageRange = `^${FELTDB_PACKAGE_VERSION}`;
|
|
@@ -470,6 +470,12 @@ version = "1.17.0"
|
|
|
470
470
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
471
471
|
checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d"
|
|
472
472
|
|
|
473
|
+
[[package]]
|
|
474
|
+
name = "equivalent"
|
|
475
|
+
version = "1.0.2"
|
|
476
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
477
|
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|
478
|
+
|
|
473
479
|
[[package]]
|
|
474
480
|
name = "errno"
|
|
475
481
|
version = "0.3.14"
|
|
@@ -501,6 +507,7 @@ dependencies = [
|
|
|
501
507
|
"sha2",
|
|
502
508
|
"tempfile",
|
|
503
509
|
"tokio",
|
|
510
|
+
"wasmi",
|
|
504
511
|
]
|
|
505
512
|
|
|
506
513
|
[[package]]
|
|
@@ -557,6 +564,12 @@ version = "0.1.10"
|
|
|
557
564
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
558
565
|
checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de"
|
|
559
566
|
|
|
567
|
+
[[package]]
|
|
568
|
+
name = "foldhash"
|
|
569
|
+
version = "0.1.5"
|
|
570
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
571
|
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
|
|
572
|
+
|
|
560
573
|
[[package]]
|
|
561
574
|
name = "form_urlencoded"
|
|
562
575
|
version = "1.2.2"
|
|
@@ -663,6 +676,21 @@ dependencies = [
|
|
|
663
676
|
"zerocopy",
|
|
664
677
|
]
|
|
665
678
|
|
|
679
|
+
[[package]]
|
|
680
|
+
name = "hashbrown"
|
|
681
|
+
version = "0.15.5"
|
|
682
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
683
|
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
|
684
|
+
dependencies = [
|
|
685
|
+
"foldhash",
|
|
686
|
+
]
|
|
687
|
+
|
|
688
|
+
[[package]]
|
|
689
|
+
name = "hashbrown"
|
|
690
|
+
version = "0.17.1"
|
|
691
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
692
|
+
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
|
|
693
|
+
|
|
666
694
|
[[package]]
|
|
667
695
|
name = "hermit-abi"
|
|
668
696
|
version = "0.5.2"
|
|
@@ -886,6 +914,16 @@ dependencies = [
|
|
|
886
914
|
"icu_properties",
|
|
887
915
|
]
|
|
888
916
|
|
|
917
|
+
[[package]]
|
|
918
|
+
name = "indexmap"
|
|
919
|
+
version = "2.14.2"
|
|
920
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
921
|
+
checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"
|
|
922
|
+
dependencies = [
|
|
923
|
+
"equivalent",
|
|
924
|
+
"hashbrown 0.17.1",
|
|
925
|
+
]
|
|
926
|
+
|
|
889
927
|
[[package]]
|
|
890
928
|
name = "ipnet"
|
|
891
929
|
version = "2.12.1"
|
|
@@ -935,12 +973,24 @@ version = "1.5.0"
|
|
|
935
973
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
936
974
|
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
|
937
975
|
|
|
976
|
+
[[package]]
|
|
977
|
+
name = "leb128fmt"
|
|
978
|
+
version = "0.1.0"
|
|
979
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
980
|
+
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
|
|
981
|
+
|
|
938
982
|
[[package]]
|
|
939
983
|
name = "libc"
|
|
940
984
|
version = "0.2.189"
|
|
941
985
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
942
986
|
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
|
|
943
987
|
|
|
988
|
+
[[package]]
|
|
989
|
+
name = "libm"
|
|
990
|
+
version = "0.2.16"
|
|
991
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
992
|
+
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
|
|
993
|
+
|
|
944
994
|
[[package]]
|
|
945
995
|
name = "linux-raw-sys"
|
|
946
996
|
version = "0.12.1"
|
|
@@ -1585,6 +1635,12 @@ dependencies = [
|
|
|
1585
1635
|
"windows-sys 0.61.2",
|
|
1586
1636
|
]
|
|
1587
1637
|
|
|
1638
|
+
[[package]]
|
|
1639
|
+
name = "spin"
|
|
1640
|
+
version = "0.9.9"
|
|
1641
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1642
|
+
checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e"
|
|
1643
|
+
|
|
1588
1644
|
[[package]]
|
|
1589
1645
|
name = "spki"
|
|
1590
1646
|
version = "0.7.3"
|
|
@@ -1601,6 +1657,16 @@ version = "1.2.1"
|
|
|
1601
1657
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1602
1658
|
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
|
|
1603
1659
|
|
|
1660
|
+
[[package]]
|
|
1661
|
+
name = "string-interner"
|
|
1662
|
+
version = "0.19.0"
|
|
1663
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1664
|
+
checksum = "23de088478b31c349c9ba67816fa55d9355232d63c3afea8bf513e31f0f1d2c0"
|
|
1665
|
+
dependencies = [
|
|
1666
|
+
"hashbrown 0.15.5",
|
|
1667
|
+
"serde",
|
|
1668
|
+
]
|
|
1669
|
+
|
|
1604
1670
|
[[package]]
|
|
1605
1671
|
name = "subtle"
|
|
1606
1672
|
version = "2.6.1"
|
|
@@ -1891,6 +1957,12 @@ version = "1.0.24"
|
|
|
1891
1957
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1892
1958
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
1893
1959
|
|
|
1960
|
+
[[package]]
|
|
1961
|
+
name = "unicode-width"
|
|
1962
|
+
version = "0.2.2"
|
|
1963
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1964
|
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
|
1965
|
+
|
|
1894
1966
|
[[package]]
|
|
1895
1967
|
name = "untrusted"
|
|
1896
1968
|
version = "0.9.0"
|
|
@@ -2018,6 +2090,99 @@ dependencies = [
|
|
|
2018
2090
|
"unicode-ident",
|
|
2019
2091
|
]
|
|
2020
2092
|
|
|
2093
|
+
[[package]]
|
|
2094
|
+
name = "wasm-encoder"
|
|
2095
|
+
version = "0.258.0"
|
|
2096
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2097
|
+
checksum = "e974fe6821a8cf64575d51ea2194e2c8f77e7b66e9afe7419ce8a97f9ee0d251"
|
|
2098
|
+
dependencies = [
|
|
2099
|
+
"leb128fmt",
|
|
2100
|
+
"wasmparser 0.258.0",
|
|
2101
|
+
]
|
|
2102
|
+
|
|
2103
|
+
[[package]]
|
|
2104
|
+
name = "wasmi"
|
|
2105
|
+
version = "2.0.0"
|
|
2106
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2107
|
+
checksum = "78693fcdd618e0fc34af59c6b8efa9ac5d58c68df940beff4bedddb6acfe7c27"
|
|
2108
|
+
dependencies = [
|
|
2109
|
+
"spin",
|
|
2110
|
+
"wasmi_collections",
|
|
2111
|
+
"wasmi_core",
|
|
2112
|
+
"wasmi_ir",
|
|
2113
|
+
"wasmparser 0.228.0",
|
|
2114
|
+
"wat",
|
|
2115
|
+
]
|
|
2116
|
+
|
|
2117
|
+
[[package]]
|
|
2118
|
+
name = "wasmi_collections"
|
|
2119
|
+
version = "2.0.0"
|
|
2120
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2121
|
+
checksum = "8a8be2aa467cf2d29e96ff759472c36eeb44a3c81c67fc9cb76c9a24c519c557"
|
|
2122
|
+
dependencies = [
|
|
2123
|
+
"string-interner",
|
|
2124
|
+
]
|
|
2125
|
+
|
|
2126
|
+
[[package]]
|
|
2127
|
+
name = "wasmi_core"
|
|
2128
|
+
version = "2.0.0"
|
|
2129
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2130
|
+
checksum = "69372d5fda3ea3d1e0aa6603c7888110e0187e88ea17cd8fc2e2df0a0e1f37fa"
|
|
2131
|
+
dependencies = [
|
|
2132
|
+
"libm",
|
|
2133
|
+
]
|
|
2134
|
+
|
|
2135
|
+
[[package]]
|
|
2136
|
+
name = "wasmi_ir"
|
|
2137
|
+
version = "2.0.0"
|
|
2138
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2139
|
+
checksum = "8f17b774caa13c618c7244f1ee51fe23c5e7b8538a471fa46d9949779758aed6"
|
|
2140
|
+
dependencies = [
|
|
2141
|
+
"wasmi_core",
|
|
2142
|
+
]
|
|
2143
|
+
|
|
2144
|
+
[[package]]
|
|
2145
|
+
name = "wasmparser"
|
|
2146
|
+
version = "0.228.0"
|
|
2147
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2148
|
+
checksum = "4abf1132c1fdf747d56bbc1bb52152400c70f336870f968b85e89ea422198ae3"
|
|
2149
|
+
dependencies = [
|
|
2150
|
+
"bitflags",
|
|
2151
|
+
"indexmap",
|
|
2152
|
+
]
|
|
2153
|
+
|
|
2154
|
+
[[package]]
|
|
2155
|
+
name = "wasmparser"
|
|
2156
|
+
version = "0.258.0"
|
|
2157
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2158
|
+
checksum = "d9a61719f93a87b16d325921e251800c4833f8fab50fa21c7de73aed50086313"
|
|
2159
|
+
dependencies = [
|
|
2160
|
+
"bitflags",
|
|
2161
|
+
"indexmap",
|
|
2162
|
+
]
|
|
2163
|
+
|
|
2164
|
+
[[package]]
|
|
2165
|
+
name = "wast"
|
|
2166
|
+
version = "258.0.0"
|
|
2167
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2168
|
+
checksum = "97f7defc7ecca8b19ac7f824598eadd0c53985ee00c74060d65051e9da5b58a1"
|
|
2169
|
+
dependencies = [
|
|
2170
|
+
"bumpalo",
|
|
2171
|
+
"leb128fmt",
|
|
2172
|
+
"memchr",
|
|
2173
|
+
"unicode-width",
|
|
2174
|
+
"wasm-encoder",
|
|
2175
|
+
]
|
|
2176
|
+
|
|
2177
|
+
[[package]]
|
|
2178
|
+
name = "wat"
|
|
2179
|
+
version = "1.258.0"
|
|
2180
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2181
|
+
checksum = "7555c008cca87f2ac58d9f83ccda7e7b44611093ce28eb28f052e7c78024b9bf"
|
|
2182
|
+
dependencies = [
|
|
2183
|
+
"wast",
|
|
2184
|
+
]
|
|
2185
|
+
|
|
2021
2186
|
[[package]]
|
|
2022
2187
|
name = "web-sys"
|
|
2023
2188
|
version = "0.3.104"
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
[workspace]
|
|
2
2
|
members = ["crates/feltdb", "crates/feltdb-server", "crates/feltdb-wasm"]
|
|
3
|
+
# The deterministic contracts' WASM implementations are their own
|
|
4
|
+
# dependency-free workspaces: they are only ever built for
|
|
5
|
+
# wasm32-unknown-unknown, and a second implementation that inherited this
|
|
6
|
+
# workspace's dependencies would stop being an independent one.
|
|
7
|
+
exclude = [
|
|
8
|
+
"crates/feltdb-trigger-contract-wasm",
|
|
9
|
+
"crates/feltdb-state-diff-contract-wasm",
|
|
10
|
+
"crates/feltdb-state-conflict-contract-wasm",
|
|
11
|
+
]
|
|
3
12
|
resolver = "2"
|
|
4
13
|
|
|
5
14
|
[workspace.package]
|
|
@@ -21,6 +21,9 @@ tokio = { version = "1", features = ["net", "io-util", "rt-multi-thread"] }
|
|
|
21
21
|
criterion = { version = "0.5", features = ["html_reports"] }
|
|
22
22
|
sha2 = "0.10"
|
|
23
23
|
tempfile = "3"
|
|
24
|
+
# Host runtime for the deterministic-contract conformance suite only. It is a
|
|
25
|
+
# test dependency: FeltDB does not execute WASM in production.
|
|
26
|
+
wasmi = "2"
|
|
24
27
|
|
|
25
28
|
[[bench]]
|
|
26
29
|
name = "gate13_baseline"
|
|
@@ -11,11 +11,9 @@
|
|
|
11
11
|
/// 4. Separate primitives from transaction benchmarks
|
|
12
12
|
/// 5. 2D matrix: causal barrier vs buffer size × node count
|
|
13
13
|
/// 6. Black box protection on all critical results
|
|
14
|
-
|
|
15
14
|
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
|
|
16
15
|
use feltdb::{
|
|
17
|
-
CausalDependencyBarrier, ConsistencyContractEnforcer, CrashAtomicExecutor,
|
|
18
|
-
VectorClock,
|
|
16
|
+
CausalDependencyBarrier, ConsistencyContractEnforcer, CrashAtomicExecutor, VectorClock,
|
|
19
17
|
};
|
|
20
18
|
|
|
21
19
|
/// Helper: Create a vector clock with N nodes
|
|
@@ -179,10 +177,8 @@ fn benchmark_causal_barrier_buffer_scaling(c: &mut Criterion) {
|
|
|
179
177
|
let _ = barrier.receive_operation(format!("op_{}", i), vc);
|
|
180
178
|
}
|
|
181
179
|
|
|
182
|
-
let result = barrier
|
|
183
|
-
format!("op_test"),
|
|
184
|
-
black_box(required.clone()),
|
|
185
|
-
);
|
|
180
|
+
let result = barrier
|
|
181
|
+
.receive_operation(format!("op_test"), black_box(required.clone()));
|
|
186
182
|
black_box(result)
|
|
187
183
|
});
|
|
188
184
|
},
|
|
@@ -282,8 +278,7 @@ fn benchmark_cost_of_correctness(c: &mut Criterion) {
|
|
|
282
278
|
let mut barrier = CausalDependencyBarrier::new();
|
|
283
279
|
let required = VectorClock::new();
|
|
284
280
|
b.iter(|| {
|
|
285
|
-
let result =
|
|
286
|
-
barrier.receive_operation("op".to_string(), black_box(required.clone()));
|
|
281
|
+
let result = barrier.receive_operation("op".to_string(), black_box(required.clone()));
|
|
287
282
|
black_box(result)
|
|
288
283
|
});
|
|
289
284
|
});
|
|
@@ -360,7 +355,10 @@ fn benchmark_readiness_frontier_satisfied(c: &mut Criterion) {
|
|
|
360
355
|
for node_count in [2, 4, 8].iter() {
|
|
361
356
|
group.throughput(Throughput::Elements(1));
|
|
362
357
|
group.bench_function(
|
|
363
|
-
format!(
|
|
358
|
+
format!(
|
|
359
|
+
"frontier_satisfied_nodes{}_buffer{}",
|
|
360
|
+
node_count, buffer_size
|
|
361
|
+
),
|
|
364
362
|
|b| {
|
|
365
363
|
let required = make_vector_clock(*node_count);
|
|
366
364
|
validate_vector_clock(&required, *node_count);
|
|
@@ -375,14 +373,13 @@ fn benchmark_readiness_frontier_satisfied(c: &mut Criterion) {
|
|
|
375
373
|
for i in 0..*buffer_size {
|
|
376
374
|
let mut unrelated = VectorClock::new();
|
|
377
375
|
unrelated.increment(&format!("other_node_{}", i));
|
|
378
|
-
let _ =
|
|
376
|
+
let _ =
|
|
377
|
+
barrier.receive_operation(format!("op_buffer_{}", i), unrelated);
|
|
379
378
|
}
|
|
380
379
|
|
|
381
380
|
// Now test readiness check on satisfied requirement
|
|
382
|
-
let result = barrier
|
|
383
|
-
"op_test".to_string(),
|
|
384
|
-
black_box(required.clone()),
|
|
385
|
-
);
|
|
381
|
+
let result = barrier
|
|
382
|
+
.receive_operation("op_test".to_string(), black_box(required.clone()));
|
|
386
383
|
black_box(result)
|
|
387
384
|
});
|
|
388
385
|
},
|
|
@@ -403,7 +400,10 @@ fn benchmark_readiness_frontier_satisfied_corrected(c: &mut Criterion) {
|
|
|
403
400
|
for node_count in [2, 4, 8].iter() {
|
|
404
401
|
group.throughput(Throughput::Elements(1));
|
|
405
402
|
group.bench_function(
|
|
406
|
-
format!(
|
|
403
|
+
format!(
|
|
404
|
+
"frontier_satisfied_corrected_nodes{}_buffer{}",
|
|
405
|
+
node_count, buffer_size
|
|
406
|
+
),
|
|
407
407
|
|b| {
|
|
408
408
|
let required = make_vector_clock(*node_count);
|
|
409
409
|
validate_vector_clock(&required, *node_count);
|
|
@@ -418,7 +418,8 @@ fn benchmark_readiness_frontier_satisfied_corrected(c: &mut Criterion) {
|
|
|
418
418
|
for i in 0..*buffer_size {
|
|
419
419
|
let mut unrelated = VectorClock::new();
|
|
420
420
|
unrelated.increment(&format!("other_node_{}", i));
|
|
421
|
-
let _ = barrier
|
|
421
|
+
let _ = barrier
|
|
422
|
+
.receive_operation(format!("op_buffer_{}", i), unrelated);
|
|
422
423
|
}
|
|
423
424
|
|
|
424
425
|
barrier
|
|
@@ -473,10 +474,8 @@ fn benchmark_readiness_frontier_missing(c: &mut Criterion) {
|
|
|
473
474
|
}
|
|
474
475
|
|
|
475
476
|
// Test readiness check on unsatisfied requirement
|
|
476
|
-
let result = barrier
|
|
477
|
-
"op_test".to_string(),
|
|
478
|
-
black_box(required.clone()),
|
|
479
|
-
);
|
|
477
|
+
let result = barrier
|
|
478
|
+
.receive_operation("op_test".to_string(), black_box(required.clone()));
|
|
480
479
|
black_box(result)
|
|
481
480
|
});
|
|
482
481
|
},
|
|
@@ -495,29 +494,32 @@ fn benchmark_frontier_advancement_release(c: &mut Criterion) {
|
|
|
495
494
|
|
|
496
495
|
for pending_count in [10, 100].iter() {
|
|
497
496
|
group.throughput(Throughput::Elements(*pending_count as u64));
|
|
498
|
-
group.bench_function(
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
497
|
+
group.bench_function(
|
|
498
|
+
format!("frontier_advancement_release_{}_pending", pending_count),
|
|
499
|
+
|b| {
|
|
500
|
+
let mut required = VectorClock::new();
|
|
501
|
+
required.increment("node_a");
|
|
502
|
+
required.increment("node_a"); // {node_a: 2}
|
|
503
|
+
validate_vector_clock(&required, 1);
|
|
503
504
|
|
|
504
|
-
|
|
505
|
-
|
|
505
|
+
b.iter(|| {
|
|
506
|
+
let mut barrier = CausalDependencyBarrier::new();
|
|
506
507
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
508
|
+
// Pre-buffer N operations waiting for {node_a: 2}
|
|
509
|
+
for i in 0..*pending_count {
|
|
510
|
+
let _ = barrier.receive_operation(format!("op_{}", i), required.clone());
|
|
511
|
+
}
|
|
511
512
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
513
|
+
// Advance frontier to {node_a: 2}, which releases all pending
|
|
514
|
+
let mut satisfying = VectorClock::new();
|
|
515
|
+
satisfying.increment("node_a");
|
|
516
|
+
satisfying.increment("node_a");
|
|
516
517
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
518
|
+
barrier.advance_frontier(black_box(&satisfying));
|
|
519
|
+
black_box(barrier.get_pending_operations())
|
|
520
|
+
});
|
|
521
|
+
},
|
|
522
|
+
);
|
|
521
523
|
}
|
|
522
524
|
|
|
523
525
|
group.finish();
|
|
@@ -556,10 +558,8 @@ fn benchmark_causal_pathological_workload(c: &mut Criterion) {
|
|
|
556
558
|
|
|
557
559
|
// Now test: incoming operation with already-satisfied requirement
|
|
558
560
|
// This should be fast if frontier check is sufficient
|
|
559
|
-
let result =
|
|
560
|
-
"test_op".to_string(),
|
|
561
|
-
black_box(required.clone()),
|
|
562
|
-
);
|
|
561
|
+
let result =
|
|
562
|
+
barrier.receive_operation("test_op".to_string(), black_box(required.clone()));
|
|
563
563
|
black_box(result)
|
|
564
564
|
});
|
|
565
565
|
});
|
package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
/// - Outcome C: Repeated advances cause O(m²) pathological rescanning
|
|
10
10
|
///
|
|
11
11
|
/// Only Outcome C justifies architectural changes to release mechanism.
|
|
12
|
-
|
|
13
12
|
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
|
|
14
13
|
use feltdb::{CausalDependencyBarrier, VectorClock};
|
|
15
14
|
|
|
@@ -44,11 +43,10 @@ fn benchmark_release_single_scan(c: &mut Criterion) {
|
|
|
44
43
|
for i in 0..*pending_size {
|
|
45
44
|
let mut required = VectorClock::new();
|
|
46
45
|
// Each requires increasing timestamp: A:1000, A:1001, etc.
|
|
47
|
-
required
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
);
|
|
46
|
+
required
|
|
47
|
+
.clocks
|
|
48
|
+
.insert("node_a".to_string(), (1000 + i) as u64);
|
|
49
|
+
let _ = barrier.receive_operation(format!("pending_{}", i), required);
|
|
52
50
|
}
|
|
53
51
|
barrier
|
|
54
52
|
},
|
|
@@ -97,10 +95,7 @@ fn benchmark_release_selectivity(c: &mut Criterion) {
|
|
|
97
95
|
let mut required = VectorClock::new();
|
|
98
96
|
// Frontier will be at A:2000, these require A:100
|
|
99
97
|
required.clocks.insert("node_a".to_string(), 100);
|
|
100
|
-
let _ = barrier.receive_operation(
|
|
101
|
-
format!("ready_{}", i),
|
|
102
|
-
required,
|
|
103
|
-
);
|
|
98
|
+
let _ = barrier.receive_operation(format!("ready_{}", i), required);
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
// Add blocked operations (frontier won't satisfy them yet)
|
|
@@ -108,10 +103,7 @@ fn benchmark_release_selectivity(c: &mut Criterion) {
|
|
|
108
103
|
let mut required = VectorClock::new();
|
|
109
104
|
// These require A:5000, frontier will only be at A:2000
|
|
110
105
|
required.clocks.insert("node_a".to_string(), 5000);
|
|
111
|
-
let _ = barrier.receive_operation(
|
|
112
|
-
format!("blocked_{}", i),
|
|
113
|
-
required,
|
|
114
|
-
);
|
|
106
|
+
let _ = barrier.receive_operation(format!("blocked_{}", i), required);
|
|
115
107
|
}
|
|
116
108
|
barrier
|
|
117
109
|
},
|
|
@@ -146,7 +138,7 @@ fn benchmark_release_selectivity(c: &mut Criterion) {
|
|
|
146
138
|
/// - Bad: entries_examined ≈ 50,000,000 (each advance scans remaining operations)
|
|
147
139
|
fn benchmark_release_pathological_repeated(c: &mut Criterion) {
|
|
148
140
|
let mut group = c.benchmark_group("gate13_release_pathological_repeated");
|
|
149
|
-
group.sample_size(5);
|
|
141
|
+
group.sample_size(5); // Fewer samples for large workload
|
|
150
142
|
group.measurement_time(std::time::Duration::from_secs(30));
|
|
151
143
|
|
|
152
144
|
// Note: Using 1000 instead of 10000 to keep benchmark runtime reasonable
|
|
@@ -166,10 +158,7 @@ fn benchmark_release_pathological_repeated(c: &mut Criterion) {
|
|
|
166
158
|
let mut required = VectorClock::new();
|
|
167
159
|
// Each requires A:(i+1)
|
|
168
160
|
required.clocks.insert("node_a".to_string(), (i + 1) as u64);
|
|
169
|
-
let _ = barrier.receive_operation(
|
|
170
|
-
format!("seq_{}", i),
|
|
171
|
-
required,
|
|
172
|
-
);
|
|
161
|
+
let _ = barrier.receive_operation(format!("seq_{}", i), required);
|
|
173
162
|
}
|
|
174
163
|
barrier
|
|
175
164
|
},
|
|
@@ -221,12 +210,11 @@ fn benchmark_release_mixed_advances(c: &mut Criterion) {
|
|
|
221
210
|
|
|
222
211
|
// Distribute dependencies: some low, some high
|
|
223
212
|
let dependency_level = ((i * 997) % 1000) as u64 + 1;
|
|
224
|
-
required
|
|
213
|
+
required
|
|
214
|
+
.clocks
|
|
215
|
+
.insert("node_a".to_string(), dependency_level);
|
|
225
216
|
|
|
226
|
-
let _ = barrier.receive_operation(
|
|
227
|
-
format!("mixed_{}", i),
|
|
228
|
-
required,
|
|
229
|
-
);
|
|
217
|
+
let _ = barrier.receive_operation(format!("mixed_{}", i), required);
|
|
230
218
|
}
|
|
231
219
|
barrier
|
|
232
220
|
},
|
|
@@ -24,8 +24,7 @@
|
|
|
24
24
|
///
|
|
25
25
|
/// This is a FROZEN baseline. No further causal barrier optimization until Gate 14
|
|
26
26
|
/// demonstrates that the causal release path has become a system bottleneck.
|
|
27
|
-
|
|
28
|
-
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput, BenchmarkId};
|
|
27
|
+
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
|
29
28
|
use feltdb::{CausalDependencyBarrier, VectorClock};
|
|
30
29
|
use std::time::Instant;
|
|
31
30
|
|
|
@@ -51,10 +50,9 @@ fn populate_pending_operations(
|
|
|
51
50
|
for i in 0..count {
|
|
52
51
|
let mut required = create_vector_clock_with_nodes(node_count);
|
|
53
52
|
// Make each operation depend on a node that hasn't been reached yet
|
|
54
|
-
required
|
|
55
|
-
|
|
56
|
-
(node_count * 10) as u64
|
|
57
|
-
);
|
|
53
|
+
required
|
|
54
|
+
.clocks
|
|
55
|
+
.insert(format!("node_{}", node_count % 2), (node_count * 10) as u64);
|
|
58
56
|
let _ = barrier.receive_operation(format!("op_{}", i), required);
|
|
59
57
|
}
|
|
60
58
|
}
|
|
@@ -246,10 +244,8 @@ fn benchmark_index_maintenance_cost(c: &mut Criterion) {
|
|
|
246
244
|
let required = create_vector_clock_with_nodes(nodes);
|
|
247
245
|
b.iter(|| {
|
|
248
246
|
let mut barrier = CausalDependencyBarrier::new();
|
|
249
|
-
let _ = barrier
|
|
250
|
-
"op_test".to_string(),
|
|
251
|
-
black_box(required.clone()),
|
|
252
|
-
);
|
|
247
|
+
let _ = barrier
|
|
248
|
+
.receive_operation("op_test".to_string(), black_box(required.clone()));
|
|
253
249
|
black_box(barrier.get_dependency_index().entry_count())
|
|
254
250
|
});
|
|
255
251
|
},
|
|
@@ -291,9 +287,7 @@ fn benchmark_vector_clock_cost(c: &mut Criterion) {
|
|
|
291
287
|
|b, &nodes| {
|
|
292
288
|
let clock1 = create_vector_clock_with_nodes(nodes);
|
|
293
289
|
let clock2 = create_vector_clock_with_nodes(nodes);
|
|
294
|
-
b.iter(||
|
|
295
|
-
black_box(black_box(&clock1).happens_before(black_box(&clock2)))
|
|
296
|
-
});
|
|
290
|
+
b.iter(|| black_box(black_box(&clock1).happens_before(black_box(&clock2))));
|
|
297
291
|
},
|
|
298
292
|
);
|
|
299
293
|
}
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
/// throughput_1000_ops 1.583 1.590 +0.4% ×1.15 PASS
|
|
15
15
|
/// ...
|
|
16
16
|
/// RESULT: PASS (all metrics within acceptable regression)
|
|
17
|
-
|
|
18
17
|
use serde::{Deserialize, Serialize};
|
|
19
18
|
use std::collections::HashMap;
|
|
20
19
|
use std::fs;
|
|
@@ -52,8 +51,8 @@ impl RegressionResult {
|
|
|
52
51
|
baseline_metric: &BaselineMetric,
|
|
53
52
|
current_value: f64,
|
|
54
53
|
) -> Self {
|
|
55
|
-
let change_pct =
|
|
56
|
-
* 100.0;
|
|
54
|
+
let change_pct =
|
|
55
|
+
((current_value - baseline_metric.baseline) / baseline_metric.baseline) * 100.0;
|
|
57
56
|
|
|
58
57
|
let (passes_threshold, status) = if baseline_metric.direction == "higher_is_better" {
|
|
59
58
|
// For throughput/performance: lower is regression
|
|
@@ -112,7 +111,8 @@ pub fn check_regression(
|
|
|
112
111
|
|
|
113
112
|
for (metric_name, baseline_metric) in &baseline.metrics {
|
|
114
113
|
if let Some(¤t_value) = measurements.get(metric_name) {
|
|
115
|
-
let result =
|
|
114
|
+
let result =
|
|
115
|
+
RegressionResult::from_measurement(metric_name, baseline_metric, current_value);
|
|
116
116
|
results.push(result);
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -130,10 +130,7 @@ pub fn check_regression(
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
/// Format regression report
|
|
133
|
-
pub fn format_report(
|
|
134
|
-
baseline: &RegressionBaseline,
|
|
135
|
-
results: &[RegressionResult],
|
|
136
|
-
) -> String {
|
|
133
|
+
pub fn format_report(baseline: &RegressionBaseline, results: &[RegressionResult]) -> String {
|
|
137
134
|
let mut report = format!("Gate 13 Redux Regression Report\n");
|
|
138
135
|
report.push_str("───────────────────────────────\n");
|
|
139
136
|
report.push_str(&format!("Baseline: {}\n", baseline.git_commit));
|
|
@@ -165,9 +162,15 @@ pub fn format_report(
|
|
|
165
162
|
|
|
166
163
|
report.push('\n');
|
|
167
164
|
if failed == 0 {
|
|
168
|
-
report.push_str(&format!(
|
|
165
|
+
report.push_str(&format!(
|
|
166
|
+
"RESULT: PASS ({}/{} metrics within acceptable regression)\n",
|
|
167
|
+
passed, total
|
|
168
|
+
));
|
|
169
169
|
} else {
|
|
170
|
-
report.push_str(&format!(
|
|
170
|
+
report.push_str(&format!(
|
|
171
|
+
"RESULT: FAIL ({}/{} metrics exceeded regression threshold)\n",
|
|
172
|
+
failed, total
|
|
173
|
+
));
|
|
171
174
|
}
|
|
172
175
|
|
|
173
176
|
report
|
package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs
CHANGED
|
@@ -24,13 +24,12 @@
|
|
|
24
24
|
///
|
|
25
25
|
/// CONCURRENCY LEVELS: 1, 2, 4, 8, 16, 32, 64
|
|
26
26
|
/// TRIALS PER LEVEL: 5 (to detect consistent failures)
|
|
27
|
-
|
|
28
27
|
use criterion::{criterion_group, criterion_main, Criterion};
|
|
29
28
|
use feltdb::Operation;
|
|
30
29
|
use serde_json::json;
|
|
31
|
-
use std::sync::Arc;
|
|
32
30
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
33
|
-
use std::
|
|
31
|
+
use std::sync::Arc;
|
|
32
|
+
use std::time::{Duration, Instant};
|
|
34
33
|
|
|
35
34
|
// ============================================================================
|
|
36
35
|
// FROZEN WORKLOAD DEFINITION
|
|
@@ -226,11 +225,11 @@ fn analyze_outcomes(
|
|
|
226
225
|
ingested_count: usize,
|
|
227
226
|
wall_clock_ms: f64,
|
|
228
227
|
) -> (
|
|
229
|
-
f64,
|
|
230
|
-
f64,
|
|
231
|
-
f64,
|
|
232
|
-
f64,
|
|
233
|
-
bool,
|
|
228
|
+
f64, // throughput ops/sec (successful only)
|
|
229
|
+
f64, // p95 latency
|
|
230
|
+
f64, // retry rate %
|
|
231
|
+
f64, // error rate %
|
|
232
|
+
bool, // correctness pass
|
|
234
233
|
) {
|
|
235
234
|
let successful = outcomes
|
|
236
235
|
.iter()
|
|
@@ -295,7 +294,11 @@ fn gate_14a_concurrent_writer_scaling(c: &mut Criterion) {
|
|
|
295
294
|
println!("\nFROZEN WORKLOAD:");
|
|
296
295
|
println!(" Operations per client: {}", OPERATIONS_PER_CLIENT);
|
|
297
296
|
println!(" Record count: {}", RECORD_COUNT);
|
|
298
|
-
println!(
|
|
297
|
+
println!(
|
|
298
|
+
" Read/write ratio: {:.0}% reads, {:.0}% writes",
|
|
299
|
+
READ_WRITE_RATIO * 100.0,
|
|
300
|
+
(1.0 - READ_WRITE_RATIO) * 100.0
|
|
301
|
+
);
|
|
299
302
|
println!(" Random seed: {}", RANDOM_SEED);
|
|
300
303
|
println!(" Trials per concurrency level: {}", TRIALS_PER_LEVEL);
|
|
301
304
|
println!("\nDIAGNOSTIC FOCUS:");
|