core-framework 3.2.0__tar.gz → 3.3.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 (1062) hide show
  1. core_framework-3.3.0/.cursor/rules/alembic-migrations.mdc +61 -0
  2. core_framework-3.3.0/.cursor/rules/domain-imports.mdc +44 -0
  3. core_framework-3.3.0/.cursor/rules/error-boundary.mdc +56 -0
  4. core_framework-3.3.0/.cursor/rules/repository-schema-isolation.mdc +87 -0
  5. core_framework-3.3.0/.cursor/skills/code-review/SKILL.md +35 -0
  6. core_framework-3.3.0/.github/workflows/dev-ci-cd.yaml +358 -0
  7. core_framework-3.3.0/.github/workflows/test.yaml +310 -0
  8. core_framework-3.3.0/CHANGELOG.md +638 -0
  9. core_framework-3.3.0/PKG-INFO +145 -0
  10. core_framework-3.3.0/alembic/moderation/alembic/versions/3027828c2c80_align_dead_outbox_keyset_index.py +34 -0
  11. core_framework-3.3.0/alembic/user/alembic/versions/922eece707db_align_dead_outbox_keyset_index.py +34 -0
  12. core_framework-3.3.0/core_framework/api/admin/cache/schemas.py +91 -0
  13. core_framework-3.3.0/core_framework/api/admin/comments/schemas.py +50 -0
  14. core_framework-3.3.0/core_framework/api/admin/outbox/router.py +62 -0
  15. core_framework-3.3.0/core_framework/api/admin/posts/schemas.py +32 -0
  16. core_framework-3.3.0/core_framework/api/admin/users/router.py +189 -0
  17. core_framework-3.3.0/core_framework/api/attachments/router.py +45 -0
  18. core_framework-3.3.0/core_framework/api/attachments/schemas.py +48 -0
  19. core_framework-3.3.0/core_framework/api/auth/router.py +26 -0
  20. core_framework-3.3.0/core_framework/api/comments/authenticated/mappers.py +21 -0
  21. core_framework-3.3.0/core_framework/api/comments/authenticated/router.py +149 -0
  22. core_framework-3.3.0/core_framework/api/comments/authenticated/schemas.py +79 -0
  23. core_framework-3.3.0/core_framework/api/dependencies.py +153 -0
  24. core_framework-3.3.0/core_framework/api/events/router.py +54 -0
  25. core_framework-3.3.0/core_framework/api/posts/authenticated/mappers.py +23 -0
  26. core_framework-3.3.0/core_framework/api/posts/authenticated/router.py +116 -0
  27. core_framework-3.3.0/core_framework/api/posts/authenticated/schemas.py +77 -0
  28. core_framework-3.3.0/core_framework/api/schemas.py +24 -0
  29. core_framework-3.3.0/core_framework/api/users/authenticated/router.py +549 -0
  30. core_framework-3.3.0/core_framework/api/users/public/router.py +33 -0
  31. core_framework-3.3.0/core_framework/api/users/shared/mappers.py +18 -0
  32. core_framework-3.3.0/core_framework/application/analytics/bucket_service.py +77 -0
  33. core_framework-3.3.0/core_framework/application/analytics/refresh_service.py +62 -0
  34. core_framework-3.3.0/core_framework/application/auth/auth_service.py +50 -0
  35. core_framework-3.3.0/core_framework/application/auth/token_verification.py +22 -0
  36. core_framework-3.3.0/core_framework/application/comments/admin_service.py +559 -0
  37. core_framework-3.3.0/core_framework/application/comments/cleanup_service.py +111 -0
  38. core_framework-3.3.0/core_framework/application/comments/public_service.py +324 -0
  39. core_framework-3.3.0/core_framework/application/email/__init__.py +13 -0
  40. core_framework-3.3.0/core_framework/application/email/account_deletion_scheduled.py +77 -0
  41. core_framework-3.3.0/core_framework/application/events/README.md +31 -0
  42. core_framework-3.3.0/core_framework/application/events/event_service.py +167 -0
  43. core_framework-3.3.0/core_framework/application/media/README.md +19 -0
  44. core_framework-3.3.0/core_framework/application/media/attachment_service.py +524 -0
  45. core_framework-3.3.0/core_framework/application/media/avatar_service.py +186 -0
  46. core_framework-3.3.0/core_framework/application/media/banner_service.py +182 -0
  47. core_framework-3.3.0/core_framework/application/moderation/appeal_service.py +102 -0
  48. core_framework-3.3.0/core_framework/application/moderation/user_service.py +176 -0
  49. core_framework-3.3.0/core_framework/application/notifications/README.md +17 -0
  50. core_framework-3.3.0/core_framework/application/notifications/inbox_service.py +280 -0
  51. core_framework-3.3.0/core_framework/application/notifications/notification_service.py +187 -0
  52. core_framework-3.3.0/core_framework/application/outbox/ops_service.py +74 -0
  53. core_framework-3.3.0/core_framework/application/posts/admin_service.py +391 -0
  54. core_framework-3.3.0/core_framework/application/posts/authenticated_service.py +130 -0
  55. core_framework-3.3.0/core_framework/application/posts/cleanup_service.py +135 -0
  56. core_framework-3.3.0/core_framework/application/posts/public_service.py +257 -0
  57. core_framework-3.3.0/core_framework/application/shared/deletion_cleanup_ledger.py +60 -0
  58. core_framework-3.3.0/core_framework/application/shared/worker_jobs.py +63 -0
  59. core_framework-3.3.0/core_framework/application/users/admin_service.py +259 -0
  60. core_framework-3.3.0/core_framework/application/users/authenticated_service.py +393 -0
  61. core_framework-3.3.0/core_framework/application/users/identity_enrichment.py +35 -0
  62. core_framework-3.3.0/core_framework/application/users/public_service.py +162 -0
  63. core_framework-3.3.0/core_framework/application/users/user_deletion_service.py +697 -0
  64. core_framework-3.3.0/core_framework/constants.py +20 -0
  65. core_framework-3.3.0/core_framework/core/__init__.py +45 -0
  66. core_framework-3.3.0/core_framework/core/cache.py +205 -0
  67. core_framework-3.3.0/core_framework/core/exception_handlers/common.py +70 -0
  68. core_framework-3.3.0/core_framework/core/exception_handlers/setup.py +46 -0
  69. core_framework-3.3.0/core_framework/core/pagination.py +216 -0
  70. core_framework-3.3.0/core_framework/core/rate_limit.py +298 -0
  71. core_framework-3.3.0/core_framework/domains/analytics/service.py +338 -0
  72. core_framework-3.3.0/core_framework/domains/auth/README.md +75 -0
  73. core_framework-3.3.0/core_framework/domains/auth/__init__.py +16 -0
  74. core_framework-3.3.0/core_framework/domains/auth/outcomes.py +18 -0
  75. core_framework-3.3.0/core_framework/domains/auth/ports/auth.py +57 -0
  76. core_framework-3.3.0/core_framework/domains/auth/service.py +140 -0
  77. core_framework-3.3.0/core_framework/domains/comment/constants.py +7 -0
  78. core_framework-3.3.0/core_framework/domains/comment/exceptions.py +35 -0
  79. core_framework-3.3.0/core_framework/domains/comment/models.py +228 -0
  80. core_framework-3.3.0/core_framework/domains/comment/repository.py +2683 -0
  81. core_framework-3.3.0/core_framework/domains/comment/service.py +1028 -0
  82. core_framework-3.3.0/core_framework/domains/email/dependencies.py +101 -0
  83. core_framework-3.3.0/core_framework/domains/media/README.md +30 -0
  84. core_framework-3.3.0/core_framework/domains/media/__init__.py +57 -0
  85. core_framework-3.3.0/core_framework/domains/media/attachment/components/staging.py +165 -0
  86. core_framework-3.3.0/core_framework/domains/media/attachment/components/variant_encoder.py +28 -0
  87. core_framework-3.3.0/core_framework/domains/media/attachment/constants.py +39 -0
  88. core_framework-3.3.0/core_framework/domains/media/attachment/models.py +29 -0
  89. core_framework-3.3.0/core_framework/domains/media/attachment/ports/variant_encoder.py +26 -0
  90. core_framework-3.3.0/core_framework/domains/media/attachment/service.py +456 -0
  91. core_framework-3.3.0/core_framework/domains/media/dependencies.py +314 -0
  92. core_framework-3.3.0/core_framework/domains/media/shared/outcomes.py +16 -0
  93. core_framework-3.3.0/core_framework/domains/media/shared/repository.py +812 -0
  94. core_framework-3.3.0/core_framework/domains/moderation/README.md +140 -0
  95. core_framework-3.3.0/core_framework/domains/moderation/dependencies.py +91 -0
  96. core_framework-3.3.0/core_framework/domains/moderation/outbox_repository.py +190 -0
  97. core_framework-3.3.0/core_framework/domains/moderation/outbox_service.py +53 -0
  98. core_framework-3.3.0/core_framework/domains/moderation/repository.py +1396 -0
  99. core_framework-3.3.0/core_framework/domains/moderation/service.py +892 -0
  100. core_framework-3.3.0/core_framework/domains/notification/README.md +151 -0
  101. core_framework-3.3.0/core_framework/domains/notification/repository.py +631 -0
  102. core_framework-3.3.0/core_framework/domains/notification/service.py +304 -0
  103. core_framework-3.3.0/core_framework/domains/outbox/README.md +69 -0
  104. core_framework-3.3.0/core_framework/domains/outbox/ports/admin.py +36 -0
  105. core_framework-3.3.0/core_framework/domains/outbox/service.py +63 -0
  106. core_framework-3.3.0/core_framework/domains/post/README.md +208 -0
  107. core_framework-3.3.0/core_framework/domains/post/constants.py +8 -0
  108. core_framework-3.3.0/core_framework/domains/post/exceptions.py +20 -0
  109. core_framework-3.3.0/core_framework/domains/post/models.py +212 -0
  110. core_framework-3.3.0/core_framework/domains/post/repository.py +2372 -0
  111. core_framework-3.3.0/core_framework/domains/post/service.py +967 -0
  112. core_framework-3.3.0/core_framework/domains/user/__init__.py +63 -0
  113. core_framework-3.3.0/core_framework/domains/user/dependencies.py +91 -0
  114. core_framework-3.3.0/core_framework/domains/user/models.py +346 -0
  115. core_framework-3.3.0/core_framework/domains/user/outbox_repository.py +189 -0
  116. core_framework-3.3.0/core_framework/domains/user/outbox_service.py +53 -0
  117. core_framework-3.3.0/core_framework/domains/user/outcomes.py +33 -0
  118. core_framework-3.3.0/core_framework/domains/user/repository.py +1810 -0
  119. core_framework-3.3.0/core_framework/domains/user/service.py +1054 -0
  120. core_framework-3.3.0/core_framework/infrastructure/firebase/firebase_auth_adapter.py +125 -0
  121. core_framework-3.3.0/core_framework/infrastructure/media/attachment_staging_display_geometry.py +45 -0
  122. core_framework-3.3.0/core_framework/infrastructure/media/pillow_attachment_variant_encoder_adapter.py +164 -0
  123. core_framework-3.3.0/core_framework/testing/arq.py +141 -0
  124. core_framework-3.3.0/core_framework/testing/auth.py +306 -0
  125. core_framework-3.3.0/core_framework/worker/schedules/schedule_expired_mute_lifts.py +36 -0
  126. core_framework-3.3.0/core_framework/worker/tasks/__init__.py +112 -0
  127. core_framework-3.3.0/core_framework/worker/tasks/process_account_deletion.py +21 -0
  128. core_framework-3.3.0/core_framework/worker/tasks/process_cache_pattern_invalidation.py +19 -0
  129. core_framework-3.3.0/core_framework/worker/tasks/process_destructive_comment_delete.py +38 -0
  130. core_framework-3.3.0/core_framework/worker/tasks/process_destructive_post_delete.py +34 -0
  131. core_framework-3.3.0/core_framework/worker/tasks/process_user_content_deletion.py +18 -0
  132. core_framework-3.3.0/deploy/app/docker-compose.yml +62 -0
  133. core_framework-3.3.0/docs/deployments/deploy-playbook.md +250 -0
  134. core_framework-3.3.0/docs/deployments/e2e-smoke-tests-design.md +353 -0
  135. core_framework-3.3.0/docs/deployments/edge-rate-limits.md +96 -0
  136. core_framework-3.3.0/docs/deployments/guides/setup/cloudflare-setup.md +129 -0
  137. core_framework-3.3.0/docs/deployments/guides/setup/observability-lgtm-setup.md +204 -0
  138. core_framework-3.3.0/docs/deployments/release-playbook.md +92 -0
  139. core_framework-3.3.0/docs/design/README.md +33 -0
  140. core_framework-3.3.0/docs/design/analytics-rollup-design.md +1005 -0
  141. core_framework-3.3.0/docs/design/cache-invalidation-design.md +150 -0
  142. core_framework-3.3.0/docs/design/create-idempotency-design.md +294 -0
  143. core_framework-3.3.0/docs/design/event-outbox-design.md +603 -0
  144. core_framework-3.3.0/docs/design/events-ingest-design.md +229 -0
  145. core_framework-3.3.0/docs/design/media-cpu-off-api-refactor.md +134 -0
  146. core_framework-3.3.0/docs/design/media-storage-topology.md +141 -0
  147. core_framework-3.3.0/docs/design/observability-lgtm-design.md +593 -0
  148. core_framework-3.3.0/docs/design/outbox-admin-ops-design.md +337 -0
  149. core_framework-3.3.0/docs/design/transactional-email-design.md +618 -0
  150. core_framework-3.3.0/docs/domains/README.md +23 -0
  151. core_framework-3.3.0/docs/domains/auth/access_control.md +70 -0
  152. core_framework-3.3.0/docs/domains/auth/registration.md +64 -0
  153. core_framework-3.3.0/docs/domains/cache/admin_cache_invalidation.md +184 -0
  154. core_framework-3.3.0/docs/domains/comments/admin_comments.md +221 -0
  155. core_framework-3.3.0/docs/domains/comments/comment_like.md +102 -0
  156. core_framework-3.3.0/docs/domains/comments/comment_report.md +121 -0
  157. core_framework-3.3.0/docs/domains/comments/comment_stats_aggregation.md +69 -0
  158. core_framework-3.3.0/docs/domains/comments/create_comment.md +193 -0
  159. core_framework-3.3.0/docs/domains/comments/edit_comment.md +74 -0
  160. core_framework-3.3.0/docs/domains/deletion/comments.md +289 -0
  161. core_framework-3.3.0/docs/domains/deletion/posts.md +312 -0
  162. core_framework-3.3.0/docs/domains/deletion/users.md +520 -0
  163. core_framework-3.3.0/docs/domains/events/events.md +248 -0
  164. core_framework-3.3.0/docs/domains/media/attachment_upload.md +77 -0
  165. core_framework-3.3.0/docs/domains/media/post-comment-attachments-design.md +521 -0
  166. core_framework-3.3.0/docs/domains/media/upload-pipeline-design.md +468 -0
  167. core_framework-3.3.0/docs/domains/media/upload_pipeline.md +108 -0
  168. core_framework-3.3.0/docs/domains/mentions/mentions_in_content.md +240 -0
  169. core_framework-3.3.0/docs/domains/moderation/appeals.md +248 -0
  170. core_framework-3.3.0/docs/domains/moderation/internal_notes.md +159 -0
  171. core_framework-3.3.0/docs/domains/moderation/moderator_actions.md +70 -0
  172. core_framework-3.3.0/docs/domains/moderation/reports.md +222 -0
  173. core_framework-3.3.0/docs/domains/moderation/restrictions.md +251 -0
  174. core_framework-3.3.0/docs/domains/notifications/notification_inbox.md +383 -0
  175. core_framework-3.3.0/docs/domains/outbox/admin_outbox_ops.md +187 -0
  176. core_framework-3.3.0/docs/domains/posts/admin_posts.md +216 -0
  177. core_framework-3.3.0/docs/domains/posts/author_context.md +92 -0
  178. core_framework-3.3.0/docs/domains/posts/create_post.md +126 -0
  179. core_framework-3.3.0/docs/domains/posts/edit_post.md +83 -0
  180. core_framework-3.3.0/docs/domains/posts/post_like.md +101 -0
  181. core_framework-3.3.0/docs/domains/posts/post_report.md +108 -0
  182. core_framework-3.3.0/docs/domains/users/account.md +108 -0
  183. core_framework-3.3.0/docs/domains/users/account_deletion.md +99 -0
  184. core_framework-3.3.0/docs/domains/users/admin_users.md +167 -0
  185. core_framework-3.3.0/docs/domains/users/avatar.md +91 -0
  186. core_framework-3.3.0/docs/domains/users/banner.md +77 -0
  187. core_framework-3.3.0/docs/domains/users/blocks.md +132 -0
  188. core_framework-3.3.0/docs/domains/users/change_history.md +128 -0
  189. core_framework-3.3.0/docs/domains/users/check_username_exists.md +62 -0
  190. core_framework-3.3.0/docs/domains/users/follow.md +230 -0
  191. core_framework-3.3.0/docs/domains/users/preferences.md +87 -0
  192. core_framework-3.3.0/docs/domains/users/profile.md +221 -0
  193. core_framework-3.3.0/docs/domains/users/username_suggest.md +15 -0
  194. core_framework-3.3.0/docs/library/capability-wiring.md +181 -0
  195. core_framework-3.3.0/docs/library/core-framework-migration.md +253 -0
  196. core_framework-3.3.0/docs/library/overview.md +56 -0
  197. core_framework-3.3.0/docs/library/package-api.md +675 -0
  198. core_framework-3.3.0/docs/library/testing-plugin-design.md +317 -0
  199. core_framework-3.3.0/docs/library/workers.md +128 -0
  200. core_framework-3.3.0/docs/platform/architecture-decisions.md +594 -0
  201. core_framework-3.3.0/docs/platform/client-error-visibility.md +278 -0
  202. core_framework-3.3.0/docs/platform/domain-services-and-adapters.md +73 -0
  203. core_framework-3.3.0/docs/platform/patch-update-typed-payload.md +194 -0
  204. core_framework-3.3.0/docs/reviews/log.md +28 -0
  205. core_framework-3.3.0/docs/reviews/review-playbook.md +192 -0
  206. core_framework-3.3.0/docs/reviews/slices.md +302 -0
  207. core_framework-3.3.0/docs/testing.md +150 -0
  208. core_framework-3.3.0/docs/todo.md +3 -0
  209. core_framework-3.3.0/pyproject.toml +155 -0
  210. core_framework-3.3.0/tests/conftest.py +52 -0
  211. core_framework-3.3.0/tests/integration/_http_error_details.py +21 -0
  212. core_framework-3.3.0/tests/integration/_poll.py +23 -0
  213. core_framework-3.3.0/tests/integration/api/_auth_helpers.py +21 -0
  214. core_framework-3.3.0/tests/integration/api/_destructive_delete_helpers.py +51 -0
  215. core_framework-3.3.0/tests/integration/api/_http_helpers.py +100 -0
  216. core_framework-3.3.0/tests/integration/api/_user_deletion_helpers.py +63 -0
  217. core_framework-3.3.0/tests/integration/api/_user_helpers.py +63 -0
  218. core_framework-3.3.0/tests/integration/api/admin/_auth_cases.py +97 -0
  219. core_framework-3.3.0/tests/integration/api/admin/analytics/router_test.py +266 -0
  220. core_framework-3.3.0/tests/integration/api/admin/cache/router_test.py +310 -0
  221. core_framework-3.3.0/tests/integration/api/admin/comments/router_test.py +745 -0
  222. core_framework-3.3.0/tests/integration/api/admin/moderation/router_test.py +2444 -0
  223. core_framework-3.3.0/tests/integration/api/admin/outbox/router_test.py +340 -0
  224. core_framework-3.3.0/tests/integration/api/admin/posts/router_test.py +476 -0
  225. core_framework-3.3.0/tests/integration/api/admin/users/router_test.py +1450 -0
  226. core_framework-3.3.0/tests/integration/api/attachments/_helpers.py +289 -0
  227. core_framework-3.3.0/tests/integration/api/attachments/attachment_upload_test.py +31 -0
  228. core_framework-3.3.0/tests/integration/api/attachments/conftest.py +14 -0
  229. core_framework-3.3.0/tests/integration/api/auth/router_test.py +55 -0
  230. core_framework-3.3.0/tests/integration/api/comments/comment_attachments_integration_test.py +572 -0
  231. core_framework-3.3.0/tests/integration/api/comments/public/router_test.py +508 -0
  232. core_framework-3.3.0/tests/integration/api/events/router_test.py +656 -0
  233. core_framework-3.3.0/tests/integration/api/notifications/router_test.py +538 -0
  234. core_framework-3.3.0/tests/integration/api/posts/authenticated/post_writes_integration_test.py +547 -0
  235. core_framework-3.3.0/tests/integration/api/posts/followers_visibility_test.py +144 -0
  236. core_framework-3.3.0/tests/integration/api/posts/post_attachments_integration_test.py +663 -0
  237. core_framework-3.3.0/tests/integration/api/posts/post_deletion_integration_test.py +630 -0
  238. core_framework-3.3.0/tests/integration/api/posts/post_stats_dirty_marking_test.py +212 -0
  239. core_framework-3.3.0/tests/integration/api/posts/public/router_test.py +724 -0
  240. core_framework-3.3.0/tests/integration/api/rate_limit_test.py +349 -0
  241. core_framework-3.3.0/tests/integration/api/users/account_deletion_email_test.py +145 -0
  242. core_framework-3.3.0/tests/integration/api/users/authenticated/profile_media_upload_test.py +187 -0
  243. core_framework-3.3.0/tests/integration/api/users/authenticated/router_test.py +1102 -0
  244. core_framework-3.3.0/tests/integration/api/users/deletion_audit_integration_test.py +187 -0
  245. core_framework-3.3.0/tests/integration/api/users/public/router_test.py +329 -0
  246. core_framework-3.3.0/tests/integration/conftest.py +14 -0
  247. core_framework-3.3.0/tests/integration/worker/_aggregate_stats_helpers.py +57 -0
  248. core_framework-3.3.0/tests/integration/worker/_arq_helpers.py +148 -0
  249. core_framework-3.3.0/tests/integration/worker/_media_upload_helpers.py +84 -0
  250. core_framework-3.3.0/tests/integration/worker/account_deletion_test.py +385 -0
  251. core_framework-3.3.0/tests/integration/worker/aggregate_comment_stats_test.py +328 -0
  252. core_framework-3.3.0/tests/integration/worker/aggregate_post_stats_test.py +219 -0
  253. core_framework-3.3.0/tests/integration/worker/aggregate_user_stats_test.py +103 -0
  254. core_framework-3.3.0/tests/integration/worker/analytics_refresh_test.py +108 -0
  255. core_framework-3.3.0/tests/integration/worker/conftest.py +29 -0
  256. core_framework-3.3.0/tests/integration/worker/create_idempotency_retention_test.py +277 -0
  257. core_framework-3.3.0/tests/integration/worker/moderation_outbox_test.py +313 -0
  258. core_framework-3.3.0/tests/integration/worker/mute_lift_test.py +172 -0
  259. core_framework-3.3.0/tests/integration/worker/profile_media_upload_test.py +458 -0
  260. core_framework-3.3.0/tests/integration/worker/user_outbox_test.py +370 -0
  261. core_framework-3.3.0/tests/unit/api/users/profile_update_mapper_test.py +22 -0
  262. core_framework-3.3.0/tests/unit/application/email/account_deletion_scheduled_test.py +230 -0
  263. core_framework-3.3.0/tests/unit/core/pagination_test.py +466 -0
  264. core_framework-3.3.0/uv.lock +2607 -0
  265. core_framework-3.2.0/.cursor/rules/alembic-migrations.mdc +0 -60
  266. core_framework-3.2.0/.cursor/rules/domain-imports.mdc +0 -44
  267. core_framework-3.2.0/.cursor/rules/error-boundary.mdc +0 -56
  268. core_framework-3.2.0/.cursor/rules/repository-schema-isolation.mdc +0 -85
  269. core_framework-3.2.0/.cursor/skills/code-review/SKILL.md +0 -35
  270. core_framework-3.2.0/.github/workflows/dev-ci-cd.yaml +0 -235
  271. core_framework-3.2.0/.github/workflows/test.yaml +0 -187
  272. core_framework-3.2.0/CHANGELOG.md +0 -606
  273. core_framework-3.2.0/PKG-INFO +0 -145
  274. core_framework-3.2.0/core_framework/api/admin/cache/schemas.py +0 -91
  275. core_framework-3.2.0/core_framework/api/admin/comments/schemas.py +0 -49
  276. core_framework-3.2.0/core_framework/api/admin/outbox/router.py +0 -61
  277. core_framework-3.2.0/core_framework/api/admin/posts/schemas.py +0 -31
  278. core_framework-3.2.0/core_framework/api/admin/users/router.py +0 -189
  279. core_framework-3.2.0/core_framework/api/attachments/router.py +0 -43
  280. core_framework-3.2.0/core_framework/api/attachments/schemas.py +0 -48
  281. core_framework-3.2.0/core_framework/api/auth/router.py +0 -21
  282. core_framework-3.2.0/core_framework/api/comments/authenticated/mappers.py +0 -17
  283. core_framework-3.2.0/core_framework/api/comments/authenticated/router.py +0 -143
  284. core_framework-3.2.0/core_framework/api/comments/authenticated/schemas.py +0 -79
  285. core_framework-3.2.0/core_framework/api/dependencies.py +0 -145
  286. core_framework-3.2.0/core_framework/api/events/router.py +0 -48
  287. core_framework-3.2.0/core_framework/api/posts/authenticated/mappers.py +0 -19
  288. core_framework-3.2.0/core_framework/api/posts/authenticated/router.py +0 -111
  289. core_framework-3.2.0/core_framework/api/posts/authenticated/schemas.py +0 -77
  290. core_framework-3.2.0/core_framework/api/schemas.py +0 -13
  291. core_framework-3.2.0/core_framework/api/users/authenticated/router.py +0 -542
  292. core_framework-3.2.0/core_framework/api/users/mappers.py +0 -16
  293. core_framework-3.2.0/core_framework/api/users/public/router.py +0 -28
  294. core_framework-3.2.0/core_framework/application/analytics/bucket_service.py +0 -43
  295. core_framework-3.2.0/core_framework/application/analytics/refresh_service.py +0 -54
  296. core_framework-3.2.0/core_framework/application/auth/auth_service.py +0 -26
  297. core_framework-3.2.0/core_framework/application/auth/token_verification.py +0 -29
  298. core_framework-3.2.0/core_framework/application/comments/admin_service.py +0 -307
  299. core_framework-3.2.0/core_framework/application/comments/cleanup_service.py +0 -109
  300. core_framework-3.2.0/core_framework/application/comments/public_service.py +0 -339
  301. core_framework-3.2.0/core_framework/application/email/__init__.py +0 -29
  302. core_framework-3.2.0/core_framework/application/email/account_deletion_scheduled.py +0 -77
  303. core_framework-3.2.0/core_framework/application/events/README.md +0 -31
  304. core_framework-3.2.0/core_framework/application/events/event_service.py +0 -148
  305. core_framework-3.2.0/core_framework/application/media/README.md +0 -19
  306. core_framework-3.2.0/core_framework/application/media/attachment_service.py +0 -503
  307. core_framework-3.2.0/core_framework/application/media/avatar_service.py +0 -168
  308. core_framework-3.2.0/core_framework/application/media/banner_service.py +0 -164
  309. core_framework-3.2.0/core_framework/application/moderation/appeal_service.py +0 -112
  310. core_framework-3.2.0/core_framework/application/moderation/user_service.py +0 -218
  311. core_framework-3.2.0/core_framework/application/notifications/README.md +0 -16
  312. core_framework-3.2.0/core_framework/application/notifications/inbox_service.py +0 -239
  313. core_framework-3.2.0/core_framework/application/notifications/notification_service.py +0 -170
  314. core_framework-3.2.0/core_framework/application/outbox/ops_service.py +0 -72
  315. core_framework-3.2.0/core_framework/application/posts/admin_service.py +0 -173
  316. core_framework-3.2.0/core_framework/application/posts/authenticated_service.py +0 -130
  317. core_framework-3.2.0/core_framework/application/posts/cleanup_service.py +0 -127
  318. core_framework-3.2.0/core_framework/application/posts/public_service.py +0 -365
  319. core_framework-3.2.0/core_framework/application/shared/worker_jobs.py +0 -62
  320. core_framework-3.2.0/core_framework/application/users/admin_service.py +0 -308
  321. core_framework-3.2.0/core_framework/application/users/authenticated_service.py +0 -388
  322. core_framework-3.2.0/core_framework/application/users/public_service.py +0 -162
  323. core_framework-3.2.0/core_framework/application/users/user_deletion_service.py +0 -268
  324. core_framework-3.2.0/core_framework/constants.py +0 -15
  325. core_framework-3.2.0/core_framework/core/__init__.py +0 -33
  326. core_framework-3.2.0/core_framework/core/cache.py +0 -193
  327. core_framework-3.2.0/core_framework/core/exception_handlers/common.py +0 -68
  328. core_framework-3.2.0/core_framework/core/exception_handlers/setup.py +0 -36
  329. core_framework-3.2.0/core_framework/core/pagination.py +0 -198
  330. core_framework-3.2.0/core_framework/domains/analytics/service.py +0 -300
  331. core_framework-3.2.0/core_framework/domains/auth/README.md +0 -68
  332. core_framework-3.2.0/core_framework/domains/auth/__init__.py +0 -8
  333. core_framework-3.2.0/core_framework/domains/auth/ports/auth.py +0 -54
  334. core_framework-3.2.0/core_framework/domains/auth/service.py +0 -58
  335. core_framework-3.2.0/core_framework/domains/comment/constants.py +0 -8
  336. core_framework-3.2.0/core_framework/domains/comment/exceptions.py +0 -30
  337. core_framework-3.2.0/core_framework/domains/comment/models.py +0 -225
  338. core_framework-3.2.0/core_framework/domains/comment/repository.py +0 -2400
  339. core_framework-3.2.0/core_framework/domains/comment/service.py +0 -946
  340. core_framework-3.2.0/core_framework/domains/email/dependencies.py +0 -91
  341. core_framework-3.2.0/core_framework/domains/media/README.md +0 -30
  342. core_framework-3.2.0/core_framework/domains/media/__init__.py +0 -59
  343. core_framework-3.2.0/core_framework/domains/media/attachment/components/staging.py +0 -166
  344. core_framework-3.2.0/core_framework/domains/media/attachment/components/variant_encoder.py +0 -48
  345. core_framework-3.2.0/core_framework/domains/media/attachment/constants.py +0 -41
  346. core_framework-3.2.0/core_framework/domains/media/attachment/models.py +0 -27
  347. core_framework-3.2.0/core_framework/domains/media/attachment/ports/variant_encoder.py +0 -42
  348. core_framework-3.2.0/core_framework/domains/media/attachment/service.py +0 -501
  349. core_framework-3.2.0/core_framework/domains/media/dependencies.py +0 -332
  350. core_framework-3.2.0/core_framework/domains/media/shared/outcomes.py +0 -21
  351. core_framework-3.2.0/core_framework/domains/media/shared/repository.py +0 -806
  352. core_framework-3.2.0/core_framework/domains/media/shared/service.py +0 -8
  353. core_framework-3.2.0/core_framework/domains/moderation/README.md +0 -140
  354. core_framework-3.2.0/core_framework/domains/moderation/dependencies.py +0 -90
  355. core_framework-3.2.0/core_framework/domains/moderation/outbox_repository.py +0 -187
  356. core_framework-3.2.0/core_framework/domains/moderation/outbox_service.py +0 -52
  357. core_framework-3.2.0/core_framework/domains/moderation/repository.py +0 -1308
  358. core_framework-3.2.0/core_framework/domains/moderation/service.py +0 -884
  359. core_framework-3.2.0/core_framework/domains/notification/README.md +0 -156
  360. core_framework-3.2.0/core_framework/domains/notification/repository.py +0 -629
  361. core_framework-3.2.0/core_framework/domains/notification/service.py +0 -301
  362. core_framework-3.2.0/core_framework/domains/outbox/README.md +0 -69
  363. core_framework-3.2.0/core_framework/domains/outbox/ports/admin.py +0 -35
  364. core_framework-3.2.0/core_framework/domains/outbox/service.py +0 -62
  365. core_framework-3.2.0/core_framework/domains/post/README.md +0 -208
  366. core_framework-3.2.0/core_framework/domains/post/constants.py +0 -9
  367. core_framework-3.2.0/core_framework/domains/post/exceptions.py +0 -20
  368. core_framework-3.2.0/core_framework/domains/post/models.py +0 -209
  369. core_framework-3.2.0/core_framework/domains/post/repository.py +0 -2255
  370. core_framework-3.2.0/core_framework/domains/post/service.py +0 -935
  371. core_framework-3.2.0/core_framework/domains/user/__init__.py +0 -57
  372. core_framework-3.2.0/core_framework/domains/user/dependencies.py +0 -90
  373. core_framework-3.2.0/core_framework/domains/user/models.py +0 -348
  374. core_framework-3.2.0/core_framework/domains/user/outbox_repository.py +0 -186
  375. core_framework-3.2.0/core_framework/domains/user/outbox_service.py +0 -52
  376. core_framework-3.2.0/core_framework/domains/user/outcomes.py +0 -31
  377. core_framework-3.2.0/core_framework/domains/user/repository.py +0 -1745
  378. core_framework-3.2.0/core_framework/domains/user/service.py +0 -999
  379. core_framework-3.2.0/core_framework/infrastructure/firebase/firebase_auth_adapter.py +0 -114
  380. core_framework-3.2.0/core_framework/infrastructure/media/attachment_staging_display_geometry.py +0 -71
  381. core_framework-3.2.0/core_framework/infrastructure/media/pillow_attachment_variant_encoder_adapter.py +0 -194
  382. core_framework-3.2.0/core_framework/testing/arq.py +0 -121
  383. core_framework-3.2.0/core_framework/testing/auth.py +0 -304
  384. core_framework-3.2.0/core_framework/worker/schedules/schedule_expired_mute_lifts.py +0 -34
  385. core_framework-3.2.0/core_framework/worker/tasks/__init__.py +0 -77
  386. core_framework-3.2.0/core_framework/worker/tasks/process_account_deletion.py +0 -21
  387. core_framework-3.2.0/core_framework/worker/tasks/process_cache_pattern_invalidation.py +0 -31
  388. core_framework-3.2.0/core_framework/worker/tasks/process_destructive_comment_delete.py +0 -15
  389. core_framework-3.2.0/core_framework/worker/tasks/process_destructive_post_delete.py +0 -15
  390. core_framework-3.2.0/core_framework/worker/tasks/process_user_content_deletion.py +0 -15
  391. core_framework-3.2.0/deploy/app/docker-compose.yml +0 -47
  392. core_framework-3.2.0/docs/deployments/deploy-playbook.md +0 -246
  393. core_framework-3.2.0/docs/deployments/e2e-smoke-tests-design.md +0 -353
  394. core_framework-3.2.0/docs/deployments/edge-rate-limits.md +0 -63
  395. core_framework-3.2.0/docs/deployments/guides/setup/cloudflare-setup.md +0 -129
  396. core_framework-3.2.0/docs/deployments/guides/setup/observability-lgtm-setup.md +0 -204
  397. core_framework-3.2.0/docs/deployments/release-playbook.md +0 -84
  398. core_framework-3.2.0/docs/design/README.md +0 -32
  399. core_framework-3.2.0/docs/design/analytics-rollup-design.md +0 -985
  400. core_framework-3.2.0/docs/design/cache-invalidation-design.md +0 -148
  401. core_framework-3.2.0/docs/design/create-idempotency-design.md +0 -282
  402. core_framework-3.2.0/docs/design/event-outbox-design.md +0 -603
  403. core_framework-3.2.0/docs/design/events-ingest-design.md +0 -228
  404. core_framework-3.2.0/docs/design/media-storage-topology.md +0 -141
  405. core_framework-3.2.0/docs/design/observability-lgtm-design.md +0 -591
  406. core_framework-3.2.0/docs/design/outbox-admin-ops-design.md +0 -337
  407. core_framework-3.2.0/docs/design/transactional-email-design.md +0 -616
  408. core_framework-3.2.0/docs/domains/README.md +0 -23
  409. core_framework-3.2.0/docs/domains/auth/access_control.md +0 -70
  410. core_framework-3.2.0/docs/domains/auth/registration.md +0 -60
  411. core_framework-3.2.0/docs/domains/cache/admin_cache_invalidation.md +0 -182
  412. core_framework-3.2.0/docs/domains/comments/admin_comments.md +0 -218
  413. core_framework-3.2.0/docs/domains/comments/comment_like.md +0 -96
  414. core_framework-3.2.0/docs/domains/comments/comment_report.md +0 -118
  415. core_framework-3.2.0/docs/domains/comments/comment_stats_aggregation.md +0 -69
  416. core_framework-3.2.0/docs/domains/comments/create_comment.md +0 -174
  417. core_framework-3.2.0/docs/domains/comments/edit_comment.md +0 -74
  418. core_framework-3.2.0/docs/domains/deletion/comments.md +0 -289
  419. core_framework-3.2.0/docs/domains/deletion/posts.md +0 -312
  420. core_framework-3.2.0/docs/domains/deletion/users.md +0 -501
  421. core_framework-3.2.0/docs/domains/events/events.md +0 -245
  422. core_framework-3.2.0/docs/domains/media/attachment_upload.md +0 -75
  423. core_framework-3.2.0/docs/domains/media/post-comment-attachments-design.md +0 -521
  424. core_framework-3.2.0/docs/domains/media/upload-pipeline-design.md +0 -468
  425. core_framework-3.2.0/docs/domains/media/upload_pipeline.md +0 -110
  426. core_framework-3.2.0/docs/domains/mentions/mentions_in_content.md +0 -238
  427. core_framework-3.2.0/docs/domains/moderation/appeals.md +0 -245
  428. core_framework-3.2.0/docs/domains/moderation/internal_notes.md +0 -159
  429. core_framework-3.2.0/docs/domains/moderation/moderator_actions.md +0 -70
  430. core_framework-3.2.0/docs/domains/moderation/reports.md +0 -186
  431. core_framework-3.2.0/docs/domains/moderation/restrictions.md +0 -250
  432. core_framework-3.2.0/docs/domains/notifications/notification_inbox.md +0 -384
  433. core_framework-3.2.0/docs/domains/outbox/admin_outbox_ops.md +0 -187
  434. core_framework-3.2.0/docs/domains/posts/admin_posts.md +0 -214
  435. core_framework-3.2.0/docs/domains/posts/author_context.md +0 -92
  436. core_framework-3.2.0/docs/domains/posts/create_post.md +0 -121
  437. core_framework-3.2.0/docs/domains/posts/edit_post.md +0 -80
  438. core_framework-3.2.0/docs/domains/posts/post_like.md +0 -95
  439. core_framework-3.2.0/docs/domains/posts/post_report.md +0 -105
  440. core_framework-3.2.0/docs/domains/users/account.md +0 -106
  441. core_framework-3.2.0/docs/domains/users/account_deletion.md +0 -128
  442. core_framework-3.2.0/docs/domains/users/admin_users.md +0 -166
  443. core_framework-3.2.0/docs/domains/users/avatar.md +0 -92
  444. core_framework-3.2.0/docs/domains/users/banner.md +0 -78
  445. core_framework-3.2.0/docs/domains/users/blocks.md +0 -125
  446. core_framework-3.2.0/docs/domains/users/change_history.md +0 -133
  447. core_framework-3.2.0/docs/domains/users/check_username_exists.md +0 -57
  448. core_framework-3.2.0/docs/domains/users/follow.md +0 -222
  449. core_framework-3.2.0/docs/domains/users/preferences.md +0 -87
  450. core_framework-3.2.0/docs/domains/users/profile.md +0 -204
  451. core_framework-3.2.0/docs/library/capability-wiring.md +0 -170
  452. core_framework-3.2.0/docs/library/core-framework-migration.md +0 -253
  453. core_framework-3.2.0/docs/library/overview.md +0 -55
  454. core_framework-3.2.0/docs/library/package-api.md +0 -622
  455. core_framework-3.2.0/docs/library/testing-plugin-design.md +0 -317
  456. core_framework-3.2.0/docs/library/workers.md +0 -105
  457. core_framework-3.2.0/docs/platform/architecture-decisions.md +0 -555
  458. core_framework-3.2.0/docs/platform/client-error-visibility.md +0 -274
  459. core_framework-3.2.0/docs/platform/domain-services-and-adapters.md +0 -71
  460. core_framework-3.2.0/docs/platform/patch-update-typed-payload.md +0 -191
  461. core_framework-3.2.0/docs/reviews/log.md +0 -12
  462. core_framework-3.2.0/docs/reviews/review-playbook.md +0 -192
  463. core_framework-3.2.0/docs/reviews/slices.md +0 -301
  464. core_framework-3.2.0/docs/testing.md +0 -150
  465. core_framework-3.2.0/docs/todo.md +0 -5
  466. core_framework-3.2.0/pyproject.toml +0 -155
  467. core_framework-3.2.0/tests/conftest.py +0 -49
  468. core_framework-3.2.0/tests/integration/_http_error_details.py +0 -19
  469. core_framework-3.2.0/tests/integration/api/_auth_helpers.py +0 -6
  470. core_framework-3.2.0/tests/integration/api/_destructive_delete_helpers.py +0 -51
  471. core_framework-3.2.0/tests/integration/api/_http_helpers.py +0 -95
  472. core_framework-3.2.0/tests/integration/api/_user_deletion_helpers.py +0 -63
  473. core_framework-3.2.0/tests/integration/api/_user_helpers.py +0 -26
  474. core_framework-3.2.0/tests/integration/api/admin/_auth_cases.py +0 -53
  475. core_framework-3.2.0/tests/integration/api/admin/analytics/router_test.py +0 -263
  476. core_framework-3.2.0/tests/integration/api/admin/cache/router_test.py +0 -307
  477. core_framework-3.2.0/tests/integration/api/admin/comments/router_test.py +0 -735
  478. core_framework-3.2.0/tests/integration/api/admin/moderation/_auth_cases.py +0 -30
  479. core_framework-3.2.0/tests/integration/api/admin/moderation/router_test.py +0 -2545
  480. core_framework-3.2.0/tests/integration/api/admin/outbox/router_test.py +0 -337
  481. core_framework-3.2.0/tests/integration/api/admin/posts/router_test.py +0 -472
  482. core_framework-3.2.0/tests/integration/api/admin/users/router_test.py +0 -1464
  483. core_framework-3.2.0/tests/integration/api/attachments/_helpers.py +0 -210
  484. core_framework-3.2.0/tests/integration/api/attachments/attachment_upload_test.py +0 -29
  485. core_framework-3.2.0/tests/integration/api/auth/router_test.py +0 -52
  486. core_framework-3.2.0/tests/integration/api/comments/comment_attachments_integration_test.py +0 -576
  487. core_framework-3.2.0/tests/integration/api/comments/public/router_test.py +0 -514
  488. core_framework-3.2.0/tests/integration/api/events/router_test.py +0 -758
  489. core_framework-3.2.0/tests/integration/api/notifications/router_test.py +0 -538
  490. core_framework-3.2.0/tests/integration/api/posts/authenticated/post_writes_integration_test.py +0 -311
  491. core_framework-3.2.0/tests/integration/api/posts/followers_visibility_test.py +0 -144
  492. core_framework-3.2.0/tests/integration/api/posts/post_attachments_integration_test.py +0 -660
  493. core_framework-3.2.0/tests/integration/api/posts/post_deletion_integration_test.py +0 -624
  494. core_framework-3.2.0/tests/integration/api/posts/post_stats_dirty_marking_test.py +0 -212
  495. core_framework-3.2.0/tests/integration/api/posts/public/router_test.py +0 -1015
  496. core_framework-3.2.0/tests/integration/api/users/account_deletion_email_test.py +0 -145
  497. core_framework-3.2.0/tests/integration/api/users/authenticated/avatar_upload_test.py +0 -112
  498. core_framework-3.2.0/tests/integration/api/users/authenticated/banner_upload_test.py +0 -112
  499. core_framework-3.2.0/tests/integration/api/users/authenticated/router_test.py +0 -1100
  500. core_framework-3.2.0/tests/integration/api/users/deletion_audit_integration_test.py +0 -187
  501. core_framework-3.2.0/tests/integration/api/users/public/router_test.py +0 -334
  502. core_framework-3.2.0/tests/integration/worker/_media_upload_helpers.py +0 -84
  503. core_framework-3.2.0/tests/integration/worker/account_deletion_test.py +0 -385
  504. core_framework-3.2.0/tests/integration/worker/aggregate_comment_stats_test.py +0 -354
  505. core_framework-3.2.0/tests/integration/worker/aggregate_post_stats_test.py +0 -257
  506. core_framework-3.2.0/tests/integration/worker/aggregate_user_stats_test.py +0 -123
  507. core_framework-3.2.0/tests/integration/worker/analytics_refresh_test.py +0 -108
  508. core_framework-3.2.0/tests/integration/worker/avatar_upload_test.py +0 -370
  509. core_framework-3.2.0/tests/integration/worker/banner_upload_test.py +0 -367
  510. core_framework-3.2.0/tests/integration/worker/conftest.py +0 -21
  511. core_framework-3.2.0/tests/integration/worker/create_idempotency_retention_test.py +0 -280
  512. core_framework-3.2.0/tests/integration/worker/moderation_outbox_test.py +0 -313
  513. core_framework-3.2.0/tests/integration/worker/mute_lift_test.py +0 -166
  514. core_framework-3.2.0/tests/integration/worker/user_outbox_test.py +0 -370
  515. core_framework-3.2.0/tests/integration/worker/utils_test.py +0 -116
  516. core_framework-3.2.0/tests/unit/api/users/profile_update_mapper_test.py +0 -22
  517. core_framework-3.2.0/tests/unit/application/email/account_deletion_scheduled_test.py +0 -219
  518. core_framework-3.2.0/tests/unit/core/pagination_test.py +0 -582
  519. core_framework-3.2.0/uv.lock +0 -2607
  520. {core_framework-3.2.0 → core_framework-3.3.0}/.agents/skills/fastapi +0 -0
  521. {core_framework-3.2.0 → core_framework-3.3.0}/.agents/skills/library-skills/.library-skills.json +0 -0
  522. {core_framework-3.2.0 → core_framework-3.3.0}/.agents/skills/library-skills/SKILL.md +0 -0
  523. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/api-layer.mdc +0 -0
  524. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/api-reference-docs.mdc +0 -0
  525. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/api-validation.mdc +0 -0
  526. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/application-layer.mdc +0 -0
  527. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/constants-final.mdc +0 -0
  528. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/constitution.mdc +0 -0
  529. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/database-triggers.mdc +0 -0
  530. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/docstrings.mdc +0 -0
  531. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/domain-caller-context.mdc +0 -0
  532. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/domain-input-guards.mdc +0 -0
  533. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/domain-repository-exceptions.mdc +0 -0
  534. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/domain-services-and-adapters.mdc +0 -0
  535. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/flow-documentation.mdc +0 -0
  536. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/inline-raise-messages.mdc +0 -0
  537. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/integration-test-strategy.mdc +0 -0
  538. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/layer-boundaries.mdc +0 -0
  539. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/no-code-in-docs.mdc +0 -0
  540. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/postgres-config-conventions.mdc +0 -0
  541. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/strong-reads.mdc +0 -0
  542. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/rules/structured-logging.mdc +0 -0
  543. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/add-config/SKILL.md +0 -0
  544. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/add-domain/SKILL.md +0 -0
  545. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/fastapi +0 -0
  546. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/implement-feature/SKILL.md +0 -0
  547. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/recommend-features/SKILL.md +0 -0
  548. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/sync-host-rules/SKILL.md +0 -0
  549. {core_framework-3.2.0 → core_framework-3.3.0}/.cursor/skills/write-flow-doc/SKILL.md +0 -0
  550. {core_framework-3.2.0 → core_framework-3.3.0}/.dockerignore +0 -0
  551. {core_framework-3.2.0 → core_framework-3.3.0}/.github/ci/package-lock.json +0 -0
  552. {core_framework-3.2.0 → core_framework-3.3.0}/.github/ci/package.json +0 -0
  553. {core_framework-3.2.0 → core_framework-3.3.0}/.github/workflows/_deploy.yml +0 -0
  554. {core_framework-3.2.0 → core_framework-3.3.0}/.github/workflows/manual-deployment.yaml +0 -0
  555. {core_framework-3.2.0 → core_framework-3.3.0}/.github/workflows/manual-observability-deployment.yaml +0 -0
  556. {core_framework-3.2.0 → core_framework-3.3.0}/.github/workflows/publish-pypi.yml +0 -0
  557. {core_framework-3.2.0 → core_framework-3.3.0}/.gitignore +0 -0
  558. {core_framework-3.2.0 → core_framework-3.3.0}/.pre-commit-config.yaml +0 -0
  559. {core_framework-3.2.0 → core_framework-3.3.0}/.python-version +0 -0
  560. {core_framework-3.2.0 → core_framework-3.3.0}/LICENSE +0 -0
  561. {core_framework-3.2.0 → core_framework-3.3.0}/README.md +0 -0
  562. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/README +0 -0
  563. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/env.py +0 -0
  564. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/script.py.mako +0 -0
  565. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/versions/2d61a5e88d76_analytics_utm_events_add_kind.py +0 -0
  566. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/versions/585105e1149e_analytics_add_utm_events.py +0 -0
  567. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/versions/5b9ac98bb150_analytics_daily_fact.py +0 -0
  568. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic/versions/7f2a9c1d4e8b_analytics_daily_fact_day_index.py +0 -0
  569. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/analytics/alembic.ini +0 -0
  570. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/README +0 -0
  571. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/env.py +0 -0
  572. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/script.py.mako +0 -0
  573. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/comment_add_comment_attachments.py +0 -0
  574. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency.py +0 -0
  575. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency_created_at_index.py +0 -0
  576. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/comment_add_comment_mentions.py +0 -0
  577. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/comment_tombstone_status_model.py +0 -0
  578. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic/versions/v1_comment_init_baseline.py +0 -0
  579. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/comment/alembic.ini +0 -0
  580. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/extension/alembic/README +0 -0
  581. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/extension/alembic/env.py +0 -0
  582. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/extension/alembic/script.py.mako +0 -0
  583. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/extension/alembic/versions/v1_ext_init_baseline.py +0 -0
  584. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/extension/alembic.ini +0 -0
  585. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/README +0 -0
  586. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/env.py +0 -0
  587. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/script.py.mako +0 -0
  588. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/versions/media_add_attachment_staging_registry.py +0 -0
  589. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/versions/media_add_banner_staging_and_lease.py +0 -0
  590. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/versions/media_attachment_staging_registry_published_at.py +0 -0
  591. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic/versions/v1_media_init_baseline.py +0 -0
  592. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/media/alembic.ini +0 -0
  593. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/README +0 -0
  594. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/env.py +0 -0
  595. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/script.py.mako +0 -0
  596. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox.py +0 -0
  597. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox_dead_indexes.py +0 -0
  598. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox_pending_created_at_index.py +0 -0
  599. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic/versions/v1_mod_init_baseline.py +0 -0
  600. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/moderation/alembic.ini +0 -0
  601. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic/README +0 -0
  602. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic/env.py +0 -0
  603. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic/script.py.mako +0 -0
  604. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic/versions/2fdd68777706_notification_read_at_retention_index.py +0 -0
  605. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic/versions/v1_notif_init_baseline.py +0 -0
  606. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/notification/alembic.ini +0 -0
  607. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/README +0 -0
  608. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/env.py +0 -0
  609. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/script.py.mako +0 -0
  610. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_add_post_attachments.py +0 -0
  611. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_add_post_create_idempotency.py +0 -0
  612. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_add_post_create_idempotency_created_at_index.py +0 -0
  613. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_add_post_mentions.py +0 -0
  614. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_post_views_retention_high_water_mark.py +0 -0
  615. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/post_tombstone_status_model.py +0 -0
  616. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic/versions/v1_post_init_baseline.py +0 -0
  617. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/post/alembic.ini +0 -0
  618. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/README +0 -0
  619. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/env.py +0 -0
  620. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/script.py.mako +0 -0
  621. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/44df70a45ba6_user_add_signup_events.py +0 -0
  622. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_avatar_ingest_sequences.py +0 -0
  623. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_banner_ingest_sequences.py +0 -0
  624. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_date_of_birth_to_profiles.py +0 -0
  625. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_event_outbox.py +0 -0
  626. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_event_outbox_dead_indexes.py +0 -0
  627. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_add_event_outbox_pending_created_at_index.py +0 -0
  628. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/user_reserve_sentinel_user_ids.py +0 -0
  629. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic/versions/v1_user_init_baseline.py +0 -0
  630. {core_framework-3.2.0 → core_framework-3.3.0}/alembic/user/alembic.ini +0 -0
  631. {core_framework-3.2.0 → core_framework-3.3.0}/config.toml +0 -0
  632. {core_framework-3.2.0 → core_framework-3.3.0}/config.toml.template +0 -0
  633. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/__init__.py +0 -0
  634. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/__init__.py +0 -0
  635. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/__init__.py +0 -0
  636. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/analytics/__init__.py +0 -0
  637. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/analytics/router.py +0 -0
  638. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/analytics/schemas.py +0 -0
  639. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/cache/__init__.py +0 -0
  640. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/cache/router.py +0 -0
  641. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/comments/__init__.py +0 -0
  642. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/comments/router.py +0 -0
  643. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/moderation/__init__.py +0 -0
  644. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/moderation/router.py +0 -0
  645. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/moderation/schemas.py +0 -0
  646. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/outbox/__init__.py +0 -0
  647. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/outbox/schemas.py +0 -0
  648. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/posts/__init__.py +0 -0
  649. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/posts/router.py +0 -0
  650. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/router.py +0 -0
  651. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/users/__init__.py +0 -0
  652. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/admin/users/schemas.py +0 -0
  653. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/attachments/__init__.py +0 -0
  654. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/auth/__init__.py +0 -0
  655. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/auth/schemas.py +0 -0
  656. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/__init__.py +0 -0
  657. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/authenticated/__init__.py +0 -0
  658. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/public/__init__.py +0 -0
  659. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/public/router.py +0 -0
  660. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/public/schemas.py +0 -0
  661. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/router.py +0 -0
  662. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/comments/schemas.py +0 -0
  663. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/constants.py +0 -0
  664. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/events/__init__.py +0 -0
  665. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/events/schemas.py +0 -0
  666. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/idempotency/__init__.py +0 -0
  667. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/idempotency/dependencies.py +0 -0
  668. {core_framework-3.2.0/core_framework/application/media → core_framework-3.3.0/core_framework/api}/ingest_guards.py +0 -0
  669. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/notifications/__init__.py +0 -0
  670. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/notifications/authenticated/__init__.py +0 -0
  671. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/notifications/authenticated/router.py +0 -0
  672. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/notifications/authenticated/schemas.py +0 -0
  673. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/notifications/router.py +0 -0
  674. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/__init__.py +0 -0
  675. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/authenticated/__init__.py +0 -0
  676. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/public/__init__.py +0 -0
  677. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/public/router.py +0 -0
  678. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/public/schemas.py +0 -0
  679. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/router.py +0 -0
  680. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/posts/schemas.py +0 -0
  681. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/router.py +0 -0
  682. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/system/__init__.py +0 -0
  683. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/system/router.py +0 -0
  684. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/upload.py +0 -0
  685. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/__init__.py +0 -0
  686. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/authenticated/__init__.py +0 -0
  687. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/authenticated/mappers.py +0 -0
  688. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/authenticated/schemas.py +0 -0
  689. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/public/__init__.py +0 -0
  690. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/public/schemas.py +0 -0
  691. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/router.py +0 -0
  692. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/shared/__init__.py +0 -0
  693. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/api/users/shared/schemas.py +0 -0
  694. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/__init__.py +0 -0
  695. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/__init__.py +0 -0
  696. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/prune_service.py +0 -0
  697. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/read_service.py +0 -0
  698. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/registry.py +0 -0
  699. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/sources/__init__.py +0 -0
  700. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/sources/comment_created.py +0 -0
  701. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/sources/post_created.py +0 -0
  702. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/sources/post_viewed.py +0 -0
  703. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/analytics/sources/user_registered.py +0 -0
  704. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/auth/__init__.py +0 -0
  705. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/auth/access_service.py +0 -0
  706. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/auth/models.py +0 -0
  707. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/bootstrap.py +0 -0
  708. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/cache/__init__.py +0 -0
  709. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/cache/invalidate_service.py +0 -0
  710. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/cache/models.py +0 -0
  711. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/comments/__init__.py +0 -0
  712. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/comments/aggregation_service.py +0 -0
  713. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/comments/authenticated_service.py +0 -0
  714. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/email/enqueue.py +0 -0
  715. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/email/registry.py +0 -0
  716. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/email/send.py +0 -0
  717. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/events/__init__.py +0 -0
  718. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/events/event_token.py +0 -0
  719. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/events/models.py +0 -0
  720. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/events/utm_capture_kinds.py +0 -0
  721. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/media/__init__.py +0 -0
  722. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/media/attachment_read.py +0 -0
  723. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/media/read_url_config.py +0 -0
  724. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/moderation/__init__.py +0 -0
  725. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/moderation/moderator_service.py +0 -0
  726. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/moderation/report_service.py +0 -0
  727. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/moderation/scheduled_service.py +0 -0
  728. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/notifications/__init__.py +0 -0
  729. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/notifications/enums.py +0 -0
  730. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/notifications/mute_service.py +0 -0
  731. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/notifications/prune_service.py +0 -0
  732. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/__init__.py +0 -0
  733. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/block_mirrors.py +0 -0
  734. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/events.py +0 -0
  735. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/exceptions.py +0 -0
  736. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/follow_mirrors.py +0 -0
  737. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/handlers.py +0 -0
  738. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/polling_service.py +0 -0
  739. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/processing_service.py +0 -0
  740. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/outbox/restriction_mirrors.py +0 -0
  741. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/posts/__init__.py +0 -0
  742. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/posts/aggregation_service.py +0 -0
  743. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/shared/__init__.py +0 -0
  744. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/shared/enums.py +0 -0
  745. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/shared/exceptions.py +0 -0
  746. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/shared/request_context.py +0 -0
  747. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/users/__init__.py +0 -0
  748. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/users/aggregation_service.py +0 -0
  749. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/users/deletion_audit.py +0 -0
  750. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/users/enums.py +0 -0
  751. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/application/users/scheduled_service.py +0 -0
  752. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/asgi.py +0 -0
  753. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/bundled_alembic.py +0 -0
  754. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/context.py +0 -0
  755. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/database.py +0 -0
  756. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/exception_handlers/__init__.py +0 -0
  757. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/exception_handlers/application.py +0 -0
  758. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/exceptions.py +0 -0
  759. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/firebase.py +0 -0
  760. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/http_client.py +0 -0
  761. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/http_probes.py +0 -0
  762. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/logging.py +0 -0
  763. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/middleware.py +0 -0
  764. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/observability.py +0 -0
  765. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/process.py +0 -0
  766. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/redis.py +0 -0
  767. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/runtime.py +0 -0
  768. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/core/settings.py +0 -0
  769. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/__init__.py +0 -0
  770. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/README.md +0 -0
  771. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/__init__.py +0 -0
  772. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/constants.py +0 -0
  773. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/dependencies.py +0 -0
  774. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/exceptions.py +0 -0
  775. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/models.py +0 -0
  776. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/ports/__init__.py +0 -0
  777. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/ports/activity_source.py +0 -0
  778. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/analytics/repository.py +0 -0
  779. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/auth/dependencies.py +0 -0
  780. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/auth/exceptions.py +0 -0
  781. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/auth/models.py +0 -0
  782. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/auth/ports/__init__.py +0 -0
  783. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/comment/README.md +0 -0
  784. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/comment/__init__.py +0 -0
  785. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/comment/dependencies.py +0 -0
  786. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/comment/enums.py +0 -0
  787. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/comment/outcomes.py +0 -0
  788. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/README.md +0 -0
  789. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/__init__.py +0 -0
  790. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/exceptions.py +0 -0
  791. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/models.py +0 -0
  792. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/ports/send.py +0 -0
  793. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/email/service.py +0 -0
  794. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/exceptions.py +0 -0
  795. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/__init__.py +0 -0
  796. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/components/__init__.py +0 -0
  797. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/components/finals_publisher.py +0 -0
  798. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/exceptions.py +0 -0
  799. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/ports/__init__.py +0 -0
  800. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/ports/finals_publisher.py +0 -0
  801. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/attachment/ports/staging.py +0 -0
  802. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/__init__.py +0 -0
  803. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/components/__init__.py +0 -0
  804. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/components/finals_publisher.py +0 -0
  805. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/components/staging.py +0 -0
  806. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/components/variant_encoder.py +0 -0
  807. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/constants.py +0 -0
  808. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/exceptions.py +0 -0
  809. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/models.py +0 -0
  810. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/ports/__init__.py +0 -0
  811. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/ports/finals_publisher.py +0 -0
  812. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/ports/staging.py +0 -0
  813. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/ports/variant_encoder.py +0 -0
  814. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/avatar/service.py +0 -0
  815. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/__init__.py +0 -0
  816. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/components/__init__.py +0 -0
  817. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/components/finals_publisher.py +0 -0
  818. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/components/staging.py +0 -0
  819. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/components/variant_encoder.py +0 -0
  820. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/constants.py +0 -0
  821. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/exceptions.py +0 -0
  822. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/models.py +0 -0
  823. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/ports/__init__.py +0 -0
  824. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/ports/finals_publisher.py +0 -0
  825. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/ports/staging.py +0 -0
  826. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/ports/variant_encoder.py +0 -0
  827. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/banner/service.py +0 -0
  828. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/shared/__init__.py +0 -0
  829. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/shared/constants.py +0 -0
  830. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/shared/exceptions.py +0 -0
  831. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/media/shared/utils.py +0 -0
  832. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/moderation/__init__.py +0 -0
  833. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/moderation/enums.py +0 -0
  834. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/moderation/exceptions.py +0 -0
  835. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/moderation/models.py +0 -0
  836. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/moderation/outcomes.py +0 -0
  837. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/notification/__init__.py +0 -0
  838. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/notification/dependencies.py +0 -0
  839. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/notification/enums.py +0 -0
  840. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/notification/exceptions.py +0 -0
  841. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/notification/models.py +0 -0
  842. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/__init__.py +0 -0
  843. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/dependencies.py +0 -0
  844. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/exceptions.py +0 -0
  845. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/models.py +0 -0
  846. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/ports/__init__.py +0 -0
  847. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/ports/consumer.py +0 -0
  848. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/outbox/ports/producer.py +0 -0
  849. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/post/__init__.py +0 -0
  850. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/post/dependencies.py +0 -0
  851. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/post/enums.py +0 -0
  852. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/post/outcomes.py +0 -0
  853. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/repository_sql.py +0 -0
  854. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/user/README.md +0 -0
  855. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/user/constants.py +0 -0
  856. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/user/enums.py +0 -0
  857. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/user/exceptions.py +0 -0
  858. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/user/utils.py +0 -0
  859. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/domains/utils.py +0 -0
  860. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/__init__.py +0 -0
  861. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/email/resend_email_adapter.py +0 -0
  862. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/firebase/__init__.py +0 -0
  863. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/__init__.py +0 -0
  864. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/local_attachment_staging_adapter.py +0 -0
  865. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/local_avatar_staging_adapter.py +0 -0
  866. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/local_banner_staging_adapter.py +0 -0
  867. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/pillow_avatar_variant_encoder_adapter.py +0 -0
  868. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/pillow_banner_variant_encoder_adapter.py +0 -0
  869. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/pillow_staging_image.py +0 -0
  870. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/ssh_attachment_finals_publisher_adapter.py +0 -0
  871. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/ssh_banner_finals_publisher_adapter.py +0 -0
  872. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/ssh_finals_publisher_adapter.py +0 -0
  873. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/media/staging_paths.py +0 -0
  874. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/outbox/__init__.py +0 -0
  875. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/outbox/outbox_consumer_adapter.py +0 -0
  876. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/infrastructure/outbox/outbox_producer_adapter.py +0 -0
  877. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/main.py +0 -0
  878. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/migrate_cli.py +0 -0
  879. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/py.typed +0 -0
  880. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/__init__.py +0 -0
  881. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/config.py +0 -0
  882. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/containers.py +0 -0
  883. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/firebase.py +0 -0
  884. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/firebase_identity_toolkit.py +0 -0
  885. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/hookspecs.py +0 -0
  886. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/httpx_test_client.py +0 -0
  887. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/media.py +0 -0
  888. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/migrations.py +0 -0
  889. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/testing/plugin.py +0 -0
  890. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/__init__.py +0 -0
  891. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/main.py +0 -0
  892. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/__init__.py +0 -0
  893. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/analytics_refresh_cron.py +0 -0
  894. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_aggregate_comment_stats.py +0 -0
  895. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_aggregate_post_stats.py +0 -0
  896. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_aggregate_user_stats.py +0 -0
  897. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_expired_account_deletions.py +0 -0
  898. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_poll_outbox.py +0 -0
  899. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_prune_analytics_daily_facts.py +0 -0
  900. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_prune_post_views.py +0 -0
  901. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_prune_read_notifications.py +0 -0
  902. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_purge_expired_create_idempotency_keys.py +0 -0
  903. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_refresh_analytics.py +0 -0
  904. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_sweep_stale_attachment_staging.py +0 -0
  905. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_sweep_stale_avatar_staging.py +0 -0
  906. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/schedules/schedule_sweep_stale_banner_staging.py +0 -0
  907. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/delete_attachment_finals.py +0 -0
  908. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/delete_superseded_avatar_finals.py +0 -0
  909. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/delete_superseded_banner_finals.py +0 -0
  910. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_account_deletion_scheduled_email.py +0 -0
  911. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_admin_user_deletion.py +0 -0
  912. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_aggregate_comment_stats.py +0 -0
  913. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_aggregate_post_stats.py +0 -0
  914. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_aggregate_user_stats.py +0 -0
  915. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_attachment_asset_variants.py +0 -0
  916. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_banner_asset_variants.py +0 -0
  917. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_media_asset_variants.py +0 -0
  918. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_mute_lift.py +0 -0
  919. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_outbox_row.py +0 -0
  920. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_refresh_analytics_bucket.py +0 -0
  921. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/tasks/process_transactional_email.py +0 -0
  922. {core_framework-3.2.0 → core_framework-3.3.0}/core_framework/worker/worker_context.py +0 -0
  923. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/README.md +0 -0
  924. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/app/docker-compose.dev.yaml +0 -0
  925. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/app/dockerfile +0 -0
  926. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/.env.example +0 -0
  927. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/README.md +0 -0
  928. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/docker-compose.yml +0 -0
  929. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/dashboards/application/api-http.json +0 -0
  930. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/dashboards/application/worker-jobs.json +0 -0
  931. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/dashboards/infrastructure/node-exporter.json +0 -0
  932. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/dashboards/infrastructure/postgres-exporter.json +0 -0
  933. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/dashboards/infrastructure/redis-exporter.json +0 -0
  934. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/provisioning/dashboards/dashboards.yml +0 -0
  935. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/grafana/provisioning/datasources/datasources.yml +0 -0
  936. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/loki.yaml +0 -0
  937. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/otel-collector-config.yaml +0 -0
  938. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/prometheus.yml +0 -0
  939. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets/node/.gitkeep +0 -0
  940. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets/postgres/.gitkeep +0 -0
  941. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets/redis/.gitkeep +0 -0
  942. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets.example/README.md +0 -0
  943. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets.example/node.yml.example +0 -0
  944. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets.example/postgres.yml.example +0 -0
  945. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/targets.example/redis.yml.example +0 -0
  946. {core_framework-3.2.0 → core_framework-3.3.0}/deploy/observability/tempo.yaml +0 -0
  947. {core_framework-3.2.0 → core_framework-3.3.0}/docs/README.md +0 -0
  948. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/README.md +0 -0
  949. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/edge-upload-limits.md +0 -0
  950. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/examples/Caddyfile.example +0 -0
  951. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/examples/Caddyfile.observability.example +0 -0
  952. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/examples/image-server-known-hosts.example +0 -0
  953. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/playbook/postgres-backup-playbook.md +0 -0
  954. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/playbook/py-spy-playbook.md +0 -0
  955. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/app-server-deploy-ssh.md +0 -0
  956. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/caddy-setup.md +0 -0
  957. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/image-server-ssh.md +0 -0
  958. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/postgres-backup-setup.md +0 -0
  959. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/postgres-setup.md +0 -0
  960. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/py-spy-setup.md +0 -0
  961. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/redis-setup.md +0 -0
  962. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/guides/setup/ubuntu-server-setup.md +0 -0
  963. {core_framework-3.2.0 → core_framework-3.3.0}/docs/deployments/postgres-backup-design.md +0 -0
  964. {core_framework-3.2.0 → core_framework-3.3.0}/docs/design/utm-events-design.md +0 -0
  965. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/analytics/admin_analytics_reads.md +0 -0
  966. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/comments/README.md +0 -0
  967. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/comments/delete_comment.md +0 -0
  968. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/comments/retrieve_comments.md +0 -0
  969. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/deletion/overview.md +0 -0
  970. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/media/README.md +0 -0
  971. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/media/avatar-upload-design.md +0 -0
  972. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/media/banner-upload-design.md +0 -0
  973. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/moderation/README.md +0 -0
  974. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/README.md +0 -0
  975. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/delete_post.md +0 -0
  976. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/hashtag_discovery.md +0 -0
  977. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/post_stats_aggregation.md +0 -0
  978. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/post_visibility.md +0 -0
  979. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/posts/retrieve_posts.md +0 -0
  980. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/users/follow-system-design.md +0 -0
  981. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/users/my_posts_and_comments.md +0 -0
  982. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/users/public_profile.md +0 -0
  983. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/users/user_removal.md +0 -0
  984. {core_framework-3.2.0 → core_framework-3.3.0}/docs/domains/users/user_stats_aggregation.md +0 -0
  985. {core_framework-3.2.0 → core_framework-3.3.0}/docs/library/README.md +0 -0
  986. {core_framework-3.2.0 → core_framework-3.3.0}/docs/library/api.md +0 -0
  987. {core_framework-3.2.0 → core_framework-3.3.0}/docs/platform/README.md +0 -0
  988. {core_framework-3.2.0 → core_framework-3.3.0}/docs/platform/conventions.md +0 -0
  989. {core_framework-3.2.0 → core_framework-3.3.0}/docs/platform/database-triggers.md +0 -0
  990. {core_framework-3.2.0 → core_framework-3.3.0}/docs/platform/layers-and-boundaries.md +0 -0
  991. {core_framework-3.2.0 → core_framework-3.3.0}/docs/reviews/README.md +0 -0
  992. {core_framework-3.2.0 → core_framework-3.3.0}/firebase_config.example.json +0 -0
  993. {core_framework-3.2.0 → core_framework-3.3.0}/makefile +0 -0
  994. {core_framework-3.2.0 → core_framework-3.3.0}/tach.toml +0 -0
  995. {core_framework-3.2.0 → core_framework-3.3.0}/tests/__init__.py +0 -0
  996. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/_auth.py +0 -0
  997. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/_canaries.py +0 -0
  998. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/_media.py +0 -0
  999. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/_settings.py +0 -0
  1000. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/_upload_payloads.py +0 -0
  1001. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/conftest.py +0 -0
  1002. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/media/pipeline_test.py +0 -0
  1003. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/smoke/canary_test.py +0 -0
  1004. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/smoke/media_test.py +0 -0
  1005. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/smoke/system_test.py +0 -0
  1006. {core_framework-3.2.0 → core_framework-3.3.0}/tests/e2e/smoke/tls_host_test.py +0 -0
  1007. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/__init__.py +0 -0
  1008. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/analytics/_helpers.py +0 -0
  1009. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/__init__.py +0 -0
  1010. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/_outbox_helpers.py +0 -0
  1011. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/__init__.py +0 -0
  1012. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/analytics/__init__.py +0 -0
  1013. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/cache/__init__.py +0 -0
  1014. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/comments/__init__.py +0 -0
  1015. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/moderation/__init__.py +0 -0
  1016. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/outbox/__init__.py +0 -0
  1017. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/posts/__init__.py +0 -0
  1018. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/admin/users/__init__.py +0 -0
  1019. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/auth/__init__.py +0 -0
  1020. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/comments/__init__.py +0 -0
  1021. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/comments/authenticated/__init__.py +0 -0
  1022. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/comments/authenticated/comment_writes_integration_test.py +0 -0
  1023. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/comments/public/__init__.py +0 -0
  1024. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/create_idempotency_integration_test.py +0 -0
  1025. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/media/ingest_contract_test.py +0 -0
  1026. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/mentions/mentions_integration_test.py +0 -0
  1027. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/notifications/__init__.py +0 -0
  1028. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/posts/__init__.py +0 -0
  1029. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/posts/comment_count_aggregation_test.py +0 -0
  1030. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/posts/public/__init__.py +0 -0
  1031. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/public_read_by_id_unavailable_detail_test.py +0 -0
  1032. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/system/__init__.py +0 -0
  1033. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/system/router_test.py +0 -0
  1034. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/users/__init__.py +0 -0
  1035. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/users/authenticated/__init__.py +0 -0
  1036. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/users/public/__init__.py +0 -0
  1037. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/api/users/user_deletion_integration_test.py +0 -0
  1038. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/worker/__init__.py +0 -0
  1039. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/worker/analytics_prune_test.py +0 -0
  1040. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/worker/attachment_upload_test.py +0 -0
  1041. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/worker/read_notifications_retention_test.py +0 -0
  1042. {core_framework-3.2.0 → core_framework-3.3.0}/tests/integration/worker/stale_staging_sweep_test.py +0 -0
  1043. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/__init__.py +0 -0
  1044. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/api/comments/authenticated/comment_request_schemas_test.py +0 -0
  1045. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/api/dedupe_preserving_order_test.py +0 -0
  1046. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/api/posts/authenticated/post_update_mapper_test.py +0 -0
  1047. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/application/comments/__init__.py +0 -0
  1048. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/application/events/event_service_test.py +0 -0
  1049. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/application/notifications/inbox_service_test.py +0 -0
  1050. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/application/shared/request_context_test.py +0 -0
  1051. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/application/users/deletion_audit_test.py +0 -0
  1052. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/core/bundled_alembic_test.py +0 -0
  1053. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/core/migrate_cli_test.py +0 -0
  1054. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/docs/_api_reference.py +0 -0
  1055. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/docs/api_routes_test.py +0 -0
  1056. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/domains/__init__.py +0 -0
  1057. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/domains/comment/__init__.py +0 -0
  1058. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/domains/post/models_test.py +0 -0
  1059. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/domains/user/service_test.py +0 -0
  1060. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/infrastructure/__init__.py +0 -0
  1061. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/infrastructure/media/__init__.py +0 -0
  1062. {core_framework-3.2.0 → core_framework-3.3.0}/tests/unit/infrastructure/media/ssh_finals_publisher_adapter_test.py +0 -0
@@ -0,0 +1,61 @@
1
+ ---
2
+ description: Alembic migrations — revision id format and index DDL conventions
3
+ globs: alembic/**/alembic/versions/*.py
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Alembic migrations
8
+
9
+ ## Revision IDs
10
+
11
+ `alembic_version.version_num` is a **32-character** string. Revision ids must stay well under that limit.
12
+
13
+ ### New revisions (required)
14
+
15
+ - Set `revision` to a **12-character lowercase hex** string (Alembic default), e.g. `a56bc6b7f799`.
16
+ - Generate with `python -c "import secrets; print(secrets.token_hex(6))"` or `alembic revision`.
17
+ - Put the human-readable slug in the **filename** and the module docstring `Revision ID:` line only if you mirror the hex id there — **do not** use descriptive slugs as `revision`.
18
+
19
+ ```python
20
+ # ✅ Preferred
21
+ """replace deleted post status with tombstone statuses
22
+
23
+ Revision ID: 120bf6be81eb
24
+ Revises: a56bc6b7f799
25
+ """
26
+
27
+ revision: str = "120bf6be81eb"
28
+ ```
29
+
30
+ ```python
31
+ # ❌ Avoid — long, wastes version_num budget, inconsistent with recent migrations
32
+ revision: str = "post_tombstone_status_model"
33
+ ```
34
+
35
+ ### Exceptions
36
+
37
+ - Collapsed **`v1_*_init`** baseline revisions keep their stable names (`v1_post_init`, etc.) — do not rename shipped baselines.
38
+ - **Legacy descriptive slug** revision ids (e.g. `post_add_post_mentions`, `user_add_date_of_birth`) stay as-is. Do not rewrite or collapse history just to convert them to hex. Do not re-flag them on B11 unless a deliberate baseline collapse is in progress.
39
+
40
+ ### Do not rename shipped revision ids
41
+
42
+ If a revision may already be applied in any environment, **do not** change its `revision` string. Add a forward migration instead.
43
+
44
+ ## Index DDL
45
+
46
+ ### New index migrations (required)
47
+
48
+ In **`upgrade()`**, create indexes with **`IF NOT EXISTS`** so migrations succeed when an index was already applied manually in production:
49
+
50
+ ```python
51
+ op.execute("""
52
+ create index if not exists idx_example_created_at
53
+ on example_table (created_at);
54
+ """)
55
+ ```
56
+
57
+ Use **`drop index if exists`** in **`downgrade()`**.
58
+
59
+ ### Do not retrofit index DDL
60
+
61
+ Do **not** edit shipped migrations only to add `if not exists` — those revisions may already be applied. New forward migrations follow this rule; legacy `create index` without `if not exists` stays as-is.
@@ -0,0 +1,44 @@
1
+ ---
2
+ description: Enforce importing from domain __init__.py in API/application layers
3
+ globs:
4
+ - core_framework/api/**/*.py
5
+ - core_framework/application/**/*.py
6
+ ---
7
+
8
+ # Domain imports
9
+
10
+ When importing from **`core_framework/domains/*`** in API or application code:
11
+
12
+ ## Allowed
13
+
14
+ - Public symbols from domain **`__init__.py`** (models, enums, constants, outcomes).
15
+ - Services from **`dependencies.py`** (e.g. **`user_service`**).
16
+
17
+ ## Prohibited
18
+
19
+ - Typed or base **domain exceptions** in API/application — use **`application.shared.exceptions`**. Full policy: **`error-boundary.mdc`**.
20
+ - Direct imports from internal modules (`models`, `enums`, `repository`, `service`, `exceptions`).
21
+
22
+ ```python
23
+ # ✅
24
+ from core_framework.domains.user import Profile, UserRole
25
+ from core_framework.domains.user.dependencies import user_service
26
+
27
+ # ❌
28
+ from core_framework.domains.post import PostUpdateNotFoundException
29
+ from core_framework.domains.user.models import Profile
30
+ ```
31
+
32
+ ## Export policy
33
+
34
+ Export from **`__init__.py`** only what outer layers need. Typed exceptions stay internal; export **only** **`BaseXxxException`** per domain for inheritance typing — not for per-domain HTTP handlers. **`DomainValidationError`** lives in **`domains/exceptions.py`** (core handler wiring only).
35
+
36
+ To see what a domain exports, check its **`__init__.py`** **`__all__`**.
37
+
38
+ ## After a domain call
39
+
40
+ 1. Return **`None`** or empty when the use case allows.
41
+ 2. Raise an **application** exception when HTTP must signal failure.
42
+ 3. Extend the domain service API to absorb typed exceptions internally.
43
+
44
+ Application code never imports repositories. Exception boundary: **`error-boundary.mdc`**.
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: HTTP error boundaries — application vs domain exceptions, handlers, anti-enumeration
3
+ globs:
4
+ - core_framework/core/exception_handlers/**/*.py
5
+ - core_framework/application/**/*.py
6
+ - core_framework/api/**/router.py
7
+ - core_framework/api/**/schemas.py
8
+ - core_framework/domains/**/exceptions.py
9
+ ---
10
+
11
+ # Error boundary
12
+
13
+ Platform contract: **`docs/platform/client-error-visibility.md`**. Domain imports: **`domain-imports.mdc`**.
14
+
15
+ ## Layers
16
+
17
+ | Layer | Outward errors | HTTP |
18
+ |-------|----------------|------|
19
+ | **Application** | **`application.shared.exceptions`**, **`InvalidPageTokenError`** | Handlers map type → status + catalog **`detail`** |
20
+ | **API** | Pydantic; **`HTTPException`** for transport-local guards | **422** field errors; router-chosen status + **`detail`** |
21
+ | **Domain typed** | Internal — not imported by API/application | No typed handlers |
22
+ | **Domain `BaseXxxException`** | Handler catch-all only | **500** if leaked |
23
+
24
+ ## Application and domain
25
+
26
+ - Application **must not** import or raise typed domain exceptions. Signal via **`None`**, empty collections, or **`application.shared.exceptions`**.
27
+ - Typed domain exceptions inherit domain **`BaseXxxException`** → **`BaseDomainException`**. Export **only** **`BaseXxxException`** from domain **`__init__.py`**, not typed subclasses.
28
+ - **`DomainValidationError`** → dedicated **400** handler + **`GENERIC_BAD_REQUEST_DETAIL`**; do not put internal reason in HTTP **`detail`**.
29
+ - Leaked typed domain exception → **`BaseDomainException`** handler → **500** + **`GENERIC_INTERNAL_SERVER_ERROR_DETAIL`**.
30
+
31
+ ## Handler registration
32
+
33
+ - Use **`register_exception_handler`** from **`core_framework.core.exception_handlers.common`** — not raw **`app.add_exception_handler`** elsewhere.
34
+ - Register handlers in **`core_framework/core/exception_handlers/setup.py`** and **`application.py`**: application types (specific before any base), **`InvalidPageTokenError`**, cashews **`RateLimitError`** (**429**), **`DomainValidationError`**, one **`BaseDomainException`** leak handler, then **`Exception`** unmapped.
35
+ - No per-domain handler modules for typed exceptions. Handlers translate only — no business logic or repository calls.
36
+ - Do not log **error** for expected application 4xx; **`DomainValidationError`** at **warning**/**info**.
37
+
38
+ ## Catalog constants
39
+
40
+ **`GENERIC_BAD_REQUEST_DETAIL`** (400), **`GENERIC_NOT_FOUND_DETAIL`** (404), **`GENERIC_FORBIDDEN_DETAIL`** (403), **`GENERIC_CONFLICT_DETAIL`** (409), ingest 413/415, **`GENERIC_TOO_MANY_REQUESTS_DETAIL`** (429), **`GENERIC_SERVICE_UNAVAILABLE_DETAIL`** (503), **`GENERIC_INTERNAL_SERVER_ERROR_DETAIL`** (500).
41
+
42
+ ## Anti-enumeration (public routes)
43
+
44
+ - Read-by-id: missing / hidden / withheld → same status + **`GENERIC_NOT_FOUND_DETAIL`** where flow docs align.
45
+ - Idempotent writes on unknown ids → **204** without leaking existence. Empty list pages are OK.
46
+ - Admin/internal routes may differ when documented. Intentional existence-check endpoints are separate product surface.
47
+
48
+ ## Validation order
49
+
50
+ User-fixable input shape → API schemas (**422**) or router **`HTTPException`**. Use-case outcomes → application exceptions + handlers. Domain backstops → **`DomainValidationError`** → generic **400** (never domain text in **`detail`**).
51
+
52
+ ## Logging
53
+
54
+ Do not **`logger.error`** at every domain **`raise`**.
55
+
56
+ Apply to new handlers and touched raise sites unless the task scopes repo-wide migration.
@@ -0,0 +1,87 @@
1
+ ---
2
+ description: Domain repositories must not query other domains' Postgres schemas
3
+ globs:
4
+ - core_framework/domains/**/repository.py
5
+ alwaysApply: false
6
+ ---
7
+
8
+ # Repository schema isolation
9
+
10
+ Each domain repository may only read/write tables in **its own** Postgres schema.
11
+
12
+ Canonical rule: `docs/platform/layers-and-boundaries.md` — *no cross-domain schema reads, writes, joins, or foreign keys*.
13
+
14
+ ## Schema qualification
15
+
16
+ Repositories receive unquoted `schema` from `runtime.settings.postgres_schemas` in `dependencies.py` (keyword-only `__init__` arg). In `__init__`:
17
+
18
+ - `self.schema` — config schema name (e.g. `post`)
19
+ - `self.schema_sql` — `quote_postgres_identifier(schema)` for SQL interpolation
20
+
21
+ Use `{self.schema_sql}.table` in f-string SQL — not hard-coded `"post".` literals.
22
+
23
+ ## Allowed in a repository
24
+
25
+ - SQL qualified with that domain's schema only (e.g. `{self.schema_sql}.posts` in `PostRepository`).
26
+ - **Within-schema** policy gates (e.g. `insert_post_like` checks `{self.schema_sql}.posts.status = active`).
27
+ - **Lookup mirrors** in the same schema (`user_blocks_lookup`, `user_restrictions_lookup`, `user_followers_lookup`) — synced by application flows; mirrors are not authoritative.
28
+
29
+ ## Forbidden in a repository
30
+
31
+ - `FROM` / `JOIN` / `EXISTS` / `INSERT … SELECT` against another domain's schema.
32
+ - Importing another domain's `service`, `repository`, or models to enforce policy.
33
+
34
+ ```python
35
+ # ❌ moderation/repository.py — cross-domain EXISTS (illustrative schema literals)
36
+ insert into {moderation_schema_sql}.post_reports (...)
37
+ select $1, $2, $3, $4
38
+ where exists (
39
+ select 1 from {post_schema_sql}.posts
40
+ where id = $2 and status = 'active'
41
+ )
42
+
43
+ # ❌ notification/repository.py — cross-domain mute gate
44
+ insert into {notification_schema_sql}.notification_mutes (...)
45
+ select ...
46
+ where exists (select 1 from {comment_schema_sql}.comments where ...)
47
+ ```
48
+
49
+ ## Alembic migrations (different convention)
50
+
51
+ Do **not** apply repository schema-qualification rules to `alembic/**/versions/*.py`.
52
+
53
+ Each domain Alembic tree sets `search_path` to that domain's schema in `env.py`. Migration SQL uses **unqualified** table and type names (`posts`, `post_reports`, `create type post_status …`) — not `"post".posts`.
54
+
55
+ **Exception — PL/pgSQL trigger / function bodies:** Runtime `search_path` for functions is not the migration session’s path, so audit trigger bodies may **hard-code** that domain’s schema qualifier (e.g. `"user".user_change_history`, `moderation.restriction_history`). That is required and accepted. Keep `[postgres_schemas]` values aligned with those literals; do not treat this as a B11 isolation violation.
56
+
57
+ Cross-domain rules still apply to migrations:
58
+
59
+ - No `REFERENCES` / FKs to tables in another domain's schema.
60
+ - No DDL that reads or writes another domain's objects.
61
+
62
+ Stay within the migration tree's domain; one schema per Alembic env.
63
+
64
+ ## Where cross-domain policy belongs
65
+
66
+ **Application layer** (or domain service orchestration via dependencies, never cross-schema SQL):
67
+
68
+ ```python
69
+ # ✅ application/posts/authenticated_service.py
70
+ post = await post_deps.post_service.retrieve_post_with_metadata_by_id_if_exists(post_id=post_id)
71
+ if post is None or post.status != PostStatus.ACTIVE:
72
+ return False
73
+ return await moderation_deps.moderation_service.add_post_report(...)
74
+ ```
75
+
76
+ Before adding a repository write that depends on another domain's row state:
77
+
78
+ 1. Can the owning domain gate it within its schema? → do that (likes, views, stats dirty).
79
+ 2. Otherwise → gate in `application/**/*_service.py` via the owning domain's service API.
80
+
81
+ ## Self-check (repositories only)
82
+
83
+ In `domains/<name>/repository.py`:
84
+
85
+ - Every table/type qualifier in SQL must use `{self.schema_sql}.…` (that domain's schema only).
86
+ - Do not hard-code `"user".`, `"post".`, etc. — use `self.schema` / `self.schema_sql` from config.
87
+ - Mirror lookup tables (`user_blocks_lookup`, etc.) still live under `{self.schema_sql}` when they belong to that domain's schema.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: code-review
3
+ description: Review code for quality, architecture compliance, and best practices. Use when the user asks for a code review, audit, or review.
4
+ ---
5
+
6
+ # Code Review
7
+
8
+ ## Output format (required)
9
+
10
+ **Actionable findings only:**
11
+
12
+ - Bugs, wrong behavior, improvements, optimizations, doc/code contradictions, parallel implementation drift (sibling flows that diverge without documented reason).
13
+ - Prioritize by severity with file context and fix direction.
14
+ - **Do not** praise, summarize strengths, or pad with checklist pass narratives.
15
+ - One-line scope is fine. If nothing is wrong, say so in one sentence.
16
+
17
+ Do **not** flag documented accepted trade-offs in **`docs/platform/architecture-decisions.md`** unless the implementation violates them.
18
+
19
+ ## Workflow
20
+
21
+ 1. Read **`docs/platform/layers-and-boundaries.md`**, **`conventions.md`**, and **`architecture-decisions.md`** for the reviewed scope.
22
+ 1. Apply **scoped rules** (`.cursor/rules/*.mdc`) matching files under review — especially **`error-boundary`**, **`domain-imports`**, **`api-layer`**, **`application-layer`**, **`strong-reads`**.
23
+ 1. Report findings only — no filler.
24
+
25
+ ## Quick checks
26
+
27
+ - Application services: no HTTP types, no domain exceptions, no Pydantic return types, one-line docstrings.
28
+ - API: thin routers, validation in schemas, orchestration in application — **fastapi** skill (`.agents/skills/fastapi/`) + **`api-layer`** / **`api-validation`** / **`error-boundary`** rules.
29
+ - Domain: imports only via **`__init__.py`** / **`dependencies`** from outer layers; no caller-context names (**`domain-caller-context`**).
30
+ - Read-after-write refetches use **`*_strong`** where applicable.
31
+ - **Python modernity (constitution):** prefer current 3.14 syntax in reviewed code — PEP 695 type params over module-level `TypeVar`/`ParamSpec`; no unnecessary `from __future__ import annotations`; builtins / `X | Y` over legacy `typing` aliases; `asyncio.TaskGroup` over `gather`.
32
+
33
+ ## Parallel drift
34
+
35
+ Flag sibling modules with the same job but different structure (async layout, cleanup order, error/idempotency contracts) when docs do not explain the difference. Do **not** flag differences called out as intentional in design/flow docs or in **`docs/reviews/slices.md`** B7 **Do not flag** (for example root vs reply create-idempotency replay placement in **`docs/design/create-idempotency-design.md`**).
@@ -0,0 +1,358 @@
1
+ name: Development CI/CD
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ concurrency:
9
+ group: core-framework-development
10
+ cancel-in-progress: true
11
+
12
+ permissions: {}
13
+
14
+ jobs:
15
+ package-smoke:
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: read
19
+ steps:
20
+ - name: Checkout code
21
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
22
+ with:
23
+ persist-credentials: false
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
27
+ with:
28
+ version: "0.7.9"
29
+ enable-cache: true
30
+ cache-dependency-glob: "uv.lock"
31
+
32
+ - name: Set up Python
33
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
34
+ with:
35
+ python-version-file: ".python-version"
36
+
37
+ - name: Build wheel and verify install
38
+ run: |
39
+ set -euo pipefail
40
+ rm -rf dist
41
+ uv build
42
+ python -m venv /tmp/wheel-smoke
43
+ /tmp/wheel-smoke/bin/pip install --upgrade pip
44
+ WHL=$(echo dist/*.whl)
45
+ /tmp/wheel-smoke/bin/pip install "${WHL}"
46
+ /tmp/wheel-smoke/bin/python -c "
47
+ import core_framework
48
+ from core_framework.api.router import router
49
+ from core_framework.api.dependencies import (
50
+ OptionalUserID,
51
+ RequiredFirebaseUser,
52
+ RequiredUserID,
53
+ check_admin_role,
54
+ check_not_banned,
55
+ require_client_ip,
56
+ )
57
+ from core_framework.api.schemas import BasePatchRequest
58
+ from core_framework.api.users.shared.schemas import UserID, Username, UserReference
59
+ from core_framework.application.analytics.read_service import retrieve_analytics_kind_totals_for_range
60
+ from core_framework.application.analytics.registry import register_activity_source
61
+ from core_framework.application.bootstrap import configure_application_dependencies, configure_core_framework_runtime
62
+ from core_framework.application.email import (
63
+ ACCOUNT_DELETION_SCHEDULED_KIND,
64
+ enqueue_transactional_email,
65
+ register_email_content,
66
+ )
67
+ from core_framework.application.events.event_service import register_event_handler
68
+ from core_framework.application.events.models import Event
69
+ from core_framework.application.events.utm_capture_kinds import register_utm_capture_kind
70
+ from core_framework.application.shared.enums import EventType
71
+ from core_framework.application.shared.worker_jobs import enqueue_from_worker, enqueue_job
72
+ from core_framework.bundled_alembic import alembic_ini_path, bundled_alembic_root, iter_alembic_ini_paths
73
+ from core_framework.core import (
74
+ clear_all_rate_limit_counters,
75
+ clear_rate_limit_counters,
76
+ configure_core_runtime,
77
+ rate_limit,
78
+ seed_rate_limit_counters,
79
+ )
80
+ from core_framework.core.cache import close_cashews_backend, init_cashews_backend
81
+ from core_framework.core.database import Postgres
82
+ from core_framework.core.exception_handlers import setup_exception_handlers
83
+ from core_framework.core.exception_handlers.common import (
84
+ GENERIC_BAD_REQUEST_DETAIL,
85
+ register_exception_handler,
86
+ )
87
+ from core_framework.core.firebase import init_firebase
88
+ from core_framework.core.http_client import HttpClient
89
+ from core_framework.core.logging import setup_logging
90
+ from core_framework.core.middleware import setup_middleware
91
+ from core_framework.core.observability import (
92
+ configure_observability_providers,
93
+ instrument_arq_jobs,
94
+ setup_observability,
95
+ setup_worker_observability,
96
+ shutdown_observability,
97
+ with_arq_job_telemetry,
98
+ )
99
+ from core_framework.core.pagination import (
100
+ OffsetQueryParams,
101
+ PaginationResponse,
102
+ paginate_cursor,
103
+ paginate_offset,
104
+ )
105
+ from core_framework.core.runtime import CoreRuntime, build_core_runtime, unconfigured_dependency
106
+ from core_framework.core.settings import PostgresSchemasConfig, RetentionConfig, Settings, load_default_settings
107
+ from core_framework.domains.analytics import ActivityCount, ActivitySourcePort
108
+ from core_framework.domains.exceptions import BaseDomainException, DomainValidationError
109
+ from core_framework.domains.media import (
110
+ ATTACHMENT_INGEST_MAX_BYTES,
111
+ AVATAR_INGEST_MAX_BYTES,
112
+ BANNER_INGEST_MAX_BYTES,
113
+ )
114
+ import core_framework.domains.user.dependencies as user_deps
115
+ from core_framework.domains.utils import require_non_blank, require_non_blank_kwargs, require_positive_int
116
+ from core_framework.main import init_app
117
+ from core_framework.worker.main import (
118
+ CORE_FRAMEWORK_QUEUE_NAME,
119
+ WorkerSettings,
120
+ build_worker_settings_kwargs,
121
+ create_worker_settings_for_shared_runtime,
122
+ )
123
+ from core_framework.worker.schedules import build_schedules
124
+ from core_framework.worker.tasks import tasks
125
+ from core_framework.worker.worker_context import WorkerJobContext, WorkerStartupContext
126
+ assert router is not None
127
+ assert init_app is not None
128
+ assert Settings is not None
129
+ assert load_default_settings is not None
130
+ assert PostgresSchemasConfig is not None
131
+ assert RetentionConfig is not None
132
+ assert RequiredUserID is not None
133
+ assert OptionalUserID is not None
134
+ assert RequiredFirebaseUser is not None
135
+ assert check_not_banned is not None
136
+ assert check_admin_role is not None
137
+ assert require_client_ip is not None
138
+ assert BasePatchRequest is not None
139
+ assert UserReference is not None
140
+ assert UserID is not None
141
+ assert Username is not None
142
+ assert register_activity_source is not None
143
+ assert retrieve_analytics_kind_totals_for_range is not None
144
+ assert register_event_handler is not None
145
+ assert register_utm_capture_kind is not None
146
+ assert Event is not None
147
+ assert EventType is not None
148
+ assert register_email_content is not None
149
+ assert enqueue_transactional_email is not None
150
+ assert ACCOUNT_DELETION_SCHEDULED_KIND
151
+ assert configure_application_dependencies is not None
152
+ assert configure_core_framework_runtime is not None
153
+ assert configure_core_runtime is not None
154
+ assert CoreRuntime is not None
155
+ assert build_core_runtime is not None
156
+ assert unconfigured_dependency is not None
157
+ assert ActivitySourcePort is not None
158
+ assert ActivityCount is not None
159
+ assert AVATAR_INGEST_MAX_BYTES > 0
160
+ assert BANNER_INGEST_MAX_BYTES > 0
161
+ assert ATTACHMENT_INGEST_MAX_BYTES > 0
162
+ assert user_deps is not None
163
+ assert BaseDomainException is not None
164
+ assert DomainValidationError is not None
165
+ assert require_non_blank is not None
166
+ assert require_non_blank_kwargs is not None
167
+ assert require_positive_int is not None
168
+ assert Postgres is not None
169
+ assert HttpClient is not None
170
+ assert register_exception_handler is not None
171
+ assert GENERIC_BAD_REQUEST_DETAIL
172
+ assert setup_logging is not None
173
+ assert setup_middleware is not None
174
+ assert setup_exception_handlers is not None
175
+ assert setup_observability is not None
176
+ assert setup_worker_observability is not None
177
+ assert configure_observability_providers is not None
178
+ assert instrument_arq_jobs is not None
179
+ assert with_arq_job_telemetry is not None
180
+ assert shutdown_observability is not None
181
+ assert rate_limit is not None
182
+ assert clear_rate_limit_counters is not None
183
+ assert clear_all_rate_limit_counters is not None
184
+ assert seed_rate_limit_counters is not None
185
+ assert OffsetQueryParams is not None
186
+ assert PaginationResponse is not None
187
+ assert paginate_offset is not None
188
+ assert paginate_cursor is not None
189
+ assert init_cashews_backend is not None
190
+ assert close_cashews_backend is not None
191
+ assert init_firebase is not None
192
+ assert enqueue_job is not None
193
+ assert enqueue_from_worker is not None
194
+ assert WorkerSettings is not None
195
+ assert CORE_FRAMEWORK_QUEUE_NAME
196
+ assert build_worker_settings_kwargs is not None
197
+ assert create_worker_settings_for_shared_runtime is not None
198
+ assert build_schedules is not None
199
+ assert tasks
200
+ assert WorkerJobContext is not None
201
+ assert WorkerStartupContext is not None
202
+ assert bundled_alembic_root().is_dir()
203
+ assert (bundled_alembic_root() / 'user' / 'alembic.ini').is_file()
204
+ assert alembic_ini_path('user').is_file()
205
+ assert len(iter_alembic_ini_paths()) >= 1
206
+ "
207
+ /tmp/wheel-smoke/bin/pip install "${WHL}[testing]"
208
+ /tmp/wheel-smoke/bin/python -c "
209
+ from core_framework.testing import TestConfig, create_firebase_user_token
210
+ from core_framework.testing.media import (
211
+ attachment_upload_files,
212
+ avatar_upload_files,
213
+ banner_upload_files,
214
+ minimal_png_bytes,
215
+ reconfigure_media_for_testing,
216
+ )
217
+ assert TestConfig is not None
218
+ assert create_firebase_user_token is not None
219
+ assert reconfigure_media_for_testing is not None
220
+ assert minimal_png_bytes is not None
221
+ assert avatar_upload_files is not None
222
+ assert banner_upload_files is not None
223
+ assert attachment_upload_files is not None
224
+ "
225
+ test -x /tmp/wheel-smoke/bin/cf-alembic
226
+
227
+ app-docker:
228
+ needs: [package-smoke]
229
+ runs-on: ubuntu-latest
230
+ environment: development
231
+ permissions:
232
+ contents: read
233
+ steps:
234
+ - name: Checkout code
235
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
236
+ with:
237
+ persist-credentials: false
238
+
239
+ - name: Docker Meta
240
+ id: meta
241
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
242
+ with:
243
+ images: ${{ vars.DOCKERHUB_USERNAME }}/core-framework
244
+ flavor: latest=true
245
+
246
+ - name: Login to DockerHub
247
+ uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
248
+ with:
249
+ username: ${{ vars.DOCKERHUB_USERNAME }}
250
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
251
+
252
+ - name: Setup Docker Buildx
253
+ uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
254
+
255
+ - name: Build and Push
256
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
257
+ with:
258
+ context: .
259
+ file: ./deploy/app/dockerfile
260
+ target: api
261
+ push: true
262
+ tags: ${{ steps.meta.outputs.tags }}
263
+
264
+ worker-docker:
265
+ needs: [package-smoke]
266
+ runs-on: ubuntu-latest
267
+ environment: development
268
+ permissions:
269
+ contents: read
270
+ steps:
271
+ - name: Checkout code
272
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
273
+ with:
274
+ persist-credentials: false
275
+
276
+ - name: Docker Meta
277
+ id: meta
278
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
279
+ with:
280
+ images: ${{ vars.DOCKERHUB_USERNAME }}/core-framework-worker
281
+ flavor: latest=true
282
+
283
+ - name: Login to DockerHub
284
+ uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
285
+ with:
286
+ username: ${{ vars.DOCKERHUB_USERNAME }}
287
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
288
+
289
+ - name: Setup Docker Buildx
290
+ uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
291
+
292
+ - name: Build and Push
293
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
294
+ with:
295
+ context: .
296
+ file: ./deploy/app/dockerfile
297
+ target: worker
298
+ push: true
299
+ tags: ${{ steps.meta.outputs.tags }}
300
+
301
+ deploy:
302
+ needs: [app-docker, worker-docker]
303
+ permissions:
304
+ contents: read
305
+ uses: ./.github/workflows/_deploy.yml
306
+ with:
307
+ env_name: development
308
+ dockerhub_username: ${{ vars.DOCKERHUB_USERNAME }}
309
+ secrets:
310
+ SECRET_KEY: ${{ secrets.SECRET_KEY }}
311
+ WRITE_POSTGRES_PASSWORD: ${{ secrets.WRITE_POSTGRES_PASSWORD }}
312
+ READ_POSTGRES_PASSWORD: ${{ secrets.READ_POSTGRES_PASSWORD }}
313
+ FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
314
+ IMAGE_SERVER_SSH_PRIVATE_KEY: ${{ secrets.IMAGE_SERVER_SSH_PRIVATE_KEY }}
315
+ IMAGE_SERVER_KNOWN_HOSTS: ${{ secrets.IMAGE_SERVER_KNOWN_HOSTS }}
316
+ DEPLOY_SERVER_SSH_KEY: ${{ secrets.DEPLOY_SERVER_SSH_KEY }}
317
+ DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
318
+
319
+ post-deploy-e2e:
320
+ needs: [deploy]
321
+ runs-on: ubuntu-latest
322
+ environment: development
323
+ continue-on-error: true
324
+ permissions:
325
+ contents: read
326
+ steps:
327
+ - name: Checkout code
328
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
329
+ with:
330
+ persist-credentials: false
331
+
332
+ - name: Install uv
333
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
334
+ with:
335
+ version: "0.7.9"
336
+ enable-cache: true
337
+ cache-dependency-glob: "uv.lock"
338
+
339
+ - name: Set up Python
340
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
341
+ with:
342
+ python-version-file: ".python-version"
343
+
344
+ - name: Install the project
345
+ run: uv sync --locked --all-extras --dev
346
+
347
+ - name: Post-deploy E2E
348
+ run: uv run pytest tests/e2e
349
+ env:
350
+ E2E_API_BASE_URL: ${{ vars.E2E_API_BASE_URL }}
351
+ E2E_FIREBASE_API_KEY: ${{ secrets.E2E_FIREBASE_API_KEY }}
352
+ E2E_USER_EMAIL: ${{ vars.E2E_USER_EMAIL }}
353
+ E2E_USER_PASSWORD: ${{ secrets.E2E_USER_PASSWORD }}
354
+ E2E_ADMIN_EMAIL: ${{ vars.E2E_ADMIN_EMAIL }}
355
+ E2E_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD }}
356
+ E2E_MEDIA_BASE_URL: ${{ vars.E2E_MEDIA_BASE_URL }}
357
+ E2E_ALLOWED_ORIGIN: ${{ vars.E2E_ALLOWED_ORIGIN }}
358
+ E2E_WORKER_POLL_TIMEOUT_SEC: ${{ vars.E2E_WORKER_POLL_TIMEOUT_SEC }}