core-framework 4.0.0__tar.gz → 4.1.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 (1126) hide show
  1. core_framework-4.1.0/.agents/skills/building-pydantic-ai-agents +1 -0
  2. core_framework-4.1.0/.cursor/skills/building-pydantic-ai-agents +1 -0
  3. core_framework-4.1.0/.cursor/skills/code-review/SKILL.md +96 -0
  4. core_framework-4.1.0/.github/workflows/_deploy.yml +252 -0
  5. core_framework-4.1.0/.github/workflows/dev-ci-cd.yaml +179 -0
  6. core_framework-4.1.0/.github/workflows/manual-deployment.yaml +54 -0
  7. core_framework-4.1.0/CHANGELOG.md +803 -0
  8. core_framework-4.1.0/PKG-INFO +146 -0
  9. core_framework-4.1.0/alembic/post/alembic/versions/0a89b4c23746_post_stats_like_created_post_index.py +27 -0
  10. core_framework-4.1.0/alembic/post/alembic/versions/954f00734f36_post_add_post_discovery_rank.py +37 -0
  11. core_framework-4.1.0/config.toml +152 -0
  12. core_framework-4.1.0/config.toml.template +144 -0
  13. core_framework-4.1.0/core_framework/api/admin/agent/router.py +19 -0
  14. core_framework-4.1.0/core_framework/api/admin/agent/schemas.py +8 -0
  15. core_framework-4.1.0/core_framework/api/admin/outbox/schemas.py +60 -0
  16. core_framework-4.1.0/core_framework/api/admin/router.py +27 -0
  17. core_framework-4.1.0/core_framework/api/admin/users/schemas.py +137 -0
  18. core_framework-4.1.0/core_framework/api/comments/public/router.py +146 -0
  19. core_framework-4.1.0/core_framework/api/comments/schemas.py +43 -0
  20. core_framework-4.1.0/core_framework/api/pagination.py +283 -0
  21. core_framework-4.1.0/core_framework/api/posts/public/router.py +147 -0
  22. core_framework-4.1.0/core_framework/api/ratings/pagination.py +23 -0
  23. core_framework-4.1.0/core_framework/api/ratings/public/router.py +80 -0
  24. core_framework-4.1.0/core_framework/api/system/router.py +120 -0
  25. core_framework-4.1.0/core_framework/application/agent/probe.py +12 -0
  26. core_framework-4.1.0/core_framework/application/auth/access_service.py +38 -0
  27. core_framework-4.1.0/core_framework/application/bootstrap.py +78 -0
  28. core_framework-4.1.0/core_framework/application/comments/admin_service.py +584 -0
  29. core_framework-4.1.0/core_framework/application/comments/aggregation_service.py +45 -0
  30. core_framework-4.1.0/core_framework/application/comments/cleanup_service.py +184 -0
  31. core_framework-4.1.0/core_framework/application/comments/post_subject.py +89 -0
  32. core_framework-4.1.0/core_framework/application/comments/public_service.py +404 -0
  33. core_framework-4.1.0/core_framework/application/comments/rating_subject.py +67 -0
  34. core_framework-4.1.0/core_framework/application/email/send.py +56 -0
  35. core_framework-4.1.0/core_framework/application/notifications/notification_service.py +252 -0
  36. core_framework-4.1.0/core_framework/application/outbox/handlers.py +141 -0
  37. core_framework-4.1.0/core_framework/application/posts/admin_service.py +381 -0
  38. core_framework-4.1.0/core_framework/application/posts/aggregation_service.py +59 -0
  39. core_framework-4.1.0/core_framework/application/posts/cleanup_service.py +196 -0
  40. core_framework-4.1.0/core_framework/application/posts/public_service.py +319 -0
  41. core_framework-4.1.0/core_framework/application/ratings/authenticated_service.py +107 -0
  42. core_framework-4.1.0/core_framework/application/ratings/public_service.py +145 -0
  43. core_framework-4.1.0/core_framework/application/ratings/purge_service.py +49 -0
  44. core_framework-4.1.0/core_framework/application/shared/worker_jobs.py +63 -0
  45. core_framework-4.1.0/core_framework/application/users/account_removal/contributors.py +116 -0
  46. core_framework-4.1.0/core_framework/application/users/authenticated_service.py +617 -0
  47. core_framework-4.1.0/core_framework/application/users/public_service.py +195 -0
  48. core_framework-4.1.0/core_framework/application/users/user_deletion_service.py +693 -0
  49. core_framework-4.1.0/core_framework/core/middleware.py +160 -0
  50. core_framework-4.1.0/core_framework/core/runtime.py +70 -0
  51. core_framework-4.1.0/core_framework/core/settings.py +981 -0
  52. core_framework-4.1.0/core_framework/domains/agent/README.md +90 -0
  53. core_framework-4.1.0/core_framework/domains/agent/__init__.py +17 -0
  54. core_framework-4.1.0/core_framework/domains/agent/dependencies.py +151 -0
  55. core_framework-4.1.0/core_framework/domains/agent/models.py +38 -0
  56. core_framework-4.1.0/core_framework/domains/comment/README.md +271 -0
  57. core_framework-4.1.0/core_framework/domains/comment/__init__.py +78 -0
  58. core_framework-4.1.0/core_framework/domains/comment/constants.py +14 -0
  59. core_framework-4.1.0/core_framework/domains/comment/models.py +224 -0
  60. core_framework-4.1.0/core_framework/domains/comment/repository.py +2592 -0
  61. core_framework-4.1.0/core_framework/domains/comment/service.py +1106 -0
  62. core_framework-4.1.0/core_framework/domains/moderation/README.md +164 -0
  63. core_framework-4.1.0/core_framework/domains/moderation/__init__.py +43 -0
  64. core_framework-4.1.0/core_framework/domains/moderation/models.py +100 -0
  65. core_framework-4.1.0/core_framework/domains/moderation/repository.py +1694 -0
  66. core_framework-4.1.0/core_framework/domains/moderation/service.py +1057 -0
  67. core_framework-4.1.0/core_framework/domains/notification/README.md +144 -0
  68. core_framework-4.1.0/core_framework/domains/outbox/models.py +82 -0
  69. core_framework-4.1.0/core_framework/domains/post/README.md +221 -0
  70. core_framework-4.1.0/core_framework/domains/post/discovery_rank.py +29 -0
  71. core_framework-4.1.0/core_framework/domains/post/models.py +218 -0
  72. core_framework-4.1.0/core_framework/domains/post/repository.py +2319 -0
  73. core_framework-4.1.0/core_framework/domains/post/service.py +1025 -0
  74. core_framework-4.1.0/core_framework/domains/rating/README.md +79 -0
  75. core_framework-4.1.0/core_framework/domains/rating/models.py +53 -0
  76. core_framework-4.1.0/core_framework/domains/rating/repository.py +1380 -0
  77. core_framework-4.1.0/core_framework/domains/rating/service.py +900 -0
  78. core_framework-4.1.0/core_framework/domains/user/group_repository.py +1714 -0
  79. core_framework-4.1.0/core_framework/domains/user/repository.py +2345 -0
  80. core_framework-4.1.0/core_framework/domains/user/service.py +1255 -0
  81. core_framework-4.1.0/core_framework/infrastructure/agent/openai_agent_adapter.py +233 -0
  82. core_framework-4.1.0/core_framework/main.py +70 -0
  83. core_framework-4.1.0/core_framework/testing/auth.py +352 -0
  84. core_framework-4.1.0/core_framework/testing/config.py +52 -0
  85. core_framework-4.1.0/core_framework/testing/containers.py +114 -0
  86. core_framework-4.1.0/core_framework/testing/firebase.py +175 -0
  87. core_framework-4.1.0/core_framework/testing/migrations.py +38 -0
  88. core_framework-4.1.0/core_framework/testing/plugin.py +256 -0
  89. core_framework-4.1.0/core_framework/worker/main.py +173 -0
  90. core_framework-4.1.0/core_framework/worker/tasks/process_account_deletion_scheduled_email.py +21 -0
  91. core_framework-4.1.0/core_framework/worker/tasks/process_comment_tombstone_cleanup.py +36 -0
  92. core_framework-4.1.0/core_framework/worker/tasks/process_post_tombstone_cleanup.py +30 -0
  93. core_framework-4.1.0/core_framework/worker/tasks/process_transactional_email.py +21 -0
  94. core_framework-4.1.0/docs/deployments/deploy-playbook.md +204 -0
  95. core_framework-4.1.0/docs/deployments/e2e-smoke-tests-design.md +353 -0
  96. core_framework-4.1.0/docs/deployments/edge-upload-limits.md +70 -0
  97. core_framework-4.1.0/docs/deployments/examples/Caddyfile.example +70 -0
  98. core_framework-4.1.0/docs/deployments/guides/playbook/postgres-backup-playbook.md +302 -0
  99. core_framework-4.1.0/docs/deployments/guides/setup/image-server-ssh.md +101 -0
  100. core_framework-4.1.0/docs/deployments/host-config-defaults-design.md +840 -0
  101. core_framework-4.1.0/docs/design/README.md +60 -0
  102. core_framework-4.1.0/docs/design/account-removal-spine-design.md +436 -0
  103. core_framework-4.1.0/docs/design/account-removal-spine-implementation.md +268 -0
  104. core_framework-4.1.0/docs/design/comment-subject-kinds-design.md +589 -0
  105. core_framework-4.1.0/docs/design/create-idempotency-design.md +366 -0
  106. core_framework-4.1.0/docs/design/event-outbox-design.md +664 -0
  107. core_framework-4.1.0/docs/design/list-sort-design.md +398 -0
  108. core_framework-4.1.0/docs/design/list-sort-implementation.md +286 -0
  109. core_framework-4.1.0/docs/design/model-call-design.md +148 -0
  110. core_framework-4.1.0/docs/design/model-call-implementation.md +227 -0
  111. core_framework-4.1.0/docs/design/outbox-admin-ops-design.md +340 -0
  112. core_framework-4.1.0/docs/design/rating-implementation-plan.md +677 -0
  113. core_framework-4.1.0/docs/design/transactional-email-design.md +620 -0
  114. core_framework-4.1.0/docs/domains/README.md +25 -0
  115. core_framework-4.1.0/docs/domains/agent/model_call_probe.md +55 -0
  116. core_framework-4.1.0/docs/domains/auth/access_control.md +133 -0
  117. core_framework-4.1.0/docs/domains/comments/README.md +39 -0
  118. core_framework-4.1.0/docs/domains/comments/admin_comments.md +219 -0
  119. core_framework-4.1.0/docs/domains/comments/create_comment.md +197 -0
  120. core_framework-4.1.0/docs/domains/comments/retrieve_comments.md +262 -0
  121. core_framework-4.1.0/docs/domains/deletion/comments.md +300 -0
  122. core_framework-4.1.0/docs/domains/deletion/posts.md +312 -0
  123. core_framework-4.1.0/docs/domains/deletion/users.md +534 -0
  124. core_framework-4.1.0/docs/domains/mentions/mentions_in_content.md +239 -0
  125. core_framework-4.1.0/docs/domains/moderation/moderator_actions.md +76 -0
  126. core_framework-4.1.0/docs/domains/notifications/inbox-hint-design.md +124 -0
  127. core_framework-4.1.0/docs/domains/notifications/inbox-hint-implementation.md +102 -0
  128. core_framework-4.1.0/docs/domains/notifications/inbox-redesign-design.md +1344 -0
  129. core_framework-4.1.0/docs/domains/posts/README.md +35 -0
  130. core_framework-4.1.0/docs/domains/posts/admin_posts.md +187 -0
  131. core_framework-4.1.0/docs/domains/posts/hashtag_discovery.md +64 -0
  132. core_framework-4.1.0/docs/domains/posts/post_stats_aggregation.md +87 -0
  133. core_framework-4.1.0/docs/domains/posts/retrieve_posts.md +195 -0
  134. core_framework-4.1.0/docs/domains/ratings/README.md +36 -0
  135. core_framework-4.1.0/docs/domains/ratings/admin_ratings.md +125 -0
  136. core_framework-4.1.0/docs/domains/ratings/delete_rating.md +59 -0
  137. core_framework-4.1.0/docs/domains/ratings/edit_rating.md +66 -0
  138. core_framework-4.1.0/docs/domains/ratings/rating-design.md +503 -0
  139. core_framework-4.1.0/docs/domains/ratings/rating_report.md +99 -0
  140. core_framework-4.1.0/docs/domains/ratings/rating_stats_aggregation.md +68 -0
  141. core_framework-4.1.0/docs/domains/ratings/rating_upvote.md +94 -0
  142. core_framework-4.1.0/docs/domains/ratings/retrieve_ratings.md +184 -0
  143. core_framework-4.1.0/docs/domains/ratings/upsert_rating.md +73 -0
  144. core_framework-4.1.0/docs/domains/users/account_deletion.md +176 -0
  145. core_framework-4.1.0/docs/domains/users/blocks.md +136 -0
  146. core_framework-4.1.0/docs/domains/users/change_history.md +127 -0
  147. core_framework-4.1.0/docs/domains/users/follow-system-design.md +467 -0
  148. core_framework-4.1.0/docs/domains/users/follow.md +270 -0
  149. core_framework-4.1.0/docs/domains/users/friendship.md +409 -0
  150. core_framework-4.1.0/docs/domains/users/groups-system-design.md +1018 -0
  151. core_framework-4.1.0/docs/domains/users/groups.md +507 -0
  152. core_framework-4.1.0/docs/domains/users/my_posts_and_comments.md +154 -0
  153. core_framework-4.1.0/docs/domains/users/preferences.md +86 -0
  154. core_framework-4.1.0/docs/domains/users/profile.md +219 -0
  155. core_framework-4.1.0/docs/domains/users/public_profile.md +102 -0
  156. core_framework-4.1.0/docs/domains/users/user_removal.md +93 -0
  157. core_framework-4.1.0/docs/domains/users/user_stats_aggregation.md +82 -0
  158. core_framework-4.1.0/docs/library/api.md +281 -0
  159. core_framework-4.1.0/docs/library/capability-wiring.md +407 -0
  160. core_framework-4.1.0/docs/library/overview.md +58 -0
  161. core_framework-4.1.0/docs/library/package-api.md +1258 -0
  162. core_framework-4.1.0/docs/library/testing-plugin-design.md +257 -0
  163. core_framework-4.1.0/docs/library/workers.md +153 -0
  164. core_framework-4.1.0/docs/platform/architecture-decisions.md +977 -0
  165. core_framework-4.1.0/docs/platform/conventions.md +122 -0
  166. core_framework-4.1.0/docs/platform/glossary.md +222 -0
  167. core_framework-4.1.0/docs/reviews/log.md +91 -0
  168. core_framework-4.1.0/docs/reviews/review-playbook.md +262 -0
  169. core_framework-4.1.0/docs/reviews/slices.md +350 -0
  170. core_framework-4.1.0/docs/testing.md +170 -0
  171. core_framework-4.1.0/docs/todo.md +15 -0
  172. core_framework-4.1.0/pyproject.toml +161 -0
  173. core_framework-4.1.0/tach.toml +200 -0
  174. core_framework-4.1.0/tests/e2e/smoke/agent_probe_test.py +47 -0
  175. core_framework-4.1.0/tests/integration/api/_http_helpers.py +123 -0
  176. core_framework-4.1.0/tests/integration/api/admin/comments/router_test.py +748 -0
  177. core_framework-4.1.0/tests/integration/api/list_sort_integration_test.py +448 -0
  178. core_framework-4.1.0/tests/integration/api/posts/post_deletion_integration_test.py +641 -0
  179. core_framework-4.1.0/tests/integration/worker/create_idempotency_retention_test.py +376 -0
  180. core_framework-4.1.0/tests/unit/api/ratings/review_pagination_test.py +54 -0
  181. core_framework-4.1.0/uv.lock +4818 -0
  182. core_framework-4.0.0/.cursor/skills/code-review/SKILL.md +0 -85
  183. core_framework-4.0.0/.github/workflows/_deploy.yml +0 -245
  184. core_framework-4.0.0/.github/workflows/dev-ci-cd.yaml +0 -178
  185. core_framework-4.0.0/.github/workflows/manual-deployment.yaml +0 -53
  186. core_framework-4.0.0/CHANGELOG.md +0 -773
  187. core_framework-4.0.0/PKG-INFO +0 -144
  188. core_framework-4.0.0/config.toml +0 -148
  189. core_framework-4.0.0/config.toml.template +0 -136
  190. core_framework-4.0.0/core_framework/api/admin/outbox/schemas.py +0 -60
  191. core_framework-4.0.0/core_framework/api/admin/router.py +0 -25
  192. core_framework-4.0.0/core_framework/api/admin/users/schemas.py +0 -137
  193. core_framework-4.0.0/core_framework/api/comments/public/router.py +0 -121
  194. core_framework-4.0.0/core_framework/api/comments/schemas.py +0 -29
  195. core_framework-4.0.0/core_framework/api/pagination.py +0 -239
  196. core_framework-4.0.0/core_framework/api/posts/public/router.py +0 -110
  197. core_framework-4.0.0/core_framework/api/ratings/pagination.py +0 -37
  198. core_framework-4.0.0/core_framework/api/ratings/public/router.py +0 -79
  199. core_framework-4.0.0/core_framework/api/system/router.py +0 -100
  200. core_framework-4.0.0/core_framework/application/auth/access_service.py +0 -31
  201. core_framework-4.0.0/core_framework/application/bootstrap.py +0 -73
  202. core_framework-4.0.0/core_framework/application/comments/admin_service.py +0 -592
  203. core_framework-4.0.0/core_framework/application/comments/aggregation_service.py +0 -57
  204. core_framework-4.0.0/core_framework/application/comments/cleanup_service.py +0 -170
  205. core_framework-4.0.0/core_framework/application/comments/post_subject.py +0 -89
  206. core_framework-4.0.0/core_framework/application/comments/public_service.py +0 -382
  207. core_framework-4.0.0/core_framework/application/comments/rating_subject.py +0 -67
  208. core_framework-4.0.0/core_framework/application/email/send.py +0 -52
  209. core_framework-4.0.0/core_framework/application/notifications/notification_service.py +0 -252
  210. core_framework-4.0.0/core_framework/application/outbox/handlers.py +0 -137
  211. core_framework-4.0.0/core_framework/application/posts/admin_service.py +0 -389
  212. core_framework-4.0.0/core_framework/application/posts/aggregation_service.py +0 -59
  213. core_framework-4.0.0/core_framework/application/posts/cleanup_service.py +0 -182
  214. core_framework-4.0.0/core_framework/application/posts/public_service.py +0 -264
  215. core_framework-4.0.0/core_framework/application/ratings/authenticated_service.py +0 -107
  216. core_framework-4.0.0/core_framework/application/ratings/public_service.py +0 -140
  217. core_framework-4.0.0/core_framework/application/ratings/purge_service.py +0 -53
  218. core_framework-4.0.0/core_framework/application/shared/worker_jobs.py +0 -63
  219. core_framework-4.0.0/core_framework/application/users/account_removal/contributors.py +0 -96
  220. core_framework-4.0.0/core_framework/application/users/authenticated_service.py +0 -616
  221. core_framework-4.0.0/core_framework/application/users/public_service.py +0 -195
  222. core_framework-4.0.0/core_framework/application/users/user_deletion_service.py +0 -693
  223. core_framework-4.0.0/core_framework/core/middleware.py +0 -160
  224. core_framework-4.0.0/core_framework/core/runtime.py +0 -65
  225. core_framework-4.0.0/core_framework/core/settings.py +0 -922
  226. core_framework-4.0.0/core_framework/domains/comment/README.md +0 -271
  227. core_framework-4.0.0/core_framework/domains/comment/__init__.py +0 -76
  228. core_framework-4.0.0/core_framework/domains/comment/constants.py +0 -13
  229. core_framework-4.0.0/core_framework/domains/comment/models.py +0 -223
  230. core_framework-4.0.0/core_framework/domains/comment/repository.py +0 -2523
  231. core_framework-4.0.0/core_framework/domains/comment/service.py +0 -980
  232. core_framework-4.0.0/core_framework/domains/moderation/README.md +0 -164
  233. core_framework-4.0.0/core_framework/domains/moderation/__init__.py +0 -41
  234. core_framework-4.0.0/core_framework/domains/moderation/models.py +0 -94
  235. core_framework-4.0.0/core_framework/domains/moderation/repository.py +0 -1686
  236. core_framework-4.0.0/core_framework/domains/moderation/service.py +0 -1053
  237. core_framework-4.0.0/core_framework/domains/notification/README.md +0 -144
  238. core_framework-4.0.0/core_framework/domains/outbox/models.py +0 -82
  239. core_framework-4.0.0/core_framework/domains/post/README.md +0 -216
  240. core_framework-4.0.0/core_framework/domains/post/models.py +0 -217
  241. core_framework-4.0.0/core_framework/domains/post/repository.py +0 -2175
  242. core_framework-4.0.0/core_framework/domains/post/service.py +0 -990
  243. core_framework-4.0.0/core_framework/domains/rating/README.md +0 -81
  244. core_framework-4.0.0/core_framework/domains/rating/models.py +0 -52
  245. core_framework-4.0.0/core_framework/domains/rating/repository.py +0 -1365
  246. core_framework-4.0.0/core_framework/domains/rating/service.py +0 -901
  247. core_framework-4.0.0/core_framework/domains/user/group_repository.py +0 -1708
  248. core_framework-4.0.0/core_framework/domains/user/repository.py +0 -2341
  249. core_framework-4.0.0/core_framework/domains/user/service.py +0 -1248
  250. core_framework-4.0.0/core_framework/main.py +0 -69
  251. core_framework-4.0.0/core_framework/testing/auth.py +0 -351
  252. core_framework-4.0.0/core_framework/testing/config.py +0 -48
  253. core_framework-4.0.0/core_framework/testing/containers.py +0 -101
  254. core_framework-4.0.0/core_framework/testing/firebase.py +0 -132
  255. core_framework-4.0.0/core_framework/testing/migrations.py +0 -38
  256. core_framework-4.0.0/core_framework/testing/plugin.py +0 -250
  257. core_framework-4.0.0/core_framework/worker/main.py +0 -172
  258. core_framework-4.0.0/core_framework/worker/tasks/process_account_deletion_scheduled_email.py +0 -17
  259. core_framework-4.0.0/core_framework/worker/tasks/process_comment_tombstone_cleanup.py +0 -33
  260. core_framework-4.0.0/core_framework/worker/tasks/process_post_tombstone_cleanup.py +0 -27
  261. core_framework-4.0.0/core_framework/worker/tasks/process_transactional_email.py +0 -21
  262. core_framework-4.0.0/docs/deployments/deploy-playbook.md +0 -199
  263. core_framework-4.0.0/docs/deployments/e2e-smoke-tests-design.md +0 -352
  264. core_framework-4.0.0/docs/deployments/edge-upload-limits.md +0 -70
  265. core_framework-4.0.0/docs/deployments/examples/Caddyfile.example +0 -69
  266. core_framework-4.0.0/docs/deployments/guides/playbook/postgres-backup-playbook.md +0 -302
  267. core_framework-4.0.0/docs/deployments/guides/setup/image-server-ssh.md +0 -99
  268. core_framework-4.0.0/docs/deployments/host-config-defaults-design.md +0 -836
  269. core_framework-4.0.0/docs/design/README.md +0 -55
  270. core_framework-4.0.0/docs/design/account-removal-spine-design.md +0 -428
  271. core_framework-4.0.0/docs/design/account-removal-spine-implementation.md +0 -265
  272. core_framework-4.0.0/docs/design/comment-subject-kinds-design.md +0 -589
  273. core_framework-4.0.0/docs/design/create-idempotency-design.md +0 -365
  274. core_framework-4.0.0/docs/design/event-outbox-design.md +0 -664
  275. core_framework-4.0.0/docs/design/outbox-admin-ops-design.md +0 -339
  276. core_framework-4.0.0/docs/design/transactional-email-design.md +0 -620
  277. core_framework-4.0.0/docs/domains/README.md +0 -24
  278. core_framework-4.0.0/docs/domains/auth/access_control.md +0 -131
  279. core_framework-4.0.0/docs/domains/comments/README.md +0 -38
  280. core_framework-4.0.0/docs/domains/comments/admin_comments.md +0 -221
  281. core_framework-4.0.0/docs/domains/comments/create_comment.md +0 -200
  282. core_framework-4.0.0/docs/domains/comments/retrieve_comments.md +0 -260
  283. core_framework-4.0.0/docs/domains/deletion/comments.md +0 -300
  284. core_framework-4.0.0/docs/domains/deletion/posts.md +0 -312
  285. core_framework-4.0.0/docs/domains/deletion/users.md +0 -530
  286. core_framework-4.0.0/docs/domains/mentions/mentions_in_content.md +0 -239
  287. core_framework-4.0.0/docs/domains/moderation/moderator_actions.md +0 -75
  288. core_framework-4.0.0/docs/domains/notifications/inbox-redesign-design.md +0 -1342
  289. core_framework-4.0.0/docs/domains/posts/README.md +0 -34
  290. core_framework-4.0.0/docs/domains/posts/admin_posts.md +0 -188
  291. core_framework-4.0.0/docs/domains/posts/hashtag_discovery.md +0 -63
  292. core_framework-4.0.0/docs/domains/posts/post_stats_aggregation.md +0 -86
  293. core_framework-4.0.0/docs/domains/posts/retrieve_posts.md +0 -193
  294. core_framework-4.0.0/docs/domains/ratings/README.md +0 -37
  295. core_framework-4.0.0/docs/domains/ratings/admin_ratings.md +0 -127
  296. core_framework-4.0.0/docs/domains/ratings/delete_rating.md +0 -61
  297. core_framework-4.0.0/docs/domains/ratings/edit_rating.md +0 -68
  298. core_framework-4.0.0/docs/domains/ratings/rating-design.md +0 -564
  299. core_framework-4.0.0/docs/domains/ratings/rating-implementation-plan.md +0 -677
  300. core_framework-4.0.0/docs/domains/ratings/rating_report.md +0 -101
  301. core_framework-4.0.0/docs/domains/ratings/rating_stats_aggregation.md +0 -70
  302. core_framework-4.0.0/docs/domains/ratings/rating_upvote.md +0 -96
  303. core_framework-4.0.0/docs/domains/ratings/retrieve_ratings.md +0 -186
  304. core_framework-4.0.0/docs/domains/ratings/upsert_rating.md +0 -75
  305. core_framework-4.0.0/docs/domains/users/account_deletion.md +0 -174
  306. core_framework-4.0.0/docs/domains/users/blocks.md +0 -138
  307. core_framework-4.0.0/docs/domains/users/change_history.md +0 -127
  308. core_framework-4.0.0/docs/domains/users/follow-system-design.md +0 -464
  309. core_framework-4.0.0/docs/domains/users/follow.md +0 -270
  310. core_framework-4.0.0/docs/domains/users/friendship.md +0 -411
  311. core_framework-4.0.0/docs/domains/users/groups-system-design.md +0 -1014
  312. core_framework-4.0.0/docs/domains/users/groups.md +0 -509
  313. core_framework-4.0.0/docs/domains/users/my_posts_and_comments.md +0 -154
  314. core_framework-4.0.0/docs/domains/users/preferences.md +0 -87
  315. core_framework-4.0.0/docs/domains/users/profile.md +0 -221
  316. core_framework-4.0.0/docs/domains/users/public_profile.md +0 -104
  317. core_framework-4.0.0/docs/domains/users/user_removal.md +0 -93
  318. core_framework-4.0.0/docs/domains/users/user_stats_aggregation.md +0 -84
  319. core_framework-4.0.0/docs/library/api.md +0 -275
  320. core_framework-4.0.0/docs/library/capability-wiring.md +0 -357
  321. core_framework-4.0.0/docs/library/overview.md +0 -56
  322. core_framework-4.0.0/docs/library/package-api.md +0 -1195
  323. core_framework-4.0.0/docs/library/testing-plugin-design.md +0 -255
  324. core_framework-4.0.0/docs/library/workers.md +0 -151
  325. core_framework-4.0.0/docs/platform/architecture-decisions.md +0 -855
  326. core_framework-4.0.0/docs/platform/conventions.md +0 -108
  327. core_framework-4.0.0/docs/platform/glossary.md +0 -190
  328. core_framework-4.0.0/docs/reviews/log.md +0 -77
  329. core_framework-4.0.0/docs/reviews/review-playbook.md +0 -257
  330. core_framework-4.0.0/docs/reviews/slices.md +0 -337
  331. core_framework-4.0.0/docs/testing.md +0 -167
  332. core_framework-4.0.0/docs/todo.md +0 -9
  333. core_framework-4.0.0/pyproject.toml +0 -156
  334. core_framework-4.0.0/tach.toml +0 -191
  335. core_framework-4.0.0/tests/integration/api/_http_helpers.py +0 -100
  336. core_framework-4.0.0/tests/integration/api/admin/comments/router_test.py +0 -745
  337. core_framework-4.0.0/tests/integration/api/posts/post_deletion_integration_test.py +0 -639
  338. core_framework-4.0.0/tests/integration/worker/create_idempotency_retention_test.py +0 -277
  339. core_framework-4.0.0/uv.lock +0 -2778
  340. {core_framework-4.0.0 → core_framework-4.1.0}/.agents/skills/fastapi +0 -0
  341. {core_framework-4.0.0 → core_framework-4.1.0}/.agents/skills/library-skills/.library-skills.json +0 -0
  342. {core_framework-4.0.0 → core_framework-4.1.0}/.agents/skills/library-skills/SKILL.md +0 -0
  343. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/alembic-migrations.mdc +0 -0
  344. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/api-layer.mdc +0 -0
  345. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/api-reference-docs.mdc +0 -0
  346. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/api-validation.mdc +0 -0
  347. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/application-layer.mdc +0 -0
  348. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/constants-final.mdc +0 -0
  349. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/constitution.mdc +0 -0
  350. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/database-triggers.mdc +0 -0
  351. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/docstrings.mdc +0 -0
  352. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/domain-caller-context.mdc +0 -0
  353. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/domain-imports.mdc +0 -0
  354. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/domain-input-guards.mdc +0 -0
  355. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/domain-repository-exceptions.mdc +0 -0
  356. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/domain-services-and-adapters.mdc +0 -0
  357. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/error-boundary.mdc +0 -0
  358. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/flow-documentation.mdc +0 -0
  359. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/ignore-analytics-warehouse.mdc +0 -0
  360. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/inline-raise-messages.mdc +0 -0
  361. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/integration-test-strategy.mdc +0 -0
  362. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/layer-boundaries.mdc +0 -0
  363. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/no-code-in-docs.mdc +0 -0
  364. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/postgres-config-conventions.mdc +0 -0
  365. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/repository-schema-isolation.mdc +0 -0
  366. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/strong-reads.mdc +0 -0
  367. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/rules/structured-logging.mdc +0 -0
  368. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/add-config/SKILL.md +0 -0
  369. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/add-domain/SKILL.md +0 -0
  370. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/design-review/SKILL.md +0 -0
  371. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/fastapi +0 -0
  372. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/grill/SKILL.md +0 -0
  373. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/implement-feature/SKILL.md +0 -0
  374. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/recommend-features/SKILL.md +0 -0
  375. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/sync-host-rules/SKILL.md +0 -0
  376. {core_framework-4.0.0 → core_framework-4.1.0}/.cursor/skills/write-flow-doc/SKILL.md +0 -0
  377. {core_framework-4.0.0 → core_framework-4.1.0}/.dockerignore +0 -0
  378. {core_framework-4.0.0 → core_framework-4.1.0}/.github/ci/package-lock.json +0 -0
  379. {core_framework-4.0.0 → core_framework-4.1.0}/.github/ci/package-smoke.sh +0 -0
  380. {core_framework-4.0.0 → core_framework-4.1.0}/.github/ci/package.json +0 -0
  381. {core_framework-4.0.0 → core_framework-4.1.0}/.github/ci/package_smoke.py +0 -0
  382. {core_framework-4.0.0 → core_framework-4.1.0}/.github/workflows/manual-observability-deployment.yaml +0 -0
  383. {core_framework-4.0.0 → core_framework-4.1.0}/.github/workflows/publish-pypi.yml +0 -0
  384. {core_framework-4.0.0 → core_framework-4.1.0}/.github/workflows/test.yaml +0 -0
  385. {core_framework-4.0.0 → core_framework-4.1.0}/.gitignore +0 -0
  386. {core_framework-4.0.0 → core_framework-4.1.0}/.pre-commit-config.yaml +0 -0
  387. {core_framework-4.0.0 → core_framework-4.1.0}/.python-version +0 -0
  388. {core_framework-4.0.0 → core_framework-4.1.0}/LICENSE +0 -0
  389. {core_framework-4.0.0 → core_framework-4.1.0}/README.md +0 -0
  390. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/README +0 -0
  391. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/env.py +0 -0
  392. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/script.py.mako +0 -0
  393. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/versions/2d61a5e88d76_analytics_utm_events_add_kind.py +0 -0
  394. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/versions/585105e1149e_analytics_add_utm_events.py +0 -0
  395. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/versions/5b9ac98bb150_analytics_daily_fact.py +0 -0
  396. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic/versions/7f2a9c1d4e8b_analytics_daily_fact_day_index.py +0 -0
  397. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/analytics/alembic.ini +0 -0
  398. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/README +0 -0
  399. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/env.py +0 -0
  400. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/script.py.mako +0 -0
  401. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_add_comment_attachments.py +0 -0
  402. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency.py +0 -0
  403. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency_created_at_index.py +0 -0
  404. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_add_comment_mentions.py +0 -0
  405. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_subject_kind_varchar.py +0 -0
  406. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/comment_tombstone_status_model.py +0 -0
  407. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic/versions/v1_comment_init_baseline.py +0 -0
  408. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/comment/alembic.ini +0 -0
  409. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/extension/alembic/README +0 -0
  410. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/extension/alembic/env.py +0 -0
  411. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/extension/alembic/script.py.mako +0 -0
  412. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/extension/alembic/versions/v1_ext_init_baseline.py +0 -0
  413. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/extension/alembic.ini +0 -0
  414. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/README +0 -0
  415. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/env.py +0 -0
  416. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/script.py.mako +0 -0
  417. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/versions/media_add_attachment_staging_registry.py +0 -0
  418. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/versions/media_add_banner_staging_and_lease.py +0 -0
  419. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/versions/media_attachment_staging_registry_published_at.py +0 -0
  420. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic/versions/v1_media_init_baseline.py +0 -0
  421. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/media/alembic.ini +0 -0
  422. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/README +0 -0
  423. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/env.py +0 -0
  424. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/script.py.mako +0 -0
  425. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/3027828c2c80_align_dead_outbox_keyset_index.py +0 -0
  426. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/5be85718122a_moderation_add_review_reports.py +0 -0
  427. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox.py +0 -0
  428. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox_dead_indexes.py +0 -0
  429. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/moderation_add_event_outbox_pending_created_at_index.py +0 -0
  430. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic/versions/v1_mod_init_baseline.py +0 -0
  431. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/moderation/alembic.ini +0 -0
  432. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/README +0 -0
  433. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/env.py +0 -0
  434. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/script.py.mako +0 -0
  435. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/2fdd68777706_notification_read_at_retention_index.py +0 -0
  436. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/a5f29155815d_notification_add_friendship_types.py +0 -0
  437. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/b1263ed1a303_notification_inbox_redesign_preview.py +0 -0
  438. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/c6b9941065ec_notification_add_group_invite_type.py +0 -0
  439. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/fbe8476b4437_notification_add_rating_owner_cue_labels.py +0 -0
  440. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic/versions/v1_notif_init_baseline.py +0 -0
  441. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/notification/alembic.ini +0 -0
  442. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/README +0 -0
  443. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/env.py +0 -0
  444. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/script.py.mako +0 -0
  445. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_add_post_attachments.py +0 -0
  446. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_add_post_create_idempotency.py +0 -0
  447. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_add_post_create_idempotency_created_at_index.py +0 -0
  448. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_add_post_mentions.py +0 -0
  449. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_post_views_retention_high_water_mark.py +0 -0
  450. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/post_tombstone_status_model.py +0 -0
  451. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic/versions/v1_post_init_baseline.py +0 -0
  452. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/post/alembic.ini +0 -0
  453. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic/README +0 -0
  454. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic/env.py +0 -0
  455. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic/script.py.mako +0 -0
  456. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic/versions/04182d734619_rating_list_indexes.py +0 -0
  457. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic/versions/2ef924b0be4c_rating_schema.py +0 -0
  458. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/rating/alembic.ini +0 -0
  459. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/README +0 -0
  460. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/env.py +0 -0
  461. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/script.py.mako +0 -0
  462. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/24ba262c4ef2_user_add_account_removal_started_at.py +0 -0
  463. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/2dc1d398a840_user_add_groups.py +0 -0
  464. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/44df70a45ba6_user_add_signup_events.py +0 -0
  465. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/7078e4313554_user_add_friendships.py +0 -0
  466. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/922eece707db_align_dead_outbox_keyset_index.py +0 -0
  467. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_avatar_ingest_sequences.py +0 -0
  468. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_banner_ingest_sequences.py +0 -0
  469. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_date_of_birth_to_profiles.py +0 -0
  470. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_event_outbox.py +0 -0
  471. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_event_outbox_dead_indexes.py +0 -0
  472. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_add_event_outbox_pending_created_at_index.py +0 -0
  473. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/user_reserve_sentinel_user_ids.py +0 -0
  474. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic/versions/v1_user_init_baseline.py +0 -0
  475. {core_framework-4.0.0 → core_framework-4.1.0}/alembic/user/alembic.ini +0 -0
  476. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/__init__.py +0 -0
  477. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/__init__.py +0 -0
  478. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/__init__.py +0 -0
  479. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/analytics/__init__.py +0 -0
  480. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/analytics/router.py +0 -0
  481. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/analytics/schemas.py +0 -0
  482. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/cache/__init__.py +0 -0
  483. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/cache/router.py +0 -0
  484. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/cache/schemas.py +0 -0
  485. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/comments/__init__.py +0 -0
  486. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/comments/router.py +0 -0
  487. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/comments/schemas.py +0 -0
  488. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/moderation/__init__.py +0 -0
  489. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/moderation/router.py +0 -0
  490. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/moderation/schemas.py +0 -0
  491. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/outbox/__init__.py +0 -0
  492. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/outbox/router.py +0 -0
  493. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/posts/__init__.py +0 -0
  494. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/posts/router.py +0 -0
  495. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/posts/schemas.py +0 -0
  496. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/ratings/router.py +0 -0
  497. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/ratings/schemas.py +0 -0
  498. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/users/__init__.py +0 -0
  499. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/admin/users/router.py +0 -0
  500. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/attachments/__init__.py +0 -0
  501. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/attachments/router.py +0 -0
  502. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/attachments/schemas.py +0 -0
  503. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/auth/__init__.py +0 -0
  504. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/auth/router.py +0 -0
  505. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/auth/schemas.py +0 -0
  506. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/__init__.py +0 -0
  507. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/authenticated/__init__.py +0 -0
  508. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/authenticated/mappers.py +0 -0
  509. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/authenticated/router.py +0 -0
  510. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/authenticated/schemas.py +0 -0
  511. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/public/__init__.py +0 -0
  512. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/public/schemas.py +0 -0
  513. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/comments/router.py +0 -0
  514. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/dependencies.py +0 -0
  515. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/events/__init__.py +0 -0
  516. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/events/router.py +0 -0
  517. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/events/schemas.py +0 -0
  518. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/groups/router.py +0 -0
  519. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/groups/schemas.py +0 -0
  520. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/idempotency/__init__.py +0 -0
  521. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/idempotency/dependencies.py +0 -0
  522. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/ingest_guards.py +0 -0
  523. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/notifications/__init__.py +0 -0
  524. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/notifications/authenticated/__init__.py +0 -0
  525. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/notifications/authenticated/router.py +0 -0
  526. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/notifications/authenticated/schemas.py +0 -0
  527. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/notifications/router.py +0 -0
  528. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/__init__.py +0 -0
  529. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/authenticated/__init__.py +0 -0
  530. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/authenticated/mappers.py +0 -0
  531. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/authenticated/router.py +0 -0
  532. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/authenticated/schemas.py +0 -0
  533. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/public/__init__.py +0 -0
  534. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/public/schemas.py +0 -0
  535. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/router.py +0 -0
  536. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/posts/schemas.py +0 -0
  537. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/ratings/authenticated/router.py +0 -0
  538. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/ratings/router.py +0 -0
  539. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/ratings/schemas.py +0 -0
  540. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/router.py +0 -0
  541. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/schemas.py +0 -0
  542. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/system/__init__.py +0 -0
  543. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/upload.py +0 -0
  544. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/__init__.py +0 -0
  545. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/authenticated/__init__.py +0 -0
  546. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/authenticated/mappers.py +0 -0
  547. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/authenticated/router.py +0 -0
  548. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/authenticated/schemas.py +0 -0
  549. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/public/__init__.py +0 -0
  550. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/public/router.py +0 -0
  551. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/public/schemas.py +0 -0
  552. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/router.py +0 -0
  553. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/shared/__init__.py +0 -0
  554. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/shared/mappers.py +0 -0
  555. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/api/users/shared/schemas.py +0 -0
  556. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/__init__.py +0 -0
  557. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/__init__.py +0 -0
  558. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/bucket_service.py +0 -0
  559. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/prune_service.py +0 -0
  560. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/read_service.py +0 -0
  561. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/refresh_service.py +0 -0
  562. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/registry.py +0 -0
  563. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/sources/__init__.py +0 -0
  564. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/sources/comment_created.py +0 -0
  565. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/sources/post_created.py +0 -0
  566. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/sources/post_viewed.py +0 -0
  567. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/analytics/sources/user_registered.py +0 -0
  568. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/auth/__init__.py +0 -0
  569. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/auth/auth_service.py +0 -0
  570. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/auth/models.py +0 -0
  571. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/auth/token_verification.py +0 -0
  572. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/cache/__init__.py +0 -0
  573. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/cache/invalidate_service.py +0 -0
  574. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/cache/models.py +0 -0
  575. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/comments/__init__.py +0 -0
  576. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/comments/authenticated_service.py +0 -0
  577. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/comments/host_service.py +0 -0
  578. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/comments/kind_registry.py +0 -0
  579. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/email/__init__.py +0 -0
  580. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/email/account_deletion_scheduled.py +0 -0
  581. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/email/enqueue.py +0 -0
  582. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/email/registry.py +0 -0
  583. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/README.md +0 -0
  584. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/__init__.py +0 -0
  585. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/event_service.py +0 -0
  586. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/event_token.py +0 -0
  587. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/models.py +0 -0
  588. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/events/utm_capture_kinds.py +0 -0
  589. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/groups/authenticated_service.py +0 -0
  590. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/groups/cleanup_service.py +0 -0
  591. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/groups/group_invite_link_token.py +0 -0
  592. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/groups/strip_service.py +0 -0
  593. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/README.md +0 -0
  594. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/__init__.py +0 -0
  595. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/attachment_read.py +0 -0
  596. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/attachment_service.py +0 -0
  597. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/avatar_service.py +0 -0
  598. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/banner_service.py +0 -0
  599. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/media/read_url_config.py +0 -0
  600. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/__init__.py +0 -0
  601. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/appeal_service.py +0 -0
  602. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/moderator_service.py +0 -0
  603. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/report_service.py +0 -0
  604. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/__init__.py +0 -0
  605. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/heals.py +0 -0
  606. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/mirrors.py +0 -0
  607. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/reactions.py +0 -0
  608. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/registry.py +0 -0
  609. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/restriction_fanout/runner.py +0 -0
  610. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/scheduled_service.py +0 -0
  611. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/moderation/user_service.py +0 -0
  612. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/README.md +0 -0
  613. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/__init__.py +0 -0
  614. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/enums.py +0 -0
  615. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/friendship_notification_service.py +0 -0
  616. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/group_invite_notification_service.py +0 -0
  617. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/inbox_service.py +0 -0
  618. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/mute_service.py +0 -0
  619. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/preview.py +0 -0
  620. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/prune_service.py +0 -0
  621. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/notifications/wipe_service.py +0 -0
  622. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/__init__.py +0 -0
  623. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/block_mirrors.py +0 -0
  624. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/events.py +0 -0
  625. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/exceptions.py +0 -0
  626. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/follow_mirrors.py +0 -0
  627. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/ops_service.py +0 -0
  628. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/polling_service.py +0 -0
  629. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/processing_service.py +0 -0
  630. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/outbox/restriction_mirrors.py +0 -0
  631. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/posts/__init__.py +0 -0
  632. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/posts/authenticated_service.py +0 -0
  633. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/__init__.py +0 -0
  634. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/admin_service.py +0 -0
  635. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/aggregation_service.py +0 -0
  636. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/kind_registry.py +0 -0
  637. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/serialization.py +0 -0
  638. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/ratings/subject_existence.py +0 -0
  639. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/shared/__init__.py +0 -0
  640. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/shared/deletion_cleanup_ledger.py +0 -0
  641. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/shared/enums.py +0 -0
  642. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/shared/exceptions.py +0 -0
  643. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/shared/request_context.py +0 -0
  644. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/__init__.py +0 -0
  645. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/account_removal/__init__.py +0 -0
  646. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/account_removal/registry.py +0 -0
  647. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/account_removal/runner.py +0 -0
  648. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/admin_service.py +0 -0
  649. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/aggregation_service.py +0 -0
  650. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/deletion_audit.py +0 -0
  651. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/enums.py +0 -0
  652. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/identity_enrichment.py +0 -0
  653. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/application/users/scheduled_service.py +0 -0
  654. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/asgi.py +0 -0
  655. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/bundled_alembic.py +0 -0
  656. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/constants.py +0 -0
  657. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/__init__.py +0 -0
  658. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/cache.py +0 -0
  659. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/context.py +0 -0
  660. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/database.py +0 -0
  661. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/exception_handlers/__init__.py +0 -0
  662. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/exception_handlers/application.py +0 -0
  663. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/exception_handlers/common.py +0 -0
  664. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/exception_handlers/setup.py +0 -0
  665. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/exceptions.py +0 -0
  666. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/firebase.py +0 -0
  667. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/http_client.py +0 -0
  668. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/http_probes.py +0 -0
  669. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/logging.py +0 -0
  670. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/observability.py +0 -0
  671. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/pagination.py +0 -0
  672. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/process.py +0 -0
  673. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/rate_limit.py +0 -0
  674. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/core/redis.py +0 -0
  675. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/__init__.py +0 -0
  676. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/README.md +0 -0
  677. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/__init__.py +0 -0
  678. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/constants.py +0 -0
  679. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/dependencies.py +0 -0
  680. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/exceptions.py +0 -0
  681. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/models.py +0 -0
  682. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/ports/__init__.py +0 -0
  683. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/ports/activity_source.py +0 -0
  684. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/repository.py +0 -0
  685. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/analytics/service.py +0 -0
  686. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/README.md +0 -0
  687. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/__init__.py +0 -0
  688. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/dependencies.py +0 -0
  689. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/exceptions.py +0 -0
  690. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/models.py +0 -0
  691. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/outcomes.py +0 -0
  692. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/ports/__init__.py +0 -0
  693. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/ports/auth.py +0 -0
  694. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/auth/service.py +0 -0
  695. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/comment/dependencies.py +0 -0
  696. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/comment/enums.py +0 -0
  697. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/comment/exceptions.py +0 -0
  698. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/comment/outcomes.py +0 -0
  699. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/comment/ports/subject.py +0 -0
  700. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/README.md +0 -0
  701. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/__init__.py +0 -0
  702. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/dependencies.py +0 -0
  703. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/exceptions.py +0 -0
  704. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/models.py +0 -0
  705. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/ports/send.py +0 -0
  706. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/email/service.py +0 -0
  707. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/exceptions.py +0 -0
  708. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/README.md +0 -0
  709. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/__init__.py +0 -0
  710. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/__init__.py +0 -0
  711. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/components/__init__.py +0 -0
  712. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/components/finals_publisher.py +0 -0
  713. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/components/staging.py +0 -0
  714. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/components/variant_encoder.py +0 -0
  715. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/constants.py +0 -0
  716. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/exceptions.py +0 -0
  717. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/models.py +0 -0
  718. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/ports/__init__.py +0 -0
  719. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/ports/finals_publisher.py +0 -0
  720. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/ports/staging.py +0 -0
  721. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/ports/variant_encoder.py +0 -0
  722. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/attachment/service.py +0 -0
  723. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/__init__.py +0 -0
  724. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/components/__init__.py +0 -0
  725. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/components/finals_publisher.py +0 -0
  726. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/components/staging.py +0 -0
  727. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/components/variant_encoder.py +0 -0
  728. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/constants.py +0 -0
  729. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/exceptions.py +0 -0
  730. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/models.py +0 -0
  731. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/ports/__init__.py +0 -0
  732. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/ports/finals_publisher.py +0 -0
  733. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/ports/staging.py +0 -0
  734. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/ports/variant_encoder.py +0 -0
  735. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/avatar/service.py +0 -0
  736. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/__init__.py +0 -0
  737. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/components/__init__.py +0 -0
  738. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/components/finals_publisher.py +0 -0
  739. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/components/staging.py +0 -0
  740. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/components/variant_encoder.py +0 -0
  741. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/constants.py +0 -0
  742. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/exceptions.py +0 -0
  743. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/models.py +0 -0
  744. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/ports/__init__.py +0 -0
  745. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/ports/finals_publisher.py +0 -0
  746. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/ports/staging.py +0 -0
  747. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/ports/variant_encoder.py +0 -0
  748. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/banner/service.py +0 -0
  749. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/dependencies.py +0 -0
  750. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/__init__.py +0 -0
  751. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/constants.py +0 -0
  752. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/exceptions.py +0 -0
  753. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/outcomes.py +0 -0
  754. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/repository.py +0 -0
  755. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/media/shared/utils.py +0 -0
  756. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/dependencies.py +0 -0
  757. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/enums.py +0 -0
  758. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/exceptions.py +0 -0
  759. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/outbox_repository.py +0 -0
  760. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/outbox_service.py +0 -0
  761. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/moderation/outcomes.py +0 -0
  762. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/__init__.py +0 -0
  763. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/dependencies.py +0 -0
  764. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/enums.py +0 -0
  765. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/exceptions.py +0 -0
  766. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/models.py +0 -0
  767. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/repository.py +0 -0
  768. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/notification/service.py +0 -0
  769. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/README.md +0 -0
  770. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/__init__.py +0 -0
  771. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/dependencies.py +0 -0
  772. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/exceptions.py +0 -0
  773. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/ports/__init__.py +0 -0
  774. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/ports/admin.py +0 -0
  775. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/ports/consumer.py +0 -0
  776. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/ports/producer.py +0 -0
  777. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/outbox/service.py +0 -0
  778. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/__init__.py +0 -0
  779. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/constants.py +0 -0
  780. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/dependencies.py +0 -0
  781. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/enums.py +0 -0
  782. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/exceptions.py +0 -0
  783. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/post/outcomes.py +0 -0
  784. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/__init__.py +0 -0
  785. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/constants.py +0 -0
  786. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/dependencies.py +0 -0
  787. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/exceptions.py +0 -0
  788. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/outcomes.py +0 -0
  789. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/rating/ports/subject_existence.py +0 -0
  790. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/repository_sql.py +0 -0
  791. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/README.md +0 -0
  792. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/__init__.py +0 -0
  793. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/constants.py +0 -0
  794. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/dependencies.py +0 -0
  795. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/enums.py +0 -0
  796. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/exceptions.py +0 -0
  797. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/group_service.py +0 -0
  798. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/models.py +0 -0
  799. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/outbox_repository.py +0 -0
  800. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/outbox_service.py +0 -0
  801. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/outcomes.py +0 -0
  802. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/user/utils.py +0 -0
  803. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/domains/utils.py +0 -0
  804. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/__init__.py +0 -0
  805. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/email/resend_email_adapter.py +0 -0
  806. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/firebase/__init__.py +0 -0
  807. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/firebase/firebase_auth_adapter.py +0 -0
  808. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/__init__.py +0 -0
  809. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/attachment_staging_display_geometry.py +0 -0
  810. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/local_attachment_staging_adapter.py +0 -0
  811. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/local_avatar_staging_adapter.py +0 -0
  812. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/local_banner_staging_adapter.py +0 -0
  813. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/pillow_attachment_variant_encoder_adapter.py +0 -0
  814. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/pillow_avatar_variant_encoder_adapter.py +0 -0
  815. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/pillow_banner_variant_encoder_adapter.py +0 -0
  816. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/pillow_staging_image.py +0 -0
  817. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/ssh_attachment_finals_publisher_adapter.py +0 -0
  818. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/ssh_banner_finals_publisher_adapter.py +0 -0
  819. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/ssh_finals_publisher_adapter.py +0 -0
  820. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/media/staging_paths.py +0 -0
  821. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/outbox/__init__.py +0 -0
  822. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/outbox/outbox_consumer_adapter.py +0 -0
  823. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/infrastructure/outbox/outbox_producer_adapter.py +0 -0
  824. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/migrate_cli.py +0 -0
  825. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/py.typed +0 -0
  826. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/__init__.py +0 -0
  827. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/arq.py +0 -0
  828. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/blockbuster.py +0 -0
  829. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/firebase_identity_toolkit.py +0 -0
  830. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/hookspecs.py +0 -0
  831. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/httpx_test_client.py +0 -0
  832. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/testing/media.py +0 -0
  833. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/__init__.py +0 -0
  834. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/__init__.py +0 -0
  835. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/analytics_refresh_cron.py +0 -0
  836. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_aggregate_comment_stats.py +0 -0
  837. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_aggregate_post_stats.py +0 -0
  838. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_aggregate_rating_stats.py +0 -0
  839. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_aggregate_rating_subject_stats.py +0 -0
  840. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_aggregate_user_stats.py +0 -0
  841. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_expired_account_deletions.py +0 -0
  842. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_expired_mute_lifts.py +0 -0
  843. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_poll_outbox.py +0 -0
  844. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_prune_analytics_daily_facts.py +0 -0
  845. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_prune_post_views.py +0 -0
  846. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_prune_read_notifications.py +0 -0
  847. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_purge_expired_create_idempotency_keys.py +0 -0
  848. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_purge_expired_group_invites.py +0 -0
  849. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_refresh_analytics.py +0 -0
  850. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_restriction_heals.py +0 -0
  851. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_sweep_stale_attachment_staging.py +0 -0
  852. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_sweep_stale_avatar_staging.py +0 -0
  853. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/schedules/schedule_sweep_stale_banner_staging.py +0 -0
  854. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/__init__.py +0 -0
  855. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/delete_attachment_finals.py +0 -0
  856. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/delete_superseded_avatar_finals.py +0 -0
  857. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/delete_superseded_banner_finals.py +0 -0
  858. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_account_deletion.py +0 -0
  859. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_admin_user_deletion.py +0 -0
  860. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_aggregate_comment_stats.py +0 -0
  861. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_aggregate_post_stats.py +0 -0
  862. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_aggregate_rating_stats.py +0 -0
  863. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_aggregate_rating_subject_stats.py +0 -0
  864. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_aggregate_user_stats.py +0 -0
  865. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_attachment_asset_variants.py +0 -0
  866. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_banner_asset_variants.py +0 -0
  867. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_block_notification_wipe.py +0 -0
  868. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_cache_pattern_invalidation.py +0 -0
  869. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_destructive_comment_delete.py +0 -0
  870. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_destructive_post_delete.py +0 -0
  871. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_friendship_pair_notification_wipe.py +0 -0
  872. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_group_invite_notification_wipe.py +0 -0
  873. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_media_asset_variants.py +0 -0
  874. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_mute_lift.py +0 -0
  875. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_outbox_row.py +0 -0
  876. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_post_private_notification_wipe.py +0 -0
  877. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_refresh_analytics_bucket.py +0 -0
  878. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_restriction_reactions.py +0 -0
  879. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/tasks/process_user_content_deletion.py +0 -0
  880. {core_framework-4.0.0 → core_framework-4.1.0}/core_framework/worker/worker_context.py +0 -0
  881. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/README.md +0 -0
  882. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/app/docker-compose.dev.yaml +0 -0
  883. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/app/docker-compose.yml +0 -0
  884. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/app/dockerfile +0 -0
  885. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/.env.example +0 -0
  886. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/README.md +0 -0
  887. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/docker-compose.yml +0 -0
  888. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/dashboards/application/api-http.json +0 -0
  889. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/dashboards/application/worker-jobs.json +0 -0
  890. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/dashboards/infrastructure/node-exporter.json +0 -0
  891. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/dashboards/infrastructure/postgres-exporter.json +0 -0
  892. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/dashboards/infrastructure/redis-exporter.json +0 -0
  893. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/provisioning/dashboards/dashboards.yml +0 -0
  894. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/grafana/provisioning/datasources/datasources.yml +0 -0
  895. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/loki.yaml +0 -0
  896. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/otel-collector-config.yaml +0 -0
  897. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/prometheus.yml +0 -0
  898. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets/node/.gitkeep +0 -0
  899. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets/postgres/.gitkeep +0 -0
  900. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets/redis/.gitkeep +0 -0
  901. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets.default/node.yml +0 -0
  902. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets.default/postgres.yml +0 -0
  903. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets.default/redis.yml +0 -0
  904. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/targets.example/README.md +0 -0
  905. {core_framework-4.0.0 → core_framework-4.1.0}/deploy/observability/tempo.yaml +0 -0
  906. {core_framework-4.0.0 → core_framework-4.1.0}/docs/README.md +0 -0
  907. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/README.md +0 -0
  908. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/edge-rate-limits.md +0 -0
  909. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/examples/Caddyfile.observability.example +0 -0
  910. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/examples/image-server-known-hosts.example +0 -0
  911. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/playbook/py-spy-playbook.md +0 -0
  912. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/app-server-deploy-ssh.md +0 -0
  913. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/caddy-setup.md +0 -0
  914. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/cloudflare-setup.md +0 -0
  915. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/observability-lgtm-setup.md +0 -0
  916. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/postgres-backup-setup.md +0 -0
  917. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/postgres-setup.md +0 -0
  918. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/py-spy-setup.md +0 -0
  919. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/redis-setup.md +0 -0
  920. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/guides/setup/ubuntu-server-setup.md +0 -0
  921. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/host-config-defaults-implementation.md +0 -0
  922. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/postgres-backup-design.md +0 -0
  923. {core_framework-4.0.0 → core_framework-4.1.0}/docs/deployments/release-playbook.md +0 -0
  924. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/analytics-rollup-design.md +0 -0
  925. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/analytics-warehouse-design.md +0 -0
  926. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/cache-invalidation-design.md +0 -0
  927. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/events-ingest-design.md +0 -0
  928. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/media-cpu-off-api-refactor.md +0 -0
  929. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/media-storage-topology.md +0 -0
  930. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/moderation-restriction-fanout-design.md +0 -0
  931. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/moderation-restriction-fanout-implementation.md +0 -0
  932. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/moderator-surfaces-design.md +0 -0
  933. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/moderator-surfaces-implementation.md +0 -0
  934. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/observability-lgtm-design.md +0 -0
  935. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/rating-thread-owner-cue-design.md +0 -0
  936. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/rating-thread-owner-cue-implementation.md +0 -0
  937. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/restriction-and-block-visibility-design.md +0 -0
  938. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/restriction-and-block-visibility-implementation.md +0 -0
  939. {core_framework-4.0.0 → core_framework-4.1.0}/docs/design/utm-events-design.md +0 -0
  940. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/analytics/admin_analytics_reads.md +0 -0
  941. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/auth/registration.md +0 -0
  942. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/cache/admin_cache_invalidation.md +0 -0
  943. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/comments/comment_like.md +0 -0
  944. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/comments/comment_report.md +0 -0
  945. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/comments/comment_stats_aggregation.md +0 -0
  946. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/comments/delete_comment.md +0 -0
  947. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/comments/edit_comment.md +0 -0
  948. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/deletion/overview.md +0 -0
  949. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/deletion/ratings.md +0 -0
  950. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/events/events.md +0 -0
  951. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/README.md +0 -0
  952. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/attachment_upload.md +0 -0
  953. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/avatar-upload-design.md +0 -0
  954. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/banner-upload-design.md +0 -0
  955. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/post-comment-attachments-design.md +0 -0
  956. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/upload-pipeline-design.md +0 -0
  957. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/media/upload_pipeline.md +0 -0
  958. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/moderation/README.md +0 -0
  959. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/moderation/appeals.md +0 -0
  960. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/moderation/internal_notes.md +0 -0
  961. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/moderation/reports.md +0 -0
  962. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/moderation/restrictions.md +0 -0
  963. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/notifications/notification_inbox.md +0 -0
  964. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/outbox/admin_outbox_ops.md +0 -0
  965. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/author_context.md +0 -0
  966. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/create_post.md +0 -0
  967. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/delete_post.md +0 -0
  968. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/edit_post.md +0 -0
  969. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/post_like.md +0 -0
  970. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/post_report.md +0 -0
  971. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/posts/post_visibility.md +0 -0
  972. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/account.md +0 -0
  973. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/admin_users.md +0 -0
  974. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/avatar.md +0 -0
  975. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/banner.md +0 -0
  976. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/check_username_exists.md +0 -0
  977. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/friendship-system-design.md +0 -0
  978. {core_framework-4.0.0 → core_framework-4.1.0}/docs/domains/users/username_suggest.md +0 -0
  979. {core_framework-4.0.0 → core_framework-4.1.0}/docs/library/README.md +0 -0
  980. {core_framework-4.0.0 → core_framework-4.1.0}/docs/library/core-framework-migration.md +0 -0
  981. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/README.md +0 -0
  982. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/client-error-visibility.md +0 -0
  983. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/database-triggers.md +0 -0
  984. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/domain-services-and-adapters.md +0 -0
  985. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/layers-and-boundaries.md +0 -0
  986. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/patch-update-typed-payload.md +0 -0
  987. {core_framework-4.0.0 → core_framework-4.1.0}/docs/platform/response-composition-and-caching.md +0 -0
  988. {core_framework-4.0.0 → core_framework-4.1.0}/docs/reviews/README.md +0 -0
  989. {core_framework-4.0.0 → core_framework-4.1.0}/firebase_config.example.json +0 -0
  990. {core_framework-4.0.0 → core_framework-4.1.0}/makefile +0 -0
  991. {core_framework-4.0.0 → core_framework-4.1.0}/tests/__init__.py +0 -0
  992. {core_framework-4.0.0 → core_framework-4.1.0}/tests/conftest.py +0 -0
  993. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/_auth.py +0 -0
  994. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/_canaries.py +0 -0
  995. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/_media.py +0 -0
  996. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/_settings.py +0 -0
  997. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/_upload_payloads.py +0 -0
  998. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/conftest.py +0 -0
  999. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/media/pipeline_test.py +0 -0
  1000. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/smoke/canary_test.py +0 -0
  1001. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/smoke/media_test.py +0 -0
  1002. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/smoke/system_test.py +0 -0
  1003. {core_framework-4.0.0 → core_framework-4.1.0}/tests/e2e/smoke/tls_host_test.py +0 -0
  1004. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/__init__.py +0 -0
  1005. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/_http_error_details.py +0 -0
  1006. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/_poll.py +0 -0
  1007. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/analytics/_helpers.py +0 -0
  1008. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/__init__.py +0 -0
  1009. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/_auth_helpers.py +0 -0
  1010. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/_destructive_delete_helpers.py +0 -0
  1011. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/_outbox_helpers.py +0 -0
  1012. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/_user_deletion_helpers.py +0 -0
  1013. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/_user_helpers.py +0 -0
  1014. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/__init__.py +0 -0
  1015. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/_auth_cases.py +0 -0
  1016. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/analytics/__init__.py +0 -0
  1017. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/analytics/router_test.py +0 -0
  1018. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/cache/__init__.py +0 -0
  1019. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/cache/router_test.py +0 -0
  1020. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/comments/__init__.py +0 -0
  1021. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/moderation/__init__.py +0 -0
  1022. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/moderation/router_test.py +0 -0
  1023. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/moderator_surfaces_test.py +0 -0
  1024. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/outbox/__init__.py +0 -0
  1025. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/outbox/router_test.py +0 -0
  1026. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/posts/__init__.py +0 -0
  1027. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/posts/router_test.py +0 -0
  1028. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/users/__init__.py +0 -0
  1029. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/admin/users/router_test.py +0 -0
  1030. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/attachments/_helpers.py +0 -0
  1031. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/attachments/attachment_upload_test.py +0 -0
  1032. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/attachments/conftest.py +0 -0
  1033. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/auth/__init__.py +0 -0
  1034. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/auth/router_test.py +0 -0
  1035. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/__init__.py +0 -0
  1036. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/authenticated/__init__.py +0 -0
  1037. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/authenticated/comment_writes_integration_test.py +0 -0
  1038. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/comment_attachments_integration_test.py +0 -0
  1039. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/comment_kind_registry_integration_test.py +0 -0
  1040. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/public/__init__.py +0 -0
  1041. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/comments/public/router_test.py +0 -0
  1042. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/create_idempotency_integration_test.py +0 -0
  1043. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/events/router_test.py +0 -0
  1044. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/groups/groups_integration_test.py +0 -0
  1045. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/media/ingest_contract_test.py +0 -0
  1046. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/mentions/mentions_integration_test.py +0 -0
  1047. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/notifications/__init__.py +0 -0
  1048. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/notifications/inbox_redesign_integration_test.py +0 -0
  1049. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/notifications/router_test.py +0 -0
  1050. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/__init__.py +0 -0
  1051. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/authenticated/post_writes_integration_test.py +0 -0
  1052. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/comment_count_aggregation_test.py +0 -0
  1053. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/followers_visibility_test.py +0 -0
  1054. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/post_attachments_integration_test.py +0 -0
  1055. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/post_stats_dirty_marking_test.py +0 -0
  1056. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/public/__init__.py +0 -0
  1057. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/posts/public/router_test.py +0 -0
  1058. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/public_read_by_id_unavailable_detail_test.py +0 -0
  1059. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/rate_limit_test.py +0 -0
  1060. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/ratings/__init__.py +0 -0
  1061. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/ratings/_helpers.py +0 -0
  1062. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/ratings/conftest.py +0 -0
  1063. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/ratings/ratings_integration_test.py +0 -0
  1064. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/ratings/ratings_visibility_integration_test.py +0 -0
  1065. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/restriction_visibility_integration_test.py +0 -0
  1066. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/system/__init__.py +0 -0
  1067. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/system/router_test.py +0 -0
  1068. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/__init__.py +0 -0
  1069. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/account_deletion_email_test.py +0 -0
  1070. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/authenticated/__init__.py +0 -0
  1071. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/authenticated/friendship_integration_test.py +0 -0
  1072. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/authenticated/profile_media_upload_test.py +0 -0
  1073. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/authenticated/router_test.py +0 -0
  1074. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/deletion_audit_integration_test.py +0 -0
  1075. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/public/__init__.py +0 -0
  1076. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/public/router_test.py +0 -0
  1077. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/api/users/user_deletion_integration_test.py +0 -0
  1078. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/conftest.py +0 -0
  1079. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/__init__.py +0 -0
  1080. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/_aggregate_stats_helpers.py +0 -0
  1081. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/_arq_helpers.py +0 -0
  1082. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/_media_upload_helpers.py +0 -0
  1083. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/account_deletion_test.py +0 -0
  1084. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/aggregate_comment_stats_test.py +0 -0
  1085. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/aggregate_post_stats_test.py +0 -0
  1086. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/aggregate_user_stats_test.py +0 -0
  1087. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/analytics_prune_test.py +0 -0
  1088. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/analytics_refresh_test.py +0 -0
  1089. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/attachment_upload_test.py +0 -0
  1090. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/conftest.py +0 -0
  1091. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/moderation_outbox_test.py +0 -0
  1092. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/mute_lift_test.py +0 -0
  1093. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/profile_media_upload_test.py +0 -0
  1094. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/read_notifications_retention_test.py +0 -0
  1095. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/restriction_fanout_test.py +0 -0
  1096. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/stale_staging_sweep_test.py +0 -0
  1097. {core_framework-4.0.0 → core_framework-4.1.0}/tests/integration/worker/user_outbox_test.py +0 -0
  1098. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/__init__.py +0 -0
  1099. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/api/comments/authenticated/comment_request_schemas_test.py +0 -0
  1100. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/api/dedupe_preserving_order_test.py +0 -0
  1101. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/api/posts/authenticated/post_update_mapper_test.py +0 -0
  1102. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/api/users/profile_update_mapper_test.py +0 -0
  1103. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/comments/__init__.py +0 -0
  1104. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/comments/kind_registry_test.py +0 -0
  1105. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/email/account_deletion_scheduled_test.py +0 -0
  1106. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/events/event_service_test.py +0 -0
  1107. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/moderation/restriction_fanout_registry_test.py +0 -0
  1108. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/notifications/preview_test.py +0 -0
  1109. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/ratings/kind_registry_test.py +0 -0
  1110. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/shared/request_context_test.py +0 -0
  1111. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/users/account_removal_registry_test.py +0 -0
  1112. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/users/account_removal_runner_test.py +0 -0
  1113. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/application/users/deletion_audit_test.py +0 -0
  1114. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/core/bundled_alembic_test.py +0 -0
  1115. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/core/migrate_cli_test.py +0 -0
  1116. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/core/pagination_test.py +0 -0
  1117. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/docs/_api_reference.py +0 -0
  1118. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/docs/api_routes_test.py +0 -0
  1119. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/domains/__init__.py +0 -0
  1120. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/domains/comment/__init__.py +0 -0
  1121. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/domains/post/models_test.py +0 -0
  1122. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/domains/user/service_test.py +0 -0
  1123. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/infrastructure/__init__.py +0 -0
  1124. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/infrastructure/media/__init__.py +0 -0
  1125. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/infrastructure/media/ssh_finals_publisher_adapter_test.py +0 -0
  1126. {core_framework-4.0.0 → core_framework-4.1.0}/tests/unit/worker/tasks_registration_test.py +0 -0
@@ -0,0 +1 @@
1
+ ../../.venv/lib/python3.14/site-packages/pydantic_ai/.agents/skills/building-pydantic-ai-agents
@@ -0,0 +1 @@
1
+ ../../.agents/skills/building-pydantic-ai-agents
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: code-review
3
+ description: >-
4
+ Review code and report a single list of items to address. Use when the user
5
+ asks for a code review, audit of code/implementation, or review of code
6
+ changes — and when they ask to elaborate, expand, or explain those findings.
7
+ Do not use for design / system-design / product-design doc readiness reviews
8
+ (use design-review).
9
+ ---
10
+
11
+ # Code Review
12
+
13
+ Report **one list of items to address**. Check repo rules and originating docs internally. Do **not** split the report into Standards vs Spec (or any other axis). Do **not** tag findings by source.
14
+
15
+ ## What to check
16
+
17
+ **Repo rules.** Does the diff follow this repo’s rules and accepted decisions?
18
+
19
+ Layers, conventions, scoped `.cursor/rules`, **Residue**, parallel drift, third-copy, strong reads, test names, main-feature flowchart when this change adds or alters a design doc. Use [`docs/platform/glossary.md`](docs/platform/glossary.md) terms.
20
+
21
+ Do **not** flag documented accepted trade-offs in **`docs/platform/architecture-decisions.md`** unless the implementation violates them. Do **not** flag two similar copies as needing extraction (wait for the third). Do **not** import a generic smell list that fights those rules.
22
+
23
+ **Originating docs.** Does the diff match the design and flow docs?
24
+
25
+ - Missing or partial relative to the spec
26
+ - Behavior the spec did not ask for
27
+ - Implemented but wrong relative to a spec line (quote that line)
28
+
29
+ **Spec sources** (first that applies): docs the user named; design/flow docs the change clearly belongs to; matching `docs/design/*-design.md` / `docs/domains/**/*-design.md` plus the paired flow doc. If none exist, skip this check — do not mention that there is no spec.
30
+
31
+ ## Reachability and impact
32
+
33
+ Before keeping a race, edge case, or error-path finding, state who can trigger it and what it harms. Severity follows both.
34
+
35
+ - **Who triggers it:** a correct client, a buggy client, or a deliberate caller (attacker).
36
+ - **What it harms:** data corruption or lost writes; another user's data or existence (trust boundary); availability beyond what ordinary requests already allow; or only the caller's own request failing.
37
+
38
+ **Drop** a finding when the only trigger is the caller's own invalid or contradictory request and the only outcome is that request failing, even with the wrong status (e.g. a deadlock that needs an illegal request to collide with a legal one, where the illegal one was already going to fail). Mention it only if the user asks for edge cases.
39
+
40
+ **Keep** deliberate-caller findings that cross a trust boundary (another user's rows, enumeration, auth bypass) or give an attacker more load or disruption than ordinary requests allow. Do not drop a finding just because a correct client would not hit it.
41
+
42
+ ## Output format (required)
43
+
44
+ **Actionable findings only**, under `## Findings`:
45
+
46
+ - Bugs, wrong behavior, improvements, optimizations, doc/code contradictions, parallel implementation drift (sibling flows that diverge without documented reason), **Residue** after an implementation or refactor, spec gaps / extras / mismatches.
47
+ - One numbered list, prioritized by severity (see **Reachability and impact**). Each item: file context, what is wrong, who can trigger it, fix direction.
48
+ - **Do not** praise, summarize strengths, pad with checklist pass narratives, or emit empty-axis sentences.
49
+ - One-line scope is fine. If there is nothing to address, say so in one sentence — no `## Findings` heading.
50
+
51
+ ## Elaborating review points (required)
52
+
53
+ When the user asks to elaborate, expand, explain, or go deeper on review findings (one point, several, or all):
54
+
55
+ - **Always include concrete examples** for each point — never prose-only elaboration.
56
+ - Prefer examples from the reviewed code: cite the relevant snippet, then show a corrected or alternative version when a fix is implied.
57
+ - If the issue is behavioral (race, ordering, missing branch), give a short before/after scenario or input sequence that triggers it.
58
+ - Keep the example tight (a few lines); do not re-dump the whole review.
59
+
60
+ ## Workflow
61
+
62
+ 1. Pin the diff (named files, or `git diff` against the branch base / range the user gave).
63
+ 1. Identify spec sources (see **Originating docs** above).
64
+ 1. Read **`docs/platform/layers-and-boundaries.md`**, **`conventions.md`**, **`architecture-decisions.md`**, and **`glossary.md`** for the reviewed scope.
65
+ 1. Apply **scoped rules** (`.cursor/rules/*.mdc`) matching files under review — especially **`error-boundary`**, **`domain-imports`**, **`api-layer`**, **`application-layer`**, **`strong-reads`**.
66
+ 1. Check for **Residue** from this implementation or refactor (section below). Flag it with delete-now direction unless a live consumer still needs the old path.
67
+ 1. Check rules and originating docs. If the diff is large, parallel exploration is fine; **merge into one severity-ordered list** before reporting. Do not paste unmerged sub-agent reports.
68
+ 1. Report findings only — no filler.
69
+ 1. On elaborate/expand follow-ups, re-read this skill and apply **Elaborating review points**.
70
+
71
+ ## Quick checks
72
+
73
+ - Application services: no HTTP types, no domain exceptions, no Pydantic return types, one-line docstrings.
74
+ - API: thin routers, validation in schemas, orchestration in application — **fastapi** skill (`.agents/skills/fastapi/`) + **`api-layer`** / **`api-validation`** / **`error-boundary`** rules.
75
+ - Domain: imports only via **`__init__.py`** / **`dependencies`** from outer layers; no caller-context names (**`domain-caller-context`**).
76
+ - Read-after-write refetches use **`*_strong`** where applicable.
77
+ - **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`.
78
+ - **Wait for the third copy before you extract** (`docs/platform/conventions.md`): flag a new private helper with one or two call sites unless it is ~15+ lines / non-obvious branching, or a scoped rule requires sharing (`strong-reads`). Do **not** flag two similar inlined copies as needing extraction.
79
+ - **Test name should tell me what broke:** flag tests whose names only name the unit under test or a generic outcome (`test_create_post`, `test_success`, `test_happy_path`). The pytest failure line must state the invariant (e.g. `test_public_feed_excludes_others_followers_only_post`).
80
+ - **Main-feature design flowchart:** if this change introduces a new `*-design.md` (or changes that design’s control flow) and there is no mermaid **`flowchart`** of the main control flow, flag it. Do **not** flag older design docs that never had a chart.
81
+
82
+ ## Residue
83
+
84
+ Leftover seams after the new path shipped. Flag them; they are not “later retirement” unless a live producer or in-flight consumer still needs the old path. On greenfield (no hosts, no traffic), treat as **safe to delete now**.
85
+
86
+ Look for:
87
+
88
+ - Dead registration — worker tasks, enums, schedules, or “keep registered for drain” docs with no remaining producer.
89
+ - Compatibility branches the new producers never write (old payload versions, dual handlers, mirrors-only v1).
90
+ - Incomplete moves — logic still in the old module, a shared helper unused while call sites inline the same shape, types left as `Any` after a typed model exists.
91
+ - Docs / OpenAPI still describing the pre-change stored shape, cutover drain, or a history/status value that is never written.
92
+ - Naming leftovers after a rename (old helper name used for a different role).
93
+
94
+ ## Parallel drift
95
+
96
+ 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,252 @@
1
+ name: Reusable Deployment
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ env_name:
7
+ type: string
8
+ required: true
9
+ dockerhub_username:
10
+ type: string
11
+ required: true
12
+ worker_replicas:
13
+ type: number
14
+ required: false
15
+ default: 1
16
+ secrets:
17
+ SECRET_KEY:
18
+ required: true
19
+ WRITE_POSTGRES_PASSWORD:
20
+ required: true
21
+ READ_POSTGRES_PASSWORD:
22
+ required: false
23
+ EMAIL_API_KEY:
24
+ required: false
25
+ AGENT_OPENAI_API_KEY:
26
+ required: false
27
+ FIREBASE_CONFIG:
28
+ required: true
29
+ IMAGE_SERVER_SSH_PRIVATE_KEY:
30
+ required: true
31
+ IMAGE_SERVER_KNOWN_HOSTS:
32
+ required: true
33
+ DEPLOY_SERVER_SSH_KEY:
34
+ required: true
35
+ DOCKERHUB_TOKEN:
36
+ required: true
37
+
38
+ permissions: {}
39
+
40
+ jobs:
41
+ deploy:
42
+ runs-on: ubuntu-latest
43
+ environment: ${{ inputs.env_name }}
44
+ permissions:
45
+ contents: read
46
+ steps:
47
+ - name: Checkout code
48
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
49
+ with:
50
+ persist-credentials: false
51
+
52
+ - name: Render config.toml from template
53
+ env:
54
+ ENVIRONMENT: ${{ inputs.env_name }}
55
+ SECRET_KEY: ${{ secrets.SECRET_KEY }}
56
+ PUBLIC_ZONE: ${{ vars.PUBLIC_ZONE }}
57
+ MEDIA_HOST_DOMAIN: ${{ vars.MEDIA_HOST_DOMAIN }}
58
+ MEDIA_PUBLISH_PARENT: ${{ vars.MEDIA_PUBLISH_PARENT }}
59
+ WRITE_POSTGRES_HOST: ${{ vars.WRITE_POSTGRES_HOST || '127.0.0.1' }}
60
+ WRITE_POSTGRES_PORT: ${{ vars.WRITE_POSTGRES_PORT || '5432' }}
61
+ WRITE_POSTGRES_USER: ${{ vars.WRITE_POSTGRES_USER }}
62
+ WRITE_POSTGRES_PASSWORD: ${{ secrets.WRITE_POSTGRES_PASSWORD }}
63
+ WRITE_POSTGRES_DB: ${{ vars.WRITE_POSTGRES_DB || 'postgres' }}
64
+ READ_POSTGRES_HOST: ${{ vars.READ_POSTGRES_HOST }}
65
+ READ_POSTGRES_PORT: ${{ vars.READ_POSTGRES_PORT || vars.WRITE_POSTGRES_PORT || '5432' }}
66
+ READ_POSTGRES_USER: ${{ vars.READ_POSTGRES_USER }}
67
+ READ_POSTGRES_PASSWORD: ${{ secrets.READ_POSTGRES_PASSWORD }}
68
+ READ_POSTGRES_DB: ${{ vars.READ_POSTGRES_DB }}
69
+ REDIS_HOST: ${{ vars.REDIS_HOST || '127.0.0.1' }}
70
+ REDIS_PORT: ${{ vars.REDIS_PORT || '6379' }}
71
+ REDIS_CACHE_DB: ${{ vars.REDIS_CACHE_DB || '0' }}
72
+ REDIS_QUEUE_DB: ${{ vars.REDIS_QUEUE_DB || '1' }}
73
+ ALLOWED_HOSTS: ${{ vars.ALLOWED_HOSTS || '[]' }}
74
+ APP_TITLE: ${{ vars.APP_TITLE }}
75
+ APP_DEBUG: ${{ vars.APP_DEBUG || 'false' }}
76
+ OPENAPI_URL: ${{ vars.OPENAPI_URL }}
77
+ AVATAR_HOST_DOMAIN: ${{ vars.AVATAR_HOST_DOMAIN }}
78
+ AVATAR_DEFAULT_IMAGE: ${{ vars.AVATAR_DEFAULT_IMAGE || 'default.webp' }}
79
+ AVATAR_PUBLISH_ROOT: ${{ vars.AVATAR_PUBLISH_ROOT }}
80
+ BANNER_HOST_DOMAIN: ${{ vars.BANNER_HOST_DOMAIN }}
81
+ BANNER_DEFAULT_IMAGE: ${{ vars.BANNER_DEFAULT_IMAGE || 'default.webp' }}
82
+ BANNER_PUBLISH_ROOT: ${{ vars.BANNER_PUBLISH_ROOT }}
83
+ ATTACHMENT_HOST_DOMAIN: ${{ vars.ATTACHMENT_HOST_DOMAIN }}
84
+ ATTACHMENT_DEFAULT_IMAGE: ${{ vars.ATTACHMENT_DEFAULT_IMAGE || 'default.webp' }}
85
+ ATTACHMENT_PUBLISH_ROOT: ${{ vars.ATTACHMENT_PUBLISH_ROOT }}
86
+ IMAGE_SERVER_HOST: ${{ vars.IMAGE_SERVER_HOST }}
87
+ IMAGE_SERVER_PORT: ${{ vars.IMAGE_SERVER_PORT || '22' }}
88
+ IMAGE_SERVER_USER: ${{ vars.IMAGE_SERVER_USER || 'root' }}
89
+ OBSERVABILITY_ENABLED: ${{ vars.OBSERVABILITY_ENABLED || 'false' }}
90
+ OBSERVABILITY_OTLP_ENDPOINT: ${{ vars.OBSERVABILITY_OTLP_ENDPOINT }}
91
+ PROFILING_KEY: ${{ vars.PROFILING_KEY }}
92
+ PROFILING_ENABLED: ${{ vars.PROFILING_ENABLED || 'false' }}
93
+ LOG_LEVEL: ${{ vars.LOG_LEVEL || 'info' }}
94
+ CORS_ALLOWED_ORIGINS: ${{ vars.CORS_ALLOWED_ORIGINS || '[]' }}
95
+ RETENTION_POST_VIEWS_DAYS: ${{ vars.RETENTION_POST_VIEWS_DAYS || '90' }}
96
+ RETENTION_READ_NOTIFICATIONS_DAYS: ${{ vars.RETENTION_READ_NOTIFICATIONS_DAYS || '7' }}
97
+ ANALYTICS_REFRESH_INTERVAL_SECONDS: ${{ vars.ANALYTICS_REFRESH_INTERVAL_SECONDS || '300' }}
98
+ EMAIL_ENABLED: ${{ vars.EMAIL_ENABLED || 'false' }}
99
+ EMAIL_PROVIDER: ${{ vars.EMAIL_PROVIDER || 'resend' }}
100
+ EMAIL_API_KEY: ${{ secrets.EMAIL_API_KEY }}
101
+ EMAIL_FROM_ADDRESS: ${{ vars.EMAIL_FROM_ADDRESS }}
102
+ EMAIL_FROM_NAME: ${{ vars.EMAIL_FROM_NAME }}
103
+ AGENT_ENABLED: ${{ vars.AGENT_ENABLED || 'false' }}
104
+ AGENT_MODEL: ${{ vars.AGENT_MODEL }}
105
+ AGENT_OPENAI_API_KEY: ${{ secrets.AGENT_OPENAI_API_KEY }}
106
+ AGENT_OPENAI_BASE_URL: ${{ vars.AGENT_OPENAI_BASE_URL }}
107
+ AGENT_TIMEOUT_SECONDS: ${{ vars.AGENT_TIMEOUT_SECONDS || '120' }}
108
+ run: |
109
+ set -euo pipefail
110
+
111
+ echo "Rendering config..."
112
+ envsubst < config.toml.template > config.toml
113
+ test -s config.toml
114
+ python3 - <<'PY'
115
+ import sys
116
+ import tomllib
117
+
118
+ try:
119
+ with open("config.toml", "rb") as f:
120
+ tomllib.load(f)
121
+ except Exception as e:
122
+ print("ERROR: config.toml is invalid TOML", file=sys.stderr)
123
+ print(e, file=sys.stderr)
124
+ sys.exit(1)
125
+ PY
126
+
127
+ - name: Generate firebase_config.json from secret
128
+ env:
129
+ FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
130
+ run: |
131
+ set -euo pipefail
132
+
133
+ echo "Generating firebase_config.json..."
134
+ echo "$FIREBASE_CONFIG" > firebase_config.json
135
+ test -s firebase_config.json
136
+ python3 - <<'PY'
137
+ import sys
138
+ import json
139
+
140
+ try:
141
+ with open("firebase_config.json", "r") as f:
142
+ json.load(f)
143
+ except Exception as e:
144
+ print("ERROR: firebase_config.json is invalid JSON", file=sys.stderr)
145
+ print(e, file=sys.stderr)
146
+ sys.exit(1)
147
+ PY
148
+
149
+ - name: Generate image_server_ssh_key from secret
150
+ env:
151
+ IMAGE_SERVER_SSH_PRIVATE_KEY: ${{ secrets.IMAGE_SERVER_SSH_PRIVATE_KEY }}
152
+ run: |
153
+ set -euo pipefail
154
+
155
+ echo "Generating image_server_ssh_key..."
156
+ printf '%s\n' "$IMAGE_SERVER_SSH_PRIVATE_KEY" > image_server_ssh_key
157
+ test -s image_server_ssh_key
158
+ chmod 600 image_server_ssh_key
159
+
160
+ - name: Generate image_server_known_hosts from secret
161
+ env:
162
+ IMAGE_SERVER_KNOWN_HOSTS: ${{ secrets.IMAGE_SERVER_KNOWN_HOSTS }}
163
+ run: |
164
+ set -euo pipefail
165
+
166
+ echo "Generating image_server_known_hosts..."
167
+ printf '%s\n' "$IMAGE_SERVER_KNOWN_HOSTS" > image_server_known_hosts
168
+ test -s image_server_known_hosts
169
+ chmod 644 image_server_known_hosts
170
+
171
+ - name: Stage docker-compose.yml for upload
172
+ run: cp deploy/app/docker-compose.yml ./docker-compose.yml
173
+
174
+ - name: Upload rendered config.toml, firebase_config.json and docker-compose.yml
175
+ uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
176
+ with:
177
+ host: ${{ vars.DEPLOY_SERVER_HOST }}
178
+ username: ${{ vars.DEPLOY_SERVER_USER }}
179
+ key: ${{ secrets.DEPLOY_SERVER_SSH_KEY }}
180
+ port: ${{ vars.DEPLOY_SERVER_PORT || 22 }}
181
+ source: "config.toml,firebase_config.json,docker-compose.yml,image_server_ssh_key,image_server_known_hosts"
182
+ target: "/home/${{ vars.DEPLOY_SERVER_USER }}/app_configs/core-framework"
183
+
184
+ - name: Deploy to Server via SSH
185
+ uses: appleboy/ssh-action@0ff4204d59e8e51228ff73bce53f80d53301dee2 # v1.2.5
186
+ env:
187
+ DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
188
+ DOCKERHUB_USERNAME: ${{ inputs.dockerhub_username }}
189
+ DEPLOY_SERVER_USER: ${{ vars.DEPLOY_SERVER_USER }}
190
+ WORKER_REPLICAS: ${{ inputs.worker_replicas }}
191
+ with:
192
+ host: ${{ vars.DEPLOY_SERVER_HOST }}
193
+ username: ${{ vars.DEPLOY_SERVER_USER }}
194
+ key: ${{ secrets.DEPLOY_SERVER_SSH_KEY }}
195
+ port: ${{ vars.DEPLOY_SERVER_PORT || 22 }}
196
+ envs: DOCKERHUB_TOKEN,DOCKERHUB_USERNAME,DEPLOY_SERVER_USER,WORKER_REPLICAS
197
+ script: |
198
+ set -euo pipefail
199
+
200
+ echo "Logging in to Docker Hub"
201
+ printf '%s' "$DOCKERHUB_TOKEN" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
202
+
203
+ COMPOSE_FILE="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/docker-compose.yml"
204
+ CONFIG_PATH="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/config.toml"
205
+ FIREBASE_CONFIG_PATH="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/firebase_config.json"
206
+ MEDIA_STAGING_PATH="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/media-staging"
207
+ IMAGE_SERVER_SSH_KEY_PATH="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/image_server_ssh_key"
208
+ IMAGE_SERVER_KNOWN_HOSTS_PATH="/home/$DEPLOY_SERVER_USER/app_configs/core-framework/image_server_known_hosts"
209
+
210
+ echo "Pulling latest image"
211
+ DOCKERHUB_USERNAME="$DOCKERHUB_USERNAME" \
212
+ CONFIG_PATH="$CONFIG_PATH" \
213
+ FIREBASE_CONFIG_PATH="$FIREBASE_CONFIG_PATH" \
214
+ MEDIA_STAGING_PATH="$MEDIA_STAGING_PATH" \
215
+ IMAGE_SERVER_SSH_KEY_PATH="$IMAGE_SERVER_SSH_KEY_PATH" \
216
+ IMAGE_SERVER_KNOWN_HOSTS_PATH="$IMAGE_SERVER_KNOWN_HOSTS_PATH" \
217
+ docker compose -f "$COMPOSE_FILE" pull
218
+
219
+ echo "Preparing media staging directory and image server SSH key permissions"
220
+ mkdir -p "$MEDIA_STAGING_PATH"
221
+ docker run --rm \
222
+ --user root \
223
+ -v "$MEDIA_STAGING_PATH:/app/media-staging" \
224
+ -v "$IMAGE_SERVER_SSH_KEY_PATH:/app/image-server-ssh-key" \
225
+ -v "$IMAGE_SERVER_KNOWN_HOSTS_PATH:/app/image-server-known-hosts" \
226
+ --entrypoint "" \
227
+ "$DOCKERHUB_USERNAME/core-framework:latest" \
228
+ sh -c 'mkdir -p /app/media-staging && chown -R appuser:appgroup /app/media-staging && chown appuser:appgroup /app/image-server-ssh-key && chmod 600 /app/image-server-ssh-key && chown appuser:appgroup /app/image-server-known-hosts && chmod 644 /app/image-server-known-hosts'
229
+
230
+ echo "Running database migrations (cf-alembic iterates core_framework.bundled_alembic.ALEMBIC_DOMAINS in order)"
231
+ docker run --rm \
232
+ --network host \
233
+ -v "$CONFIG_PATH:/app/config.toml:ro" \
234
+ "$DOCKERHUB_USERNAME/core-framework:latest" \
235
+ cf-alembic
236
+
237
+ echo "Starting services with Docker Compose"
238
+ DOCKERHUB_USERNAME="$DOCKERHUB_USERNAME" \
239
+ CONFIG_PATH="$CONFIG_PATH" \
240
+ FIREBASE_CONFIG_PATH="$FIREBASE_CONFIG_PATH" \
241
+ MEDIA_STAGING_PATH="$MEDIA_STAGING_PATH" \
242
+ IMAGE_SERVER_SSH_KEY_PATH="$IMAGE_SERVER_SSH_KEY_PATH" \
243
+ IMAGE_SERVER_KNOWN_HOSTS_PATH="$IMAGE_SERVER_KNOWN_HOSTS_PATH" \
244
+ docker compose -f "$COMPOSE_FILE" up -d \
245
+ --remove-orphans \
246
+ --force-recreate \
247
+ --scale worker="$WORKER_REPLICAS"
248
+
249
+ echo "Cleaning up dangling Docker images"
250
+ docker image prune -f
251
+
252
+ echo "Deployment complete"
@@ -0,0 +1,179 @@
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
+ bash .github/ci/package-smoke.sh /tmp/wheel-smoke/bin/python "$(echo dist/*.whl)"
45
+
46
+ app-docker:
47
+ needs: [package-smoke]
48
+ runs-on: ubuntu-latest
49
+ environment: development
50
+ permissions:
51
+ contents: read
52
+ steps:
53
+ - name: Checkout code
54
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
55
+ with:
56
+ persist-credentials: false
57
+
58
+ - name: Docker Meta
59
+ id: meta
60
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
61
+ with:
62
+ images: ${{ vars.DOCKERHUB_USERNAME }}/core-framework
63
+ flavor: latest=true
64
+
65
+ - name: Login to DockerHub
66
+ uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
67
+ with:
68
+ username: ${{ vars.DOCKERHUB_USERNAME }}
69
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
70
+
71
+ - name: Setup Docker Buildx
72
+ uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
73
+
74
+ - name: Build and Push
75
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
76
+ with:
77
+ context: .
78
+ file: ./deploy/app/dockerfile
79
+ target: api
80
+ push: true
81
+ tags: ${{ steps.meta.outputs.tags }}
82
+
83
+ worker-docker:
84
+ needs: [package-smoke]
85
+ runs-on: ubuntu-latest
86
+ environment: development
87
+ permissions:
88
+ contents: read
89
+ steps:
90
+ - name: Checkout code
91
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
92
+ with:
93
+ persist-credentials: false
94
+
95
+ - name: Docker Meta
96
+ id: meta
97
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
98
+ with:
99
+ images: ${{ vars.DOCKERHUB_USERNAME }}/core-framework-worker
100
+ flavor: latest=true
101
+
102
+ - name: Login to DockerHub
103
+ uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
104
+ with:
105
+ username: ${{ vars.DOCKERHUB_USERNAME }}
106
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
107
+
108
+ - name: Setup Docker Buildx
109
+ uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
110
+
111
+ - name: Build and Push
112
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
113
+ with:
114
+ context: .
115
+ file: ./deploy/app/dockerfile
116
+ target: worker
117
+ push: true
118
+ tags: ${{ steps.meta.outputs.tags }}
119
+
120
+ deploy:
121
+ needs: [app-docker, worker-docker]
122
+ permissions:
123
+ contents: read
124
+ uses: $/.github/workflows/_deploy.yml
125
+ with:
126
+ env_name: development
127
+ dockerhub_username: ${{ vars.DOCKERHUB_USERNAME }}
128
+ secrets:
129
+ SECRET_KEY: ${{ secrets.SECRET_KEY }}
130
+ WRITE_POSTGRES_PASSWORD: ${{ secrets.WRITE_POSTGRES_PASSWORD }}
131
+ READ_POSTGRES_PASSWORD: ${{ secrets.READ_POSTGRES_PASSWORD }}
132
+ EMAIL_API_KEY: ${{ secrets.EMAIL_API_KEY }}
133
+ AGENT_OPENAI_API_KEY: ${{ secrets.AGENT_OPENAI_API_KEY }}
134
+ FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
135
+ IMAGE_SERVER_SSH_PRIVATE_KEY: ${{ secrets.IMAGE_SERVER_SSH_PRIVATE_KEY }}
136
+ IMAGE_SERVER_KNOWN_HOSTS: ${{ secrets.IMAGE_SERVER_KNOWN_HOSTS }}
137
+ DEPLOY_SERVER_SSH_KEY: ${{ secrets.DEPLOY_SERVER_SSH_KEY }}
138
+ DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
139
+
140
+ post-deploy-e2e:
141
+ needs: [deploy]
142
+ runs-on: ubuntu-latest
143
+ environment: development
144
+ continue-on-error: true
145
+ permissions:
146
+ contents: read
147
+ steps:
148
+ - name: Checkout code
149
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
150
+ with:
151
+ persist-credentials: false
152
+
153
+ - name: Install uv
154
+ uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
155
+ with:
156
+ version: "0.7.9"
157
+ enable-cache: true
158
+ cache-dependency-glob: "uv.lock"
159
+
160
+ - name: Set up Python
161
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
162
+ with:
163
+ python-version-file: ".python-version"
164
+
165
+ - name: Install the project
166
+ run: uv sync --locked --all-extras --dev
167
+
168
+ - name: Post-deploy E2E
169
+ run: uv run pytest tests/e2e
170
+ env:
171
+ E2E_API_BASE_URL: ${{ vars.E2E_API_BASE_URL || (vars.PUBLIC_ZONE && format('https://api.{0}', vars.PUBLIC_ZONE) || '') }}
172
+ E2E_FIREBASE_API_KEY: ${{ secrets.E2E_FIREBASE_API_KEY }}
173
+ E2E_USER_EMAIL: ${{ vars.E2E_USER_EMAIL }}
174
+ E2E_USER_PASSWORD: ${{ secrets.E2E_USER_PASSWORD }}
175
+ E2E_ADMIN_EMAIL: ${{ vars.E2E_ADMIN_EMAIL }}
176
+ E2E_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD }}
177
+ E2E_MEDIA_BASE_URL: ${{ vars.E2E_MEDIA_BASE_URL || (vars.PUBLIC_ZONE && format('https://media.{0}', vars.PUBLIC_ZONE) || '') }}
178
+ E2E_ALLOWED_ORIGIN: ${{ vars.E2E_ALLOWED_ORIGIN || (vars.PUBLIC_ZONE && format('https://{0}', vars.PUBLIC_ZONE) || '') }}
179
+ E2E_WORKER_POLL_TIMEOUT_SEC: ${{ vars.E2E_WORKER_POLL_TIMEOUT_SEC }}
@@ -0,0 +1,54 @@
1
+ name: Manual Deployment
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ environment:
7
+ description: "Target environment (development or production)"
8
+ required: true
9
+ type: choice
10
+ options:
11
+ - development
12
+ - production
13
+ confirm:
14
+ description: "Type the environment name to confirm (development or production)"
15
+ required: true
16
+
17
+ permissions: {}
18
+
19
+ jobs:
20
+ validate:
21
+ runs-on: ubuntu-latest
22
+ permissions: {}
23
+ steps:
24
+ - name: Validate confirmation
25
+ env:
26
+ CONFIRM: ${{ inputs.confirm }}
27
+ ENVIRONMENT: ${{ inputs.environment }}
28
+ run: |
29
+ if [ "$CONFIRM" != "$ENVIRONMENT" ]; then
30
+ echo "Deployment cancelled: confirmation mismatch."
31
+ echo "Expected: '$ENVIRONMENT', got: '$CONFIRM'"
32
+ exit 1
33
+ fi
34
+
35
+ deploy:
36
+ needs: validate
37
+ permissions:
38
+ contents: read
39
+ uses: $/.github/workflows/_deploy.yml
40
+ with:
41
+ env_name: ${{ inputs.environment }}
42
+ dockerhub_username: ${{ vars.DOCKERHUB_USERNAME }}
43
+ worker_replicas: "${{ inputs.environment == 'production' && 2 || 1 }}"
44
+ secrets:
45
+ SECRET_KEY: ${{ secrets.SECRET_KEY }}
46
+ WRITE_POSTGRES_PASSWORD: ${{ secrets.WRITE_POSTGRES_PASSWORD }}
47
+ READ_POSTGRES_PASSWORD: ${{ secrets.READ_POSTGRES_PASSWORD }}
48
+ EMAIL_API_KEY: ${{ secrets.EMAIL_API_KEY }}
49
+ AGENT_OPENAI_API_KEY: ${{ secrets.AGENT_OPENAI_API_KEY }}
50
+ FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
51
+ IMAGE_SERVER_SSH_PRIVATE_KEY: ${{ secrets.IMAGE_SERVER_SSH_PRIVATE_KEY }}
52
+ IMAGE_SERVER_KNOWN_HOSTS: ${{ secrets.IMAGE_SERVER_KNOWN_HOSTS }}
53
+ DEPLOY_SERVER_SSH_KEY: ${{ secrets.DEPLOY_SERVER_SSH_KEY }}
54
+ DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}