matrx-orm 3.1.164__tar.gz → 3.1.166__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 (386) hide show
  1. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/PKG-INFO +1 -1
  2. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/__init__.py +2 -0
  3. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/FEATURE.md +5 -0
  4. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/pool_watch.py +56 -2
  5. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/FEATURE.md +16 -0
  6. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/__init__.py +2 -0
  7. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/attachments.py +66 -3
  8. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/host_authorization.py +14 -1
  9. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/items.py +111 -12
  10. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/org_service.py +72 -7
  11. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/service.py +24 -3
  12. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/pyproject.toml +1 -1
  13. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_pool_holder_census.py +29 -0
  14. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_relational_backfill.py +5 -0
  15. matrx_orm-3.1.166/tests/test_secret_audit_names_its_organization.py +155 -0
  16. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_secrets_battery.py +31 -7
  17. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_secrets_minting_keys.py +20 -5
  18. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/.gitignore +0 -0
  19. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/AGENTS.md +0 -0
  20. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/BASE_CLASS_METHODS.md +0 -0
  21. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/CLAUDE.md +0 -0
  22. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/MODEL_API.md +0 -0
  23. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/README.md +0 -0
  24. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/database/orm/extended/managers/ai_model_base.py +0 -0
  25. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/docs/migrations.md +0 -0
  26. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/FEATURE.md +0 -0
  27. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/MODULE_README.md +0 -0
  28. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/MODULE_README.md +0 -0
  29. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/__init__.py +0 -0
  30. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/async_postgresql.py +0 -0
  31. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/base_adapter.py +0 -0
  32. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
  33. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/adapters/supabase_adapter.py +0 -0
  34. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/admin/FEATURE.md +0 -0
  35. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/admin/__init__.py +0 -0
  36. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/admin/router.py +0 -0
  37. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/__init__.py +0 -0
  38. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/auth.py +0 -0
  39. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/config.py +0 -0
  40. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/handlers.py +0 -0
  41. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/protocol.py +0 -0
  42. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/api/server.py +0 -0
  43. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/associations.py +0 -0
  44. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/cache_debug.py +0 -0
  45. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/catalog.py +0 -0
  46. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/catalog_sql.py +0 -0
  47. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/MODULE_README.md +0 -0
  48. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/__init__.py +0 -0
  49. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/postgres_connection.py +0 -0
  50. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/postgrest.py +0 -0
  51. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/supabase_auth.py +0 -0
  52. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/supabase_config.py +0 -0
  53. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/client/supabase_manager.py +0 -0
  54. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/EXTENDED-TASK.md +0 -0
  55. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/MODULE_README.md +0 -0
  56. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  57. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/TASKS.md +0 -0
  58. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/__init__.py +0 -0
  59. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/async_db_manager.py +0 -0
  60. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/base.py +0 -0
  61. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/config.py +0 -0
  62. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/connections.py +0 -0
  63. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/db_function.py +0 -0
  64. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/diagnostics.py +0 -0
  65. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/expressions.py +0 -0
  66. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/extended.py +0 -0
  67. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/fields.py +0 -0
  68. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/introspection.py +0 -0
  69. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/listen.py +0 -0
  70. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/loop_filters.py +0 -0
  71. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/model_dto.py +0 -0
  72. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/model_view.py +0 -0
  73. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/one_database.py +0 -0
  74. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/paginator.py +0 -0
  75. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/pool_maintenance.py +0 -0
  76. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/pooler_role.py +0 -0
  77. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/pydantic_bridge.py +0 -0
  78. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/registry.py +0 -0
  79. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/relations.py +0 -0
  80. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/resilience.py +0 -0
  81. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/rls_session.py +0 -0
  82. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/session_context.py +0 -0
  83. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/signals.py +0 -0
  84. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/tls.py +0 -0
  85. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/transaction.py +0 -0
  86. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/types.py +0 -0
  87. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/write_queue.py +0 -0
  88. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/core/write_retry.py +0 -0
  89. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/entity.py +0 -0
  90. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/error_handling.py +0 -0
  91. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/exceptions.py +0 -0
  92. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/extended/__init__.py +0 -0
  93. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/extended/app_error_handler.py +0 -0
  94. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/identity_rule.py +0 -0
  95. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/local_sqlite.py +0 -0
  96. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/middleware/__init__.py +0 -0
  97. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/middleware/base.py +0 -0
  98. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/MODULE_README.md +0 -0
  99. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/__init__.py +0 -0
  100. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/cli.py +0 -0
  101. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/ddl.py +0 -0
  102. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/diff.py +0 -0
  103. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/executor.py +0 -0
  104. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/integration.py +0 -0
  105. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/loader.py +0 -0
  106. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/operations.py +0 -0
  107. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/state.py +0 -0
  108. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/migrations/table_filter.py +0 -0
  109. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/no_org_assignment.py +0 -0
  110. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/FEATURE.md +0 -0
  111. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/MODULE_README.md +0 -0
  112. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/__init__.py +0 -0
  113. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/bulk_update_values.py +0 -0
  114. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/catalog_select.py +0 -0
  115. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/conflict.py +0 -0
  116. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/conflict_writes.py +0 -0
  117. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/create.py +0 -0
  118. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/db_functions.py +0 -0
  119. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/delete.py +0 -0
  120. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/dynamic_admin.py +0 -0
  121. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/dynamic_crud.py +0 -0
  122. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/graph_walk.py +0 -0
  123. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/latest_rows.py +0 -0
  124. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/queue_claim.py +0 -0
  125. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/read.py +0 -0
  126. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/relational_backfill.py +0 -0
  127. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/staging_load.py +0 -0
  128. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/operations/update.py +0 -0
  129. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/platform_access.py +0 -0
  130. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/platform_db.py +0 -0
  131. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/py.typed +0 -0
  132. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/pytest_lock_guard.py +0 -0
  133. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/pytest_plugin.py +0 -0
  134. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/python_sql/MODULE_README.md +0 -0
  135. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/python_sql/__init__.py +0 -0
  136. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/python_sql/db_objects.py +0 -0
  137. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  138. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  139. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/query/FEATURE.md +0 -0
  140. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/query/MODULE_README.md +0 -0
  141. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/query/__init__.py +0 -0
  142. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/query/builder.py +0 -0
  143. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/query/executor.py +0 -0
  144. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/resources/__init__.py +0 -0
  145. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
  146. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
  147. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/FEATURE.md +0 -0
  148. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/MODULE_README.md +0 -0
  149. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/__init__.py +0 -0
  150. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/code_handler.py +0 -0
  151. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/codegen_writer.py +0 -0
  152. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/columns.py +0 -0
  153. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/common.py +0 -0
  154. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/diff_preview.py +0 -0
  155. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
  156. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/generator.py +0 -0
  157. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  158. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  159. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  160. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  161. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/package_wiring.py +0 -0
  162. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/relationships.py +0 -0
  163. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/runner.py +0 -0
  164. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/schema.py +0 -0
  165. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/schema_manager.py +0 -0
  166. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/tables.py +0 -0
  167. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/schema_builder/views.py +0 -0
  168. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/crypto.py +0 -0
  169. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/model.py +0 -0
  170. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
  171. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/README.md +0 -0
  172. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/__init__.py +0 -0
  173. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/coalesce.py +0 -0
  174. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/dag.py +0 -0
  175. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/errors.py +0 -0
  176. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/fallback.py +0 -0
  177. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/flush.py +0 -0
  178. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/lifecycle.py +0 -0
  179. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/managed.py +0 -0
  180. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/op.py +0 -0
  181. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/reads.py +0 -0
  182. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/session.py +0 -0
  183. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/session/telemetry.py +0 -0
  184. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/MODULE_README.md +0 -0
  185. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/__init__.py +0 -0
  186. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/executor.py +0 -0
  187. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/queries.py +0 -0
  188. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/registry.py +0 -0
  189. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/types.py +0 -0
  190. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/sql_executor/utils.py +0 -0
  191. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/state.py +0 -0
  192. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/utils/__init__.py +0 -0
  193. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/utils/sql_utils.py +0 -0
  194. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/utils/type_converters.py +0 -0
  195. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/matrx_orm/write_actor.py +0 -0
  196. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/scripts/git-branches.sh +0 -0
  197. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/scripts/publish.sh +0 -0
  198. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/scripts/release.sh +0 -0
  199. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/MODULE_README.md +0 -0
  200. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/__init__.py +0 -0
  201. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/conftest.py +0 -0
  202. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/MODULE_README.md +0 -0
  203. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/__init__.py +0 -0
  204. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_adapter_registry.py +0 -0
  205. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_admin_db_columns.py +0 -0
  206. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_admin_response_rendering.py +0 -0
  207. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_admin_search_negation.py +0 -0
  208. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_admin_search_sentinels.py +0 -0
  209. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_advisory_lock.py +0 -0
  210. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_agent_message.py +0 -0
  211. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_api_auth.py +0 -0
  212. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_api_config.py +0 -0
  213. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_api_handlers.py +0 -0
  214. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_api_protocol.py +0 -0
  215. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_array_agg_order_by.py +0 -0
  216. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_associations.py +0 -0
  217. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_associations_wiring.py +0 -0
  218. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_bulk_hydration_offload.py +0 -0
  219. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_bulk_update_by_pk.py +0 -0
  220. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
  221. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_cache_debug.py +0 -0
  222. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_call_function.py +0 -0
  223. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_case_when.py +0 -0
  224. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_catalog.py +0 -0
  225. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_committed_row_guard.py +0 -0
  226. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_composite_pk_filter.py +0 -0
  227. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_composite_pk_write_paths.py +0 -0
  228. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_config.py +0 -0
  229. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_conflict_target.py +0 -0
  230. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_conflict_writes.py +0 -0
  231. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_connection_codecs.py +0 -0
  232. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_connection_poison_guard.py +0 -0
  233. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_connection_primitives.py +0 -0
  234. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_count_composite_distinct.py +0 -0
  235. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_count_limit_param_leak.py +0 -0
  236. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_db_function_field.py +0 -0
  237. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_ddl_generator.py +0 -0
  238. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_deadlock_retry.py +0 -0
  239. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_derived_table.py +0 -0
  240. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_dirty_tracking.py +0 -0
  241. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_dynamic_crud.py +0 -0
  242. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_exceptions.py +0 -0
  243. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
  244. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_expression_primitives.py +0 -0
  245. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_fields.py +0 -0
  246. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
  247. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_from_alias.py +0 -0
  248. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_fts.py +0 -0
  249. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_func_expression_args.py +0 -0
  250. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_graph_walk.py +0 -0
  251. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_having_annotate_alias.py +0 -0
  252. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
  253. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_introspect_rls_policies.py +0 -0
  254. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_join_and_aggregate.py +0 -0
  255. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_latest_rows.py +0 -0
  256. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_listen_notify.py +0 -0
  257. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_local_sqlite.py +0 -0
  258. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_lock_contention_retry.py +0 -0
  259. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_managed_write_guard.py +0 -0
  260. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_matrx_entity.py +0 -0
  261. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_migration_diff_types.py +0 -0
  262. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_migration_loader.py +0 -0
  263. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_model_instance.py +0 -0
  264. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_model_meta.py +0 -0
  265. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_optimistic_concurrency.py +0 -0
  266. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_order_by_expression.py +0 -0
  267. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_org_assignment_inventory.py +0 -0
  268. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_orm_banners_are_client_safe.py +0 -0
  269. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_parameter_name_hydration.py +0 -0
  270. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_patch_jsonb_path.py +0 -0
  271. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_persisted_count.py +0 -0
  272. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_pool_loop_recreation.py +0 -0
  273. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_pool_maintenance.py +0 -0
  274. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_postgrest_filters.py +0 -0
  275. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_pydantic_bridge.py +0 -0
  276. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_query_builder.py +0 -0
  277. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_query_error_detail.py +0 -0
  278. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_query_executor_sql.py +0 -0
  279. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_query_timeout.py +0 -0
  280. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
  281. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_queue_claim.py +0 -0
  282. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_read_connection_retry.py +0 -0
  283. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_registry.py +0 -0
  284. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_registry_multi_database.py +0 -0
  285. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_registry_multi_schema.py +0 -0
  286. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_relations.py +0 -0
  287. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_resilience.py +0 -0
  288. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_rls_session_scope.py +0 -0
  289. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_schema_exists.py +0 -0
  290. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_session_advisory_lock.py +0 -0
  291. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_standalone_write_session_context.py +0 -0
  292. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_state_cache.py +0 -0
  293. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_subquery_filter_raw.py +0 -0
  294. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_subquery_in_filter.py +0 -0
  295. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_subquery_nested_expressions.py +0 -0
  296. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_supabase_auth.py +0 -0
  297. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_supabase_config.py +0 -0
  298. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_tls.py +0 -0
  299. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_transaction_database_identity.py +0 -0
  300. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_typed_join_projection.py +0 -0
  301. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_typed_predicates.py +0 -0
  302. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_update_case_expression.py +0 -0
  303. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_update_subquery.py +0 -0
  304. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_update_with_rebase.py +0 -0
  305. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_upsert_default_leak.py +0 -0
  306. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_upsert_with_conflict.py +0 -0
  307. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_values_jsonb_decode.py +0 -0
  308. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_watched_lifecycle.py +0 -0
  309. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_write_queue_deadline.py +0 -0
  310. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level1/test_write_retry_semantics.py +0 -0
  311. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/MODULE_README.md +0 -0
  312. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/__init__.py +0 -0
  313. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/conftest.py +0 -0
  314. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_bulk_ops.py +0 -0
  315. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_cache_integration.py +0 -0
  316. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_crud.py +0 -0
  317. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_foreign_keys.py +0 -0
  318. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_m2m.py +0 -0
  319. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_manager.py +0 -0
  320. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_migrations_live.py +0 -0
  321. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_query_execution.py +0 -0
  322. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/test_schema_diff.py +0 -0
  323. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
  324. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/live_pooler_role.py +0 -0
  325. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/.env.example +0 -0
  326. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/README.md +0 -0
  327. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/__init__.py +0 -0
  328. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/generate.py +0 -0
  329. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/generated/.gitkeep +0 -0
  330. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/matrx_orm.yaml +0 -0
  331. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project/test_schema_generation.py +0 -0
  332. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/.env.example +0 -0
  333. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/README.md +0 -0
  334. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/__init__.py +0 -0
  335. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_example.py +0 -0
  336. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_example.ts +0 -0
  337. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/client_supabase_example.py +0 -0
  338. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/sample_project_desktop/server.py +0 -0
  339. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/entity_tests.py +0 -0
  340. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_base_generation.py +0 -0
  341. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_composite_pk_fk_generation.py +0 -0
  342. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_composite_unique_generation.py +0 -0
  343. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_dto_identity_generation.py +0 -0
  344. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_entity_capability_generation.py +0 -0
  345. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_enum_ordering.py +0 -0
  346. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_generate_schema.py +0 -0
  347. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_junction_analysis.py +0 -0
  348. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_multi_schema_output.py +0 -0
  349. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_schema_analysis.py +0 -0
  350. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_sql_expression_defaults.py +0 -0
  351. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_table_relationships_query.py +0 -0
  352. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema/test_view_generation.py +0 -0
  353. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema_builder/test_array_default_parsing.py +0 -0
  354. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema_builder/test_focused_generation_plan.py +0 -0
  355. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/schema_builder/test_host_models_aggregator.py +0 -0
  356. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/__init__.py +0 -0
  357. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/conftest.py +0 -0
  358. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_cache_no_downgrade.py +0 -0
  359. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_capture_poison_proof.py +0 -0
  360. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_coalesce.py +0 -0
  361. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_dag.py +0 -0
  362. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_disk_spill_fallback.py +0 -0
  363. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_flush_individual_fallback.py +0 -0
  364. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_governed_write.py +0 -0
  365. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_managed.py +0 -0
  366. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_op_enqueue_site.py +0 -0
  367. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_reads.py +0 -0
  368. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_record_error_bounded_insert.py +0 -0
  369. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_record_error_storm.py +0 -0
  370. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_session.py +0 -0
  371. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/session/test_spill_guard_plugin.py +0 -0
  372. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_array_arg_element_type.py +0 -0
  373. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_database_name_alias.py +0 -0
  374. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_db_functions.py +0 -0
  375. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_dynamic_select_unregistered.py +0 -0
  376. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_immutable_insert_or_exact_verify.py +0 -0
  377. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_keyed_digest.py +0 -0
  378. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_model_cls_refactor.py +0 -0
  379. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_no_blocking_asyncpg_tls.py +0 -0
  380. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_one_database.py +0 -0
  381. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_order_by_desc_nulls_last.py +0 -0
  382. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_pooler_role_guard.py +0 -0
  383. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_shared_lock_guard.py +0 -0
  384. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_sql_param_casts.py +0 -0
  385. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_sync_twins_guard.py +0 -0
  386. {matrx_orm-3.1.164 → matrx_orm-3.1.166}/tests/test_user_visible_lookup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: matrx-orm
3
- Version: 3.1.164
3
+ Version: 3.1.166
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
@@ -226,6 +226,7 @@ from .core.pydantic_bridge import (
226
226
  model_json_schema,
227
227
  )
228
228
  from .core.pool_watch import (
229
+ PoolHolderProvenance,
229
230
  PoolHolderSnapshot,
230
231
  PoolSaturationEvent,
231
232
  connection_holder_census,
@@ -657,6 +658,7 @@ __all__ = [
657
658
  "Paginator",
658
659
  "Page",
659
660
  # ── Pool saturation observability ───────────────────────────────────────────
661
+ "PoolHolderProvenance",
660
662
  "PoolHolderSnapshot",
661
663
  "PoolSaturationEvent",
662
664
  "connection_holder_census",
@@ -186,6 +186,11 @@ and invokes host sinks; subsequent retry timeouts do not spam another incident.
186
186
  Once a release returns an idle slot, the alarm re-arms. The final
187
187
  `PoolAcquireTimeoutError.details` carries both the first snapshot and the current
188
188
  census, so retry/persistence casualties preserve the diagnosis.
189
+ The census also carries only identifier-validated request provenance from the
190
+ host-injected context (`request_id`, source/execution labels). It deliberately
191
+ excludes route text, users, arguments, SQL, and arbitrary metadata, so an opaque
192
+ ORM operation can be tied to its producer without turning the saturation sink
193
+ into a request-payload recorder.
189
194
 
190
195
  **Release is bounded and cancellation-safe.** Return/reset runs in a dedicated,
191
196
  shielded task with a 10-second asyncpg release timeout. A holder remains visible
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import logging
5
+ import re
5
6
  import time
6
7
  import traceback
7
8
  from collections.abc import AsyncIterator, Callable
@@ -10,14 +11,41 @@ from dataclasses import dataclass
10
11
  from datetime import UTC, datetime
11
12
  from typing import Any, Literal
12
13
 
13
- from pydantic import BaseModel, ConfigDict
14
+ from pydantic import BaseModel, ConfigDict, field_validator
14
15
 
15
- from matrx_utils import vcprint
16
+ from matrx_utils import get_active_context, vcprint
16
17
 
17
18
  logger = logging.getLogger("matrx_orm.pool_watch")
18
19
 
19
20
  _STACK_LIMIT = 24
20
21
  _DISPLAY_STACK_LIMIT = 8
22
+ _PROVENANCE_TEXT = re.compile(r"^[A-Za-z0-9_.:/-]{1,128}$")
23
+
24
+
25
+ class PoolHolderProvenance(BaseModel):
26
+ """Bounded, request-scoped producer identity safe for durable capture."""
27
+
28
+ model_config = ConfigDict(extra="forbid", frozen=True)
29
+
30
+ request_id: str | None = None
31
+ source_app: str | None = None
32
+ source_feature: str | None = None
33
+ origin_class: str | None = None
34
+ execution_kind: str | None = None
35
+ execution_id: str | None = None
36
+
37
+ @field_validator(
38
+ "request_id",
39
+ "source_app",
40
+ "source_feature",
41
+ "origin_class",
42
+ "execution_kind",
43
+ "execution_id",
44
+ mode="before",
45
+ )
46
+ @classmethod
47
+ def _only_bounded_identifiers(cls, value: Any) -> str | None:
48
+ return value if isinstance(value, str) and _PROVENANCE_TEXT.fullmatch(value) else None
21
49
 
22
50
 
23
51
  class PoolHolderSnapshot(BaseModel):
@@ -32,6 +60,7 @@ class PoolHolderSnapshot(BaseModel):
32
60
  acquired_at: datetime
33
61
  checkout_site: str
34
62
  checkout_stack: tuple[str, ...]
63
+ provenance: PoolHolderProvenance = PoolHolderProvenance()
35
64
  current_site: str | None
36
65
  current_stack: tuple[str, ...]
37
66
  task_done: bool
@@ -68,6 +97,7 @@ class _TrackedHolder:
68
97
  acquired_at: datetime
69
98
  checkout_site: str
70
99
  checkout_stack: tuple[str, ...]
100
+ provenance: PoolHolderProvenance
71
101
  state: Literal["held", "releasing"] = "held"
72
102
 
73
103
 
@@ -105,6 +135,26 @@ def _capture_checkout_stack() -> tuple[str, tuple[str, ...]]:
105
135
  return site, formatted
106
136
 
107
137
 
138
+ def _safe_provenance_text(value: Any) -> str | None:
139
+ """Keep only bounded identifier vocabulary; never persist context payloads."""
140
+ return value if isinstance(value, str) and _PROVENANCE_TEXT.fullmatch(value) else None
141
+
142
+
143
+ def _capture_provenance() -> PoolHolderProvenance:
144
+ """Project host request context without coupling this package to that host."""
145
+ context = get_active_context()
146
+ if context is None:
147
+ return PoolHolderProvenance()
148
+ return PoolHolderProvenance(
149
+ request_id=_safe_provenance_text(getattr(context, "request_id", None)),
150
+ source_app=_safe_provenance_text(getattr(context, "source_app", None)),
151
+ source_feature=_safe_provenance_text(getattr(context, "source_feature", None)),
152
+ origin_class=_safe_provenance_text(getattr(context, "origin_class", None)),
153
+ execution_kind=_safe_provenance_text(getattr(context, "execution_kind", None)),
154
+ execution_id=_safe_provenance_text(getattr(context, "execution_id", None)),
155
+ )
156
+
157
+
108
158
  def _task_stack(task: asyncio.Task[Any]) -> tuple[str | None, tuple[str, ...]]:
109
159
  try:
110
160
  frames = task.get_stack(limit=_DISPLAY_STACK_LIMIT)
@@ -122,6 +172,7 @@ def track_connection_holder(config_name: str, connection: Any) -> None:
122
172
  if task is None:
123
173
  return
124
174
  checkout_site, checkout_stack = _capture_checkout_stack()
175
+ provenance = _capture_provenance()
125
176
  tracked = _TrackedHolder(
126
177
  config_name=config_name,
127
178
  connection=connection,
@@ -130,6 +181,7 @@ def track_connection_holder(config_name: str, connection: Any) -> None:
130
181
  acquired_at=datetime.now(UTC),
131
182
  checkout_site=checkout_site,
132
183
  checkout_stack=checkout_stack,
184
+ provenance=provenance,
133
185
  )
134
186
  _holders.setdefault(config_name, {})[id(connection)] = tracked
135
187
 
@@ -166,6 +218,7 @@ def connection_holder_census(config_name: str) -> tuple[PoolHolderSnapshot, ...]
166
218
  acquired_at=tracked.acquired_at,
167
219
  checkout_site=tracked.checkout_site,
168
220
  checkout_stack=tracked.checkout_stack,
221
+ provenance=tracked.provenance,
169
222
  current_site=current_site,
170
223
  current_stack=current_stack,
171
224
  task_done=tracked.task.done(),
@@ -304,6 +357,7 @@ def emit_first_pool_timeout(
304
357
 
305
358
 
306
359
  __all__ = [
360
+ "PoolHolderProvenance",
307
361
  "PoolHolderSnapshot",
308
362
  "PoolSaturationEvent",
309
363
  "connection_holder_census",
@@ -328,6 +328,22 @@ delete).
328
328
 
329
329
  ## Change Log
330
330
 
331
+ - **2026-09-17 (3.1.160)** — **An audit row NAMES its organization, or nothing is
332
+ written.** `record_secret_audit(organization_id=...)` is REQUIRED and refuses an
333
+ empty value by name; it used to default to `None` "for legacy callers", and 51 of
334
+ its 72 call sites passed nothing, so the database's resolver chain
335
+ (`users._stamp_secret_audit_org`, migration 0444) stamped whichever personal
336
+ organization it could reach and a team credential's trail landed in one person's
337
+ workspace, silently. The new `audit_organization(record_organization_id=...,
338
+ request_organization_id=...)` picks the value: the AUDITED RECORD's organization
339
+ wins (a child row takes its parent's tenancy), a PERSONAL record — whose
340
+ `organization_id` IS NULL by `credential_items_one_owner_check` — is filed in the
341
+ organization the HOST carried in, and with neither it REFUSES naming the site.
342
+ Every write/reveal/grant/transfer/fork/attachment entry point therefore takes an
343
+ optional `audit_organization_id` (the admitted request organization); the battery
344
+ still has no tenancy model and never resolves one. Pinned by
345
+ `tests/test_secret_audit_names_its_organization.py`. Law:
346
+ `common-docs/policies/context-is-carried-never-rebuilt.md`.
331
347
  - **2026-09-12** — `resolve_org_secrets`' `last_used_at` telemetry write now
332
348
  locks its rows ascending by primary key (`lock_rows_in_pk_order=True`). As an
333
349
  unordered multi-row UPDATE it deadlocked against itself under parallel agent
@@ -132,6 +132,7 @@ from .org_service import (
132
132
  delete_org_secret,
133
133
  get_org_secret_row,
134
134
  list_org_secrets,
135
+ audit_organization,
135
136
  record_secret_audit,
136
137
  resolve_effective_secrets,
137
138
  resolve_org_secrets,
@@ -282,6 +283,7 @@ __all__ = [
282
283
  "delete_org_secret",
283
284
  "get_org_secret_row",
284
285
  "list_org_secrets",
286
+ "audit_organization",
285
287
  "record_secret_audit",
286
288
  "resolve_effective_secrets",
287
289
  "resolve_org_secrets",
@@ -15,7 +15,7 @@ from typing import Any
15
15
  from .crypto import decrypt_bytes, encrypt_bytes
16
16
  from .items import CredentialItemNotFoundError, HANDLING_MODES, SealedFieldError
17
17
  from .model import CredentialAttachment, CredentialItem
18
- from .org_service import record_secret_audit
18
+ from .org_service import audit_organization, record_secret_audit
19
19
  from .service import SecretDecryptError
20
20
 
21
21
  MAX_VAULT_ATTACHMENT_BYTES = 25 * 1024 * 1024
@@ -85,6 +85,23 @@ async def _require_item(item_id: str) -> None:
85
85
  raise CredentialItemNotFoundError(f"credential item {item_id} not found")
86
86
 
87
87
 
88
+ async def _parent_item_organization(item_id: str) -> str | None:
89
+ """The organization of the item an attachment hangs off.
90
+
91
+ An attachment is a CHILD of the credential item — ownership and sharing
92
+ live exclusively on the parent — so its audit row belongs in the PARENT's
93
+ organization (THE REQUEST CONTEXT IS CARRIED, NEVER REBUILT, rule 4). A
94
+ PERSONAL parent has ``organization_id IS NULL`` by constraint; the host's
95
+ request organization answers for it, through :func:`audit_organization`.
96
+ """
97
+ rows = await CredentialItem.filter(id=item_id, deleted_at__isnull=True).values(
98
+ "organization_id"
99
+ )
100
+ if not rows:
101
+ raise CredentialItemNotFoundError(f"credential item {item_id} not found")
102
+ return rows[0].get("organization_id")
103
+
104
+
88
105
  async def _require_raw(attachment_id: str) -> dict[str, Any]:
89
106
  rows = await CredentialAttachment.filter(id=attachment_id, deleted_at__isnull=True).values(
90
107
  *_ATTACHMENT_FIELDS, "value_encrypted"
@@ -157,9 +174,11 @@ async def add_credential_attachment(
157
174
  content: bytes,
158
175
  handling: str = "revealable",
159
176
  actor_id: str | None = None,
177
+ audit_organization_id: str | None = None,
160
178
  ) -> CredentialAttachmentRow:
161
179
  """Encrypt and attach one file to an existing credential item."""
162
180
  await _require_item(item_id)
181
+ parent_org = await _parent_item_organization(item_id)
163
182
  _validate_content(content)
164
183
  _validate_handling(handling)
165
184
  clean_label = _validate_text(label, name="label", maximum=200)
@@ -184,6 +203,11 @@ async def add_credential_attachment(
184
203
  await record_secret_audit(
185
204
  action="attachment_added",
186
205
  actor_id=actor_id,
206
+ organization_id=audit_organization(
207
+ record_organization_id=parent_org,
208
+ request_organization_id=audit_organization_id,
209
+ what=f"add_credential_attachment(item_id={item_id})",
210
+ ),
187
211
  metadata={
188
212
  "credential_item_id": item_id,
189
213
  "attachment_id": str(instance.id),
@@ -209,9 +233,11 @@ async def update_credential_attachment_metadata(
209
233
  file_name: str | None = None,
210
234
  handling: str | None = None,
211
235
  actor_id: str | None = None,
236
+ audit_organization_id: str | None = None,
212
237
  ) -> CredentialAttachmentRow:
213
238
  """Patch safe metadata without touching bytes or ``value_version``."""
214
239
  raw = await _require_raw(attachment_id)
240
+ parent_org = await _parent_item_organization(str(raw["credential_item_id"]))
215
241
  if handling is not None:
216
242
  _validate_handling(handling)
217
243
  if str(raw["handling"]) == "sealed" and handling != "sealed":
@@ -238,6 +264,11 @@ async def update_credential_attachment_metadata(
238
264
  await record_secret_audit(
239
265
  action="attachment_updated",
240
266
  actor_id=actor_id,
267
+ organization_id=audit_organization(
268
+ record_organization_id=parent_org,
269
+ request_organization_id=audit_organization_id,
270
+ what=f"update_credential_attachment_metadata(attachment_id={attachment_id})",
271
+ ),
241
272
  metadata={
242
273
  "credential_item_id": str(raw["credential_item_id"]),
243
274
  "attachment_id": attachment_id,
@@ -257,9 +288,11 @@ async def replace_credential_attachment(
257
288
  media_type: str | None,
258
289
  content: bytes,
259
290
  actor_id: str | None = None,
291
+ audit_organization_id: str | None = None,
260
292
  ) -> CredentialAttachmentRow:
261
293
  """Atomically replace the encrypted bytes and file metadata."""
262
294
  raw = await _require_raw(attachment_id)
295
+ parent_org = await _parent_item_organization(str(raw["credential_item_id"]))
263
296
  _validate_content(content)
264
297
  clean_name = _validate_text(file_name, name="file_name", maximum=512)
265
298
  await CredentialAttachment.update_where(
@@ -274,6 +307,11 @@ async def replace_credential_attachment(
274
307
  await record_secret_audit(
275
308
  action="attachment_replaced",
276
309
  actor_id=actor_id,
310
+ organization_id=audit_organization(
311
+ record_organization_id=parent_org,
312
+ request_organization_id=audit_organization_id,
313
+ what=f"replace_credential_attachment(attachment_id={attachment_id})",
314
+ ),
277
315
  metadata={
278
316
  "credential_item_id": str(raw["credential_item_id"]),
279
317
  "attachment_id": attachment_id,
@@ -287,8 +325,14 @@ async def replace_credential_attachment(
287
325
  return row
288
326
 
289
327
 
290
- async def delete_credential_attachment(attachment_id: str, *, actor_id: str | None = None) -> bool:
328
+ async def delete_credential_attachment(
329
+ attachment_id: str,
330
+ *,
331
+ actor_id: str | None = None,
332
+ audit_organization_id: str | None = None,
333
+ ) -> bool:
291
334
  raw = await _require_raw(attachment_id)
335
+ parent_org = await _parent_item_organization(str(raw["credential_item_id"]))
292
336
  now = datetime.now(UTC)
293
337
  result = await CredentialAttachment.update_where(
294
338
  {"id": attachment_id, "deleted_at__isnull": True},
@@ -300,6 +344,11 @@ async def delete_credential_attachment(attachment_id: str, *, actor_id: str | No
300
344
  await record_secret_audit(
301
345
  action="attachment_deleted",
302
346
  actor_id=actor_id,
347
+ organization_id=audit_organization(
348
+ record_organization_id=parent_org,
349
+ request_organization_id=audit_organization_id,
350
+ what=f"delete_credential_attachment(attachment_id={attachment_id})",
351
+ ),
303
352
  metadata={
304
353
  "credential_item_id": str(raw["credential_item_id"]),
305
354
  "attachment_id": attachment_id,
@@ -310,14 +359,23 @@ async def delete_credential_attachment(attachment_id: str, *, actor_id: str | No
310
359
 
311
360
 
312
361
  async def reveal_credential_attachment(
313
- attachment_id: str, *, actor_id: str | None = None
362
+ attachment_id: str,
363
+ *,
364
+ actor_id: str | None = None,
365
+ audit_organization_id: str | None = None,
314
366
  ) -> tuple[CredentialAttachmentRow, bytes]:
315
367
  """Human download path. Sealed bytes are structurally refused."""
316
368
  raw = await _require_raw(attachment_id)
369
+ parent_org = await _parent_item_organization(str(raw["credential_item_id"]))
317
370
  if str(raw["handling"]) == "sealed":
318
371
  await record_secret_audit(
319
372
  action="attachment_download_denied",
320
373
  actor_id=actor_id,
374
+ organization_id=audit_organization(
375
+ record_organization_id=parent_org,
376
+ request_organization_id=audit_organization_id,
377
+ what=f"reveal_credential_attachment(attachment_id={attachment_id})",
378
+ ),
321
379
  metadata={
322
380
  "credential_item_id": str(raw["credential_item_id"]),
323
381
  "attachment_id": attachment_id,
@@ -337,6 +395,11 @@ async def reveal_credential_attachment(
337
395
  await record_secret_audit(
338
396
  action="attachment_downloaded",
339
397
  actor_id=actor_id,
398
+ organization_id=audit_organization(
399
+ record_organization_id=parent_org,
400
+ request_organization_id=audit_organization_id,
401
+ what=f"reveal_credential_attachment(attachment_id={attachment_id})",
402
+ ),
340
403
  metadata={
341
404
  "credential_item_id": str(raw["credential_item_id"]),
342
405
  "attachment_id": attachment_id,
@@ -131,6 +131,7 @@ async def require_host_authorization(
131
131
  *,
132
132
  capability: str,
133
133
  operation: str,
134
+ audit_organization_id: str | None = None,
134
135
  ) -> None:
135
136
  """Refuse a privileged write unless the host recorded ``capability`` for
136
137
  this (item, actor). Screams and writes a durable ``denied`` audit row
@@ -149,12 +150,24 @@ async def require_host_authorization(
149
150
  capability,
150
151
  sorted(caps) or "nothing",
151
152
  )
152
- from .org_service import record_secret_audit
153
+ from .model import CredentialItem
154
+ from .org_service import audit_organization, record_secret_audit
153
155
 
154
156
  try:
157
+ # The denial row is a child of the ITEM, so it is filed in the item's
158
+ # organization; a PERSONAL item names none by constraint and the host's
159
+ # request organization answers for it.
160
+ item_rows = await CredentialItem.filter(id=item_id).values("organization_id")
155
161
  await record_secret_audit(
156
162
  action="denied",
157
163
  actor_id=actor_id,
164
+ organization_id=audit_organization(
165
+ record_organization_id=(
166
+ item_rows[0].get("organization_id") if item_rows else None
167
+ ),
168
+ request_organization_id=audit_organization_id,
169
+ what=f"require_host_authorization(item_id={item_id})",
170
+ ),
158
171
  metadata={
159
172
  "credential_item_id": str(item_id),
160
173
  "operation": operation,