core-framework 3.3.0__tar.gz → 4.0.1__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 (1303) hide show
  1. core_framework-4.0.1/.cursor/rules/constitution.mdc +50 -0
  2. core_framework-4.0.1/.cursor/rules/error-boundary.mdc +56 -0
  3. core_framework-4.0.1/.cursor/rules/flow-documentation.mdc +15 -0
  4. core_framework-4.0.1/.cursor/rules/ignore-analytics-warehouse.mdc +21 -0
  5. core_framework-4.0.1/.cursor/rules/integration-test-strategy.mdc +30 -0
  6. core_framework-4.0.1/.cursor/rules/no-code-in-docs.mdc +36 -0
  7. core_framework-4.0.1/.cursor/rules/postgres-config-conventions.mdc +57 -0
  8. core_framework-4.0.1/.cursor/rules/repository-schema-isolation.mdc +89 -0
  9. core_framework-4.0.1/.cursor/rules/strong-reads.mdc +39 -0
  10. core_framework-4.0.1/.cursor/skills/code-review/SKILL.md +85 -0
  11. core_framework-4.0.1/.cursor/skills/design-review/SKILL.md +59 -0
  12. core_framework-4.0.1/.cursor/skills/grill/SKILL.md +75 -0
  13. core_framework-4.0.1/.cursor/skills/implement-feature/SKILL.md +109 -0
  14. core_framework-4.0.1/.cursor/skills/write-flow-doc/SKILL.md +84 -0
  15. core_framework-4.0.1/.github/ci/package-smoke.sh +13 -0
  16. core_framework-4.0.1/.github/ci/package_smoke.py +306 -0
  17. core_framework-4.0.1/.github/workflows/_deploy.yml +245 -0
  18. core_framework-4.0.1/.github/workflows/dev-ci-cd.yaml +178 -0
  19. core_framework-4.0.1/.github/workflows/manual-deployment.yaml +53 -0
  20. core_framework-4.0.1/.github/workflows/manual-observability-deployment.yaml +268 -0
  21. core_framework-4.0.1/.github/workflows/test.yaml +129 -0
  22. core_framework-4.0.1/CHANGELOG.md +787 -0
  23. core_framework-4.0.1/PKG-INFO +144 -0
  24. core_framework-4.0.1/README.md +97 -0
  25. core_framework-4.0.1/alembic/comment/alembic/versions/comment_subject_kind_varchar.py +42 -0
  26. core_framework-4.0.1/alembic/moderation/alembic/versions/5be85718122a_moderation_add_review_reports.py +55 -0
  27. core_framework-4.0.1/alembic/notification/alembic/versions/a5f29155815d_notification_add_friendship_types.py +28 -0
  28. core_framework-4.0.1/alembic/notification/alembic/versions/b1263ed1a303_notification_inbox_redesign_preview.py +47 -0
  29. core_framework-4.0.1/alembic/notification/alembic/versions/c6b9941065ec_notification_add_group_invite_type.py +28 -0
  30. core_framework-4.0.1/alembic/notification/alembic/versions/fbe8476b4437_notification_add_rating_owner_cue_labels.py +29 -0
  31. core_framework-4.0.1/alembic/rating/alembic/env.py +74 -0
  32. core_framework-4.0.1/alembic/rating/alembic/versions/04182d734619_rating_list_indexes.py +38 -0
  33. core_framework-4.0.1/alembic/rating/alembic/versions/2ef924b0be4c_rating_schema.py +150 -0
  34. core_framework-4.0.1/alembic/rating/alembic.ini +52 -0
  35. core_framework-4.0.1/alembic/user/alembic/README +1 -0
  36. core_framework-4.0.1/alembic/user/alembic/script.py.mako +28 -0
  37. core_framework-4.0.1/alembic/user/alembic/versions/24ba262c4ef2_user_add_account_removal_started_at.py +30 -0
  38. core_framework-4.0.1/alembic/user/alembic/versions/2dc1d398a840_user_add_groups.py +120 -0
  39. core_framework-4.0.1/alembic/user/alembic/versions/7078e4313554_user_add_friendships.py +78 -0
  40. core_framework-4.0.1/config.toml +149 -0
  41. core_framework-4.0.1/config.toml.template +137 -0
  42. core_framework-4.0.1/core_framework/api/admin/analytics/router.py +46 -0
  43. core_framework-4.0.1/core_framework/api/admin/analytics/schemas.py +59 -0
  44. core_framework-4.0.1/core_framework/api/admin/cache/router.py +27 -0
  45. core_framework-4.0.1/core_framework/api/admin/comments/router.py +69 -0
  46. core_framework-4.0.1/core_framework/api/admin/comments/schemas.py +45 -0
  47. core_framework-4.0.1/core_framework/api/admin/moderation/router.py +222 -0
  48. core_framework-4.0.1/core_framework/api/admin/moderation/schemas.py +120 -0
  49. core_framework-4.0.1/core_framework/api/admin/outbox/router.py +63 -0
  50. core_framework-4.0.1/core_framework/api/admin/outbox/schemas.py +60 -0
  51. core_framework-4.0.1/core_framework/api/admin/posts/router.py +62 -0
  52. core_framework-4.0.1/core_framework/api/admin/ratings/router.py +46 -0
  53. core_framework-4.0.1/core_framework/api/admin/ratings/schemas.py +25 -0
  54. core_framework-4.0.1/core_framework/api/admin/router.py +25 -0
  55. core_framework-4.0.1/core_framework/api/admin/users/router.py +206 -0
  56. core_framework-4.0.1/core_framework/api/admin/users/schemas.py +137 -0
  57. core_framework-4.0.1/core_framework/api/attachments/router.py +45 -0
  58. core_framework-4.0.1/core_framework/api/auth/router.py +26 -0
  59. core_framework-4.0.1/core_framework/api/auth/schemas.py +15 -0
  60. core_framework-4.0.1/core_framework/api/comments/authenticated/router.py +145 -0
  61. core_framework-4.0.1/core_framework/api/comments/authenticated/schemas.py +78 -0
  62. core_framework-4.0.1/core_framework/api/comments/public/router.py +121 -0
  63. core_framework-4.0.1/core_framework/api/comments/public/schemas.py +44 -0
  64. core_framework-4.0.1/core_framework/api/comments/schemas.py +43 -0
  65. core_framework-4.0.1/core_framework/api/dependencies.py +209 -0
  66. core_framework-4.0.1/core_framework/api/events/router.py +56 -0
  67. core_framework-4.0.1/core_framework/api/groups/router.py +207 -0
  68. core_framework-4.0.1/core_framework/api/groups/schemas.py +69 -0
  69. core_framework-4.0.1/core_framework/api/notifications/authenticated/router.py +78 -0
  70. core_framework-4.0.1/core_framework/api/notifications/authenticated/schemas.py +141 -0
  71. core_framework-4.0.1/core_framework/api/pagination.py +239 -0
  72. core_framework-4.0.1/core_framework/api/posts/authenticated/router.py +116 -0
  73. core_framework-4.0.1/core_framework/api/posts/authenticated/schemas.py +77 -0
  74. core_framework-4.0.1/core_framework/api/posts/public/router.py +110 -0
  75. core_framework-4.0.1/core_framework/api/posts/schemas.py +37 -0
  76. core_framework-4.0.1/core_framework/api/ratings/authenticated/router.py +99 -0
  77. core_framework-4.0.1/core_framework/api/ratings/pagination.py +37 -0
  78. core_framework-4.0.1/core_framework/api/ratings/public/router.py +79 -0
  79. core_framework-4.0.1/core_framework/api/ratings/router.py +9 -0
  80. core_framework-4.0.1/core_framework/api/ratings/schemas.py +125 -0
  81. core_framework-4.0.1/core_framework/api/router.py +27 -0
  82. core_framework-4.0.1/core_framework/api/system/router.py +99 -0
  83. core_framework-4.0.1/core_framework/api/users/authenticated/router.py +748 -0
  84. core_framework-4.0.1/core_framework/api/users/authenticated/schemas.py +110 -0
  85. core_framework-4.0.1/core_framework/api/users/public/router.py +66 -0
  86. core_framework-4.0.1/core_framework/api/users/public/schemas.py +35 -0
  87. core_framework-4.0.1/core_framework/api/users/shared/schemas.py +205 -0
  88. core_framework-4.0.1/core_framework/application/analytics/read_service.py +74 -0
  89. core_framework-4.0.1/core_framework/application/auth/access_service.py +38 -0
  90. core_framework-4.0.1/core_framework/application/auth/auth_service.py +53 -0
  91. core_framework-4.0.1/core_framework/application/auth/models.py +13 -0
  92. core_framework-4.0.1/core_framework/application/auth/token_verification.py +32 -0
  93. core_framework-4.0.1/core_framework/application/bootstrap.py +73 -0
  94. core_framework-4.0.1/core_framework/application/comments/__init__.py +13 -0
  95. core_framework-4.0.1/core_framework/application/comments/admin_service.py +584 -0
  96. core_framework-4.0.1/core_framework/application/comments/aggregation_service.py +45 -0
  97. core_framework-4.0.1/core_framework/application/comments/authenticated_service.py +271 -0
  98. core_framework-4.0.1/core_framework/application/comments/cleanup_service.py +184 -0
  99. core_framework-4.0.1/core_framework/application/comments/host_service.py +40 -0
  100. core_framework-4.0.1/core_framework/application/comments/kind_registry.py +35 -0
  101. core_framework-4.0.1/core_framework/application/comments/post_subject.py +89 -0
  102. core_framework-4.0.1/core_framework/application/comments/public_service.py +382 -0
  103. core_framework-4.0.1/core_framework/application/comments/rating_subject.py +67 -0
  104. core_framework-4.0.1/core_framework/application/email/account_deletion_scheduled.py +77 -0
  105. core_framework-4.0.1/core_framework/application/email/send.py +56 -0
  106. core_framework-4.0.1/core_framework/application/events/README.md +33 -0
  107. core_framework-4.0.1/core_framework/application/events/event_service.py +207 -0
  108. core_framework-4.0.1/core_framework/application/groups/authenticated_service.py +291 -0
  109. core_framework-4.0.1/core_framework/application/groups/cleanup_service.py +52 -0
  110. core_framework-4.0.1/core_framework/application/groups/group_invite_link_token.py +68 -0
  111. core_framework-4.0.1/core_framework/application/groups/strip_service.py +71 -0
  112. core_framework-4.0.1/core_framework/application/media/README.md +28 -0
  113. core_framework-4.0.1/core_framework/application/media/attachment_service.py +524 -0
  114. core_framework-4.0.1/core_framework/application/media/avatar_service.py +189 -0
  115. core_framework-4.0.1/core_framework/application/media/banner_service.py +185 -0
  116. core_framework-4.0.1/core_framework/application/moderation/appeal_service.py +98 -0
  117. core_framework-4.0.1/core_framework/application/moderation/moderator_service.py +41 -0
  118. core_framework-4.0.1/core_framework/application/moderation/report_service.py +210 -0
  119. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/__init__.py +17 -0
  120. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/heals.py +48 -0
  121. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/mirrors.py +50 -0
  122. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/reactions.py +12 -0
  123. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/registry.py +182 -0
  124. core_framework-4.0.1/core_framework/application/moderation/restriction_fanout/runner.py +154 -0
  125. core_framework-4.0.1/core_framework/application/moderation/user_service.py +168 -0
  126. core_framework-4.0.1/core_framework/application/notifications/README.md +25 -0
  127. core_framework-4.0.1/core_framework/application/notifications/enums.py +15 -0
  128. core_framework-4.0.1/core_framework/application/notifications/friendship_notification_service.py +68 -0
  129. core_framework-4.0.1/core_framework/application/notifications/group_invite_notification_service.py +54 -0
  130. core_framework-4.0.1/core_framework/application/notifications/inbox_service.py +148 -0
  131. core_framework-4.0.1/core_framework/application/notifications/mute_service.py +40 -0
  132. core_framework-4.0.1/core_framework/application/notifications/notification_service.py +252 -0
  133. core_framework-4.0.1/core_framework/application/notifications/preview.py +12 -0
  134. core_framework-4.0.1/core_framework/application/notifications/wipe_service.py +78 -0
  135. core_framework-4.0.1/core_framework/application/outbox/block_mirrors.py +67 -0
  136. core_framework-4.0.1/core_framework/application/outbox/events.py +133 -0
  137. core_framework-4.0.1/core_framework/application/outbox/handlers.py +141 -0
  138. core_framework-4.0.1/core_framework/application/outbox/processing_service.py +105 -0
  139. core_framework-4.0.1/core_framework/application/outbox/restriction_mirrors.py +61 -0
  140. core_framework-4.0.1/core_framework/application/posts/admin_service.py +381 -0
  141. core_framework-4.0.1/core_framework/application/posts/aggregation_service.py +59 -0
  142. core_framework-4.0.1/core_framework/application/posts/authenticated_service.py +153 -0
  143. core_framework-4.0.1/core_framework/application/posts/cleanup_service.py +196 -0
  144. core_framework-4.0.1/core_framework/application/posts/public_service.py +286 -0
  145. core_framework-4.0.1/core_framework/application/ratings/__init__.py +9 -0
  146. core_framework-4.0.1/core_framework/application/ratings/admin_service.py +56 -0
  147. core_framework-4.0.1/core_framework/application/ratings/aggregation_service.py +52 -0
  148. core_framework-4.0.1/core_framework/application/ratings/authenticated_service.py +107 -0
  149. core_framework-4.0.1/core_framework/application/ratings/kind_registry.py +39 -0
  150. core_framework-4.0.1/core_framework/application/ratings/public_service.py +140 -0
  151. core_framework-4.0.1/core_framework/application/ratings/purge_service.py +49 -0
  152. core_framework-4.0.1/core_framework/application/ratings/serialization.py +134 -0
  153. core_framework-4.0.1/core_framework/application/ratings/subject_existence.py +33 -0
  154. core_framework-4.0.1/core_framework/application/shared/enums.py +51 -0
  155. core_framework-4.0.1/core_framework/application/shared/exceptions.py +100 -0
  156. core_framework-4.0.1/core_framework/application/shared/worker_jobs.py +63 -0
  157. core_framework-4.0.1/core_framework/application/users/account_removal/__init__.py +11 -0
  158. core_framework-4.0.1/core_framework/application/users/account_removal/contributors.py +116 -0
  159. core_framework-4.0.1/core_framework/application/users/account_removal/registry.py +99 -0
  160. core_framework-4.0.1/core_framework/application/users/account_removal/runner.py +122 -0
  161. core_framework-4.0.1/core_framework/application/users/admin_service.py +257 -0
  162. core_framework-4.0.1/core_framework/application/users/aggregation_service.py +22 -0
  163. core_framework-4.0.1/core_framework/application/users/authenticated_service.py +617 -0
  164. core_framework-4.0.1/core_framework/application/users/identity_enrichment.py +28 -0
  165. core_framework-4.0.1/core_framework/application/users/public_service.py +195 -0
  166. core_framework-4.0.1/core_framework/application/users/scheduled_service.py +6 -0
  167. core_framework-4.0.1/core_framework/application/users/user_deletion_service.py +693 -0
  168. core_framework-4.0.1/core_framework/bundled_alembic.py +45 -0
  169. core_framework-4.0.1/core_framework/constants.py +29 -0
  170. core_framework-4.0.1/core_framework/core/cache.py +229 -0
  171. core_framework-4.0.1/core_framework/core/exception_handlers/application.py +152 -0
  172. core_framework-4.0.1/core_framework/core/exception_handlers/common.py +78 -0
  173. core_framework-4.0.1/core_framework/core/exception_handlers/setup.py +46 -0
  174. core_framework-4.0.1/core_framework/core/middleware.py +160 -0
  175. core_framework-4.0.1/core_framework/core/observability.py +649 -0
  176. core_framework-4.0.1/core_framework/core/pagination.py +123 -0
  177. core_framework-4.0.1/core_framework/core/rate_limit.py +340 -0
  178. core_framework-4.0.1/core_framework/core/settings.py +928 -0
  179. core_framework-4.0.1/core_framework/domains/analytics/README.md +25 -0
  180. core_framework-4.0.1/core_framework/domains/analytics/__init__.py +24 -0
  181. core_framework-4.0.1/core_framework/domains/analytics/constants.py +22 -0
  182. core_framework-4.0.1/core_framework/domains/analytics/repository.py +261 -0
  183. core_framework-4.0.1/core_framework/domains/analytics/service.py +306 -0
  184. core_framework-4.0.1/core_framework/domains/auth/README.md +78 -0
  185. core_framework-4.0.1/core_framework/domains/auth/__init__.py +18 -0
  186. core_framework-4.0.1/core_framework/domains/auth/dependencies.py +28 -0
  187. core_framework-4.0.1/core_framework/domains/auth/exceptions.py +14 -0
  188. core_framework-4.0.1/core_framework/domains/auth/models.py +31 -0
  189. core_framework-4.0.1/core_framework/domains/auth/outcomes.py +24 -0
  190. core_framework-4.0.1/core_framework/domains/auth/ports/auth.py +73 -0
  191. core_framework-4.0.1/core_framework/domains/auth/service.py +188 -0
  192. core_framework-4.0.1/core_framework/domains/comment/README.md +271 -0
  193. core_framework-4.0.1/core_framework/domains/comment/__init__.py +78 -0
  194. core_framework-4.0.1/core_framework/domains/comment/constants.py +14 -0
  195. core_framework-4.0.1/core_framework/domains/comment/enums.py +28 -0
  196. core_framework-4.0.1/core_framework/domains/comment/exceptions.py +30 -0
  197. core_framework-4.0.1/core_framework/domains/comment/models.py +223 -0
  198. core_framework-4.0.1/core_framework/domains/comment/outcomes.py +25 -0
  199. core_framework-4.0.1/core_framework/domains/comment/ports/subject.py +88 -0
  200. core_framework-4.0.1/core_framework/domains/comment/repository.py +2523 -0
  201. core_framework-4.0.1/core_framework/domains/comment/service.py +1089 -0
  202. core_framework-4.0.1/core_framework/domains/email/models.py +3 -0
  203. core_framework-4.0.1/core_framework/domains/media/README.md +34 -0
  204. core_framework-4.0.1/core_framework/domains/media/attachment/service.py +459 -0
  205. core_framework-4.0.1/core_framework/domains/media/avatar/service.py +343 -0
  206. core_framework-4.0.1/core_framework/domains/media/banner/service.py +338 -0
  207. core_framework-4.0.1/core_framework/domains/media/shared/outcomes.py +17 -0
  208. core_framework-4.0.1/core_framework/domains/moderation/README.md +164 -0
  209. core_framework-4.0.1/core_framework/domains/moderation/__init__.py +43 -0
  210. core_framework-4.0.1/core_framework/domains/moderation/enums.py +68 -0
  211. core_framework-4.0.1/core_framework/domains/moderation/models.py +100 -0
  212. core_framework-4.0.1/core_framework/domains/moderation/outbox_repository.py +190 -0
  213. core_framework-4.0.1/core_framework/domains/moderation/outbox_service.py +53 -0
  214. core_framework-4.0.1/core_framework/domains/moderation/repository.py +1694 -0
  215. core_framework-4.0.1/core_framework/domains/moderation/service.py +1057 -0
  216. core_framework-4.0.1/core_framework/domains/notification/README.md +144 -0
  217. core_framework-4.0.1/core_framework/domains/notification/__init__.py +15 -0
  218. core_framework-4.0.1/core_framework/domains/notification/enums.py +26 -0
  219. core_framework-4.0.1/core_framework/domains/notification/models.py +18 -0
  220. core_framework-4.0.1/core_framework/domains/notification/repository.py +941 -0
  221. core_framework-4.0.1/core_framework/domains/notification/service.py +489 -0
  222. core_framework-4.0.1/core_framework/domains/outbox/__init__.py +23 -0
  223. core_framework-4.0.1/core_framework/domains/outbox/models.py +82 -0
  224. core_framework-4.0.1/core_framework/domains/post/README.md +216 -0
  225. core_framework-4.0.1/core_framework/domains/post/__init__.py +44 -0
  226. core_framework-4.0.1/core_framework/domains/post/constants.py +8 -0
  227. core_framework-4.0.1/core_framework/domains/post/enums.py +35 -0
  228. core_framework-4.0.1/core_framework/domains/post/models.py +217 -0
  229. core_framework-4.0.1/core_framework/domains/post/repository.py +2166 -0
  230. core_framework-4.0.1/core_framework/domains/post/service.py +990 -0
  231. core_framework-4.0.1/core_framework/domains/rating/README.md +79 -0
  232. core_framework-4.0.1/core_framework/domains/rating/__init__.py +31 -0
  233. core_framework-4.0.1/core_framework/domains/rating/constants.py +10 -0
  234. core_framework-4.0.1/core_framework/domains/rating/dependencies.py +61 -0
  235. core_framework-4.0.1/core_framework/domains/rating/exceptions.py +5 -0
  236. core_framework-4.0.1/core_framework/domains/rating/models.py +52 -0
  237. core_framework-4.0.1/core_framework/domains/rating/outcomes.py +13 -0
  238. core_framework-4.0.1/core_framework/domains/rating/ports/subject_existence.py +18 -0
  239. core_framework-4.0.1/core_framework/domains/rating/repository.py +1376 -0
  240. core_framework-4.0.1/core_framework/domains/rating/service.py +901 -0
  241. core_framework-4.0.1/core_framework/domains/repository_sql.py +90 -0
  242. core_framework-4.0.1/core_framework/domains/user/README.md +140 -0
  243. core_framework-4.0.1/core_framework/domains/user/__init__.py +95 -0
  244. core_framework-4.0.1/core_framework/domains/user/constants.py +38 -0
  245. core_framework-4.0.1/core_framework/domains/user/dependencies.py +132 -0
  246. core_framework-4.0.1/core_framework/domains/user/enums.py +24 -0
  247. core_framework-4.0.1/core_framework/domains/user/group_repository.py +1714 -0
  248. core_framework-4.0.1/core_framework/domains/user/group_service.py +572 -0
  249. core_framework-4.0.1/core_framework/domains/user/models.py +412 -0
  250. core_framework-4.0.1/core_framework/domains/user/outbox_repository.py +189 -0
  251. core_framework-4.0.1/core_framework/domains/user/outbox_service.py +53 -0
  252. core_framework-4.0.1/core_framework/domains/user/outcomes.py +72 -0
  253. core_framework-4.0.1/core_framework/domains/user/repository.py +2345 -0
  254. core_framework-4.0.1/core_framework/domains/user/service.py +1255 -0
  255. core_framework-4.0.1/core_framework/domains/utils.py +244 -0
  256. core_framework-4.0.1/core_framework/infrastructure/firebase/firebase_auth_adapter.py +156 -0
  257. core_framework-4.0.1/core_framework/main.py +69 -0
  258. core_framework-4.0.1/core_framework/testing/__init__.py +19 -0
  259. core_framework-4.0.1/core_framework/testing/arq.py +141 -0
  260. core_framework-4.0.1/core_framework/testing/auth.py +352 -0
  261. core_framework-4.0.1/core_framework/testing/blockbuster.py +38 -0
  262. core_framework-4.0.1/core_framework/testing/config.py +52 -0
  263. core_framework-4.0.1/core_framework/testing/containers.py +114 -0
  264. core_framework-4.0.1/core_framework/testing/firebase.py +175 -0
  265. core_framework-4.0.1/core_framework/testing/hookspecs.py +16 -0
  266. core_framework-4.0.1/core_framework/testing/media.py +271 -0
  267. core_framework-4.0.1/core_framework/testing/migrations.py +38 -0
  268. core_framework-4.0.1/core_framework/testing/plugin.py +256 -0
  269. core_framework-4.0.1/core_framework/worker/main.py +172 -0
  270. core_framework-4.0.1/core_framework/worker/schedules/__init__.py +172 -0
  271. core_framework-4.0.1/core_framework/worker/schedules/schedule_aggregate_rating_stats.py +43 -0
  272. core_framework-4.0.1/core_framework/worker/schedules/schedule_aggregate_rating_subject_stats.py +65 -0
  273. core_framework-4.0.1/core_framework/worker/schedules/schedule_expired_account_deletions.py +37 -0
  274. core_framework-4.0.1/core_framework/worker/schedules/schedule_purge_expired_create_idempotency_keys.py +25 -0
  275. core_framework-4.0.1/core_framework/worker/schedules/schedule_purge_expired_group_invites.py +18 -0
  276. core_framework-4.0.1/core_framework/worker/schedules/schedule_refresh_analytics.py +15 -0
  277. core_framework-4.0.1/core_framework/worker/schedules/schedule_restriction_heals.py +15 -0
  278. core_framework-4.0.1/core_framework/worker/tasks/__init__.py +166 -0
  279. core_framework-4.0.1/core_framework/worker/tasks/process_account_deletion_scheduled_email.py +21 -0
  280. core_framework-4.0.1/core_framework/worker/tasks/process_aggregate_rating_stats.py +19 -0
  281. core_framework-4.0.1/core_framework/worker/tasks/process_aggregate_rating_subject_stats.py +30 -0
  282. core_framework-4.0.1/core_framework/worker/tasks/process_block_notification_wipe.py +35 -0
  283. core_framework-4.0.1/core_framework/worker/tasks/process_comment_tombstone_cleanup.py +36 -0
  284. core_framework-4.0.1/core_framework/worker/tasks/process_destructive_comment_delete.py +38 -0
  285. core_framework-4.0.1/core_framework/worker/tasks/process_friendship_pair_notification_wipe.py +35 -0
  286. core_framework-4.0.1/core_framework/worker/tasks/process_group_invite_notification_wipe.py +26 -0
  287. core_framework-4.0.1/core_framework/worker/tasks/process_post_private_notification_wipe.py +26 -0
  288. core_framework-4.0.1/core_framework/worker/tasks/process_post_tombstone_cleanup.py +30 -0
  289. core_framework-4.0.1/core_framework/worker/tasks/process_restriction_reactions.py +44 -0
  290. core_framework-4.0.1/core_framework/worker/tasks/process_transactional_email.py +21 -0
  291. core_framework-4.0.1/deploy/observability/README.md +11 -0
  292. core_framework-4.0.1/deploy/observability/docker-compose.yml +153 -0
  293. core_framework-4.0.1/deploy/observability/prometheus.yml +40 -0
  294. core_framework-4.0.1/deploy/observability/targets.default/node.yml +6 -0
  295. core_framework-4.0.1/deploy/observability/targets.default/postgres.yml +6 -0
  296. core_framework-4.0.1/deploy/observability/targets.default/redis.yml +6 -0
  297. core_framework-4.0.1/deploy/observability/targets.example/README.md +25 -0
  298. core_framework-4.0.1/docs/README.md +49 -0
  299. core_framework-4.0.1/docs/deployments/README.md +58 -0
  300. core_framework-4.0.1/docs/deployments/deploy-playbook.md +199 -0
  301. core_framework-4.0.1/docs/deployments/e2e-smoke-tests-design.md +352 -0
  302. core_framework-4.0.1/docs/deployments/edge-rate-limits.md +114 -0
  303. core_framework-4.0.1/docs/deployments/edge-upload-limits.md +70 -0
  304. core_framework-4.0.1/docs/deployments/examples/Caddyfile.example +70 -0
  305. core_framework-4.0.1/docs/deployments/guides/playbook/postgres-backup-playbook.md +302 -0
  306. core_framework-4.0.1/docs/deployments/guides/setup/app-server-deploy-ssh.md +72 -0
  307. core_framework-4.0.1/docs/deployments/guides/setup/caddy-setup.md +67 -0
  308. core_framework-4.0.1/docs/deployments/guides/setup/image-server-ssh.md +101 -0
  309. core_framework-4.0.1/docs/deployments/guides/setup/observability-lgtm-setup.md +204 -0
  310. core_framework-4.0.1/docs/deployments/guides/setup/postgres-backup-setup.md +322 -0
  311. core_framework-4.0.1/docs/deployments/guides/setup/postgres-setup.md +163 -0
  312. core_framework-4.0.1/docs/deployments/guides/setup/redis-setup.md +119 -0
  313. core_framework-4.0.1/docs/deployments/guides/setup/ubuntu-server-setup.md +179 -0
  314. core_framework-4.0.1/docs/deployments/host-config-defaults-design.md +836 -0
  315. core_framework-4.0.1/docs/deployments/host-config-defaults-implementation.md +251 -0
  316. core_framework-4.0.1/docs/deployments/postgres-backup-design.md +175 -0
  317. core_framework-4.0.1/docs/deployments/release-playbook.md +92 -0
  318. core_framework-4.0.1/docs/design/README.md +56 -0
  319. core_framework-4.0.1/docs/design/account-removal-spine-design.md +436 -0
  320. core_framework-4.0.1/docs/design/account-removal-spine-implementation.md +268 -0
  321. core_framework-4.0.1/docs/design/analytics-rollup-design.md +1007 -0
  322. core_framework-4.0.1/docs/design/analytics-warehouse-design.md +686 -0
  323. core_framework-4.0.1/docs/design/cache-invalidation-design.md +151 -0
  324. core_framework-4.0.1/docs/design/comment-subject-kinds-design.md +589 -0
  325. core_framework-4.0.1/docs/design/create-idempotency-design.md +366 -0
  326. core_framework-4.0.1/docs/design/event-outbox-design.md +664 -0
  327. core_framework-4.0.1/docs/design/events-ingest-design.md +229 -0
  328. core_framework-4.0.1/docs/design/moderation-restriction-fanout-design.md +464 -0
  329. core_framework-4.0.1/docs/design/moderation-restriction-fanout-implementation.md +266 -0
  330. core_framework-4.0.1/docs/design/moderator-surfaces-design.md +303 -0
  331. core_framework-4.0.1/docs/design/moderator-surfaces-implementation.md +242 -0
  332. core_framework-4.0.1/docs/design/observability-lgtm-design.md +594 -0
  333. core_framework-4.0.1/docs/design/outbox-admin-ops-design.md +340 -0
  334. core_framework-4.0.1/docs/design/rating-implementation-plan.md +677 -0
  335. core_framework-4.0.1/docs/design/rating-thread-owner-cue-design.md +382 -0
  336. core_framework-4.0.1/docs/design/rating-thread-owner-cue-implementation.md +235 -0
  337. core_framework-4.0.1/docs/design/restriction-and-block-visibility-design.md +383 -0
  338. core_framework-4.0.1/docs/design/restriction-and-block-visibility-implementation.md +212 -0
  339. core_framework-4.0.1/docs/design/transactional-email-design.md +620 -0
  340. core_framework-4.0.1/docs/design/utm-events-design.md +275 -0
  341. core_framework-4.0.1/docs/domains/README.md +24 -0
  342. core_framework-4.0.1/docs/domains/analytics/admin_analytics_reads.md +130 -0
  343. core_framework-4.0.1/docs/domains/auth/access_control.md +131 -0
  344. core_framework-4.0.1/docs/domains/auth/registration.md +66 -0
  345. core_framework-4.0.1/docs/domains/cache/admin_cache_invalidation.md +180 -0
  346. core_framework-4.0.1/docs/domains/comments/README.md +38 -0
  347. core_framework-4.0.1/docs/domains/comments/admin_comments.md +219 -0
  348. core_framework-4.0.1/docs/domains/comments/comment_like.md +99 -0
  349. core_framework-4.0.1/docs/domains/comments/comment_report.md +119 -0
  350. core_framework-4.0.1/docs/domains/comments/comment_stats_aggregation.md +68 -0
  351. core_framework-4.0.1/docs/domains/comments/create_comment.md +197 -0
  352. core_framework-4.0.1/docs/domains/comments/delete_comment.md +65 -0
  353. core_framework-4.0.1/docs/domains/comments/edit_comment.md +72 -0
  354. core_framework-4.0.1/docs/domains/comments/retrieve_comments.md +260 -0
  355. core_framework-4.0.1/docs/domains/deletion/comments.md +300 -0
  356. core_framework-4.0.1/docs/domains/deletion/overview.md +209 -0
  357. core_framework-4.0.1/docs/domains/deletion/posts.md +311 -0
  358. core_framework-4.0.1/docs/domains/deletion/ratings.md +42 -0
  359. core_framework-4.0.1/docs/domains/deletion/users.md +534 -0
  360. core_framework-4.0.1/docs/domains/events/events.md +258 -0
  361. core_framework-4.0.1/docs/domains/media/README.md +36 -0
  362. core_framework-4.0.1/docs/domains/media/attachment_upload.md +102 -0
  363. core_framework-4.0.1/docs/domains/media/avatar-upload-design.md +110 -0
  364. core_framework-4.0.1/docs/domains/media/banner-upload-design.md +150 -0
  365. core_framework-4.0.1/docs/domains/media/post-comment-attachments-design.md +521 -0
  366. core_framework-4.0.1/docs/domains/media/upload-pipeline-design.md +468 -0
  367. core_framework-4.0.1/docs/domains/media/upload_pipeline.md +104 -0
  368. core_framework-4.0.1/docs/domains/mentions/mentions_in_content.md +239 -0
  369. core_framework-4.0.1/docs/domains/moderation/README.md +32 -0
  370. core_framework-4.0.1/docs/domains/moderation/appeals.md +272 -0
  371. core_framework-4.0.1/docs/domains/moderation/internal_notes.md +158 -0
  372. core_framework-4.0.1/docs/domains/moderation/moderator_actions.md +76 -0
  373. core_framework-4.0.1/docs/domains/moderation/reports.md +231 -0
  374. core_framework-4.0.1/docs/domains/moderation/restrictions.md +369 -0
  375. core_framework-4.0.1/docs/domains/notifications/inbox-redesign-design.md +1344 -0
  376. core_framework-4.0.1/docs/domains/notifications/notification_inbox.md +434 -0
  377. core_framework-4.0.1/docs/domains/outbox/admin_outbox_ops.md +185 -0
  378. core_framework-4.0.1/docs/domains/posts/admin_posts.md +187 -0
  379. core_framework-4.0.1/docs/domains/posts/author_context.md +92 -0
  380. core_framework-4.0.1/docs/domains/posts/create_post.md +124 -0
  381. core_framework-4.0.1/docs/domains/posts/delete_post.md +62 -0
  382. core_framework-4.0.1/docs/domains/posts/edit_post.md +82 -0
  383. core_framework-4.0.1/docs/domains/posts/hashtag_discovery.md +63 -0
  384. core_framework-4.0.1/docs/domains/posts/post_like.md +99 -0
  385. core_framework-4.0.1/docs/domains/posts/post_report.md +105 -0
  386. core_framework-4.0.1/docs/domains/posts/post_stats_aggregation.md +86 -0
  387. core_framework-4.0.1/docs/domains/posts/post_visibility.md +83 -0
  388. core_framework-4.0.1/docs/domains/posts/retrieve_posts.md +193 -0
  389. core_framework-4.0.1/docs/domains/ratings/README.md +35 -0
  390. core_framework-4.0.1/docs/domains/ratings/admin_ratings.md +125 -0
  391. core_framework-4.0.1/docs/domains/ratings/delete_rating.md +59 -0
  392. core_framework-4.0.1/docs/domains/ratings/edit_rating.md +66 -0
  393. core_framework-4.0.1/docs/domains/ratings/rating-design.md +503 -0
  394. core_framework-4.0.1/docs/domains/ratings/rating_report.md +99 -0
  395. core_framework-4.0.1/docs/domains/ratings/rating_stats_aggregation.md +68 -0
  396. core_framework-4.0.1/docs/domains/ratings/rating_upvote.md +94 -0
  397. core_framework-4.0.1/docs/domains/ratings/retrieve_ratings.md +184 -0
  398. core_framework-4.0.1/docs/domains/ratings/upsert_rating.md +73 -0
  399. core_framework-4.0.1/docs/domains/users/account.md +106 -0
  400. core_framework-4.0.1/docs/domains/users/account_deletion.md +176 -0
  401. core_framework-4.0.1/docs/domains/users/admin_users.md +202 -0
  402. core_framework-4.0.1/docs/domains/users/avatar.md +89 -0
  403. core_framework-4.0.1/docs/domains/users/banner.md +77 -0
  404. core_framework-4.0.1/docs/domains/users/blocks.md +136 -0
  405. core_framework-4.0.1/docs/domains/users/change_history.md +127 -0
  406. core_framework-4.0.1/docs/domains/users/check_username_exists.md +60 -0
  407. core_framework-4.0.1/docs/domains/users/follow-system-design.md +467 -0
  408. core_framework-4.0.1/docs/domains/users/follow.md +270 -0
  409. core_framework-4.0.1/docs/domains/users/friendship-system-design.md +1144 -0
  410. core_framework-4.0.1/docs/domains/users/friendship.md +409 -0
  411. core_framework-4.0.1/docs/domains/users/groups-system-design.md +1018 -0
  412. core_framework-4.0.1/docs/domains/users/groups.md +507 -0
  413. core_framework-4.0.1/docs/domains/users/my_posts_and_comments.md +154 -0
  414. core_framework-4.0.1/docs/domains/users/preferences.md +86 -0
  415. core_framework-4.0.1/docs/domains/users/profile.md +219 -0
  416. core_framework-4.0.1/docs/domains/users/public_profile.md +102 -0
  417. core_framework-4.0.1/docs/domains/users/user_removal.md +93 -0
  418. core_framework-4.0.1/docs/domains/users/user_stats_aggregation.md +82 -0
  419. core_framework-4.0.1/docs/domains/users/username_suggest.md +15 -0
  420. core_framework-4.0.1/docs/library/README.md +15 -0
  421. core_framework-4.0.1/docs/library/api.md +275 -0
  422. core_framework-4.0.1/docs/library/capability-wiring.md +357 -0
  423. core_framework-4.0.1/docs/library/core-framework-migration.md +247 -0
  424. core_framework-4.0.1/docs/library/overview.md +57 -0
  425. core_framework-4.0.1/docs/library/package-api.md +1214 -0
  426. core_framework-4.0.1/docs/library/testing-plugin-design.md +257 -0
  427. core_framework-4.0.1/docs/library/workers.md +153 -0
  428. core_framework-4.0.1/docs/platform/README.md +20 -0
  429. core_framework-4.0.1/docs/platform/architecture-decisions.md +896 -0
  430. core_framework-4.0.1/docs/platform/client-error-visibility.md +281 -0
  431. core_framework-4.0.1/docs/platform/conventions.md +108 -0
  432. core_framework-4.0.1/docs/platform/glossary.md +190 -0
  433. core_framework-4.0.1/docs/platform/layers-and-boundaries.md +47 -0
  434. core_framework-4.0.1/docs/platform/response-composition-and-caching.md +188 -0
  435. core_framework-4.0.1/docs/reviews/README.md +16 -0
  436. core_framework-4.0.1/docs/reviews/log.md +91 -0
  437. core_framework-4.0.1/docs/reviews/review-playbook.md +262 -0
  438. core_framework-4.0.1/docs/reviews/slices.md +350 -0
  439. core_framework-4.0.1/docs/testing.md +170 -0
  440. core_framework-4.0.1/docs/todo.md +17 -0
  441. core_framework-4.0.1/pyproject.toml +156 -0
  442. core_framework-4.0.1/tach.toml +191 -0
  443. core_framework-4.0.1/tests/e2e/_canaries.py +237 -0
  444. core_framework-4.0.1/tests/e2e/_settings.py +41 -0
  445. core_framework-4.0.1/tests/e2e/_upload_payloads.py +22 -0
  446. core_framework-4.0.1/tests/integration/_http_error_details.py +23 -0
  447. core_framework-4.0.1/tests/integration/api/_auth_helpers.py +37 -0
  448. core_framework-4.0.1/tests/integration/api/_destructive_delete_helpers.py +108 -0
  449. core_framework-4.0.1/tests/integration/api/_http_helpers.py +123 -0
  450. core_framework-4.0.1/tests/integration/api/admin/_auth_cases.py +139 -0
  451. core_framework-4.0.1/tests/integration/api/admin/analytics/router_test.py +266 -0
  452. core_framework-4.0.1/tests/integration/api/admin/cache/router_test.py +310 -0
  453. core_framework-4.0.1/tests/integration/api/admin/comments/router_test.py +748 -0
  454. core_framework-4.0.1/tests/integration/api/admin/moderation/router_test.py +2468 -0
  455. core_framework-4.0.1/tests/integration/api/admin/moderator_surfaces_test.py +555 -0
  456. core_framework-4.0.1/tests/integration/api/admin/posts/router_test.py +476 -0
  457. core_framework-4.0.1/tests/integration/api/comments/authenticated/comment_writes_integration_test.py +668 -0
  458. core_framework-4.0.1/tests/integration/api/comments/comment_attachments_integration_test.py +572 -0
  459. core_framework-4.0.1/tests/integration/api/comments/comment_kind_registry_integration_test.py +266 -0
  460. core_framework-4.0.1/tests/integration/api/comments/public/router_test.py +508 -0
  461. core_framework-4.0.1/tests/integration/api/create_idempotency_integration_test.py +486 -0
  462. core_framework-4.0.1/tests/integration/api/events/router_test.py +710 -0
  463. core_framework-4.0.1/tests/integration/api/groups/groups_integration_test.py +1028 -0
  464. core_framework-4.0.1/tests/integration/api/notifications/inbox_redesign_integration_test.py +596 -0
  465. core_framework-4.0.1/tests/integration/api/notifications/router_test.py +532 -0
  466. core_framework-4.0.1/tests/integration/api/posts/post_deletion_integration_test.py +641 -0
  467. core_framework-4.0.1/tests/integration/api/rate_limit_test.py +367 -0
  468. core_framework-4.0.1/tests/integration/api/ratings/_helpers.py +81 -0
  469. core_framework-4.0.1/tests/integration/api/ratings/conftest.py +8 -0
  470. core_framework-4.0.1/tests/integration/api/ratings/ratings_integration_test.py +352 -0
  471. core_framework-4.0.1/tests/integration/api/ratings/ratings_visibility_integration_test.py +273 -0
  472. core_framework-4.0.1/tests/integration/api/restriction_visibility_integration_test.py +410 -0
  473. core_framework-4.0.1/tests/integration/api/users/authenticated/friendship_integration_test.py +1022 -0
  474. core_framework-4.0.1/tests/integration/api/users/authenticated/router_test.py +1110 -0
  475. core_framework-4.0.1/tests/integration/api/users/public/router_test.py +363 -0
  476. core_framework-4.0.1/tests/integration/api/users/user_deletion_integration_test.py +371 -0
  477. core_framework-4.0.1/tests/integration/worker/account_deletion_test.py +431 -0
  478. core_framework-4.0.1/tests/integration/worker/aggregate_comment_stats_test.py +328 -0
  479. core_framework-4.0.1/tests/integration/worker/aggregate_user_stats_test.py +140 -0
  480. core_framework-4.0.1/tests/integration/worker/create_idempotency_retention_test.py +376 -0
  481. core_framework-4.0.1/tests/integration/worker/mute_lift_test.py +174 -0
  482. core_framework-4.0.1/tests/integration/worker/profile_media_upload_test.py +458 -0
  483. core_framework-4.0.1/tests/integration/worker/restriction_fanout_test.py +464 -0
  484. core_framework-4.0.1/tests/unit/api/comments/authenticated/comment_request_schemas_test.py +60 -0
  485. core_framework-4.0.1/tests/unit/application/comments/kind_registry_test.py +77 -0
  486. core_framework-4.0.1/tests/unit/application/email/account_deletion_scheduled_test.py +229 -0
  487. core_framework-4.0.1/tests/unit/application/events/event_service_test.py +166 -0
  488. core_framework-4.0.1/tests/unit/application/moderation/restriction_fanout_registry_test.py +119 -0
  489. core_framework-4.0.1/tests/unit/application/notifications/preview_test.py +19 -0
  490. core_framework-4.0.1/tests/unit/application/ratings/kind_registry_test.py +41 -0
  491. core_framework-4.0.1/tests/unit/application/users/account_removal_registry_test.py +70 -0
  492. core_framework-4.0.1/tests/unit/application/users/account_removal_runner_test.py +136 -0
  493. core_framework-4.0.1/tests/unit/core/pagination_test.py +468 -0
  494. core_framework-4.0.1/tests/unit/domains/user/service_test.py +216 -0
  495. core_framework-4.0.1/tests/unit/worker/tasks_registration_test.py +23 -0
  496. core_framework-4.0.1/uv.lock +2794 -0
  497. core_framework-3.3.0/.cursor/rules/constitution.mdc +0 -47
  498. core_framework-3.3.0/.cursor/rules/error-boundary.mdc +0 -56
  499. core_framework-3.3.0/.cursor/rules/flow-documentation.mdc +0 -15
  500. core_framework-3.3.0/.cursor/rules/integration-test-strategy.mdc +0 -29
  501. core_framework-3.3.0/.cursor/rules/no-code-in-docs.mdc +0 -35
  502. core_framework-3.3.0/.cursor/rules/postgres-config-conventions.mdc +0 -56
  503. core_framework-3.3.0/.cursor/rules/repository-schema-isolation.mdc +0 -87
  504. core_framework-3.3.0/.cursor/rules/strong-reads.mdc +0 -37
  505. core_framework-3.3.0/.cursor/skills/code-review/SKILL.md +0 -35
  506. core_framework-3.3.0/.cursor/skills/implement-feature/SKILL.md +0 -93
  507. core_framework-3.3.0/.cursor/skills/write-flow-doc/SKILL.md +0 -79
  508. core_framework-3.3.0/.github/workflows/_deploy.yml +0 -238
  509. core_framework-3.3.0/.github/workflows/dev-ci-cd.yaml +0 -358
  510. core_framework-3.3.0/.github/workflows/manual-deployment.yaml +0 -52
  511. core_framework-3.3.0/.github/workflows/manual-observability-deployment.yaml +0 -225
  512. core_framework-3.3.0/.github/workflows/test.yaml +0 -310
  513. core_framework-3.3.0/CHANGELOG.md +0 -638
  514. core_framework-3.3.0/PKG-INFO +0 -145
  515. core_framework-3.3.0/README.md +0 -99
  516. core_framework-3.3.0/config.toml +0 -147
  517. core_framework-3.3.0/config.toml.template +0 -131
  518. core_framework-3.3.0/core_framework/api/admin/analytics/router.py +0 -44
  519. core_framework-3.3.0/core_framework/api/admin/analytics/schemas.py +0 -59
  520. core_framework-3.3.0/core_framework/api/admin/cache/router.py +0 -26
  521. core_framework-3.3.0/core_framework/api/admin/comments/router.py +0 -68
  522. core_framework-3.3.0/core_framework/api/admin/comments/schemas.py +0 -50
  523. core_framework-3.3.0/core_framework/api/admin/moderation/router.py +0 -211
  524. core_framework-3.3.0/core_framework/api/admin/moderation/schemas.py +0 -105
  525. core_framework-3.3.0/core_framework/api/admin/outbox/router.py +0 -62
  526. core_framework-3.3.0/core_framework/api/admin/outbox/schemas.py +0 -60
  527. core_framework-3.3.0/core_framework/api/admin/posts/router.py +0 -58
  528. core_framework-3.3.0/core_framework/api/admin/router.py +0 -23
  529. core_framework-3.3.0/core_framework/api/admin/users/router.py +0 -189
  530. core_framework-3.3.0/core_framework/api/admin/users/schemas.py +0 -136
  531. core_framework-3.3.0/core_framework/api/attachments/router.py +0 -45
  532. core_framework-3.3.0/core_framework/api/auth/router.py +0 -26
  533. core_framework-3.3.0/core_framework/api/auth/schemas.py +0 -15
  534. core_framework-3.3.0/core_framework/api/comments/authenticated/router.py +0 -149
  535. core_framework-3.3.0/core_framework/api/comments/authenticated/schemas.py +0 -79
  536. core_framework-3.3.0/core_framework/api/comments/public/router.py +0 -100
  537. core_framework-3.3.0/core_framework/api/comments/public/schemas.py +0 -42
  538. core_framework-3.3.0/core_framework/api/comments/schemas.py +0 -19
  539. core_framework-3.3.0/core_framework/api/constants.py +0 -3
  540. core_framework-3.3.0/core_framework/api/dependencies.py +0 -153
  541. core_framework-3.3.0/core_framework/api/events/router.py +0 -54
  542. core_framework-3.3.0/core_framework/api/notifications/authenticated/router.py +0 -78
  543. core_framework-3.3.0/core_framework/api/notifications/authenticated/schemas.py +0 -104
  544. core_framework-3.3.0/core_framework/api/posts/authenticated/router.py +0 -116
  545. core_framework-3.3.0/core_framework/api/posts/authenticated/schemas.py +0 -77
  546. core_framework-3.3.0/core_framework/api/posts/public/router.py +0 -109
  547. core_framework-3.3.0/core_framework/api/posts/schemas.py +0 -35
  548. core_framework-3.3.0/core_framework/api/router.py +0 -23
  549. core_framework-3.3.0/core_framework/api/system/router.py +0 -100
  550. core_framework-3.3.0/core_framework/api/users/authenticated/router.py +0 -549
  551. core_framework-3.3.0/core_framework/api/users/authenticated/schemas.py +0 -101
  552. core_framework-3.3.0/core_framework/api/users/public/router.py +0 -33
  553. core_framework-3.3.0/core_framework/api/users/public/schemas.py +0 -33
  554. core_framework-3.3.0/core_framework/api/users/shared/schemas.py +0 -204
  555. core_framework-3.3.0/core_framework/application/analytics/read_service.py +0 -74
  556. core_framework-3.3.0/core_framework/application/auth/access_service.py +0 -29
  557. core_framework-3.3.0/core_framework/application/auth/auth_service.py +0 -50
  558. core_framework-3.3.0/core_framework/application/auth/models.py +0 -12
  559. core_framework-3.3.0/core_framework/application/auth/token_verification.py +0 -22
  560. core_framework-3.3.0/core_framework/application/bootstrap.py +0 -61
  561. core_framework-3.3.0/core_framework/application/comments/admin_service.py +0 -559
  562. core_framework-3.3.0/core_framework/application/comments/aggregation_service.py +0 -43
  563. core_framework-3.3.0/core_framework/application/comments/authenticated_service.py +0 -234
  564. core_framework-3.3.0/core_framework/application/comments/cleanup_service.py +0 -111
  565. core_framework-3.3.0/core_framework/application/comments/public_service.py +0 -324
  566. core_framework-3.3.0/core_framework/application/email/account_deletion_scheduled.py +0 -77
  567. core_framework-3.3.0/core_framework/application/email/send.py +0 -52
  568. core_framework-3.3.0/core_framework/application/events/README.md +0 -31
  569. core_framework-3.3.0/core_framework/application/events/event_service.py +0 -167
  570. core_framework-3.3.0/core_framework/application/media/README.md +0 -19
  571. core_framework-3.3.0/core_framework/application/media/attachment_service.py +0 -524
  572. core_framework-3.3.0/core_framework/application/media/avatar_service.py +0 -186
  573. core_framework-3.3.0/core_framework/application/media/banner_service.py +0 -182
  574. core_framework-3.3.0/core_framework/application/moderation/appeal_service.py +0 -102
  575. core_framework-3.3.0/core_framework/application/moderation/moderator_service.py +0 -42
  576. core_framework-3.3.0/core_framework/application/moderation/report_service.py +0 -203
  577. core_framework-3.3.0/core_framework/application/moderation/user_service.py +0 -176
  578. core_framework-3.3.0/core_framework/application/notifications/README.md +0 -17
  579. core_framework-3.3.0/core_framework/application/notifications/enums.py +0 -11
  580. core_framework-3.3.0/core_framework/application/notifications/inbox_service.py +0 -280
  581. core_framework-3.3.0/core_framework/application/notifications/mute_service.py +0 -34
  582. core_framework-3.3.0/core_framework/application/notifications/notification_service.py +0 -187
  583. core_framework-3.3.0/core_framework/application/outbox/block_mirrors.py +0 -54
  584. core_framework-3.3.0/core_framework/application/outbox/events.py +0 -122
  585. core_framework-3.3.0/core_framework/application/outbox/handlers.py +0 -115
  586. core_framework-3.3.0/core_framework/application/outbox/processing_service.py +0 -94
  587. core_framework-3.3.0/core_framework/application/outbox/restriction_mirrors.py +0 -46
  588. core_framework-3.3.0/core_framework/application/posts/admin_service.py +0 -391
  589. core_framework-3.3.0/core_framework/application/posts/aggregation_service.py +0 -55
  590. core_framework-3.3.0/core_framework/application/posts/authenticated_service.py +0 -130
  591. core_framework-3.3.0/core_framework/application/posts/cleanup_service.py +0 -135
  592. core_framework-3.3.0/core_framework/application/posts/public_service.py +0 -257
  593. core_framework-3.3.0/core_framework/application/shared/enums.py +0 -42
  594. core_framework-3.3.0/core_framework/application/shared/exceptions.py +0 -92
  595. core_framework-3.3.0/core_framework/application/shared/worker_jobs.py +0 -63
  596. core_framework-3.3.0/core_framework/application/users/admin_service.py +0 -259
  597. core_framework-3.3.0/core_framework/application/users/aggregation_service.py +0 -21
  598. core_framework-3.3.0/core_framework/application/users/authenticated_service.py +0 -393
  599. core_framework-3.3.0/core_framework/application/users/identity_enrichment.py +0 -35
  600. core_framework-3.3.0/core_framework/application/users/public_service.py +0 -162
  601. core_framework-3.3.0/core_framework/application/users/scheduled_service.py +0 -6
  602. core_framework-3.3.0/core_framework/application/users/user_deletion_service.py +0 -697
  603. core_framework-3.3.0/core_framework/bundled_alembic.py +0 -44
  604. core_framework-3.3.0/core_framework/constants.py +0 -20
  605. core_framework-3.3.0/core_framework/core/cache.py +0 -205
  606. core_framework-3.3.0/core_framework/core/exception_handlers/application.py +0 -131
  607. core_framework-3.3.0/core_framework/core/exception_handlers/common.py +0 -70
  608. core_framework-3.3.0/core_framework/core/exception_handlers/setup.py +0 -46
  609. core_framework-3.3.0/core_framework/core/middleware.py +0 -160
  610. core_framework-3.3.0/core_framework/core/observability.py +0 -648
  611. core_framework-3.3.0/core_framework/core/pagination.py +0 -216
  612. core_framework-3.3.0/core_framework/core/rate_limit.py +0 -298
  613. core_framework-3.3.0/core_framework/core/settings.py +0 -555
  614. core_framework-3.3.0/core_framework/domains/analytics/README.md +0 -42
  615. core_framework-3.3.0/core_framework/domains/analytics/__init__.py +0 -22
  616. core_framework-3.3.0/core_framework/domains/analytics/constants.py +0 -19
  617. core_framework-3.3.0/core_framework/domains/analytics/repository.py +0 -260
  618. core_framework-3.3.0/core_framework/domains/analytics/service.py +0 -338
  619. core_framework-3.3.0/core_framework/domains/auth/README.md +0 -75
  620. core_framework-3.3.0/core_framework/domains/auth/__init__.py +0 -16
  621. core_framework-3.3.0/core_framework/domains/auth/dependencies.py +0 -28
  622. core_framework-3.3.0/core_framework/domains/auth/exceptions.py +0 -10
  623. core_framework-3.3.0/core_framework/domains/auth/models.py +0 -31
  624. core_framework-3.3.0/core_framework/domains/auth/outcomes.py +0 -18
  625. core_framework-3.3.0/core_framework/domains/auth/ports/auth.py +0 -57
  626. core_framework-3.3.0/core_framework/domains/auth/service.py +0 -140
  627. core_framework-3.3.0/core_framework/domains/comment/README.md +0 -262
  628. core_framework-3.3.0/core_framework/domains/comment/__init__.py +0 -51
  629. core_framework-3.3.0/core_framework/domains/comment/constants.py +0 -7
  630. core_framework-3.3.0/core_framework/domains/comment/enums.py +0 -32
  631. core_framework-3.3.0/core_framework/domains/comment/exceptions.py +0 -35
  632. core_framework-3.3.0/core_framework/domains/comment/models.py +0 -228
  633. core_framework-3.3.0/core_framework/domains/comment/outcomes.py +0 -19
  634. core_framework-3.3.0/core_framework/domains/comment/repository.py +0 -2683
  635. core_framework-3.3.0/core_framework/domains/comment/service.py +0 -1028
  636. core_framework-3.3.0/core_framework/domains/email/models.py +0 -3
  637. core_framework-3.3.0/core_framework/domains/media/README.md +0 -30
  638. core_framework-3.3.0/core_framework/domains/media/attachment/service.py +0 -456
  639. core_framework-3.3.0/core_framework/domains/media/avatar/service.py +0 -340
  640. core_framework-3.3.0/core_framework/domains/media/banner/service.py +0 -335
  641. core_framework-3.3.0/core_framework/domains/media/shared/outcomes.py +0 -16
  642. core_framework-3.3.0/core_framework/domains/moderation/README.md +0 -140
  643. core_framework-3.3.0/core_framework/domains/moderation/__init__.py +0 -41
  644. core_framework-3.3.0/core_framework/domains/moderation/enums.py +0 -66
  645. core_framework-3.3.0/core_framework/domains/moderation/models.py +0 -94
  646. core_framework-3.3.0/core_framework/domains/moderation/outbox_repository.py +0 -190
  647. core_framework-3.3.0/core_framework/domains/moderation/outbox_service.py +0 -53
  648. core_framework-3.3.0/core_framework/domains/moderation/repository.py +0 -1396
  649. core_framework-3.3.0/core_framework/domains/moderation/service.py +0 -892
  650. core_framework-3.3.0/core_framework/domains/notification/README.md +0 -151
  651. core_framework-3.3.0/core_framework/domains/notification/__init__.py +0 -16
  652. core_framework-3.3.0/core_framework/domains/notification/enums.py +0 -19
  653. core_framework-3.3.0/core_framework/domains/notification/models.py +0 -24
  654. core_framework-3.3.0/core_framework/domains/notification/repository.py +0 -631
  655. core_framework-3.3.0/core_framework/domains/notification/service.py +0 -304
  656. core_framework-3.3.0/core_framework/domains/outbox/__init__.py +0 -19
  657. core_framework-3.3.0/core_framework/domains/outbox/models.py +0 -82
  658. core_framework-3.3.0/core_framework/domains/post/README.md +0 -208
  659. core_framework-3.3.0/core_framework/domains/post/__init__.py +0 -42
  660. core_framework-3.3.0/core_framework/domains/post/constants.py +0 -8
  661. core_framework-3.3.0/core_framework/domains/post/enums.py +0 -40
  662. core_framework-3.3.0/core_framework/domains/post/models.py +0 -212
  663. core_framework-3.3.0/core_framework/domains/post/repository.py +0 -2372
  664. core_framework-3.3.0/core_framework/domains/post/service.py +0 -967
  665. core_framework-3.3.0/core_framework/domains/repository_sql.py +0 -44
  666. core_framework-3.3.0/core_framework/domains/user/README.md +0 -105
  667. core_framework-3.3.0/core_framework/domains/user/__init__.py +0 -63
  668. core_framework-3.3.0/core_framework/domains/user/constants.py +0 -19
  669. core_framework-3.3.0/core_framework/domains/user/dependencies.py +0 -91
  670. core_framework-3.3.0/core_framework/domains/user/enums.py +0 -19
  671. core_framework-3.3.0/core_framework/domains/user/models.py +0 -346
  672. core_framework-3.3.0/core_framework/domains/user/outbox_repository.py +0 -189
  673. core_framework-3.3.0/core_framework/domains/user/outbox_service.py +0 -53
  674. core_framework-3.3.0/core_framework/domains/user/outcomes.py +0 -33
  675. core_framework-3.3.0/core_framework/domains/user/repository.py +0 -1810
  676. core_framework-3.3.0/core_framework/domains/user/service.py +0 -1054
  677. core_framework-3.3.0/core_framework/domains/utils.py +0 -241
  678. core_framework-3.3.0/core_framework/infrastructure/firebase/firebase_auth_adapter.py +0 -125
  679. core_framework-3.3.0/core_framework/main.py +0 -69
  680. core_framework-3.3.0/core_framework/testing/__init__.py +0 -7
  681. core_framework-3.3.0/core_framework/testing/arq.py +0 -141
  682. core_framework-3.3.0/core_framework/testing/auth.py +0 -306
  683. core_framework-3.3.0/core_framework/testing/config.py +0 -44
  684. core_framework-3.3.0/core_framework/testing/containers.py +0 -77
  685. core_framework-3.3.0/core_framework/testing/firebase.py +0 -132
  686. core_framework-3.3.0/core_framework/testing/hookspecs.py +0 -14
  687. core_framework-3.3.0/core_framework/testing/media.py +0 -271
  688. core_framework-3.3.0/core_framework/testing/migrations.py +0 -38
  689. core_framework-3.3.0/core_framework/testing/plugin.py +0 -218
  690. core_framework-3.3.0/core_framework/worker/main.py +0 -136
  691. core_framework-3.3.0/core_framework/worker/schedules/__init__.py +0 -138
  692. core_framework-3.3.0/core_framework/worker/schedules/schedule_expired_account_deletions.py +0 -37
  693. core_framework-3.3.0/core_framework/worker/schedules/schedule_purge_expired_create_idempotency_keys.py +0 -17
  694. core_framework-3.3.0/core_framework/worker/schedules/schedule_refresh_analytics.py +0 -7
  695. core_framework-3.3.0/core_framework/worker/tasks/__init__.py +0 -112
  696. core_framework-3.3.0/core_framework/worker/tasks/process_account_deletion_scheduled_email.py +0 -17
  697. core_framework-3.3.0/core_framework/worker/tasks/process_destructive_comment_delete.py +0 -38
  698. core_framework-3.3.0/core_framework/worker/tasks/process_transactional_email.py +0 -21
  699. core_framework-3.3.0/deploy/observability/README.md +0 -11
  700. core_framework-3.3.0/deploy/observability/docker-compose.yml +0 -153
  701. core_framework-3.3.0/deploy/observability/prometheus.yml +0 -39
  702. core_framework-3.3.0/deploy/observability/targets.example/README.md +0 -19
  703. core_framework-3.3.0/deploy/observability/targets.example/node.yml.example +0 -9
  704. core_framework-3.3.0/deploy/observability/targets.example/postgres.yml.example +0 -5
  705. core_framework-3.3.0/deploy/observability/targets.example/redis.yml.example +0 -6
  706. core_framework-3.3.0/docs/README.md +0 -48
  707. core_framework-3.3.0/docs/deployments/README.md +0 -56
  708. core_framework-3.3.0/docs/deployments/deploy-playbook.md +0 -250
  709. core_framework-3.3.0/docs/deployments/e2e-smoke-tests-design.md +0 -353
  710. core_framework-3.3.0/docs/deployments/edge-rate-limits.md +0 -96
  711. core_framework-3.3.0/docs/deployments/edge-upload-limits.md +0 -70
  712. core_framework-3.3.0/docs/deployments/examples/Caddyfile.example +0 -69
  713. core_framework-3.3.0/docs/deployments/guides/playbook/postgres-backup-playbook.md +0 -303
  714. core_framework-3.3.0/docs/deployments/guides/setup/app-server-deploy-ssh.md +0 -72
  715. core_framework-3.3.0/docs/deployments/guides/setup/caddy-setup.md +0 -57
  716. core_framework-3.3.0/docs/deployments/guides/setup/image-server-ssh.md +0 -99
  717. core_framework-3.3.0/docs/deployments/guides/setup/observability-lgtm-setup.md +0 -204
  718. core_framework-3.3.0/docs/deployments/guides/setup/postgres-backup-setup.md +0 -323
  719. core_framework-3.3.0/docs/deployments/guides/setup/postgres-setup.md +0 -165
  720. core_framework-3.3.0/docs/deployments/guides/setup/redis-setup.md +0 -117
  721. core_framework-3.3.0/docs/deployments/guides/setup/ubuntu-server-setup.md +0 -179
  722. core_framework-3.3.0/docs/deployments/postgres-backup-design.md +0 -176
  723. core_framework-3.3.0/docs/deployments/release-playbook.md +0 -92
  724. core_framework-3.3.0/docs/design/README.md +0 -33
  725. core_framework-3.3.0/docs/design/analytics-rollup-design.md +0 -1005
  726. core_framework-3.3.0/docs/design/cache-invalidation-design.md +0 -150
  727. core_framework-3.3.0/docs/design/create-idempotency-design.md +0 -294
  728. core_framework-3.3.0/docs/design/event-outbox-design.md +0 -603
  729. core_framework-3.3.0/docs/design/events-ingest-design.md +0 -229
  730. core_framework-3.3.0/docs/design/observability-lgtm-design.md +0 -593
  731. core_framework-3.3.0/docs/design/outbox-admin-ops-design.md +0 -337
  732. core_framework-3.3.0/docs/design/transactional-email-design.md +0 -618
  733. core_framework-3.3.0/docs/design/utm-events-design.md +0 -272
  734. core_framework-3.3.0/docs/domains/README.md +0 -23
  735. core_framework-3.3.0/docs/domains/analytics/admin_analytics_reads.md +0 -135
  736. core_framework-3.3.0/docs/domains/auth/access_control.md +0 -70
  737. core_framework-3.3.0/docs/domains/auth/registration.md +0 -64
  738. core_framework-3.3.0/docs/domains/cache/admin_cache_invalidation.md +0 -184
  739. core_framework-3.3.0/docs/domains/comments/README.md +0 -31
  740. core_framework-3.3.0/docs/domains/comments/admin_comments.md +0 -221
  741. core_framework-3.3.0/docs/domains/comments/comment_like.md +0 -102
  742. core_framework-3.3.0/docs/domains/comments/comment_report.md +0 -121
  743. core_framework-3.3.0/docs/domains/comments/comment_stats_aggregation.md +0 -69
  744. core_framework-3.3.0/docs/domains/comments/create_comment.md +0 -193
  745. core_framework-3.3.0/docs/domains/comments/delete_comment.md +0 -67
  746. core_framework-3.3.0/docs/domains/comments/edit_comment.md +0 -74
  747. core_framework-3.3.0/docs/domains/comments/retrieve_comments.md +0 -228
  748. core_framework-3.3.0/docs/domains/deletion/comments.md +0 -289
  749. core_framework-3.3.0/docs/domains/deletion/overview.md +0 -202
  750. core_framework-3.3.0/docs/domains/deletion/posts.md +0 -312
  751. core_framework-3.3.0/docs/domains/deletion/users.md +0 -520
  752. core_framework-3.3.0/docs/domains/events/events.md +0 -248
  753. core_framework-3.3.0/docs/domains/media/README.md +0 -36
  754. core_framework-3.3.0/docs/domains/media/attachment_upload.md +0 -77
  755. core_framework-3.3.0/docs/domains/media/avatar-upload-design.md +0 -110
  756. core_framework-3.3.0/docs/domains/media/banner-upload-design.md +0 -150
  757. core_framework-3.3.0/docs/domains/media/post-comment-attachments-design.md +0 -521
  758. core_framework-3.3.0/docs/domains/media/upload-pipeline-design.md +0 -468
  759. core_framework-3.3.0/docs/domains/media/upload_pipeline.md +0 -108
  760. core_framework-3.3.0/docs/domains/mentions/mentions_in_content.md +0 -240
  761. core_framework-3.3.0/docs/domains/moderation/README.md +0 -28
  762. core_framework-3.3.0/docs/domains/moderation/appeals.md +0 -248
  763. core_framework-3.3.0/docs/domains/moderation/internal_notes.md +0 -159
  764. core_framework-3.3.0/docs/domains/moderation/moderator_actions.md +0 -70
  765. core_framework-3.3.0/docs/domains/moderation/reports.md +0 -222
  766. core_framework-3.3.0/docs/domains/moderation/restrictions.md +0 -251
  767. core_framework-3.3.0/docs/domains/notifications/notification_inbox.md +0 -383
  768. core_framework-3.3.0/docs/domains/outbox/admin_outbox_ops.md +0 -187
  769. core_framework-3.3.0/docs/domains/posts/admin_posts.md +0 -216
  770. core_framework-3.3.0/docs/domains/posts/author_context.md +0 -92
  771. core_framework-3.3.0/docs/domains/posts/create_post.md +0 -126
  772. core_framework-3.3.0/docs/domains/posts/delete_post.md +0 -64
  773. core_framework-3.3.0/docs/domains/posts/edit_post.md +0 -83
  774. core_framework-3.3.0/docs/domains/posts/hashtag_discovery.md +0 -61
  775. core_framework-3.3.0/docs/domains/posts/post_like.md +0 -101
  776. core_framework-3.3.0/docs/domains/posts/post_report.md +0 -108
  777. core_framework-3.3.0/docs/domains/posts/post_stats_aggregation.md +0 -90
  778. core_framework-3.3.0/docs/domains/posts/post_visibility.md +0 -83
  779. core_framework-3.3.0/docs/domains/posts/retrieve_posts.md +0 -190
  780. core_framework-3.3.0/docs/domains/users/account.md +0 -108
  781. core_framework-3.3.0/docs/domains/users/account_deletion.md +0 -99
  782. core_framework-3.3.0/docs/domains/users/admin_users.md +0 -167
  783. core_framework-3.3.0/docs/domains/users/avatar.md +0 -91
  784. core_framework-3.3.0/docs/domains/users/banner.md +0 -77
  785. core_framework-3.3.0/docs/domains/users/blocks.md +0 -132
  786. core_framework-3.3.0/docs/domains/users/change_history.md +0 -128
  787. core_framework-3.3.0/docs/domains/users/check_username_exists.md +0 -62
  788. core_framework-3.3.0/docs/domains/users/follow-system-design.md +0 -424
  789. core_framework-3.3.0/docs/domains/users/follow.md +0 -230
  790. core_framework-3.3.0/docs/domains/users/my_posts_and_comments.md +0 -113
  791. core_framework-3.3.0/docs/domains/users/preferences.md +0 -87
  792. core_framework-3.3.0/docs/domains/users/profile.md +0 -221
  793. core_framework-3.3.0/docs/domains/users/public_profile.md +0 -99
  794. core_framework-3.3.0/docs/domains/users/user_removal.md +0 -86
  795. core_framework-3.3.0/docs/domains/users/user_stats_aggregation.md +0 -80
  796. core_framework-3.3.0/docs/domains/users/username_suggest.md +0 -15
  797. core_framework-3.3.0/docs/library/README.md +0 -15
  798. core_framework-3.3.0/docs/library/api.md +0 -212
  799. core_framework-3.3.0/docs/library/capability-wiring.md +0 -181
  800. core_framework-3.3.0/docs/library/core-framework-migration.md +0 -253
  801. core_framework-3.3.0/docs/library/overview.md +0 -56
  802. core_framework-3.3.0/docs/library/package-api.md +0 -675
  803. core_framework-3.3.0/docs/library/testing-plugin-design.md +0 -317
  804. core_framework-3.3.0/docs/library/workers.md +0 -128
  805. core_framework-3.3.0/docs/platform/README.md +0 -18
  806. core_framework-3.3.0/docs/platform/architecture-decisions.md +0 -594
  807. core_framework-3.3.0/docs/platform/client-error-visibility.md +0 -278
  808. core_framework-3.3.0/docs/platform/conventions.md +0 -101
  809. core_framework-3.3.0/docs/platform/layers-and-boundaries.md +0 -46
  810. core_framework-3.3.0/docs/reviews/README.md +0 -11
  811. core_framework-3.3.0/docs/reviews/log.md +0 -28
  812. core_framework-3.3.0/docs/reviews/review-playbook.md +0 -192
  813. core_framework-3.3.0/docs/reviews/slices.md +0 -302
  814. core_framework-3.3.0/docs/testing.md +0 -150
  815. core_framework-3.3.0/docs/todo.md +0 -3
  816. core_framework-3.3.0/pyproject.toml +0 -155
  817. core_framework-3.3.0/tach.toml +0 -184
  818. core_framework-3.3.0/tests/e2e/_canaries.py +0 -140
  819. core_framework-3.3.0/tests/e2e/_settings.py +0 -40
  820. core_framework-3.3.0/tests/e2e/_upload_payloads.py +0 -18
  821. core_framework-3.3.0/tests/integration/_http_error_details.py +0 -21
  822. core_framework-3.3.0/tests/integration/api/_auth_helpers.py +0 -21
  823. core_framework-3.3.0/tests/integration/api/_destructive_delete_helpers.py +0 -51
  824. core_framework-3.3.0/tests/integration/api/_http_helpers.py +0 -100
  825. core_framework-3.3.0/tests/integration/api/admin/_auth_cases.py +0 -97
  826. core_framework-3.3.0/tests/integration/api/admin/analytics/router_test.py +0 -266
  827. core_framework-3.3.0/tests/integration/api/admin/cache/router_test.py +0 -310
  828. core_framework-3.3.0/tests/integration/api/admin/comments/router_test.py +0 -745
  829. core_framework-3.3.0/tests/integration/api/admin/moderation/router_test.py +0 -2444
  830. core_framework-3.3.0/tests/integration/api/admin/posts/router_test.py +0 -476
  831. core_framework-3.3.0/tests/integration/api/comments/authenticated/comment_writes_integration_test.py +0 -663
  832. core_framework-3.3.0/tests/integration/api/comments/comment_attachments_integration_test.py +0 -572
  833. core_framework-3.3.0/tests/integration/api/comments/public/router_test.py +0 -508
  834. core_framework-3.3.0/tests/integration/api/create_idempotency_integration_test.py +0 -486
  835. core_framework-3.3.0/tests/integration/api/events/router_test.py +0 -656
  836. core_framework-3.3.0/tests/integration/api/notifications/router_test.py +0 -538
  837. core_framework-3.3.0/tests/integration/api/posts/post_deletion_integration_test.py +0 -630
  838. core_framework-3.3.0/tests/integration/api/rate_limit_test.py +0 -349
  839. core_framework-3.3.0/tests/integration/api/users/authenticated/router_test.py +0 -1102
  840. core_framework-3.3.0/tests/integration/api/users/public/router_test.py +0 -329
  841. core_framework-3.3.0/tests/integration/api/users/user_deletion_integration_test.py +0 -371
  842. core_framework-3.3.0/tests/integration/worker/account_deletion_test.py +0 -385
  843. core_framework-3.3.0/tests/integration/worker/aggregate_comment_stats_test.py +0 -328
  844. core_framework-3.3.0/tests/integration/worker/aggregate_user_stats_test.py +0 -103
  845. core_framework-3.3.0/tests/integration/worker/create_idempotency_retention_test.py +0 -277
  846. core_framework-3.3.0/tests/integration/worker/mute_lift_test.py +0 -172
  847. core_framework-3.3.0/tests/integration/worker/profile_media_upload_test.py +0 -458
  848. core_framework-3.3.0/tests/unit/api/comments/authenticated/comment_request_schemas_test.py +0 -60
  849. core_framework-3.3.0/tests/unit/application/email/account_deletion_scheduled_test.py +0 -230
  850. core_framework-3.3.0/tests/unit/application/events/event_service_test.py +0 -149
  851. core_framework-3.3.0/tests/unit/application/notifications/inbox_service_test.py +0 -111
  852. core_framework-3.3.0/tests/unit/core/pagination_test.py +0 -466
  853. core_framework-3.3.0/tests/unit/domains/user/service_test.py +0 -228
  854. core_framework-3.3.0/uv.lock +0 -2607
  855. {core_framework-3.3.0 → core_framework-4.0.1}/.agents/skills/fastapi +0 -0
  856. {core_framework-3.3.0 → core_framework-4.0.1}/.agents/skills/library-skills/.library-skills.json +0 -0
  857. {core_framework-3.3.0 → core_framework-4.0.1}/.agents/skills/library-skills/SKILL.md +0 -0
  858. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/alembic-migrations.mdc +0 -0
  859. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/api-layer.mdc +0 -0
  860. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/api-reference-docs.mdc +0 -0
  861. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/api-validation.mdc +0 -0
  862. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/application-layer.mdc +0 -0
  863. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/constants-final.mdc +0 -0
  864. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/database-triggers.mdc +0 -0
  865. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/docstrings.mdc +0 -0
  866. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/domain-caller-context.mdc +0 -0
  867. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/domain-imports.mdc +0 -0
  868. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/domain-input-guards.mdc +0 -0
  869. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/domain-repository-exceptions.mdc +0 -0
  870. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/domain-services-and-adapters.mdc +0 -0
  871. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/inline-raise-messages.mdc +0 -0
  872. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/layer-boundaries.mdc +0 -0
  873. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/rules/structured-logging.mdc +0 -0
  874. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/skills/add-config/SKILL.md +0 -0
  875. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/skills/add-domain/SKILL.md +0 -0
  876. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/skills/fastapi +0 -0
  877. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/skills/recommend-features/SKILL.md +0 -0
  878. {core_framework-3.3.0 → core_framework-4.0.1}/.cursor/skills/sync-host-rules/SKILL.md +0 -0
  879. {core_framework-3.3.0 → core_framework-4.0.1}/.dockerignore +0 -0
  880. {core_framework-3.3.0 → core_framework-4.0.1}/.github/ci/package-lock.json +0 -0
  881. {core_framework-3.3.0 → core_framework-4.0.1}/.github/ci/package.json +0 -0
  882. {core_framework-3.3.0 → core_framework-4.0.1}/.github/workflows/publish-pypi.yml +0 -0
  883. {core_framework-3.3.0 → core_framework-4.0.1}/.gitignore +0 -0
  884. {core_framework-3.3.0 → core_framework-4.0.1}/.pre-commit-config.yaml +0 -0
  885. {core_framework-3.3.0 → core_framework-4.0.1}/.python-version +0 -0
  886. {core_framework-3.3.0 → core_framework-4.0.1}/LICENSE +0 -0
  887. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/README +0 -0
  888. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/env.py +0 -0
  889. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/script.py.mako +0 -0
  890. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/versions/2d61a5e88d76_analytics_utm_events_add_kind.py +0 -0
  891. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/versions/585105e1149e_analytics_add_utm_events.py +0 -0
  892. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/versions/5b9ac98bb150_analytics_daily_fact.py +0 -0
  893. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic/versions/7f2a9c1d4e8b_analytics_daily_fact_day_index.py +0 -0
  894. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/analytics/alembic.ini +0 -0
  895. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/README +0 -0
  896. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/env.py +0 -0
  897. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/script.py.mako +0 -0
  898. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/comment_add_comment_attachments.py +0 -0
  899. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency.py +0 -0
  900. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/comment_add_comment_create_idempotency_created_at_index.py +0 -0
  901. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/comment_add_comment_mentions.py +0 -0
  902. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/comment_tombstone_status_model.py +0 -0
  903. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic/versions/v1_comment_init_baseline.py +0 -0
  904. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/comment/alembic.ini +0 -0
  905. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/extension/alembic/README +0 -0
  906. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/extension/alembic/env.py +0 -0
  907. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/extension/alembic/script.py.mako +0 -0
  908. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/extension/alembic/versions/v1_ext_init_baseline.py +0 -0
  909. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/extension/alembic.ini +0 -0
  910. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/README +0 -0
  911. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/env.py +0 -0
  912. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/script.py.mako +0 -0
  913. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/versions/media_add_attachment_staging_registry.py +0 -0
  914. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/versions/media_add_banner_staging_and_lease.py +0 -0
  915. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/versions/media_attachment_staging_registry_published_at.py +0 -0
  916. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic/versions/v1_media_init_baseline.py +0 -0
  917. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/media/alembic.ini +0 -0
  918. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/README +0 -0
  919. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/env.py +0 -0
  920. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/script.py.mako +0 -0
  921. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/versions/3027828c2c80_align_dead_outbox_keyset_index.py +0 -0
  922. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/versions/moderation_add_event_outbox.py +0 -0
  923. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/versions/moderation_add_event_outbox_dead_indexes.py +0 -0
  924. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/versions/moderation_add_event_outbox_pending_created_at_index.py +0 -0
  925. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic/versions/v1_mod_init_baseline.py +0 -0
  926. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/moderation/alembic.ini +0 -0
  927. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic/README +0 -0
  928. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic/env.py +0 -0
  929. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic/script.py.mako +0 -0
  930. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic/versions/2fdd68777706_notification_read_at_retention_index.py +0 -0
  931. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic/versions/v1_notif_init_baseline.py +0 -0
  932. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/notification/alembic.ini +0 -0
  933. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/README +0 -0
  934. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/env.py +0 -0
  935. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/script.py.mako +0 -0
  936. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_add_post_attachments.py +0 -0
  937. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_add_post_create_idempotency.py +0 -0
  938. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_add_post_create_idempotency_created_at_index.py +0 -0
  939. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_add_post_mentions.py +0 -0
  940. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_post_views_retention_high_water_mark.py +0 -0
  941. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/post_tombstone_status_model.py +0 -0
  942. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic/versions/v1_post_init_baseline.py +0 -0
  943. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/post/alembic.ini +0 -0
  944. {core_framework-3.3.0/alembic/user → core_framework-4.0.1/alembic/rating}/alembic/README +0 -0
  945. {core_framework-3.3.0/alembic/user → core_framework-4.0.1/alembic/rating}/alembic/script.py.mako +0 -0
  946. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/env.py +0 -0
  947. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/44df70a45ba6_user_add_signup_events.py +0 -0
  948. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/922eece707db_align_dead_outbox_keyset_index.py +0 -0
  949. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_avatar_ingest_sequences.py +0 -0
  950. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_banner_ingest_sequences.py +0 -0
  951. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_date_of_birth_to_profiles.py +0 -0
  952. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_event_outbox.py +0 -0
  953. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_event_outbox_dead_indexes.py +0 -0
  954. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_add_event_outbox_pending_created_at_index.py +0 -0
  955. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/user_reserve_sentinel_user_ids.py +0 -0
  956. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic/versions/v1_user_init_baseline.py +0 -0
  957. {core_framework-3.3.0 → core_framework-4.0.1}/alembic/user/alembic.ini +0 -0
  958. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/__init__.py +0 -0
  959. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/__init__.py +0 -0
  960. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/__init__.py +0 -0
  961. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/analytics/__init__.py +0 -0
  962. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/cache/__init__.py +0 -0
  963. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/cache/schemas.py +0 -0
  964. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/comments/__init__.py +0 -0
  965. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/moderation/__init__.py +0 -0
  966. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/outbox/__init__.py +0 -0
  967. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/posts/__init__.py +0 -0
  968. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/posts/schemas.py +0 -0
  969. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/admin/users/__init__.py +0 -0
  970. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/attachments/__init__.py +0 -0
  971. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/attachments/schemas.py +0 -0
  972. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/auth/__init__.py +0 -0
  973. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/comments/__init__.py +0 -0
  974. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/comments/authenticated/__init__.py +0 -0
  975. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/comments/authenticated/mappers.py +0 -0
  976. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/comments/public/__init__.py +0 -0
  977. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/comments/router.py +0 -0
  978. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/events/__init__.py +0 -0
  979. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/events/schemas.py +0 -0
  980. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/idempotency/__init__.py +0 -0
  981. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/idempotency/dependencies.py +0 -0
  982. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/ingest_guards.py +0 -0
  983. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/notifications/__init__.py +0 -0
  984. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/notifications/authenticated/__init__.py +0 -0
  985. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/notifications/router.py +0 -0
  986. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/__init__.py +0 -0
  987. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/authenticated/__init__.py +0 -0
  988. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/authenticated/mappers.py +0 -0
  989. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/public/__init__.py +0 -0
  990. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/public/schemas.py +0 -0
  991. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/posts/router.py +0 -0
  992. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/schemas.py +0 -0
  993. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/system/__init__.py +0 -0
  994. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/upload.py +0 -0
  995. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/__init__.py +0 -0
  996. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/authenticated/__init__.py +0 -0
  997. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/authenticated/mappers.py +0 -0
  998. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/public/__init__.py +0 -0
  999. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/router.py +0 -0
  1000. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/shared/__init__.py +0 -0
  1001. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/api/users/shared/mappers.py +0 -0
  1002. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/__init__.py +0 -0
  1003. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/__init__.py +0 -0
  1004. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/bucket_service.py +0 -0
  1005. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/prune_service.py +0 -0
  1006. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/refresh_service.py +0 -0
  1007. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/registry.py +0 -0
  1008. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/sources/__init__.py +0 -0
  1009. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/sources/comment_created.py +0 -0
  1010. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/sources/post_created.py +0 -0
  1011. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/sources/post_viewed.py +0 -0
  1012. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/analytics/sources/user_registered.py +0 -0
  1013. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/auth/__init__.py +0 -0
  1014. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/cache/__init__.py +0 -0
  1015. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/cache/invalidate_service.py +0 -0
  1016. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/cache/models.py +0 -0
  1017. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/email/__init__.py +0 -0
  1018. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/email/enqueue.py +0 -0
  1019. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/email/registry.py +0 -0
  1020. {core_framework-3.3.0/core_framework/application/comments → core_framework-4.0.1/core_framework/application/events}/__init__.py +0 -0
  1021. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/events/event_token.py +0 -0
  1022. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/events/models.py +0 -0
  1023. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/events/utm_capture_kinds.py +0 -0
  1024. {core_framework-3.3.0/core_framework/application/events → core_framework-4.0.1/core_framework/application/media}/__init__.py +0 -0
  1025. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/media/attachment_read.py +0 -0
  1026. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/media/read_url_config.py +0 -0
  1027. {core_framework-3.3.0/core_framework/application/media → core_framework-4.0.1/core_framework/application/moderation}/__init__.py +0 -0
  1028. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/moderation/scheduled_service.py +0 -0
  1029. {core_framework-3.3.0/core_framework/application/moderation → core_framework-4.0.1/core_framework/application/notifications}/__init__.py +0 -0
  1030. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/notifications/prune_service.py +0 -0
  1031. {core_framework-3.3.0/core_framework/application/notifications → core_framework-4.0.1/core_framework/application/outbox}/__init__.py +0 -0
  1032. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/outbox/exceptions.py +0 -0
  1033. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/outbox/follow_mirrors.py +0 -0
  1034. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/outbox/ops_service.py +0 -0
  1035. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/outbox/polling_service.py +0 -0
  1036. {core_framework-3.3.0/core_framework/application/outbox → core_framework-4.0.1/core_framework/application/posts}/__init__.py +0 -0
  1037. {core_framework-3.3.0/core_framework/application/posts → core_framework-4.0.1/core_framework/application/shared}/__init__.py +0 -0
  1038. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/shared/deletion_cleanup_ledger.py +0 -0
  1039. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/shared/request_context.py +0 -0
  1040. {core_framework-3.3.0/core_framework/application/shared → core_framework-4.0.1/core_framework/application/users}/__init__.py +0 -0
  1041. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/users/deletion_audit.py +0 -0
  1042. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/application/users/enums.py +0 -0
  1043. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/asgi.py +0 -0
  1044. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/__init__.py +0 -0
  1045. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/context.py +0 -0
  1046. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/database.py +0 -0
  1047. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/exception_handlers/__init__.py +0 -0
  1048. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/exceptions.py +0 -0
  1049. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/firebase.py +0 -0
  1050. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/http_client.py +0 -0
  1051. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/http_probes.py +0 -0
  1052. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/logging.py +0 -0
  1053. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/process.py +0 -0
  1054. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/redis.py +0 -0
  1055. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/core/runtime.py +0 -0
  1056. {core_framework-3.3.0/core_framework/application/users → core_framework-4.0.1/core_framework/domains}/__init__.py +0 -0
  1057. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/analytics/dependencies.py +0 -0
  1058. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/analytics/exceptions.py +0 -0
  1059. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/analytics/models.py +0 -0
  1060. {core_framework-3.3.0/core_framework/domains → core_framework-4.0.1/core_framework/domains/analytics/ports}/__init__.py +0 -0
  1061. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/analytics/ports/activity_source.py +0 -0
  1062. {core_framework-3.3.0/core_framework/domains/analytics → core_framework-4.0.1/core_framework/domains/auth}/ports/__init__.py +0 -0
  1063. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/comment/dependencies.py +0 -0
  1064. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/README.md +0 -0
  1065. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/__init__.py +0 -0
  1066. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/dependencies.py +0 -0
  1067. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/exceptions.py +0 -0
  1068. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/ports/send.py +0 -0
  1069. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/email/service.py +0 -0
  1070. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/exceptions.py +0 -0
  1071. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/__init__.py +0 -0
  1072. {core_framework-3.3.0/core_framework/domains/auth/ports → core_framework-4.0.1/core_framework/domains/media/attachment}/__init__.py +0 -0
  1073. {core_framework-3.3.0/core_framework/domains/media/attachment → core_framework-4.0.1/core_framework/domains/media/attachment/components}/__init__.py +0 -0
  1074. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/components/finals_publisher.py +0 -0
  1075. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/components/staging.py +0 -0
  1076. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/components/variant_encoder.py +0 -0
  1077. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/constants.py +0 -0
  1078. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/exceptions.py +0 -0
  1079. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/models.py +0 -0
  1080. {core_framework-3.3.0/core_framework/domains/media/attachment/components → core_framework-4.0.1/core_framework/domains/media/attachment/ports}/__init__.py +0 -0
  1081. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/ports/finals_publisher.py +0 -0
  1082. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/ports/staging.py +0 -0
  1083. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/attachment/ports/variant_encoder.py +0 -0
  1084. {core_framework-3.3.0/core_framework/domains/media/attachment/ports → core_framework-4.0.1/core_framework/domains/media/avatar}/__init__.py +0 -0
  1085. {core_framework-3.3.0/core_framework/domains/media/avatar → core_framework-4.0.1/core_framework/domains/media/avatar/components}/__init__.py +0 -0
  1086. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/components/finals_publisher.py +0 -0
  1087. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/components/staging.py +0 -0
  1088. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/components/variant_encoder.py +0 -0
  1089. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/constants.py +0 -0
  1090. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/exceptions.py +0 -0
  1091. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/models.py +0 -0
  1092. {core_framework-3.3.0/core_framework/domains/media/avatar/components → core_framework-4.0.1/core_framework/domains/media/avatar/ports}/__init__.py +0 -0
  1093. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/ports/finals_publisher.py +0 -0
  1094. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/ports/staging.py +0 -0
  1095. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/avatar/ports/variant_encoder.py +0 -0
  1096. {core_framework-3.3.0/core_framework/domains/media/avatar/ports → core_framework-4.0.1/core_framework/domains/media/banner}/__init__.py +0 -0
  1097. {core_framework-3.3.0/core_framework/domains/media/banner → core_framework-4.0.1/core_framework/domains/media/banner/components}/__init__.py +0 -0
  1098. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/components/finals_publisher.py +0 -0
  1099. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/components/staging.py +0 -0
  1100. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/components/variant_encoder.py +0 -0
  1101. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/constants.py +0 -0
  1102. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/exceptions.py +0 -0
  1103. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/models.py +0 -0
  1104. {core_framework-3.3.0/core_framework/domains/media/banner/components → core_framework-4.0.1/core_framework/domains/media/banner/ports}/__init__.py +0 -0
  1105. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/ports/finals_publisher.py +0 -0
  1106. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/ports/staging.py +0 -0
  1107. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/banner/ports/variant_encoder.py +0 -0
  1108. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/dependencies.py +0 -0
  1109. {core_framework-3.3.0/core_framework/domains/media/banner/ports → core_framework-4.0.1/core_framework/domains/media/shared}/__init__.py +0 -0
  1110. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/shared/constants.py +0 -0
  1111. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/shared/exceptions.py +0 -0
  1112. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/shared/repository.py +0 -0
  1113. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/media/shared/utils.py +0 -0
  1114. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/moderation/dependencies.py +0 -0
  1115. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/moderation/exceptions.py +0 -0
  1116. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/moderation/outcomes.py +0 -0
  1117. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/notification/dependencies.py +0 -0
  1118. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/notification/exceptions.py +0 -0
  1119. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/README.md +0 -0
  1120. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/dependencies.py +0 -0
  1121. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/exceptions.py +0 -0
  1122. {core_framework-3.3.0/core_framework/domains/media/shared → core_framework-4.0.1/core_framework/domains/outbox/ports}/__init__.py +0 -0
  1123. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/ports/admin.py +0 -0
  1124. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/ports/consumer.py +0 -0
  1125. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/ports/producer.py +0 -0
  1126. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/outbox/service.py +0 -0
  1127. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/post/dependencies.py +0 -0
  1128. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/post/exceptions.py +0 -0
  1129. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/post/outcomes.py +0 -0
  1130. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/user/exceptions.py +0 -0
  1131. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/domains/user/utils.py +0 -0
  1132. {core_framework-3.3.0/core_framework/domains/outbox/ports → core_framework-4.0.1/core_framework/infrastructure}/__init__.py +0 -0
  1133. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/email/resend_email_adapter.py +0 -0
  1134. {core_framework-3.3.0/core_framework/infrastructure → core_framework-4.0.1/core_framework/infrastructure/firebase}/__init__.py +0 -0
  1135. {core_framework-3.3.0/core_framework/infrastructure/firebase → core_framework-4.0.1/core_framework/infrastructure/media}/__init__.py +0 -0
  1136. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/attachment_staging_display_geometry.py +0 -0
  1137. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/local_attachment_staging_adapter.py +0 -0
  1138. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/local_avatar_staging_adapter.py +0 -0
  1139. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/local_banner_staging_adapter.py +0 -0
  1140. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/pillow_attachment_variant_encoder_adapter.py +0 -0
  1141. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/pillow_avatar_variant_encoder_adapter.py +0 -0
  1142. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/pillow_banner_variant_encoder_adapter.py +0 -0
  1143. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/pillow_staging_image.py +0 -0
  1144. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/ssh_attachment_finals_publisher_adapter.py +0 -0
  1145. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/ssh_banner_finals_publisher_adapter.py +0 -0
  1146. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/ssh_finals_publisher_adapter.py +0 -0
  1147. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/media/staging_paths.py +0 -0
  1148. {core_framework-3.3.0/core_framework/infrastructure/media → core_framework-4.0.1/core_framework/infrastructure/outbox}/__init__.py +0 -0
  1149. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/outbox/outbox_consumer_adapter.py +0 -0
  1150. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/infrastructure/outbox/outbox_producer_adapter.py +0 -0
  1151. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/migrate_cli.py +0 -0
  1152. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/py.typed +0 -0
  1153. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/testing/firebase_identity_toolkit.py +0 -0
  1154. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/testing/httpx_test_client.py +0 -0
  1155. {core_framework-3.3.0/core_framework/infrastructure/outbox → core_framework-4.0.1/core_framework/worker}/__init__.py +0 -0
  1156. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/analytics_refresh_cron.py +0 -0
  1157. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_aggregate_comment_stats.py +0 -0
  1158. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_aggregate_post_stats.py +0 -0
  1159. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_aggregate_user_stats.py +0 -0
  1160. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_expired_mute_lifts.py +0 -0
  1161. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_poll_outbox.py +0 -0
  1162. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_prune_analytics_daily_facts.py +0 -0
  1163. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_prune_post_views.py +0 -0
  1164. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_prune_read_notifications.py +0 -0
  1165. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_sweep_stale_attachment_staging.py +0 -0
  1166. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_sweep_stale_avatar_staging.py +0 -0
  1167. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/schedules/schedule_sweep_stale_banner_staging.py +0 -0
  1168. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/delete_attachment_finals.py +0 -0
  1169. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/delete_superseded_avatar_finals.py +0 -0
  1170. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/delete_superseded_banner_finals.py +0 -0
  1171. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_account_deletion.py +0 -0
  1172. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_admin_user_deletion.py +0 -0
  1173. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_aggregate_comment_stats.py +0 -0
  1174. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_aggregate_post_stats.py +0 -0
  1175. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_aggregate_user_stats.py +0 -0
  1176. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_attachment_asset_variants.py +0 -0
  1177. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_banner_asset_variants.py +0 -0
  1178. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_cache_pattern_invalidation.py +0 -0
  1179. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_destructive_post_delete.py +0 -0
  1180. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_media_asset_variants.py +0 -0
  1181. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_mute_lift.py +0 -0
  1182. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_outbox_row.py +0 -0
  1183. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_refresh_analytics_bucket.py +0 -0
  1184. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/tasks/process_user_content_deletion.py +0 -0
  1185. {core_framework-3.3.0 → core_framework-4.0.1}/core_framework/worker/worker_context.py +0 -0
  1186. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/README.md +0 -0
  1187. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/app/docker-compose.dev.yaml +0 -0
  1188. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/app/docker-compose.yml +0 -0
  1189. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/app/dockerfile +0 -0
  1190. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/.env.example +0 -0
  1191. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/dashboards/application/api-http.json +0 -0
  1192. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/dashboards/application/worker-jobs.json +0 -0
  1193. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/dashboards/infrastructure/node-exporter.json +0 -0
  1194. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/dashboards/infrastructure/postgres-exporter.json +0 -0
  1195. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/dashboards/infrastructure/redis-exporter.json +0 -0
  1196. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/provisioning/dashboards/dashboards.yml +0 -0
  1197. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/grafana/provisioning/datasources/datasources.yml +0 -0
  1198. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/loki.yaml +0 -0
  1199. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/otel-collector-config.yaml +0 -0
  1200. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/targets/node/.gitkeep +0 -0
  1201. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/targets/postgres/.gitkeep +0 -0
  1202. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/targets/redis/.gitkeep +0 -0
  1203. {core_framework-3.3.0 → core_framework-4.0.1}/deploy/observability/tempo.yaml +0 -0
  1204. {core_framework-3.3.0 → core_framework-4.0.1}/docs/deployments/examples/Caddyfile.observability.example +0 -0
  1205. {core_framework-3.3.0 → core_framework-4.0.1}/docs/deployments/examples/image-server-known-hosts.example +0 -0
  1206. {core_framework-3.3.0 → core_framework-4.0.1}/docs/deployments/guides/playbook/py-spy-playbook.md +0 -0
  1207. {core_framework-3.3.0 → core_framework-4.0.1}/docs/deployments/guides/setup/cloudflare-setup.md +0 -0
  1208. {core_framework-3.3.0 → core_framework-4.0.1}/docs/deployments/guides/setup/py-spy-setup.md +0 -0
  1209. {core_framework-3.3.0 → core_framework-4.0.1}/docs/design/media-cpu-off-api-refactor.md +0 -0
  1210. {core_framework-3.3.0 → core_framework-4.0.1}/docs/design/media-storage-topology.md +0 -0
  1211. {core_framework-3.3.0 → core_framework-4.0.1}/docs/domains/posts/README.md +0 -0
  1212. {core_framework-3.3.0 → core_framework-4.0.1}/docs/platform/database-triggers.md +0 -0
  1213. {core_framework-3.3.0 → core_framework-4.0.1}/docs/platform/domain-services-and-adapters.md +0 -0
  1214. {core_framework-3.3.0 → core_framework-4.0.1}/docs/platform/patch-update-typed-payload.md +0 -0
  1215. {core_framework-3.3.0 → core_framework-4.0.1}/firebase_config.example.json +0 -0
  1216. {core_framework-3.3.0 → core_framework-4.0.1}/makefile +0 -0
  1217. {core_framework-3.3.0/core_framework/worker → core_framework-4.0.1/tests}/__init__.py +0 -0
  1218. {core_framework-3.3.0 → core_framework-4.0.1}/tests/conftest.py +0 -0
  1219. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/_auth.py +0 -0
  1220. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/_media.py +0 -0
  1221. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/conftest.py +0 -0
  1222. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/media/pipeline_test.py +0 -0
  1223. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/smoke/canary_test.py +0 -0
  1224. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/smoke/media_test.py +0 -0
  1225. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/smoke/system_test.py +0 -0
  1226. {core_framework-3.3.0 → core_framework-4.0.1}/tests/e2e/smoke/tls_host_test.py +0 -0
  1227. {core_framework-3.3.0/tests → core_framework-4.0.1/tests/integration}/__init__.py +0 -0
  1228. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/_poll.py +0 -0
  1229. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/analytics/_helpers.py +0 -0
  1230. {core_framework-3.3.0/tests/integration → core_framework-4.0.1/tests/integration/api}/__init__.py +0 -0
  1231. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/_outbox_helpers.py +0 -0
  1232. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/_user_deletion_helpers.py +0 -0
  1233. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/_user_helpers.py +0 -0
  1234. {core_framework-3.3.0/tests/integration/api → core_framework-4.0.1/tests/integration/api/admin}/__init__.py +0 -0
  1235. {core_framework-3.3.0/tests/integration/api/admin → core_framework-4.0.1/tests/integration/api/admin/analytics}/__init__.py +0 -0
  1236. {core_framework-3.3.0/tests/integration/api/admin/analytics → core_framework-4.0.1/tests/integration/api/admin/cache}/__init__.py +0 -0
  1237. {core_framework-3.3.0/tests/integration/api/admin/cache → core_framework-4.0.1/tests/integration/api/admin/comments}/__init__.py +0 -0
  1238. {core_framework-3.3.0/tests/integration/api/admin/comments → core_framework-4.0.1/tests/integration/api/admin/moderation}/__init__.py +0 -0
  1239. {core_framework-3.3.0/tests/integration/api/admin/moderation → core_framework-4.0.1/tests/integration/api/admin/outbox}/__init__.py +0 -0
  1240. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/admin/outbox/router_test.py +0 -0
  1241. {core_framework-3.3.0/tests/integration/api/admin/outbox → core_framework-4.0.1/tests/integration/api/admin/posts}/__init__.py +0 -0
  1242. {core_framework-3.3.0/tests/integration/api/admin/posts → core_framework-4.0.1/tests/integration/api/admin/users}/__init__.py +0 -0
  1243. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/admin/users/router_test.py +0 -0
  1244. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/attachments/_helpers.py +0 -0
  1245. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/attachments/attachment_upload_test.py +0 -0
  1246. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/attachments/conftest.py +0 -0
  1247. {core_framework-3.3.0/tests/integration/api/admin/users → core_framework-4.0.1/tests/integration/api/auth}/__init__.py +0 -0
  1248. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/auth/router_test.py +0 -0
  1249. {core_framework-3.3.0/tests/integration/api/auth → core_framework-4.0.1/tests/integration/api/comments}/__init__.py +0 -0
  1250. {core_framework-3.3.0/tests/integration/api/comments → core_framework-4.0.1/tests/integration/api/comments/authenticated}/__init__.py +0 -0
  1251. {core_framework-3.3.0/tests/integration/api/comments/authenticated → core_framework-4.0.1/tests/integration/api/comments/public}/__init__.py +0 -0
  1252. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/media/ingest_contract_test.py +0 -0
  1253. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/mentions/mentions_integration_test.py +0 -0
  1254. {core_framework-3.3.0/tests/integration/api/comments/public → core_framework-4.0.1/tests/integration/api/notifications}/__init__.py +0 -0
  1255. {core_framework-3.3.0/tests/integration/api/notifications → core_framework-4.0.1/tests/integration/api/posts}/__init__.py +0 -0
  1256. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/authenticated/post_writes_integration_test.py +0 -0
  1257. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/comment_count_aggregation_test.py +0 -0
  1258. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/followers_visibility_test.py +0 -0
  1259. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/post_attachments_integration_test.py +0 -0
  1260. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/post_stats_dirty_marking_test.py +0 -0
  1261. {core_framework-3.3.0/tests/integration/api/posts → core_framework-4.0.1/tests/integration/api/posts/public}/__init__.py +0 -0
  1262. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/posts/public/router_test.py +0 -0
  1263. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/public_read_by_id_unavailable_detail_test.py +0 -0
  1264. {core_framework-3.3.0/tests/integration/api/posts/public → core_framework-4.0.1/tests/integration/api/ratings}/__init__.py +0 -0
  1265. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/system/__init__.py +0 -0
  1266. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/system/router_test.py +0 -0
  1267. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/__init__.py +0 -0
  1268. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/account_deletion_email_test.py +0 -0
  1269. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/authenticated/__init__.py +0 -0
  1270. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/authenticated/profile_media_upload_test.py +0 -0
  1271. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/deletion_audit_integration_test.py +0 -0
  1272. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/api/users/public/__init__.py +0 -0
  1273. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/conftest.py +0 -0
  1274. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/__init__.py +0 -0
  1275. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/_aggregate_stats_helpers.py +0 -0
  1276. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/_arq_helpers.py +0 -0
  1277. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/_media_upload_helpers.py +0 -0
  1278. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/aggregate_post_stats_test.py +0 -0
  1279. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/analytics_prune_test.py +0 -0
  1280. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/analytics_refresh_test.py +0 -0
  1281. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/attachment_upload_test.py +0 -0
  1282. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/conftest.py +0 -0
  1283. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/moderation_outbox_test.py +0 -0
  1284. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/read_notifications_retention_test.py +0 -0
  1285. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/stale_staging_sweep_test.py +0 -0
  1286. {core_framework-3.3.0 → core_framework-4.0.1}/tests/integration/worker/user_outbox_test.py +0 -0
  1287. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/__init__.py +0 -0
  1288. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/api/dedupe_preserving_order_test.py +0 -0
  1289. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/api/posts/authenticated/post_update_mapper_test.py +0 -0
  1290. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/api/users/profile_update_mapper_test.py +0 -0
  1291. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/application/comments/__init__.py +0 -0
  1292. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/application/shared/request_context_test.py +0 -0
  1293. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/application/users/deletion_audit_test.py +0 -0
  1294. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/core/bundled_alembic_test.py +0 -0
  1295. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/core/migrate_cli_test.py +0 -0
  1296. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/docs/_api_reference.py +0 -0
  1297. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/docs/api_routes_test.py +0 -0
  1298. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/domains/__init__.py +0 -0
  1299. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/domains/comment/__init__.py +0 -0
  1300. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/domains/post/models_test.py +0 -0
  1301. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/infrastructure/__init__.py +0 -0
  1302. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/infrastructure/media/__init__.py +0 -0
  1303. {core_framework-3.3.0 → core_framework-4.0.1}/tests/unit/infrastructure/media/ssh_finals_publisher_adapter_test.py +0 -0
@@ -0,0 +1,50 @@
1
+ ---
2
+ description: Core non-negotiables — behavior, tech stack, layer direction, host scope
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Constitution
7
+
8
+ ## Behavior
9
+
10
+ - State assumptions; ask when unclear. Prefer the simplest correct solution.
11
+ - Use the terms in [`docs/platform/glossary.md`](docs/platform/glossary.md) in **new** writing. Do not invent synonyms for those concepts. Do not rewrite shipped ADRs or docs solely to match the glossary.
12
+ - Touch only what the task requires. Match existing style. Remove orphans your edits create.
13
+ - Define verifiable success criteria for non-trivial work.
14
+ - **Wait for the third copy before you extract** — do not extract a private function used once or twice when it is only a few lines (identifier quoting, a short SQL fragment, pass-through wrappers). Extract on the **third** real copy, or earlier when the logic is **~15+ lines / non-obvious branching**, or a scoped rule requires sharing (e.g. normal + `*_strong` repository reads in **`strong-reads.mdc`**). Do not repo-wide refactor unrelated existing helpers.
15
+
16
+ ## Tech stack
17
+
18
+ - Python 3.14, Pydantic v2, PostgreSQL 18, orjson (not stdlib json).
19
+ - Absolute imports only (`from core_framework....`). Comma-style `except A, B:` is intentional.
20
+ - Prefer newer APIs and **current Python syntax** over older equivalents still legal on 3.14, for example:
21
+ - `asyncio.TaskGroup` over `asyncio.gather`
22
+ - PEP 695 type parameters (`def f[T](...)`, `def f[**P, R](...)`) over module-level `TypeVar` / `ParamSpec`
23
+ - Built-in generics (`list[str]`, `dict[str, int]`) over `typing.List` / `typing.Dict`
24
+ - `X | Y` over `Optional[X]` / `Union[X, Y]` unless a library API requires the old form
25
+ - Do **not** add `from __future__ import annotations` — 3.14 deferred annotations are the default (PEP 649)
26
+
27
+ ## Layers
28
+
29
+ Dependencies point inward: API/worker → application → domain. Never reverse.
30
+
31
+ - **API/worker** — transport adapters; call application services.
32
+ - **Application** — orchestration shared by API + worker; no FastAPI types.
33
+ - **Domain** — models, repositories (Postgres only), services. No API/worker/application imports except wiring in `dependencies.py`.
34
+
35
+ Path-scoped rules under `.cursor/rules/` add detail (API, domains, docs, etc.). For FastAPI/Pydantic work in `core_framework/api/`, use the **fastapi** skill (`.agents/skills/fastapi/`).
36
+
37
+ ## Agent skills
38
+
39
+ - Package skills (for example **fastapi**) are Library Skills-managed symlinks under **`.agents/skills/<name>/`**. Rules and hand-authored skills reference that path, not a copied tree under **`.cursor/skills/`**.
40
+ - **`.cursor/skills/<name>`** may symlink to **`.agents/skills/<name>`** for Cursor; Library Skills repairs **`.agents/skills`** links when packages move. After **`uv sync`** or a dependency upgrade, run **`uvx library-skills --yes`** if symlinks are stale.
41
+
42
+ ## Host applications
43
+
44
+ Do not edit consuming host repos in the same task as core-framework work unless the user scopes work to a host or asks to sync/upgrade. See the **sync-host-rules** skill.
45
+
46
+ ## Feature implementation
47
+
48
+ When the user asks to **grill**, interview, or sharpen a design before building, use the **grill** skill (`.cursor/skills/grill/`). Do not start **implement-feature** until that alignment is done (or the user skips it).
49
+
50
+ Greenfield features (DB → API → repository → service → **documentation** → tests): use the **implement-feature** skill — one layer per response unless the user says otherwise. A feature is **not done** until documentation is updated. A **main feature** is **not done** until its design doc includes a mermaid flowchart of the main control flow (see the **implement-feature** skill). Do not backfill charts onto unrelated older design docs in the same task.
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: HTTP error boundaries — application vs domain exceptions, handlers, anti-enumeration
3
+ globs:
4
+ - core_framework/core/exception_handlers/**/*.py
5
+ - core_framework/application/**/*.py
6
+ - core_framework/api/**/router.py
7
+ - core_framework/api/**/schemas.py
8
+ - core_framework/domains/**/exceptions.py
9
+ ---
10
+
11
+ # Error boundary
12
+
13
+ Platform contract: **`docs/platform/client-error-visibility.md`**. Domain imports: **`domain-imports.mdc`**.
14
+
15
+ ## Layers
16
+
17
+ | Layer | Outward errors | HTTP |
18
+ |-------|----------------|------|
19
+ | **Application** | **`application.shared.exceptions`**, **`InvalidPageTokenError`** | Handlers map type → status + catalog **`detail`** |
20
+ | **API** | Pydantic; **`HTTPException`** for transport-local guards | **422** field errors; router-chosen status + **`detail`** |
21
+ | **Domain typed** | Internal — not imported by API/application | No typed handlers |
22
+ | **Domain `BaseXxxException`** | Handler catch-all only | **500** if leaked |
23
+
24
+ ## Application and domain
25
+
26
+ - Application **must not** import or raise typed domain exceptions. Signal via **`None`**, empty collections, or **`application.shared.exceptions`**.
27
+ - Typed domain exceptions inherit domain **`BaseXxxException`** → **`BaseDomainException`**. Export **only** **`BaseXxxException`** from domain **`__init__.py`**, not typed subclasses.
28
+ - **`DomainValidationError`** → dedicated **400** handler + **`GENERIC_BAD_REQUEST_DETAIL`**; do not put internal reason in HTTP **`detail`**.
29
+ - Leaked typed domain exception → **`BaseDomainException`** handler → **500** + **`GENERIC_INTERNAL_SERVER_ERROR_DETAIL`**.
30
+
31
+ ## Handler registration
32
+
33
+ - Use **`register_exception_handler`** from **`core_framework.core.exception_handlers.common`** — not raw **`app.add_exception_handler`** elsewhere.
34
+ - Register handlers in **`core_framework/core/exception_handlers/setup.py`** and **`application.py`**: application types (specific before any base), **`InvalidPageTokenError`**, cashews **`RateLimitError`** (**429**), **`DomainValidationError`**, one **`BaseDomainException`** leak handler, then **`Exception`** unmapped.
35
+ - No per-domain handler modules for typed exceptions. Handlers translate only — no business logic or repository calls.
36
+ - Do not log **error** for expected application 4xx; **`DomainValidationError`** at **warning**/**info**.
37
+
38
+ ## Catalog constants
39
+
40
+ **`GENERIC_BAD_REQUEST_DETAIL`** (400), **`GENERIC_NOT_FOUND_DETAIL`** (404), **`GENERIC_FORBIDDEN_DETAIL`** (403), **`GENERIC_CONFLICT_DETAIL`** (409), ingest 413/415, **`GENERIC_UNPROCESSABLE_ENTITY_DETAIL`** (422), **`GENERIC_TOO_MANY_REQUESTS_DETAIL`** (429), **`GENERIC_SERVICE_UNAVAILABLE_DETAIL`** (503), **`GENERIC_INTERNAL_SERVER_ERROR_DETAIL`** (500).
41
+
42
+ ## Anti-enumeration (public routes)
43
+
44
+ - Read-by-id: missing / hidden / withheld → same status + **`GENERIC_NOT_FOUND_DETAIL`** where flow docs align.
45
+ - Idempotent writes on unknown ids → **204** without leaking existence. Empty list pages are OK.
46
+ - Admin/internal routes may differ when documented. Intentional existence-check endpoints are separate product surface.
47
+
48
+ ## Validation order
49
+
50
+ User-fixable input shape → API schemas (**422**) or router **`HTTPException`**. Use-case outcomes → application exceptions + handlers. Domain backstops → **`DomainValidationError`** → generic **400** (never domain text in **`detail`**).
51
+
52
+ ## Logging
53
+
54
+ Do not **`logger.error`** at every domain **`raise`**.
55
+
56
+ Apply to new handlers and touched raise sites unless the task scopes repo-wide migration.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Flow docs describe user-facing API behavior only — no implementation code
3
+ globs:
4
+ - docs/domains/**/*.md
5
+ alwaysApply: false
6
+ ---
7
+
8
+ # Flow documentation
9
+
10
+ Flow docs under **`docs/domains/{domain}/`** describe **client-visible API behavior**, not implementation.
11
+
12
+ - **Include**: endpoints, auth, request/response fields (text, not JSON examples), errors, idempotency, side effects. A mermaid **flowchart** when the flow is a main multi-step lifecycle (schedule/cancel/worker, command then fan-out) — match **`account_deletion.md`**, **`restrictions.md`**. Skip for a single CRUD endpoint; do not backfill unrelated older flow docs in the same task.
13
+ - **Exclude**: Python/SQL snippets, function names, layer internals, schema DDL — see **`no-code-in-docs.mdc`**.
14
+
15
+ When creating or rewriting flow docs, use the **write-flow-doc** skill and match existing docs (e.g. **`profile.md`**, **`restrictions.md`**).
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Ignore exploratory ClickHouse warehouse notes unless the user explicitly opens that topic
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Ignore analytics-warehouse notes
7
+
8
+ [`docs/design/analytics-warehouse-design.md`](docs/design/analytics-warehouse-design.md) is an **exploratory scratchpad**. It is **not** in the pipeline, **not** a backlog item, and **not** a constraint on the shipped system.
9
+
10
+ ## Do not
11
+
12
+ - Read, cite, or align work to that document when changing events ingest, analytics rollup, `post_views` / `*_stats`, settings, workers, hosts, or any other area.
13
+ - Add ClickHouse, a richer `POST /events` envelope, warehouse sinks, or “buffer vs diary” migrations **because** that doc exists.
14
+ - Treat its placement rules, sequence, or sale/consent notes as accepted ADRs.
15
+
16
+ ## Do
17
+
18
+ - Follow shipped docs: [`docs/domains/events/events.md`](docs/domains/events/events.md), [`docs/design/events-ingest-design.md`](docs/design/events-ingest-design.md), [`docs/design/analytics-rollup-design.md`](docs/design/analytics-rollup-design.md), [`docs/domains/posts/post_stats_aggregation.md`](docs/domains/posts/post_stats_aggregation.md).
19
+ - Open the warehouse notes **only** when the user explicitly asks about that file, ClickHouse warehouse, or returning to that idea.
20
+
21
+ If the user later wants it implemented, they will say so; then make it fit the system as it exists at that time.
@@ -0,0 +1,30 @@
1
+ ---
2
+ description: Integration tests should prefer API-level assertions when endpoints exist
3
+ globs:
4
+ - tests/integration/**/*.py
5
+ ---
6
+
7
+ # Integration Test Strategy
8
+
9
+ Treat integration tests as black-box API behavior tests whenever possible.
10
+
11
+ ## Core Rule
12
+
13
+ - Prefer exercising behavior through HTTP endpoints and asserting API responses.
14
+ - Use internal/database assertions only when no API endpoint exists yet for that behavior.
15
+ - Name the test so a failure line states the broken invariant, not the endpoint/function or a generic `success` / `happy_path`.
16
+
17
+ ## Lifecycle Guidance
18
+
19
+ - During initial endpoint implementation (for example, POST exists but GET does not), internal assertions are acceptable to confirm persistence/side effects.
20
+ - After the corresponding read/inspect endpoint is implemented, migrate assertions to that API path and avoid direct DB checks for the same behavior.
21
+
22
+ ## Allowed Internal Checks
23
+
24
+ - Setup/seed data when there is no practical API path for test preconditions.
25
+ - Verify side effects that are intentionally not exposed via API (for example, queue internals, non-user-facing audit fields).
26
+
27
+ ## Avoid
28
+
29
+ - Testing API behavior by primarily querying the database when an API route already exposes that behavior.
30
+ - Coupling integration tests to repository internals when a stable endpoint contract is available.
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Docs avoid implementation code; HTTP interface listings and schema DDL are OK
3
+ globs: docs/**/*.md
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # No Code in Documentation
8
+
9
+ Documentation under **`docs/`** must not carry **implementation** snippets that belong in the repo (executable Python, shell, operational SQL queries, etc.). **`docs/`** describes **what** and **why**; the codebase shows **how**.
10
+
11
+ ## What to exclude
12
+
13
+ - Python class/function definitions or examples
14
+ - **SQL for data access or mutation** — `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `MERGE`, CTE-heavy reports, cleanup queries, etc. (describe behavior in prose or name the operation; do not paste DML/query text)
15
+ - Shell commands — **except** in deployment runbooks under **`docs/deployments/`** (see *Exceptions* below)
16
+ - Pseudocode that mimics real code syntax
17
+ - Inline backticked references to internal function/method/class names when prose suffices (prefer describing behavior)
18
+
19
+ ## What is allowed
20
+
21
+ - **HTTP API interface listings** — fenced **`http`** blocks or plain lines listing `METHOD /path # short note`. That is **surface contract**, not implementation code.
22
+ - **SQL for table creation / physical design** — e.g. `CREATE TABLE` (and table-level DDL in the same design story, such as `CREATE INDEX`). DDL is a design artifact, not runtime query text.
23
+ - ASCII diagrams and flowcharts (box-drawing characters)
24
+ - Mermaid diagrams (preferred for main-feature control flow: fenced `mermaid` with `flowchart TD` / `flowchart LR`)
25
+ - Markdown tables of fields and types (`jsonb`, `varchar(26)`, etc.)
26
+ - Plain-text lifecycle diagrams (arrows, boxes)
27
+ - File/directory tree layouts (plain text or a neutral fence such as `text` if helpful)
28
+
29
+ ## Exceptions
30
+
31
+ - **Deployment runbooks** under **`docs/deployments/`** (setup guides, deploy/release playbooks, SSH/image-server guides) may include fenced **`bash`** shell blocks. These are operator instructions for interactive server setup, not implementation that drifts from source; copy-paste commands are the practical content. This exemption does **not** extend to **`docs/deployments/*-design.md`** design docs, which follow the general rules above.
32
+ - **Design docs** under **`docs/design/`**, **`docs/platform/`**, and **`docs/library/`** (and **`docs/deployments/*-design.md`**) follow the general allow/exclude lists — DDL is allowed, DML and Python are not. Flow docs under **`docs/domains/**`** are stricter: see **`flow-documentation.mdc`** (no DDL, no JSON request bodies, fields described as text/tables).
33
+
34
+ ## Rationale
35
+
36
+ Implementation snippets in docs drift from source. **HTTP listings** stay stable as the public contract. **DDL** documents intended physical shape. **DML** and **application code** belong in migrations and modules. Deployment runbooks are operator-facing setup instructions where shell commands are the deliverable, not source-bound implementation.
@@ -0,0 +1,57 @@
1
+ ---
2
+ description: Postgres write/read config and wiring conventions
3
+ globs:
4
+ - core_framework/core/settings.py
5
+ - core_framework/core/runtime.py
6
+ - config.toml
7
+ - config.toml.template
8
+ - docs/deployments/**/*.md
9
+ alwaysApply: false
10
+ ---
11
+
12
+ # Postgres Config Conventions
13
+
14
+ Use explicit write/read configuration and keep schema names shared.
15
+
16
+ ## Settings Model
17
+
18
+ - Use `PostgresConnectionConfig` for connection and pool settings.
19
+ - Use `PostgresSchemasConfig` for schema names.
20
+ - Settings fields must be:
21
+ - `write_postgres`
22
+ - `read_postgres`
23
+ - `postgres_schemas`
24
+ - Do not reintroduce `settings.postgres`.
25
+
26
+ ## Config Files
27
+
28
+ - `config.toml` and `config.toml.template` must contain:
29
+ - `[write_postgres]`
30
+ - `[read_postgres]`
31
+ - `[postgres_schemas]`
32
+ - Keep schema values only in `[postgres_schemas]` (no schema duplication inside write/read sections).
33
+
34
+ ## Deploy Variables
35
+
36
+ - Use separate env vars for write/read DB rendering:
37
+ - `WRITE_POSTGRES_HOST`, `WRITE_POSTGRES_PORT`, `WRITE_POSTGRES_USER`, `WRITE_POSTGRES_PASSWORD`, `WRITE_POSTGRES_DB`
38
+ - `READ_POSTGRES_HOST`, `READ_POSTGRES_PORT`, `READ_POSTGRES_USER`, `READ_POSTGRES_PASSWORD`, `READ_POSTGRES_DB`
39
+ - Do not use shared `POSTGRES_*` vars for both sections.
40
+
41
+ ## Runtime Wiring
42
+
43
+ - Core module globals (`core_framework.core`) export separate instances:
44
+ - `write_postgres`
45
+ - `read_postgres`
46
+ - `CoreRuntime` also holds `outbox_postgres`: same database as `write_postgres`, separate pool sized from `[outbox]` (`min_connections` / `max_connections`). The worker connects it at startup; the API lifespan does not. Do not rebind it as a `core_framework.core` global.
47
+ - Domain dependencies pass `(write, read, strong)` explicitly to repositories.
48
+ - Until a dedicated strong instance exists, use write instance for the strong argument intentionally.
49
+
50
+ ## Schema names in SQL
51
+
52
+ - Schema names come only from `settings.postgres_schemas` (see **Settings Model** above).
53
+ - Domain `dependencies.py` passes unquoted `schema=runtime.settings.postgres_schemas.schema_<domain>` into repositories (keyword-only `__init__`).
54
+ - Repositories cache `self.schema_sql = quote_postgres_identifier(schema)` and use `{self.schema_sql}.table` in f-string SQL — never hard-coded `"post".` literals.
55
+ - Outbox producer adapter is wired per domain with `schema` at construction; consumer adapter receives unquoted `schema` per call and caches quoted SQL.
56
+
57
+ Repository isolation rules (no cross-domain schema access): **`repository-schema-isolation.mdc`**.
@@ -0,0 +1,89 @@
1
+ ---
2
+ description: Domain repositories must not query other domains' Postgres schemas
3
+ globs:
4
+ - core_framework/domains/**/repository.py
5
+ alwaysApply: false
6
+ ---
7
+
8
+ # Repository schema isolation
9
+
10
+ Each domain repository may only read/write tables in **its own** Postgres schema.
11
+
12
+ Canonical rule: `docs/platform/layers-and-boundaries.md` — *no cross-domain schema reads, writes, joins, or foreign keys*.
13
+
14
+ ## Schema qualification
15
+
16
+ Repositories receive unquoted `schema` from `runtime.settings.postgres_schemas` in `dependencies.py` (keyword-only `__init__` arg). In `__init__`:
17
+
18
+ - `self.schema` — config schema name (e.g. `post`)
19
+ - `self.schema_sql` — `quote_postgres_identifier(schema)` for SQL interpolation
20
+
21
+ Use `{self.schema_sql}.table` in f-string SQL — not hard-coded `"post".` literals.
22
+
23
+ ## Allowed in a repository
24
+
25
+ - SQL qualified with that domain's schema only (e.g. `{self.schema_sql}.posts` in `PostRepository`).
26
+ - **Within-schema** policy gates (e.g. `insert_post_like` checks `{self.schema_sql}.posts.status = active`).
27
+ - **Lookup mirrors** in the same schema (`user_blocks_lookup`, `user_restrictions_lookup`, `user_followers_lookup`) — synced by application flows; mirrors are not authoritative.
28
+
29
+ ## Forbidden in a repository
30
+
31
+ - `FROM` / `JOIN` / `EXISTS` / `INSERT … SELECT` against another domain's schema.
32
+ - Importing another domain's `service`, `repository`, or models to enforce policy.
33
+
34
+ ```python
35
+ # ❌ moderation/repository.py — cross-domain EXISTS (illustrative schema literals)
36
+ insert into {moderation_schema_sql}.post_reports (...)
37
+ select $1, $2, $3, $4
38
+ where exists (
39
+ select 1 from {post_schema_sql}.posts
40
+ where id = $2 and status = 'active'
41
+ )
42
+
43
+ # ❌ notification/repository.py — cross-domain mute gate
44
+ insert into {notification_schema_sql}.notification_mutes (...)
45
+ select ...
46
+ where exists (select 1 from {comment_schema_sql}.comments where ...)
47
+ ```
48
+
49
+ ## Alembic migrations (different convention)
50
+
51
+ Do **not** apply repository schema-qualification rules to `alembic/**/versions/*.py`.
52
+
53
+ Each domain Alembic tree sets `search_path` to that domain's schema in `env.py`. Migration SQL uses **unqualified** table and type names (`posts`, `post_reports`, `create type post_status …`) — not `"post".posts`.
54
+
55
+ **Exception — PL/pgSQL trigger / function bodies:** Runtime `search_path` for functions is not the migration session’s path, so audit trigger bodies may **hard-code** that domain’s schema qualifier (e.g. `"user".user_change_history`, `moderation.restriction_history`). That is required and accepted. Keep `[postgres_schemas]` values aligned with those literals; do not treat this as a B11 isolation violation.
56
+
57
+ **Exception — shared extension-schema types:** Domain Alembic `env.py` sets `search_path` to that domain’s schema only, so types and operator classes that live in the shared extensions schema must be **hard-coded** as `extension.…` (e.g. `extension.ltree` on comment `path`, `extension.gin_trgm_ops` on user `username`). That is required and accepted. Leave `[postgres_schemas].schema_extension` as **`extension`** (see `docs/library/overview.md`); do not treat this as a B11 isolation violation.
58
+
59
+ Cross-domain rules still apply to migrations:
60
+
61
+ - No `REFERENCES` / FKs to tables in another domain's schema.
62
+ - No DDL that reads or writes another domain's objects.
63
+
64
+ Stay within the migration tree's domain; one schema per Alembic env.
65
+
66
+ ## Where cross-domain policy belongs
67
+
68
+ **Application layer** (or domain service orchestration via dependencies, never cross-schema SQL):
69
+
70
+ ```python
71
+ # ✅ application/posts/authenticated_service.py
72
+ post = await post_deps.post_service.retrieve_post_with_metadata_by_id_if_exists(post_id=post_id)
73
+ if post is None or post.status != PostStatus.ACTIVE:
74
+ return False
75
+ return await moderation_deps.moderation_service.add_post_report(...)
76
+ ```
77
+
78
+ Before adding a repository write that depends on another domain's row state:
79
+
80
+ 1. Can the owning domain gate it within its schema? → do that (likes, views, stats dirty).
81
+ 2. Otherwise → gate in `application/**/*_service.py` via the owning domain's service API.
82
+
83
+ ## Self-check (repositories only)
84
+
85
+ In `domains/<name>/repository.py`:
86
+
87
+ - Every table/type qualifier in SQL must use `{self.schema_sql}.…` (that domain's schema only).
88
+ - Do not hard-code `"user".`, `"post".`, etc. — use `self.schema` / `self.schema_sql` from config.
89
+ - Mirror lookup tables (`user_blocks_lookup`, etc.) still live under `{self.schema_sql}` when they belong to that domain's schema.
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: Strong read policy and repository naming for read-after-write consistency
3
+ globs:
4
+ - core_framework/domains/**/repository.py
5
+ - core_framework/domains/**/service.py
6
+ - core_framework/domains/**/dependencies.py
7
+ - core_framework/application/**/*.py
8
+ ---
9
+
10
+ # Strong reads
11
+
12
+ ## Policy
13
+
14
+ - **Read-after-write** in the same HTTP request or worker job → **strong** read (required). Refetch with `strong_read_database`, `*_strong` repository methods, or service accessors that call them.
15
+ - **Decision-critical guards** where stale data can cause incorrect branching → **strong** read (required). These are reads performed to decide a branch (for example pre-write existence, role, or state checks that determine whether a write runs or which outcome is returned), even when there is no immediate prior write in the flow. See the "Read Consistency (Strong vs Normal Reads)" ADR.
16
+ - **Accepted exception:** **`check_caller_identity`** / **`check_not_banned`** (alias) / **`get_user_detail`** (`USER_DETAIL_V2` cache + normal reads) — ban, deleted-user, and account-removal-in-progress visibility are eventually consistent by design. The removal-started fence rides that cache; do not strong-read it on every gated request. See **`docs/platform/architecture-decisions.md`** → *Ban / identity gate via cached `USER_DETAIL` is eventually consistent*. Do not flag as a strong-read defect unless that ADR is updated.
17
+ - **Accepted exception:** account-removal media **owner listing** of avatar/banner/attachment staging-registry rows uses the **read replica**. Replica lag or swallowed per-blob staging deletes can leave orphan staging after a successful spine. See **`docs/platform/architecture-decisions.md`** → *Account-removal staging leftovers (Accepted)*. Do not flag as a must-succeed or strong-read defect unless that ADR is updated.
18
+ - **Accepted exception:** followers-only **mention** recipient filtering uses the **follow replica** (`retrieve_follow_exists`, not `_strong`). Lag-window miss or extra mention is accepted. See **`docs/platform/architecture-decisions.md`** → *Followers-only mention eligibility uses the follow replica (Accepted)*. Do not flag as a strong-read defect unless that ADR is updated.
19
+ - **All other strong-read usage** (e.g., list/browse freshness) → opt-in unless the user explicitly requested it in the task.
20
+ - If a flow writes then reads and only a normal-read API exists, add or extend the `*_strong` path and call it from that flow.
21
+ - Repositories accept `strong_read_database: Postgres` on `__init__` for wiring symmetry even when unused.
22
+
23
+ ## Repository pattern
24
+
25
+ - Normal reads: explicit methods (e.g. `select_appeal`) using `read_database`.
26
+ - Strong reads: separate methods only where needed (e.g. `select_appeal_strong`) using `strong_read_database`.
27
+ - Share one private helper that accepts a database handle when **both** normal and strong public methods exist — do not duplicate SQL or mapping. If only a `*_strong` method exists today, keep SQL inline in that method (constitution → inline small single-use helpers).
28
+ - Service accessors that call strong repository methods should use **`retrieve_*_strong`** naming (repositories keep **`select_*_strong`**).
29
+
30
+ ```python
31
+ # Preferred
32
+ async def select_appeal(self, *, appeal_id: int) -> Appeal:
33
+ return await self._select_appeal_with_database(appeal_id=appeal_id, database=self.read_database)
34
+
35
+ async def select_appeal_strong(self, *, appeal_id: int) -> Appeal:
36
+ return await self._select_appeal_with_database(appeal_id=appeal_id, database=self.strong_read_database)
37
+ ```
38
+
39
+ Keep consistency decisions in services/use-case orchestration, not hidden in unrelated call paths.
@@ -0,0 +1,85 @@
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
+ ## Output format (required)
32
+
33
+ **Actionable findings only**, under `## Findings`:
34
+
35
+ - 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.
36
+ - One numbered list, prioritized by severity. Each item: file context, what is wrong, fix direction.
37
+ - **Do not** praise, summarize strengths, pad with checklist pass narratives, or emit empty-axis sentences.
38
+ - One-line scope is fine. If there is nothing to address, say so in one sentence — no `## Findings` heading.
39
+
40
+ ## Elaborating review points (required)
41
+
42
+ When the user asks to elaborate, expand, explain, or go deeper on review findings (one point, several, or all):
43
+
44
+ - **Always include concrete examples** for each point — never prose-only elaboration.
45
+ - Prefer examples from the reviewed code: cite the relevant snippet, then show a corrected or alternative version when a fix is implied.
46
+ - If the issue is behavioral (race, ordering, missing branch), give a short before/after scenario or input sequence that triggers it.
47
+ - Keep the example tight (a few lines); do not re-dump the whole review.
48
+
49
+ ## Workflow
50
+
51
+ 1. Pin the diff (named files, or `git diff` against the branch base / range the user gave).
52
+ 1. Identify spec sources (see **Originating docs** above).
53
+ 1. Read **`docs/platform/layers-and-boundaries.md`**, **`conventions.md`**, **`architecture-decisions.md`**, and **`glossary.md`** for the reviewed scope.
54
+ 1. Apply **scoped rules** (`.cursor/rules/*.mdc`) matching files under review — especially **`error-boundary`**, **`domain-imports`**, **`api-layer`**, **`application-layer`**, **`strong-reads`**.
55
+ 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.
56
+ 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.
57
+ 1. Report findings only — no filler.
58
+ 1. On elaborate/expand follow-ups, re-read this skill and apply **Elaborating review points**.
59
+
60
+ ## Quick checks
61
+
62
+ - Application services: no HTTP types, no domain exceptions, no Pydantic return types, one-line docstrings.
63
+ - API: thin routers, validation in schemas, orchestration in application — **fastapi** skill (`.agents/skills/fastapi/`) + **`api-layer`** / **`api-validation`** / **`error-boundary`** rules.
64
+ - Domain: imports only via **`__init__.py`** / **`dependencies`** from outer layers; no caller-context names (**`domain-caller-context`**).
65
+ - Read-after-write refetches use **`*_strong`** where applicable.
66
+ - **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`.
67
+ - **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.
68
+ - **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`).
69
+ - **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.
70
+
71
+ ## Residue
72
+
73
+ 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**.
74
+
75
+ Look for:
76
+
77
+ - Dead registration — worker tasks, enums, schedules, or “keep registered for drain” docs with no remaining producer.
78
+ - Compatibility branches the new producers never write (old payload versions, dual handlers, mirrors-only v1).
79
+ - 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.
80
+ - Docs / OpenAPI still describing the pre-change stored shape, cutover drain, or a history/status value that is never written.
81
+ - Naming leftovers after a rename (old helper name used for a different role).
82
+
83
+ ## Parallel drift
84
+
85
+ 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,59 @@
1
+ ---
2
+ name: design-review
3
+ description: >-
4
+ Review design / system-design docs for implementation readiness. Use when the
5
+ user asks to review a design, system-design, or product-design doc; asks if it
6
+ is clear enough for implementation; or asks for blockers before implementation
7
+ — and when they ask to elaborate, expand, or explain those review findings.
8
+ Do not use when the user wants to grill or interview a design into existence
9
+ (use grill).
10
+ ---
11
+
12
+ # Design Review
13
+
14
+ This skill reviews an **existing** design doc. If there is no doc yet, or the user wants to form or sharpen one, use the **grill** skill first.
15
+
16
+ ## Goal
17
+
18
+ Review comprehensively to see if everything is clear enough for implementation.
19
+
20
+ ## Output filter (required)
21
+
22
+ - **Ignore** things that can be decided during implementation.
23
+ - **Only** report things that are blockers or should be addressed before implementation.
24
+ - No praise, strength summaries, or “looks good except…” padding.
25
+ - If nothing blocks implementation, say so in one sentence.
26
+
27
+ ## Finding shape
28
+
29
+ For each finding:
30
+
31
+ - What is unclear, underspecified, or contradictory for an implementer.
32
+ - Why it is a pre-implementation blocker (not a coding preference).
33
+ - Where in the doc (section / quote) the gap shows up.
34
+
35
+ ## Elaborating review points (required)
36
+
37
+ When the user asks to elaborate, expand, explain, or go deeper on review findings (one point, several, or all):
38
+
39
+ - **Always include concrete examples** for each point — never prose-only elaboration.
40
+ - Prefer examples grounded in the doc: quote the ambiguous passage, then show 2+ plausible implementer interpretations or a minimal scenario the doc does not settle.
41
+ - When a fix is implied, show a short sample clarification the doc could add (a few lines).
42
+ - Keep examples tight; do not re-dump the whole review.
43
+
44
+ ## Workflow
45
+
46
+ 1. Locate and read the named design doc (and closely linked sibling design/flow docs if the doc depends on them).
47
+ 1. Judge only implementation readiness: missing contracts, ambiguous states/transitions, unresolved ownership, contradictory requirements, undefined error/idempotency/auth boundaries that an implementer cannot safely invent.
48
+ 1. For a **main-feature** design being written or implemented **now**: a missing mermaid **`flowchart`** of the main control flow is a blocker (see **Main-feature flowchart** below).
49
+ 1. Drop niceties, optional polish, and choices that are safe to defer to implementation.
50
+ 1. Report blockers / must-address-before-implementation only.
51
+ 1. On elaborate/expand follow-ups, re-read this skill and apply **Elaborating review points**.
52
+
53
+ ## Main-feature flowchart
54
+
55
+ A main feature is one with a design doc (`docs/design/*-design.md` or `docs/domains/**/*-design.md`) covering a spine, registry, multi-phase pipeline, or product system.
56
+
57
+ If that doc is the subject of this review because it is being designed or implemented **now**, and it has no mermaid **`flowchart`** of the main control flow (phases, barriers, branches — style of `docs/design/account-removal-spine-design.md` and `docs/design/moderation-restriction-fanout-design.md`), that is a **pre-implementation blocker**. An implementer should not have to invent the order of phases.
58
+
59
+ Do **not** flag a historic shipped design **solely** for lacking a chart — that backfill is a separate pass. Do flag a missing or stale chart when **this** change alters that design’s control flow.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: grill
3
+ description: >-
4
+ Relentless interview to align a plan or design, then write glossary terms,
5
+ offered ADRs, and the design doc. Use only when the user asks to grill,
6
+ interview, sharpen, or stress-test a design before implementation.
7
+ disable-model-invocation: true
8
+ ---
9
+
10
+ # Grill
11
+
12
+ Interview until the design tree is resolved. Then write the paper trail. Do **not** implement.
13
+
14
+ This is how a design **forms**. **design-review** checks an existing doc for implementation readiness. **implement-feature** builds after that.
15
+
16
+ ## Surfaces (this repo)
17
+
18
+ | Write here | Not here |
19
+ | ------------------------------------------------------------------------------------------------------------ | -------------------------------------- |
20
+ | [`docs/platform/glossary.md`](docs/platform/glossary.md) — terms only | Root `CONTEXT.md` |
21
+ | [`docs/platform/architecture-decisions.md`](docs/platform/architecture-decisions.md) — ADRs the user accepts | `docs/adr/` |
22
+ | Design doc: `docs/design/*-design.md` (cross-cutting) or `docs/domains/**/*-design.md` (one product area) | GitHub issues, tickets, `docs/todo.md` |
23
+
24
+ Glossary is **not** a spec. ADRs are **not** a glossary. The design doc holds the plan.
25
+
26
+ ## Design tree
27
+
28
+ Map the work as a tree: each settled decision unlocks the questions that hang off it.
29
+
30
+ The **frontier** is every unresolved decision whose prerequisites are already settled. Ask the whole frontier in one round. Wait for answers before the next round. A question that depends on another still-open question in this round belongs to a later round.
31
+
32
+ The session is done when the frontier is empty and the user confirms shared understanding.
33
+
34
+ ## Facts vs decisions
35
+
36
+ **Facts** are the agent's job (code, docs, current behavior). Look them up; do not ask the user for anything you can read. Dispatch exploration rather than blocking the whole round: questions that do not depend on the lookup still go in this round.
37
+
38
+ **Decisions** are the user's. Put each on the frontier and wait.
39
+
40
+ ## Round format
41
+
42
+ Number questions. Each has a recommended answer. Use this shape:
43
+
44
+ ```
45
+ ❓ **Q1** — **<title>**: <body; choices if useful>
46
+
47
+ ➡️ <recommended answer>
48
+ ```
49
+
50
+ Do not implement, scaffold, or start **implement-feature** during grilling.
51
+
52
+ ## Language (inline)
53
+
54
+ Read [`docs/platform/glossary.md`](docs/platform/glossary.md) at the start.
55
+
56
+ - If the user uses a term that conflicts with the glossary, challenge it immediately.
57
+ - If they use a vague or overloaded word, propose one canonical term and list what to avoid.
58
+ - When a term is resolved, **update the glossary in the same turn**. Do not batch terms until the end.
59
+ - Glossary entries: one or two sentences of what it **is**; `_Avoid_:` for names not to use in **new** writing. Do not rewrite shipped ADRs or docs to match. No implementation, no API paths, no file names.
60
+
61
+ ## ADRs (offer, do not dump)
62
+
63
+ Offer an entry in `architecture-decisions.md` only when **all three** are true:
64
+
65
+ 1. **Hard to reverse** — changing it later is costly.
66
+ 1. **Surprising without context** — a future reader will wonder why it is this way.
67
+ 1. **A real trade-off** — genuine alternatives, picked for stated reasons.
68
+
69
+ If any gate fails, skip the ADR. Copy headings from a nearby entry in that file. Required: **Decision**, **Rationale**, **Location**. Add **Policy** when the decision has standing operational constraints (same as neighboring entries). Ask before inserting. Place it in the right section of that file.
70
+
71
+ ## After the frontier is empty
72
+
73
+ 1. Confirm shared understanding with the user. Do not write the design doc until they confirm.
74
+ 1. Create or update the design doc. Follow existing design docs and **`no-code-in-docs.mdc`**. A **main feature** (spine, registry, multi-phase pipeline, product system) needs a mermaid **`flowchart`** of the main control flow — same role as `docs/design/account-removal-spine-design.md`. If this creates a new `*-design.md`, add it to the index: `docs/design/README.md` when cross-cutting, `docs/domains/README.md` when domain-scoped.
75
+ 1. Point the user at **design-review** next, then **implement-feature**. Stop.