matrx-orm 3.1.257__tar.gz → 3.1.259__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 (465) hide show
  1. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/PKG-INFO +1 -1
  2. matrx_orm-3.1.259/docs/attachment-concurrency.md +28 -0
  3. matrx_orm-3.1.259/docs/index.md +10 -0
  4. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/FEATURE.md +19 -46
  5. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/native_enable.py +9 -5
  6. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/pyproject.toml +1 -1
  7. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_native_enable.py +62 -10
  8. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/.gitignore +0 -0
  9. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/AGENTS.md +0 -0
  10. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/BASE_CLASS_METHODS.md +0 -0
  11. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/CHANGELOG.md +0 -0
  12. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/CLAUDE.md +0 -0
  13. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/MODEL_API.md +0 -0
  14. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/README.md +0 -0
  15. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/database/orm/extended/managers/ai_model_base.py +0 -0
  16. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/docs/migrations.md +0 -0
  17. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/FEATURE.md +0 -0
  18. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/MODULE_README.md +0 -0
  19. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/__init__.py +0 -0
  20. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/MODULE_README.md +0 -0
  21. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/__init__.py +0 -0
  22. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/async_postgresql.py +0 -0
  23. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/base_adapter.py +0 -0
  24. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/postgrest_client_adapter.py +0 -0
  25. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/adapters/supabase_adapter.py +0 -0
  26. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/admin/FEATURE.md +0 -0
  27. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/admin/__init__.py +0 -0
  28. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/admin/router.py +0 -0
  29. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/__init__.py +0 -0
  30. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/auth.py +0 -0
  31. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/config.py +0 -0
  32. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/handlers.py +0 -0
  33. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/protocol.py +0 -0
  34. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/api/server.py +0 -0
  35. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/associations.py +0 -0
  36. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/cache_debug.py +0 -0
  37. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/catalog.py +0 -0
  38. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/catalog_sql.py +0 -0
  39. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/MODULE_README.md +0 -0
  40. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/__init__.py +0 -0
  41. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/postgres_connection.py +0 -0
  42. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/postgrest.py +0 -0
  43. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/supabase_auth.py +0 -0
  44. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/supabase_config.py +0 -0
  45. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/client/supabase_manager.py +0 -0
  46. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/EXTENDED-TASK.md +0 -0
  47. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/FEATURE.md +0 -0
  48. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/MODULE_README.md +0 -0
  49. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/RELATIONS-TASKS.md +0 -0
  50. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/TASKS.md +0 -0
  51. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/__init__.py +0 -0
  52. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/admin_lane.py +0 -0
  53. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/async_db_manager.py +0 -0
  54. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/base.py +0 -0
  55. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/config.py +0 -0
  56. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/connections.py +0 -0
  57. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/db_function.py +0 -0
  58. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/diagnostics.py +0 -0
  59. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/expressions.py +0 -0
  60. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/extended.py +0 -0
  61. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/fields.py +0 -0
  62. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/foreign_session_state.py +0 -0
  63. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/introspection.py +0 -0
  64. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/listen.py +0 -0
  65. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/loop_filters.py +0 -0
  66. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/model_dto.py +0 -0
  67. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/model_view.py +0 -0
  68. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/one_database.py +0 -0
  69. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/paginator.py +0 -0
  70. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/pool_maintenance.py +0 -0
  71. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/pool_watch.py +0 -0
  72. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/pooler_role.py +0 -0
  73. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/pydantic_bridge.py +0 -0
  74. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/read_write.py +0 -0
  75. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/registry.py +0 -0
  76. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/relations.py +0 -0
  77. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/resilience.py +0 -0
  78. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/rls_session.py +0 -0
  79. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/session_context.py +0 -0
  80. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/signals.py +0 -0
  81. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/statement_ceiling.py +0 -0
  82. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/tls.py +0 -0
  83. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/transaction.py +0 -0
  84. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/types.py +0 -0
  85. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/write_queue.py +0 -0
  86. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/core/write_retry.py +0 -0
  87. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/entity.py +0 -0
  88. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/error_handling.py +0 -0
  89. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/exceptions.py +0 -0
  90. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/extended/__init__.py +0 -0
  91. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/extended/app_error_handler.py +0 -0
  92. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/identity_rule.py +0 -0
  93. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/local_sqlite.py +0 -0
  94. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/middleware/__init__.py +0 -0
  95. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/middleware/base.py +0 -0
  96. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/MODULE_README.md +0 -0
  97. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/__init__.py +0 -0
  98. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/cli.py +0 -0
  99. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/ddl.py +0 -0
  100. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/diff.py +0 -0
  101. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/executor.py +0 -0
  102. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/integration.py +0 -0
  103. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/loader.py +0 -0
  104. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/operations.py +0 -0
  105. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/state.py +0 -0
  106. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/migrations/table_filter.py +0 -0
  107. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/no_org_assignment.py +0 -0
  108. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/FEATURE.md +0 -0
  109. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/MODULE_README.md +0 -0
  110. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/__init__.py +0 -0
  111. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/bulk_update_values.py +0 -0
  112. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/catalog_select.py +0 -0
  113. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/conflict.py +0 -0
  114. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/conflict_writes.py +0 -0
  115. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/create.py +0 -0
  116. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/db_functions.py +0 -0
  117. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/delete.py +0 -0
  118. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/dynamic_admin.py +0 -0
  119. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/dynamic_crud.py +0 -0
  120. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/graph_walk.py +0 -0
  121. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/latest_rows.py +0 -0
  122. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/queue_claim.py +0 -0
  123. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/read.py +0 -0
  124. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/relational_backfill.py +0 -0
  125. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/staging_load.py +0 -0
  126. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/operations/update.py +0 -0
  127. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/platform_access.py +0 -0
  128. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/platform_db.py +0 -0
  129. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/py.typed +0 -0
  130. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/pytest_lock_guard.py +0 -0
  131. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/pytest_plugin.py +0 -0
  132. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/python_sql/MODULE_README.md +0 -0
  133. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/python_sql/__init__.py +0 -0
  134. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/python_sql/db_objects.py +0 -0
  135. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/python_sql/table_detailed_relationships.py +0 -0
  136. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/python_sql/table_typescript_relationship.py +0 -0
  137. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/query/FEATURE.md +0 -0
  138. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/query/MODULE_README.md +0 -0
  139. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/query/__init__.py +0 -0
  140. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/query/builder.py +0 -0
  141. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/query/executor.py +0 -0
  142. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/resources/__init__.py +0 -0
  143. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/resources/additional-assigners-2026-09-12.json +0 -0
  144. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/resources/org_assignment_trigger_baseline.json +0 -0
  145. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/FEATURE.md +0 -0
  146. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/MODULE_README.md +0 -0
  147. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/__init__.py +0 -0
  148. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/code_handler.py +0 -0
  149. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/codegen_writer.py +0 -0
  150. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/columns.py +0 -0
  151. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/common.py +0 -0
  152. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/diff_preview.py +0 -0
  153. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/entity_capabilities.py +0 -0
  154. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/excluded_targets.py +0 -0
  155. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/generator.py +0 -0
  156. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/helpers/__init__.py +0 -0
  157. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/helpers/base_generators.py +0 -0
  158. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/helpers/entity_generators.py +0 -0
  159. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/helpers/git_checker.py +0 -0
  160. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/package_wiring.py +0 -0
  161. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/relationships.py +0 -0
  162. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/runner.py +0 -0
  163. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/schema.py +0 -0
  164. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/schema_manager.py +0 -0
  165. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/tables.py +0 -0
  166. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/schema_builder/views.py +0 -0
  167. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/__init__.py +0 -0
  168. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/attachments.py +0 -0
  169. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/backup_restore.py +0 -0
  170. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/crypto.py +0 -0
  171. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/host_authorization.py +0 -0
  172. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/items.py +0 -0
  173. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/model.py +0 -0
  174. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/mutation_receipts.py +0 -0
  175. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/native_lifecycle.py +0 -0
  176. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/native_passkeys.py +0 -0
  177. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/native_source.py +0 -0
  178. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/org_service.py +0 -0
  179. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/org_vault_gate.py +0 -0
  180. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/service.py +0 -0
  181. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/use_stamp.py +0 -0
  182. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/secrets_battery/vault_history.py +0 -0
  183. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/README.md +0 -0
  184. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/__init__.py +0 -0
  185. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/coalesce.py +0 -0
  186. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/dag.py +0 -0
  187. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/errors.py +0 -0
  188. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/fallback.py +0 -0
  189. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/flush.py +0 -0
  190. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/lifecycle.py +0 -0
  191. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/managed.py +0 -0
  192. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/op.py +0 -0
  193. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/reads.py +0 -0
  194. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/session.py +0 -0
  195. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/session/telemetry.py +0 -0
  196. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/MODULE_README.md +0 -0
  197. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/__init__.py +0 -0
  198. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/executor.py +0 -0
  199. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/queries.py +0 -0
  200. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/registry.py +0 -0
  201. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/types.py +0 -0
  202. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/sql_executor/utils.py +0 -0
  203. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/state.py +0 -0
  204. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/utils/__init__.py +0 -0
  205. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/utils/sql_utils.py +0 -0
  206. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/utils/type_converters.py +0 -0
  207. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/matrx_orm/write_actor.py +0 -0
  208. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/scripts/git-branches.sh +0 -0
  209. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/scripts/publish.sh +0 -0
  210. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/scripts/release.sh +0 -0
  211. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/scripts/verify_wheel.py +0 -0
  212. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/MODULE_README.md +0 -0
  213. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/__init__.py +0 -0
  214. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/conftest.py +0 -0
  215. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/MODULE_README.md +0 -0
  216. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/__init__.py +0 -0
  217. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_adapter_registry.py +0 -0
  218. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_admin_db_columns.py +0 -0
  219. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_admin_response_rendering.py +0 -0
  220. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_admin_search_negation.py +0 -0
  221. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_admin_search_sentinels.py +0 -0
  222. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_advisory_lock.py +0 -0
  223. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_agent_message.py +0 -0
  224. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_api_auth.py +0 -0
  225. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_api_config.py +0 -0
  226. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_api_handlers.py +0 -0
  227. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_api_protocol.py +0 -0
  228. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_array_agg_order_by.py +0 -0
  229. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_association_trigger_actor_naming.py +0 -0
  230. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_associations.py +0 -0
  231. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_associations_wiring.py +0 -0
  232. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_borrowed_role_never_reaches_server_calls.py +0 -0
  233. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_bulk_hydration_offload.py +0 -0
  234. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_bulk_update_by_pk.py +0 -0
  235. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_bulk_upsert_increment_set_fields.py +0 -0
  236. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_cache_debug.py +0 -0
  237. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_call_function.py +0 -0
  238. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_case_when.py +0 -0
  239. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_catalog.py +0 -0
  240. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_column_scoped_writes.py +0 -0
  241. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_committed_row_guard.py +0 -0
  242. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_composite_pk_filter.py +0 -0
  243. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_composite_pk_write_paths.py +0 -0
  244. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_config.py +0 -0
  245. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_conflict_target.py +0 -0
  246. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_conflict_writes.py +0 -0
  247. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_connection_codecs.py +0 -0
  248. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_connection_poison_guard.py +0 -0
  249. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_connection_primitives.py +0 -0
  250. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_count_composite_distinct.py +0 -0
  251. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_count_limit_param_leak.py +0 -0
  252. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_db_function_field.py +0 -0
  253. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_ddl_generator.py +0 -0
  254. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_deadlock_retry.py +0 -0
  255. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_derived_table.py +0 -0
  256. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_dirty_tracking.py +0 -0
  257. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_dynamic_crud.py +0 -0
  258. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_exceptions.py +0 -0
  259. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_execute_query_integrity_mapping.py +0 -0
  260. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_expression_primitives.py +0 -0
  261. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_fetch_on_init_holds_whole_table.py +0 -0
  262. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_fields.py +0 -0
  263. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_filter_jsonb_agg_array_index.py +0 -0
  264. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_fk_cycle_resolution.py +0 -0
  265. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_from_alias.py +0 -0
  266. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_fts.py +0 -0
  267. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_func_expression_args.py +0 -0
  268. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_graph_walk.py +0 -0
  269. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_guarded_read_never_reruns_empty.py +0 -0
  270. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_having_annotate_alias.py +0 -0
  271. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_insert_ignore_and_admin_primitives.py +0 -0
  272. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_introspect_rls_policies.py +0 -0
  273. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_join_and_aggregate.py +0 -0
  274. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_latest_rows.py +0 -0
  275. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_listen_notify.py +0 -0
  276. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_local_sqlite.py +0 -0
  277. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_lock_contention_retry.py +0 -0
  278. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_managed_write_guard.py +0 -0
  279. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_matrx_entity.py +0 -0
  280. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_migration_diff_types.py +0 -0
  281. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_migration_loader.py +0 -0
  282. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_model_instance.py +0 -0
  283. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_model_meta.py +0 -0
  284. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_mutation_receipt_locator.py +0 -0
  285. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_optimistic_concurrency.py +0 -0
  286. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_order_by_expression.py +0 -0
  287. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_org_assignment_inventory.py +0 -0
  288. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_orm_banners_are_client_safe.py +0 -0
  289. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_parameter_name_hydration.py +0 -0
  290. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_patch_jsonb_path.py +0 -0
  291. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_percentile_cont.py +0 -0
  292. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_persisted_count.py +0 -0
  293. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_person_scoped_session_bypasses_shared_cache.py +0 -0
  294. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_pool_create_never_wedges.py +0 -0
  295. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_pool_holder_census.py +0 -0
  296. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_pool_loop_recreation.py +0 -0
  297. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_pool_maintenance.py +0 -0
  298. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_postgrest_filters.py +0 -0
  299. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_pydantic_bridge.py +0 -0
  300. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_query_builder.py +0 -0
  301. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_query_error_detail.py +0 -0
  302. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_query_executor_sql.py +0 -0
  303. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_query_timeout.py +0 -0
  304. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_querybuilder_clone_semantics.py +0 -0
  305. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_queue_claim.py +0 -0
  306. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_read_connection_retry.py +0 -0
  307. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_read_write_declared.py +0 -0
  308. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_registry.py +0 -0
  309. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_registry_multi_database.py +0 -0
  310. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_registry_multi_schema.py +0 -0
  311. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_registry_reads_outside_the_person_session.py +0 -0
  312. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_relational_backfill.py +0 -0
  313. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_relations.py +0 -0
  314. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_resilience.py +0 -0
  315. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_resilience_policy.py +0 -0
  316. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_rls_session_scope.py +0 -0
  317. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_row_lock_modes.py +0 -0
  318. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_schema_exists.py +0 -0
  319. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_session_advisory_lock.py +0 -0
  320. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_standalone_write_session_context.py +0 -0
  321. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_state_cache.py +0 -0
  322. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_subquery_filter_raw.py +0 -0
  323. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_subquery_in_filter.py +0 -0
  324. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_subquery_nested_expressions.py +0 -0
  325. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_supabase_auth.py +0 -0
  326. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_supabase_config.py +0 -0
  327. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_sync_pool_declares_read_write.py +0 -0
  328. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_tls.py +0 -0
  329. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_transaction_database_identity.py +0 -0
  330. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_transaction_gucs_one_round_trip.py +0 -0
  331. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_transaction_isolation.py +0 -0
  332. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_transaction_pool_release_sends_nothing.py +0 -0
  333. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_transaction_top_level_cleanup.py +0 -0
  334. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_typed_join_projection.py +0 -0
  335. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_typed_predicates.py +0 -0
  336. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_update_case_expression.py +0 -0
  337. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_update_subquery.py +0 -0
  338. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_update_with_rebase.py +0 -0
  339. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_upsert_default_leak.py +0 -0
  340. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_upsert_with_conflict.py +0 -0
  341. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_values_jsonb_decode.py +0 -0
  342. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_watched_lifecycle.py +0 -0
  343. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_wheel_contents.py +0 -0
  344. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_write_queue_deadline.py +0 -0
  345. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level1/test_write_retry_semantics.py +0 -0
  346. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/MODULE_README.md +0 -0
  347. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/__init__.py +0 -0
  348. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/conftest.py +0 -0
  349. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_bulk_ops.py +0 -0
  350. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_cache_integration.py +0 -0
  351. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_crud.py +0 -0
  352. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_foreign_keys.py +0 -0
  353. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_m2m.py +0 -0
  354. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_manager.py +0 -0
  355. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_migrations_live.py +0 -0
  356. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_query_execution.py +0 -0
  357. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/test_schema_diff.py +0 -0
  358. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/level2/verify_committed_row_guard_pg17.py +0 -0
  359. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/live_pooler_role.py +0 -0
  360. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/native_source_cases.py +0 -0
  361. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/native_source_oracle.rs +0 -0
  362. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/.env.example +0 -0
  363. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/README.md +0 -0
  364. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/__init__.py +0 -0
  365. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/generate.py +0 -0
  366. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/generated/.gitkeep +0 -0
  367. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/matrx_orm.yaml +0 -0
  368. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project/test_schema_generation.py +0 -0
  369. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/.env.example +0 -0
  370. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/README.md +0 -0
  371. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/__init__.py +0 -0
  372. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/client_example.py +0 -0
  373. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/client_example.ts +0 -0
  374. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/client_supabase_example.py +0 -0
  375. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/sample_project_desktop/server.py +0 -0
  376. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/entity_tests.py +0 -0
  377. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_base_generation.py +0 -0
  378. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_composite_pk_fk_generation.py +0 -0
  379. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_composite_unique_generation.py +0 -0
  380. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_dto_identity_generation.py +0 -0
  381. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_entity_capability_generation.py +0 -0
  382. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_enum_ordering.py +0 -0
  383. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_excluded_fk_targets.py +0 -0
  384. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_generate_schema.py +0 -0
  385. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_junction_analysis.py +0 -0
  386. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_multi_schema_output.py +0 -0
  387. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_schema_analysis.py +0 -0
  388. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_sql_expression_defaults.py +0 -0
  389. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_table_relationships_query.py +0 -0
  390. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema/test_view_generation.py +0 -0
  391. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema_builder/test_array_default_parsing.py +0 -0
  392. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema_builder/test_enum_array_column.py +0 -0
  393. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema_builder/test_focused_generation_plan.py +0 -0
  394. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema_builder/test_host_models_aggregator.py +0 -0
  395. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/schema_builder/test_never_filter_columns.py +0 -0
  396. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/__init__.py +0 -0
  397. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/conftest.py +0 -0
  398. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_a_failed_capture_still_names_the_failure.py +0 -0
  399. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_a_grouped_update_writes_only_each_rows_own_fields.py +0 -0
  400. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_cache_no_downgrade.py +0 -0
  401. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_capture_poison_proof.py +0 -0
  402. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_coalesce.py +0 -0
  403. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_dag.py +0 -0
  404. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_disk_spill_fallback.py +0 -0
  405. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_flush_individual_fallback.py +0 -0
  406. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_governed_write.py +0 -0
  407. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_managed.py +0 -0
  408. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_op_enqueue_site.py +0 -0
  409. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_pending_insert_honors_operator_filters.py +0 -0
  410. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_reads.py +0 -0
  411. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_record_error_bounded_insert.py +0 -0
  412. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_record_error_group_open.py +0 -0
  413. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_record_error_storm.py +0 -0
  414. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_session.py +0 -0
  415. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_spill_guard_plugin.py +0 -0
  416. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/session/test_tests_never_write_live_system_error.py +0 -0
  417. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_backend_handed_over_mid_transaction_never_takes_our_writes.py +0 -0
  418. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_bulk_cache_never_stalls_the_loop.py +0 -0
  419. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_failed_use_stamp_never_fails_the_read.py +0 -0
  420. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_keyword_column_refuses_generation.py +0 -0
  421. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_list_of_uuids_binds_as_uuid_array.py +0 -0
  422. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_read_only_backend_never_refuses_our_writes.py +0 -0
  423. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_a_sealed_field_shows_no_character_of_its_value.py +0 -0
  424. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_array_arg_element_type.py +0 -0
  425. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_attachment_mutation_serialization.py +0 -0
  426. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_backup_alias_conflict.py +0 -0
  427. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_backup_history_restore.py +0 -0
  428. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_backup_restore_live.py +0 -0
  429. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_backup_restore_ordering.py +0 -0
  430. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_call_function_as.py +0 -0
  431. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_call_function_none_mode.py +0 -0
  432. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_composite_fk_is_not_a_column_fk.py +0 -0
  433. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_database_name_alias.py +0 -0
  434. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_db_functions.py +0 -0
  435. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_dsn_password_masking.py +0 -0
  436. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_dynamic_select_unregistered.py +0 -0
  437. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_first_asks_the_database_for_one_row.py +0 -0
  438. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_foreign_session_state.py +0 -0
  439. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_immutable_insert_or_exact_verify.py +0 -0
  440. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_instance_update_runs_expressions.py +0 -0
  441. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_jsonb_postgres_illegal_text.py +0 -0
  442. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_keyed_digest.py +0 -0
  443. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_model_cls_refactor.py +0 -0
  444. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_native_lifecycle.py +0 -0
  445. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_native_lifecycle_fences.py +0 -0
  446. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_native_passkey_receipts.py +0 -0
  447. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_native_source.py +0 -0
  448. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_no_blocking_asyncpg_tls.py +0 -0
  449. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_one_database.py +0 -0
  450. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_order_by_desc_nulls_last.py +0 -0
  451. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_org_vault_gate.py +0 -0
  452. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_package_wiring_views.py +0 -0
  453. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_platform_access_strict.py +0 -0
  454. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_pooler_role_guard.py +0 -0
  455. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_secret_audit_names_its_organization.py +0 -0
  456. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_secrets_battery.py +0 -0
  457. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_secrets_minting_keys.py +0 -0
  458. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_shared_lock_guard.py +0 -0
  459. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_sql_param_casts.py +0 -0
  460. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_state_cache_sweeps_stale.py +0 -0
  461. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_statement_ceiling_warning.py +0 -0
  462. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_sync_twins_guard.py +0 -0
  463. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_update_result_truthiness.py +0 -0
  464. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_user_visible_lookup.py +0 -0
  465. {matrx_orm-3.1.257 → matrx_orm-3.1.259}/tests/test_vault_aggregate_recovery_stateful.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: matrx-orm
3
- Version: 3.1.257
3
+ Version: 3.1.259
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
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: Reference
3
+ title: Credential attachment concurrency verification
4
+ description: Real-router race probe for parent-held attachment mutation and byte materialization.
5
+ ---
6
+
7
+ # Credential attachment concurrency verification
8
+
9
+ Use the real Vault router and auth provider as `admin@admin.com`, with an
10
+ isolated agent-owned session and a new item stamped with this run's `test_run_id`.
11
+ Never reuse another run's item or touch the owner's credentials.
12
+
13
+ 1. Pause an attachment request after it takes the parent lock but before its
14
+ child write. Release it first: it must return 201. The following item delete
15
+ must return 204, and a fresh router list must have no live child.
16
+ 2. Reverse the schedule: pause the attachment request before parent-lock
17
+ acquisition, complete the item delete, then release the request. It must
18
+ refuse and leave no live child.
19
+ 3. Repeat both schedules with download and trusted resolve paused before byte
20
+ materialization. No child bytes may escape after the winning deletion.
21
+ 4. Remove each run-owned disposable item through the canonical cascade, archive
22
+ retained run-owned fixtures and independently verify no live test records
23
+ remain. End and verify rejection of the owned session; close only this run's
24
+ browser/process resources and clear any owned clipboard content.
25
+
26
+ This probe complements the focused serialization guards; offline source tests do
27
+ not establish live concurrency acceptance. Pending product acceptance belongs in
28
+ the [Vault register](../../../common-docs/projects/credential-sharing-browser-login/REGISTER.md).
@@ -0,0 +1,10 @@
1
+ ---
2
+ type: Reference
3
+ title: matrx-orm verification and migration guides
4
+ description: Focused package operating guides.
5
+ ---
6
+
7
+ # Package guides
8
+
9
+ - [Migrations](migrations.md)
10
+ - [Credential attachment concurrency verification](attachment-concurrency.md)
@@ -1,6 +1,6 @@
1
1
  # matrx-orm secrets battery — the ONE credential vault
2
2
 
3
- > Cross-repo plan (implementation authority): `/Users/armanisadeghi/code/common-docs/systems/account/vault-secrets/FEATURE.md` — read it before expanding credential storage or package resolution in any repository. Phase 1 (schema) + Phase 2 (this battery's item layer, rotation script, unified aidream service) are live.
3
+ > Cross-repo plan (implementation authority): `/Users/armanisadeghi/code/common-docs/systems/account/vault-secrets/FEATURE.md` — read it before expanding credential storage or package resolution in any repository.
4
4
 
5
5
  **One table, one key, everywhere.** Every platform credential — personal AND
6
6
  organizational — lives in `users.user_secrets` (Fernet-encrypted). Every package
@@ -40,9 +40,8 @@ Installed migration 1047 requires exact keys, typed identifiers and timestamp,
40
40
  locked original ownership, and exactly one manifest and one changed component
41
41
  bound to the locked active personal password field. Organization-owned history refuses until the host supplies the
42
42
  grant/offboarding parent-lock contract. Capture, list/reveal, and restore are
43
- backend capabilities for this bounded personal-password chain. Migration 1166
44
- is reviewed and enabled in source; installed behavior requires the migration
45
- ledger and exact live validator bodies. The physical history timestamp remains
43
+ backend capabilities for this bounded personal-password chain. The physical
44
+ history timestamp remains
46
45
  the destination audit time, while authenticated backup source dates are retained
47
46
  separately when the installed contract supports them.
48
47
 
@@ -82,7 +81,7 @@ ownership/shape helper and does not decrypt.
82
81
 
83
82
  **Native source admission (`native_source.py`).** `validate_native_source` is the server reader of the provider's exact source-v1 byte format; Rust remains the encoder and authenticator. It requires an explicit positive source-size limit, preserves nullable names and bytes, rejects duplicate/noncanonical JSON and COSE, and derives public metadata only after maintained P-256 key-pair validation. The result is provider-custody data, never a response model or generic field. `repr` and fixed failures omit material. `scripts/check_native_source_parity.py --rust-core <native-vault-provider/core>` compares the real compiled Rust reader against the server corpus; no mocked oracle. This prerequisite adds no creator, materializer, database row or native readiness.
84
83
 
85
- **Native lifecycle component (`native_lifecycle.py`).** The shared coordinator must supply locked parent/child projections from the exported field constants, current host management authority and its active transaction. Inspection locks the exact native metadata child; component delete/restore mutate only that child's tombstone and lifecycle. Deletion accepts active and restored-quarantined sources; recovery compares aware ISO manifest timestamps to database timestamps, then parses the already-validated manifest instant only at the typed native restore mutation boundary. Personal metadata provenance is enforced by the database guard, never inferred from the request scope. The item delete/restore coordinator invokes these operations for exact v2 native manifests, preserves auxiliary components and replay identity, and restores inactive quarantine. Actual aggregate database acceptance is UNVERIFIABLE here; it requires a current database-backed delete/restore/replay journey, tracked in the register. Contract: [native lifecycle](../../../../common-docs/projects/credential-sharing-browser-login/REGISTER.md).
84
+ **Native lifecycle component (`native_lifecycle.py`).** The shared coordinator must supply locked parent/child projections from the exported field constants, current host management authority and its active transaction. Inspection locks the exact native metadata child; component delete/restore mutate only that child's tombstone and lifecycle. Deletion accepts active and restored-quarantined sources; recovery compares aware ISO manifest timestamps to database timestamps, then parses the already-validated manifest instant only at the typed native restore mutation boundary. Personal metadata provenance is enforced by the database guard, never inferred from the request scope. The item delete/restore coordinator invokes these operations for exact v2 native manifests, preserves auxiliary components and replay identity, and restores inactive quarantine. Contract: [native lifecycle](../../../../common-docs/projects/credential-sharing-browser-login/REGISTER.md).
86
85
 
87
86
  **`inject_into_sandbox=true` REQUIRES an env alias — refused otherwise.** A
88
87
  container environment is a NAME→value map, so a field with `key IS NULL` has
@@ -98,8 +97,7 @@ alone, each loud:
98
97
  2. **Resolution scream** — `_keyed_for_sandbox` logs an ERROR naming the row ids
99
98
  and skips them, so anything that got in around layer 1 is visible.
100
99
  3. **DB CHECK** `user_secrets_sandbox_injection_needs_key` (migration 0265) makes
101
- the state unrepresentable; the column default moved `true` → `false` so the
102
- database stops manufacturing violations on keyless inserts.
100
+ the state unrepresentable. The column default is `false`.
103
101
 
104
102
  Item surface: `create_credential_item` · `create_credential_bundle` (item + N
105
103
  fields, ONE transaction) · `get/list/update/delete_credential_item` (delete =
@@ -111,7 +109,7 @@ soft, atomic across item + fields + grants) · `add_credential_field` ·
111
109
  · `set_item_grants` · `list_granted_credential_items` ·
112
110
  `transfer_credential_item` (owner flip, no value copy, references survive) ·
113
111
  `fork_credential_item` (independent copy) · `resolve_legacy_env_key` (compat
114
- read that SCREAMS in logs until call sites migrate to stable references).
112
+ read that SCREAMS in logs for legacy env-key access).
115
113
 
116
114
  Attachment surface (`attachments.py`): add/list/get/update metadata/replace/
117
115
  soft-delete; `reveal_credential_attachment` is the audited human download and
@@ -136,16 +134,7 @@ parent-delete helper deliberately takes no second parent lock because its caller
136
134
  already owns it; fork still locks its source parent and copies only its stable
137
135
  snapshot.
138
136
 
139
- **Live race recipe (requires an explicitly authorized disposable admin item).**
140
- Through the real Vault router and auth provider, create an admin-owned item and
141
- pause the attachment request after it takes its parent lock but before its child
142
- write. Releasing it first must return 201; the following item delete returns
143
- 204 and a fresh router list has no live child. In the inverse ordering, complete
144
- the delete first and then release the attachment request: it must be refused
145
- and must not leave a live child. Repeat with download and trusted resolve paused
146
- before byte materialization. Remove the disposable item through the canonical
147
- cascade after each run. This is a live concurrency probe, never a replacement
148
- for the focused unit guards.
137
+ Verification: [attachment concurrency probe](../../docs/attachment-concurrency.md).
149
138
 
150
139
  **Grants: use the single-grant operations.** `add_item_grant` /
151
140
  `update_item_grant` / `remove_item_grant` change ONE recipient and leave the
@@ -179,7 +168,9 @@ make it "easier to read".
179
168
  **Restored native enablement (`native_enable.py`).** The primitive requires an
180
169
  active transaction and one exact restored v2 aggregate; it changes only parent
181
170
  status and protected-source activity. The host owns current scope, authority,
182
- grant locks and audit.
171
+ grant locks and audit. Personal passkey metadata must retain a non-null creation
172
+ organization independent of the audit request organization; organization-owned
173
+ aggregates still require parent, source and metadata organization equality.
183
174
 
184
175
  ## Mutation receipt routing
185
176
 
@@ -297,16 +288,11 @@ aidream's authorization layer is
297
288
  membership → `iam.has_org_access_for`, adminhood → `public.is_org_admin_for`,
298
289
  asserted before the battery is touched.
299
290
 
300
- ### 🚨 "Assert first" is now MECHANICAL for sealed writes (`host_authorization.py`)
291
+ ### Sealed-write authorization (`host_authorization.py`)
301
292
 
302
- `add_credential_field` copies its owner columns **from the item**, so a host that
303
- writes first and authorizes second plants an attacker-chosen secret on a
304
- victim's item — and the row is already committed when the later check refuses.
305
-
306
- The battery still refuses to judge the decision — it refuses to be **the place
307
- where nobody made one**. Adding a `handling='sealed'` field to an EXISTING item
308
- requires the host to have RECORDED its decision for that `(item, actor)`,
309
- carrying `manage`:
293
+ Adding a `handling='sealed'` field to an existing item requires the host to record
294
+ a `manage` decision for `(item, actor)` before writing. The battery enforces the
295
+ recorded decision without deciding tenancy.
310
296
 
311
297
  ```python
312
298
  from matrx_orm.secrets_battery import host_authorization, note_host_authorization
@@ -347,8 +333,7 @@ tenancy. Guard: `tests/test_secret_audit_names_its_organization.py`.
347
333
  - **Standalone package/service:** register your DB with matrx-orm, call the same
348
334
  `configure_secrets`. Key comes from `CREDENTIALS_ENCRYPTION_KEY` env, or pass
349
335
  `encryption_key=` (host injection).
350
- - Key resolution (byte-identical to the historical aidream implementation — all
351
- existing ciphertexts keep decrypting): explicit key → `CREDENTIALS_ENCRYPTION_KEY`
336
+ - Key resolution: explicit key → `CREDENTIALS_ENCRYPTION_KEY`
352
337
  (44-char urlsafe-base64 used directly, else SHA-256-derived) → `SUPABASE_SECRET_KEY`
353
338
  derivation with a loud warning → loud RuntimeError.
354
339
 
@@ -383,20 +368,13 @@ contributed org copies show `out_of_sync` afterward (cosmetic).
383
368
  (`totp_seed`, extend via `register_non_transferable_field_key`) are retired —
384
369
  soft-deleted, deactivated, audited — inside the transfer transaction, and are
385
370
  never copied by a fork; `TransferResult.fields_not_transferred` names them so
386
- the confirmation can say the seed did not travel (D-15). 🚨 This is
371
+ the confirmation can say the seed did not travel. This is
387
372
  deliberately NOT "every sealed field": a sealed OAuth refresh token exists to
388
373
  move with the item it authenticates, and retiring those would break live
389
374
  integrations silently.
390
- - 🚨 **The `last_used_at` stamp on a bulk resolve locks rows in PRIMARY-KEY
391
- ORDER.** `resolve_org_secrets` passes `lock_rows_in_pk_order=True`, and that is
392
- load-bearing. This is the platform's hottest fan-out write: EVERY AI generation
393
- folds the active organization's vault into its context
394
- (aidream `ai_task.py` → `hydrate_context_secrets`), so N parallel agent
395
- invocations in one workflow step run the same multi-row UPDATE over the same
396
- rows at the same instant. Without a pinned lock order two of them take the same
397
- locks in opposite orders and Postgres kills one (40P01). Never drop the flag
398
- "because the ids are already sorted":
399
- the PLAN decides lock order, not the array
375
+ - Bulk `last_used_at` updates use `lock_rows_in_pk_order=True` to prevent
376
+ deadlocks between concurrent resolvers. Preserve this flag: SQL execution plans
377
+ determine lock order even when input IDs are sorted
400
378
  (`matrx_orm/query/FEATURE.md` § A multi-row UPDATE can pin its lock ORDER).
401
379
  - Every read is scoped by a **required** `user_id` or `organization_id`. No None
402
380
  = "show everything".
@@ -414,8 +392,3 @@ contributed org copies show `out_of_sync` afterward (cosmetic).
414
392
  Drift guard: `scripts/validate_secrets_decrypt.py` (loud, non-blocking, in
415
393
  `release.sh`) asserts every active field and attachment still decrypts with the
416
394
  configured key.
417
-
418
- Verified against live code + the live `users.user_secrets` /
419
- `users.credential_items` schema 2026-08-20 (destination-login metadata update,
420
- bundle create, reveal, sealed denial, editable gate, rotate, item grants, soft
421
- delete).
@@ -175,7 +175,7 @@ def _validate_auxiliaries(
175
175
  _fail("native passkey aggregate has an unrecorded live attachment")
176
176
 
177
177
 
178
- def _validate_ownership(parent: Mapping[str, Any], source: Mapping[str, Any], metadata: Mapping[str, Any], expected_organization_id: str) -> None:
178
+ def _validate_ownership(parent: Mapping[str, Any], source: Mapping[str, Any], metadata: Mapping[str, Any]) -> None:
179
179
  user_id, organization_id = parent.get("user_id"), parent.get("organization_id")
180
180
  if (user_id is None) == (organization_id is None):
181
181
  _fail("native passkey parent ownership is invalid")
@@ -184,14 +184,18 @@ def _validate_ownership(parent: Mapping[str, Any], source: Mapping[str, Any], me
184
184
  if organization_id is not None:
185
185
  if source.get("user_id") is not None or not _same_id(source.get("organization_id"), organization_id) or not _same_id(metadata.get("organization_id"), organization_id):
186
186
  _fail("native passkey organization ownership does not match")
187
- elif source.get("organization_id") is not None or not _same_id(source.get("user_id"), user_id) or not _same_id(metadata.get("organization_id"), expected_organization_id):
187
+ elif (
188
+ source.get("organization_id") is not None
189
+ or not _same_id(source.get("user_id"), user_id)
190
+ or metadata.get("organization_id") is None
191
+ ):
188
192
  _fail("native passkey personal ownership does not match")
189
193
 
190
194
 
191
195
  def _validate_locked_aggregate(
192
196
  parent: Mapping[str, Any], fields: Sequence[Mapping[str, Any]], attachments: Sequence[Mapping[str, Any]],
193
197
  metadata_rows: Sequence[Mapping[str, Any]],
194
- deletion_id: str, expected_organization_id: str,
198
+ deletion_id: str,
195
199
  ) -> tuple[str, str, bool]:
196
200
  _require_keys(parent, NATIVE_ENABLE_PARENT_FIELDS, "parent")
197
201
  for field in fields:
@@ -219,7 +223,7 @@ def _validate_locked_aggregate(
219
223
  or not _same_id(metadata.get("source_field_id"), source.get("id"))
220
224
  ):
221
225
  _fail("native passkey restored aggregate shape is invalid")
222
- _validate_ownership(parent, source, metadata, expected_organization_id)
226
+ _validate_ownership(parent, source, metadata)
223
227
  manifest_field_ids, manifest_attachment_ids = _validate_manifest(
224
228
  parent, deletion_id, source_id, passkey_id
225
229
  )
@@ -250,7 +254,7 @@ async def enable_native_passkey(
250
254
  await require_host_authorization(parent_id, actor_id, capability=CAPABILITY_MANAGE,
251
255
  operation="native_passkey_enable", audit_organization_id=audit_organization_id)
252
256
  source_id, _passkey_id, already_enabled = _validate_locked_aggregate(
253
- parent, fields, attachments, metadata_rows, deletion_id, audit_organization_id
257
+ parent, fields, attachments, metadata_rows, deletion_id
254
258
  )
255
259
  if already_enabled:
256
260
  return True
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "matrx-orm"
3
- version = "3.1.257"
3
+ version = "3.1.259"
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" }
@@ -227,20 +227,72 @@ async def test_historical_tombstoned_auxiliaries_outside_manifest_do_not_block_r
227
227
 
228
228
 
229
229
  @pytest.mark.asyncio
230
- @pytest.mark.parametrize("metadata_org", ["org", "wrong-personal-org"])
231
- async def test_personal_enable_binds_locked_personal_scope(_primitive_boundary, metadata_org):
230
+ async def test_personal_enable_preserves_creation_provenance_across_audit_scope(_primitive_boundary):
232
231
  parent, fields, metadata = _aggregate()
233
232
  parent.update(user_id="actor", organization_id=None)
234
233
  fields[0].update(user_id="actor", organization_id=None)
235
- metadata[0]["organization_id"] = metadata_org
236
- async def run():
237
- return await native_enable.enable_native_passkey(
234
+ metadata[0]["organization_id"] = "org-b"
235
+ assert await native_enable.enable_native_passkey(
236
+ parent, fields, [], metadata, deletion_id=DELETION,
237
+ actor_id="actor", audit_organization_id="org-a",
238
+ ) is False
239
+ # Persistence seam proves enablement cannot rewrite creation provenance.
240
+ assert metadata[0]["organization_id"] == "org-b"
241
+ assert "organization_id" not in repr(_primitive_boundary[0].calls + _primitive_boundary[1].calls)
242
+
243
+
244
+ @pytest.mark.asyncio
245
+ @pytest.mark.parametrize("breakage", ["missing_owner", "source_owner", "missing_provenance", "org_source"])
246
+ async def test_personal_enable_refuses_broken_owner_or_provenance(_primitive_boundary, breakage):
247
+ parent, fields, metadata = _aggregate()
248
+ parent.update(user_id="actor", organization_id=None)
249
+ fields[0].update(user_id="actor", organization_id=None)
250
+ metadata[0]["organization_id"] = "org-b"
251
+ if breakage == "missing_owner":
252
+ parent["user_id"] = None
253
+ elif breakage == "source_owner":
254
+ fields[0]["user_id"] = "other"
255
+ elif breakage == "missing_provenance":
256
+ metadata[0]["organization_id"] = None
257
+ else:
258
+ fields[0]["organization_id"] = "org-b"
259
+ with pytest.raises(CredentialRestoreConflictError):
260
+ await native_enable.enable_native_passkey(
261
+ parent, fields, [], metadata, deletion_id=DELETION,
262
+ actor_id="actor", audit_organization_id="org-a",
263
+ )
264
+ assert _primitive_boundary[0].calls == _primitive_boundary[1].calls == []
265
+
266
+
267
+ @pytest.mark.asyncio
268
+ @pytest.mark.parametrize("breakage", ["source_org", "metadata_org"])
269
+ async def test_organization_enable_retains_exact_owner_equality(_primitive_boundary, breakage):
270
+ parent, fields, metadata = _aggregate()
271
+ if breakage == "source_org":
272
+ fields[0]["organization_id"] = "other-org"
273
+ else:
274
+ metadata[0]["organization_id"] = None
275
+ with pytest.raises(CredentialRestoreConflictError):
276
+ await native_enable.enable_native_passkey(
238
277
  parent, fields, [], metadata, deletion_id=DELETION,
239
278
  actor_id="actor", audit_organization_id="org",
240
279
  )
241
- if metadata_org == "org":
242
- assert await run() is False
280
+ assert _primitive_boundary[0].calls == _primitive_boundary[1].calls == []
281
+
282
+
283
+ @pytest.mark.asyncio
284
+ @pytest.mark.parametrize("breakage", ["source_parent", "metadata_parent", "metadata_source"])
285
+ async def test_enable_refuses_wrong_native_component_linkage(_primitive_boundary, breakage):
286
+ parent, fields, metadata = _aggregate()
287
+ if breakage == "source_parent":
288
+ fields[0]["credential_item_id"] = "00000000-0000-4000-8000-000000000099"
289
+ elif breakage == "metadata_parent":
290
+ metadata[0]["credential_item_id"] = "00000000-0000-4000-8000-000000000099"
243
291
  else:
244
- with pytest.raises(CredentialRestoreConflictError):
245
- await run()
246
- assert _primitive_boundary[0].calls == _primitive_boundary[1].calls == []
292
+ metadata[0]["source_field_id"] = "00000000-0000-4000-8000-000000000099"
293
+ with pytest.raises(CredentialRestoreConflictError):
294
+ await native_enable.enable_native_passkey(
295
+ parent, fields, [], metadata, deletion_id=DELETION,
296
+ actor_id="actor", audit_organization_id="org",
297
+ )
298
+ assert _primitive_boundary[0].calls == _primitive_boundary[1].calls == []
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes