All definition of done criteria verified: - Router correctness: 26/26 tests pass - Merger functionality: 22/22 tests pass - Topology health state machine: 45/45 tests pass - Coverage: 91.80% (exceeds 90% requirement) Key results: - Rendezvous assignment is deterministic (verified across 1000 runs) - Minimal reshuffling on node add/remove (HRW property verified) - Uniform distribution: 64 shards / 3 nodes → 15-27 shards per node - write_targets returns exactly RG × RF nodes - covering_set returns one node per shard with replica rotation - Merger handles global sort, offset/limit, facets, degraded mode Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
7.8 KiB
Phase 1 (miroir-cdo): Core Routing — Final Verification Summary
Date: 2026-05-09 Session: Final verification of Phase 1 Core Routing implementation
Definition of Done Checklist
✅ Router Correctness (plan §8)
-
Rendezvous assignment determinism: ✅ PASSED
test_rendezvous_determinism: Same (shard_id, nodes) → identical Vecacceptance_determinism_1000_runs: 1000 randomized runs, all deterministic
-
Minimal reshuffling on node add: ✅ PASSED
test_minimal_reshuffling_on_add: Adding 4th node moves ≤ 50% of shardsacceptance_reshuffle_bound_on_add: 64 shards, 3→4 nodes → ≤ 32 edges differ
-
Uniform shard distribution: ✅ PASSED
test_shard_distribution_64_3_rf1: 64 shards / 3 nodes / RF=1 → 15-27 shards per nodeacceptance_uniformity_64_shards_3_nodes_rf1: Each node holds 15-27 shards
-
Top-RF placement stability: ✅ PASSED
test_top_rf_stability: Top-RF nodes change minimally on add/removeacceptance_rf2_placement_stability: RF=2 placement stable on node changeacceptance_reshuffle_bound_on_remove: 4→3 nodes, ~RF × S / Ng edges differ
-
write_targets returns RG × RF nodes: ✅ PASSED
test_write_targets_count: Exactly RG × RF nodes returnedtest_group_scoped_assignment: One node from each replica group
-
query_group distributes evenly: ✅ PASSED
test_query_group_distribution: Round-robin distribution verified
-
covering_set returns one node per shard: ✅ PASSED
test_covering_set_one_per_shard: Exactly one node per shardtest_covering_set_replica_rotation: Intra-group replica rotation works
✅ Result Merger (plan §8)
-
Global sort by _rankingScore: ✅ PASSED
test_global_sort_by_ranking_score: Descending order verified
-
Offset/limit after merge: ✅ PASSED
test_offset_and_limit_applied_after_merge: Pagination works correctly
-
_rankingScore stripping: ✅ PASSED
test_ranking_score_stripped_when_not_requested: Strips when not requestedtest_ranking_score_included_when_requested: Includes when requested
-
_miroir_shard stripping: ✅ PASSED
test_miroir_shard_always_stripped: Always strippedtest_strip_all_miroir_reserved_fields: All miroir* fields stripped
-
Facet aggregation: ✅ PASSED
test_facet_counts_summed_across_shards: Sums counts across shardstest_facet_filter_only_merges_requested_facets: Filter works
-
estimatedTotalHits summation: ✅ PASSED
test_estimated_total_hits_summed: Correctly summed
-
processingTimeMs max: ✅ PASSED
test_processing_time_max_across_shards: Max taken correctly
-
Tie-breaking: ✅ PASSED
test_tie_breaking_by_primary_key: Primary key ascending for ties
-
Degraded mode: ✅ PASSED
test_degraded_flag_when_shard_fails: Flag set when shards failtest_not_degraded_when_all_succeed: Flag not set when all succeed
-
Stable serialization: ✅ PASSED
test_stable_serialization_same_input_same_json: BTreeMap ensures deterministic JSON
✅ Topology (plan §2)
topology.rs: 100.00% line coverage- All state transitions tested
- Write eligibility rules tested
- Group isolation tested
✅ Scatter (plan §2)
scatter.rs: 100.00% line coverage- Stub implementation for Phase 2 wiring
Coverage Report (2026-05-09)
Filename Regions Missed Regions Cover Functions Missed Functions Executed Lines Missed Lines Cover Branches Missed Branches Cover
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
anti_entropy.rs 56 0 100.00% 7 0 100.00% 70 0 100.00% 0 0 -
config.rs 293 26 91.13% 30 5 83.33% 306 18 94.12% 0 0 -
config/advanced.rs 166 16 90.36% 32 2 93.75% 288 20 93.06% 0 0 -
config/load.rs 159 77 51.57% 9 2 77.78% 140 28 80.00% 0 0 -
config/validate.rs 86 27 68.60% 1 0 100.00% 108 46 57.41% 0 0 -
merger.rs 977 31 96.83% 49 4 91.84% 582 31 94.67% 0 0 -
migration.rs 721 163 77.39% 43 12 72.09% 467 104 77.73% 0 0 -
reshard.rs 455 47 89.67% 36 7 80.56% 324 34 89.51% 0 0 -
router.rs 1016 26 97.44% 60 1 98.33% 500 19 96.20% 0 0 -
scatter.rs 214 0 100.00% 11 0 100.00% 121 0 100.00% 0 0 -
score_comparability.rs 589 10 98.30% 32 0 100.00% 325 9 97.23% 0 0 -
task.rs 164 0 100.00% 16 0 100.00% 118 0 100.00% 0 0 -
topology.rs 776 0 100.00% 70 0 100.00% 421 0 100.00% 0 0 -
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL 5672 423 92.54% 396 33 91.67% 3770 309 91.80% 0 0 -
Overall miroir-core line coverage: 91.80% (exceeds 90% requirement)
Test Results
Total tests run: 151 Passed: 151 Failed: 0 Ignored: 0
Breakdown by module:
- router.rs: 26 tests passed
- topology.rs: 45 tests passed
- merger.rs: 22 tests passed
- scatter.rs: 6 tests passed
Key Implementation Details
Rendezvous Hashing (HRW)
- Uses
twox_hash::XxHash64with seed 0 (matches Meilisearch Enterprise) - Canonical order:
(shard_id, node_id)- critical for determinism - Tie-breaking: lexicographic by
node_idfor identical scores
Group Isolation
- Hashing scoped to intra-group node lists
- Prevents both replicas of a shard from landing in the same group
write_targets()returns exactlyRG × RFnodes, one from each group
Minimal Reshuffling
- Adding a node to a group moves ~1/(Ng+1) of that group's docs
- Top-RF placement changes minimally on add/remove
Result Merger
- Uses binary min-heap for efficient top-k selection
- BTreeMap for stable facet serialization
- Always strips
_miroir_*reserved fields - Conditionally strips
_rankingScorebased on client request
Status: COMPLETE ✅
All Phase 1 Core Routing requirements have been implemented and verified. The foundation is ready for Phase 2 (write path) and Phase 3 (read path).