quadkit 0.0.41__tar.gz → 0.0.42__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 (682) hide show
  1. quadkit-0.0.42/.gitignore +214 -0
  2. quadkit-0.0.42/CHANGELOG.md +73 -0
  3. {quadkit-0.0.41 → quadkit-0.0.42}/PKG-INFO +4 -3
  4. {quadkit-0.0.41 → quadkit-0.0.42}/README.md +2 -2
  5. quadkit-0.0.42/docs/ARCHITECTURE.md +252 -0
  6. quadkit-0.0.42/docs/CONFIGURATION.md +126 -0
  7. quadkit-0.0.42/docs/GUIDE.md +451 -0
  8. quadkit-0.0.42/docs/HOWTOS.md +275 -0
  9. quadkit-0.0.42/docs/QUICKSTART.md +91 -0
  10. quadkit-0.0.42/docs/SECURITY.md +165 -0
  11. quadkit-0.0.42/docs/TROUBLESHOOTING.md +217 -0
  12. quadkit-0.0.42/docs/gifs/hero/app.py +455 -0
  13. quadkit-0.0.42/docs/gifs/hero/hero.tape +71 -0
  14. quadkit-0.0.42/docs/gifs/hero/quadkit-hero.gif +0 -0
  15. quadkit-0.0.42/docs/plugins.md +54 -0
  16. {quadkit-0.0.41 → quadkit-0.0.42}/example.yaml +2 -2
  17. {quadkit-0.0.41 → quadkit-0.0.42}/pyproject.toml +6 -2
  18. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/config/models.py +6 -0
  19. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/module.py +1 -1
  20. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/codegen/__init__.py +3 -0
  21. quadkit-0.0.42/src/quadkit/codegen/field_types.py +131 -0
  22. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/discovery.py +1 -1
  23. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/unit_of_work.py +1 -1
  24. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/configurator.py +1 -1
  25. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/resilience.py +1 -1
  26. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/observability/core.py +1 -1
  27. quadkit-0.0.42/src/quadkit/observability/di/sub_providers/observability.py +68 -0
  28. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/pipeline.py +1 -1
  29. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/registry/introspection.py +1 -1
  30. quadkit-0.0.42/tests/integration/test_corrected_patterns_integration.py +254 -0
  31. quadkit-0.0.42/tests/integration/test_database_integration.py +256 -0
  32. quadkit-0.0.42/tests/integration/test_monitor_config_integration.py +22 -0
  33. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_observability.py +45 -0
  34. quadkit-0.0.41/.gitignore +0 -24
  35. quadkit-0.0.41/src/quadkit/observability/di/sub_providers/observability.py +0 -52
  36. {quadkit-0.0.41 → quadkit-0.0.42}/LICENSE +0 -0
  37. {quadkit-0.0.41 → quadkit-0.0.42}/NOTICE +0 -0
  38. {quadkit-0.0.41 → quadkit-0.0.42}/src/import_error.txt +0 -0
  39. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/__init__.py +0 -0
  40. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/__init__.py +0 -0
  41. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/asgi_lifespan.py +0 -0
  42. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/base.py +0 -0
  43. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/config/__init__.py +0 -0
  44. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/config/discovery.py +0 -0
  45. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/config_validation.py +0 -0
  46. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/constants.py +0 -0
  47. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/di/__init__.py +0 -0
  48. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/di/provider.py +0 -0
  49. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/discovery.py +0 -0
  50. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/events.py +0 -0
  51. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/exceptions.py +0 -0
  52. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/factory.py +0 -0
  53. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/health_probes.py +0 -0
  54. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/injectable_provider.py +0 -0
  55. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/invoker.py +0 -0
  56. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/lifecycle.py +0 -0
  57. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/pipeline.py +0 -0
  58. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/protocols.py +0 -0
  59. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/py.typed +0 -0
  60. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/runner.py +0 -0
  61. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/secrets.py +0 -0
  62. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/standard.py +0 -0
  63. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/app/types.py +0 -0
  64. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/codegen/base.py +0 -0
  65. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/__init__.py +0 -0
  66. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/bridges/__init__.py +0 -0
  67. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/bridges/py.typed +0 -0
  68. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/bridges/sync_bridge.py +0 -0
  69. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/channels/__init__.py +0 -0
  70. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/channels/channel.py +0 -0
  71. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/channels/py.typed +0 -0
  72. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/config.py +0 -0
  73. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/constants.py +0 -0
  74. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/di/__init__.py +0 -0
  75. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/di/provider.py +0 -0
  76. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/di/py.typed +0 -0
  77. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/exceptions.py +0 -0
  78. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/executors/__init__.py +0 -0
  79. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/executors/dispatcher.py +0 -0
  80. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/executors/parallel.py +0 -0
  81. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/executors/py.typed +0 -0
  82. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/executors/task_manager.py +0 -0
  83. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/locks/__init__.py +0 -0
  84. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/locks/py.typed +0 -0
  85. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/locks/rwlock.py +0 -0
  86. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/module.py +0 -0
  87. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/py.typed +0 -0
  88. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/concurrency/task_utils.py +0 -0
  89. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/__init__.py +0 -0
  90. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/base.py +0 -0
  91. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/constants.py +0 -0
  92. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/di/__init__.py +0 -0
  93. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/di/provider.py +0 -0
  94. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/exceptions.py +0 -0
  95. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/__init__.py +0 -0
  96. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/merge.py +0 -0
  97. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/registry.py +0 -0
  98. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/sources.py +0 -0
  99. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/validation.py +0 -0
  100. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/lib/watcher.py +0 -0
  101. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/main.py +0 -0
  102. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/protocols.py +0 -0
  103. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/secrets.py +0 -0
  104. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/config/types.py +0 -0
  105. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/constants.py +0 -0
  106. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/__init__.py +0 -0
  107. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/_graph.py +0 -0
  108. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/builder.py +0 -0
  109. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/config/__init__.py +0 -0
  110. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/config/models.py +0 -0
  111. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/constants.py +0 -0
  112. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/__init__.py +0 -0
  113. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/container.py +0 -0
  114. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/container_introspection.py +0 -0
  115. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/container_resolution.py +0 -0
  116. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/container_runtime.py +0 -0
  117. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/registrar.py +0 -0
  118. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/resolver.py +0 -0
  119. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/scope.py +0 -0
  120. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/container/validation.py +0 -0
  121. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/context.py +0 -0
  122. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/decorators.py +0 -0
  123. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/exceptions.py +0 -0
  124. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/__init__.py +0 -0
  125. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/aop_interceptors.py +0 -0
  126. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/interceptors.py +0 -0
  127. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/strategies.py +0 -0
  128. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/extensions/validator.py +0 -0
  129. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/function_provider.py +0 -0
  130. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/integration/__init__.py +0 -0
  131. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/integration/provider.py +0 -0
  132. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/markers.py +0 -0
  133. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/__init__.py +0 -0
  134. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/base.py +0 -0
  135. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/__init__.py +0 -0
  136. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/_graph_utils.py +0 -0
  137. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/compiler.py +0 -0
  138. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/context.py +0 -0
  139. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/__init__.py +0 -0
  140. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/collect.py +0 -0
  141. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/detect_cycles.py +0 -0
  142. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/expand.py +0 -0
  143. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/order.py +0 -0
  144. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/protocol.py +0 -0
  145. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/validate.py +0 -0
  146. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/compiler/phases/visibility.py +0 -0
  147. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/constants.py +0 -0
  148. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/decorator.py +0 -0
  149. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/dynamic.py +0 -0
  150. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/errors.py +0 -0
  151. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/graph.py +0 -0
  152. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/introspection.py +0 -0
  153. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/metadata.py +0 -0
  154. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/module/registry.py +0 -0
  155. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/__init__.py +0 -0
  156. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/events.py +0 -0
  157. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/health.py +0 -0
  158. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/lifecycle.py +0 -0
  159. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/orchestrator.py +0 -0
  160. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/orchestrator/registry.py +0 -0
  161. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/protocols.py +0 -0
  162. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/provider.py +0 -0
  163. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/provider_utils.py +0 -0
  164. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/py.typed +0 -0
  165. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/__init__.py +0 -0
  166. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/context.py +0 -0
  167. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/descriptor.py +0 -0
  168. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/diagnostics.py +0 -0
  169. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/injector.py +0 -0
  170. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/invoker.py +0 -0
  171. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/registry.py +0 -0
  172. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/resolver.py +0 -0
  173. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/store.py +0 -0
  174. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/type_hints.py +0 -0
  175. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/resolution/validator.py +0 -0
  176. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/di/types.py +0 -0
  177. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/__init__.py +0 -0
  178. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/constants.py +0 -0
  179. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/exceptions.py +0 -0
  180. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/__init__.py +0 -0
  181. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/aggregate.py +0 -0
  182. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/base.py +0 -0
  183. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/coercion.py +0 -0
  184. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/entity.py +0 -0
  185. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/factory.py +0 -0
  186. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/py.typed +0 -0
  187. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/models/value_object.py +0 -0
  188. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/module.py +0 -0
  189. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/py.typed +0 -0
  190. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/domain/types.py +0 -0
  191. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/exceptions.py +0 -0
  192. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/hooks/__init__.py +0 -0
  193. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/hooks/ambient.py +0 -0
  194. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/hooks/registry.py +0 -0
  195. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/hooks/types.py +0 -0
  196. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/__init__.py +0 -0
  197. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/ambient.py +0 -0
  198. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/config.py +0 -0
  199. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/constants.py +0 -0
  200. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/di/__init__.py +0 -0
  201. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/di/provider.py +0 -0
  202. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/identity/generator.py +0 -0
  203. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/README.md +0 -0
  204. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/__init__.py +0 -0
  205. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/config/__init__.py +0 -0
  206. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/config/models.py +0 -0
  207. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/config/redaction.py +0 -0
  208. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/config/sampling.py +0 -0
  209. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/constants.py +0 -0
  210. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/debug.py +0 -0
  211. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/di/__init__.py +0 -0
  212. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/di/provider.py +0 -0
  213. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/factory.py +0 -0
  214. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/processors.py +0 -0
  215. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/redaction.py +0 -0
  216. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/logging/types.py +0 -0
  217. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/__init__.py +0 -0
  218. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/config.py +0 -0
  219. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/constants.py +0 -0
  220. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/core/__init__.py +0 -0
  221. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/core/mapper.py +0 -0
  222. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/di/__init__.py +0 -0
  223. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/di/provider.py +0 -0
  224. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/exceptions.py +0 -0
  225. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/module.py +0 -0
  226. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/protocols.py +0 -0
  227. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/py.typed +0 -0
  228. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/mapping/types.py +0 -0
  229. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/__init__.py +0 -0
  230. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/__init__.py +0 -0
  231. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/caching.py +0 -0
  232. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/di.py +0 -0
  233. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/observability.py +0 -0
  234. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/routing.py +0 -0
  235. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/builtins/validation.py +0 -0
  236. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/config.py +0 -0
  237. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/constants.py +0 -0
  238. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/core/__init__.py +0 -0
  239. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/core/chain.py +0 -0
  240. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/core/exception_filters.py +0 -0
  241. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/core/registry.py +0 -0
  242. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/di/__init__.py +0 -0
  243. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/di/provider.py +0 -0
  244. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/exceptions.py +0 -0
  245. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/module.py +0 -0
  246. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/middleware/types.py +0 -0
  247. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/module.py +0 -0
  248. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/observability/__init__.py +0 -0
  249. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/observability/di/__init__.py +0 -0
  250. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/observability/di/sub_providers/__init__.py +0 -0
  251. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/__init__.py +0 -0
  252. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/discovery.py +0 -0
  253. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/engine.py +0 -0
  254. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/exceptions.py +0 -0
  255. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/module.py +0 -0
  256. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/plugins/state.py +0 -0
  257. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/__init__.py +0 -0
  258. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/builder.py +0 -0
  259. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/clock.py +0 -0
  260. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/constants.py +0 -0
  261. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/context.py +0 -0
  262. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/context_keys.py +0 -0
  263. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/context_registry.py +0 -0
  264. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/data.py +0 -0
  265. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/di/__init__.py +0 -0
  266. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/di/provider.py +0 -0
  267. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/exceptions.py +0 -0
  268. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/lazy.py +0 -0
  269. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/protocols.py +0 -0
  270. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/registry/__init__.py +0 -0
  271. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/registry/core.py +0 -0
  272. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/trusted_html.py +0 -0
  273. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/types.py +0 -0
  274. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/primitives/typing.py +0 -0
  275. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/py.typed +0 -0
  276. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/__init__.py +0 -0
  277. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/core.py +0 -0
  278. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/exceptions.py +0 -0
  279. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/operators/__init__.py +0 -0
  280. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/operators/control.py +0 -0
  281. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/operators/time_ops.py +0 -0
  282. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/operators/transform.py +0 -0
  283. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/retry.py +0 -0
  284. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/reactive/subjects.py +0 -0
  285. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/result/__init__.py +0 -0
  286. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/result/_pipeline.py +0 -0
  287. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/result/errors.py +0 -0
  288. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/result/types.py +0 -0
  289. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/result/utils.py +0 -0
  290. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/saga/__init__.py +0 -0
  291. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/saga/base.py +0 -0
  292. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/saga/canonical_json.py +0 -0
  293. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/saga/content_addressed.py +0 -0
  294. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/__init__.py +0 -0
  295. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/config.py +0 -0
  296. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/constants.py +0 -0
  297. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/decorators.py +0 -0
  298. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/encryption/__init__.py +0 -0
  299. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/encryption/service.py +0 -0
  300. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/events.py +0 -0
  301. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/exceptions.py +0 -0
  302. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/guards/__init__.py +0 -0
  303. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/guards/chain.py +0 -0
  304. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/guards/decorator.py +0 -0
  305. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/hashing/__init__.py +0 -0
  306. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/hashing/ambient.py +0 -0
  307. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/hashing/digest.py +0 -0
  308. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/hashing/kdf.py +0 -0
  309. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/hooks.py +0 -0
  310. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/provider.py +0 -0
  311. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/py.typed +0 -0
  312. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/sanitization/__init__.py +0 -0
  313. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/sanitization/filename.py +0 -0
  314. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/sanitization/html.py +0 -0
  315. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/sanitization/sanitizer.py +0 -0
  316. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/sanitization/url.py +0 -0
  317. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/secrets/__init__.py +0 -0
  318. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/secrets/rotation.py +0 -0
  319. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/secrets/store.py +0 -0
  320. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/secrets/types.py +0 -0
  321. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/security/types.py +0 -0
  322. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/__init__.py +0 -0
  323. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/backends/__init__.py +0 -0
  324. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/backends/json.py +0 -0
  325. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/backends/py.typed +0 -0
  326. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/config.py +0 -0
  327. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/constants.py +0 -0
  328. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/di/__init__.py +0 -0
  329. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/di/provider.py +0 -0
  330. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/di/py.typed +0 -0
  331. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/domain/__init__.py +0 -0
  332. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/domain/domain.py +0 -0
  333. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/domain/py.typed +0 -0
  334. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/exceptions.py +0 -0
  335. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/module.py +0 -0
  336. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/py.typed +0 -0
  337. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/registry/__init__.py +0 -0
  338. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/registry/py.typed +0 -0
  339. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/registry/registry.py +0 -0
  340. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/schema/__init__.py +0 -0
  341. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/schema/py.typed +0 -0
  342. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/schema/schema.py +0 -0
  343. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/serialization/types.py +0 -0
  344. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/types.py +0 -0
  345. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/__init__.py +0 -0
  346. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/config.py +0 -0
  347. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/constants.py +0 -0
  348. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/decorators.py +0 -0
  349. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/engine/__init__.py +0 -0
  350. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/engine/coercion.py +0 -0
  351. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/engine/py.typed +0 -0
  352. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/engine/validator.py +0 -0
  353. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/exceptions.py +0 -0
  354. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/module.py +0 -0
  355. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/py.typed +0 -0
  356. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/rules/__init__.py +0 -0
  357. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/rules/py.typed +0 -0
  358. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/rules/rules.py +0 -0
  359. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/schema/__init__.py +0 -0
  360. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/schema/fields.py +0 -0
  361. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/schema/introspection.py +0 -0
  362. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/schema/py.typed +0 -0
  363. {quadkit-0.0.41 → quadkit-0.0.42}/src/quadkit/validation/types.py +0 -0
  364. {quadkit-0.0.41 → quadkit-0.0.42}/tests/conftest.py +0 -0
  365. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/__init__.py +0 -0
  366. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/__init__.py +0 -0
  367. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/_fixtures.py +0 -0
  368. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/conftest.py +0 -0
  369. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_boot_level.py +0 -0
  370. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_cross_method.py +0 -0
  371. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_dependency_chain.py +0 -0
  372. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_exports.py +0 -0
  373. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_importers.py +0 -0
  374. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_module_health_integration.py +0 -0
  375. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_module_lifecycle_integration.py +0 -0
  376. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_name_lookup.py +0 -0
  377. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/module/test_stub_enforcement_integration.py +0 -0
  378. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/di/test_visibility_enforcement_e2e.py +0 -0
  379. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/mapping/test_mapping_lifecycle.py +0 -0
  380. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/middleware/test_middleware_lifecycle.py +0 -0
  381. {quadkit-0.0.41 → quadkit-0.0.42}/tests/integration/test_full_pipeline.py +0 -0
  382. {quadkit-0.0.41 → quadkit-0.0.42}/tests/test.md +0 -0
  383. {quadkit-0.0.41 → quadkit-0.0.42}/tests/test_import_diagnostic.py +0 -0
  384. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/__init__.py +0 -0
  385. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/aop/test_interceptor_timeout.py +0 -0
  386. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/clock/test_clock.py +0 -0
  387. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/codegen/__init__.py +0 -0
  388. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/codegen/test_generator_base.py +0 -0
  389. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/codegen/test_staged_generation.py +0 -0
  390. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/codegen/test_template_overrides.py +0 -0
  391. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/conftest.py +0 -0
  392. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_bounded_channel.py +0 -0
  393. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_channel.py +0 -0
  394. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_config.py +0 -0
  395. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_constants.py +0 -0
  396. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_constants_new.py +0 -0
  397. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_exceptions.py +0 -0
  398. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_parallel.py +0 -0
  399. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_provider_config.py +0 -0
  400. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_concurrency_rwlock.py +0 -0
  401. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_config_pool.py +0 -0
  402. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_dispatcher.py +0 -0
  403. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_sync_bridge.py +0 -0
  404. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_task_manager.py +0 -0
  405. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/concurrency/test_task_utils.py +0 -0
  406. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_config_constants_new.py +0 -0
  407. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_config_protocols.py +0 -0
  408. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_config_sources.py +0 -0
  409. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_env_interpolation.py +0 -0
  410. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_loader_fail_fast.py +0 -0
  411. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_logging_redaction_config.py +0 -0
  412. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_logging_sampling.py +0 -0
  413. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_profile_overlay.py +0 -0
  414. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_scoping.py +0 -0
  415. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_secrets_validator.py +0 -0
  416. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_strict_bool_env.py +0 -0
  417. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/config/test_strict_sections.py +0 -0
  418. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/test_context_correlation.py +0 -0
  419. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/test_core_constants.py +0 -0
  420. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/test_core_types.py +0 -0
  421. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/test_request_context_di.py +0 -0
  422. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/test_typing.py +0 -0
  423. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/core/validation/test_protocols.py +0 -0
  424. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/__init__.py +0 -0
  425. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/integration/test_provider.py +0 -0
  426. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/__init__.py +0 -0
  427. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/conftest.py +0 -0
  428. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_compiler.py +0 -0
  429. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_decorator.py +0 -0
  430. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_dynamic.py +0 -0
  431. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_errors.py +0 -0
  432. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_global.py +0 -0
  433. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_graph_reflection.py +0 -0
  434. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_health_graph.py +0 -0
  435. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_integration.py +0 -0
  436. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_introspection.py +0 -0
  437. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_lifecycle.py +0 -0
  438. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_module_lifecycle.py +0 -0
  439. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_reexport.py +0 -0
  440. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_registry.py +0 -0
  441. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_stub_compiler.py +0 -0
  442. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_stub_decorator.py +0 -0
  443. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/module/test_visibility.py +0 -0
  444. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_advanced_features.py +0 -0
  445. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_container_basics.py +0 -0
  446. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_container_builder.py +0 -0
  447. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_container_freeze.py +0 -0
  448. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_container_hardening.py +0 -0
  449. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_container_visibility.py +0 -0
  450. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_decorators.py +0 -0
  451. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_descriptor.py +0 -0
  452. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_di_constants_new.py +0 -0
  453. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_di_decorators.py +0 -0
  454. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_di_provider_config_wiring.py +0 -0
  455. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_diagnostics.py +0 -0
  456. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_extensions_discovery.py +0 -0
  457. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_extensions_validator.py +0 -0
  458. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_function_provider_boot.py +0 -0
  459. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_graph_validator.py +0 -0
  460. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_interceptor_registry.py +0 -0
  461. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_invoker_unit.py +0 -0
  462. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_lifecycle_orchestrator.py +0 -0
  463. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_module_validation.py +0 -0
  464. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_module_visibility_boot.py +0 -0
  465. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_module_visibility_enforcement.py +0 -0
  466. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_named_binding.py +0 -0
  467. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_orchestrator_health.py +0 -0
  468. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_basics.py +0 -0
  469. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_config_injection.py +0 -0
  470. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_conformance.py +0 -0
  471. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_orchestration.py +0 -0
  472. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_reset_state.py +0 -0
  473. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_provider_utils.py +0 -0
  474. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_scope_concurrency.py +0 -0
  475. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_scope_manager.py +0 -0
  476. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_service_store.py +0 -0
  477. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_type_hints.py +0 -0
  478. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/di/test_validation.py +0 -0
  479. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/conftest.py +0 -0
  480. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_aggregates.py +0 -0
  481. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain.py +0 -0
  482. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain_constants.py +0 -0
  483. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain_exceptions.py +0 -0
  484. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain_init.py +0 -0
  485. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain_model_strict.py +0 -0
  486. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_domain_module.py +0 -0
  487. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_models_factory.py +0 -0
  488. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/domain/test_value_object.py +0 -0
  489. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/identity/test_identity.py +0 -0
  490. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/logging/test_logging_constants_new.py +0 -0
  491. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/conftest.py +0 -0
  492. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_auto_map.py +0 -0
  493. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_exceptions.py +0 -0
  494. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_mapping_constants_new.py +0 -0
  495. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_mapping_exceptions.py +0 -0
  496. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_mapping_mapper.py +0 -0
  497. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_mapping_module.py +0 -0
  498. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_mapping_types.py +0 -0
  499. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_protocol.py +0 -0
  500. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/mapping/test_registry.py +0 -0
  501. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/conftest.py +0 -0
  502. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_builtins.py +0 -0
  503. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_chain.py +0 -0
  504. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_config_alignment.py +0 -0
  505. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_exception_filters.py +0 -0
  506. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_chain.py +0 -0
  507. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_constants.py +0 -0
  508. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_constants_new.py +0 -0
  509. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_ep_discovery.py +0 -0
  510. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_exceptions.py +0 -0
  511. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_module.py +0 -0
  512. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_routing.py +0 -0
  513. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_middleware_types.py +0 -0
  514. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_p2_retry_traceback.py +0 -0
  515. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_registry_defaults.py +0 -0
  516. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/middleware/test_registry_with_resilience.py +0 -0
  517. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/plugins/test_discovery.py +0 -0
  518. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/plugins/test_engine.py +0 -0
  519. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/plugins/test_state.py +0 -0
  520. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/plugins/test_state_hardening.py +0 -0
  521. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/plugins/test_validation.py +0 -0
  522. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/primitives/test_primitives_constants.py +0 -0
  523. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/primitives/test_registry_advanced.py +0 -0
  524. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/primitives/test_registry_introspection.py +0 -0
  525. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/primitives/test_trusted_html.py +0 -0
  526. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_control.py +0 -0
  527. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_core.py +0 -0
  528. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_facade.py +0 -0
  529. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_retry.py +0 -0
  530. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_subjects.py +0 -0
  531. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_time_ops.py +0 -0
  532. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/reactive/test_transform.py +0 -0
  533. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/__init__.py +0 -0
  534. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_exceptions.py +0 -0
  535. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_guards.py +0 -0
  536. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_hashing.py +0 -0
  537. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_package_hooks_p2.py +0 -0
  538. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_secret_rotation_policy.py +0 -0
  539. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_secrets_rotation.py +0 -0
  540. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_secrets_store.py +0 -0
  541. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_security_api.py +0 -0
  542. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_security_components_p2.py +0 -0
  543. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_security_constants.py +0 -0
  544. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_security_exceptions.py +0 -0
  545. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/security/test_security_types.py +0 -0
  546. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/conftest.py +0 -0
  547. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_schema.py +0 -0
  548. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_constants.py +0 -0
  549. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_di_provider.py +0 -0
  550. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_domain.py +0 -0
  551. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_init.py +0 -0
  552. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_json.py +0 -0
  553. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_registry.py +0 -0
  554. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/serialization/test_serialization_types.py +0 -0
  555. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_boot_validation.py +0 -0
  556. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_config_and_misc.py +0 -0
  557. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_constants.py +0 -0
  558. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_discovery.py +0 -0
  559. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_health_baseline.py +0 -0
  560. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_health_config.py +0 -0
  561. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_runner_and_lifespan.py +0 -0
  562. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_types.py +0 -0
  563. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_app_validation_and_misc.py +0 -0
  564. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_application.py +0 -0
  565. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_application_base.py +0 -0
  566. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_application_lifecycle.py +0 -0
  567. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_base_and_misc_exceptions.py +0 -0
  568. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_clock_and_pipeline_primitives.py +0 -0
  569. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_codegen.py +0 -0
  570. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_compiler_graph_utils.py +0 -0
  571. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_component_exceptions.py +0 -0
  572. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_concurrency_constants.py +0 -0
  573. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_concurrency_exceptions.py +0 -0
  574. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config.py +0 -0
  575. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_constants.py +0 -0
  576. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_hardening.py +0 -0
  577. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_quadkit.py +0 -0
  578. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_requirements.py +0 -0
  579. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_sources.py +0 -0
  580. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_types.py +0 -0
  581. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_config_watcher.py +0 -0
  582. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_container_exceptions.py +0 -0
  583. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_container_introspection.py +0 -0
  584. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_container_override.py +0 -0
  585. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_container_resolver_impl.py +0 -0
  586. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_container_runtime_mixin.py +0 -0
  587. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_context_registry.py +0 -0
  588. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_contract_completeness.py +0 -0
  589. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_core_builder.py +0 -0
  590. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_core_constants.py +0 -0
  591. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_core_lazy.py +0 -0
  592. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_core_module.py +0 -0
  593. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_core_pipeline.py +0 -0
  594. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_dependency_injector.py +0 -0
  595. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_di_constants.py +0 -0
  596. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_di_descriptor.py +0 -0
  597. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_di_module_constants.py +0 -0
  598. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_domain_constants.py +0 -0
  599. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_domain_exceptions.py +0 -0
  600. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_domain_model_base.py +0 -0
  601. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_dynamic_module.py +0 -0
  602. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_events_security_exceptions.py +0 -0
  603. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_execution_result.py +0 -0
  604. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_hatch_build_targets.py +0 -0
  605. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_health_probes.py +0 -0
  606. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_hook_registry.py +0 -0
  607. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_hook_registry_edge_cases.py +0 -0
  608. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_hook_registry_introspection.py +0 -0
  609. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_hook_registry_scenarios.py +0 -0
  610. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_identity_generators_and_ambient.py +0 -0
  611. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_infra_exceptions.py +0 -0
  612. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_input_sanitizers.py +0 -0
  613. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_interceptors.py +0 -0
  614. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_json_serialization_backend.py +0 -0
  615. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_apply_redaction.py +0 -0
  616. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_bridging.py +0 -0
  617. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_constants.py +0 -0
  618. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_debug.py +0 -0
  619. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_di_provider.py +0 -0
  620. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_factory.py +0 -0
  621. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_init.py +0 -0
  622. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_redaction.py +0 -0
  623. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_redaction_compound.py +0 -0
  624. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_logging_types.py +0 -0
  625. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_m13_m14_verification.py +0 -0
  626. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_mapper.py +0 -0
  627. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_mapper_enhanced.py +0 -0
  628. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_mapping.py +0 -0
  629. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_middleware_enhancements.py +0 -0
  630. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_middleware_exceptions.py +0 -0
  631. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_middleware_new.py +0 -0
  632. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_module_decorator.py +0 -0
  633. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_module_scan_and_provide.py +0 -0
  634. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_module_system.py +0 -0
  635. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_no_db_imports.py +0 -0
  636. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_orchestrator_parallel.py +0 -0
  637. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_p2_scope_log_level.py +0 -0
  638. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_primitives_context.py +0 -0
  639. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_primitives_data.py +0 -0
  640. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_primitives_registry.py +0 -0
  641. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_provider_boot_enhanced.py +0 -0
  642. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_provider_decorator.py +0 -0
  643. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_quadkit_constants.py +0 -0
  644. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_quadkit_exceptions.py +0 -0
  645. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_repr_helpers.py +0 -0
  646. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_resilience_exceptions.py +0 -0
  647. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_combinators.py +0 -0
  648. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_core.py +0 -0
  649. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_pipeline.py +0 -0
  650. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_pipeline_and_utils.py +0 -0
  651. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_types_new.py +0 -0
  652. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_result_utils.py +0 -0
  653. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_round22_hardening.py +0 -0
  654. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_round41_hardening.py +0 -0
  655. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_saga_primitives.py +0 -0
  656. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_sampling_and_config.py +0 -0
  657. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_secret_stores_and_rotation.py +0 -0
  658. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_serialization_constants.py +0 -0
  659. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_serialization_exceptions.py +0 -0
  660. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_service_descriptor.py +0 -0
  661. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_structured_logging.py +0 -0
  662. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_time_ops.py +0 -0
  663. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_types.py +0 -0
  664. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_validation_coercion.py +0 -0
  665. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_validation_exceptions.py +0 -0
  666. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_validation_rules.py +0 -0
  667. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/test_validation_validator_engine.py +0 -0
  668. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/__init__.py +0 -0
  669. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/conftest.py +0 -0
  670. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_async_validator.py +0 -0
  671. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_coercion.py +0 -0
  672. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_helpers.py +0 -0
  673. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation.py +0 -0
  674. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_constants.py +0 -0
  675. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_constants_new.py +0 -0
  676. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_fields.py +0 -0
  677. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_fields_extended.py +0 -0
  678. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_init.py +0 -0
  679. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_introspection.py +0 -0
  680. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_module.py +0 -0
  681. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validation_types.py +0 -0
  682. {quadkit-0.0.41 → quadkit-0.0.42}/tests/unit/validation/test_validator.py +0 -0
@@ -0,0 +1,214 @@
1
+ *
2
+ !tests/
3
+ !tests/**
4
+ !README.md
5
+ !AGENTS.md
6
+ !DEVELOPMENT.md
7
+ !QUICKGUIDE.md
8
+ !MILESTONE*.md
9
+ !TESTS*.md
10
+ !CHANGELOG.md
11
+ !AUDIT*.md
12
+ !REF*.md
13
+ !AUDIT*.json
14
+ !LICENSE
15
+ !LICENSE-MIT.txt
16
+ !NOTICE
17
+ !TRADEMARK.md
18
+ !conftest.py
19
+ !CONTRIBUTING.md
20
+ !CODE_OF_CONDUCT.md
21
+ !SECURITY.md
22
+ !GOVERNANCE.md
23
+ !pyproject.toml
24
+ !uv.lock
25
+ !docker-compose.yml
26
+ !.env.example
27
+ !.env.full.example
28
+ !.importlinter
29
+ !.superpowers/
30
+ !.superpowers/**
31
+ !.gitattributes
32
+ !.editorconfig
33
+ !Makefile
34
+ !docker-compose.test.yml
35
+ !quadkit.yaml.example
36
+ !.github/
37
+ !.github/workflows/
38
+ !.github/workflows/**
39
+ !.github/dependabot.yml
40
+ !.devcontainer/
41
+ !.devcontainer/**
42
+ !tools/
43
+ !tools/**
44
+ !*example.yaml
45
+
46
+ # Quadkit Packages
47
+ !quadkit*/
48
+ !quadkit*/pyproject.toml
49
+ !quadkit*/CHANGELOG.md
50
+ !quadkit*/README.md
51
+ !quadkit*/alembic.ini
52
+ !quadkit*/mypy.ini
53
+ !quadkit*/*.yaml.example
54
+ !quadkit*/src/
55
+ !quadkit*/src/**
56
+ !quadkit*/docs/
57
+ !quadkit*/docs/**
58
+ !quadkit*/tests/
59
+ !quadkit*/tests/**
60
+
61
+ # Keep quadkit docs
62
+ !/docs/
63
+ !docs/**
64
+
65
+ # Session / cutover plans at the repo root
66
+ !plans/
67
+ !plans/**
68
+
69
+ # Keep example files for README examples
70
+ !/examples/
71
+ !/examples/**
72
+
73
+ # Re-ignore these AFTER negations (last match wins)
74
+ *.tape
75
+ examples/*/runs/
76
+ __pycache__/
77
+ *.pyc
78
+ *.pyo
79
+ *.egg-info/
80
+ dist/
81
+ build/
82
+ .eggs/
83
+ *.egg
84
+ .pytest_cache/
85
+ .mypy_cache/
86
+ .ruff_cache/
87
+ htmlcov/
88
+ .coverage
89
+ coverage.xml
90
+ test.db
91
+ !quadkit*/tests/fixtures/test.db
92
+ *.log
93
+ *.tmp
94
+
95
+ # Company-specific files (keep private, do not commit)
96
+ .company/
97
+ COMPANY_*.md
98
+ company-config/
99
+ internal-docs/
100
+ # Editor swap files
101
+ *.swp
102
+
103
+ !core/
104
+ !packages/
105
+ !core/quadkit*/
106
+ !packages/quadkit*/
107
+ !core/quadkit*/pyproject.toml
108
+ !packages/quadkit*/pyproject.toml
109
+ !core/quadkit*/CHANGELOG.md
110
+ !packages/quadkit*/CHANGELOG.md
111
+ !core/quadkit*/README.md
112
+ !packages/quadkit*/README.md
113
+ !core/quadkit*/alembic.ini
114
+ !packages/quadkit*/alembic.ini
115
+ !core/quadkit*/mypy.ini
116
+ !packages/quadkit*/mypy.ini
117
+ !core/quadkit*/*.yaml.example
118
+ !packages/quadkit*/*.yaml.example
119
+ !core/quadkit*/src/
120
+ !core/quadkit*/src/**
121
+ !packages/quadkit*/src/
122
+ !packages/quadkit*/src/**
123
+ !core/quadkit*/tests/
124
+ !core/quadkit*/tests/**
125
+ !packages/quadkit*/tests/
126
+ !packages/quadkit*/tests/**
127
+ !core/quadkit*/docs/
128
+ !core/quadkit*/docs/**
129
+ !packages/quadkit*/docs/
130
+ !packages/quadkit*/docs/**
131
+
132
+ # dev/
133
+ !dev/
134
+ !dev/**
135
+
136
+ # Admin dev playground (committed dev asset; local SQLite files stay ignored)
137
+ !packages/quadkit-admin/playground/
138
+ !packages/quadkit-admin/playground/serve.py
139
+
140
+ # gatewai apps
141
+ !apps/
142
+ !apps/**
143
+ !apps/gatewai/
144
+ !apps/gatewai/**
145
+ apps/**/node_modules/
146
+ apps/**/dist/
147
+ apps/**/__pycache__/
148
+ apps/**/*.pyc
149
+ apps/**/*.db
150
+ apps/**/*.db-wal
151
+ apps/**/*.db-shm
152
+ apps/**/.env
153
+ apps/**/.env.*
154
+ !apps/**/.env.example
155
+ !apps/**/.env.full.example
156
+
157
+ # Piccolina — nested app tracked in this monorepo (standalone .git removed).
158
+ # Keep marketing packages and deployment secrets out of the tree.
159
+ apps/piccolina/piccolina-marketing/
160
+ apps/piccolina/piccolina-marketing-plans/
161
+ apps/piccolina/secrets/
162
+ apps/piccolina/**/secrets/
163
+ apps/piccolina/**/*.pem
164
+ apps/piccolina/**/*.key
165
+ apps/piccolina/**/.venv/
166
+ apps/piccolina/**/node_modules/
167
+ apps/piccolina/**/__pycache__/
168
+ apps/piccolina/**/*.pyc
169
+ apps/piccolina/**/*.pbf
170
+ apps/piccolina/**/.open-next/
171
+ apps/piccolina/**/storage/
172
+ apps/piccolina/**/.deploy-host
173
+
174
+ # Re-exclude private content under the tiered paths.
175
+ # MUST come after the !...docs/** negations above — last match wins.
176
+ core/quadkit*/docs/plans/
177
+ packages/quadkit*/docs/plans/
178
+ core/quadkit*/docs/**/
179
+ packages/quadkit*/docs/**/
180
+
181
+ # Re-exclude tooling artifacts under the tiered paths
182
+ __pycache__/
183
+ *.pyc
184
+ *.pyo
185
+ *.egg-info/
186
+ .pytest_cache/
187
+ .mypy_cache/
188
+ .ruff_cache/
189
+ htmlcov/
190
+ .coverage
191
+ coverage.xml
192
+ test.db
193
+ *.tmp
194
+ *.log
195
+ !core/quadkit*/tests/fixtures/test.db
196
+ !packages/quadkit*/tests/fixtures/test.db
197
+
198
+ # Allow the generated example gifs to be tracked (README hero images).
199
+ !core/quadkit*/docs/gifs/
200
+ !core/quadkit*/docs/gifs/**
201
+ !packages/*/quadkit*/docs/gifs/
202
+ !packages/*/quadkit*/docs/gifs/**
203
+ examples/*/screenshot.png
204
+ !banner*
205
+ apps/quadkit-playground/**/node_modules/
206
+ apps/quadkit-playground/**/dist/
207
+ apps/quadkit-playground/**/__pycache__/
208
+ apps/quadkit-playground/**/*.pyc
209
+ apps/quadkit-playground/**/*.db
210
+ apps/quadkit-playground/**/*.db-wal
211
+ apps/quadkit-playground/**/*.db-shm
212
+ apps/quadkit-playground/projects/
213
+ apps/quadkit-playground/quadkit/
214
+ docs/superpowers/
@@ -0,0 +1,73 @@
1
+ # Changelog
2
+
3
+ All notable changes to this package will be documented in this file.
4
+
5
+ This project follows:
6
+ - [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
7
+ - [Semantic Versioning](https://semver.org/)
8
+
9
+ ---
10
+
11
+ ## [Unreleased]
12
+
13
+ ### Added
14
+ -
15
+
16
+ ### Changed
17
+ -
18
+
19
+ ### Fixed
20
+ -
21
+
22
+ ### Removed
23
+ -
24
+
25
+ ### Deprecated
26
+ -
27
+
28
+ ---
29
+
30
+ ## [1.2.0] - 2026-04-25
31
+
32
+ ### Added
33
+ - New `CacheProvider` for Redis backend
34
+ - Support for async streaming responses
35
+
36
+ ### Changed
37
+ - Improved container resolution performance (~20%)
38
+ - Updated logging format to include request IDs
39
+
40
+ ### Fixed
41
+ - Fixed circular dependency detection edge case
42
+ - Fixed memory leak in scoped container
43
+
44
+ ---
45
+
46
+ ## [1.1.0] - 2026-03-10
47
+
48
+ ### Added
49
+ - Introduced `Result[T, E]` helpers (`map`, `and_then`)
50
+ - Added health check support in providers
51
+
52
+ ### Changed
53
+ - Refactored provider lifecycle ordering
54
+
55
+ ---
56
+
57
+ ## [1.0.0] - 2026-01-01
58
+
59
+ ### Added
60
+ - Initial release
61
+ - Dependency Injection container
62
+ - Provider system
63
+ - Module system
64
+
65
+ ---
66
+
67
+ ## Types of Changes
68
+
69
+ - **Added** → new features
70
+ - **Changed** → changes in existing functionality
71
+ - **Fixed** → bug fixes
72
+ - **Removed** → removed features
73
+ - **Deprecated** → soon-to-be removed features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: quadkit
3
- Version: 0.0.41
3
+ Version: 0.0.42
4
4
  Summary: Async-first DI/IoC framework for Python — core package
5
5
  Project-URL: Homepage, https://dbtinoy-.github.io/quadkit/
6
6
  Project-URL: Repository, https://github.com/dbtinoy-/quadkit
@@ -27,6 +27,7 @@ Classifier: Typing :: Typed
27
27
  Requires-Python: >=3.11
28
28
  Requires-Dist: orjson<4,>=3.0.0
29
29
  Requires-Dist: pydantic<3,>=2.10.0
30
+ Requires-Dist: pyyaml<7,>=6.0.0
30
31
  Requires-Dist: quadkit-contracts>=0.0.2
31
32
  Requires-Dist: structlog<27,>=25.1.0
32
33
  Provides-Extra: codegen
@@ -250,10 +251,10 @@ report vulnerabilities privately per
250
251
 
251
252
  ## Stability
252
253
 
253
- Version `0.0.3` in the `0.x` series, released in lockstep with the
254
+ Version `0.0.42` in the `0.x` series, released in lockstep with the
254
255
  other four distributions; APIs may change between minor versions until
255
256
  1.0 — pin an exact version
256
- (`quadkit==0.0.3`) or a tight range (`>=0.0.3,<0.1.0`). Full policy:
257
+ (`quadkit==0.0.42`) or a tight range (`>=0.0.42,<0.1.0`). Full policy:
257
258
  [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
258
259
 
259
260
  ## Links
@@ -199,10 +199,10 @@ report vulnerabilities privately per
199
199
 
200
200
  ## Stability
201
201
 
202
- Version `0.0.3` in the `0.x` series, released in lockstep with the
202
+ Version `0.0.42` in the `0.x` series, released in lockstep with the
203
203
  other four distributions; APIs may change between minor versions until
204
204
  1.0 — pin an exact version
205
- (`quadkit==0.0.3`) or a tight range (`>=0.0.3,<0.1.0`). Full policy:
205
+ (`quadkit==0.0.42`) or a tight range (`>=0.0.42,<0.1.0`). Full policy:
206
206
  [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
207
207
 
208
208
  ## Links
@@ -0,0 +1,252 @@
1
+ ---
2
+ title: "quadkit Architecture"
3
+ description: "Architecture overview of the Quadkit core package and its role in the system."
4
+ ---
5
+ # Architecture
6
+
7
+ ---
8
+
9
+ ## Role in the System
10
+
11
+ `quadkit` is the **core package** — the foundation that every extension package builds on. It provides the DI container, application lifecycle, provider pattern, configuration system, and the `Result` type.
12
+
13
+ ```
14
+ Extension packages (quadkit-web, quadkit-sql, …)
15
+ ↑ depends on
16
+ ┌────┴────┐
17
+ │ quadkit │ ← DI container, Application, Provider, Module, Config, Result
18
+ └────┬────┘
19
+ ↑ depends on
20
+ ┌────┴────────┐
21
+ │ quadkit-contracts │ ← Protocols, types, exceptions (zero deps)
22
+ └─────────────────┘
23
+ ```
24
+
25
+ ---
26
+
27
+ ## Key Components
28
+
29
+ ```
30
+ ┌────────────────────────────────────────────────────┐
31
+ │ Application │
32
+ │ ┌──────────┐ ┌────────────────┐ ┌────────────┐ │
33
+ │ │Container │ │ProviderOrch. │ │ Invoker │ │
34
+ │ │ │ │ │ │ │ │
35
+ │ │ register │ │ sort by │ │ DI function│ │
36
+ │ │ resolve │ │ priority+deps │ │ calling │ │
37
+ │ │ validate │ │ boot/shutdown │ │ │ │
38
+ │ └────┬─────┘ └────────────────┘ └────────────┘ │
39
+ │ │ │
40
+ │ ┌────┴──────────────────────────────────────┐ │
41
+ │ │ MiddlewarePipeline │ │
42
+ │ └───────────────────────────────────────────┘ │
43
+ │ │
44
+ │ ┌──────────────────────────────────────────┐ │
45
+ │ │ QuadkitConfig │ │
46
+ │ │ app_name, debug, env, logging, modules │ │
47
+ │ └──────────────────────────────────────────┘ │
48
+ └──────────────────────────────────────────────────────┘
49
+ ```
50
+
51
+ ### Container (`quadkit.di.container`)
52
+
53
+ The IoC container is a facade coordinating:
54
+
55
+ | Sub-component | Responsibility |
56
+ |---|---|
57
+ | `ServiceRegistry` | Stores bindings (service type → descriptor) |
58
+ | `ServiceResolver` | Resolves typed dependencies recursively |
59
+ | `DependencyInjector` | Creates instances with constructor injection |
60
+ | `ContainerRegistrarImpl` | Write operations (singleton, transient, scoped) |
61
+ | `ContainerResolverImpl` | Read operations (resolve, resolve_optional, resolve_all) |
62
+ | `ContainerValidator` | Pre-flight validation (missing deps, circular refs, scope violations) |
63
+ | `FunctionInvoker` | Auto-injects arguments when calling functions |
64
+ | `TypeHintResolverImpl` | Resolves type hints with caching |
65
+
66
+ **Service scopes:**
67
+
68
+ | Scope | Lifetime | Registration Method |
69
+ |-------|----------|-------------------|
70
+ | `SINGLETON` | One instance for the container lifetime | `container.singleton(T, instance)` or `container.singleton(T, factory=factory)` |
71
+ | `TRANSIENT` | New instance per resolution | `container.transient(T, factory)` |
72
+ | `SCOPED` | One instance per scope context | `container.scoped(T, factory)` |
73
+
74
+ **Lifecycle:**
75
+
76
+ ```
77
+ Register ──► Freeze ──► Resolve ──► Dispose
78
+ │
79
+ validate()
80
+ ```
81
+
82
+ ### Provider (`quadkit.di.provider`)
83
+
84
+ The `Provider` base class defines the lifecycle contract:
85
+
86
+ | Field | Type | Default | Description |
87
+ |-------|------|---------|-------------|
88
+ | `name` | `str` | `""` (auto-derived from class name) | Unique identifier |
89
+ | `priority` | `ProviderPriority` | `NORMAL` | Boot ordering |
90
+ | `dependencies` | `tuple[str, ...]` | `()` | Named provider dependencies |
91
+ | `required` | `bool` | `True` | Fatal if boot fails |
92
+ | `config_key` | `str \| None` | `None` | Config section to inject |
93
+ | `config_model` | `type \| None` | `None` | Config model class |
94
+
95
+ **Extension point:** Subclass `Provider` and override lifecycle hooks. Providers are discovered via `app.discover_providers()` or added explicitly via `app.add_provider()`.
96
+
97
+ ### Module (`quadkit.di.module`)
98
+
99
+ Modules provide encapsulation over groups of providers:
100
+
101
+ | Component | Purpose |
102
+ |---|---|
103
+ | `@module` decorator | Attaches `ModuleMetadata` to a class |
104
+ | `Module` base class | `ClassVar` defaults, `configure()`, `scope()`, `stub()` factory methods |
105
+ | `DynamicModule` | Runtime-created module descriptor |
106
+ | `ModuleCompiler` | Compiles the module graph into an ordered provider list |
107
+ | `ModuleMetadata` | Stores providers, imports, exports, scan paths |
108
+
109
+ **Visibility rules:**
110
+ - Services in a module are **private** by default
111
+ - Only types listed in `exports` are resolvable by importing modules
112
+ - `@global_module` exports are visible to all modules without `imports`
113
+
114
+ ### Result (`quadkit.result`)
115
+
116
+ Re-exports from `quadkit.contracts.core.result`. The `Result[T, E]` type is a discriminated union:
117
+
118
+ ```python
119
+ class Result(Generic[T, E]):
120
+ def is_ok(self) -> bool: ...
121
+ def is_err(self) -> bool: ...
122
+ def unwrap(self) -> T: ... # raises UnwrapError on Err
123
+ def unwrap_err(self) -> E: ...
124
+ def unwrap_or(self, default: T) -> T: ...
125
+ def map(self, fn) -> Result[U, E]: ... # async
126
+ def map_sync(self, fn) -> Result[U, E]: ... # sync
127
+ def and_then(self, fn) -> Result[U, E]: ... # async
128
+ def and_then_sync(self, fn) -> Result[U, E]: ...
129
+ def match(self, *, ok, err) -> U: ...
130
+ def inspect(self, fn) -> Self: ...
131
+ def inspect_err(self, fn) -> Self: ...
132
+ def flatten(self) -> Result[T, E]: ...
133
+ @staticmethod
134
+ def from_exception(exc) -> Result[Never, Exception]: ...
135
+ ```
136
+
137
+ ### Config (`quadkit.config`)
138
+
139
+ Configuration loading uses a layered source model:
140
+
141
+ ```
142
+ Sources (ordered by priority, later wins):
143
+ 1. Class defaults (QuadkitConfig fields)
144
+ 2. YAML file (application.yaml)
145
+ 3. Additional YAML/files via ConfigLoader
146
+ 4. Environment variables (QK_<KEY>)
147
+ 5. .env file
148
+ 6. CLI options
149
+ │
150
+ ▼
151
+ QuadkitConfig (Pydantic/BaseConfig model)
152
+ │
153
+ ▼
154
+ Container singleton (QuadkitConfig + ConfigProtocol)
155
+ ```
156
+
157
+ `ConfigProvider` (priority `CRITICAL`) loads config during `register()` — this is the one **intentional exception** to the rule that providers shouldn't do I/O in `register()`.
158
+
159
+ ---
160
+
161
+ ## Providers
162
+
163
+ **Core providers** (included with `quadkit`):
164
+
165
+ | Provider | Name | Priority | Registers |
166
+ |----------|------|----------|-----------|
167
+ | `ConfigProvider` | `"config"` | `CRITICAL` | `QuadkitConfig`, `ConfigProtocol` |
168
+ | `CoreProvider` | `"core"` | `INFRASTRUCTURE` | Core infrastructure services |
169
+ | `CoreInfrastructureProvider` | `"common"` | `INFRASTRUCTURE` | Ambient primitives (clock, identity, hashing) |
170
+ | `LoggingProvider` | `"logging"` | `INFRASTRUCTURE` | `LoggerProtocol`, structlog config |
171
+ | `IdentityProvider` | `"identity"` | `INFRASTRUCTURE` | ID generation |
172
+ | `MiddlewareProvider` | `"middleware"` | `INFRASTRUCTURE` | Middleware chain |
173
+ | `DiProvider` | `"di"` | `INFRASTRUCTURE` | DI system extensions |
174
+
175
+ ---
176
+
177
+ ## Contracts Used
178
+
179
+ `quadkit` depends on protocols from `quadkit-contracts`:
180
+
181
+ | Protocol | Import | Used By |
182
+ |----------|--------|---------|
183
+ | `ContainerRegistrarProtocol` | `quadkit.contracts.core.di` | `Provider.register()` parameter |
184
+ | `ContainerResolverProtocol` | `quadkit.contracts.core.di` | Resolution API |
185
+ | `BootContainerProtocol` | `quadkit.contracts.core.di` | `Provider.boot()` parameter |
186
+ | `ConfigProtocol` | `quadkit.contracts.core.config` | `QuadkitConfig` implements this |
187
+ | `ProviderPriority` | `quadkit.contracts.core.provider` | `Provider.priority` field |
188
+ | `HealthCheckResult` | `quadkit.contracts.core.health` | `Provider.health_check()` return |
189
+ | `ClockProtocol` | `quadkit.contracts.core.clock` | Ambient clock capability |
190
+ | `IdGeneratorProtocol` | `quadkit.contracts.core.identity` | Identity generation |
191
+ | `LoggerProtocol` | (quadkit.logging) | Structured logging |
192
+
193
+ ---
194
+
195
+ ## Lifecycle
196
+
197
+ ### Application Boot Sequence
198
+
199
+ ```mermaid
200
+ sequenceDiagram
201
+ participant App as Application
202
+ participant Comp as ModuleCompiler
203
+ participant PC as ProviderOrchestrator
204
+ participant C as Container
205
+ participant P as Provider
206
+
207
+ App->>C: create
208
+ App->>PC: add providers
209
+ App->>App: start()
210
+ App->>Comp: compile() if modules
211
+ App->>PC: register_all()
212
+ loop for each provider
213
+ PC->>P: register(C)
214
+ P->>C: singleton(...) / transient(...) / scoped(...)
215
+ end
216
+ PC->>C: freeze(validate=True)
217
+ PC->>C: validate() if enabled
218
+ loop boot levels (topological order)
219
+ PC->>P: boot(C)
220
+ P->>C: resolve(...)
221
+ end
222
+ App-->>App: RUNNING
223
+ Note over App: Application running
224
+ App->>App: stop()
225
+ loop reverse priority
226
+ PC->>P: shutdown()
227
+ end
228
+ App->>C: dispose()
229
+ App-->>App: STOPPED
230
+ ```
231
+
232
+ ### Error Handling During Boot
233
+
234
+ If any provider's `boot()` raises, all previously booted providers are shut down in reverse order, and the application transitions to `STOPPED`. The `on_error(error, phase)` hook is called for each failed provider.
235
+
236
+ ### Middleware Pipeline
237
+
238
+ The `MiddlewarePipeline` wraps function calls via the `Invoker`. Middleware is ordered and applied around every `invoker.invoke()` call.
239
+
240
+ ---
241
+
242
+ ## Extension Points
243
+
244
+ | Extension | How | Example |
245
+ |-----------|-----|---------|
246
+ | Custom Provider | Subclass `Provider` | Create a provider for your domain services |
247
+ | Custom Module | `@module()` decorator | Encapsulate a vertical slice |
248
+ | Config Source | Implement `ConfigSourceProtocol` | Load from Vault, SSM, custom backend |
249
+ | Resolution Strategy | Implement `ResolutionStrategy` | Custom annotation-based injection |
250
+ | Interceptor | Register on `InterceptorRegistry` | AOP around service resolution |
251
+ | Service Registration | `container.singleton()` | Bind any protocol to an implementation |
252
+ | Middleware | Implement `MiddlewareProtocol` | Logging, tracing, auth around function calls |
@@ -0,0 +1,126 @@
1
+ ---
2
+ title: "quadkit Configuration"
3
+ description: "How Quadkit loads configuration from multiple sources with an overlay model."
4
+ ---
5
+ # Configuration
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ Quadkit loads configuration from multiple sources with an overlay (later-wins) model. The `ConfigProvider` (priority `CRITICAL`) handles loading during the `register()` phase.
12
+
13
+ **Config sources** (in priority order, later wins):
14
+
15
+ 1. In-code field defaults
16
+ 2. `application.yaml` in the working directory
17
+ 3. Custom file sources (via `ConfigLoader`)
18
+ 4. Environment variables (`QK_<KEY>`)
19
+ 5. `.env` file
20
+ 6. CLI arguments (via `CliConfigSource`)
21
+
22
+ ---
23
+
24
+ ## Config Section Key
25
+
26
+ Quadkit's config lives at the **root** of the config hierarchy (there is no outer section key). Extension packages use sub-keys under the root (e.g. `cache:`, `web:`, `db:`), which are accessed via `config.get_section("cache", CacheConfig)`.
27
+
28
+ ---
29
+
30
+ ## Options
31
+
32
+ ### `QuadkitConfig` — Root Configuration
33
+
34
+ | Key | Type | Default | Description | Env Var |
35
+ |-----|------|---------|-------------|---------|
36
+ | `app_name` | `str` | `"quadkit-app"` | Application name used in logging and telemetry | `QK_APP__APP_NAME` |
37
+ | `debug` | `bool` | `False` | Enable debug mode (blocked in production) | `QK_DEBUG` |
38
+ | `env` | `Environment` | `"development"` | Deployment environment | `QK_ENV` |
39
+ | `logging.level` | `str` | `"INFO"` | Default log level | `QK_LOGGING__LEVEL` |
40
+ | `logging.json_format` | `bool` | `false` | Render logs as JSON | `QK_LOGGING__JSON_FORMAT` |
41
+ | `enabled_modules` | `list[str]` | `[]` | Enabled module names | `QK_MODULEDISCOVERY__ENABLED_MODULES` |
42
+ | `discovery.auto_discover` | `bool` | `False` | Auto-discover modules | `QK_MODULEDISCOVERY__AUTO_DISCOVER` |
43
+ | `discovery.entry_point_group` | `str` | `"quadkit.modules"` | Entry point group for module discovery | `QK_MODULEDISCOVERY__ENTRY_POINT_GROUP` |
44
+ | `health.check_timeout` | `float` | `5.0` | Health check timeout (seconds) | `QK_HEALTH__CHECK_TIMEOUT` |
45
+ | `health.include_details` | `bool` | `true` | Include detailed health output | `QK_HEALTH__INCLUDE_DETAILS` |
46
+
47
+ ### Environment Values
48
+
49
+ | Environment | String Value |
50
+ |-------------|-------------|
51
+ | `DEVELOPMENT` | `"development"` |
52
+ | `STAGING` | `"staging"` |
53
+ | `PRODUCTION` | `"production"` |
54
+ | `TEST` | `"test"` |
55
+
56
+ ---
57
+
58
+ ## Examples
59
+
60
+ ### Minimal YAML (`application.yaml`)
61
+
62
+ ```yaml
63
+ app_name: my-api
64
+ debug: false
65
+ env: development
66
+ logging:
67
+ level: INFO
68
+ json_format: true
69
+ ```
70
+
71
+ ### Production YAML
72
+
73
+ ```yaml
74
+ app_name: my-api
75
+ debug: false
76
+ env: production
77
+ logging:
78
+ level: WARN
79
+ json_format: true
80
+ ```
81
+
82
+ ### Environment Variables
83
+
84
+ ```bash
85
+ export QK_APP__APP_NAME="my-api"
86
+ export QK_DEBUG="false"
87
+ export QK_ENV="production"
88
+ export QK_LOGGING__LEVEL="WARN"
89
+ export QK_LOGGING__JSON_FORMAT="true"
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Programmatic Usage
95
+
96
+ ```python
97
+ from quadkit import QuadkitConfig
98
+ from quadkit.config.di.provider import ConfigProvider
99
+
100
+ # Load from YAML + env
101
+ config = QuadkitConfig.from_yaml("application.yaml")
102
+ print(config.app_name) # "my-api"
103
+ print(config.is_production) # True/False
104
+
105
+ # Provider section access
106
+ cache_cfg = config.get_section("cache", CacheConfig)
107
+
108
+ # Validation
109
+ issues = config.validate_for_environment()
110
+ for issue in issues:
111
+ print(f"{issue.field}: {issue.message}")
112
+
113
+ # ConfigProvider for DI
114
+ provider = ConfigProvider()
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Best Practices
120
+
121
+ - **Never hardcode secrets** in YAML — use environment variables or a secret store
122
+ - **Use `QK_` prefix** for all env var overrides
123
+ - **Section naming** uses double-underscore: `QK_<SECTION>__<KEY>`
124
+ - **Validate with `config.validate_for_environment()`** in production to catch `debug=True`
125
+ - **Register secrets** via `app.register_secrets()` for boot-time validation
126
+ - **Pin config model types** by registering them in `ConfigRegistry` for extension packages