quadkit 0.0.45__tar.gz → 0.0.50__tar.gz

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.
Files changed (691) hide show
  1. {quadkit-0.0.45 → quadkit-0.0.50}/PKG-INFO +26 -24
  2. {quadkit-0.0.45 → quadkit-0.0.50}/README.md +17 -17
  3. {quadkit-0.0.45 → quadkit-0.0.50}/pyproject.toml +12 -7
  4. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/__init__.py +3 -0
  5. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/base.py +8 -5
  6. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/discovery.py +18 -12
  7. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/lifecycle.py +4 -2
  8. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/module.py +5 -1
  9. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/standard.py +5 -1
  10. quadkit-0.0.50/src/quadkit/codegen/__init__.py +30 -0
  11. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/codegen/base.py +12 -0
  12. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/executors/task_manager.py +3 -10
  13. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/task_utils.py +2 -3
  14. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/base.py +14 -6
  15. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/di/provider.py +50 -30
  16. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/sources.py +35 -37
  17. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/container_resolution.py +12 -2
  18. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/scope.py +67 -25
  19. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/collect.py +1 -1
  20. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/errors.py +4 -4
  21. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/lifecycle.py +7 -2
  22. quadkit-0.0.50/src/quadkit/di/resolution/context.py +125 -0
  23. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/base.py +161 -29
  24. quadkit-0.0.50/src/quadkit/domain/models/coercion.py +121 -0
  25. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/__init__.py +4 -0
  26. quadkit-0.0.50/src/quadkit/logging/safe.py +16 -0
  27. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/discovery.py +10 -0
  28. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/exceptions.py +4 -3
  29. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/state.py +4 -10
  30. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/clock.py +7 -2
  31. quadkit-0.0.50/src/quadkit/primitives/namespace.py +32 -0
  32. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/pipeline.py +1 -1
  33. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/__init__.py +4 -0
  34. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/guards/chain.py +6 -9
  35. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/provider.py +93 -1
  36. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/sanitization/html.py +4 -2
  37. quadkit-0.0.50/src/quadkit/security/signing.py +97 -0
  38. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/domain/domain.py +108 -11
  39. quadkit-0.0.50/src/quadkit/serialization/schema/schema.py +135 -0
  40. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/__init__.py +6 -0
  41. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/engine/coercion.py +103 -6
  42. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/schema/__init__.py +4 -0
  43. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/schema/fields.py +17 -0
  44. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_task_manager.py +38 -0
  45. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_task_utils.py +7 -4
  46. quadkit-0.0.50/tests/unit/config/test_config_provider_log_privacy.py +37 -0
  47. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_config_sources.py +55 -4
  48. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_loader_fail_fast.py +8 -3
  49. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_strict_sections.py +2 -1
  50. quadkit-0.0.50/tests/unit/di/test_request_resolver_context.py +77 -0
  51. quadkit-0.0.50/tests/unit/di/test_resolve_all_visibility.py +62 -0
  52. quadkit-0.0.50/tests/unit/di/test_scope_constructor_resolution.py +144 -0
  53. quadkit-0.0.50/tests/unit/domain/test_computed_field_roundtrip.py +64 -0
  54. quadkit-0.0.50/tests/unit/domain/test_domain_model_dto_parity.py +146 -0
  55. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/plugins/test_state_hardening.py +34 -4
  56. quadkit-0.0.50/tests/unit/primitives/test_namespace.py +48 -0
  57. quadkit-0.0.50/tests/unit/security/test_env_secrets_provider.py +70 -0
  58. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_guards.py +46 -0
  59. quadkit-0.0.50/tests/unit/security/test_signing.py +41 -0
  60. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_discovery.py +19 -7
  61. quadkit-0.0.50/tests/unit/test_application_invalid_graph_cleanup.py +56 -0
  62. quadkit-0.0.50/tests/unit/test_application_module_iterables.py +42 -0
  63. quadkit-0.0.50/tests/unit/test_clock_today.py +62 -0
  64. quadkit-0.0.50/tests/unit/test_config_fallback_path.py +122 -0
  65. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_domain_model_base.py +11 -1
  66. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_init.py +12 -0
  67. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_coercion.py +36 -6
  68. quadkit-0.0.45/src/quadkit/codegen/__init__.py +0 -13
  69. quadkit-0.0.45/src/quadkit/di/resolution/context.py +0 -59
  70. quadkit-0.0.45/src/quadkit/domain/models/coercion.py +0 -67
  71. quadkit-0.0.45/src/quadkit/serialization/schema/schema.py +0 -84
  72. {quadkit-0.0.45 → quadkit-0.0.50}/.gitignore +0 -0
  73. {quadkit-0.0.45 → quadkit-0.0.50}/LICENSE +0 -0
  74. {quadkit-0.0.45 → quadkit-0.0.50}/NOTICE +0 -0
  75. {quadkit-0.0.45 → quadkit-0.0.50}/example.yaml +0 -0
  76. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/__init__.py +0 -0
  77. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/asgi_lifespan.py +0 -0
  78. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/config/__init__.py +0 -0
  79. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/config/discovery.py +0 -0
  80. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/config/models.py +0 -0
  81. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/config_validation.py +0 -0
  82. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/constants.py +0 -0
  83. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/di/__init__.py +0 -0
  84. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/di/provider.py +0 -0
  85. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/events.py +0 -0
  86. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/exceptions.py +0 -0
  87. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/factory.py +0 -0
  88. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/health_probes.py +0 -0
  89. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/injectable_provider.py +0 -0
  90. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/invoker.py +0 -0
  91. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/pipeline.py +0 -0
  92. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/protocols.py +0 -0
  93. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/py.typed +0 -0
  94. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/runner.py +0 -0
  95. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/secrets.py +0 -0
  96. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/app/types.py +0 -0
  97. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/codegen/field_types.py +0 -0
  98. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/__init__.py +0 -0
  99. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/bridges/__init__.py +0 -0
  100. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/bridges/py.typed +0 -0
  101. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/bridges/sync_bridge.py +0 -0
  102. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/channels/__init__.py +0 -0
  103. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/channels/channel.py +0 -0
  104. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/channels/py.typed +0 -0
  105. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/config.py +0 -0
  106. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/constants.py +0 -0
  107. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/di/__init__.py +0 -0
  108. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/di/provider.py +0 -0
  109. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/di/py.typed +0 -0
  110. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/exceptions.py +0 -0
  111. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/executors/__init__.py +0 -0
  112. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/executors/dispatcher.py +0 -0
  113. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/executors/parallel.py +0 -0
  114. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/executors/py.typed +0 -0
  115. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/locks/__init__.py +0 -0
  116. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/locks/py.typed +0 -0
  117. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/locks/rwlock.py +0 -0
  118. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/module.py +0 -0
  119. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/concurrency/py.typed +0 -0
  120. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/__init__.py +0 -0
  121. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/constants.py +0 -0
  122. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/di/__init__.py +0 -0
  123. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/exceptions.py +0 -0
  124. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/__init__.py +0 -0
  125. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/merge.py +0 -0
  126. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/registry.py +0 -0
  127. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/validation.py +0 -0
  128. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/lib/watcher.py +0 -0
  129. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/main.py +0 -0
  130. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/protocols.py +0 -0
  131. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/secrets.py +0 -0
  132. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/config/types.py +0 -0
  133. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/constants.py +0 -0
  134. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/__init__.py +0 -0
  135. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/_graph.py +0 -0
  136. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/builder.py +0 -0
  137. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/config/__init__.py +0 -0
  138. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/config/models.py +0 -0
  139. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/constants.py +0 -0
  140. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/__init__.py +0 -0
  141. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/container.py +0 -0
  142. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/container_introspection.py +0 -0
  143. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/container_runtime.py +0 -0
  144. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/registrar.py +0 -0
  145. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/resolver.py +0 -0
  146. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/container/validation.py +0 -0
  147. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/context.py +0 -0
  148. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/decorators.py +0 -0
  149. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/exceptions.py +0 -0
  150. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/__init__.py +0 -0
  151. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/aop_interceptors.py +0 -0
  152. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/discovery.py +0 -0
  153. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/interceptors.py +0 -0
  154. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/strategies.py +0 -0
  155. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/extensions/validator.py +0 -0
  156. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/function_provider.py +0 -0
  157. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/integration/__init__.py +0 -0
  158. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/integration/provider.py +0 -0
  159. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/markers.py +0 -0
  160. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/__init__.py +0 -0
  161. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/base.py +0 -0
  162. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/__init__.py +0 -0
  163. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/_graph_utils.py +0 -0
  164. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/compiler.py +0 -0
  165. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/context.py +0 -0
  166. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/__init__.py +0 -0
  167. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/detect_cycles.py +0 -0
  168. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/expand.py +0 -0
  169. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/order.py +0 -0
  170. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/protocol.py +0 -0
  171. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/validate.py +0 -0
  172. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/compiler/phases/visibility.py +0 -0
  173. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/constants.py +0 -0
  174. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/decorator.py +0 -0
  175. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/dynamic.py +0 -0
  176. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/graph.py +0 -0
  177. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/introspection.py +0 -0
  178. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/metadata.py +0 -0
  179. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/module/registry.py +0 -0
  180. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/__init__.py +0 -0
  181. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/events.py +0 -0
  182. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/health.py +0 -0
  183. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/orchestrator.py +0 -0
  184. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/orchestrator/registry.py +0 -0
  185. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/protocols.py +0 -0
  186. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/provider.py +0 -0
  187. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/provider_utils.py +0 -0
  188. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/py.typed +0 -0
  189. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/__init__.py +0 -0
  190. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/descriptor.py +0 -0
  191. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/diagnostics.py +0 -0
  192. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/injector.py +0 -0
  193. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/invoker.py +0 -0
  194. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/registry.py +0 -0
  195. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/resolver.py +0 -0
  196. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/store.py +0 -0
  197. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/type_hints.py +0 -0
  198. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/resolution/validator.py +0 -0
  199. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/di/types.py +0 -0
  200. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/__init__.py +0 -0
  201. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/constants.py +0 -0
  202. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/exceptions.py +0 -0
  203. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/__init__.py +0 -0
  204. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/aggregate.py +0 -0
  205. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/entity.py +0 -0
  206. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/factory.py +0 -0
  207. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/py.typed +0 -0
  208. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/models/value_object.py +0 -0
  209. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/module.py +0 -0
  210. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/py.typed +0 -0
  211. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/types.py +0 -0
  212. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/domain/unit_of_work.py +0 -0
  213. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/exceptions.py +0 -0
  214. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/hooks/__init__.py +0 -0
  215. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/hooks/ambient.py +0 -0
  216. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/hooks/registry.py +0 -0
  217. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/hooks/types.py +0 -0
  218. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/__init__.py +0 -0
  219. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/ambient.py +0 -0
  220. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/config.py +0 -0
  221. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/constants.py +0 -0
  222. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/di/__init__.py +0 -0
  223. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/di/provider.py +0 -0
  224. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/identity/generator.py +0 -0
  225. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/README.md +0 -0
  226. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/config/__init__.py +0 -0
  227. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/config/models.py +0 -0
  228. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/config/redaction.py +0 -0
  229. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/config/sampling.py +0 -0
  230. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/configurator.py +0 -0
  231. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/constants.py +0 -0
  232. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/debug.py +0 -0
  233. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/di/__init__.py +0 -0
  234. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/di/provider.py +0 -0
  235. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/factory.py +0 -0
  236. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/processors.py +0 -0
  237. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/redaction.py +0 -0
  238. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/logging/types.py +0 -0
  239. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/__init__.py +0 -0
  240. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/config.py +0 -0
  241. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/constants.py +0 -0
  242. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/core/__init__.py +0 -0
  243. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/core/mapper.py +0 -0
  244. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/di/__init__.py +0 -0
  245. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/di/provider.py +0 -0
  246. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/exceptions.py +0 -0
  247. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/module.py +0 -0
  248. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/protocols.py +0 -0
  249. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/py.typed +0 -0
  250. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/mapping/types.py +0 -0
  251. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/__init__.py +0 -0
  252. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/__init__.py +0 -0
  253. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/caching.py +0 -0
  254. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/di.py +0 -0
  255. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/observability.py +0 -0
  256. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/resilience.py +0 -0
  257. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/routing.py +0 -0
  258. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/builtins/validation.py +0 -0
  259. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/config.py +0 -0
  260. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/constants.py +0 -0
  261. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/core/__init__.py +0 -0
  262. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/core/chain.py +0 -0
  263. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/core/exception_filters.py +0 -0
  264. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/core/registry.py +0 -0
  265. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/di/__init__.py +0 -0
  266. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/di/provider.py +0 -0
  267. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/exceptions.py +0 -0
  268. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/module.py +0 -0
  269. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/middleware/types.py +0 -0
  270. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/module.py +0 -0
  271. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/observability/__init__.py +0 -0
  272. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/observability/core.py +0 -0
  273. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/observability/di/__init__.py +0 -0
  274. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/observability/di/sub_providers/__init__.py +0 -0
  275. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/observability/di/sub_providers/observability.py +0 -0
  276. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/__init__.py +0 -0
  277. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/engine.py +0 -0
  278. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/plugins/module.py +0 -0
  279. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/__init__.py +0 -0
  280. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/builder.py +0 -0
  281. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/constants.py +0 -0
  282. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/context.py +0 -0
  283. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/context_keys.py +0 -0
  284. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/context_registry.py +0 -0
  285. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/data.py +0 -0
  286. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/di/__init__.py +0 -0
  287. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/di/provider.py +0 -0
  288. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/exceptions.py +0 -0
  289. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/lazy.py +0 -0
  290. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/protocols.py +0 -0
  291. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/registry/__init__.py +0 -0
  292. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/registry/core.py +0 -0
  293. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/registry/introspection.py +0 -0
  294. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/trusted_html.py +0 -0
  295. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/types.py +0 -0
  296. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/primitives/typing.py +0 -0
  297. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/py.typed +0 -0
  298. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/__init__.py +0 -0
  299. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/core.py +0 -0
  300. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/exceptions.py +0 -0
  301. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/operators/__init__.py +0 -0
  302. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/operators/control.py +0 -0
  303. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/operators/time_ops.py +0 -0
  304. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/operators/transform.py +0 -0
  305. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/retry.py +0 -0
  306. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/reactive/subjects.py +0 -0
  307. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/result/__init__.py +0 -0
  308. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/result/_pipeline.py +0 -0
  309. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/result/errors.py +0 -0
  310. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/result/types.py +0 -0
  311. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/result/utils.py +0 -0
  312. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/saga/__init__.py +0 -0
  313. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/saga/base.py +0 -0
  314. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/saga/canonical_json.py +0 -0
  315. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/saga/content_addressed.py +0 -0
  316. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/config.py +0 -0
  317. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/constants.py +0 -0
  318. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/decorators.py +0 -0
  319. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/encryption/__init__.py +0 -0
  320. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/encryption/service.py +0 -0
  321. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/events.py +0 -0
  322. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/exceptions.py +0 -0
  323. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/guards/__init__.py +0 -0
  324. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/guards/decorator.py +0 -0
  325. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/hashing/__init__.py +0 -0
  326. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/hashing/ambient.py +0 -0
  327. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/hashing/digest.py +0 -0
  328. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/hashing/kdf.py +0 -0
  329. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/hooks.py +0 -0
  330. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/py.typed +0 -0
  331. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/sanitization/__init__.py +0 -0
  332. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/sanitization/filename.py +0 -0
  333. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/sanitization/sanitizer.py +0 -0
  334. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/sanitization/url.py +0 -0
  335. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/secrets/__init__.py +0 -0
  336. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/secrets/rotation.py +0 -0
  337. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/secrets/store.py +0 -0
  338. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/secrets/types.py +0 -0
  339. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/security/types.py +0 -0
  340. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/__init__.py +0 -0
  341. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/backends/__init__.py +0 -0
  342. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/backends/json.py +0 -0
  343. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/backends/py.typed +0 -0
  344. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/config.py +0 -0
  345. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/constants.py +0 -0
  346. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/di/__init__.py +0 -0
  347. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/di/provider.py +0 -0
  348. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/di/py.typed +0 -0
  349. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/domain/__init__.py +0 -0
  350. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/domain/py.typed +0 -0
  351. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/exceptions.py +0 -0
  352. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/module.py +0 -0
  353. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/py.typed +0 -0
  354. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/registry/__init__.py +0 -0
  355. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/registry/py.typed +0 -0
  356. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/registry/registry.py +0 -0
  357. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/schema/__init__.py +0 -0
  358. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/schema/py.typed +0 -0
  359. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/serialization/types.py +0 -0
  360. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/types.py +0 -0
  361. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/config.py +0 -0
  362. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/constants.py +0 -0
  363. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/decorators.py +0 -0
  364. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/engine/__init__.py +0 -0
  365. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/engine/py.typed +0 -0
  366. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/engine/validator.py +0 -0
  367. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/exceptions.py +0 -0
  368. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/module.py +0 -0
  369. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/py.typed +0 -0
  370. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/rules/__init__.py +0 -0
  371. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/rules/py.typed +0 -0
  372. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/rules/rules.py +0 -0
  373. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/schema/introspection.py +0 -0
  374. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/schema/py.typed +0 -0
  375. {quadkit-0.0.45 → quadkit-0.0.50}/src/quadkit/validation/types.py +0 -0
  376. {quadkit-0.0.45 → quadkit-0.0.50}/tests/conftest.py +0 -0
  377. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/__init__.py +0 -0
  378. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/__init__.py +0 -0
  379. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/_fixtures.py +0 -0
  380. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/conftest.py +0 -0
  381. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_boot_level.py +0 -0
  382. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_cross_method.py +0 -0
  383. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_dependency_chain.py +0 -0
  384. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_exports.py +0 -0
  385. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_importers.py +0 -0
  386. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_module_health_integration.py +0 -0
  387. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_module_lifecycle_integration.py +0 -0
  388. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_name_lookup.py +0 -0
  389. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/module/test_stub_enforcement_integration.py +0 -0
  390. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/di/test_visibility_enforcement_e2e.py +0 -0
  391. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/mapping/test_mapping_lifecycle.py +0 -0
  392. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/middleware/test_middleware_lifecycle.py +0 -0
  393. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/test_corrected_patterns_integration.py +0 -0
  394. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/test_database_integration.py +0 -0
  395. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/test_full_pipeline.py +0 -0
  396. {quadkit-0.0.45 → quadkit-0.0.50}/tests/integration/test_monitor_config_integration.py +0 -0
  397. {quadkit-0.0.45 → quadkit-0.0.50}/tests/test.md +0 -0
  398. {quadkit-0.0.45 → quadkit-0.0.50}/tests/test_import_diagnostic.py +0 -0
  399. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/__init__.py +0 -0
  400. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/aop/test_interceptor_timeout.py +0 -0
  401. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/clock/test_clock.py +0 -0
  402. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/codegen/__init__.py +0 -0
  403. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/codegen/test_generator_base.py +0 -0
  404. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/codegen/test_staged_generation.py +0 -0
  405. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/codegen/test_template_overrides.py +0 -0
  406. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/conftest.py +0 -0
  407. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_bounded_channel.py +0 -0
  408. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_channel.py +0 -0
  409. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_channel_close_wakes_receivers.py +0 -0
  410. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_config.py +0 -0
  411. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_constants.py +0 -0
  412. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_constants_new.py +0 -0
  413. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_exceptions.py +0 -0
  414. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_parallel.py +0 -0
  415. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_provider_config.py +0 -0
  416. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_concurrency_rwlock.py +0 -0
  417. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_config_pool.py +0 -0
  418. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_dispatcher.py +0 -0
  419. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/concurrency/test_sync_bridge.py +0 -0
  420. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_config_constants_new.py +0 -0
  421. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_config_protocols.py +0 -0
  422. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_env_interpolation.py +0 -0
  423. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_logging_redaction_config.py +0 -0
  424. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_logging_sampling.py +0 -0
  425. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_profile_overlay.py +0 -0
  426. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_scoping.py +0 -0
  427. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_secrets_validator.py +0 -0
  428. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/config/test_strict_bool_env.py +0 -0
  429. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/test_context_correlation.py +0 -0
  430. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/test_core_constants.py +0 -0
  431. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/test_core_types.py +0 -0
  432. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/test_request_context_di.py +0 -0
  433. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/test_typing.py +0 -0
  434. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/core/validation/test_protocols.py +0 -0
  435. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/__init__.py +0 -0
  436. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/integration/test_provider.py +0 -0
  437. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/__init__.py +0 -0
  438. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/conftest.py +0 -0
  439. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_compiler.py +0 -0
  440. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_decorator.py +0 -0
  441. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_dynamic.py +0 -0
  442. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_errors.py +0 -0
  443. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_global.py +0 -0
  444. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_graph_reflection.py +0 -0
  445. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_health_graph.py +0 -0
  446. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_integration.py +0 -0
  447. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_introspection.py +0 -0
  448. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_lifecycle.py +0 -0
  449. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_module_lifecycle.py +0 -0
  450. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_reexport.py +0 -0
  451. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_registry.py +0 -0
  452. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_stub_compiler.py +0 -0
  453. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_stub_decorator.py +0 -0
  454. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/module/test_visibility.py +0 -0
  455. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_advanced_features.py +0 -0
  456. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_container_basics.py +0 -0
  457. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_container_builder.py +0 -0
  458. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_container_freeze.py +0 -0
  459. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_container_hardening.py +0 -0
  460. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_container_visibility.py +0 -0
  461. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_decorators.py +0 -0
  462. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_descriptor.py +0 -0
  463. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_di_constants_new.py +0 -0
  464. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_di_decorators.py +0 -0
  465. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_di_provider_config_wiring.py +0 -0
  466. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_diagnostics.py +0 -0
  467. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_extensions_discovery.py +0 -0
  468. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_extensions_validator.py +0 -0
  469. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_function_provider_boot.py +0 -0
  470. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_graph_validator.py +0 -0
  471. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_interceptor_registry.py +0 -0
  472. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_invoker_unit.py +0 -0
  473. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_lifecycle_orchestrator.py +0 -0
  474. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_module_validation.py +0 -0
  475. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_module_visibility_boot.py +0 -0
  476. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_module_visibility_enforcement.py +0 -0
  477. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_named_binding.py +0 -0
  478. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_orchestrator_health.py +0 -0
  479. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_basics.py +0 -0
  480. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_config_injection.py +0 -0
  481. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_conformance.py +0 -0
  482. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_orchestration.py +0 -0
  483. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_reset_state.py +0 -0
  484. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_provider_utils.py +0 -0
  485. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_scope_concurrency.py +0 -0
  486. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_scope_manager.py +0 -0
  487. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_service_store.py +0 -0
  488. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_type_hints.py +0 -0
  489. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/di/test_validation.py +0 -0
  490. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/conftest.py +0 -0
  491. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_aggregates.py +0 -0
  492. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain.py +0 -0
  493. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_constants.py +0 -0
  494. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_exceptions.py +0 -0
  495. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_hydration.py +0 -0
  496. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_init.py +0 -0
  497. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_model_strict.py +0 -0
  498. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_domain_module.py +0 -0
  499. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_models_factory.py +0 -0
  500. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/domain/test_value_object.py +0 -0
  501. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/identity/test_identity.py +0 -0
  502. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/logging/test_logging_constants_new.py +0 -0
  503. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/conftest.py +0 -0
  504. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_auto_map.py +0 -0
  505. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_auto_map_dataclass.py +0 -0
  506. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_exceptions.py +0 -0
  507. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_mapping_constants_new.py +0 -0
  508. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_mapping_exceptions.py +0 -0
  509. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_mapping_mapper.py +0 -0
  510. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_mapping_module.py +0 -0
  511. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_mapping_types.py +0 -0
  512. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_protocol.py +0 -0
  513. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/mapping/test_registry.py +0 -0
  514. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/conftest.py +0 -0
  515. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_builtins.py +0 -0
  516. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_chain.py +0 -0
  517. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_config_alignment.py +0 -0
  518. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_exception_filters.py +0 -0
  519. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_chain.py +0 -0
  520. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_constants.py +0 -0
  521. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_constants_new.py +0 -0
  522. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_ep_discovery.py +0 -0
  523. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_exceptions.py +0 -0
  524. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_module.py +0 -0
  525. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_routing.py +0 -0
  526. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_middleware_types.py +0 -0
  527. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_p2_retry_traceback.py +0 -0
  528. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_registry_defaults.py +0 -0
  529. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/middleware/test_registry_with_resilience.py +0 -0
  530. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/plugins/test_discovery.py +0 -0
  531. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/plugins/test_engine.py +0 -0
  532. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/plugins/test_state.py +0 -0
  533. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/plugins/test_validation.py +0 -0
  534. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/primitives/test_primitives_constants.py +0 -0
  535. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/primitives/test_public_surface_is_static.py +0 -0
  536. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/primitives/test_registry_advanced.py +0 -0
  537. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/primitives/test_registry_introspection.py +0 -0
  538. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/primitives/test_trusted_html.py +0 -0
  539. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_control.py +0 -0
  540. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_core.py +0 -0
  541. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_facade.py +0 -0
  542. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_retry.py +0 -0
  543. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_subjects.py +0 -0
  544. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_time_ops.py +0 -0
  545. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/reactive/test_transform.py +0 -0
  546. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/__init__.py +0 -0
  547. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_exceptions.py +0 -0
  548. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_hashing.py +0 -0
  549. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_package_hooks_p2.py +0 -0
  550. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_secret_rotation_policy.py +0 -0
  551. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_secrets_rotation.py +0 -0
  552. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_secrets_store.py +0 -0
  553. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_security_api.py +0 -0
  554. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_security_components_p2.py +0 -0
  555. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_security_constants.py +0 -0
  556. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_security_exceptions.py +0 -0
  557. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/security/test_security_types.py +0 -0
  558. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/conftest.py +0 -0
  559. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_schema.py +0 -0
  560. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_constants.py +0 -0
  561. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_di_provider.py +0 -0
  562. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_domain.py +0 -0
  563. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_init.py +0 -0
  564. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_json.py +0 -0
  565. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_registry.py +0 -0
  566. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/serialization/test_serialization_types.py +0 -0
  567. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_boot_validation.py +0 -0
  568. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_config_and_misc.py +0 -0
  569. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_constants.py +0 -0
  570. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_health_baseline.py +0 -0
  571. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_health_config.py +0 -0
  572. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_runner_and_lifespan.py +0 -0
  573. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_types.py +0 -0
  574. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_app_validation_and_misc.py +0 -0
  575. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_application.py +0 -0
  576. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_application_base.py +0 -0
  577. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_application_lifecycle.py +0 -0
  578. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_base_and_misc_exceptions.py +0 -0
  579. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_clock_and_pipeline_primitives.py +0 -0
  580. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_codegen.py +0 -0
  581. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_compiler_graph_utils.py +0 -0
  582. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_component_exceptions.py +0 -0
  583. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_concurrency_constants.py +0 -0
  584. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_concurrency_exceptions.py +0 -0
  585. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config.py +0 -0
  586. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_constants.py +0 -0
  587. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_hardening.py +0 -0
  588. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_quadkit.py +0 -0
  589. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_requirements.py +0 -0
  590. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_sources.py +0 -0
  591. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_types.py +0 -0
  592. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_config_watcher.py +0 -0
  593. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_container_exceptions.py +0 -0
  594. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_container_introspection.py +0 -0
  595. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_container_override.py +0 -0
  596. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_container_resolver_impl.py +0 -0
  597. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_container_runtime_mixin.py +0 -0
  598. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_context_registry.py +0 -0
  599. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_contract_completeness.py +0 -0
  600. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_core_builder.py +0 -0
  601. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_core_constants.py +0 -0
  602. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_core_lazy.py +0 -0
  603. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_core_module.py +0 -0
  604. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_core_pipeline.py +0 -0
  605. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_dependency_injector.py +0 -0
  606. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_di_constants.py +0 -0
  607. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_di_descriptor.py +0 -0
  608. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_di_module_constants.py +0 -0
  609. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_domain_constants.py +0 -0
  610. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_domain_exceptions.py +0 -0
  611. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_dynamic_module.py +0 -0
  612. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_events_security_exceptions.py +0 -0
  613. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_execution_result.py +0 -0
  614. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_hatch_build_targets.py +0 -0
  615. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_health_probes.py +0 -0
  616. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_hook_registry.py +0 -0
  617. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_hook_registry_edge_cases.py +0 -0
  618. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_hook_registry_introspection.py +0 -0
  619. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_hook_registry_scenarios.py +0 -0
  620. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_identity_generators_and_ambient.py +0 -0
  621. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_infra_exceptions.py +0 -0
  622. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_input_sanitizers.py +0 -0
  623. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_interceptors.py +0 -0
  624. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_json_serialization_backend.py +0 -0
  625. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_apply_redaction.py +0 -0
  626. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_bridging.py +0 -0
  627. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_constants.py +0 -0
  628. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_debug.py +0 -0
  629. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_di_provider.py +0 -0
  630. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_factory.py +0 -0
  631. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_redaction.py +0 -0
  632. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_redaction_compound.py +0 -0
  633. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_logging_types.py +0 -0
  634. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_m13_m14_verification.py +0 -0
  635. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_mapper.py +0 -0
  636. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_mapper_enhanced.py +0 -0
  637. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_mapping.py +0 -0
  638. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_middleware_enhancements.py +0 -0
  639. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_middleware_exceptions.py +0 -0
  640. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_middleware_new.py +0 -0
  641. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_module_decorator.py +0 -0
  642. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_module_scan_and_provide.py +0 -0
  643. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_module_system.py +0 -0
  644. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_no_db_imports.py +0 -0
  645. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_observability.py +0 -0
  646. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_orchestrator_parallel.py +0 -0
  647. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_p2_scope_log_level.py +0 -0
  648. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_primitives_context.py +0 -0
  649. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_primitives_data.py +0 -0
  650. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_primitives_registry.py +0 -0
  651. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_provider_boot_enhanced.py +0 -0
  652. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_provider_decorator.py +0 -0
  653. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_quadkit_constants.py +0 -0
  654. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_quadkit_exceptions.py +0 -0
  655. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_repr_helpers.py +0 -0
  656. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_resilience_exceptions.py +0 -0
  657. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_combinators.py +0 -0
  658. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_core.py +0 -0
  659. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_pipeline.py +0 -0
  660. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_pipeline_and_utils.py +0 -0
  661. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_types_new.py +0 -0
  662. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_result_utils.py +0 -0
  663. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_round22_hardening.py +0 -0
  664. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_round41_hardening.py +0 -0
  665. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_saga_primitives.py +0 -0
  666. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_sampling_and_config.py +0 -0
  667. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_secret_stores_and_rotation.py +0 -0
  668. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_serialization_constants.py +0 -0
  669. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_serialization_exceptions.py +0 -0
  670. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_service_descriptor.py +0 -0
  671. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_structured_logging.py +0 -0
  672. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_time_ops.py +0 -0
  673. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_types.py +0 -0
  674. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_validation_coercion.py +0 -0
  675. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_validation_exceptions.py +0 -0
  676. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_validation_rules.py +0 -0
  677. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/test_validation_validator_engine.py +0 -0
  678. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/__init__.py +0 -0
  679. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/conftest.py +0 -0
  680. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_async_validator.py +0 -0
  681. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_helpers.py +0 -0
  682. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation.py +0 -0
  683. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_constants.py +0 -0
  684. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_constants_new.py +0 -0
  685. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_fields.py +0 -0
  686. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_fields_extended.py +0 -0
  687. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_init.py +0 -0
  688. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_introspection.py +0 -0
  689. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_module.py +0 -0
  690. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validation_types.py +0 -0
  691. {quadkit-0.0.45 → quadkit-0.0.50}/tests/unit/validation/test_validator.py +0 -0
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: quadkit
3
- Version: 0.0.45
3
+ Version: 0.0.50
4
4
  Summary: Async-first DI/IoC framework for Python — core package
5
- Project-URL: Homepage, https://dbtinoy-.github.io/quadkit/
5
+ Project-URL: Homepage, https://oridecon.dev
6
6
  Project-URL: Repository, https://github.com/dbtinoy-/quadkit
7
- Project-URL: Documentation, https://dbtinoy-.github.io/quadkit/
7
+ Project-URL: Documentation, https://oridecon.dev/quadkit/
8
8
  Project-URL: Issues, https://github.com/dbtinoy-/quadkit/issues
9
9
  Project-URL: Changelog, https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md
10
- Author-email: Quadkit Framework Team <team@quadkit.dev>
11
- Maintainer-email: Quadkit Framework Team <team@quadkit.dev>
10
+ Author-email: Quadkit Framework Team <hello@oridecon.dev>
11
+ Maintainer-email: Quadkit Framework Team <hello@oridecon.dev>
12
12
  License: Apache-2.0
13
13
  License-File: LICENSE
14
14
  License-File: NOTICE
@@ -28,7 +28,7 @@ Requires-Python: >=3.11
28
28
  Requires-Dist: orjson<4,>=3.0.0
29
29
  Requires-Dist: pydantic<3,>=2.10.0
30
30
  Requires-Dist: pyyaml<7,>=6.0.0
31
- Requires-Dist: quadkit-contracts>=0.0.2
31
+ Requires-Dist: quadkit-contracts>=0.0.50
32
32
  Requires-Dist: structlog<27,>=25.1.0
33
33
  Provides-Extra: codegen
34
34
  Requires-Dist: jinja2<4,>=3.1.0; extra == 'codegen'
@@ -39,6 +39,8 @@ Requires-Dist: ruff<1,>=0.16.4; extra == 'dev'
39
39
  Provides-Extra: docs
40
40
  Requires-Dist: mkdocs-material<10,>=9.0.0; extra == 'docs'
41
41
  Requires-Dist: mkdocs<2,>=1.4.0; extra == 'docs'
42
+ Provides-Extra: email
43
+ Requires-Dist: email-validator<3,>=2.0.0; extra == 'email'
42
44
  Provides-Extra: security
43
45
  Requires-Dist: cryptography<52,>=41.0.0; extra == 'security'
44
46
  Provides-Extra: test
@@ -47,7 +49,7 @@ Requires-Dist: pytest-cov<8,>=4.0.0; extra == 'test'
47
49
  Requires-Dist: pytest-mock<4,>=3.10.0; extra == 'test'
48
50
  Requires-Dist: pytest<10,>=8.0.0; extra == 'test'
49
51
  Provides-Extra: web
50
- Requires-Dist: quadkit-web[granian]>=0.0.2; extra == 'web'
52
+ Requires-Dist: quadkit-web[granian]>=0.0.50; extra == 'web'
51
53
  Description-Content-Type: text/markdown
52
54
 
53
55
  # quadkit
@@ -140,7 +142,7 @@ asyncio.run(main())
140
142
  ```
141
143
 
142
144
  For the web quickstart (a real endpoint in minutes), see
143
- [the docs](https://dbtinoy-.github.io/quadkit/getting-started/first-app/).
145
+ [the docs](https://oridecon.dev/quadkit/getting-started/first-app/).
144
146
 
145
147
  ## Expected failures are values
146
148
 
@@ -172,7 +174,7 @@ result = (
172
174
 
173
175
  In controllers, returning an `Err` renders as an RFC 7807 problem
174
176
  response automatically — see the
175
- [error-handling guide](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
177
+ [error-handling guide](https://oridecon.dev/quadkit/fundamentals/result-pattern/).
176
178
 
177
179
  ## Optional extras
178
180
 
@@ -203,11 +205,11 @@ Providers can also define an async `boot()` (acquire resources) and
203
205
  `shutdown()` (release them, in reverse registration order) — the
204
206
  container drives the whole lifecycle.
205
207
 
206
- Concepts: [contracts](https://dbtinoy-.github.io/quadkit/concepts/contracts/) ·
207
- [dependency injection](https://dbtinoy-.github.io/quadkit/concepts/dependency-injection/) ·
208
- [modules](https://dbtinoy-.github.io/quadkit/concepts/modules/) ·
209
- [lifecycle](https://dbtinoy-.github.io/quadkit/concepts/lifecycle/) ·
210
- [async model](https://dbtinoy-.github.io/quadkit/concepts/async-model/).
208
+ Concepts: [contracts](https://oridecon.dev/quadkit/fundamentals/container-protocols/) ·
209
+ [dependency injection](https://oridecon.dev/quadkit/fundamentals/dependency-injection/) ·
210
+ [modules](https://oridecon.dev/quadkit/fundamentals/modules/) ·
211
+ [lifecycle](https://oridecon.dev/quadkit/fundamentals/application-lifecycle/) ·
212
+ [async model](https://oridecon.dev/quadkit/fundamentals/architecture/).
211
213
 
212
214
  ## Configuration
213
215
 
@@ -223,7 +225,7 @@ QK_PROFILE=production # select a profile block
223
225
  ```
224
226
 
225
227
  See
226
- [configuration](https://dbtinoy-.github.io/quadkit/getting-started/configuration/).
228
+ [configuration](https://oridecon.dev/quadkit/getting-started/configuration/).
227
229
 
228
230
  ## Error handling
229
231
 
@@ -231,36 +233,36 @@ See
231
233
  `quadkit-contracts` exception hierarchy (`QuadkitError → DomainError →
232
234
  NotFoundError`, `ValidationError`, `ConflictError`, ...) for everything
233
235
  else. The web layer renders both as problem responses — see
234
- [error handling](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
236
+ [error handling](https://oridecon.dev/quadkit/fundamentals/result-pattern/).
235
237
 
236
238
  ## Testing
237
239
 
238
240
  Pair with `quadkit-testing`: `AppTestBed.from_factory(create_app)` boots
239
241
  your application in-process (with `overrides={Contract: fake}` for test
240
242
  doubles), no server required. See
241
- [testing](https://dbtinoy-.github.io/quadkit/getting-started/testing/).
243
+ [testing](https://oridecon.dev/quadkit/guides/testing/).
242
244
 
243
245
  ## Security
244
246
 
245
247
  Never put secrets in `application.yaml` — pass them through `QK_*`
246
248
  environment variables or a secret store. Unexpected exceptions never
247
249
  leak internals to clients. See
248
- [secure configuration](https://dbtinoy-.github.io/quadkit/security/secure-configuration/) and
250
+ [secure configuration](https://oridecon.dev/quadkit/getting-started/configuration/) and
249
251
  report vulnerabilities privately per
250
252
  [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
251
253
 
252
254
  ## Stability
253
255
 
254
- Version `0.0.45` in the `0.x` series, released in lockstep with the
255
- other four distributions; APIs may change between minor versions until
256
+ Version `0.0.50` in the `0.x` series, versioned independently of the
257
+ other distributions; APIs may change between minor versions until
256
258
  1.0 — pin an exact version
257
- (`quadkit==0.0.45`) or a tight range (`>=0.0.45,<0.1.0`). Full policy:
258
- [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
259
+ (`quadkit==0.0.50`) or a tight range (`>=0.0.50,<0.1.0`). Full policy:
260
+ [stability and compatibility](https://oridecon.dev/quadkit/ecosystem/compatibility/).
259
261
 
260
262
  ## Links
261
263
 
262
- - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
263
- - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
264
+ - **Documentation** — <https://oridecon.dev/quadkit/>
265
+ - **Getting started** — <https://oridecon.dev/quadkit/getting-started/installation/>
264
266
  - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
265
267
  - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
266
268
  - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
@@ -88,7 +88,7 @@ asyncio.run(main())
88
88
  ```
89
89
 
90
90
  For the web quickstart (a real endpoint in minutes), see
91
- [the docs](https://dbtinoy-.github.io/quadkit/getting-started/first-app/).
91
+ [the docs](https://oridecon.dev/quadkit/getting-started/first-app/).
92
92
 
93
93
  ## Expected failures are values
94
94
 
@@ -120,7 +120,7 @@ result = (
120
120
 
121
121
  In controllers, returning an `Err` renders as an RFC 7807 problem
122
122
  response automatically — see the
123
- [error-handling guide](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
123
+ [error-handling guide](https://oridecon.dev/quadkit/fundamentals/result-pattern/).
124
124
 
125
125
  ## Optional extras
126
126
 
@@ -151,11 +151,11 @@ Providers can also define an async `boot()` (acquire resources) and
151
151
  `shutdown()` (release them, in reverse registration order) — the
152
152
  container drives the whole lifecycle.
153
153
 
154
- Concepts: [contracts](https://dbtinoy-.github.io/quadkit/concepts/contracts/) ·
155
- [dependency injection](https://dbtinoy-.github.io/quadkit/concepts/dependency-injection/) ·
156
- [modules](https://dbtinoy-.github.io/quadkit/concepts/modules/) ·
157
- [lifecycle](https://dbtinoy-.github.io/quadkit/concepts/lifecycle/) ·
158
- [async model](https://dbtinoy-.github.io/quadkit/concepts/async-model/).
154
+ Concepts: [contracts](https://oridecon.dev/quadkit/fundamentals/container-protocols/) ·
155
+ [dependency injection](https://oridecon.dev/quadkit/fundamentals/dependency-injection/) ·
156
+ [modules](https://oridecon.dev/quadkit/fundamentals/modules/) ·
157
+ [lifecycle](https://oridecon.dev/quadkit/fundamentals/application-lifecycle/) ·
158
+ [async model](https://oridecon.dev/quadkit/fundamentals/architecture/).
159
159
 
160
160
  ## Configuration
161
161
 
@@ -171,7 +171,7 @@ QK_PROFILE=production # select a profile block
171
171
  ```
172
172
 
173
173
  See
174
- [configuration](https://dbtinoy-.github.io/quadkit/getting-started/configuration/).
174
+ [configuration](https://oridecon.dev/quadkit/getting-started/configuration/).
175
175
 
176
176
  ## Error handling
177
177
 
@@ -179,36 +179,36 @@ See
179
179
  `quadkit-contracts` exception hierarchy (`QuadkitError → DomainError →
180
180
  NotFoundError`, `ValidationError`, `ConflictError`, ...) for everything
181
181
  else. The web layer renders both as problem responses — see
182
- [error handling](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
182
+ [error handling](https://oridecon.dev/quadkit/fundamentals/result-pattern/).
183
183
 
184
184
  ## Testing
185
185
 
186
186
  Pair with `quadkit-testing`: `AppTestBed.from_factory(create_app)` boots
187
187
  your application in-process (with `overrides={Contract: fake}` for test
188
188
  doubles), no server required. See
189
- [testing](https://dbtinoy-.github.io/quadkit/getting-started/testing/).
189
+ [testing](https://oridecon.dev/quadkit/guides/testing/).
190
190
 
191
191
  ## Security
192
192
 
193
193
  Never put secrets in `application.yaml` — pass them through `QK_*`
194
194
  environment variables or a secret store. Unexpected exceptions never
195
195
  leak internals to clients. See
196
- [secure configuration](https://dbtinoy-.github.io/quadkit/security/secure-configuration/) and
196
+ [secure configuration](https://oridecon.dev/quadkit/getting-started/configuration/) and
197
197
  report vulnerabilities privately per
198
198
  [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
199
199
 
200
200
  ## Stability
201
201
 
202
- Version `0.0.45` in the `0.x` series, released in lockstep with the
203
- other four distributions; APIs may change between minor versions until
202
+ Version `0.0.50` in the `0.x` series, versioned independently of the
203
+ other distributions; APIs may change between minor versions until
204
204
  1.0 — pin an exact version
205
- (`quadkit==0.0.45`) or a tight range (`>=0.0.45,<0.1.0`). Full policy:
206
- [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
205
+ (`quadkit==0.0.50`) or a tight range (`>=0.0.50,<0.1.0`). Full policy:
206
+ [stability and compatibility](https://oridecon.dev/quadkit/ecosystem/compatibility/).
207
207
 
208
208
  ## Links
209
209
 
210
- - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
211
- - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
210
+ - **Documentation** — <https://oridecon.dev/quadkit/>
211
+ - **Getting started** — <https://oridecon.dev/quadkit/getting-started/installation/>
212
212
  - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
213
213
  - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
214
214
  - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
@@ -29,7 +29,7 @@ build-backend = "hatchling.build"
29
29
 
30
30
  [project]
31
31
  name = "quadkit"
32
- version = "0.0.45"
32
+ version = "0.0.50"
33
33
  description = "Async-first DI/IoC framework for Python — core package"
34
34
  readme = "README.md"
35
35
  requires-python = ">=3.11"
@@ -55,10 +55,10 @@ classifiers = [
55
55
  "Typing :: Typed",
56
56
  ]
57
57
  authors = [
58
- { name = "Quadkit Framework Team", email = "team@quadkit.dev" },
58
+ { name = "Quadkit Framework Team", email = "hello@oridecon.dev" },
59
59
  ]
60
60
  maintainers = [
61
- { name = "Quadkit Framework Team", email = "team@quadkit.dev" },
61
+ { name = "Quadkit Framework Team", email = "hello@oridecon.dev" },
62
62
  ]
63
63
 
64
64
  # =============================================================================
@@ -69,7 +69,7 @@ maintainers = [
69
69
  # lifecycle, or exception hierarchy literally cannot function without it.
70
70
 
71
71
  dependencies = [
72
- "quadkit-contracts>=0.0.2",
72
+ "quadkit-contracts>=0.0.50",
73
73
  "orjson>=3.0.0,<4",
74
74
  "structlog>=25.1.0,<27", # Structured logging foundation
75
75
  "pydantic>=2.10.0,<3", # Required: used unconditionally by config, validation
@@ -117,6 +117,11 @@ security = [
117
117
  "cryptography>=41.0.0,<52",
118
118
  ]
119
119
 
120
+ # Validation extras — opt-in RFC 5322 email validation for quadkit.validation.EmailStr
121
+ email = [
122
+ "email-validator>=2.0.0,<3",
123
+ ]
124
+
120
125
  # ── Extension Convenience Groups ──────────────────────────────────────
121
126
  # Users can install entire subsystems via:
122
127
  # pip install quadkit[web] → all web packages
@@ -124,7 +129,7 @@ security = [
124
129
  # ── Web & API ─────────────────────────────────────────────────────────
125
130
 
126
131
  web = [
127
- "quadkit-web[granian]>=0.0.2",
132
+ "quadkit-web[granian]>=0.0.50",
128
133
  ]
129
134
  # NOTE: Convenience extras for the extension packages (db, cache, auth,
130
135
  # events, tasks, monitor, graphql) were removed. Those packages are not
@@ -138,9 +143,9 @@ web = [
138
143
  # =============================================================================
139
144
 
140
145
  [project.urls]
141
- Homepage = "https://dbtinoy-.github.io/quadkit/"
146
+ Homepage = "https://oridecon.dev"
142
147
  Repository = "https://github.com/dbtinoy-/quadkit"
143
- Documentation = "https://dbtinoy-.github.io/quadkit/"
148
+ Documentation = "https://oridecon.dev/quadkit/"
144
149
  Issues = "https://github.com/dbtinoy-/quadkit/issues"
145
150
  Changelog = "https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md"
146
151
 
@@ -14,6 +14,7 @@ from typing import Any, Final
14
14
  # Critical: enable namespace-package discovery for quadkit-* distributions.
15
15
  __path__ = pkgutil.extend_path(__path__, __name__)
16
16
 
17
+
17
18
  from quadkit.constants import __version__
18
19
 
19
20
  _ExportSpec = tuple[str, str | None]
@@ -126,6 +127,7 @@ _EXPORTS: Final[dict[str, _ExportSpec]] = {
126
127
  "module": ("quadkit.di.module", "module"),
127
128
  "partition": ("quadkit.result", "partition"),
128
129
  "provide": ("quadkit.di.function_provider", "provide"),
130
+ "refresh_namespace": ("quadkit.primitives.namespace", "refresh_namespace"),
129
131
  "request_context": ("quadkit.primitives.context", "request_scope"),
130
132
  "run_application": ("quadkit.app.runner", "run_application"),
131
133
  "save_disabled": ("quadkit.plugins.state", "save_disabled"),
@@ -260,6 +262,7 @@ __all__ = [
260
262
  "ops",
261
263
  "partition",
262
264
  "provide",
265
+ "refresh_namespace",
263
266
  "request_context",
264
267
  "retry",
265
268
  "run_application",
@@ -26,7 +26,7 @@ from quadkit.logging import get_logger
26
26
  from quadkit.logging.configurator import apply_config as _apply_logging_config
27
27
 
28
28
  if TYPE_CHECKING:
29
- from collections.abc import AsyncIterator
29
+ from collections.abc import AsyncIterator, Iterable
30
30
 
31
31
  from quadkit.di.module.dynamic import DynamicModule
32
32
  from quadkit.di.module.graph import CompiledModuleGraph
@@ -237,8 +237,11 @@ class Application(SecretsMixin, HealthProbeMixin):
237
237
  )
238
238
  self._modules.append(module)
239
239
 
240
- def add_modules(self, modules: list[type | Any]) -> None:
241
- """Add multiple modules. Must be called before ``start()``."""
240
+ def add_modules(self, modules: Iterable[type | Any]) -> None:
241
+ """Register modules in iterable order without mutating the collection.
242
+
243
+ Each item retains the same pre-start guard as ``add_module``.
244
+ """
242
245
  for mod in modules:
243
246
  self.add_module(mod)
244
247
 
@@ -380,8 +383,8 @@ class Application(SecretsMixin, HealthProbeMixin):
380
383
  sys.stderr.write("================================\n")
381
384
  sys.stderr.flush()
382
385
  try:
383
- await self._orchestrator.shutdown()
384
- except RuntimeError as cleanup_err:
386
+ await self._lifecycle.shutdown()
387
+ except Exception as cleanup_err: # noqa: BLE001 — preserve the original startup failure
385
388
  self._logger.exception(
386
389
  "application.cleanup_failed",
387
390
  error=str(cleanup_err),
@@ -14,7 +14,7 @@ from pathlib import Path
14
14
  import pkgutil
15
15
  from typing import TYPE_CHECKING, Any
16
16
 
17
- from quadkit.logging import get_logger
17
+ from quadkit.logging import get_logger, safe_error_type
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from quadkit.di.provider import Provider
@@ -51,11 +51,11 @@ def discover_providers(packages: tuple[str, ...] | list[str]) -> list[Provider]:
51
51
  instance = cls()
52
52
  found.append(instance)
53
53
  logger.debug("discovery.provider.found", provider=cls.__name__)
54
- except Exception: # noqa: BLE001 — a provider that cannot be instantiated without args is skipped, never a discovery failure
54
+ except Exception as exc: # noqa: BLE001 — a provider that cannot be instantiated without args is skipped, never a discovery failure
55
55
  logger.debug(
56
56
  "discovery.provider.skipped",
57
57
  provider=cls.__name__,
58
- reason="instantiation_failed",
58
+ error_type=safe_error_type(exc),
59
59
  )
60
60
 
61
61
  return found
@@ -166,8 +166,12 @@ def _scan_subclasses(package: str, base: type) -> list[type]:
166
166
  try:
167
167
  module = importlib.import_module(modname)
168
168
  results.extend(_collect_subclasses(module, base))
169
- except (ImportError, ModuleNotFoundError, AttributeError) as e:
170
- logger.debug("discovery.module.import_failed", module=modname, error=str(e))
169
+ except (ImportError, ModuleNotFoundError, AttributeError) as exc:
170
+ logger.debug(
171
+ "discovery.module.import_failed",
172
+ module=modname,
173
+ error_type=safe_error_type(exc),
174
+ )
171
175
 
172
176
  # Also scan the root module itself
173
177
  results.extend(_collect_subclasses(root, base))
@@ -180,12 +184,12 @@ def _collect_subclasses(module: Any, base: type) -> list[type]:
180
184
  for attr_name in dir(module):
181
185
  try:
182
186
  obj = getattr(module, attr_name)
183
- except (AttributeError, TypeError) as e:
187
+ except (AttributeError, TypeError) as exc:
184
188
  logger.debug(
185
189
  "discovery.getattr_failed",
186
190
  module=module.__name__,
187
191
  attr=attr_name,
188
- error=str(e),
192
+ error_type=safe_error_type(exc),
189
193
  )
190
194
  continue
191
195
  if (
@@ -227,11 +231,12 @@ def discover_modules_from_entry_points(
227
231
  for ep in importlib.metadata.entry_points(group=group):
228
232
  try:
229
233
  obj = ep.load()
230
- except Exception: # noqa: BLE001
234
+ except Exception as exc: # noqa: BLE001
231
235
  logger.warning(
232
236
  "module_discovery_entry_point_load_failed",
233
237
  group=group,
234
238
  name=ep.name,
239
+ error_type=safe_error_type(exc),
235
240
  )
236
241
  continue
237
242
  if isinstance(obj, type) and issubclass(obj, Module) and obj is not Module:
@@ -241,7 +246,7 @@ def discover_modules_from_entry_points(
241
246
  "module_discovery_entry_point_not_a_module",
242
247
  group=group,
243
248
  name=ep.name,
244
- loaded=repr(obj),
249
+ loaded_type=type(obj).__name__,
245
250
  )
246
251
  return discovered
247
252
 
@@ -268,7 +273,7 @@ def discover_modules_from_directories(
268
273
  for directory in directories:
269
274
  path = Path(directory)
270
275
  if not path.exists() or not path.is_dir():
271
- logger.debug("module_discovery_dir_skipped", path=str(path))
276
+ logger.debug("module_discovery_dir_skipped")
272
277
  continue
273
278
 
274
279
  for candidate in ("plugin.py", "__init__.py"):
@@ -283,10 +288,11 @@ def discover_modules_from_directories(
283
288
  continue
284
289
  mod = importlib.util.module_from_spec(spec)
285
290
  spec.loader.exec_module(mod)
286
- except Exception: # noqa: BLE001
291
+ except Exception as exc: # noqa: BLE001
287
292
  logger.warning(
288
293
  "module_discovery_dir_load_failed",
289
- file=str(file_path),
294
+ candidate=candidate,
295
+ error_type=safe_error_type(exc),
290
296
  )
291
297
  continue
292
298
 
@@ -76,8 +76,10 @@ class ApplicationLifecycle:
76
76
  self._logger.info("application.stopping", name=self._app_name)
77
77
 
78
78
  try:
79
- await self._orchestrator.shutdown()
80
- await self._container.dispose()
79
+ try:
80
+ await self._orchestrator.shutdown()
81
+ finally:
82
+ await self._container.dispose()
81
83
  finally:
82
84
  if self._start_time is not None:
83
85
  self._uptime_seconds = time.monotonic() - self._start_time
@@ -255,10 +255,14 @@ class CoreModule(Module):
255
255
  if name not in consumed and name not in provider_names:
256
256
  providers.append(provider)
257
257
 
258
+ exports = list(_CORE_EXPORTS)
259
+ if config_class is not None and config_class not in exports:
260
+ exports.append(config_class)
261
+
258
262
  return DynamicModule(
259
263
  module=cls,
260
264
  providers=providers, # type: ignore[arg-type]
261
- exports=list(_CORE_EXPORTS),
265
+ exports=exports,
262
266
  is_global=True,
263
267
  )
264
268
 
@@ -219,10 +219,14 @@ class StandardModule(Module):
219
219
  if name not in consumed and name not in provider_names:
220
220
  providers.append(provider)
221
221
 
222
+ exports = list(_STANDARD_EXPORTS)
223
+ if config_class is not None and config_class not in exports:
224
+ exports.append(config_class)
225
+
222
226
  return DynamicModule(
223
227
  module=cls,
224
228
  providers=providers,
225
- exports=list(_STANDARD_EXPORTS),
229
+ exports=exports,
226
230
  is_global=True,
227
231
  )
228
232
 
@@ -0,0 +1,30 @@
1
+ from quadkit.codegen.base import GeneratorBase
2
+ from quadkit.codegen.field_types import annotation_for, import_lines
3
+ from quadkit.contracts.cli.generators import (
4
+ GenerationResult,
5
+ derived_index_name,
6
+ pluralize_identifier,
7
+ )
8
+ from quadkit.contracts.cli.parsers import (
9
+ EntitySpec,
10
+ FieldSpec,
11
+ IndexSpec,
12
+ format_fields,
13
+ parse_fields,
14
+ resolve_field_specs,
15
+ )
16
+
17
+ __all__ = [
18
+ "EntitySpec",
19
+ "FieldSpec",
20
+ "GenerationResult",
21
+ "GeneratorBase",
22
+ "IndexSpec",
23
+ "annotation_for",
24
+ "derived_index_name",
25
+ "format_fields",
26
+ "import_lines",
27
+ "parse_fields",
28
+ "pluralize_identifier",
29
+ "resolve_field_specs",
30
+ ]
@@ -21,6 +21,9 @@ from quadkit.contracts.cli.generators import (
21
21
  from quadkit.contracts.cli.generators import (
22
22
  pascal_case as pascal_case,
23
23
  )
24
+ from quadkit.contracts.cli.generators import (
25
+ pluralize_identifier as pluralize_identifier,
26
+ )
24
27
  from quadkit.contracts.cli.generators import (
25
28
  resolve_options as resolve_options,
26
29
  )
@@ -44,6 +47,11 @@ class GeneratorBase:
44
47
  and guarded file writes work without it.
45
48
  """
46
49
 
50
+ #: Whether ``generate`` accepts and honors a structured
51
+ #: :class:`quadkit.contracts.cli.EntitySpec`. This is explicit opt-in:
52
+ #: bridges must never infer support merely from ``**options``.
53
+ supports_entity_spec: bool = False
54
+
47
55
  def __init__(
48
56
  self,
49
57
  output_dir: str | Path = "src",
@@ -312,6 +320,10 @@ class GeneratorBase:
312
320
  def _to_snake_case(name: str) -> str:
313
321
  return snake_case(name)
314
322
 
323
+ @staticmethod
324
+ def _pluralize(name: str) -> str:
325
+ return pluralize_identifier(name)
326
+
315
327
  @classmethod
316
328
  def _validate_component_name(cls, name: str) -> str:
317
329
  return validate_component_name(name)
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import asyncio
6
6
  from typing import TYPE_CHECKING, Any
7
7
 
8
- from quadkit.logging import get_logger
8
+ from quadkit.logging import get_logger, safe_error_type
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from collections.abc import Callable, Coroutine
@@ -96,10 +96,9 @@ class TaskManager:
96
96
  ):
97
97
  raise
98
98
  if isinstance(exc, Exception):
99
- self._logger.exception(
99
+ self._logger.error(
100
100
  "task_manager.periodic_task_error",
101
- task=name or "unnamed",
102
- error=str(exc),
101
+ error_type=safe_error_type(exc),
103
102
  )
104
103
  continue
105
104
  raise
@@ -146,11 +145,6 @@ class TaskManager:
146
145
  timed_out=len(pending),
147
146
  timeout=critical_timeout,
148
147
  )
149
- for task in pending:
150
- self._logger.warning(
151
- "task_manager.critical_incomplete",
152
- task=task.get_name(),
153
- )
154
148
 
155
149
  # Phase 2: Cancel background tasks
156
150
  if self._background:
@@ -211,7 +205,6 @@ class TaskManager:
211
205
  task.add_done_callback(target_set.discard)
212
206
  self._logger.debug(
213
207
  "task.created",
214
- name=task_name,
215
208
  priority="critical" if critical else "background",
216
209
  )
217
210
  return task
@@ -11,7 +11,7 @@ import asyncio
11
11
  from collections.abc import Coroutine
12
12
  from typing import Any, TypeVar
13
13
 
14
- from quadkit.logging import get_logger
14
+ from quadkit.logging import get_logger, safe_error_type
15
15
 
16
16
  logger = get_logger(__name__)
17
17
 
@@ -30,8 +30,7 @@ def _handle_task_exception(task: asyncio.Task[Any]) -> None:
30
30
  if exc is not None:
31
31
  logger.error(
32
32
  "background_task_failed",
33
- task_name=task.get_name(),
34
- exc_info=exc,
33
+ error_type=safe_error_type(exc),
35
34
  )
36
35
 
37
36