matrx-orm 3.1.207__tar.gz → 3.1.209__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 (436) hide show
  1. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/.gitignore +5 -0
  2. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/CHANGELOG.md +7 -0
  3. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/CLAUDE.md +1 -1
  4. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/PKG-INFO +2 -2
  5. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/associations.py +31 -4
  6. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/pyproject.toml +2 -2
  7. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_associations.py +78 -0
  8. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/AGENTS.md +0 -0
  9. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/BASE_CLASS_METHODS.md +0 -0
  10. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/MODEL_API.md +0 -0
  11. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/README.md +0 -0
  12. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/database/orm/extended/managers/ai_model_base.py +0 -0
  13. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/docs/migrations.md +0 -0
  14. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/FEATURE.md +0 -0
  15. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/MODULE_README.md +0 -0
  16. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/__init__.py +0 -0
  17. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/MODULE_README.md +0 -0
  18. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/__init__.py +0 -0
  19. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/async_postgresql.py +0 -0
  20. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/base_adapter.py +0 -0
  21. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
  22. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/adapters/supabase_adapter.py +0 -0
  23. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/admin/FEATURE.md +0 -0
  24. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/admin/__init__.py +0 -0
  25. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/admin/router.py +0 -0
  26. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/__init__.py +0 -0
  27. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/auth.py +0 -0
  28. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/config.py +0 -0
  29. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/handlers.py +0 -0
  30. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/protocol.py +0 -0
  31. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/api/server.py +0 -0
  32. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/cache_debug.py +0 -0
  33. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/catalog.py +0 -0
  34. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/catalog_sql.py +0 -0
  35. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/MODULE_README.md +0 -0
  36. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/__init__.py +0 -0
  37. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/postgres_connection.py +0 -0
  38. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/postgrest.py +0 -0
  39. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/supabase_auth.py +0 -0
  40. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/supabase_config.py +0 -0
  41. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/client/supabase_manager.py +0 -0
  42. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/EXTENDED-TASK.md +0 -0
  43. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/FEATURE.md +0 -0
  44. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/MODULE_README.md +0 -0
  45. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  46. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/TASKS.md +0 -0
  47. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/__init__.py +0 -0
  48. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/admin_lane.py +0 -0
  49. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/async_db_manager.py +0 -0
  50. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/base.py +0 -0
  51. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/config.py +0 -0
  52. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/connections.py +0 -0
  53. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/db_function.py +0 -0
  54. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/diagnostics.py +0 -0
  55. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/expressions.py +0 -0
  56. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/extended.py +0 -0
  57. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/fields.py +0 -0
  58. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/introspection.py +0 -0
  59. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/listen.py +0 -0
  60. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/loop_filters.py +0 -0
  61. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/model_dto.py +0 -0
  62. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/model_view.py +0 -0
  63. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/one_database.py +0 -0
  64. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/paginator.py +0 -0
  65. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/pool_maintenance.py +0 -0
  66. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/pool_watch.py +0 -0
  67. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/pooler_role.py +0 -0
  68. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/pydantic_bridge.py +0 -0
  69. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/read_write.py +0 -0
  70. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/registry.py +0 -0
  71. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/relations.py +0 -0
  72. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/resilience.py +0 -0
  73. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/rls_session.py +0 -0
  74. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/session_context.py +0 -0
  75. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/signals.py +0 -0
  76. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/statement_ceiling.py +0 -0
  77. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/tls.py +0 -0
  78. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/transaction.py +0 -0
  79. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/types.py +0 -0
  80. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/write_queue.py +0 -0
  81. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/core/write_retry.py +0 -0
  82. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/entity.py +0 -0
  83. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/error_handling.py +0 -0
  84. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/exceptions.py +0 -0
  85. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/extended/__init__.py +0 -0
  86. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/extended/app_error_handler.py +0 -0
  87. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/identity_rule.py +0 -0
  88. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/local_sqlite.py +0 -0
  89. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/matrx_orm_production_door.pth +0 -0
  90. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/middleware/__init__.py +0 -0
  91. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/middleware/base.py +0 -0
  92. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/MODULE_README.md +0 -0
  93. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/__init__.py +0 -0
  94. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/cli.py +0 -0
  95. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/ddl.py +0 -0
  96. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/diff.py +0 -0
  97. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/executor.py +0 -0
  98. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/integration.py +0 -0
  99. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/loader.py +0 -0
  100. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/operations.py +0 -0
  101. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/state.py +0 -0
  102. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/migrations/table_filter.py +0 -0
  103. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/no_org_assignment.py +0 -0
  104. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/FEATURE.md +0 -0
  105. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/MODULE_README.md +0 -0
  106. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/__init__.py +0 -0
  107. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/bulk_update_values.py +0 -0
  108. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/catalog_select.py +0 -0
  109. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/conflict.py +0 -0
  110. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/conflict_writes.py +0 -0
  111. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/create.py +0 -0
  112. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/db_functions.py +0 -0
  113. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/delete.py +0 -0
  114. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/dynamic_admin.py +0 -0
  115. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/dynamic_crud.py +0 -0
  116. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/graph_walk.py +0 -0
  117. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/latest_rows.py +0 -0
  118. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/queue_claim.py +0 -0
  119. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/read.py +0 -0
  120. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/relational_backfill.py +0 -0
  121. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/staging_load.py +0 -0
  122. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/operations/update.py +0 -0
  123. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/platform_access.py +0 -0
  124. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/platform_db.py +0 -0
  125. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/py.typed +0 -0
  126. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/pytest_live_db_guard.py +0 -0
  127. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/pytest_lock_guard.py +0 -0
  128. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/pytest_plugin.py +0 -0
  129. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/pytest_production_door.py +0 -0
  130. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/python_sql/MODULE_README.md +0 -0
  131. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/python_sql/__init__.py +0 -0
  132. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/python_sql/db_objects.py +0 -0
  133. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  134. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  135. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/query/FEATURE.md +0 -0
  136. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/query/MODULE_README.md +0 -0
  137. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/query/__init__.py +0 -0
  138. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/query/builder.py +0 -0
  139. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/query/executor.py +0 -0
  140. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/resources/__init__.py +0 -0
  141. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
  142. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
  143. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/FEATURE.md +0 -0
  144. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/MODULE_README.md +0 -0
  145. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/__init__.py +0 -0
  146. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/code_handler.py +0 -0
  147. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/codegen_writer.py +0 -0
  148. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/columns.py +0 -0
  149. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/common.py +0 -0
  150. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/diff_preview.py +0 -0
  151. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
  152. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/excluded_targets.py +0 -0
  153. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/generator.py +0 -0
  154. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  155. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  156. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  157. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  158. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/package_wiring.py +0 -0
  159. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/relationships.py +0 -0
  160. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/runner.py +0 -0
  161. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/schema.py +0 -0
  162. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/schema_manager.py +0 -0
  163. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/tables.py +0 -0
  164. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/schema_builder/views.py +0 -0
  165. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/FEATURE.md +0 -0
  166. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/__init__.py +0 -0
  167. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/attachments.py +0 -0
  168. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/backup_restore.py +0 -0
  169. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/crypto.py +0 -0
  170. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/host_authorization.py +0 -0
  171. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/items.py +0 -0
  172. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/model.py +0 -0
  173. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
  174. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/native_enable.py +0 -0
  175. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/native_lifecycle.py +0 -0
  176. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/native_passkeys.py +0 -0
  177. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/native_source.py +0 -0
  178. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/org_service.py +0 -0
  179. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/org_vault_gate.py +0 -0
  180. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/service.py +0 -0
  181. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/secrets_battery/vault_history.py +0 -0
  182. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/README.md +0 -0
  183. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/__init__.py +0 -0
  184. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/coalesce.py +0 -0
  185. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/dag.py +0 -0
  186. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/errors.py +0 -0
  187. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/fallback.py +0 -0
  188. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/flush.py +0 -0
  189. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/lifecycle.py +0 -0
  190. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/managed.py +0 -0
  191. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/op.py +0 -0
  192. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/reads.py +0 -0
  193. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/session.py +0 -0
  194. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/session/telemetry.py +0 -0
  195. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/MODULE_README.md +0 -0
  196. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/__init__.py +0 -0
  197. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/executor.py +0 -0
  198. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/queries.py +0 -0
  199. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/registry.py +0 -0
  200. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/types.py +0 -0
  201. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/sql_executor/utils.py +0 -0
  202. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/state.py +0 -0
  203. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/utils/__init__.py +0 -0
  204. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/utils/sql_utils.py +0 -0
  205. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/utils/type_converters.py +0 -0
  206. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/matrx_orm/write_actor.py +0 -0
  207. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/scripts/git-branches.sh +0 -0
  208. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/scripts/publish.sh +0 -0
  209. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/scripts/release.sh +0 -0
  210. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/MODULE_README.md +0 -0
  211. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/__init__.py +0 -0
  212. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/conftest.py +0 -0
  213. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/MODULE_README.md +0 -0
  214. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/__init__.py +0 -0
  215. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_adapter_registry.py +0 -0
  216. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_admin_db_columns.py +0 -0
  217. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_admin_response_rendering.py +0 -0
  218. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_admin_search_negation.py +0 -0
  219. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_admin_search_sentinels.py +0 -0
  220. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_advisory_lock.py +0 -0
  221. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_agent_message.py +0 -0
  222. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_api_auth.py +0 -0
  223. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_api_config.py +0 -0
  224. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_api_handlers.py +0 -0
  225. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_api_protocol.py +0 -0
  226. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_array_agg_order_by.py +0 -0
  227. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_association_trigger_actor_naming.py +0 -0
  228. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_associations_wiring.py +0 -0
  229. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_bulk_hydration_offload.py +0 -0
  230. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_bulk_update_by_pk.py +0 -0
  231. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
  232. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_cache_debug.py +0 -0
  233. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_call_function.py +0 -0
  234. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_case_when.py +0 -0
  235. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_catalog.py +0 -0
  236. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_column_scoped_writes.py +0 -0
  237. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_committed_row_guard.py +0 -0
  238. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_composite_pk_filter.py +0 -0
  239. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_composite_pk_write_paths.py +0 -0
  240. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_config.py +0 -0
  241. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_conflict_target.py +0 -0
  242. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_conflict_writes.py +0 -0
  243. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_connection_codecs.py +0 -0
  244. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_connection_poison_guard.py +0 -0
  245. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_connection_primitives.py +0 -0
  246. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_count_composite_distinct.py +0 -0
  247. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_count_limit_param_leak.py +0 -0
  248. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_db_function_field.py +0 -0
  249. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_ddl_generator.py +0 -0
  250. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_deadlock_retry.py +0 -0
  251. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_derived_table.py +0 -0
  252. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_dirty_tracking.py +0 -0
  253. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_dynamic_crud.py +0 -0
  254. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_exceptions.py +0 -0
  255. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
  256. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_expression_primitives.py +0 -0
  257. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_fields.py +0 -0
  258. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
  259. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_fk_cycle_resolution.py +0 -0
  260. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_from_alias.py +0 -0
  261. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_fts.py +0 -0
  262. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_func_expression_args.py +0 -0
  263. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_graph_walk.py +0 -0
  264. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_having_annotate_alias.py +0 -0
  265. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
  266. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_introspect_rls_policies.py +0 -0
  267. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_join_and_aggregate.py +0 -0
  268. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_latest_rows.py +0 -0
  269. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_listen_notify.py +0 -0
  270. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_local_sqlite.py +0 -0
  271. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_lock_contention_retry.py +0 -0
  272. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_managed_write_guard.py +0 -0
  273. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_matrx_entity.py +0 -0
  274. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_migration_diff_types.py +0 -0
  275. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_migration_loader.py +0 -0
  276. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_model_instance.py +0 -0
  277. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_model_meta.py +0 -0
  278. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_optimistic_concurrency.py +0 -0
  279. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_order_by_expression.py +0 -0
  280. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_org_assignment_inventory.py +0 -0
  281. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_orm_banners_are_client_safe.py +0 -0
  282. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_parameter_name_hydration.py +0 -0
  283. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_patch_jsonb_path.py +0 -0
  284. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_percentile_cont.py +0 -0
  285. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_persisted_count.py +0 -0
  286. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_person_scoped_session_bypasses_shared_cache.py +0 -0
  287. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_pool_create_never_wedges.py +0 -0
  288. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_pool_holder_census.py +0 -0
  289. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_pool_loop_recreation.py +0 -0
  290. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_pool_maintenance.py +0 -0
  291. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_postgrest_filters.py +0 -0
  292. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_pydantic_bridge.py +0 -0
  293. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_query_builder.py +0 -0
  294. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_query_error_detail.py +0 -0
  295. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_query_executor_sql.py +0 -0
  296. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_query_timeout.py +0 -0
  297. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
  298. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_queue_claim.py +0 -0
  299. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_read_connection_retry.py +0 -0
  300. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_read_write_declared.py +0 -0
  301. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_registry.py +0 -0
  302. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_registry_multi_database.py +0 -0
  303. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_registry_multi_schema.py +0 -0
  304. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_relational_backfill.py +0 -0
  305. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_relations.py +0 -0
  306. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_resilience.py +0 -0
  307. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_rls_session_scope.py +0 -0
  308. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_schema_exists.py +0 -0
  309. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_session_advisory_lock.py +0 -0
  310. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_standalone_write_session_context.py +0 -0
  311. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_state_cache.py +0 -0
  312. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_subquery_filter_raw.py +0 -0
  313. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_subquery_in_filter.py +0 -0
  314. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_subquery_nested_expressions.py +0 -0
  315. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_supabase_auth.py +0 -0
  316. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_supabase_config.py +0 -0
  317. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_tls.py +0 -0
  318. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_transaction_database_identity.py +0 -0
  319. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_transaction_gucs_one_round_trip.py +0 -0
  320. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_transaction_pool_release_sends_nothing.py +0 -0
  321. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_typed_join_projection.py +0 -0
  322. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_typed_predicates.py +0 -0
  323. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_update_case_expression.py +0 -0
  324. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_update_subquery.py +0 -0
  325. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_update_with_rebase.py +0 -0
  326. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_upsert_default_leak.py +0 -0
  327. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_upsert_with_conflict.py +0 -0
  328. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_values_jsonb_decode.py +0 -0
  329. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_watched_lifecycle.py +0 -0
  330. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_write_queue_deadline.py +0 -0
  331. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level1/test_write_retry_semantics.py +0 -0
  332. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/MODULE_README.md +0 -0
  333. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/__init__.py +0 -0
  334. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/conftest.py +0 -0
  335. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_bulk_ops.py +0 -0
  336. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_cache_integration.py +0 -0
  337. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_crud.py +0 -0
  338. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_foreign_keys.py +0 -0
  339. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_m2m.py +0 -0
  340. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_manager.py +0 -0
  341. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_migrations_live.py +0 -0
  342. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_query_execution.py +0 -0
  343. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/test_schema_diff.py +0 -0
  344. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
  345. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/live_pooler_role.py +0 -0
  346. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/native_source_cases.py +0 -0
  347. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/native_source_oracle.rs +0 -0
  348. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/.env.example +0 -0
  349. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/README.md +0 -0
  350. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/__init__.py +0 -0
  351. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/generate.py +0 -0
  352. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/generated/.gitkeep +0 -0
  353. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/matrx_orm.yaml +0 -0
  354. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project/test_schema_generation.py +0 -0
  355. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/.env.example +0 -0
  356. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/README.md +0 -0
  357. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/__init__.py +0 -0
  358. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/client_example.py +0 -0
  359. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/client_example.ts +0 -0
  360. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/client_supabase_example.py +0 -0
  361. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/sample_project_desktop/server.py +0 -0
  362. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/entity_tests.py +0 -0
  363. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_base_generation.py +0 -0
  364. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_composite_pk_fk_generation.py +0 -0
  365. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_composite_unique_generation.py +0 -0
  366. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_dto_identity_generation.py +0 -0
  367. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_entity_capability_generation.py +0 -0
  368. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_enum_ordering.py +0 -0
  369. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_excluded_fk_targets.py +0 -0
  370. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_generate_schema.py +0 -0
  371. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_junction_analysis.py +0 -0
  372. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_multi_schema_output.py +0 -0
  373. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_schema_analysis.py +0 -0
  374. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_sql_expression_defaults.py +0 -0
  375. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_table_relationships_query.py +0 -0
  376. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema/test_view_generation.py +0 -0
  377. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema_builder/test_array_default_parsing.py +0 -0
  378. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema_builder/test_focused_generation_plan.py +0 -0
  379. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema_builder/test_host_models_aggregator.py +0 -0
  380. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/schema_builder/test_never_filter_columns.py +0 -0
  381. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/__init__.py +0 -0
  382. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/conftest.py +0 -0
  383. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_a_failed_capture_still_names_the_failure.py +0 -0
  384. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_cache_no_downgrade.py +0 -0
  385. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_capture_poison_proof.py +0 -0
  386. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_coalesce.py +0 -0
  387. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_dag.py +0 -0
  388. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_disk_spill_fallback.py +0 -0
  389. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_flush_individual_fallback.py +0 -0
  390. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_governed_write.py +0 -0
  391. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_live_db_guard_plugin.py +0 -0
  392. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_managed.py +0 -0
  393. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_op_enqueue_site.py +0 -0
  394. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_reads.py +0 -0
  395. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_record_error_bounded_insert.py +0 -0
  396. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_record_error_storm.py +0 -0
  397. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_session.py +0 -0
  398. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/session/test_spill_guard_plugin.py +0 -0
  399. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_a_backend_handed_over_mid_transaction_never_takes_our_writes.py +0 -0
  400. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_a_list_of_uuids_binds_as_uuid_array.py +0 -0
  401. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_a_read_only_backend_never_refuses_our_writes.py +0 -0
  402. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_array_arg_element_type.py +0 -0
  403. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_attachment_mutation_serialization.py +0 -0
  404. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_backup_alias_conflict.py +0 -0
  405. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_backup_history_restore.py +0 -0
  406. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_backup_restore_live.py +0 -0
  407. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_call_function_as.py +0 -0
  408. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_call_function_none_mode.py +0 -0
  409. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_composite_fk_is_not_a_column_fk.py +0 -0
  410. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_database_name_alias.py +0 -0
  411. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_db_functions.py +0 -0
  412. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_dsn_password_masking.py +0 -0
  413. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_dynamic_select_unregistered.py +0 -0
  414. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_immutable_insert_or_exact_verify.py +0 -0
  415. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_keyed_digest.py +0 -0
  416. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_model_cls_refactor.py +0 -0
  417. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_native_enable.py +0 -0
  418. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_native_lifecycle.py +0 -0
  419. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_native_lifecycle_fences.py +0 -0
  420. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_native_passkey_receipts.py +0 -0
  421. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_native_source.py +0 -0
  422. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_no_blocking_asyncpg_tls.py +0 -0
  423. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_one_database.py +0 -0
  424. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_order_by_desc_nulls_last.py +0 -0
  425. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_org_vault_gate.py +0 -0
  426. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_pooler_role_guard.py +0 -0
  427. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_secret_audit_names_its_organization.py +0 -0
  428. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_secrets_battery.py +0 -0
  429. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_secrets_minting_keys.py +0 -0
  430. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_shared_lock_guard.py +0 -0
  431. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_sql_param_casts.py +0 -0
  432. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_statement_ceiling_warning.py +0 -0
  433. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_sync_twins_guard.py +0 -0
  434. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_update_result_truthiness.py +0 -0
  435. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_user_visible_lookup.py +0 -0
  436. {matrx_orm-3.1.207 → matrx_orm-3.1.209}/tests/test_vault_aggregate_recovery_stateful.py +0 -0
@@ -338,3 +338,8 @@ apps/shared/.kit-*-witness.*/
338
338
  .wt/
339
339
  .matrx/fixer-dispatch.json
340
340
  .matrx/fixer-ledger.json
341
+
342
+ # Release streak ledger (scripts/release_repeats.py): per-machine state, never committed
343
+ .matrx/release-repeats.json
344
+ .matrx/release-repeats.json.tmp
345
+ .matrx/fixer-ledger.json
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ - **Feature: entity doors in the associations engine.** A registry token may resolve to a
6
+ *door* (`__entity_door__ = True`, `async load_by_ids(ids, *, actor_id) -> {id: row}`) instead of
7
+ a Model, for nouns whose rows live behind the host's read doors (a record store). The engine
8
+ reads a door's rows AS THE ACTOR for the write-side existence gate and for `targets_from` /
9
+ `sources_to`; the access policy still decides on top; with no actor a door finds nothing and the
10
+ write is refused as not found. New export `matrx_orm.associations.is_entity_door`. Guard:
11
+ `tests/level1/test_associations.py` (door tests).
5
12
  - **Fix: the shared-lock sampler no longer leaves its timeouts on a pooled backend.**
6
13
  `pytest_lock_guard` sent session-level `set lock_timeout` / `set statement_timeout`
7
14
  through the transaction pooler, where they stay on the backend for the next client
@@ -51,7 +51,7 @@ Every table that becomes a Model needs row identity: a single-column primary key
51
51
  - **Signals**: `pre_create`, `post_create`, `pre_save`, `post_save`, `pre_delete`, `post_delete`.
52
52
  - **Schema builder** (`matrx_orm.schema_builder`): code generation for Python + TypeScript type definitions from the DB schema. Postgres **VIEWs** are emitted as **read-only `Model` classes** into the same schema models file (on by default; per-entry `output.include_views: false` opts a schema out, `output.exclude_views: [...]` skips individual views). View models get no manager/DTO/base-class/auto_config (views are not writable), synthesize `_primary_keys` from an `id` column (else the first column, for cache-key/`load_by_id` only), and emit plain typed fields with **no `ForeignKey`** (views carry no FK metadata — nothing cross-schema to resolve). Never hand-write a view model again.
53
53
  - **Secrets battery** (`matrx_orm.secrets_battery`): the ONE canonical user-credential vault — `users.user_secrets` CRUD + the platform's single Fernet primitive, keyed by `CREDENTIALS_ENCRYPTION_KEY`. Any package: `configure_secrets(db_config_name=...)` once, then `await require_user_secret(user_id, key)`. No package ever calls another service to resolve a credential. Contract: [`matrx_orm/secrets_battery/FEATURE.md`](matrx_orm/secrets_battery/FEATURE.md).
54
- - **Polymorphic associations** (`matrx_orm.associations`): `EntityRegistry` (token→Model) + `Associations` — a registry-driven, **access-gated** edge engine over a host's polymorphic edge table. Every `source→target` hop is org-scoped *and* each resolved endpoint is re-authorized against the ACTOR (fail-closed, screams on a genuine leak), so a hop can't widen access past what the actor may reach. 🚨 **The gate is `access_check` (wire `matrx_orm.platform_access_check` → `iam.has_access_for`), NEVER an org-column comparison** — a person belongs to several orgs on purpose, so org-equality denies her own data across her own workspaces (2026-08-30 incident) while granting any co-member of a private row. The edge's `org_id` is a TENANCY stamp, not a permission. Org-equality survives only for UNATTENDED writes (no actor) as an integrity guard, and **system vocabulary is exempt entirely** (existence still required): a model generated with `_rls_variant="system"` is platform-shared dictionary data (seo.keyword/topic) every tenant legitimately links to. Hardcodes no table names — the host wires its own edge + token-registry models.
54
+ - **Polymorphic associations** (`matrx_orm.associations`): `EntityRegistry` (token→Model) + `Associations` — a registry-driven, **access-gated** edge engine over a host's polymorphic edge table. Every `source→target` hop is org-scoped *and* each resolved endpoint is re-authorized against the ACTOR (fail-closed, screams on a genuine leak), so a hop can't widen access past what the actor may reach. 🚨 **The gate is `access_check` (wire `matrx_orm.platform_access_check` → `iam.has_access_for`), NEVER an org-column comparison** — a person belongs to several orgs on purpose, so org-equality denies her own data across her own workspaces (2026-08-30 incident) while granting any co-member of a private row. The edge's `org_id` is a TENANCY stamp, not a permission. Org-equality survives only for UNATTENDED writes (no actor) as an integrity guard, and **system vocabulary is exempt entirely** (existence still required): a model generated with `_rls_variant="system"` is platform-shared dictionary data (seo.keyword/topic) every tenant legitimately links to. Hardcodes no table names — the host wires its own edge + token-registry models. A token whose rows have no Model (a record store's Records) resolves to an **entity door** (`is_entity_door`: `load_by_ids(ids, *, actor_id)`), read as the actor — never by a service identity.
55
55
  - **The host's declared session context** (`matrx_orm.core.session_context`): `configure_session_context(provider)` once at startup, and every **top-level** `transaction()` — including the one `rls_session` opens, before it drops to the restricted role — emits whatever the provider returns as transaction-local GUCs. This is how an application-level declaration reaches Postgres at all: a GUC set outside a transaction has no meaning, so the BEGIN is the only place it can land. aidream wires it to its provenance declaration (`app.actor_tier` / `app.actor_system`, read by `platform.actor_tier()`, the history capture and the tier rule). A nested entry is a savepoint inside a transaction that already carries them and emits nothing. A standalone write (`execute_write` outside any transaction) made while the provider has something to say opens its own transaction for that one statement — and still goes through the write queue, inside a copy of the caller's context, so the queue's concurrency gate is kept and the drain task's foreign context cannot hide the declaration (`tests/level1/test_standalone_write_session_context.py`). No provider configured ⇒ no GUCs (standalone behaviour unchanged); a provider that raises fails the transaction loudly rather than committing rows with a false provenance.
56
56
  - **The platform access policy** (`matrx_orm.platform_access`): `platform_access_check(actor, token, id, level)` → `iam.has_access_for`. The ONE answer to "may this actor touch this row?", shared with RLS and the file-access gate. Fails closed. Never re-derive it from `organization_id` or `created_by` — both are strict subsets that deny legitimate access.
57
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: matrx-orm
3
- Version: 3.1.207
3
+ Version: 3.1.209
4
4
  Summary: Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching
5
5
  Project-URL: Homepage, https://github.com/AI-Matrix-Engine/aidream-current
6
6
  Project-URL: Repository, https://github.com/AI-Matrix-Engine/aidream-current
@@ -26,7 +26,7 @@ Requires-Dist: asyncpg>=0.31.0
26
26
  Requires-Dist: cbor2<7,>=6.1.3
27
27
  Requires-Dist: cryptography>=43.0
28
28
  Requires-Dist: gitpython>=3.1.40
29
- Requires-Dist: matrx-utils>=2.0.61
29
+ Requires-Dist: matrx-utils>=2.0.63
30
30
  Requires-Dist: psycopg-pool>=3.2.5
31
31
  Requires-Dist: psycopg[binary]>=3.2.5
32
32
  Requires-Dist: python-dotenv>=1.0
@@ -79,6 +79,7 @@ __all__ = [
79
79
  "EntityRegistry",
80
80
  "Associations",
81
81
  "UnknownEntityType",
82
+ "is_entity_door",
82
83
  "CrossOrgAssociationError",
83
84
  "EntityAccessError",
84
85
  "AccessCheck",
@@ -131,6 +132,24 @@ class EntityRef:
131
132
  id: str
132
133
 
133
134
 
135
+ def is_entity_door(endpoint: Any) -> bool:
136
+ """True when a registry token resolves to an ENTITY DOOR rather than a Model.
137
+
138
+ Some nouns a host registers have no table a Model could be generated over — their rows live
139
+ behind the host's own read doors (a record store's RPCs, a remote service). Such a token
140
+ resolves to a *door*: any object with ``__entity_door__ = True`` and::
141
+
142
+ async def load_by_ids(ids: list[str], *, actor_id: str) -> dict[str, Any]
143
+
144
+ returning ``{str(id): row}`` for the ids the ACTOR can open (each row exposes ``id`` and, when
145
+ it has one, the host's org field as attributes). The engine treats a door exactly like a
146
+ Model — existence, the access policy, the org fast path — except that the read is made AS
147
+ the actor, so with no actor (an unattended write) a door finds nothing and the write is
148
+ refused as not found, never authorized by a service identity.
149
+ """
150
+ return bool(getattr(endpoint, "__entity_door__", False))
151
+
152
+
134
153
  def _registry_model_lookup(schema: str, table: str) -> type[Model] | None:
135
154
  """Default ``(schema, table) -> Model`` resolver: scan matrx-orm's model_registry."""
136
155
  from matrx_orm.core.registry import model_registry
@@ -578,7 +597,10 @@ class Associations:
578
597
  With an actor present and NO policy wired, we refuse rather than fall
579
598
  back to org-equality — a host that authorizes user writes must say how.
580
599
  """
581
- entity = await model.load_by_id_or_none(ref.id)
600
+ if is_entity_door(model):
601
+ entity = (await model.load_by_ids([str(ref.id)], actor_id=actor_id)).get(str(ref.id))
602
+ else:
603
+ entity = await model.load_by_id_or_none(ref.id)
582
604
  if entity is None:
583
605
  raise CrossOrgAssociationError(
584
606
  f"cannot associate {ref.type}:{ref.id} — not found or not accessible"
@@ -621,7 +643,9 @@ class Associations:
621
643
  _FETCH_CHUNK = 500
622
644
 
623
645
  @classmethod
624
- async def _fetch_many(cls, model: type[Model], ids: list[Any]) -> dict[str, Any]:
646
+ async def _fetch_many(
647
+ cls, model: type[Model], ids: list[Any], actor_id: str = ""
648
+ ) -> dict[str, Any]:
625
649
  """``{str(pk): row}`` for ``ids``, in a BOUNDED number of round trips.
626
650
 
627
651
  One statement per :attr:`_FETCH_CHUNK` ids, through the same Model (so
@@ -631,9 +655,12 @@ class Associations:
631
655
  it falls back to per-id loads — no association endpoint uses one today,
632
656
  and this keeps the helper honest if one ever does.
633
657
  """
658
+ unique = list(dict.fromkeys(str(i) for i in ids))
659
+ if is_entity_door(model):
660
+ # A door reads as the actor (see ``is_entity_door``); it batches on its own side.
661
+ return await model.load_by_ids(unique, actor_id=actor_id)
634
662
  meta = getattr(model, "_meta", None)
635
663
  pks = list(getattr(meta, "primary_keys", None) or ["id"])
636
- unique = list(dict.fromkeys(str(i) for i in ids))
637
664
  if len(pks) > 1:
638
665
  found = [await model.load_by_id_or_none(i) for i in unique]
639
666
  return {
@@ -681,7 +708,7 @@ class Associations:
681
708
  model = await self._reg.require(token)
682
709
  actor = self._resolve_actor(actor_id)
683
710
  is_system = getattr(model, "_rls_variant", None) == "system" # orm-getattr-ok: generator-stamped capability flag
684
- by_id = await self._fetch_many(model, ids)
711
+ by_id = await self._fetch_many(model, ids, actor)
685
712
  out: list[Any] = []
686
713
  for rid in ids:
687
714
  entity = by_id.get(str(rid))
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "matrx-orm"
3
- version = "3.1.207"
3
+ version = "3.1.209"
4
4
  description = "Async-first PostgreSQL ORM with bidirectional migrations, schema introspection, many-to-many relationships, and built-in state caching"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -41,7 +41,7 @@ dependencies = [
41
41
  "gitpython>=3.1.40",
42
42
  "psycopg[binary]>=3.2.5",
43
43
  "psycopg-pool>=3.2.5",
44
- "matrx-utils>=2.0.61",
44
+ "matrx-utils>=2.0.63",
45
45
  "pyyaml>=6.0.3",
46
46
  "python-dotenv>=1.0",
47
47
  "cryptography>=43.0",
@@ -811,3 +811,81 @@ async def test_batched_fetch_chunks_and_still_drops_what_the_gate_refuses():
811
811
  f"{total} targets took {ProjectModel.filter_calls} statements; it must take one "
812
812
  "per chunk."
813
813
  )
814
+
815
+
816
+ # --------------------------------------------------------------------------- #
817
+ # Entity doors — a noun whose rows live behind the host's read doors, not a Model
818
+ # --------------------------------------------------------------------------- #
819
+
820
+
821
+ class _ScopeDoor:
822
+ """A noun with no Model (a record store's Records): rows are read AS the actor."""
823
+
824
+ __entity_door__ = True
825
+ rows = {"s1": {"id": "s1", "org_id": "org1", "owner": "alice"}}
826
+ calls: list = []
827
+
828
+ @classmethod
829
+ async def load_by_ids(cls, ids, *, actor_id):
830
+ from types import SimpleNamespace
831
+
832
+ cls.calls.append((tuple(ids), actor_id))
833
+ return {
834
+ i: SimpleNamespace(**cls.rows[i])
835
+ for i in ids
836
+ if i in cls.rows and cls.rows[i]["owner"] == actor_id
837
+ }
838
+
839
+
840
+ def _door_assoc(policy):
841
+ reg = EntityRegistry(token_map={"note": NoteModel, "scope": _ScopeDoor})
842
+ return Associations(association_model=AssociationRow, registry=reg, access_check=policy)
843
+
844
+
845
+ @pytest.mark.asyncio
846
+ async def test_a_door_endpoint_is_filed_when_the_actor_opens_it():
847
+ """b9cf9424d7 dropped the scope model and every scope endpoint raised UnknownEntityType;
848
+ a door resolves the noun and reads its row as the actor."""
849
+ _ScopeDoor.calls = []
850
+ NoteModel.seed(id="n1", org_id="org1")
851
+
852
+ async def policy(actor, token, rid, level):
853
+ return actor == "alice"
854
+
855
+ edge = await _door_assoc(policy).associate(
856
+ EntityRef("note", "n1"), EntityRef("scope", "s1"), org_id="org1", actor_id="alice"
857
+ )
858
+ assert edge.target_type == "scope" and edge.target_id == "s1"
859
+ assert _ScopeDoor.calls == [(("s1",), "alice")]
860
+
861
+
862
+ @pytest.mark.asyncio
863
+ async def test_a_door_endpoint_the_actor_cannot_open_is_refused_and_unattended_finds_nothing():
864
+ NoteModel.seed(id="n1", org_id="org1")
865
+
866
+ async def policy(actor, token, rid, level):
867
+ return True # the door's own read is what refuses
868
+
869
+ with pytest.raises(CrossOrgAssociationError, match="not found"):
870
+ await _door_assoc(policy).associate(
871
+ EntityRef("note", "n1"), EntityRef("scope", "s1"), org_id="org1", actor_id="mallory"
872
+ )
873
+ with pytest.raises(CrossOrgAssociationError, match="not found"):
874
+ await _door_assoc(policy).associate(
875
+ EntityRef("note", "n1"), EntityRef("scope", "s1"), org_id="org1"
876
+ )
877
+
878
+
879
+ @pytest.mark.asyncio
880
+ async def test_a_door_endpoint_reads_back_through_the_door():
881
+ AssociationRow.seed(
882
+ source_type="note", source_id="n1", target_type="scope", target_id="s1", org_id="org1"
883
+ )
884
+
885
+ async def policy(actor, token, rid, level):
886
+ return True
887
+
888
+ rows = await _door_assoc(policy).targets_from(
889
+ EntityRef("note", "n1"), "scope", org_id="org1", actor_id="alice"
890
+ )
891
+ assert [r.id for r in rows] == ["s1"]
File without changes
File without changes
File without changes