python-ddd-framework 0.6.0__tar.gz → 0.7.0__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 (515) hide show
  1. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/PKG-INFO +29 -8
  2. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/README.md +28 -7
  3. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/pyproject.toml +1 -1
  4. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/pyproject.toml.orig +1 -1
  5. python_ddd_framework-0.7.0/src/python_ddd_framework/authorization/checking.py +35 -0
  6. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/generation.py +0 -9
  7. python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +1 -0
  8. python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +53 -0
  9. python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +48 -0
  10. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +1 -3
  11. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +2 -3
  12. python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +49 -0
  13. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +1 -2
  14. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +12 -8
  15. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +22 -10
  16. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/main.py.jinja +4 -1
  17. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +40 -6
  18. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +177 -30
  19. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/__init__.py +2 -0
  20. python_ddd_framework-0.7.0/src/python_ddd_framework/fastapi/access.py +127 -0
  21. python_ddd_framework-0.7.0/src/python_ddd_framework/fastapi/access_options.py +13 -0
  22. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/action.py +6 -0
  23. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/manual_action.py +33 -2
  24. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/module.py +2 -0
  25. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/authentication.py +21 -10
  26. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/options.py +0 -1
  27. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/runtime.py +41 -26
  28. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/request_context.py +10 -2
  29. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/routing.py +12 -5
  30. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/server.py +9 -0
  31. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/service_endpoints.py +5 -0
  32. python_ddd_framework-0.7.0/src/python_ddd_framework/fastapi/streaming.py +95 -0
  33. python_ddd_framework-0.7.0/src/python_ddd_framework/fastapi/transfer.py +263 -0
  34. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/dispatcher.py +2 -24
  35. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/scopes.py +5 -3
  36. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/formatting.py +1 -0
  37. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/manager.py +11 -2
  38. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -1
  39. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +0 -101
  40. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/handler.py.jinja +0 -45
  41. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/payload.py.jinja +0 -8
  42. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/handler.py.jinja +0 -35
  43. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/payload.py.jinja +0 -5
  44. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/schedule.py.jinja +0 -15
  45. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_maintenance_worker.py.jinja +0 -28
  46. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_statistics_worker.py.jinja +0 -26
  47. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/order_cache.py.jinja +0 -9
  48. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/statistics_cache.py.jinja +0 -9
  49. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/order_changed_handler.py.jinja +0 -23
  50. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_integration_service.py.jinja +0 -71
  51. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_observation_handler.py.jinja +0 -16
  52. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/order_reporting_service.py.jinja +0 -16
  53. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/order_timing_interceptor.py.jinja +0 -17
  54. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -115
  55. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/order_options.py.jinja +0 -7
  56. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_approval_service.py.jinja +0 -65
  57. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_management_service.py.jinja +0 -35
  58. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_query_service.py.jinja +0 -41
  59. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/approval_setting_observer.py.jinja +0 -17
  60. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/approve_order.py.jinja +0 -6
  61. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/create_order.py.jinja +0 -7
  62. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/order_reporting_service.py.jinja +0 -7
  63. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_approval_service.py.jinja +0 -13
  64. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_management_service.py.jinja +0 -10
  65. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_query_service.py.jinja +0 -12
  66. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_statistics_snapshot.py.jinja +0 -9
  67. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_view.py.jinja +0 -12
  68. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/order.py.jinja +0 -48
  69. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/order_changed.py.jinja +0 -13
  70. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/order_repository.py.jinja +0 -17
  71. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/order_seed_contributor.py.jinja +0 -22
  72. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/order_approval_service.py.jinja +0 -23
  73. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/approval_settings.py.jinja +0 -17
  74. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/order_title.py.jinja +0 -10
  75. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/order_constants.py.jinja +0 -3
  76. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/order_status.py.jinja +0 -6
  77. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/order_errors.py.jinja +0 -11
  78. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_messages.py.jinja +0 -26
  79. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_observation.py.jinja +0 -13
  80. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permission_provider.py.jinja +0 -19
  81. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permissions.py.jinja +0 -7
  82. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/money.py.jinja +0 -18
  83. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/export_filter.py.jinja +0 -15
  84. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/refresh_orders.py.jinja +0 -5
  85. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -103
  86. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/order_files.py.jinja +0 -76
  87. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +0 -1
  88. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/order_socket.py.jinja +0 -44
  89. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/order_model.py.jinja +0 -29
  90. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/order_repository.py.jinja +0 -81
  91. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +0 -1
  92. python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/test_domain.py.jinja +0 -19
  93. python_ddd_framework-0.6.0/src/python_ddd_framework/fastapi/transfer.py +0 -128
  94. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/LICENSE +0 -0
  95. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/__init__.py +0 -0
  96. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/__init__.py +0 -0
  97. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/build_spec.py +0 -0
  98. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/builder.py +0 -0
  99. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/composition.py +0 -0
  100. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/runtime.py +0 -0
  101. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
  102. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application/state.py +0 -0
  103. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/__init__.py +0 -0
  104. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/bindings.py +0 -0
  105. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/catalog.py +0 -0
  106. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/contracts.py +0 -0
  107. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/dispatcher.py +0 -0
  108. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/errors.py +0 -0
  109. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/invocation.py +0 -0
  110. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/module.py +0 -0
  111. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/application_services/pagination.py +0 -0
  112. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/__init__.py +0 -0
  113. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/contracts.py +0 -0
  114. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/control.py +0 -0
  115. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/module.py +0 -0
  116. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
  117. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
  118. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
  119. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
  120. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
  121. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
  122. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/__init__.py +0 -0
  123. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/catalog.py +0 -0
  124. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/contracts.py +0 -0
  125. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
  126. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/definitions.py +0 -0
  127. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/errors.py +0 -0
  128. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/module.py +0 -0
  129. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/authorization/options.py +0 -0
  130. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/__init__.py +0 -0
  131. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/application.py +0 -0
  132. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/child.py +0 -0
  133. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/contracts.py +0 -0
  134. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/declarations.py +0 -0
  135. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/lifecycle.py +0 -0
  136. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/local.py +0 -0
  137. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/locks.py +0 -0
  138. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/management.py +0 -0
  139. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/module.py +0 -0
  140. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/permissions.py +0 -0
  141. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_execution/processes.py +0 -0
  142. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
  143. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/catalog.py +0 -0
  144. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/contracts.py +0 -0
  145. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
  146. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/errors.py +0 -0
  147. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/execution.py +0 -0
  148. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
  149. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
  150. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +0 -0
  151. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
  152. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
  153. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +0 -0
  154. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
  155. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +0 -0
  156. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
  157. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
  158. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/__init__.py +0 -0
  159. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/catalog.py +0 -0
  160. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/contracts.py +0 -0
  161. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/errors.py +0 -0
  162. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/execution.py +0 -0
  163. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/background_workers/runtime.py +0 -0
  164. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/__init__.py +0 -0
  165. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/contracts.py +0 -0
  166. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/errors.py +0 -0
  167. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/module.py +0 -0
  168. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/naming.py +0 -0
  169. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/options.py +0 -0
  170. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/caching/unit_of_work.py +0 -0
  171. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/__init__.py +0 -0
  172. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/development.py +0 -0
  173. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/errors.py +0 -0
  174. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/inspection.py +0 -0
  175. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/project.py +0 -0
  176. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/cli/runtime.py +0 -0
  177. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/__init__.py +0 -0
  178. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/composition.py +0 -0
  179. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/contracts.py +0 -0
  180. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
  181. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/environment_source.py +0 -0
  182. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/immutability.py +0 -0
  183. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/input_shape.py +0 -0
  184. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/merge.py +0 -0
  185. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/root.py +0 -0
  186. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/sources.py +0 -0
  187. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/values.py +0 -0
  188. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
  189. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
  190. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/project_metadata.py +0 -0
  191. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/publication.py +0 -0
  192. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/source.py +0 -0
  193. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +0 -0
  194. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +0 -0
  195. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  196. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
  197. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +0 -0
  198. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +0 -0
  199. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
  200. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +0 -0
  201. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  202. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
  203. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +0 -0
  204. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers}/__init__.py.jinja +0 -0
  205. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching}/__init__.py.jinja +0 -0
  206. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers}/__init__.py.jinja +0 -0
  207. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services}/__init__.py.jinja +0 -0
  208. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services}/__init__.py.jinja +0 -0
  209. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors}/__init__.py.jinja +0 -0
  210. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options}/__init__.py.jinja +0 -0
  211. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services}/__init__.py.jinja +0 -0
  212. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers}/__init__.py.jinja +0 -0
  213. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
  214. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs}/__init__.py.jinja +0 -0
  215. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services}/__init__.py.jinja +0 -0
  216. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -0
  217. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services}/__init__.py.jinja +0 -0
  218. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views}/__init__.py.jinja +0 -0
  219. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
  220. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities}/__init__.py.jinja +0 -0
  221. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events}/__init__.py.jinja +0 -0
  222. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories}/__init__.py.jinja +0 -0
  223. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding}/__init__.py.jinja +0 -0
  224. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services}/__init__.py.jinja +0 -0
  225. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings}/__init__.py.jinja +0 -0
  226. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects}/__init__.py.jinja +0 -0
  227. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
  228. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants}/__init__.py.jinja +0 -0
  229. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums}/__init__.py.jinja +0 -0
  230. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors}/__init__.py.jinja +0 -0
  231. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages}/__init__.py.jinja +0 -0
  232. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions}/__init__.py.jinja +0 -0
  233. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +0 -0
  234. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
  235. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters}/__init__.py.jinja +0 -0
  236. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models}/__init__.py.jinja +0 -0
  237. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers}/__init__.py.jinja +0 -0
  238. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets}/__init__.py.jinja +0 -0
  239. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
  240. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -0
  241. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +0 -0
  242. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +0 -0
  243. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
  244. {python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers → python_ddd_framework-0.7.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests}/__init__.py.jinja +0 -0
  245. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +0 -0
  246. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.dockerignore +0 -0
  247. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.gitignore +0 -0
  248. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.python-version +0 -0
  249. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/Dockerfile +0 -0
  250. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/app.development.yaml.jinja +0 -0
  251. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.dev.yaml.jinja +0 -0
  252. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.production.yaml.jinja +0 -0
  253. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/pyproject.toml.jinja +0 -0
  254. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/__init__.py.jinja +0 -0
  255. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/module.py.jinja +0 -0
  256. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/conftest.py.jinja +0 -0
  257. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/host/test_http.py.jinja +0 -0
  258. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
  259. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
  260. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
  261. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/diagnostics/journal.py +0 -0
  262. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/diagnostics/model.py +0 -0
  263. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/diagnostics/source.py +0 -0
  264. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
  265. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/distributed_lock/contracts.py +0 -0
  266. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/distributed_lock/options.py +0 -0
  267. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/__init__.py +0 -0
  268. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/aggregates.py +0 -0
  269. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/entities.py +0 -0
  270. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/errors.py +0 -0
  271. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/event_values.py +0 -0
  272. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/services.py +0 -0
  273. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/domain/value_objects.py +0 -0
  274. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/__init__.py +0 -0
  275. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/base.py +0 -0
  276. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/business.py +0 -0
  277. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/configuration.py +0 -0
  278. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/diagnostics.py +0 -0
  279. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/lifecycle.py +0 -0
  280. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/modularity.py +0 -0
  281. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/errors/services.py +0 -0
  282. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/__init__.py +0 -0
  283. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/aggregate.py +0 -0
  284. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/catalog.py +0 -0
  285. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/contracts.py +0 -0
  286. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/contribution.py +0 -0
  287. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/discovery.py +0 -0
  288. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/entities.py +0 -0
  289. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/errors.py +0 -0
  290. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/module.py +0 -0
  291. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/runtime.py +0 -0
  292. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/subscription.py +0 -0
  293. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/events/unit_of_work.py +0 -0
  294. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/extensions/__init__.py +0 -0
  295. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/extensions/catalog.py +0 -0
  296. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/extensions/contracts.py +0 -0
  297. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/extensions/models.py +0 -0
  298. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/extensions/module.py +0 -0
  299. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/adapter.py +0 -0
  300. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/application_services.py +0 -0
  301. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/background.py +0 -0
  302. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/contracts.py +0 -0
  303. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/error_handlers.py +0 -0
  304. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/errors.py +0 -0
  305. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/filters.py +0 -0
  306. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/health.py +0 -0
  307. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/http.py +0 -0
  308. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/http_router.py +0 -0
  309. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/middleware.py +0 -0
  310. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/parameters.py +0 -0
  311. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
  312. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/connection.py +0 -0
  313. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/realtime/module.py +0 -0
  314. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
  315. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/service_routes.py +0 -0
  316. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/settings.py +0 -0
  317. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/tracing.py +0 -0
  318. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
  319. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/fastapi/uploads.py +0 -0
  320. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
  321. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/bridge.py +0 -0
  322. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/catalog.py +0 -0
  323. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/contracts.py +0 -0
  324. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/declarations.py +0 -0
  325. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/errors.py +0 -0
  326. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/module.py +0 -0
  327. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/options.py +0 -0
  328. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/runtime.py +0 -0
  329. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosted_services/state.py +0 -0
  330. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosting/__init__.py +0 -0
  331. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/hosting/instance.py +0 -0
  332. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/__init__.py +0 -0
  333. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/application.py +0 -0
  334. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/contracts.py +0 -0
  335. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/domain_rules.py +0 -0
  336. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/dtos.py +0 -0
  337. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/errors.py +0 -0
  338. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/extensions.py +0 -0
  339. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/http_api.py +0 -0
  340. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/management.py +0 -0
  341. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/models.py +0 -0
  342. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/module.py +0 -0
  343. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/options.py +0 -0
  344. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/passwords.py +0 -0
  345. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/permissions.py +0 -0
  346. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/seeding.py +0 -0
  347. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/services.py +0 -0
  348. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
  349. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
  350. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  351. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +0 -0
  352. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +0 -0
  353. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
  354. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/models.py +0 -0
  355. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/module.py +0 -0
  356. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/repository.py +0 -0
  357. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/session_security.py +0 -0
  358. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -0
  359. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/stores.py +0 -0
  360. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/identity/tokens.py +0 -0
  361. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/__init__.py +0 -0
  362. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/arguments.py +0 -0
  363. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/callables.py +0 -0
  364. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/contracts.py +0 -0
  365. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/contribution.py +0 -0
  366. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/entries.py +0 -0
  367. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/entrypoints.py +0 -0
  368. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/execution.py +0 -0
  369. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/function_runtime.py +0 -0
  370. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/interception.py +0 -0
  371. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/interceptors.py +0 -0
  372. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/managed_proxy.py +0 -0
  373. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/managed_services.py +0 -0
  374. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/methods.py +0 -0
  375. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/module.py +0 -0
  376. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/policies.py +0 -0
  377. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/runtime.py +0 -0
  378. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/signature.py +0 -0
  379. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/invocation/validation.py +0 -0
  380. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/__init__.py +0 -0
  381. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/composition.py +0 -0
  382. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/context.py +0 -0
  383. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/participants.py +0 -0
  384. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
  385. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/lifecycle/state.py +0 -0
  386. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/__init__.py +0 -0
  387. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/channel.py +0 -0
  388. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/contracts.py +0 -0
  389. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/module.py +0 -0
  390. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/options.py +0 -0
  391. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/receipt.py +0 -0
  392. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/messaging/runtime.py +0 -0
  393. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/__init__.py +0 -0
  394. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/contracts.py +0 -0
  395. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/discovery.py +0 -0
  396. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/graph.py +0 -0
  397. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/registry.py +0 -0
  398. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/modularity/selection.py +0 -0
  399. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/notifications/__init__.py +0 -0
  400. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/notifications/catalog.py +0 -0
  401. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/notifications/contracts.py +0 -0
  402. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/notifications/declarations.py +0 -0
  403. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/notifications/module.py +0 -0
  404. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/__init__.py +0 -0
  405. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/context.py +0 -0
  406. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/export.py +0 -0
  407. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/logging.py +0 -0
  408. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/options.py +0 -0
  409. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/observability/tracing.py +0 -0
  410. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/__init__.py +0 -0
  411. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/aliases.py +0 -0
  412. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/contribution.py +0 -0
  413. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/immutability.py +0 -0
  414. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/input_keys.py +0 -0
  415. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/issues.py +0 -0
  416. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/models.py +0 -0
  417. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/registry.py +0 -0
  418. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/schema.py +0 -0
  419. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/options/validation.py +0 -0
  420. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/py.typed +0 -0
  421. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/realtime/__init__.py +0 -0
  422. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/realtime/contracts.py +0 -0
  423. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
  424. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/realtime/messages.py +0 -0
  425. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/__init__.py +0 -0
  426. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/cache.py +0 -0
  427. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/cache_scripts.py +0 -0
  428. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/distributed_lock.py +0 -0
  429. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/lease_lock.py +0 -0
  430. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/module.py +0 -0
  431. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
  432. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/notifications.py +0 -0
  433. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/options.py +0 -0
  434. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/redis/runtime.py +0 -0
  435. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/seeding/__init__.py +0 -0
  436. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/seeding/contracts.py +0 -0
  437. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/seeding/module.py +0 -0
  438. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/seeding/runtime.py +0 -0
  439. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/__init__.py +0 -0
  440. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/arbitration.py +0 -0
  441. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/binding.py +0 -0
  442. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/composition.py +0 -0
  443. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/contribution.py +0 -0
  444. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/convention.py +0 -0
  445. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/convention_contracts.py +0 -0
  446. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/exposure.py +0 -0
  447. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/fixed_lifetime.py +0 -0
  448. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/framework_provider.py +0 -0
  449. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/native_graph.py +0 -0
  450. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/provider.py +0 -0
  451. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/registration.py +0 -0
  452. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/relocation.py +0 -0
  453. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/repository.py +0 -0
  454. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/services/runtime.py +0 -0
  455. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/__init__.py +0 -0
  456. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/application.py +0 -0
  457. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/binding.py +0 -0
  458. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/catalog.py +0 -0
  459. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/changes.py +0 -0
  460. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/contracts.py +0 -0
  461. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/declarations.py +0 -0
  462. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
  463. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/definitions.py +0 -0
  464. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/errors.py +0 -0
  465. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/handlers.py +0 -0
  466. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/management.py +0 -0
  467. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/manager.py +0 -0
  468. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/module.py +0 -0
  469. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/notifications.py +0 -0
  470. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/permissions.py +0 -0
  471. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/provider.py +0 -0
  472. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/refresh.py +0 -0
  473. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/refresh_module.py +0 -0
  474. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
  475. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
  476. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  477. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
  478. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
  479. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
  480. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/module.py +0 -0
  481. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
  482. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/store.py +0 -0
  483. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/settings/values.py +0 -0
  484. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/__init__.py +0 -0
  485. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
  486. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +0 -0
  487. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
  488. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/auditing.py +0 -0
  489. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
  490. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/extensions.py +0 -0
  491. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/metadata.py +0 -0
  492. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/metadata_builder.py +0 -0
  493. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/metadata_fingerprint.py +0 -0
  494. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/metadata_ownership.py +0 -0
  495. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/migration.py +0 -0
  496. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/migration_operations.py +0 -0
  497. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
  498. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/migration_sources.py +0 -0
  499. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/module.py +0 -0
  500. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/module_migration.py +0 -0
  501. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
  502. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/repository.py +0 -0
  503. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
  504. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/session_provider.py +0 -0
  505. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
  506. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/testing/__init__.py +0 -0
  507. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/testing/runtime.py +0 -0
  508. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/__init__.py +0 -0
  509. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/contracts.py +0 -0
  510. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/errors.py +0 -0
  511. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/lifecycle.py +0 -0
  512. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/module.py +0 -0
  513. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/unit_of_work/options.py +0 -0
  514. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/validation/__init__.py +0 -0
  515. {python_ddd_framework-0.6.0 → python_ddd_framework-0.7.0}/src/python_ddd_framework/validation/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-ddd-framework
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: Modular DDD application framework with project CLI and bundled templates
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  License-File: LICENSE
@@ -127,28 +127,33 @@ pddd add module conversions --template basic
127
127
 
128
128
  `dev-init` starts or reuses local PostgreSQL and Redis using `backend/app.development.yaml`. It preserves existing data; database migration and seeding are separate steps.
129
129
 
130
- `add module orders` generates an order-management example and registers it with the Host. The example includes an aggregate, service contracts, application services, persistence, HTTP endpoints, module tests, and a module README describing its actual behavior and boundaries.
130
+ `add module orders` generates a DDD skeleton named `orders` and registers its Application, SQLAlchemy, and HttpApi Modules with the Host. It retains all responsibility directories, package markers, lifecycle hooks, ORM Base, model discovery, migration registration, and a module README. It creates no business entities, services, tables, endpoints, tasks, or test cases. Add them from confirmed requirements. The former order implementation is available as a separate [order-management example](examples/order_management/README.md), outside the runtime wheel.
131
131
 
132
132
  `ddd` is the default six-layer template. `basic` generates only a Module, a synchronous Protocol service, its transient implementation, and an English README. It has no database/Redis requirement or implicit HTTP/interception. Both templates support `--dry-run` and refuse existing targets.
133
133
 
134
134
  ### 3. Initialize the database
135
135
 
136
- Apply the provider migrations selected by the generated Host, then generate the business module's first migration:
136
+ Apply the provider migrations selected by the generated Host:
137
137
 
138
138
  ```sh
139
139
  pddd db upgrade --module identity
140
140
  pddd db upgrade --module settings
141
141
  pddd db upgrade --module auditing
142
142
  pddd db upgrade --module background_jobs
143
+ pddd db seed --module identity
144
+ ```
145
+
146
+ An empty DDD skeleton retains model and migration registration but has no business tables or revisions. Add actual models before generating a business revision; migration commands still use the configured database. For a module named `orders`:
147
+
148
+ ```sh
143
149
  pddd db revision --module orders
144
150
  ```
145
151
 
146
- Review the generated revision in `backend/src/modules/orders/sqlalchemy/migrations/` before applying it. Then upgrade and seed:
152
+ Review the generated revision in `backend/src/modules/orders/sqlalchemy/migrations/` before applying it. Run seed only after declaring the intended contributors:
147
153
 
148
154
  ```sh
149
155
  pddd db upgrade --module orders
150
156
  pddd db status --module orders
151
- pddd db seed --module identity
152
157
  pddd db seed --module orders
153
158
  ```
154
159
 
@@ -162,7 +167,7 @@ pddd dev
162
167
 
163
168
  Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_username` and `identity.seed_admin_password` in `backend/app.development.yaml` to call `/api/auth/login`, then enter the returned access token in Swagger's **Authorize** dialog.
164
169
 
165
- With the `orders` module installed, you can create and query orders at `/api/orders`, approve an order at `/api/orders/{id}/approve`, and enqueue approval at `/api/orders/{id}/queue-approval`. Swagger shows the request schemas and all available operations. The example also includes file transfer and an authenticated WebSocket endpoint at `/ws/orders`.
170
+ The empty `orders` skeleton contributes no business routes. The independent [order-management example](examples/order_management/README.md) supplies `/api/orders`, approval and queued approval, file transfer, and an authenticated WebSocket at `/ws/orders`; use its initializer when you want to explore those capabilities.
166
171
 
167
172
  The default business API prefix is `/api`. Liveness and readiness are exposed at `/health/live` and `/health/ready`; readiness describes application lifecycle state, not continuous database or Redis health.
168
173
 
@@ -295,6 +300,22 @@ The image uses `python -m host.main` without development reload. Runtime install
295
300
 
296
301
  <a id="版本与升级"></a>
297
302
 
303
+ ### DDD skeleton generation (0.7)
304
+
305
+ New `ddd` modules contain the full responsibility directories and necessary composition, with no preset business code or tests. `basic` is unchanged. This affects subsequent generation only: upgrades do not delete or rewrite existing consumers' order code. Keep existing business contracts and data under their application owners. The former order implementation and its existing domain test now live in [the independent example](examples/order_management/README.md); its initializer uses the official CLI, requires a new destination, and is not bundled in the runtime wheel. No CLI parameter or dependency has been added.
306
+
307
+ <a id="streaming-and-access-migration-07-unreleased"></a>
308
+
309
+ ## Streaming and access migration (0.7)
310
+
311
+ - Move `fastapi_realtime.authentication_refresh_seconds` to `fastapi_access.authentication_refresh_seconds`. The shared `FastApiAccessOptions` applies to managed HTTP streams and WebSocket connections; its default is 60 seconds and minimum is 1. The old realtime field is rejected.
312
+ - HTTP endpoints on `HttpRouter` can directly yield synchronous or asynchronous values using native FastAPI SSE, JSONL, or `StreamingResponse`. Keep checks required before the response starts in preparation dependencies or Filters. Authorization precedes binding; function dependencies, commit, and business resource cleanup finish before sending. The framework does not read the first item during preparation. Application services keep their existing return contract and may return a native streaming Response.
313
+ - Register subscriptions acquired during preparation with a native request-scoped yield dependency. An unstarted generator's `finally` cannot release those subscriptions. Database work in preparation or during iteration must use an independent short service call or UoW and finish before yielding data. Generator cleanup that awaits must shield its own `finally`, without holding a cancellation scope across `yield`.
314
+ - Streams with authorization declarations automatically recheck identity and endpoint permissions, including while idle or blocked on a slow client. Anonymous declarations retain their meaning. WebSocket `invoke` continues to authorize each service call separately. Failed checks terminate the transport; after `http.response.start`, no replacement JSON response is sent.
315
+ - `run_host(..., timeout_graceful_shutdown=10)` passes a non-negative integer to Uvicorn. When that period expires, cancellation is requested and framework drain still waits for actual resource release. Direct Uvicorn consumers must configure its native timeout themselves. A synchronous generator's running `next()` must eventually return; a timeout does not abandon its thread.
316
+
317
+ Runnable examples: [HTTP generators](docs/development.md#http-生成器与持续访问). Verification and limitations: [0.7.0 status](docs/status.md#070-通用生成器与持续访问未发布).
318
+
298
319
  ## Capability module migration (0.4)
299
320
 
300
321
  Capability composition now uses the same `AppModule` model as customer modules. Existing applications must migrate their declarations together; there is no compatibility path.
@@ -452,7 +473,7 @@ Channels that must accept these callbacks declare `stopping_owners=(ServiceType,
452
473
 
453
474
  The developer-kit dependency constrains `binaryornot` to `0.5.x`, because `0.6.0` can classify bundled templates containing Chinese comments as binary and skip rendering them. Re-resolve the developer-kit environment when installing 0.4.0. Updating the dependency does not replace existing generated application code.
454
475
 
455
- The new `DomainService` marker uses existing constructor injection and transient REQUEST lifetime. It does not create transactions or expose HTTP endpoints. Newly generated modules place approval policy in `domain/services/order_approval_service.py`; existing projects can adopt that example explicitly after upgrading. The application checks existence and the submitted version before the domain policy; a stale or missing order therefore takes precedence over a disabled approval setting when both inputs are invalid. Domain rules, schema, and installation files are not automatically rewritten.
476
+ The new `DomainService` marker uses existing constructor injection and transient REQUEST lifetime. It does not create transactions or expose HTTP endpoints. The independent order example places approval policy in `domain/services/order_approval_service.py`; existing projects can adopt it explicitly after upgrading. The example application checks existence and the submitted version before the domain policy; a stale or missing order therefore takes precedence over a disabled approval setting when both inputs are invalid. Domain rules, schema, and installation files are not automatically rewritten.
456
477
 
457
478
  <a id="框架更名迁移未发布"></a>
458
479
 
@@ -541,7 +562,7 @@ The engineering guides below are maintained in Chinese in the private GitHub rep
541
562
  | Check release evidence and remaining validation limits | [Status and validation](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md) |
542
563
  | Change the framework itself | [Contributor guidance](https://github.com/componet-architecture/python-ddd-framework/blob/main/AGENTS.md) and [focused reading paths](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/README.md#重构的最短阅读路径) |
543
564
 
544
- Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md` guides contributors from business rules and ownership to framework capability selection and verification. The development guide maps common tasks to framework capabilities and includes commands to locate the installed version's source and bundled examples; each DDD module README records the sample business model and traces approval through its owners. The application maintains these documents after generation; framework upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference when updating affected guidance, preserving their own business model and decisions.
565
+ Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. They require an owner/layer/directory/API check before implementation and a review of the seven design principles, DDD boundaries, and actual verification before delivery. The development guide provides CLI entry points, installed-artifact/source comparison, capability recipes, and a complete native HTTP generator example; architecture owns streaming/access boundaries, and the generated README owns configuration migration and shutdown operations. These instructions do not imply an automated architecture gate. Each DDD module README records the empty skeleton and guides the first authorized use case; the independent order example owns its own business documentation and acceptance source. The application maintains these documents after generation; upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference while preserving application rules and decisions. A user-provided framework checkout is also read-only; matching version numbers alone do not prove it matches the consumed artifact.
545
566
 
546
567
  ## License
547
568
 
@@ -83,28 +83,33 @@ pddd add module conversions --template basic
83
83
 
84
84
  `dev-init` starts or reuses local PostgreSQL and Redis using `backend/app.development.yaml`. It preserves existing data; database migration and seeding are separate steps.
85
85
 
86
- `add module orders` generates an order-management example and registers it with the Host. The example includes an aggregate, service contracts, application services, persistence, HTTP endpoints, module tests, and a module README describing its actual behavior and boundaries.
86
+ `add module orders` generates a DDD skeleton named `orders` and registers its Application, SQLAlchemy, and HttpApi Modules with the Host. It retains all responsibility directories, package markers, lifecycle hooks, ORM Base, model discovery, migration registration, and a module README. It creates no business entities, services, tables, endpoints, tasks, or test cases. Add them from confirmed requirements. The former order implementation is available as a separate [order-management example](examples/order_management/README.md), outside the runtime wheel.
87
87
 
88
88
  `ddd` is the default six-layer template. `basic` generates only a Module, a synchronous Protocol service, its transient implementation, and an English README. It has no database/Redis requirement or implicit HTTP/interception. Both templates support `--dry-run` and refuse existing targets.
89
89
 
90
90
  ### 3. Initialize the database
91
91
 
92
- Apply the provider migrations selected by the generated Host, then generate the business module's first migration:
92
+ Apply the provider migrations selected by the generated Host:
93
93
 
94
94
  ```sh
95
95
  pddd db upgrade --module identity
96
96
  pddd db upgrade --module settings
97
97
  pddd db upgrade --module auditing
98
98
  pddd db upgrade --module background_jobs
99
+ pddd db seed --module identity
100
+ ```
101
+
102
+ An empty DDD skeleton retains model and migration registration but has no business tables or revisions. Add actual models before generating a business revision; migration commands still use the configured database. For a module named `orders`:
103
+
104
+ ```sh
99
105
  pddd db revision --module orders
100
106
  ```
101
107
 
102
- Review the generated revision in `backend/src/modules/orders/sqlalchemy/migrations/` before applying it. Then upgrade and seed:
108
+ Review the generated revision in `backend/src/modules/orders/sqlalchemy/migrations/` before applying it. Run seed only after declaring the intended contributors:
103
109
 
104
110
  ```sh
105
111
  pddd db upgrade --module orders
106
112
  pddd db status --module orders
107
- pddd db seed --module identity
108
113
  pddd db seed --module orders
109
114
  ```
110
115
 
@@ -118,7 +123,7 @@ pddd dev
118
123
 
119
124
  Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_username` and `identity.seed_admin_password` in `backend/app.development.yaml` to call `/api/auth/login`, then enter the returned access token in Swagger's **Authorize** dialog.
120
125
 
121
- With the `orders` module installed, you can create and query orders at `/api/orders`, approve an order at `/api/orders/{id}/approve`, and enqueue approval at `/api/orders/{id}/queue-approval`. Swagger shows the request schemas and all available operations. The example also includes file transfer and an authenticated WebSocket endpoint at `/ws/orders`.
126
+ The empty `orders` skeleton contributes no business routes. The independent [order-management example](examples/order_management/README.md) supplies `/api/orders`, approval and queued approval, file transfer, and an authenticated WebSocket at `/ws/orders`; use its initializer when you want to explore those capabilities.
122
127
 
123
128
  The default business API prefix is `/api`. Liveness and readiness are exposed at `/health/live` and `/health/ready`; readiness describes application lifecycle state, not continuous database or Redis health.
124
129
 
@@ -251,6 +256,22 @@ The image uses `python -m host.main` without development reload. Runtime install
251
256
 
252
257
  <a id="版本与升级"></a>
253
258
 
259
+ ### DDD skeleton generation (0.7)
260
+
261
+ New `ddd` modules contain the full responsibility directories and necessary composition, with no preset business code or tests. `basic` is unchanged. This affects subsequent generation only: upgrades do not delete or rewrite existing consumers' order code. Keep existing business contracts and data under their application owners. The former order implementation and its existing domain test now live in [the independent example](examples/order_management/README.md); its initializer uses the official CLI, requires a new destination, and is not bundled in the runtime wheel. No CLI parameter or dependency has been added.
262
+
263
+ <a id="streaming-and-access-migration-07-unreleased"></a>
264
+
265
+ ## Streaming and access migration (0.7)
266
+
267
+ - Move `fastapi_realtime.authentication_refresh_seconds` to `fastapi_access.authentication_refresh_seconds`. The shared `FastApiAccessOptions` applies to managed HTTP streams and WebSocket connections; its default is 60 seconds and minimum is 1. The old realtime field is rejected.
268
+ - HTTP endpoints on `HttpRouter` can directly yield synchronous or asynchronous values using native FastAPI SSE, JSONL, or `StreamingResponse`. Keep checks required before the response starts in preparation dependencies or Filters. Authorization precedes binding; function dependencies, commit, and business resource cleanup finish before sending. The framework does not read the first item during preparation. Application services keep their existing return contract and may return a native streaming Response.
269
+ - Register subscriptions acquired during preparation with a native request-scoped yield dependency. An unstarted generator's `finally` cannot release those subscriptions. Database work in preparation or during iteration must use an independent short service call or UoW and finish before yielding data. Generator cleanup that awaits must shield its own `finally`, without holding a cancellation scope across `yield`.
270
+ - Streams with authorization declarations automatically recheck identity and endpoint permissions, including while idle or blocked on a slow client. Anonymous declarations retain their meaning. WebSocket `invoke` continues to authorize each service call separately. Failed checks terminate the transport; after `http.response.start`, no replacement JSON response is sent.
271
+ - `run_host(..., timeout_graceful_shutdown=10)` passes a non-negative integer to Uvicorn. When that period expires, cancellation is requested and framework drain still waits for actual resource release. Direct Uvicorn consumers must configure its native timeout themselves. A synchronous generator's running `next()` must eventually return; a timeout does not abandon its thread.
272
+
273
+ Runnable examples: [HTTP generators](docs/development.md#http-生成器与持续访问). Verification and limitations: [0.7.0 status](docs/status.md#070-通用生成器与持续访问未发布).
274
+
254
275
  ## Capability module migration (0.4)
255
276
 
256
277
  Capability composition now uses the same `AppModule` model as customer modules. Existing applications must migrate their declarations together; there is no compatibility path.
@@ -408,7 +429,7 @@ Channels that must accept these callbacks declare `stopping_owners=(ServiceType,
408
429
 
409
430
  The developer-kit dependency constrains `binaryornot` to `0.5.x`, because `0.6.0` can classify bundled templates containing Chinese comments as binary and skip rendering them. Re-resolve the developer-kit environment when installing 0.4.0. Updating the dependency does not replace existing generated application code.
410
431
 
411
- The new `DomainService` marker uses existing constructor injection and transient REQUEST lifetime. It does not create transactions or expose HTTP endpoints. Newly generated modules place approval policy in `domain/services/order_approval_service.py`; existing projects can adopt that example explicitly after upgrading. The application checks existence and the submitted version before the domain policy; a stale or missing order therefore takes precedence over a disabled approval setting when both inputs are invalid. Domain rules, schema, and installation files are not automatically rewritten.
432
+ The new `DomainService` marker uses existing constructor injection and transient REQUEST lifetime. It does not create transactions or expose HTTP endpoints. The independent order example places approval policy in `domain/services/order_approval_service.py`; existing projects can adopt it explicitly after upgrading. The example application checks existence and the submitted version before the domain policy; a stale or missing order therefore takes precedence over a disabled approval setting when both inputs are invalid. Domain rules, schema, and installation files are not automatically rewritten.
412
433
 
413
434
  <a id="框架更名迁移未发布"></a>
414
435
 
@@ -497,7 +518,7 @@ The engineering guides below are maintained in Chinese in the private GitHub rep
497
518
  | Check release evidence and remaining validation limits | [Status and validation](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md) |
498
519
  | Change the framework itself | [Contributor guidance](https://github.com/componet-architecture/python-ddd-framework/blob/main/AGENTS.md) and [focused reading paths](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/README.md#重构的最短阅读路径) |
499
520
 
500
- Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md` guides contributors from business rules and ownership to framework capability selection and verification. The development guide maps common tasks to framework capabilities and includes commands to locate the installed version's source and bundled examples; each DDD module README records the sample business model and traces approval through its owners. The application maintains these documents after generation; framework upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference when updating affected guidance, preserving their own business model and decisions.
521
+ Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. They require an owner/layer/directory/API check before implementation and a review of the seven design principles, DDD boundaries, and actual verification before delivery. The development guide provides CLI entry points, installed-artifact/source comparison, capability recipes, and a complete native HTTP generator example; architecture owns streaming/access boundaries, and the generated README owns configuration migration and shutdown operations. These instructions do not imply an automated architecture gate. Each DDD module README records the empty skeleton and guides the first authorized use case; the independent order example owns its own business documentation and acceptance source. The application maintains these documents after generation; upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference while preserving application rules and decisions. A user-provided framework checkout is also read-only; matching version numbers alone do not prove it matches the consumed artifact.
501
522
 
502
523
  ## License
503
524
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-ddd-framework"
3
- version = "0.6.0"
3
+ version = "0.7.0"
4
4
  description = "Modular DDD application framework with project CLI and bundled templates"
5
5
  readme = "README.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-ddd-framework"
3
- version = "0.6.0"
3
+ version = "0.7.0"
4
4
  description = "Modular DDD application framework with project CLI and bundled templates"
5
5
  readme = "README.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -0,0 +1,35 @@
1
+ """所有调用与持续访问边界共用的授权规则;不拥有传输或调用 scope。"""
2
+
3
+ from collections.abc import Callable
4
+
5
+ from dishka import AsyncContainer
6
+ from dishka.exceptions import NoFactoryError
7
+
8
+ from ..options import Options
9
+ from .contracts import CurrentUser, PermissionChecker, _AuthorizationRequirement
10
+ from .errors import PermissionCheckerUnavailableError, PermissionDeniedError, UnauthenticatedError
11
+ from .options import AuthorizationOptions
12
+
13
+
14
+ async def _check_authorization(
15
+ container: AsyncContainer,
16
+ get_user: Callable[[], CurrentUser],
17
+ requirement: _AuthorizationRequirement,
18
+ ) -> None:
19
+ if requirement.allows_anonymous or not requirement.requires_authenticated_user:
20
+ return
21
+ if (await container.get(Options[AuthorizationOptions])).value.always_allow:
22
+ return
23
+ # 认证阶段也可调用无需授权的服务;只有实际校验身份时才读取最终 CurrentUser。
24
+ user = get_user()
25
+ if not user.is_authenticated:
26
+ raise UnauthenticatedError
27
+ if not requirement.permissions:
28
+ return
29
+ try:
30
+ checker = await container.get(PermissionChecker)
31
+ except NoFactoryError:
32
+ raise PermissionCheckerUnavailableError from None
33
+ for permission in requirement.permissions:
34
+ if not await checker.is_granted(user, permission):
35
+ raise PermissionDeniedError(permission=str(permission))
@@ -219,15 +219,6 @@ def _add_module(
219
219
  )
220
220
  return
221
221
  context = {"module_name": package, "class_prefix": class_prefix}
222
- if template == "ddd":
223
- from ..fastapi.service_routes import _operation_id, _service_path
224
-
225
- # HTTP 身份由正式约定推导;basic 不读取或生成传输层配置。
226
- http_identity = type(class_prefix + "ApplicationService", (), {})
227
- context.update(
228
- http_service_path=_service_path("", http_identity),
229
- http_operation_prefix=_operation_id(http_identity, ""),
230
- )
231
222
  with publication.step("render"):
232
223
  staged = _render(
233
224
  "basic" if template == "basic" else "module", context, staging=publication.rendering
@@ -0,0 +1 @@
1
+ {"module_name": "capability", "class_prefix": "Capability"}
@@ -0,0 +1,53 @@
1
+ # {{ cookiecutter.class_prefix }} module
2
+
3
+ This is a DDD module skeleton. It has no business rules, entities, DTOs, services, endpoints, database tables, seed data, background tasks, or test cases. The Host selects its Application, SQLAlchemy, and HttpApi Modules; infrastructure providers remain Host-owned.
4
+
5
+ [Project setup](../../../../README.md) · [Working rules](../../../../AGENTS.md) · [Architecture](../../../../docs/architecture.md) · [Design checks](../../../../docs/development.md#design-and-delivery-checks) · [Directory rules](../../../../docs/development.md#module-layout-and-coding-rules)
6
+
7
+ ## Record the business responsibility
8
+
9
+ Before implementation, record the confirmed capability, caller, business language, public contracts, and data owner here. For each invariant, identify its aggregate or service owner, business operation, and a concrete rejection example. Record consistency, concurrency, idempotency, failure-after-commit, and collaboration decisions when relevant. Unresolved questions remain explicit; directory names and documentation recipes do not authorize business rules.
10
+
11
+ Keep this README current with the implementation and its actual verification. A small correction may reference existing conclusions rather than creating another design document.
12
+
13
+ ## Layers and initial wiring
14
+
15
+ | Layer | Responsibility and current state |
16
+ | --- | --- |
17
+ | `domain_shared` | Shared contract values, constants, errors, permissions, and messages. No business declarations or framework capability dependencies yet. |
18
+ | `domain` | Aggregates, domain services, repository contracts, events, settings, and seed contributors. Depends on DomainShared; it contains no business implementation. |
19
+ | `application_contracts` | Public service Protocols and input/output DTOs. Depends on DomainShared; contracts do not depend on Domain or implementations. |
20
+ | `application` | Use-case orchestration and handlers. Depends on Domain and ApplicationContracts; its package is scanned but has no services or task declarations. |
21
+ | `sqlalchemy` | Persistence implementations and owned migrations. Depends on Domain and SqlAlchemyPersistenceModule; it retains its Base, model discovery, repository scanning, and migration registration. |
22
+ | `http_api` | Transport declarations. Depends on FastApiModule and exposes this module's contracts; empty contracts produce no business endpoints. |
23
+
24
+ All responsibility directories and package markers are retained for navigation. Add implementations only for authorized requirements; do not fill them with placeholder interfaces or services. `module.py` owns dependencies, registration, and the seven lifecycle hooks. Empty hooks use `pass`; package markers contain no business or compatibility exports. `tests/` initially contains only its package marker.
25
+
26
+ ## Implement the first use case
27
+
28
+ 1. Identify **owner -> layer -> directory -> verified framework API**, following the project design checks. Add shared values only when they are actually shared.
29
+ 2. Model aggregate transitions and invariants in Domain. Define domain-facing repositories without ORM or Session types. Add public DTOs and service Protocols in ApplicationContracts, then implement the authorized use case in Application.
30
+ 3. Declare the framework capability dependencies where used: for example, ApplicationServicesModule for application services, AuthorizationModule for permission definitions, or DataSeedingModule for seed contributors. The Host's provider choices do not repair missing module dependencies.
31
+ 4. Implement persistence under `sqlalchemy/models` and `sqlalchemy/repositories`. The existing [Base](sqlalchemy/models/base.py) and [registration](sqlalchemy/module.py) own this module's metadata and migration branch. Business models, tables, and schema decisions must come from requirements.
32
+ 5. Conventional HTTP exposure can discover the new public service contracts. Add manual routers only where the transport requires them; keep use-case rules out of HTTP. Register workers, jobs, hosted services, schedules, or event handlers explicitly when required.
33
+ 6. Update this responsibility record and run the smallest relevant existing checks. New tests and infrastructure validation require the task's authorization; neither an empty test directory nor successful composition proves business correctness.
34
+
35
+ ## Persistence and verification
36
+
37
+ An empty skeleton retains model and migration registration but has no business tables or revisions. Migration commands still use the configured database; an empty registered Base is different from a module with no model registration. Add actual models before generating a business revision, and review it before applying:
38
+
39
+ ```sh
40
+ pddd db revision --module {{ cookiecutter.module_name }}
41
+ pddd db upgrade --module {{ cookiecutter.module_name }}
42
+ pddd db status --module {{ cookiecutter.module_name }}
43
+ ```
44
+
45
+ Run `pddd db seed --module {{ cookiecutter.module_name }}` only after declaring the intended contributors and preparing their database. Keep applied revisions immutable and upgrade prerequisites explicitly. Host startup never migrates or seeds.
46
+
47
+ Run installed `pddd` commands from any application directory. Run native tools from `backend/`:
48
+
49
+ ```sh
50
+ uv build --no-sources
51
+ ```
52
+
53
+ After authorized test cases exist, run `uv run pytest src/modules/{{ cookiecutter.module_name }}/tests`. The empty skeleton has no tests to pass. Host tests cover generic health and identity and require their configured infrastructure; see the project verification guide. Module tests are excluded from production wheels and service discovery. The `basic` template remains available for an ordinary in-process service without DDD layers.
@@ -0,0 +1,48 @@
1
+ """应用层拥有用例编排;按真实业务需要声明能力依赖,provider 由 Host 选择。"""
2
+
3
+ from modules.{{ cookiecutter.module_name }}.domain.module import {{ cookiecutter.class_prefix }}DomainModule
4
+ from modules.{{ cookiecutter.module_name }}.application_contracts.module import {{ cookiecutter.class_prefix }}ApplicationContractsModule
5
+
6
+ from python_ddd_framework import (
7
+ AppModule,
8
+ ConfigureContext,
9
+ InitializeContext,
10
+ PostConfigureContext,
11
+ PostInitializeContext,
12
+ PreConfigureContext,
13
+ PreInitializeContext,
14
+ ShutdownContext,
15
+ )
16
+
17
+
18
+ class {{ cookiecutter.class_prefix }}ApplicationModule(AppModule):
19
+ dependencies = ({{ cookiecutter.class_prefix }}DomainModule, {{ cookiecutter.class_prefix }}ApplicationContractsModule)
20
+ scan_packages = (__package__,)
21
+
22
+ def pre_configure(self, context: PreConfigureContext) -> None:
23
+ # 贡献影响后续注册的 PreOptions;此阶段不启动资源。
24
+ pass
25
+
26
+ def configure(self, context: ConfigureContext) -> None:
27
+ # 注册服务和普通 Options;业务执行留在所属能力。
28
+ pass
29
+
30
+ def post_configure(self, context: PostConfigureContext) -> None:
31
+ # 读取已冻结 PreOptions,补充 Options 或覆盖已有服务注册。
32
+ pass
33
+
34
+ async def pre_initialize(self, context: PreInitializeContext) -> None:
35
+ # 异步初始化前置条件;依赖模块在同一阶段先完成。
36
+ pass
37
+
38
+ async def initialize(self, context: InitializeContext) -> None:
39
+ # 初始化本模块资源;不手工启动框架管理的 Worker 或 HostedService。
40
+ pass
41
+
42
+ async def post_initialize(self, context: PostInitializeContext) -> None:
43
+ # 完成初始化收尾;应用此时尚未对外就绪。
44
+ pass
45
+
46
+ async def shutdown(self, context: ShutdownContext) -> None:
47
+ # 逆依赖关闭本模块拥有的资源;返回前等待清理结束。
48
+ pass
@@ -4,8 +4,6 @@ from modules.{{ cookiecutter.module_name }}.domain_shared.module import {{ cooki
4
4
 
5
5
  from python_ddd_framework import (
6
6
  AppModule,
7
- SettingsModule,
8
- DataSeedingModule,
9
7
  ConfigureContext,
10
8
  InitializeContext,
11
9
  PostConfigureContext,
@@ -17,7 +15,7 @@ from python_ddd_framework import (
17
15
 
18
16
 
19
17
  class {{ cookiecutter.class_prefix }}DomainModule(AppModule):
20
- dependencies = ({{ cookiecutter.class_prefix }}DomainSharedModule, SettingsModule, DataSeedingModule)
18
+ dependencies = ({{ cookiecutter.class_prefix }}DomainSharedModule,)
21
19
  scan_packages = (__package__,)
22
20
 
23
21
  def pre_configure(self, context: PreConfigureContext) -> None:
@@ -1,8 +1,7 @@
1
- """共享层只发布业务常量与权限,不引用基础设施。"""
1
+ """共享层拥有跨层契约值;按实际声明增加能力依赖,不预设业务规则。"""
2
2
 
3
3
  from python_ddd_framework import (
4
4
  AppModule,
5
- AuthorizationModule,
6
5
  ConfigureContext,
7
6
  InitializeContext,
8
7
  PostConfigureContext,
@@ -14,7 +13,7 @@ from python_ddd_framework import (
14
13
 
15
14
 
16
15
  class {{ cookiecutter.class_prefix }}DomainSharedModule(AppModule):
17
- dependencies = (AuthorizationModule,)
16
+ dependencies = ()
18
17
  scan_packages = (__package__,)
19
18
 
20
19
  def pre_configure(self, context: PreConfigureContext) -> None:
@@ -0,0 +1,49 @@
1
+ """HTTP 仅暴露本模块公开契约;空契约不产生业务端点。"""
2
+
3
+ from modules.{{ cookiecutter.module_name }}.application_contracts.module import {{ cookiecutter.class_prefix }}ApplicationContractsModule
4
+
5
+ from python_ddd_framework import (
6
+ AppModule,
7
+ ConfigureContext,
8
+ InitializeContext,
9
+ PostConfigureContext,
10
+ PostInitializeContext,
11
+ PreConfigureContext,
12
+ PreInitializeContext,
13
+ ShutdownContext,
14
+ )
15
+
16
+ from python_ddd_framework.fastapi import FastApiModule, exposes_application_services
17
+
18
+
19
+ @exposes_application_services({{ cookiecutter.class_prefix }}ApplicationContractsModule)
20
+ class {{ cookiecutter.class_prefix }}HttpApiModule(AppModule):
21
+ dependencies = (FastApiModule,)
22
+
23
+ def pre_configure(self, context: PreConfigureContext) -> None:
24
+ # 贡献影响后续注册的 PreOptions;此阶段不启动资源。
25
+ pass
26
+
27
+ def configure(self, context: ConfigureContext) -> None:
28
+ # 注册服务和普通 Options;业务执行留在所属能力。
29
+ pass
30
+
31
+ def post_configure(self, context: PostConfigureContext) -> None:
32
+ # 读取已冻结 PreOptions,补充 Options 或覆盖已有服务注册。
33
+ pass
34
+
35
+ async def pre_initialize(self, context: PreInitializeContext) -> None:
36
+ # 异步初始化前置条件;依赖模块在同一阶段先完成。
37
+ pass
38
+
39
+ async def initialize(self, context: InitializeContext) -> None:
40
+ # 初始化本模块资源;不手工启动框架管理的 Worker 或 HostedService。
41
+ pass
42
+
43
+ async def post_initialize(self, context: PostInitializeContext) -> None:
44
+ # 完成初始化收尾;应用此时尚未对外就绪。
45
+ pass
46
+
47
+ async def shutdown(self, context: ShutdownContext) -> None:
48
+ # 逆依赖关闭本模块拥有的资源;返回前等待清理结束。
49
+ pass
@@ -1,7 +1,6 @@
1
1
  """provider 依赖领域契约;Host 显式选择此实现。"""
2
2
 
3
3
  from modules.{{ cookiecutter.module_name }}.domain.module import {{ cookiecutter.class_prefix }}DomainModule
4
- from modules.{{ cookiecutter.module_name }}.domain_shared.constants.order_constants import MODULE_NAME
5
4
  from modules.{{ cookiecutter.module_name }}.sqlalchemy.models.base import {{ cookiecutter.class_prefix }}Base
6
5
 
7
6
  from python_ddd_framework import (
@@ -26,7 +25,7 @@ from python_ddd_framework.sqlalchemy import (
26
25
  models_package=__package__ + ".models",
27
26
  metadata={{ cookiecutter.class_prefix }}Base.metadata,
28
27
  migrations_package=__package__ + ".migrations",
29
- branch_label=MODULE_NAME,
28
+ branch_label="{{ cookiecutter.module_name }}",
30
29
  )
31
30
  )
32
31
  class {{ cookiecutter.class_prefix }}SqlAlchemyModule(AppModule):
@@ -5,17 +5,19 @@ These instructions apply to this application and its business modules. Follow th
5
5
  ## Start with the affected capability
6
6
 
7
7
  1. Check the branch, worktree, requested outcome, and existing changes before editing. Analysis and review requests are read-only unless implementation is requested.
8
- 2. Use [README](README.md) for setup and commands, [architecture](docs/architecture.md) for ownership and dependencies, and the relevant section of [development](docs/development.md) for framework usage.
8
+ 2. Read the applicable project requirements and accepted decisions, then [architecture](docs/architecture.md) for ownership and dependencies and the relevant section of [development](docs/development.md) for framework usage. Use [README](README.md) for setup and operations. This reading order is required before implementation; reuse existing conclusions for a small change.
9
9
  3. Before changing a business module, read its `backend/src/modules/<name>/README.md`, then inspect the affected source and direct callers. Use the workflow below to choose the layer and responsibility directory. Expand the investigation only when those facts reveal another affected boundary.
10
- 4. Read versions and dependencies from `backend/pyproject.toml` and exact resolutions from `backend/uv.lock`. Follow [installed framework lookup](docs/development.md#match-the-installed-framework) for the actual package, bundled examples, and CLI. Generated guidance records the template version; upgrades do not update it automatically.
10
+ 4. Read versions and dependencies from `backend/pyproject.toml` and exact resolutions from `backend/uv.lock`. Follow [installed framework lookup](docs/development.md#match-the-installed-framework) for the actual package, bundled examples, CLI, and any user-provided source reference. Check the consumed artifact before relying on a checkout; equal version numbers do not prove identical contents. Generated guidance records the template version; upgrades do not update it automatically.
11
11
 
12
12
  Python code, metadata, configuration, environment, and deployment files belong under `backend/`. Root `scripts/` contains consumer-owned scripts. Run installed `pddd` commands from any directory in the application; run native uv/build/test and Docker commands from `backend/`.
13
13
 
14
+ Use the [official CLI entry points](docs/development.md#cli-operations) for operations it provides, including project/module generation, development startup, infrastructure preparation, migrations, seeding, and inspection. Do not replace them with handwritten generation or direct calls to migration/seed internals. Build and test still use native tools.
15
+
14
16
  ## Work from business rules to framework code
15
17
 
16
- 1. Describe the requested use case in business terms: caller, command or query, expected outcome, allowed state changes, and failure conditions. Reuse the module's recorded language and rules. The generated order example supplies implementation examples; actual business requirements come from the application.
18
+ 1. Describe the requested use case in business terms: caller, command or query, expected outcome, allowed state changes, and failure conditions. Reuse the module's recorded language and rules. The DDD skeleton supplies structure without business rules; documentation recipes are illustrations, and actual requirements come from the application.
17
19
  2. For a domain change, identify the rule owner, aggregate boundary, consistency needs, and collaboration with other modules using [business-change planning](docs/development.md#plan-a-business-change). Keep confirmed decisions in the owning module README. Ask about missing rules that affect correctness; label proposals and open questions instead of presenting assumptions as approved rules.
18
- 3. Map each needed technical capability through the [framework selection table](docs/development.md#choose-a-framework-capability). Check the installed API, the owning Module's declarations, and an existing usage before adding infrastructure. Choose the existing `basic` or `ddd` layout for the capability; place each change using the [directory rules](docs/development.md#module-layout-and-coding-rules).
20
+ 3. Before the first edit, identify **Owner -> layer -> target directory -> verified framework API**, with the relevant requirement and source/example evidence, using the [design and delivery checks](docs/development.md#design-and-delivery-checks). Choose the existing `basic` or `ddd` layout using the [directory rules](docs/development.md#module-layout-and-coding-rules), then map needed capabilities through the [framework selection table](docs/development.md#choose-a-framework-capability). Check the installed API, Module declarations, and existing usage before implementing. Mark an API check as not applicable when appropriate; do not invent an abstraction to fill the record.
19
21
  4. Implement the authorized use case through its public contract, domain behavior, and existing persistence/invocation boundaries. Reuse existing validation and [verification commands](docs/development.md#verification); state which domain rules, composition paths, and infrastructure behavior the checks actually cover. Scale this process to the change: a local correction can reuse the existing model directly.
20
22
 
21
23
  ## Preserve ownership and contracts
@@ -24,22 +26,24 @@ Python code, metadata, configuration, environment, and deployment files belong u
24
26
  - Domain and application contracts stay independent of Host, HTTP, and persistence implementations. Cross-module calls use explicitly declared dependencies and public contracts; do not access another module's implementation, ORM models, or tables directly.
25
27
  - Use framework application services, repositories, Options, permissions, units of work, events, jobs, and lifecycle hooks before adding custom infrastructure. Do not introduce a parallel DI container, service locator, transaction manager, or wrapper without a missing business capability.
26
28
  - Keep public contracts, mutable state, orchestration, and external I/O under clear owners. Split for independent responsibilities, not a fixed line count. Avoid generic `common`, `utils`, or `helpers` collections and speculative abstractions.
27
- - Resolve conflicting requirements, documented contracts, and implementation before changing the affected boundary. Describe the conflict to the user; do not rewrite documentation to justify an unapproved design.
29
+ - If requirements, accepted decisions, documented responsibilities/contracts, an approved plan, or implementation conflict, pause affected edits and commits. Present both statements with file locations, current behavior, impact, and the decision needed from the user. Obtain an explicit ruling before proceeding; silence or a general instruction to continue does not resolve an unstated boundary change. Never rewrite documentation to retroactively authorize an incorrect implementation.
28
30
  - Confirm changes to dependencies, public contracts, persistent data, external protocols, or deployment infrastructure when they extend beyond the requested task. Internal simplification does not authorize breaking consumers or stored data.
29
31
 
30
- Use the documented responsibility directories for every new capability. Propose a standards change before adding a responsibility category or changing dependency direction. The `ddd` template intentionally generates all supported example capabilities, even before use; this exception applies to DDD templates and generated projects, not speculative framework runtime layers. The `basic` template generates only package markers, `module.py`, `contracts/conversion_service.py`, `services/default_conversion_service.py`, and its README. It uses ordinary transient DI, without Domain, persistence, HTTP, interception, or empty layers. Keep `module.py` limited to dependencies, registration, and lifecycle hooks, and keep package `__init__.py` free of business code and compatibility exports.
32
+ Use the documented responsibility directories for every new capability. Propose a standards change before adding a responsibility category or changing dependency direction. The `ddd` template intentionally retains the full responsibility directories, package markers, Module hooks, ORM Base, and model/migration registration. It generates no business implementations or test cases; this directory exception applies to DDD templates and generated projects, not speculative framework runtime layers. The `basic` template generates only package markers, `module.py`, `contracts/conversion_service.py`, `services/default_conversion_service.py`, and its README. It uses ordinary transient DI, without Domain, persistence, HTTP, interception, or empty layers. Keep `module.py` limited to dependencies, registration, and lifecycle hooks, and keep package `__init__.py` free of business code and compatibility exports.
31
33
 
32
34
  ## Enforce DDD rules
33
35
 
34
36
  For a modeled domain capability, apply the [mandatory DDD rules](docs/architecture.md#mandatory-ddd-rules) during implementation and review. Reject application code that assigns aggregate business state directly, writes aggregate children outside the root's business operations, or leaks ORM/Session types through domain repository contracts. Before a cross-aggregate write, record its consistency, failure, and idempotency decisions. Keep each changed invariant's owner, operation, and rejection example in the module README and verify them with the [business-change checks](docs/development.md#check-a-domain-change). These rules do not require a `basic` service to acquire unused DDD layers.
35
37
 
38
+ Code and architecture changes must also satisfy the [seven design principles](docs/architecture.md#mandatory-design-principles). Review the applicable principles, DDD boundaries, imports, contracts, state ownership, and resource lifetimes on the final diff. Follow the [delivery checks](docs/development.md#design-and-delivery-checks) and cite actual evidence. Correct confirmed violations within the authorized scope or report the blocking decision; passing builds/tests alone cannot justify completion. These requirements do not authorize new business rules, dependencies, tests, automated gates, infrastructure, or framework changes.
39
+
36
40
  ## Use the framework safely
37
41
 
38
42
  - Extend only explicitly opened targets. Keep typed properties in application contracts, optional SQL mappings and local extension revisions in persistence, and reuse the same declaration for validation, OpenAPI, and storage. Never mutate shared DTO/ORM classes or duplicate the base table/Schema owner; extension migrations declare Alembic prerequisites explicitly.
39
43
 
40
44
  - Invoke application services through their injected public contracts or the framework functions `invoke(application, ...)` / `call(application, ...)`. Manual construction and self-calls do not create a new managed invocation.
41
45
  - Ordinary DI services opt into interception with `@unit_of_work`, `@authorize`, or `ValidationEnabled`; declare the corresponding capability dependency on their owning Module. Keep marked methods async instance methods and preserve native scope/cache. These declarations do not add HTTP exposure or require ApplicationService inheritance.
42
- - Keep transactions short. Never carry a Session, unit of work, or request scope into an ordinary child task, external thread, network wait, or streamed response.
46
+ - Keep transactions short. Never carry a business Session or UoW across a network wait or stream `yield`, or transfer execution scopes into ordinary child tasks or external threads. Managed HTTP streaming retains only its transport-owned REQUEST until cleanup; follow the [streaming boundaries](docs/architecture.md#http-streaming-and-continuous-access) and [complete example](docs/development.md#http-generators-and-continuous-access).
43
47
  - Keep aggregate rules and optimistic concurrency checks intact. Construct aggregate events from frozen records and stable nested values as described in [architecture](docs/architecture.md#calls-scopes-and-transactions). Use repository operations to stage changes and collect events; do not publish the same aggregate events twice.
44
48
  - Review generated migrations. Do not edit applied revisions, bypass migration guards, or treat Host startup as migration or seeding.
45
49
  - Keep background side effects idempotent. Local events and WebSocket messages do not provide durable distributed delivery; distributed locks do not replace database concurrency or idempotency.
@@ -62,7 +66,7 @@ and message examples in the project development guide.
62
66
  ## Verify and maintain
63
67
 
64
68
  - Preserve unrelated changes. Do not edit the installed framework, generated dependency files by hand, or another repository to make an application change pass.
65
- - Use the smallest relevant existing checks, and add focused regression coverage when the requested behavior needs it. Read fixtures before running tests that start infrastructure. See [verification](docs/development.md#verification) for available commands.
69
+ - Use the smallest relevant existing checks and authorized build. New test files, cases, or test dependencies require explicit approval; explain their scope and verification benefit first. Read fixtures before running infrastructure tests and keep them within the task's authorization. See [verification](docs/development.md#verification) for available commands.
66
70
  - Distinguish source checks, unit tests, real infrastructure tests, and distribution validation. Report actual results and anything not verified; never claim success from a mock or an unexecuted command.
67
71
  - Update the owning module README when business rules or public behavior change. Update architecture for dependency or ownership changes, development for usage changes, and README for setup or operations changes. Replace outdated statements rather than appending a work log.
68
72
  - Documentation guides development; it is not an executable architecture gate. Use type checks and appropriate boundary tests when the project has them.