Skip to content

Extract dependency edge scope validation - #742

Merged
lesnik512 merged 1 commit into
mainfrom
refactor/validation-edge-checks
Nov 3, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
refactor/validation-edge-checks

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Extract edge scope checks from the validation event loop. Keep cached scope-owner lookups, lazy dependency chains, and error order. Skip ordering comparisons for identical scope members.

All 1,128 tests passed with 100% coverage. Lint and type checks passed. Median validation times stayed within 1% of main across deep-chain, wide fan-out, and shared-alias benchmarks.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: 746a68a Previous: 1176ac8 Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 4003922.7231873316 iter/sec (stddev: 1.363432388185174e-8) 4936895.369163403 iter/sec (stddev: 3.676625310870205e-8) 1.23
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 4038291.7283043475 iter/sec (stddev: 8.989648699525637e-9) 5185285.549266807 iter/sec (stddev: 8.527547726064306e-9) 1.28
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 17068.176329614125 iter/sec (stddev: 0.00005267943273709192) 22371.427532683338 iter/sec (stddev: 0.000040024156000767515) 1.31
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 13934.589764508917 iter/sec (stddev: 0.00018102881560564163) 18340.10096554201 iter/sec (stddev: 0.0001169264727564596) 1.32
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 523.3371916131073 iter/sec (stddev: 0.00004350681931620878) 670.1791606856578 iter/sec (stddev: 0.000013469942448543039) 1.28
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 511.34634708609394 iter/sec (stddev: 0.000021629038019226956) 617.5599496855034 iter/sec (stddev: 0.00003599668908270907) 1.21
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 484.6292930473082 iter/sec (stddev: 0.00003842534569225235) 594.4242131784404 iter/sec (stddev: 0.00007372956844493535) 1.23
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 15674.044657098253 iter/sec (stddev: 0.00000849429887919743) 19533.313333293536 iter/sec (stddev: 0.000006581955266734907) 1.25
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 7745.054992198369 iter/sec (stddev: 0.000018864935310080184) 9944.706602552433 iter/sec (stddev: 0.000011761122007620134) 1.28
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 4027.752422512448 iter/sec (stddev: 0.0000317283692903688) 5060.128025457724 iter/sec (stddev: 0.000027535320354958103) 1.26
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 11554.063968650102 iter/sec (stddev: 0.000011210149385197259) 15363.781702723856 iter/sec (stddev: 0.000008842532618748858) 1.33
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 5290.459449950253 iter/sec (stddev: 0.000018084457079848653) 6552.736780547483 iter/sec (stddev: 0.000014264916436949417) 1.24
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 2361.487445841417 iter/sec (stddev: 0.0000808919601104252) 3081.5093109345685 iter/sec (stddev: 0.0000423877818464963) 1.30
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 42811.22781470857 iter/sec (stddev: 0.000003300291425735987) 53592.91358868133 iter/sec (stddev: 0.000002999552375425794) 1.25
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 18322.85978350669 iter/sec (stddev: 0.000010156812791212368) 23444.13487334769 iter/sec (stddev: 0.000008148673007900391) 1.28
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 6766.177592310481 iter/sec (stddev: 0.000028237130655370594) 8539.804455567879 iter/sec (stddev: 0.000022576963118174567) 1.26
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1609671.0323356132 iter/sec (stddev: 2.4496655668940505e-8) 2118941.370533212 iter/sec (stddev: 2.8383700271349663e-8) 1.32
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 1817203.7495630153 iter/sec (stddev: 1.8354691174218447e-8) 2307806.721647228 iter/sec (stddev: 1.2016580979206825e-8) 1.27
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 3613.668210315736 iter/sec (stddev: 0.000007685620935208312) 4458.476384334858 iter/sec (stddev: 0.000005638063911092665) 1.23
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 54591.04137309729 iter/sec (stddev: 0.0000015892359924343592) 65420.1995357907 iter/sec (stddev: 0.0000011859455641773357) 1.20
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 463675.46686432534 iter/sec (stddev: 1.063426837390671e-7) 588069.1645784454 iter/sec (stddev: 6.993423764139669e-8) 1.27
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 72839.5903847585 iter/sec (stddev: 0.0000012092185417515656) 93193.57618011041 iter/sec (stddev: 8.330578983943496e-7) 1.28
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 646.3352767520598 iter/sec (stddev: 0.0011149026580788426) 810.3721888609733 iter/sec (stddev: 0.0010524442637021617) 1.25
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2352208.3943543746 iter/sec (stddev: 2.6703788960523895e-8) 2975932.9605662604 iter/sec (stddev: 6.243530423977836e-8) 1.27
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 3864164.5685907556 iter/sec (stddev: 1.5106342112805607e-8) 5020660.268035853 iter/sec (stddev: 6.674359993741647e-9) 1.30
benchmarks/test_guard_resolve.py::test_g3_deep_chain 878660.9628691508 iter/sec (stddev: 9.81117310737342e-8) 1108917.3337884753 iter/sec (stddev: 3.8866369724964376e-8) 1.26
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 472773.0810007924 iter/sec (stddev: 3.915165193705911e-7) 609720.3508461558 iter/sec (stddev: 3.4020510446463985e-7) 1.29
benchmarks/test_guard_resolve.py::test_g5_cross_scope 2121355.987724311 iter/sec (stddev: 2.3590652843093282e-8) 2720917.221192701 iter/sec (stddev: 1.779889195717244e-8) 1.28
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1582452.438110924 iter/sec (stddev: 1.3360545400939944e-7) 2084557.5766295542 iter/sec (stddev: 1.1576177559214498e-7) 1.32
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 888225.2070111556 iter/sec (stddev: 3.895334759317469e-8) 1150641.6610754596 iter/sec (stddev: 7.098777556420328e-8) 1.30
benchmarks/test_guard_resolve.py::test_g18_alias_hop 3896083.8084997735 iter/sec (stddev: 1.0969649857995606e-8) 5007057.447470116 iter/sec (stddev: 5.218115225560696e-9) 1.29
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 49467.526596644806 iter/sec (stddev: 0.000005665005749763284) 63628.022773893186 iter/sec (stddev: 0.0000055056573863301614) 1.29
benchmarks/test_guard_validate.py::test_g11_validate_wide 29213.81732155177 iter/sec (stddev: 0.0000026028514304618294) 33201.13600123433 iter/sec (stddev: 0.00001108977747576861) 1.14
benchmarks/test_guard_validate.py::test_g11b_validate_shared_alias_chain 2967.661056190747 iter/sec (stddev: 0.000013924849001072984) 3868.9465693024863 iter/sec (stddev: 0.000009658198714652197) 1.30

This comment was automatically generated by workflow using github-action-benchmark.

@lesnik512
lesnik512 merged commit c29c2b3 into main Nov 3, 2026
12 checks passed
@lesnik512
lesnik512 deleted the refactor/validation-edge-checks branch November 3, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant