matrx-orm 3.1.141__tar.gz → 3.1.142__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 (376) hide show
  1. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/CLAUDE.md +1 -1
  2. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/PKG-INFO +1 -1
  3. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/async_db_manager.py +31 -9
  4. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/pyproject.toml +1 -1
  5. matrx_orm-3.1.142/tests/level1/test_standalone_write_session_context.py +139 -0
  6. matrx_orm-3.1.141/tests/level1/test_standalone_write_session_context.py +0 -81
  7. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/.gitignore +0 -0
  8. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/AGENTS.md +0 -0
  9. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/BASE_CLASS_METHODS.md +0 -0
  10. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/MODEL_API.md +0 -0
  11. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/README.md +0 -0
  12. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/database/orm/extended/managers/ai_model_base.py +0 -0
  13. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/docs/migrations.md +0 -0
  14. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/FEATURE.md +0 -0
  15. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/MODULE_README.md +0 -0
  16. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/__init__.py +0 -0
  17. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/MODULE_README.md +0 -0
  18. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/__init__.py +0 -0
  19. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/async_postgresql.py +0 -0
  20. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/base_adapter.py +0 -0
  21. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/postgresql.py +0 -0
  22. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
  23. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/adapters/supabase_adapter.py +0 -0
  24. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/admin/FEATURE.md +0 -0
  25. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/admin/__init__.py +0 -0
  26. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/admin/router.py +0 -0
  27. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/__init__.py +0 -0
  28. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/auth.py +0 -0
  29. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/config.py +0 -0
  30. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/handlers.py +0 -0
  31. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/protocol.py +0 -0
  32. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/api/server.py +0 -0
  33. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/associations.py +0 -0
  34. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/cache_debug.py +0 -0
  35. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/catalog.py +0 -0
  36. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/catalog_sql.py +0 -0
  37. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/MODULE_README.md +0 -0
  38. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/__init__.py +0 -0
  39. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/postgres_connection.py +0 -0
  40. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/postgrest.py +0 -0
  41. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/supabase_auth.py +0 -0
  42. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/supabase_config.py +0 -0
  43. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/client/supabase_manager.py +0 -0
  44. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/EXTENDED-TASK.md +0 -0
  45. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/FEATURE.md +0 -0
  46. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/MODULE_README.md +0 -0
  47. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  48. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/TASKS.md +0 -0
  49. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/__init__.py +0 -0
  50. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/base.py +0 -0
  51. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/config.py +0 -0
  52. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/connections.py +0 -0
  53. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/db_function.py +0 -0
  54. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/diagnostics.py +0 -0
  55. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/expressions.py +0 -0
  56. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/extended.py +0 -0
  57. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/fields.py +0 -0
  58. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/introspection.py +0 -0
  59. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/listen.py +0 -0
  60. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/loop_filters.py +0 -0
  61. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/model_dto.py +0 -0
  62. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/model_view.py +0 -0
  63. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/one_database.py +0 -0
  64. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/paginator.py +0 -0
  65. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/pool_maintenance.py +0 -0
  66. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/pool_watch.py +0 -0
  67. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/pooler_role.py +0 -0
  68. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/pydantic_bridge.py +0 -0
  69. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/registry.py +0 -0
  70. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/relations.py +0 -0
  71. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/resilience.py +0 -0
  72. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/rls_session.py +0 -0
  73. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/session_context.py +0 -0
  74. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/signals.py +0 -0
  75. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/tls.py +0 -0
  76. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/transaction.py +0 -0
  77. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/types.py +0 -0
  78. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/core/write_queue.py +0 -0
  79. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/entity.py +0 -0
  80. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/error_handling.py +0 -0
  81. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/exceptions.py +0 -0
  82. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/extended/__init__.py +0 -0
  83. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/extended/app_error_handler.py +0 -0
  84. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/identity_rule.py +0 -0
  85. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/local_sqlite.py +0 -0
  86. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/middleware/__init__.py +0 -0
  87. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/middleware/base.py +0 -0
  88. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/MODULE_README.md +0 -0
  89. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/__init__.py +0 -0
  90. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/cli.py +0 -0
  91. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/ddl.py +0 -0
  92. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/diff.py +0 -0
  93. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/executor.py +0 -0
  94. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/integration.py +0 -0
  95. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/loader.py +0 -0
  96. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/operations.py +0 -0
  97. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/state.py +0 -0
  98. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/migrations/table_filter.py +0 -0
  99. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/no_org_assignment.py +0 -0
  100. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/FEATURE.md +0 -0
  101. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/MODULE_README.md +0 -0
  102. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/__init__.py +0 -0
  103. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/bulk_update_values.py +0 -0
  104. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/catalog_select.py +0 -0
  105. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/conflict.py +0 -0
  106. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/conflict_writes.py +0 -0
  107. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/create.py +0 -0
  108. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/db_functions.py +0 -0
  109. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/delete.py +0 -0
  110. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/dynamic_admin.py +0 -0
  111. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/dynamic_crud.py +0 -0
  112. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/graph_walk.py +0 -0
  113. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/latest_rows.py +0 -0
  114. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/queue_claim.py +0 -0
  115. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/read.py +0 -0
  116. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/relational_backfill.py +0 -0
  117. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/staging_load.py +0 -0
  118. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/operations/update.py +0 -0
  119. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/platform_access.py +0 -0
  120. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/platform_db.py +0 -0
  121. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/py.typed +0 -0
  122. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/pytest_plugin.py +0 -0
  123. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/python_sql/MODULE_README.md +0 -0
  124. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/python_sql/__init__.py +0 -0
  125. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/python_sql/db_objects.py +0 -0
  126. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  127. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  128. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/query/FEATURE.md +0 -0
  129. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/query/MODULE_README.md +0 -0
  130. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/query/__init__.py +0 -0
  131. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/query/builder.py +0 -0
  132. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/query/executor.py +0 -0
  133. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/resources/__init__.py +0 -0
  134. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
  135. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
  136. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/FEATURE.md +0 -0
  137. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/MODULE_README.md +0 -0
  138. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/__init__.py +0 -0
  139. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/code_handler.py +0 -0
  140. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/codegen_writer.py +0 -0
  141. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/columns.py +0 -0
  142. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/common.py +0 -0
  143. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/diff_preview.py +0 -0
  144. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
  145. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/generator.py +0 -0
  146. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  147. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  148. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  149. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  150. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/package_wiring.py +0 -0
  151. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/relationships.py +0 -0
  152. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/runner.py +0 -0
  153. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/schema.py +0 -0
  154. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/schema_manager.py +0 -0
  155. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/tables.py +0 -0
  156. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/schema_builder/views.py +0 -0
  157. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/FEATURE.md +0 -0
  158. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/__init__.py +0 -0
  159. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/attachments.py +0 -0
  160. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/crypto.py +0 -0
  161. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/host_authorization.py +0 -0
  162. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/items.py +0 -0
  163. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/model.py +0 -0
  164. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
  165. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/org_service.py +0 -0
  166. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/secrets_battery/service.py +0 -0
  167. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/README.md +0 -0
  168. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/__init__.py +0 -0
  169. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/coalesce.py +0 -0
  170. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/dag.py +0 -0
  171. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/errors.py +0 -0
  172. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/fallback.py +0 -0
  173. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/flush.py +0 -0
  174. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/lifecycle.py +0 -0
  175. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/managed.py +0 -0
  176. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/op.py +0 -0
  177. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/reads.py +0 -0
  178. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/session.py +0 -0
  179. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/session/telemetry.py +0 -0
  180. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/MODULE_README.md +0 -0
  181. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/__init__.py +0 -0
  182. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/executor.py +0 -0
  183. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/queries.py +0 -0
  184. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/registry.py +0 -0
  185. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/types.py +0 -0
  186. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/sql_executor/utils.py +0 -0
  187. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/state.py +0 -0
  188. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/utils/__init__.py +0 -0
  189. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/utils/sql_utils.py +0 -0
  190. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/matrx_orm/utils/type_converters.py +0 -0
  191. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/scripts/git-branches.sh +0 -0
  192. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/scripts/publish.sh +0 -0
  193. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/scripts/release.sh +0 -0
  194. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/MODULE_README.md +0 -0
  195. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/__init__.py +0 -0
  196. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/conftest.py +0 -0
  197. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/MODULE_README.md +0 -0
  198. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/__init__.py +0 -0
  199. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_adapter_registry.py +0 -0
  200. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_admin_db_columns.py +0 -0
  201. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_admin_response_rendering.py +0 -0
  202. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_admin_search_negation.py +0 -0
  203. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_admin_search_sentinels.py +0 -0
  204. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_advisory_lock.py +0 -0
  205. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_agent_message.py +0 -0
  206. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_api_auth.py +0 -0
  207. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_api_config.py +0 -0
  208. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_api_handlers.py +0 -0
  209. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_api_protocol.py +0 -0
  210. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_array_agg_order_by.py +0 -0
  211. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_associations.py +0 -0
  212. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_associations_wiring.py +0 -0
  213. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_bulk_hydration_offload.py +0 -0
  214. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_bulk_update_by_pk.py +0 -0
  215. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
  216. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_cache_debug.py +0 -0
  217. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_call_function.py +0 -0
  218. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_case_when.py +0 -0
  219. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_catalog.py +0 -0
  220. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_composite_pk_filter.py +0 -0
  221. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_composite_pk_write_paths.py +0 -0
  222. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_config.py +0 -0
  223. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_conflict_target.py +0 -0
  224. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_conflict_writes.py +0 -0
  225. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_connection_codecs.py +0 -0
  226. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_connection_poison_guard.py +0 -0
  227. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_connection_primitives.py +0 -0
  228. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_count_composite_distinct.py +0 -0
  229. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_count_limit_param_leak.py +0 -0
  230. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_db_function_field.py +0 -0
  231. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_ddl_generator.py +0 -0
  232. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_derived_table.py +0 -0
  233. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_dirty_tracking.py +0 -0
  234. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_dynamic_crud.py +0 -0
  235. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_exceptions.py +0 -0
  236. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
  237. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_expression_primitives.py +0 -0
  238. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_fields.py +0 -0
  239. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
  240. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_from_alias.py +0 -0
  241. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_fts.py +0 -0
  242. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_func_expression_args.py +0 -0
  243. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_graph_walk.py +0 -0
  244. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_having_annotate_alias.py +0 -0
  245. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
  246. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_introspect_rls_policies.py +0 -0
  247. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_join_and_aggregate.py +0 -0
  248. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_latest_rows.py +0 -0
  249. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_listen_notify.py +0 -0
  250. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_local_sqlite.py +0 -0
  251. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_lock_contention_retry.py +0 -0
  252. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_managed_write_guard.py +0 -0
  253. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_matrx_entity.py +0 -0
  254. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_migration_diff_types.py +0 -0
  255. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_migration_loader.py +0 -0
  256. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_model_instance.py +0 -0
  257. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_model_meta.py +0 -0
  258. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_optimistic_concurrency.py +0 -0
  259. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_order_by_expression.py +0 -0
  260. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_org_assignment_inventory.py +0 -0
  261. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_parameter_name_hydration.py +0 -0
  262. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_patch_jsonb_path.py +0 -0
  263. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_persisted_count.py +0 -0
  264. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_pool_holder_census.py +0 -0
  265. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_pool_loop_recreation.py +0 -0
  266. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_pool_maintenance.py +0 -0
  267. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_postgrest_filters.py +0 -0
  268. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_pydantic_bridge.py +0 -0
  269. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_query_builder.py +0 -0
  270. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_query_error_detail.py +0 -0
  271. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_query_executor_sql.py +0 -0
  272. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_query_timeout.py +0 -0
  273. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
  274. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_queue_claim.py +0 -0
  275. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_read_connection_retry.py +0 -0
  276. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_registry.py +0 -0
  277. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_registry_multi_database.py +0 -0
  278. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_registry_multi_schema.py +0 -0
  279. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_relational_backfill.py +0 -0
  280. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_relations.py +0 -0
  281. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_resilience.py +0 -0
  282. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_rls_session_scope.py +0 -0
  283. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_schema_exists.py +0 -0
  284. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_session_advisory_lock.py +0 -0
  285. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_state_cache.py +0 -0
  286. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_subquery_filter_raw.py +0 -0
  287. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_subquery_in_filter.py +0 -0
  288. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_subquery_nested_expressions.py +0 -0
  289. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_supabase_auth.py +0 -0
  290. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_supabase_config.py +0 -0
  291. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_tls.py +0 -0
  292. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_typed_join_projection.py +0 -0
  293. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_typed_predicates.py +0 -0
  294. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_update_case_expression.py +0 -0
  295. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_update_subquery.py +0 -0
  296. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_update_with_rebase.py +0 -0
  297. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_upsert_default_leak.py +0 -0
  298. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_upsert_with_conflict.py +0 -0
  299. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_values_jsonb_decode.py +0 -0
  300. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_watched_lifecycle.py +0 -0
  301. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_write_queue_deadline.py +0 -0
  302. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level1/test_write_retry_semantics.py +0 -0
  303. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/MODULE_README.md +0 -0
  304. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/__init__.py +0 -0
  305. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/conftest.py +0 -0
  306. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_bulk_ops.py +0 -0
  307. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_cache_integration.py +0 -0
  308. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_crud.py +0 -0
  309. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_foreign_keys.py +0 -0
  310. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_m2m.py +0 -0
  311. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_manager.py +0 -0
  312. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_migrations_live.py +0 -0
  313. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_query_execution.py +0 -0
  314. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/level2/test_schema_diff.py +0 -0
  315. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/live_pooler_role.py +0 -0
  316. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/.env.example +0 -0
  317. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/README.md +0 -0
  318. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/__init__.py +0 -0
  319. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/generate.py +0 -0
  320. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/generated/.gitkeep +0 -0
  321. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/matrx_orm.yaml +0 -0
  322. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project/test_schema_generation.py +0 -0
  323. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/.env.example +0 -0
  324. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/README.md +0 -0
  325. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/__init__.py +0 -0
  326. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/client_example.py +0 -0
  327. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/client_example.ts +0 -0
  328. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/client_supabase_example.py +0 -0
  329. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/sample_project_desktop/server.py +0 -0
  330. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/entity_tests.py +0 -0
  331. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_base_generation.py +0 -0
  332. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_composite_pk_fk_generation.py +0 -0
  333. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_composite_unique_generation.py +0 -0
  334. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_dto_identity_generation.py +0 -0
  335. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_entity_capability_generation.py +0 -0
  336. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_enum_ordering.py +0 -0
  337. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_generate_schema.py +0 -0
  338. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_junction_analysis.py +0 -0
  339. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_multi_schema_output.py +0 -0
  340. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_schema_analysis.py +0 -0
  341. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_sql_expression_defaults.py +0 -0
  342. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_table_relationships_query.py +0 -0
  343. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema/test_view_generation.py +0 -0
  344. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema_builder/test_array_default_parsing.py +0 -0
  345. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema_builder/test_focused_generation_plan.py +0 -0
  346. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/schema_builder/test_host_models_aggregator.py +0 -0
  347. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/__init__.py +0 -0
  348. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/conftest.py +0 -0
  349. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_cache_no_downgrade.py +0 -0
  350. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_capture_poison_proof.py +0 -0
  351. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_coalesce.py +0 -0
  352. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_dag.py +0 -0
  353. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_disk_spill_fallback.py +0 -0
  354. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_flush_individual_fallback.py +0 -0
  355. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_governed_write.py +0 -0
  356. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_managed.py +0 -0
  357. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_op_enqueue_site.py +0 -0
  358. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_reads.py +0 -0
  359. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_record_error_bounded_insert.py +0 -0
  360. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_record_error_storm.py +0 -0
  361. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_session.py +0 -0
  362. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/session/test_spill_guard_plugin.py +0 -0
  363. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_array_arg_element_type.py +0 -0
  364. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_database_name_alias.py +0 -0
  365. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_db_functions.py +0 -0
  366. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_dynamic_select_unregistered.py +0 -0
  367. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_keyed_digest.py +0 -0
  368. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_model_cls_refactor.py +0 -0
  369. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_no_blocking_asyncpg_tls.py +0 -0
  370. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_one_database.py +0 -0
  371. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_order_by_desc_nulls_last.py +0 -0
  372. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_pooler_role_guard.py +0 -0
  373. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_secrets_battery.py +0 -0
  374. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_secrets_minting_keys.py +0 -0
  375. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_sql_param_casts.py +0 -0
  376. {matrx_orm-3.1.141 → matrx_orm-3.1.142}/tests/test_sync_twins_guard.py +0 -0
@@ -52,7 +52,7 @@ Every table that becomes a Model needs row identity: a single-column primary key
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
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.
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 — and a write made **outside** any transaction carries no declaration at all, which is why a single-row write that must record its author still opens one. No provider configured ⇒ no GUCs (standalone behaviour unchanged); a provider that raises fails the transaction loudly rather than committing rows with a false provenance.
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
 
58
58
  Public API is defined explicitly in `matrx_orm/__init__.py` (100+ exports). Treat changes there as semver-breaking.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: matrx-orm
3
- Version: 3.1.141
3
+ Version: 3.1.142
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
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
+ import contextvars
4
5
  from dataclasses import dataclass
5
6
  import json
6
7
  import logging
@@ -1605,25 +1606,46 @@ class AsyncDatabaseManager:
1605
1606
  except ImportError:
1606
1607
  pass
1607
1608
 
1609
+ from matrx_orm.core.write_queue import get_write_queue_registry
1610
+
1611
+ config_name = resolve_database_name(config_name)
1612
+ wq = get_write_queue_registry().get(config_name)
1613
+
1608
1614
  # A declared host session context (notably actor provenance) is made of
1609
1615
  # transaction-local GUCs. A plain standalone write used to skip BEGIN,
1610
1616
  # so its trigger saw the database default even though the caller had
1611
- # explicitly declared an actor. Keep the declaration in the caller's
1612
- # task (the write-queue drain has a different ContextVar context) and
1613
- # use the canonical transaction path for this one write.
1617
+ # explicitly declared an actor — so a declared write takes the
1618
+ # canonical transaction path (BEGIN → GUCs → statement → COMMIT).
1619
+ #
1620
+ # It still goes through the write queue. The queue's drain executes
1621
+ # each item in a task forked from the DRAIN's context, where the
1622
+ # caller's ContextVar declaration is invisible; so the item is run
1623
+ # inside a copy of the caller's context instead of skipping the
1624
+ # queue. Skipping was the first fix (2026-09-12) and it was fine while
1625
+ # only a few doors declared; once the request boundary declares for
1626
+ # EVERY authenticated request, skipping would have moved every
1627
+ # request write off the queue's concurrency gate and onto raw pool
1628
+ # acquires — the pool-storm class the queue exists to prevent.
1614
1629
  from matrx_orm.core.session_context import session_context_gucs
1615
1630
 
1616
1631
  if session_context_gucs():
1617
1632
  from matrx_orm.core.transaction import transaction
1618
1633
 
1619
- config_name = resolve_database_name(config_name)
1620
- async with transaction(config_name):
1621
- return await cls.execute_query(config_name, query, *args, timeout=timeout)
1634
+ async def _declared_write() -> list[dict[str, Any]]:
1635
+ async with transaction(config_name):
1636
+ return await cls.execute_query(config_name, query, *args, timeout=timeout)
1622
1637
 
1623
- from matrx_orm.core.write_queue import get_write_queue_registry
1638
+ if wq is None:
1639
+ return await _declared_write()
1624
1640
 
1625
- config_name = resolve_database_name(config_name)
1626
- wq = get_write_queue_registry().get(config_name)
1641
+ caller_context = contextvars.copy_context()
1642
+
1643
+ async def _in_caller_context() -> list[dict[str, Any]]:
1644
+ # Awaited by the drain's item task; the inner task carries the
1645
+ # caller's context so the session provider sees the declaration.
1646
+ return await asyncio.create_task(_declared_write(), context=caller_context)
1647
+
1648
+ return await wq.submit(_in_caller_context)
1627
1649
 
1628
1650
  if wq is not None:
1629
1651
  return await wq.submit(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "matrx-orm"
3
- version = "3.1.141"
3
+ version = "3.1.142"
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" }
@@ -0,0 +1,139 @@
1
+ """A declared session context reaches a standalone write's transaction —
2
+ THROUGH the write queue, not around it.
3
+
4
+ History: the first fix (2026-09-12 12:36) bypassed the queue for a declared
5
+ write because the drain's task cannot see the caller's ContextVar. Once the
6
+ request boundary declares an actor for every authenticated request, that
7
+ bypass would have taken every request write off the queue's concurrency gate.
8
+ The queue is kept and the item runs in a copy of the caller's context.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import contextvars
14
+ from contextlib import asynccontextmanager
15
+
16
+ import asyncio
17
+ import pytest
18
+
19
+ from matrx_orm.core.async_db_manager import AsyncDatabaseManager
20
+ from matrx_orm.core.session_context import (
21
+ configure_session_context,
22
+ declared_actor,
23
+ declared_actor_gucs,
24
+ session_context_gucs,
25
+ )
26
+
27
+
28
+ class _DrainLikeQueue:
29
+ """Executes the factory the way the real drain does: in a task forked from
30
+ a FOREIGN context (one with no declaration), so a factory that relies on
31
+ the submitter's context being ambient would see nothing."""
32
+
33
+ def __init__(self) -> None:
34
+ self.submitted = 0
35
+
36
+ async def submit(self, coro_factory):
37
+ self.submitted += 1
38
+ foreign = contextvars.Context() # empty: no actor declared here
39
+ task = asyncio.create_task(coro_factory(), context=foreign)
40
+ return await task
41
+
42
+
43
+ @pytest.mark.asyncio
44
+ async def test_declared_write_keeps_the_queue_and_lands_gucs_in_its_transaction(
45
+ monkeypatch,
46
+ ) -> None:
47
+ events: list[object] = []
48
+ queue = _DrainLikeQueue()
49
+
50
+ @asynccontextmanager
51
+ async def fake_transaction(database: str):
52
+ # What the real TransactionContext does at BEGIN: ask the provider.
53
+ events.append(("begin", database, dict(session_context_gucs())))
54
+ yield
55
+ events.append(("commit", database))
56
+
57
+ async def fake_execute_query(_cls, config_name: str, query: str, *args, **kwargs):
58
+ events.append(("write", config_name, query))
59
+ return [{"id": 1}]
60
+
61
+ monkeypatch.setattr("matrx_orm.core.transaction.transaction", fake_transaction)
62
+ monkeypatch.setattr(AsyncDatabaseManager, "execute_query", classmethod(fake_execute_query))
63
+ monkeypatch.setattr(
64
+ "matrx_orm.core.write_queue.get_write_queue_registry",
65
+ lambda: {"test": queue},
66
+ )
67
+ configure_session_context(declared_actor_gucs)
68
+ try:
69
+ async with declared_actor("ai", "tool:instance_create"):
70
+ rows = await AsyncDatabaseManager.execute_write(
71
+ "test", "INSERT INTO content_ir.kind_instance DEFAULT VALUES RETURNING id"
72
+ )
73
+ finally:
74
+ configure_session_context(None)
75
+
76
+ assert rows == [{"id": 1}]
77
+ assert queue.submitted == 1, "a declared write must still be admitted through the queue"
78
+ assert events == [
79
+ (
80
+ "begin",
81
+ "test",
82
+ {"app.actor_tier": "ai", "app.actor_system": "tool:instance_create"},
83
+ ),
84
+ ("write", "test", "INSERT INTO content_ir.kind_instance DEFAULT VALUES RETURNING id"),
85
+ ("commit", "test"),
86
+ ]
87
+
88
+
89
+ @pytest.mark.asyncio
90
+ async def test_declared_write_without_a_queue_opens_its_own_transaction(monkeypatch) -> None:
91
+ events: list[object] = []
92
+
93
+ @asynccontextmanager
94
+ async def fake_transaction(database: str):
95
+ events.append(("begin", database, dict(session_context_gucs())))
96
+ yield
97
+ events.append(("commit", database))
98
+
99
+ async def fake_execute_query(_cls, config_name: str, query: str, *args, **kwargs):
100
+ events.append(("write", config_name, query))
101
+ return [{"id": 3}]
102
+
103
+ monkeypatch.setattr("matrx_orm.core.transaction.transaction", fake_transaction)
104
+ monkeypatch.setattr(AsyncDatabaseManager, "execute_query", classmethod(fake_execute_query))
105
+ monkeypatch.setattr("matrx_orm.core.write_queue.get_write_queue_registry", lambda: {})
106
+ configure_session_context(declared_actor_gucs)
107
+ try:
108
+ async with declared_actor("human", "user-1"):
109
+ rows = await AsyncDatabaseManager.execute_write("test", "UPDATE t SET x = 1")
110
+ finally:
111
+ configure_session_context(None)
112
+
113
+ assert rows == [{"id": 3}]
114
+ assert events[0] == ("begin", "test", {"app.actor_tier": "human", "app.actor_system": "user-1"})
115
+ assert events[-1] == ("commit", "test")
116
+
117
+
118
+ @pytest.mark.asyncio
119
+ async def test_write_without_session_context_keeps_queue_path(monkeypatch) -> None:
120
+ submitted = False
121
+
122
+ class Queue:
123
+ async def submit(self, _operation):
124
+ nonlocal submitted
125
+ submitted = True
126
+ return [{"id": 2}]
127
+
128
+ monkeypatch.setattr(
129
+ "matrx_orm.core.write_queue.get_write_queue_registry",
130
+ lambda: {"test": Queue()},
131
+ )
132
+ configure_session_context(None)
133
+
134
+ rows = await AsyncDatabaseManager.execute_write(
135
+ "test", "INSERT INTO public.example DEFAULT VALUES"
136
+ )
137
+
138
+ assert rows == [{"id": 2}]
139
+ assert submitted is True
@@ -1,81 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from contextlib import asynccontextmanager
4
-
5
- import pytest
6
-
7
- from matrx_orm.core.async_db_manager import AsyncDatabaseManager
8
- from matrx_orm.core.session_context import configure_session_context
9
-
10
-
11
- @pytest.mark.asyncio
12
- async def test_declared_session_context_bypasses_queue_and_opens_transaction(monkeypatch) -> None:
13
- events: list[object] = []
14
-
15
- class Queue:
16
- async def submit(self, _operation):
17
- raise AssertionError("declared context must not move to the queue drain task")
18
-
19
- @asynccontextmanager
20
- async def fake_transaction(database: str):
21
- events.append(("begin", database))
22
- yield
23
- events.append(("commit", database))
24
-
25
- async def fake_execute_query(_cls, config_name: str, query: str, *args, **kwargs):
26
- timeout = kwargs.get("timeout", 10.0)
27
- events.append(("write", config_name, query, args, timeout))
28
- return [{"id": 1}]
29
-
30
- monkeypatch.setattr("matrx_orm.core.transaction.transaction", fake_transaction)
31
- monkeypatch.setattr(AsyncDatabaseManager, "execute_query", classmethod(fake_execute_query))
32
- monkeypatch.setattr(
33
- "matrx_orm.core.write_queue.get_write_queue_registry",
34
- lambda: {"test": Queue()},
35
- )
36
- configure_session_context(
37
- lambda: {"app.actor_tier": "ai", "app.actor_system": "tool:instance_create"}
38
- )
39
- try:
40
- rows = await AsyncDatabaseManager.execute_write(
41
- "test", "INSERT INTO content_ir.kind_instance DEFAULT VALUES RETURNING id"
42
- )
43
- finally:
44
- configure_session_context(None)
45
-
46
- assert rows == [{"id": 1}]
47
- assert events == [
48
- ("begin", "test"),
49
- (
50
- "write",
51
- "test",
52
- "INSERT INTO content_ir.kind_instance DEFAULT VALUES RETURNING id",
53
- (),
54
- 10.0,
55
- ),
56
- ("commit", "test"),
57
- ]
58
-
59
-
60
- @pytest.mark.asyncio
61
- async def test_write_without_session_context_keeps_queue_path(monkeypatch) -> None:
62
- submitted = False
63
-
64
- class Queue:
65
- async def submit(self, _operation):
66
- nonlocal submitted
67
- submitted = True
68
- return [{"id": 2}]
69
-
70
- monkeypatch.setattr(
71
- "matrx_orm.core.write_queue.get_write_queue_registry",
72
- lambda: {"test": Queue()},
73
- )
74
- configure_session_context(None)
75
-
76
- rows = await AsyncDatabaseManager.execute_write(
77
- "test", "INSERT INTO public.example DEFAULT VALUES"
78
- )
79
-
80
- assert rows == [{"id": 2}]
81
- assert submitted is True
File without changes
File without changes
File without changes
File without changes