Skip to content

Find validation scope owners without building chains - #744

Merged
lesnik512 merged 1 commit into
mainfrom
refactor/scope-owner
Nov 3, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
refactor/scope-owner

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Validation follows aliases and derived sources directly when it only needs the scope owner. Alias cycles still fall back to the repeated provider, and error rendering still uses the full scope chain.

All 1,128 tests and just lint passed. In a paired local comparison, the shared-alias validation median moved from 186.57 to 186.38 µs. Deep and wide validation were about 1% slower in the same run.

@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: ab6d032 Previous: 97bcd5d Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 4908580.871900452 iter/sec (stddev: 7.401639822131585e-9) 3699850.9255874944 iter/sec (stddev: 1.376854715789107e-8) 0.75
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 4887897.297415905 iter/sec (stddev: 5.3652289536851076e-9) 3508592.9300299203 iter/sec (stddev: 2.5891891337702616e-8) 0.72
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 20716.511160675742 iter/sec (stddev: 0.000043503113063456174) 14165.19362577081 iter/sec (stddev: 0.000060649980088460166) 0.68
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 17520.504886379622 iter/sec (stddev: 0.00012381346463645647) 11357.723740936732 iter/sec (stddev: 0.00026127632918110984) 0.65
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 633.0452362181296 iter/sec (stddev: 0.000024114908445444653) 422.04808962536663 iter/sec (stddev: 0.00012601608327816885) 0.67
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 591.9413682386044 iter/sec (stddev: 0.000025444663661813316) 423.628515795218 iter/sec (stddev: 0.0001446679735805736) 0.72
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 557.9327087233771 iter/sec (stddev: 0.00004486374779754886) 404.2998584103321 iter/sec (stddev: 0.000092606182422299) 0.72
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 18549.161846797473 iter/sec (stddev: 0.0000076010289312304656) 13491.087618588588 iter/sec (stddev: 0.00001199873573007289) 0.73
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 9307.745720013729 iter/sec (stddev: 0.000013861857313271223) 6670.13439540484 iter/sec (stddev: 0.000023909310520331817) 0.72
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 4772.872899560397 iter/sec (stddev: 0.00002967919097750373) 3599.650689929737 iter/sec (stddev: 0.00003635546645356621) 0.75
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 14343.815276241317 iter/sec (stddev: 0.000008894297179049655) 10358.50080732401 iter/sec (stddev: 0.000014073774178185547) 0.72
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 6439.725377891077 iter/sec (stddev: 0.00001540775265167988) 4371.102365446031 iter/sec (stddev: 0.000019782923858144132) 0.68
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 2874.4453757665738 iter/sec (stddev: 0.000031364984120241665) 2067.4041637129326 iter/sec (stddev: 0.00004360325316261725) 0.72
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 49851.194190560636 iter/sec (stddev: 0.000003319914055016801) 40558.8605372135 iter/sec (stddev: 0.000005084817026047298) 0.81
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 20250.372226603424 iter/sec (stddev: 0.000011422051223416049) 14060.620490376548 iter/sec (stddev: 0.000017260393680348955) 0.69
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 7991.887701370864 iter/sec (stddev: 0.000023688271544240196) 6358.909237195522 iter/sec (stddev: 0.000028349052225105085) 0.80
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1990518.761041116 iter/sec (stddev: 2.3264843076034514e-8) 1586480.4577673606 iter/sec (stddev: 3.762009590005746e-8) 0.80
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 2171073.8923904034 iter/sec (stddev: 1.8368919083992156e-8) 1616806.5096739451 iter/sec (stddev: 3.434303966440814e-8) 0.74
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 4310.515880916729 iter/sec (stddev: 0.000010038374698203042) 3207.9407538232276 iter/sec (stddev: 0.000011231566584996495) 0.74
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 72007.85502022343 iter/sec (stddev: 0.0000014223129119777033) 54913.80818764173 iter/sec (stddev: 0.0000023437217869468475) 0.76
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 568336.5607275774 iter/sec (stddev: 7.605385844372033e-8) 413011.71092513134 iter/sec (stddev: 9.211248300820136e-8) 0.73
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 87982.60932046305 iter/sec (stddev: 0.0000010271276086797648) 62777.69099313747 iter/sec (stddev: 0.0000016468032451379733) 0.71
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 764.8922334177968 iter/sec (stddev: 0.001266634072818239) 553.2167596549203 iter/sec (stddev: 0.0013037444848985635) 0.72
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2739804.093091645 iter/sec (stddev: 3.3625264335550557e-8) 1937385.539864514 iter/sec (stddev: 3.124409297417119e-8) 0.71
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 4648106.714578968 iter/sec (stddev: 8.86018465682685e-9) 3047407.203467646 iter/sec (stddev: 3.44390870855922e-8) 0.66
benchmarks/test_guard_resolve.py::test_g3_deep_chain 1051955.4207810832 iter/sec (stddev: 3.9601941564160144e-8) 767261.3568814585 iter/sec (stddev: 7.86118308454073e-8) 0.73
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 559878.6742906391 iter/sec (stddev: 3.6066216849908243e-7) 452242.8293440293 iter/sec (stddev: 4.04487202774168e-7) 0.81
benchmarks/test_guard_resolve.py::test_g5_cross_scope 2580624.8492294364 iter/sec (stddev: 2.198094205048723e-8) 1705023.8057325385 iter/sec (stddev: 5.593521759980956e-8) 0.66
benchmarks/test_guard_resolve.py::test_g9_context_resolve 2010112.0697840785 iter/sec (stddev: 1.1948932991554724e-7) 1387244.61867959 iter/sec (stddev: 1.427218339492765e-7) 0.69
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 1093800.8019065603 iter/sec (stddev: 2.650423738046131e-8) 762986.4587083632 iter/sec (stddev: 4.902203981247507e-8) 0.70
benchmarks/test_guard_resolve.py::test_g18_alias_hop 4775234.943952566 iter/sec (stddev: 5.6783765675486695e-9) 2807898.889157946 iter/sec (stddev: 1.3550385106235307e-8) 0.59
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 60204.08220786306 iter/sec (stddev: 0.0000017316559631781383) 40087.41890190946 iter/sec (stddev: 0.0000035421063046108555) 0.67
benchmarks/test_guard_validate.py::test_g11_validate_wide 35173.33613426113 iter/sec (stddev: 0.000002011699152550387) 23917.250331925698 iter/sec (stddev: 0.000005996614565270314) 0.68
benchmarks/test_guard_validate.py::test_g11b_validate_shared_alias_chain 3617.313792078185 iter/sec (stddev: 0.000010393365066343329) 2589.186688837534 iter/sec (stddev: 0.00001643739005892647) 0.72

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

@lesnik512
lesnik512 merged commit 4c426c4 into main Nov 3, 2026
12 checks passed
@lesnik512
lesnik512 deleted the refactor/scope-owner branch November 3, 2026 05:08
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