quadkit 0.0.4__tar.gz → 0.0.41__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 (680) hide show
  1. quadkit-0.0.41/.gitignore +24 -0
  2. {quadkit-0.0.4 → quadkit-0.0.41}/PKG-INFO +1 -1
  3. {quadkit-0.0.4 → quadkit-0.0.41}/example.yaml +2 -2
  4. {quadkit-0.0.4 → quadkit-0.0.41}/pyproject.toml +2 -5
  5. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/module.py +1 -1
  6. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/discovery.py +1 -1
  7. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/unit_of_work.py +1 -1
  8. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/configurator.py +1 -1
  9. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/resilience.py +1 -1
  10. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/observability/core.py +1 -1
  11. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/pipeline.py +1 -1
  12. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/registry/introspection.py +1 -1
  13. quadkit-0.0.4/.gitignore +0 -183
  14. quadkit-0.0.4/CHANGELOG.md +0 -73
  15. quadkit-0.0.4/docs/ARCHITECTURE.md +0 -252
  16. quadkit-0.0.4/docs/CONFIGURATION.md +0 -126
  17. quadkit-0.0.4/docs/GUIDE.md +0 -451
  18. quadkit-0.0.4/docs/HOWTOS.md +0 -275
  19. quadkit-0.0.4/docs/QUICKSTART.md +0 -91
  20. quadkit-0.0.4/docs/SECURITY.md +0 -165
  21. quadkit-0.0.4/docs/TROUBLESHOOTING.md +0 -217
  22. quadkit-0.0.4/docs/gifs/hero/app.py +0 -455
  23. quadkit-0.0.4/docs/gifs/hero/hero.tape +0 -71
  24. quadkit-0.0.4/docs/gifs/hero/quadkit-hero.gif +0 -0
  25. quadkit-0.0.4/docs/plugins.md +0 -54
  26. quadkit-0.0.4/tests/integration/test_corrected_patterns_integration.py +0 -254
  27. quadkit-0.0.4/tests/integration/test_database_integration.py +0 -256
  28. quadkit-0.0.4/tests/integration/test_monitor_config_integration.py +0 -22
  29. {quadkit-0.0.4 → quadkit-0.0.41}/LICENSE +0 -0
  30. {quadkit-0.0.4 → quadkit-0.0.41}/NOTICE +0 -0
  31. {quadkit-0.0.4 → quadkit-0.0.41}/README.md +0 -0
  32. {quadkit-0.0.4 → quadkit-0.0.41}/src/import_error.txt +0 -0
  33. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/__init__.py +0 -0
  34. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/__init__.py +0 -0
  35. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/asgi_lifespan.py +0 -0
  36. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/base.py +0 -0
  37. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/config/__init__.py +0 -0
  38. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/config/discovery.py +0 -0
  39. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/config/models.py +0 -0
  40. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/config_validation.py +0 -0
  41. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/constants.py +0 -0
  42. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/di/__init__.py +0 -0
  43. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/di/provider.py +0 -0
  44. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/discovery.py +0 -0
  45. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/events.py +0 -0
  46. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/exceptions.py +0 -0
  47. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/factory.py +0 -0
  48. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/health_probes.py +0 -0
  49. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/injectable_provider.py +0 -0
  50. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/invoker.py +0 -0
  51. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/lifecycle.py +0 -0
  52. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/pipeline.py +0 -0
  53. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/protocols.py +0 -0
  54. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/py.typed +0 -0
  55. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/runner.py +0 -0
  56. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/secrets.py +0 -0
  57. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/standard.py +0 -0
  58. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/app/types.py +0 -0
  59. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/codegen/__init__.py +0 -0
  60. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/codegen/base.py +0 -0
  61. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/__init__.py +0 -0
  62. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/__init__.py +0 -0
  63. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/py.typed +0 -0
  64. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/sync_bridge.py +0 -0
  65. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/channels/__init__.py +0 -0
  66. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/channels/channel.py +0 -0
  67. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/channels/py.typed +0 -0
  68. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/config.py +0 -0
  69. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/constants.py +0 -0
  70. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/di/__init__.py +0 -0
  71. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/di/provider.py +0 -0
  72. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/di/py.typed +0 -0
  73. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/exceptions.py +0 -0
  74. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/executors/__init__.py +0 -0
  75. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/executors/dispatcher.py +0 -0
  76. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/executors/parallel.py +0 -0
  77. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/executors/py.typed +0 -0
  78. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/executors/task_manager.py +0 -0
  79. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/locks/__init__.py +0 -0
  80. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/locks/py.typed +0 -0
  81. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/locks/rwlock.py +0 -0
  82. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/module.py +0 -0
  83. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/py.typed +0 -0
  84. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/concurrency/task_utils.py +0 -0
  85. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/__init__.py +0 -0
  86. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/base.py +0 -0
  87. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/constants.py +0 -0
  88. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/di/__init__.py +0 -0
  89. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/di/provider.py +0 -0
  90. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/exceptions.py +0 -0
  91. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/__init__.py +0 -0
  92. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/merge.py +0 -0
  93. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/registry.py +0 -0
  94. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/sources.py +0 -0
  95. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/validation.py +0 -0
  96. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/lib/watcher.py +0 -0
  97. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/main.py +0 -0
  98. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/protocols.py +0 -0
  99. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/secrets.py +0 -0
  100. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/config/types.py +0 -0
  101. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/constants.py +0 -0
  102. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/__init__.py +0 -0
  103. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/_graph.py +0 -0
  104. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/builder.py +0 -0
  105. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/config/__init__.py +0 -0
  106. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/config/models.py +0 -0
  107. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/constants.py +0 -0
  108. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/__init__.py +0 -0
  109. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/container.py +0 -0
  110. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/container_introspection.py +0 -0
  111. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/container_resolution.py +0 -0
  112. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/container_runtime.py +0 -0
  113. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/registrar.py +0 -0
  114. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/resolver.py +0 -0
  115. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/scope.py +0 -0
  116. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/container/validation.py +0 -0
  117. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/context.py +0 -0
  118. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/decorators.py +0 -0
  119. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/exceptions.py +0 -0
  120. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/__init__.py +0 -0
  121. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/aop_interceptors.py +0 -0
  122. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/interceptors.py +0 -0
  123. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/strategies.py +0 -0
  124. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/extensions/validator.py +0 -0
  125. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/function_provider.py +0 -0
  126. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/integration/__init__.py +0 -0
  127. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/integration/provider.py +0 -0
  128. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/markers.py +0 -0
  129. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/__init__.py +0 -0
  130. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/base.py +0 -0
  131. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/__init__.py +0 -0
  132. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/_graph_utils.py +0 -0
  133. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/compiler.py +0 -0
  134. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/context.py +0 -0
  135. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/__init__.py +0 -0
  136. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/collect.py +0 -0
  137. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/detect_cycles.py +0 -0
  138. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/expand.py +0 -0
  139. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/order.py +0 -0
  140. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/protocol.py +0 -0
  141. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/validate.py +0 -0
  142. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/visibility.py +0 -0
  143. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/constants.py +0 -0
  144. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/decorator.py +0 -0
  145. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/dynamic.py +0 -0
  146. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/errors.py +0 -0
  147. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/graph.py +0 -0
  148. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/introspection.py +0 -0
  149. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/metadata.py +0 -0
  150. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/module/registry.py +0 -0
  151. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/__init__.py +0 -0
  152. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/events.py +0 -0
  153. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/health.py +0 -0
  154. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/lifecycle.py +0 -0
  155. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/orchestrator.py +0 -0
  156. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/orchestrator/registry.py +0 -0
  157. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/protocols.py +0 -0
  158. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/provider.py +0 -0
  159. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/provider_utils.py +0 -0
  160. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/py.typed +0 -0
  161. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/__init__.py +0 -0
  162. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/context.py +0 -0
  163. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/descriptor.py +0 -0
  164. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/diagnostics.py +0 -0
  165. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/injector.py +0 -0
  166. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/invoker.py +0 -0
  167. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/registry.py +0 -0
  168. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/resolver.py +0 -0
  169. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/store.py +0 -0
  170. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/type_hints.py +0 -0
  171. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/resolution/validator.py +0 -0
  172. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/di/types.py +0 -0
  173. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/__init__.py +0 -0
  174. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/constants.py +0 -0
  175. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/exceptions.py +0 -0
  176. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/__init__.py +0 -0
  177. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/aggregate.py +0 -0
  178. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/base.py +0 -0
  179. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/coercion.py +0 -0
  180. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/entity.py +0 -0
  181. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/factory.py +0 -0
  182. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/py.typed +0 -0
  183. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/models/value_object.py +0 -0
  184. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/module.py +0 -0
  185. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/py.typed +0 -0
  186. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/domain/types.py +0 -0
  187. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/exceptions.py +0 -0
  188. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/hooks/__init__.py +0 -0
  189. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/hooks/ambient.py +0 -0
  190. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/hooks/registry.py +0 -0
  191. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/hooks/types.py +0 -0
  192. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/__init__.py +0 -0
  193. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/ambient.py +0 -0
  194. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/config.py +0 -0
  195. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/constants.py +0 -0
  196. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/di/__init__.py +0 -0
  197. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/di/provider.py +0 -0
  198. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/identity/generator.py +0 -0
  199. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/README.md +0 -0
  200. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/__init__.py +0 -0
  201. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/config/__init__.py +0 -0
  202. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/config/models.py +0 -0
  203. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/config/redaction.py +0 -0
  204. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/config/sampling.py +0 -0
  205. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/constants.py +0 -0
  206. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/debug.py +0 -0
  207. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/di/__init__.py +0 -0
  208. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/di/provider.py +0 -0
  209. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/factory.py +0 -0
  210. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/processors.py +0 -0
  211. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/redaction.py +0 -0
  212. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/logging/types.py +0 -0
  213. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/__init__.py +0 -0
  214. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/config.py +0 -0
  215. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/constants.py +0 -0
  216. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/core/__init__.py +0 -0
  217. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/core/mapper.py +0 -0
  218. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/di/__init__.py +0 -0
  219. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/di/provider.py +0 -0
  220. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/exceptions.py +0 -0
  221. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/module.py +0 -0
  222. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/protocols.py +0 -0
  223. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/py.typed +0 -0
  224. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/mapping/types.py +0 -0
  225. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/__init__.py +0 -0
  226. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/__init__.py +0 -0
  227. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/caching.py +0 -0
  228. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/di.py +0 -0
  229. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/observability.py +0 -0
  230. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/routing.py +0 -0
  231. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/builtins/validation.py +0 -0
  232. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/config.py +0 -0
  233. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/constants.py +0 -0
  234. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/core/__init__.py +0 -0
  235. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/core/chain.py +0 -0
  236. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/core/exception_filters.py +0 -0
  237. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/core/registry.py +0 -0
  238. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/di/__init__.py +0 -0
  239. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/di/provider.py +0 -0
  240. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/exceptions.py +0 -0
  241. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/module.py +0 -0
  242. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/middleware/types.py +0 -0
  243. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/module.py +0 -0
  244. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/observability/__init__.py +0 -0
  245. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/observability/di/__init__.py +0 -0
  246. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/observability/di/sub_providers/__init__.py +0 -0
  247. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/observability/di/sub_providers/observability.py +0 -0
  248. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/__init__.py +0 -0
  249. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/discovery.py +0 -0
  250. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/engine.py +0 -0
  251. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/exceptions.py +0 -0
  252. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/module.py +0 -0
  253. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/plugins/state.py +0 -0
  254. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/__init__.py +0 -0
  255. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/builder.py +0 -0
  256. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/clock.py +0 -0
  257. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/constants.py +0 -0
  258. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/context.py +0 -0
  259. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/context_keys.py +0 -0
  260. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/context_registry.py +0 -0
  261. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/data.py +0 -0
  262. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/di/__init__.py +0 -0
  263. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/di/provider.py +0 -0
  264. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/exceptions.py +0 -0
  265. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/lazy.py +0 -0
  266. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/protocols.py +0 -0
  267. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/registry/__init__.py +0 -0
  268. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/registry/core.py +0 -0
  269. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/trusted_html.py +0 -0
  270. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/types.py +0 -0
  271. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/primitives/typing.py +0 -0
  272. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/py.typed +0 -0
  273. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/__init__.py +0 -0
  274. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/core.py +0 -0
  275. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/exceptions.py +0 -0
  276. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/operators/__init__.py +0 -0
  277. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/operators/control.py +0 -0
  278. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/operators/time_ops.py +0 -0
  279. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/operators/transform.py +0 -0
  280. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/retry.py +0 -0
  281. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/reactive/subjects.py +0 -0
  282. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/result/__init__.py +0 -0
  283. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/result/_pipeline.py +0 -0
  284. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/result/errors.py +0 -0
  285. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/result/types.py +0 -0
  286. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/result/utils.py +0 -0
  287. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/saga/__init__.py +0 -0
  288. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/saga/base.py +0 -0
  289. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/saga/canonical_json.py +0 -0
  290. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/saga/content_addressed.py +0 -0
  291. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/__init__.py +0 -0
  292. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/config.py +0 -0
  293. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/constants.py +0 -0
  294. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/decorators.py +0 -0
  295. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/encryption/__init__.py +0 -0
  296. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/encryption/service.py +0 -0
  297. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/events.py +0 -0
  298. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/exceptions.py +0 -0
  299. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/guards/__init__.py +0 -0
  300. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/guards/chain.py +0 -0
  301. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/guards/decorator.py +0 -0
  302. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/hashing/__init__.py +0 -0
  303. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/hashing/ambient.py +0 -0
  304. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/hashing/digest.py +0 -0
  305. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/hashing/kdf.py +0 -0
  306. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/hooks.py +0 -0
  307. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/provider.py +0 -0
  308. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/py.typed +0 -0
  309. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/sanitization/__init__.py +0 -0
  310. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/sanitization/filename.py +0 -0
  311. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/sanitization/html.py +0 -0
  312. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/sanitization/sanitizer.py +0 -0
  313. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/sanitization/url.py +0 -0
  314. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/secrets/__init__.py +0 -0
  315. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/secrets/rotation.py +0 -0
  316. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/secrets/store.py +0 -0
  317. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/secrets/types.py +0 -0
  318. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/security/types.py +0 -0
  319. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/__init__.py +0 -0
  320. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/backends/__init__.py +0 -0
  321. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/backends/json.py +0 -0
  322. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/backends/py.typed +0 -0
  323. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/config.py +0 -0
  324. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/constants.py +0 -0
  325. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/di/__init__.py +0 -0
  326. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/di/provider.py +0 -0
  327. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/di/py.typed +0 -0
  328. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/domain/__init__.py +0 -0
  329. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/domain/domain.py +0 -0
  330. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/domain/py.typed +0 -0
  331. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/exceptions.py +0 -0
  332. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/module.py +0 -0
  333. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/py.typed +0 -0
  334. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/registry/__init__.py +0 -0
  335. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/registry/py.typed +0 -0
  336. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/registry/registry.py +0 -0
  337. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/schema/__init__.py +0 -0
  338. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/schema/py.typed +0 -0
  339. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/schema/schema.py +0 -0
  340. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/serialization/types.py +0 -0
  341. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/types.py +0 -0
  342. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/__init__.py +0 -0
  343. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/config.py +0 -0
  344. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/constants.py +0 -0
  345. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/decorators.py +0 -0
  346. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/engine/__init__.py +0 -0
  347. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/engine/coercion.py +0 -0
  348. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/engine/py.typed +0 -0
  349. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/engine/validator.py +0 -0
  350. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/exceptions.py +0 -0
  351. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/module.py +0 -0
  352. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/py.typed +0 -0
  353. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/rules/__init__.py +0 -0
  354. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/rules/py.typed +0 -0
  355. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/rules/rules.py +0 -0
  356. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/schema/__init__.py +0 -0
  357. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/schema/fields.py +0 -0
  358. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/schema/introspection.py +0 -0
  359. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/schema/py.typed +0 -0
  360. {quadkit-0.0.4 → quadkit-0.0.41}/src/quadkit/validation/types.py +0 -0
  361. {quadkit-0.0.4 → quadkit-0.0.41}/tests/conftest.py +0 -0
  362. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/__init__.py +0 -0
  363. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/__init__.py +0 -0
  364. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/_fixtures.py +0 -0
  365. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/conftest.py +0 -0
  366. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_boot_level.py +0 -0
  367. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_cross_method.py +0 -0
  368. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_dependency_chain.py +0 -0
  369. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_exports.py +0 -0
  370. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_importers.py +0 -0
  371. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_module_health_integration.py +0 -0
  372. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_module_lifecycle_integration.py +0 -0
  373. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_name_lookup.py +0 -0
  374. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/module/test_stub_enforcement_integration.py +0 -0
  375. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/di/test_visibility_enforcement_e2e.py +0 -0
  376. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/mapping/test_mapping_lifecycle.py +0 -0
  377. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/middleware/test_middleware_lifecycle.py +0 -0
  378. {quadkit-0.0.4 → quadkit-0.0.41}/tests/integration/test_full_pipeline.py +0 -0
  379. {quadkit-0.0.4 → quadkit-0.0.41}/tests/test.md +0 -0
  380. {quadkit-0.0.4 → quadkit-0.0.41}/tests/test_import_diagnostic.py +0 -0
  381. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/__init__.py +0 -0
  382. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/aop/test_interceptor_timeout.py +0 -0
  383. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/clock/test_clock.py +0 -0
  384. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/codegen/__init__.py +0 -0
  385. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/codegen/test_generator_base.py +0 -0
  386. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/codegen/test_staged_generation.py +0 -0
  387. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/codegen/test_template_overrides.py +0 -0
  388. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/conftest.py +0 -0
  389. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_bounded_channel.py +0 -0
  390. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_channel.py +0 -0
  391. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_config.py +0 -0
  392. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_constants.py +0 -0
  393. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_constants_new.py +0 -0
  394. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_exceptions.py +0 -0
  395. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_parallel.py +0 -0
  396. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_provider_config.py +0 -0
  397. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_rwlock.py +0 -0
  398. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_config_pool.py +0 -0
  399. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_dispatcher.py +0 -0
  400. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_sync_bridge.py +0 -0
  401. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_task_manager.py +0 -0
  402. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/concurrency/test_task_utils.py +0 -0
  403. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_config_constants_new.py +0 -0
  404. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_config_protocols.py +0 -0
  405. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_config_sources.py +0 -0
  406. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_env_interpolation.py +0 -0
  407. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_loader_fail_fast.py +0 -0
  408. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_logging_redaction_config.py +0 -0
  409. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_logging_sampling.py +0 -0
  410. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_profile_overlay.py +0 -0
  411. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_scoping.py +0 -0
  412. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_secrets_validator.py +0 -0
  413. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_strict_bool_env.py +0 -0
  414. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/config/test_strict_sections.py +0 -0
  415. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/test_context_correlation.py +0 -0
  416. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/test_core_constants.py +0 -0
  417. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/test_core_types.py +0 -0
  418. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/test_request_context_di.py +0 -0
  419. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/test_typing.py +0 -0
  420. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/core/validation/test_protocols.py +0 -0
  421. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/__init__.py +0 -0
  422. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/integration/test_provider.py +0 -0
  423. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/__init__.py +0 -0
  424. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/conftest.py +0 -0
  425. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_compiler.py +0 -0
  426. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_decorator.py +0 -0
  427. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_dynamic.py +0 -0
  428. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_errors.py +0 -0
  429. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_global.py +0 -0
  430. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_graph_reflection.py +0 -0
  431. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_health_graph.py +0 -0
  432. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_integration.py +0 -0
  433. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_introspection.py +0 -0
  434. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_lifecycle.py +0 -0
  435. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_module_lifecycle.py +0 -0
  436. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_reexport.py +0 -0
  437. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_registry.py +0 -0
  438. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_stub_compiler.py +0 -0
  439. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_stub_decorator.py +0 -0
  440. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/module/test_visibility.py +0 -0
  441. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_advanced_features.py +0 -0
  442. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_container_basics.py +0 -0
  443. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_container_builder.py +0 -0
  444. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_container_freeze.py +0 -0
  445. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_container_hardening.py +0 -0
  446. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_container_visibility.py +0 -0
  447. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_decorators.py +0 -0
  448. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_descriptor.py +0 -0
  449. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_di_constants_new.py +0 -0
  450. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_di_decorators.py +0 -0
  451. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_di_provider_config_wiring.py +0 -0
  452. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_diagnostics.py +0 -0
  453. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_extensions_discovery.py +0 -0
  454. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_extensions_validator.py +0 -0
  455. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_function_provider_boot.py +0 -0
  456. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_graph_validator.py +0 -0
  457. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_interceptor_registry.py +0 -0
  458. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_invoker_unit.py +0 -0
  459. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_lifecycle_orchestrator.py +0 -0
  460. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_module_validation.py +0 -0
  461. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_module_visibility_boot.py +0 -0
  462. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_module_visibility_enforcement.py +0 -0
  463. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_named_binding.py +0 -0
  464. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_orchestrator_health.py +0 -0
  465. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_basics.py +0 -0
  466. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_config_injection.py +0 -0
  467. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_conformance.py +0 -0
  468. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_orchestration.py +0 -0
  469. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_reset_state.py +0 -0
  470. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_provider_utils.py +0 -0
  471. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_scope_concurrency.py +0 -0
  472. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_scope_manager.py +0 -0
  473. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_service_store.py +0 -0
  474. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_type_hints.py +0 -0
  475. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/di/test_validation.py +0 -0
  476. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/conftest.py +0 -0
  477. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_aggregates.py +0 -0
  478. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain.py +0 -0
  479. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain_constants.py +0 -0
  480. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain_exceptions.py +0 -0
  481. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain_init.py +0 -0
  482. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain_model_strict.py +0 -0
  483. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_domain_module.py +0 -0
  484. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_models_factory.py +0 -0
  485. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/domain/test_value_object.py +0 -0
  486. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/identity/test_identity.py +0 -0
  487. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/logging/test_logging_constants_new.py +0 -0
  488. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/conftest.py +0 -0
  489. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_auto_map.py +0 -0
  490. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_exceptions.py +0 -0
  491. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_constants_new.py +0 -0
  492. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_exceptions.py +0 -0
  493. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_mapper.py +0 -0
  494. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_module.py +0 -0
  495. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_types.py +0 -0
  496. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_protocol.py +0 -0
  497. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/mapping/test_registry.py +0 -0
  498. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/conftest.py +0 -0
  499. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_builtins.py +0 -0
  500. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_chain.py +0 -0
  501. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_config_alignment.py +0 -0
  502. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_exception_filters.py +0 -0
  503. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_chain.py +0 -0
  504. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_constants.py +0 -0
  505. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_constants_new.py +0 -0
  506. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_ep_discovery.py +0 -0
  507. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_exceptions.py +0 -0
  508. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_module.py +0 -0
  509. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_routing.py +0 -0
  510. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_types.py +0 -0
  511. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_p2_retry_traceback.py +0 -0
  512. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_registry_defaults.py +0 -0
  513. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/middleware/test_registry_with_resilience.py +0 -0
  514. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/plugins/test_discovery.py +0 -0
  515. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/plugins/test_engine.py +0 -0
  516. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/plugins/test_state.py +0 -0
  517. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/plugins/test_state_hardening.py +0 -0
  518. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/plugins/test_validation.py +0 -0
  519. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/primitives/test_primitives_constants.py +0 -0
  520. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/primitives/test_registry_advanced.py +0 -0
  521. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/primitives/test_registry_introspection.py +0 -0
  522. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/primitives/test_trusted_html.py +0 -0
  523. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_control.py +0 -0
  524. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_core.py +0 -0
  525. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_facade.py +0 -0
  526. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_retry.py +0 -0
  527. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_subjects.py +0 -0
  528. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_time_ops.py +0 -0
  529. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/reactive/test_transform.py +0 -0
  530. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/__init__.py +0 -0
  531. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_exceptions.py +0 -0
  532. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_guards.py +0 -0
  533. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_hashing.py +0 -0
  534. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_package_hooks_p2.py +0 -0
  535. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_secret_rotation_policy.py +0 -0
  536. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_secrets_rotation.py +0 -0
  537. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_secrets_store.py +0 -0
  538. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_security_api.py +0 -0
  539. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_security_components_p2.py +0 -0
  540. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_security_constants.py +0 -0
  541. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_security_exceptions.py +0 -0
  542. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/security/test_security_types.py +0 -0
  543. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/conftest.py +0 -0
  544. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_schema.py +0 -0
  545. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_constants.py +0 -0
  546. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_di_provider.py +0 -0
  547. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_domain.py +0 -0
  548. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_init.py +0 -0
  549. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_json.py +0 -0
  550. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_registry.py +0 -0
  551. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_types.py +0 -0
  552. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_boot_validation.py +0 -0
  553. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_config_and_misc.py +0 -0
  554. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_constants.py +0 -0
  555. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_discovery.py +0 -0
  556. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_health_baseline.py +0 -0
  557. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_health_config.py +0 -0
  558. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_runner_and_lifespan.py +0 -0
  559. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_types.py +0 -0
  560. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_app_validation_and_misc.py +0 -0
  561. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_application.py +0 -0
  562. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_application_base.py +0 -0
  563. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_application_lifecycle.py +0 -0
  564. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_base_and_misc_exceptions.py +0 -0
  565. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_clock_and_pipeline_primitives.py +0 -0
  566. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_codegen.py +0 -0
  567. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_compiler_graph_utils.py +0 -0
  568. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_component_exceptions.py +0 -0
  569. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_concurrency_constants.py +0 -0
  570. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_concurrency_exceptions.py +0 -0
  571. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config.py +0 -0
  572. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_constants.py +0 -0
  573. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_hardening.py +0 -0
  574. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_quadkit.py +0 -0
  575. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_requirements.py +0 -0
  576. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_sources.py +0 -0
  577. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_types.py +0 -0
  578. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_config_watcher.py +0 -0
  579. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_container_exceptions.py +0 -0
  580. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_container_introspection.py +0 -0
  581. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_container_override.py +0 -0
  582. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_container_resolver_impl.py +0 -0
  583. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_container_runtime_mixin.py +0 -0
  584. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_context_registry.py +0 -0
  585. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_contract_completeness.py +0 -0
  586. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_core_builder.py +0 -0
  587. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_core_constants.py +0 -0
  588. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_core_lazy.py +0 -0
  589. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_core_module.py +0 -0
  590. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_core_pipeline.py +0 -0
  591. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_dependency_injector.py +0 -0
  592. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_di_constants.py +0 -0
  593. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_di_descriptor.py +0 -0
  594. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_di_module_constants.py +0 -0
  595. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_domain_constants.py +0 -0
  596. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_domain_exceptions.py +0 -0
  597. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_domain_model_base.py +0 -0
  598. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_dynamic_module.py +0 -0
  599. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_events_security_exceptions.py +0 -0
  600. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_execution_result.py +0 -0
  601. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_hatch_build_targets.py +0 -0
  602. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_health_probes.py +0 -0
  603. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_hook_registry.py +0 -0
  604. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_hook_registry_edge_cases.py +0 -0
  605. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_hook_registry_introspection.py +0 -0
  606. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_hook_registry_scenarios.py +0 -0
  607. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_identity_generators_and_ambient.py +0 -0
  608. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_infra_exceptions.py +0 -0
  609. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_input_sanitizers.py +0 -0
  610. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_interceptors.py +0 -0
  611. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_json_serialization_backend.py +0 -0
  612. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_apply_redaction.py +0 -0
  613. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_bridging.py +0 -0
  614. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_constants.py +0 -0
  615. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_debug.py +0 -0
  616. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_di_provider.py +0 -0
  617. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_factory.py +0 -0
  618. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_init.py +0 -0
  619. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_redaction.py +0 -0
  620. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_redaction_compound.py +0 -0
  621. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_logging_types.py +0 -0
  622. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_m13_m14_verification.py +0 -0
  623. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_mapper.py +0 -0
  624. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_mapper_enhanced.py +0 -0
  625. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_mapping.py +0 -0
  626. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_middleware_enhancements.py +0 -0
  627. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_middleware_exceptions.py +0 -0
  628. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_middleware_new.py +0 -0
  629. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_module_decorator.py +0 -0
  630. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_module_scan_and_provide.py +0 -0
  631. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_module_system.py +0 -0
  632. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_no_db_imports.py +0 -0
  633. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_observability.py +0 -0
  634. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_orchestrator_parallel.py +0 -0
  635. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_p2_scope_log_level.py +0 -0
  636. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_primitives_context.py +0 -0
  637. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_primitives_data.py +0 -0
  638. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_primitives_registry.py +0 -0
  639. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_provider_boot_enhanced.py +0 -0
  640. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_provider_decorator.py +0 -0
  641. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_quadkit_constants.py +0 -0
  642. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_quadkit_exceptions.py +0 -0
  643. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_repr_helpers.py +0 -0
  644. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_resilience_exceptions.py +0 -0
  645. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_combinators.py +0 -0
  646. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_core.py +0 -0
  647. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_pipeline.py +0 -0
  648. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_pipeline_and_utils.py +0 -0
  649. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_types_new.py +0 -0
  650. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_result_utils.py +0 -0
  651. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_round22_hardening.py +0 -0
  652. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_round41_hardening.py +0 -0
  653. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_saga_primitives.py +0 -0
  654. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_sampling_and_config.py +0 -0
  655. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_secret_stores_and_rotation.py +0 -0
  656. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_serialization_constants.py +0 -0
  657. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_serialization_exceptions.py +0 -0
  658. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_service_descriptor.py +0 -0
  659. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_structured_logging.py +0 -0
  660. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_time_ops.py +0 -0
  661. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_types.py +0 -0
  662. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_validation_coercion.py +0 -0
  663. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_validation_exceptions.py +0 -0
  664. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_validation_rules.py +0 -0
  665. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/test_validation_validator_engine.py +0 -0
  666. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/__init__.py +0 -0
  667. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/conftest.py +0 -0
  668. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_async_validator.py +0 -0
  669. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_coercion.py +0 -0
  670. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_helpers.py +0 -0
  671. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation.py +0 -0
  672. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_constants.py +0 -0
  673. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_constants_new.py +0 -0
  674. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_fields.py +0 -0
  675. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_fields_extended.py +0 -0
  676. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_init.py +0 -0
  677. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_introspection.py +0 -0
  678. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_module.py +0 -0
  679. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validation_types.py +0 -0
  680. {quadkit-0.0.4 → quadkit-0.0.41}/tests/unit/validation/test_validator.py +0 -0
@@ -0,0 +1,24 @@
1
+ # Generated public-repository ignore rules.
2
+ # Private monorepo paths are intentionally not referenced here.
3
+
4
+ __pycache__/
5
+ *.py[cod]
6
+ *.so
7
+ *.egg-info/
8
+ .venv/
9
+ venv/
10
+ .env
11
+ .env.*
12
+ !.env.example
13
+ .pytest_cache/
14
+ .ruff_cache/
15
+ .mypy_cache/
16
+ .coverage
17
+ coverage.xml
18
+ htmlcov/
19
+ build/
20
+ dist/
21
+ *.log
22
+ .DS_Store
23
+ .idea/
24
+ .vscode/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: quadkit
3
- Version: 0.0.4
3
+ Version: 0.0.41
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
@@ -5,7 +5,7 @@
5
5
  # Top-level env var prefix: QK_ (nested delimiter: __)
6
6
  #
7
7
  # Core fields are declared at the top level of this file.
8
- # Extension packages (quadkit-cache, quadkit-sql, etc.) each add their own
8
+ # Extension packages (the optional provider, the optional provider, etc.) each add their own
9
9
  # top-level section (e.g. cache:, sql:, ai:) read by their own Config class.
10
10
 
11
11
  # -- Application Identity --------------------------------------------------
@@ -226,7 +226,7 @@ security:
226
226
  pbkdf2_iterations: 600000
227
227
 
228
228
  # -- Observability ---------------------------------------------------------
229
- # NEW -- Core observability hooks. Full OTLP/Prometheus config is in quadkit-monitor.
229
+ # NEW -- Core observability hooks. Full OTLP/Prometheus config is in the optional provider.
230
230
 
231
231
  observability:
232
232
  # Master switch. When false, no-op implementations are used unconditionally.
@@ -10,10 +10,7 @@
10
10
  # - Structured logging foundation
11
11
  #
12
12
  # It does NOT contain:
13
- # - Database code → quadkit-sql
14
- # - Auth/JWT/crypto → quadkit-auth
15
13
  # - HTTP/ASGI/routing → quadkit-web
16
- # - Message queue / email → quadkit-queue / quadkit-mailer / quadkit-notification
17
14
  # - Any domain-specific feature
18
15
  #
19
16
  # Core should be lightweight. `pip install quadkit` should take seconds,
@@ -30,7 +27,7 @@ build-backend = "hatchling.build"
30
27
 
31
28
  [project]
32
29
  name = "quadkit"
33
- version = "0.0.4"
30
+ version = "0.0.41"
34
31
  description = "Async-first DI/IoC framework for Python — core package"
35
32
  readme = "README.md"
36
33
  requires-python = ">=3.11"
@@ -130,7 +127,7 @@ web = [
130
127
  # events, tasks, monitor, graphql) were removed. Those packages are not
131
128
  # published, so the extras resolved against name-reservation placeholders
132
129
  # that contain no code: `pip install quadkit[cache]` succeeded and then
133
- # `import quadkit.cache` raised ModuleNotFoundError. Install extension
130
+ # `import the optional provider module` raised ModuleNotFoundError. Install extension
134
131
  # packages directly once they are published.
135
132
 
136
133
  # =============================================================================
@@ -15,7 +15,7 @@ Kernel providers (boot order governed by provider ``priority`` and ``dependencie
15
15
  For a batteries-included bundle that also provides serialization and
16
16
  concurrency, use :class:`~quadkit.app.standard.StandardModule` instead.
17
17
 
18
- Extension packages (``quadkit-cache``, ``quadkit-auth``, ``quadkit-web``,
18
+ Extension packages (``the optional provider``, ``the optional provider``, ``quadkit-web``,
19
19
  etc.) register their own providers via ``app.add_provider()`` or
20
20
  ``app.add_module()``. ``CoreModule`` intentionally imports **only** from
21
21
  ``quadkit-contracts`` and the ``quadkit`` core package — zero cross-package
@@ -127,7 +127,7 @@ class ProviderScanner:
127
127
  def import_string(dotted_path: str) -> Any:
128
128
  """Import a dotted module path and return the attribute at the end.
129
129
 
130
- E.g. 'quadkit.sql.DatabaseService' imports 'quadkit.sql' and returns
130
+ E.g. 'the optional provider module' imports 'the optional provider module' and returns
131
131
  the 'DatabaseService' attribute.
132
132
  """
133
133
  try:
@@ -8,7 +8,7 @@ This base is deliberately storage-agnostic -- it imports no database driver --
8
8
  so in-memory and SQL implementations can share it:
9
9
 
10
10
  - ``quadkit.testing.memory.uow.InMemoryUnitOfWork`` supplies a no-op flush.
11
- - ``quadkit-sql``'s ``SQLUnitOfWork`` flushes through the active session.
11
+ - ``the optional provider``'s ``SQLUnitOfWork`` flushes through the active session.
12
12
  """
13
13
 
14
14
  from __future__ import annotations
@@ -55,7 +55,7 @@ def configure_logging(
55
55
  service_name: Application name injected into log context.
56
56
  levels: Per-logger level overrides. Keys are logger name prefixes,
57
57
  values are level strings. Example:
58
- ``{"quadkit.di": "DEBUG", "quadkit.resilience": "WARNING"}``.
58
+ ``{"quadkit.di": "DEBUG", "the optional provider module": "WARNING"}``.
59
59
  sampling_enabled: Enable deterministic log sampling.
60
60
  sampling_default_rate: Default sample rate (1.0 = log everything,
61
61
  0.1 = log ~10%).
@@ -23,7 +23,7 @@ logger = get_logger(__name__)
23
23
  class RetryMiddleware:
24
24
  """Middleware that retries the downstream handler on transient failures.
25
25
 
26
- Delegates to :func:`quadkit.resilience.retry` for backoff logic.
26
+ Delegates to :func:`the optional provider module` for backoff logic.
27
27
 
28
28
  Args:
29
29
  catch: Exception types considered retryable. Must be explicitly provided.
@@ -1,7 +1,7 @@
1
1
  """Core no-op observability primitives for Quadkit Framework.
2
2
 
3
3
  These implementations satisfy the observability contracts without requiring
4
- ``quadkit-monitor``. They are intentionally lightweight and safe to keep as
4
+ ``the optional provider``. They are intentionally lightweight and safe to keep as
5
5
  long-lived singletons in the container.
6
6
  """
7
7
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  These primitives live in the core ``quadkit`` package so that any extension
4
4
  package can build pipeline-compatible steps without depending on
5
- ``quadkit-workflow``.
5
+ ``the optional provider``.
6
6
  """
7
7
 
8
8
  from __future__ import annotations
@@ -83,7 +83,7 @@ def entry_point_catalog() -> dict[str, list[dict[str, str]]]:
83
83
  of entry-point metadata dicts.
84
84
 
85
85
  Returns:
86
- ``{"quadkit.cache.backends": [{"name": "redis", "value": "..."}]}``
86
+ ``{"the optional provider module": [{"name": "redis", "value": "..."}]}``
87
87
  """
88
88
  catalog: dict[str, list[dict[str, str]]] = {}
89
89
 
quadkit-0.0.4/.gitignore DELETED
@@ -1,183 +0,0 @@
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
-
153
- # Re-exclude private content under the tiered paths.
154
- # MUST come after the !...docs/** negations above — last match wins.
155
- core/quadkit*/docs/plans/
156
- packages/quadkit*/docs/plans/
157
- core/quadkit*/docs/**/
158
- packages/quadkit*/docs/**/
159
-
160
- # Re-exclude tooling artifacts under the tiered paths
161
- __pycache__/
162
- *.pyc
163
- *.pyo
164
- *.egg-info/
165
- .pytest_cache/
166
- .mypy_cache/
167
- .ruff_cache/
168
- htmlcov/
169
- .coverage
170
- coverage.xml
171
- test.db
172
- *.tmp
173
- *.log
174
- !core/quadkit*/tests/fixtures/test.db
175
- !packages/quadkit*/tests/fixtures/test.db
176
-
177
- # Allow the generated example gifs to be tracked (README hero images).
178
- !core/quadkit*/docs/gifs/
179
- !core/quadkit*/docs/gifs/**
180
- !packages/*/quadkit*/docs/gifs/
181
- !packages/*/quadkit*/docs/gifs/**
182
- examples/*/screenshot.png
183
- !banner*
@@ -1,73 +0,0 @@
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,252 +0,0 @@
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 |