Skip to content

docs: plain-prose pass over README and published docs - #550

Merged
lesnik512 merged 2 commits into
mainfrom
docs/prose-pass
Oct 3, 2026
Merged

lesnik512 merged 2 commits into
mainfrom
docs/prose-pass

Conversation

@lesnik512

@lesnik512 lesnik512 commented Oct 3, 2026 •

Copy link
Copy Markdown
Member

Prose pass over README.md and every page mkdocs publishes (docs/, excluding docs/agents and docs/adr). Code blocks, inline code, link targets, admonition syntax and headings are unchanged, so no anchors moved.

What changed

  • Em and en dashes in prose: 207 to 0. They became colons, commas, semicolons, parentheses or rewrites. Numeric ranges (C1-C3, 5-11%) use hyphens. Most were "[Link] — description" in See also lists and table cells. Dashes left in code-block comments are untouched.
  • Bold run-in labels: 116 to 0. This covers "Problem." recipe openers, the "Caught by:" lines in good-and-bad-practices, "Fix:" and "Direct miss." in troubleshooting, bold numbered Fix/Cause items, glossary bullets in errors-and-exceptions, per-provider "X →" labels in the migration guides, and the thread-safety bullets in design-decisions. Bold spans overall went from 266 to 58. The rest are inline emphasis on an ordering constraint (before, after, must), a term being defined, or the ratio cells in performance.md.
  • Not-X-but-Y contrasts and "rather than"/"instead of": rewritten where the negative half added only weight, e.g. "not a coordination tool", "a design decision, not a gap", "is application code, not a framework feature", "isn't about features so much as". Kept where the negative half corrects something a reader from FastAPI, dishka, that-depends or dependency-injector would assume (e.g. "keyed by provider reference, not attribute name", "not a hook").
  • Also cut: staged openers ("modern-di isn't the only way..."), repeated closers, filler ("simply", "just", "genuinely"), and "no longer"/"as of" wording outside the migration guides and the performance history. Version facts stay (3.1, removal in 4.0).
  • Title Case: README "Quick Start" becomes "Quick start".

Other change

Verification

  • just lint-ci: pass
  • just test-ci: 548 passed, 100% coverage
  • uvx --with-requirements docs/requirements.txt mkdocs build --strict: pass (anchor validation on)

Not changed

  • The markdown_description in mkdocs.yml ("Powerful ...") mirrors the pyproject description, which this pass does not touch.
  • Benchmark tables and footnotes in performance.md are generated by just bench-report. Only the hand-written prose around them changed.

Fact fix

docs/recipes/sqlalchemy.md said "Three providers, three scopes"; the engine is APP and both the session and repositories are REQUEST, so it now says two scopes.

@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: 3d2a3ec Previous: 3bb845c Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 3748966.7847559517 iter/sec (stddev: 6.536767954885753e-9) 3552595.6276174076 iter/sec (stddev: 1.8017495134377973e-8) 0.95
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 3744696.1995632937 iter/sec (stddev: 8.11036842585726e-9) 3525743.000987044 iter/sec (stddev: 1.9520895722614712e-8) 0.94
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 15262.283863453004 iter/sec (stddev: 0.000056144324850628354) 15442.399035232269 iter/sec (stddev: 0.0000504562631484814) 1.01
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 13002.56170014031 iter/sec (stddev: 0.00012105475718252928) 12987.261259255825 iter/sec (stddev: 0.00013444409804140028) 1.00
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 455.3955817409212 iter/sec (stddev: 0.000050486138046866206) 370.149961520189 iter/sec (stddev: 0.00006432698950621452) 0.81
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 419.09836567790626 iter/sec (stddev: 0.000039590248208970655) 353.9950395466471 iter/sec (stddev: 0.00004818188411818694) 0.84
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 377.1765699010654 iter/sec (stddev: 0.00011017185804252727) 325.7458820366416 iter/sec (stddev: 0.00005350777640166116) 0.86
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 1509.1429729233507 iter/sec (stddev: 0.00018523510489365963) 1591.09633100402 iter/sec (stddev: 0.00019877711335045307) 1.05
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 1200.9439179018766 iter/sec (stddev: 0.00024118857648077488) 1251.96977882641 iter/sec (stddev: 0.00025669199194511646) 1.04
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 872.6382699702993 iter/sec (stddev: 0.0002500576515871365) 948.6776536343597 iter/sec (stddev: 0.00019771596542946792) 1.09
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 1264.863049956556 iter/sec (stddev: 0.0012603372528518645) 1341.9049449995864 iter/sec (stddev: 0.0013131786726602232) 1.06
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 1121.4517477002366 iter/sec (stddev: 0.00021032087247726763) 1157.5662043227023 iter/sec (stddev: 0.00020992030300014155) 1.03
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 719.0375940654415 iter/sec (stddev: 0.0002691176420246703) 771.876181875189 iter/sec (stddev: 0.00023582272008191215) 1.07
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 817861.2723259545 iter/sec (stddev: 7.574284011913898e-8) 799413.3425239581 iter/sec (stddev: 4.6161785509303694e-8) 0.98
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 785911.0048580153 iter/sec (stddev: 3.95400831295033e-8) 741469.4129403305 iter/sec (stddev: 8.216022529812231e-8) 0.94
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 2423.122423645699 iter/sec (stddev: 0.000013429193034333899) 2418.1335157858957 iter/sec (stddev: 0.000011054809907129041) 1.00
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 56207.67718364238 iter/sec (stddev: 0.000002660081497777069) 55362.81582342883 iter/sec (stddev: 0.0000037110526828629025) 0.98
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 45445.524114963955 iter/sec (stddev: 0.0000020907397910757774) 35058.66382477332 iter/sec (stddev: 0.00000686006290349675) 0.77
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 578.5642523083935 iter/sec (stddev: 0.000028699674660190535) 552.0029132868616 iter/sec (stddev: 0.000024694912850732793) 0.95
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2226720.3209929727 iter/sec (stddev: 5.478080783414517e-8) 2164661.000023137 iter/sec (stddev: 2.9672373641740744e-8) 0.97
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 3594999.054309258 iter/sec (stddev: 1.133302239101231e-8) 3478358.9895358584 iter/sec (stddev: 2.2492268429006365e-8) 0.97
benchmarks/test_guard_resolve.py::test_g3_deep_chain 750179.0349159556 iter/sec (stddev: 6.482694244770068e-8) 734894.0596930252 iter/sec (stddev: 4.385126547025142e-8) 0.98
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 465230.6067828385 iter/sec (stddev: 3.4785942847911485e-7) 448788.90051667934 iter/sec (stddev: 3.574176524885024e-7) 0.96
benchmarks/test_guard_resolve.py::test_g5_cross_scope 1992556.010003286 iter/sec (stddev: 3.400860028373226e-8) 1993989.5173966833 iter/sec (stddev: 3.37719590410727e-8) 1.00
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1050736.7963374218 iter/sec (stddev: 1.7683787190997395e-7) 1040260.310581399 iter/sec (stddev: 1.6805736399783922e-7) 0.99
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 711167.0436069932 iter/sec (stddev: 9.366771760959301e-8) 738595.5583310551 iter/sec (stddev: 4.479275195662805e-8) 1.04
benchmarks/test_guard_resolve.py::test_g18_alias_hop 2298485.617464901 iter/sec (stddev: 1.1021860597509296e-8) 1972756.1585418966 iter/sec (stddev: 2.1135635307380664e-8) 0.86
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 23190.658270988817 iter/sec (stddev: 0.000022741002005993537) 23479.450624332232 iter/sec (stddev: 0.000023210661423516627) 1.01
benchmarks/test_guard_validate.py::test_g11_validate_wide 14140.246833074865 iter/sec (stddev: 0.000027656583936823687) 14154.42798938568 iter/sec (stddev: 0.000028768193092020475) 1.00

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

@lesnik512
lesnik512 merged commit 32983e5 into main Oct 3, 2026
10 checks passed
@lesnik512
lesnik512 deleted the docs/prose-pass branch October 3, 2026 14:43
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