mainsequence-metatable 0.1.59__tar.gz → 0.1.60.dev91__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 (617) hide show
  1. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/client/metatables-meta-tables/SKILL.md +8 -0
  2. {mainsequence_metatable-0.1.59/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.60.dev91}/PKG-INFO +1 -1
  3. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0007-database-enforced-table-access.md +9 -1
  4. mainsequence_metatable-0.1.60.dev91/docs/adr/api/0026-atomic-statement-lists.md +138 -0
  5. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/index.md +1 -0
  6. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/openapi.json +218 -0
  7. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/reference.md +2 -0
  8. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/tables-and-migrations.md +20 -0
  9. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/query-and-mutate.md +74 -4
  10. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/reference/capabilities.md +2 -0
  11. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/reference/python.md +4 -0
  12. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/mkdocs.yml +1 -0
  13. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/pyproject.toml +1 -1
  14. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  15. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/mainsequence_metatable.egg-info/SOURCES.txt +4 -0
  16. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/__init__.py +4 -0
  17. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_sql.py +85 -2
  18. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/transfer.py +1 -1
  19. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/access.py +11 -0
  20. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/contracts.py +2 -0
  21. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/operations.py +20 -0
  22. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/postgresql_access.py +18 -0
  23. mainsequence_metatable-0.1.60.dev91/src/metatables/api/backend/backends/restricted_sql.py +324 -0
  24. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/sqlite_access.py +6 -0
  25. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/streaming.py +5 -0
  26. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/compiled_sql/v1.py +151 -17
  27. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/models.py +117 -3
  28. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/capabilities.json +38 -0
  29. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/client_signatures.json +4 -0
  30. mainsequence_metatable-0.1.60.dev91/tests/contracts/test_compiled_statement_lists.py +96 -0
  31. mainsequence_metatable-0.1.60.dev91/tests/e2e/test_statement_lists.py +225 -0
  32. mainsequence_metatable-0.1.60.dev91/tests/integrations/test_sqlite_statement_lists.py +190 -0
  33. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/uv.lock +1 -1
  34. mainsequence_metatable-0.1.59/src/metatables/api/backend/backends/restricted_sql.py +0 -221
  35. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  36. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  37. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  39. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  40. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/SKILL.md +0 -0
  41. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/agents/openai.yaml +0 -0
  42. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/design-agent-icons-and-motion/references/metatables-example.html +0 -0
  43. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  45. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  46. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  47. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  48. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/.mainsequence/workflows/metatables-api.yaml +0 -0
  49. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/LICENSE +0 -0
  50. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/MANIFEST.in +0 -0
  51. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/README.md +0 -0
  52. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/alembic.ini +0 -0
  53. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/api/metatables/main.py +0 -0
  54. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/compose.database-tests.yml +0 -0
  55. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  56. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  57. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  58. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  59. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  60. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  61. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  62. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  63. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  64. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  65. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  66. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0009-shared-credential-store.md +0 -0
  67. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  68. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  69. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  70. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  71. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  72. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0016-impact-preflight.md +0 -0
  73. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  74. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  75. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0018-table-search.md +0 -0
  76. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  77. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0023-daily-security-check.md +0 -0
  78. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/api/0024-namespace-and-table-access-roles.md +0 -0
  79. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  80. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  81. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/adr/client/0025-application-encrypted-columns.md +0 -0
  82. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/authentication-and-errors.md +0 -0
  83. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/data-sources.md +0 -0
  84. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/overview.md +0 -0
  85. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/api/time-index-and-updates.md +0 -0
  86. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/assets/branding/metatables.svg +0 -0
  87. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/assets/diagrams/local-client-experience.svg +0 -0
  88. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/assets/diagrams/namespace-access.svg +0 -0
  89. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/bounded-transfers.md +0 -0
  90. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/build-an-updater.md +0 -0
  91. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/define-and-migrate-tables.md +0 -0
  92. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/deploy-application-migrations.md +0 -0
  93. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/installation-and-connection.md +0 -0
  94. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/local-storage.md +0 -0
  95. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/quickstart.md +0 -0
  96. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/read-existing-time-index-tables.md +0 -0
  97. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/register-existing-tables.md +0 -0
  98. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/tutorial.md +0 -0
  99. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/client/upgrade-legacy-app.md +0 -0
  100. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/architecture.md +0 -0
  101. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/data-sources.md +0 -0
  102. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/identity-and-scope.md +0 -0
  103. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/permissions-namespaces-labels.md +0 -0
  104. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/runs-and-execution-graphs.md +0 -0
  105. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  106. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/concepts/time-index-tables-and-updates.md +0 -0
  107. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/contributing/architecture-and-boundaries.md +0 -0
  108. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/contributing/database-backends.md +0 -0
  109. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/contributing/documentation.md +0 -0
  110. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/contributing/releasing.md +0 -0
  111. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/contributing/testing.md +0 -0
  112. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/README.md +0 -0
  113. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/__init__.py +0 -0
  114. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/bounded_reader.py +0 -0
  115. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/data_sources/README.md +0 -0
  116. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/data_sources/mssql.json +0 -0
  117. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/data_sources/mysql.json +0 -0
  118. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/data_sources/postgresql.json +0 -0
  119. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/data_sources/register.py +0 -0
  120. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/external_table.py +0 -0
  121. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/README.md +0 -0
  122. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/__init__.py +0 -0
  123. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/__main__.py +0 -0
  124. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/migrations/__init__.py +0 -0
  125. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/migrations/env.py +0 -0
  126. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/migrations/script.py.mako +0 -0
  127. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  128. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/local_app/tables.py +0 -0
  129. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/query.py +0 -0
  130. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/quickstart.py +0 -0
  131. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/reader.py +0 -0
  132. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/scripts/__init__.py +0 -0
  133. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/scripts/setup_metatables.py +0 -0
  134. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tables.py +0 -0
  135. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/README.md +0 -0
  136. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/__init__.py +0 -0
  137. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/__main__.py +0 -0
  138. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/data/README.md +0 -0
  139. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  140. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/frames.py +0 -0
  141. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/__init__.py +0 -0
  142. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/env.py +0 -0
  143. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/registry.py +0 -0
  144. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  145. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  146. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  147. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  148. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  149. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/operations.py +0 -0
  150. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/tables.py +0 -0
  151. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/tutorial/updaters.py +0 -0
  152. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/examples/updater.py +0 -0
  153. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/index.md +0 -0
  154. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/catalog-migrations.md +0 -0
  155. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/configuration.md +0 -0
  156. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/hosted-runtime.md +0 -0
  157. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/local-runtime.md +0 -0
  158. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/recovery-and-observability.md +0 -0
  159. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/run-history.md +0 -0
  160. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/operations/run-logs.md +0 -0
  161. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/reference/cli.md +0 -0
  162. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/security/index.md +0 -0
  163. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/security/ownership-and-sharing.md +0 -0
  164. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/docs/security/permissions.md +0 -0
  165. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/__init__.py +0 -0
  166. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/build_reference.py +0 -0
  167. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_boundaries.py +0 -0
  168. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_client_api_coverage.py +0 -0
  169. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_distribution_sources.py +0 -0
  170. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_docs.py +0 -0
  171. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_examples_debug.py +0 -0
  172. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/check_project.py +0 -0
  173. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/dev_release_version.py +0 -0
  174. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/test_databases.py +0 -0
  175. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/scripts/test_postgresql.py +0 -0
  176. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/setup.cfg +0 -0
  177. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  178. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  179. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  180. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  181. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/_admin_source.json +0 -0
  182. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/_build.py +0 -0
  183. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/_skill_bundle.py +0 -0
  184. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/analysis.py +0 -0
  185. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/analyst/__init__.py +0 -0
  186. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/__init__.py +0 -0
  187. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/__init__.py +0 -0
  188. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/auth/__init__.py +0 -0
  189. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/auth/boundary.py +0 -0
  190. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/auth/local_actor.py +0 -0
  191. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/auth/team_membership.py +0 -0
  192. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/bootstrap.py +0 -0
  193. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/configuration.py +0 -0
  194. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/connection_count.py +0 -0
  195. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/credential_admin.py +0 -0
  196. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/development.py +0 -0
  197. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/development_client.py +0 -0
  198. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/error_logging.py +0 -0
  199. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/main.py +0 -0
  200. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/mcp.py +0 -0
  201. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/platform_cache.py +0 -0
  202. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/__init__.py +0 -0
  203. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/access_map.py +0 -0
  204. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/caller.py +0 -0
  205. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/column_search.py +0 -0
  206. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/contract_validation.py +0 -0
  207. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/data_sources.py +0 -0
  208. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  209. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/migration_connection.py +0 -0
  210. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/namespaces.py +0 -0
  211. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/run_logs.py +0 -0
  212. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/runtime_context.py +0 -0
  213. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/schema_graph.py +0 -0
  214. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/security.py +0 -0
  215. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_cascade.py +0 -0
  216. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_crud.py +0 -0
  217. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_delete.py +0 -0
  218. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_filter.py +0 -0
  219. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_import.py +0 -0
  220. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_introspection.py +0 -0
  221. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_patch.py +0 -0
  222. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_registration.py +0 -0
  223. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_response.py +0 -0
  224. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_search.py +0 -0
  225. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_search_document.py +0 -0
  226. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  227. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  228. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  229. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  230. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  231. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_batch.py +0 -0
  232. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  233. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_constants.py +0 -0
  234. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_crud.py +0 -0
  235. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_details.py +0 -0
  236. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_graph.py +0 -0
  237. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  238. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_registration.py +0 -0
  239. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_runs.py +0 -0
  240. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/routes/update_statistics.py +0 -0
  241. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/runtime.py +0 -0
  242. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/runtime_control.py +0 -0
  243. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/runtime_database.py +0 -0
  244. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/app/source_passwords.py +0 -0
  245. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/__init__.py +0 -0
  246. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/__init__.py +0 -0
  247. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  249. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  250. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  251. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  252. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  253. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  254. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  255. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  256. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  257. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  258. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  259. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  260. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  261. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  262. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  263. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  264. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  265. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  266. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  267. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  268. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  269. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/catalog.py +0 -0
  270. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  271. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  272. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  273. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/hosted.py +0 -0
  274. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  275. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  276. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/native.py +0 -0
  277. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/pages.py +0 -0
  278. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/registry.py +0 -0
  279. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  280. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/relational.py +0 -0
  281. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/backends/timescale.py +0 -0
  282. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/contracts/__init__.py +0 -0
  283. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  284. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  285. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  286. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/contracts/values.py +0 -0
  287. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/__init__.py +0 -0
  288. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/access_roles.py +0 -0
  289. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  290. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  291. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  292. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/label_rules.py +0 -0
  293. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  294. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/domain/update_constants.py +0 -0
  295. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/__init__.py +0 -0
  296. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  297. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  298. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  299. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  300. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  301. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  302. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  303. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  304. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  305. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  306. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/security_check_job.py +0 -0
  307. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  308. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/__init__.py +0 -0
  309. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/env.py +0 -0
  310. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  311. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  312. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  313. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  314. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  315. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  316. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  317. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  318. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  319. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  320. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  321. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  322. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  323. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
  324. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0014_access_roles.py +0 -0
  325. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/0015_namespace_creator.py +0 -0
  326. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  327. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/__init__.py +0 -0
  328. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  329. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  330. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  331. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/create_table.py +0 -0
  332. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  333. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/import_relations.py +0 -0
  334. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  335. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  336. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  337. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/operations/security_check.py +0 -0
  338. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/__init__.py +0 -0
  339. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/cascade.py +0 -0
  340. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/catalog.py +0 -0
  341. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/database.py +0 -0
  342. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/grants.py +0 -0
  343. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/impact.py +0 -0
  344. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/labels.py +0 -0
  345. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/locking.py +0 -0
  346. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/models.py +0 -0
  347. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  348. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/projections.py +0 -0
  349. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  350. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  351. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  352. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  353. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  354. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/table_response.py +0 -0
  355. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  356. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  357. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/updates.py +0 -0
  358. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  359. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  360. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/__init__.py +0 -0
  361. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/documents.py +0 -0
  362. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/embeddings.py +0 -0
  363. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/index.py +0 -0
  364. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/ranking.py +0 -0
  365. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/text.py +0 -0
  366. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/backend/search/worker.py +0 -0
  367. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/metatables/__init__.py +0 -0
  368. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/metatables/configuration.yaml +0 -0
  369. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/metatables/main.py +0 -0
  370. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/api/request_timing.py +0 -0
  371. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/__init__.py +0 -0
  372. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/admin_install.py +0 -0
  373. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/app.py +0 -0
  374. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/encryption.py +0 -0
  375. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/filters.py +0 -0
  376. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/local.py +0 -0
  377. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/migrations.py +0 -0
  378. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/project.py +0 -0
  379. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/cli/skills.py +0 -0
  380. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/compiled_sql/__init__.py +0 -0
  381. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/compiled_sql/mssql.py +0 -0
  382. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/dtype_codec.py +0 -0
  383. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/encryption.py +0 -0
  384. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/endpoint.py +0 -0
  385. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/envelope_contract.py +0 -0
  386. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/README.md +0 -0
  387. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/__init__.py +0 -0
  388. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/bounded_reader.py +0 -0
  389. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/data_sources/README.md +0 -0
  390. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/data_sources/mssql.json +0 -0
  391. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/data_sources/mysql.json +0 -0
  392. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/data_sources/postgresql.json +0 -0
  393. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/data_sources/register.py +0 -0
  394. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/external_table.py +0 -0
  395. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/README.md +0 -0
  396. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/__init__.py +0 -0
  397. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/__main__.py +0 -0
  398. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  399. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/migrations/env.py +0 -0
  400. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  401. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  402. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/local_app/tables.py +0 -0
  403. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/query.py +0 -0
  404. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/quickstart.py +0 -0
  405. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/reader.py +0 -0
  406. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/scripts/__init__.py +0 -0
  407. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  408. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tables.py +0 -0
  409. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/README.md +0 -0
  410. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/__init__.py +0 -0
  411. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/__main__.py +0 -0
  412. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/data/README.md +0 -0
  413. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  414. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/frames.py +0 -0
  415. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  416. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  417. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  418. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  419. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  420. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  421. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  422. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  423. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/operations.py +0 -0
  424. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/tables.py +0 -0
  425. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/tutorial/updaters.py +0 -0
  426. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/examples/updater.py +0 -0
  427. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/future_registry.py +0 -0
  428. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/hashing.py +0 -0
  429. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/instrumentation.py +0 -0
  430. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/local_connection.py +0 -0
  431. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/local_files.py +0 -0
  432. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/local_run_logs.py +0 -0
  433. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/log_contract.py +0 -0
  434. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/__init__.py +0 -0
  435. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/alembic.py +0 -0
  436. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/connection.py +0 -0
  437. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/env.py +0 -0
  438. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/provider.py +0 -0
  439. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/registry.py +0 -0
  440. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/runner.py +0 -0
  441. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/scaffold.py +0 -0
  442. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/sqlite.py +0 -0
  443. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/templates/__init__.py +0 -0
  444. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/templates/env.py.mako +0 -0
  445. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/templates/script.py.mako +0 -0
  446. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/migrations/tls.py +0 -0
  447. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/pydantic_metadata.py +0 -0
  448. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/run_logging.py +0 -0
  449. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/runtime.py +0 -0
  450. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/runtime_context.py +0 -0
  451. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/runtime_contract.py +0 -0
  452. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/schema_names.py +0 -0
  453. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/sdk_compat.py +0 -0
  454. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/sqlalchemy_contracts.py +0 -0
  455. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/storage_layout_contract.py +0 -0
  456. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/time_index_table_refs.py +0 -0
  457. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/transfer.py +0 -0
  458. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/transfer_contract.py +0 -0
  459. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/transport.py +0 -0
  460. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/update_configuration_contract.py +0 -0
  461. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/__init__.py +0 -0
  462. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/configuration.py +0 -0
  463. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/dependencies.py +0 -0
  464. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/managers.py +0 -0
  465. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/namespacing.py +0 -0
  466. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/runner.py +0 -0
  467. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/updaters.py +0 -0
  468. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/updaters/utils.py +0 -0
  469. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/src/metatables/upload.py +0 -0
  470. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/analyst/test_agent_surface.py +0 -0
  471. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/analyst/test_api_search.py +0 -0
  472. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/analyst/test_mcp.py +0 -0
  473. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/analyst/test_tools.py +0 -0
  474. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  475. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_caller_endpoint.py +0 -0
  476. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_data_source_identity.py +0 -0
  477. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_development_client.py +0 -0
  478. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_hosted_agent.py +0 -0
  479. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_hosted_environment_target.py +0 -0
  480. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_local_mode.py +0 -0
  481. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_platform_fact_cache.py +0 -0
  482. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_request_identity.py +0 -0
  483. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_runtime_bootstrap.py +0 -0
  484. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_runtime_database.py +0 -0
  485. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_runtime_scaffold.py +0 -0
  486. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_runtime_selection.py +0 -0
  487. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_runtime_storage_binding.py +0 -0
  488. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_source_passwords.py +0 -0
  489. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/auth/test_team_membership.py +0 -0
  490. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_catalog_foundation.py +0 -0
  491. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_contract_projection.py +0 -0
  492. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_database_config.py +0 -0
  493. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_index_statistics.py +0 -0
  494. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_migration.py +0 -0
  495. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/catalog/test_schema_validation.py +0 -0
  496. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/conftest.py +0 -0
  497. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/database_operations.json +0 -0
  498. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_bounded_transfer.py +0 -0
  499. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_compiler_runtime_source.py +0 -0
  500. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_encryption.py +0 -0
  501. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_relation_batching.py +0 -0
  502. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_relation_import.py +0 -0
  503. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_runtime_contract_compat.py +0 -0
  504. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_storage_layouts.py +0 -0
  505. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_table_contracts.py +0 -0
  506. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/contracts/test_update_configuration_hash.py +0 -0
  507. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/Dockerfile +0 -0
  508. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/Dockerfile.dockerignore +0 -0
  509. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/__init__.py +0 -0
  510. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/conftest.py +0 -0
  511. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/provider/__init__.py +0 -0
  512. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/provider/env.py +0 -0
  513. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  514. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_api_contract.py +0 -0
  515. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_application_migration.py +0 -0
  516. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  517. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_catalog_contract.py +0 -0
  518. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_credential_catalog.py +0 -0
  519. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_physical_contract.py +0 -0
  520. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_relation_import.py +0 -0
  521. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  522. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_sql_security.py +0 -0
  523. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_backend/test_update_client.py +0 -0
  524. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_operations/test_physical_operations.py +0 -0
  525. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_operations/test_postgresql_operations.py +0 -0
  526. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  527. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/documentation/test_project_checks.py +0 -0
  528. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_admin_installation.py +0 -0
  529. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_api_endpoint.py +0 -0
  530. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_application_owned_migrations.py +0 -0
  531. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_catalog_outage.py +0 -0
  532. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_api_contract.py +0 -0
  533. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_api_coverage.py +0 -0
  534. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_migration_scaffold.py +0 -0
  535. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_migration_tls.py +0 -0
  536. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_package.py +0 -0
  537. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_signatures.py +0 -0
  538. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_client_value_behaviors.py +0 -0
  539. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_data_source_registry.py +0 -0
  540. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_encrypted_columns.py +0 -0
  541. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_local_actor_client_api.py +0 -0
  542. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_local_cli_workflow.py +0 -0
  543. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_local_client_selection.py +0 -0
  544. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  545. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
  546. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
  547. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_namespaces_admin_http.py +0 -0
  548. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_public_imports.py +0 -0
  549. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_remaining_client_routes.py +0 -0
  550. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_run_graphs.py +0 -0
  551. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_run_logs.py +0 -0
  552. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_runtime_upgrade.py +0 -0
  553. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_sdk_local_startup.py +0 -0
  554. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_sqlite_runtime.py +0 -0
  555. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_delete_client_api.py +0 -0
  556. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_filter_client_api.py +0 -0
  557. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_introspection_client_api.py +0 -0
  558. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_patch_client_api.py +0 -0
  559. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_search_api.py +0 -0
  560. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_search_document_api.py +0 -0
  561. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_search_scale.py +0 -0
  562. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_stats_api.py +0 -0
  563. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_update_pipeline.py +0 -0
  564. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_table_updates_http.py +0 -0
  565. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  566. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  567. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  568. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_update_batch_client_api.py +0 -0
  569. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  570. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  571. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  572. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/e2e/test_update_registration_client_api.py +0 -0
  573. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/examples/test_documented_examples.py +0 -0
  574. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/examples/test_postgresql_examples.py +0 -0
  575. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/examples/test_setup_launch.py +0 -0
  576. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/examples/test_tutorial.py +0 -0
  577. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_batch_introspection.py +0 -0
  578. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_connection_reuse.py +0 -0
  579. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_credential_store.py +0 -0
  580. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_data_source_rules.py +0 -0
  581. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_local_data_sources.py +0 -0
  582. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_local_run_logs.py +0 -0
  583. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_postgresql_connection.py +0 -0
  584. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_postgresql_sql.py +0 -0
  585. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_postgresql_tables.py +0 -0
  586. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  587. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_request_timing.py +0 -0
  588. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_serving_policy.py +0 -0
  589. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_source_validation.py +0 -0
  590. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/integrations/test_sqlite_operations.py +0 -0
  591. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/labels/test_labels.py +0 -0
  592. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_bootstrap_lock.py +0 -0
  593. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_create_table_operation.py +0 -0
  594. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_create_table_postgres.py +0 -0
  595. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_physical_operation_journal.py +0 -0
  596. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_register_catalog.py +0 -0
  597. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_search_documents.py +0 -0
  598. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/operations/test_timescale_policies.py +0 -0
  599. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_client_skills.py +0 -0
  600. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_dev_release_version.py +0 -0
  601. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_distribution_sources.py +0 -0
  602. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_editable_build.py +0 -0
  603. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_installed_distribution.py +0 -0
  604. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/packaging/test_requirements_export.py +0 -0
  605. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_access_map.py +0 -0
  606. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_deployment_security.py +0 -0
  607. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_governed_sql_scope.py +0 -0
  608. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_incremental_security.py +0 -0
  609. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_local_actor_membership.py +0 -0
  610. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_migration_boundary.py +0 -0
  611. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_namespace_grants.py +0 -0
  612. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_security_api.py +0 -0
  613. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_security_check.py +0 -0
  614. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_table_body_filter.py +0 -0
  615. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_table_grants.py +0 -0
  616. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_table_queries.py +0 -0
  617. {mainsequence_metatable-0.1.59 → mainsequence_metatable-0.1.60.dev91}/tests/permissions/test_workload_principals.py +0 -0
@@ -168,6 +168,14 @@ access; row/time limits and transaction handling remain in the API. Refer to the
168
168
  query guide for engine-specific statement/batch behavior. Application DDL belongs
169
169
  to the separate migration-provider workflow.
170
170
 
171
+ A write that must change several tables together on SQLite, where `WITH` holds only
172
+ `SELECT`, is a statement list: `compile_sqlalchemy_statements([...],
173
+ operation=...)` and `MetaTable.execute_transaction(...)`, one API-owned transaction.
174
+ Wrap a check in `GuardedStatement(statement, expect_rows=n or "at_least_one",
175
+ label=...)`; a miss rolls back and raises `MetaTableTransactionGuardError`. Never
176
+ put `COMMIT` or savepoints in a list. PostgreSQL and SQLite only; see the query
177
+ guide's "Several statements in one transaction".
178
+
171
179
  To find tables, use `MetaTable.search` as described in the
172
180
  [table discovery skill](../metatables-table-discovery/SKILL.md). Legacy convenience
173
181
  sharing/label actions are not supported API workflows.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.59
3
+ Version: 0.1.60.dev91
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -1,5 +1,12 @@
1
1
  # ADR 0007: Enforce table grants in the database
2
2
 
3
+ > Amendment (2026-11-10, [MetaTables #98](https://github.com/mainsequence-projects/MetaTables/issues/98)):
4
+ > [ADR 0026](0026-atomic-statement-lists.md) lets a write carry an ordered list of
5
+ > statements that the API runs in one transaction. One statement per request still holds
6
+ > for each statement: each goes to the driver alone, and after each one the driver must
7
+ > report the API's transaction still open, or the API stops and rolls back. Reads keep
8
+ > one statement.
9
+
3
10
  > Amendment (2026-10-19): [ADR 0024](0024-namespace-and-table-access-roles.md) keeps the two
4
11
  > privilege sets: `data_viewer` maps to Reader's `SELECT`, `data_writer`, `editor` and `owner`
5
12
  > to Writer's privileges, and `metadata_viewer` to none. An admin group role holds write
@@ -214,7 +221,8 @@ with `SET ROLE` is not safe: caller SQL can switch to another User's role with
214
221
  `set_config('role', …)`.
215
222
 
216
223
  Each request sends exactly one statement through PostgreSQL's extended query
217
- protocol, which rejects a second statement such as `COMMIT; DELETE …`. Read-only
224
+ protocol, which rejects a second statement such as `COMMIT; DELETE …`. (A write may
225
+ send an ordered list of such statements in one API transaction: see ADR 0026.) Read-only
218
226
  requests run in a `READ ONLY` transaction. The API cancels queries that exceed
219
227
  their time limit, because callers can change their own timeout settings.
220
228
 
@@ -0,0 +1,138 @@
1
+ # ADR 0026: Atomic statement lists
2
+
3
+ Status: Accepted.
4
+
5
+ Implementation status: implemented on development for 0.1.60. SQLite is tested in
6
+ process, both on a source's own connection and on the local runtime's borrowed request
7
+ transaction. The PostgreSQL path has not been run: its end-to-end test is written but
8
+ skips without the disposable cluster of `scripts/test_postgresql.py`. MySQL and SQL
9
+ Server refuse statement lists.
10
+
11
+ Owner: MetaTables API, with the Python client.
12
+
13
+ Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (the database
14
+ enforces table access; one statement per request),
15
+ [ADR 0012](0012-bounded-data-transfer-and-safe-retries.md) (bounded transfers) and
16
+ [ADR 0022](0022-concurrent-requests-and-connection-reuse.md) (connection reuse).
17
+ Issue: [MetaTables#98](https://github.com/mainsequence-projects/MetaTables/issues/98).
18
+
19
+ ## Context
20
+
21
+ Some client writes change several tables and must commit together. ms-markets writes
22
+ an account snapshot as one PostgreSQL statement: data-modifying CTEs upsert the
23
+ parents, delete the old rows and insert the new ones, after a check that every named
24
+ portfolio is still live
25
+ ([MainSequenceMarkets#53](https://github.com/mainsequence-projects/MainSequenceMarkets/issues/53)).
26
+
27
+ SQLite, the local runtime, allows only `SELECT` inside `WITH`. On SQLite the write
28
+ must be several statements, but a compiled operation carries one statement and each
29
+ request is its own transaction. Sending the statements as separate operations would
30
+ leave half-written history after a failure, and the portfolio check would no longer
31
+ share the write's transaction.
32
+
33
+ ## Decision
34
+
35
+ ### A write may carry an ordered list of statements
36
+
37
+ `POST /meta-tables/execute-transaction/` accepts `compiled-sql.v1` with `statements`,
38
+ a list of 1 to 32 compiled statements, and a write operation (`insert`, `update`,
39
+ `delete` or `upsert`). The API opens one write transaction as the caller's own write
40
+ identity and sends the statements in order. It commits after the last statement and
41
+ rolls back on any error. The response has the shape of `execute-operation` and holds
42
+ the last statement's rows.
43
+
44
+ Statements do not pass values to each other. A later statement finds what an earlier
45
+ one wrote by its key, in the same transaction.
46
+
47
+ The client compiles the list with `compile_sqlalchemy_statements` and sends it with
48
+ `MetaTable.execute_transaction`.
49
+
50
+ ### A statement may expect a row count
51
+
52
+ A statement may carry `expect_rows`: an exact count, or `"at_least_one"`. The count is
53
+ the statement's result rows, or the rows it changed when it returns none. When a
54
+ statement misses its expectation, the API rolls back the whole transaction and answers
55
+ 409 with code `compiled_sql_guard_failed`, the statement's index and its optional
56
+ `label`. The client raises `MetaTableTransactionGuardError`.
57
+
58
+ A single PostgreSQL statement can hold such a check in a `WHERE`. Separate statements
59
+ cannot abort a later one from SQL in a way that works on every engine and that the
60
+ caller can tell from a database error, so the check is part of the request.
61
+
62
+ ### ADR 0007's boundary holds without reading the SQL
63
+
64
+ ADR 0007 sends one statement per request so caller SQL cannot end the API's
65
+ transaction and go on outside it, as in `COMMIT; DELETE …`. A statement list keeps
66
+ that rule for each statement: each goes to the driver alone, through the same
67
+ restricted path as `execute-operation`, so PostgreSQL's extended query protocol and
68
+ Python's `sqlite3` still reject a second statement in one string.
69
+
70
+ Between statements, the API asks the driver whether its transaction is still open:
71
+
72
+ - **SQLite:** `sqlite3.Connection.in_transaction`. The engine authorizer already
73
+ denies `BEGIN`, `COMMIT`, `ROLLBACK` and savepoints, so this check is a second line.
74
+ - **PostgreSQL:** the connection's transaction status must be "in transaction", and
75
+ the statement's command tag must not be transaction control (`BEGIN`, `COMMIT`,
76
+ `ROLLBACK`, `SAVEPOINT`, `RELEASE`, `PREPARE TRANSACTION` and the prepared forms).
77
+ The tag is needed because `COMMIT AND CHAIN` leaves a new transaction open, without
78
+ the API's settings.
79
+
80
+ Both answers come from the driver and the server, not from the SQL text. When the
81
+ check fails, the API stops before the next statement, rolls back what is still open
82
+ and answers 400 with `compiled_sql_transaction_ended`. On PostgreSQL a caller's
83
+ `COMMIT` has already committed the statements before it; the API cannot undo that.
84
+ The caller loses only its own atomicity: no statement runs after the API's
85
+ transaction ended.
86
+
87
+ Lists are refused for reads, so ADR 0007's `READ ONLY` transaction for reads is
88
+ unchanged.
89
+
90
+ Inside one transaction, a setting one statement makes, such as `SET LOCAL` or
91
+ `set_config('role', …, true)`, applies to the next. This gives no new access: the
92
+ login role is the caller's own and inherits all its memberships (ADR 0007), the API
93
+ enforces the time limit with its own cancellation, and `DISCARD ALL` resets the
94
+ connection before reuse (ADR 0022).
95
+
96
+ ### Limits cover the whole list
97
+
98
+ - One time limit, `statement_timeout_ms` (at most 60 seconds), covers every statement:
99
+ SQLite's progress handler and the API's cancellation timer each start once.
100
+ - `max_rows` and `offset` apply to the last statement's rows. Earlier statements'
101
+ rows are counted for their expectations and never returned.
102
+ - A list holds at most 32 statements, and the request body stays within the transfer
103
+ limits of ADR 0012.
104
+
105
+ ### Engines
106
+
107
+ SQLite and PostgreSQL, including TimescaleDB, run statement lists. On SQLite a source
108
+ either opens its own connection, with `BEGIN IMMEDIATE` and a commit at the end, or
109
+ borrows the request's catalog transaction, as the local runtime does; there the
110
+ request's commit or rollback decides.
111
+
112
+ MySQL and SQL Server refuse a list with 422 and `compiled_sql_statement_list_unsupported`.
113
+ DDL in MySQL commits implicitly, and a SQL Server batch can commit before a later
114
+ error, so each needs its own design.
115
+
116
+ ### The compiler refuses CTEs SQLite cannot run
117
+
118
+ `compile_sqlalchemy_statement` raises `ValueError` when a CTE wraps `INSERT`, `UPDATE`
119
+ or `DELETE` and the dialect is SQLite, MySQL or SQL Server. It inspects the SQLAlchemy
120
+ object, so the error comes at compile time instead of a syntax error from the database.
121
+
122
+ ## Alternatives
123
+
124
+ - **Several statements in one SQL string.** The API would have to split the text,
125
+ which is the parsing ADR 0007 removed.
126
+ - **Separate operations in sequence.** Not atomic.
127
+ - **A route for each client's write.** Ties the API to one client's tables.
128
+ - **Guards as SQL that raises.** SQLite raises only inside triggers, and the caller
129
+ could not tell the failure from a database error.
130
+
131
+ ## Consequences
132
+
133
+ - Clients write several tables atomically on the local runtime with the same code
134
+ path they use on PostgreSQL, sending a list where PostgreSQL takes one statement.
135
+ - A PostgreSQL client that puts `COMMIT` in a list loses its own atomicity and gets
136
+ `compiled_sql_transaction_ended`.
137
+ - The API holds one write transaction for up to the whole time limit, as a long single
138
+ statement already can.
@@ -43,6 +43,7 @@ decisions belong in the SDK repository and are linked as dependencies.
43
43
  | [0022: Concurrent requests per pod and reused database connections](api/0022-concurrent-requests-and-connection-reuse.md) | Accepted; implemented on development; deployment and load verification pending | One number per pod sizes its threads, data-request admission, catalog pool and login-role connections; connections are reused only by the role that opened them, and maximum pods × 3T stays within the database's connection limit. |
44
44
  | [0023: A daily security check instead of a sweep in every deployment](api/0023-daily-security-check.md) | Accepted; implemented on development; deployment and first scheduled run pending | A deployment sets up only what the new release needs; a daily Job, which administrators can also start, repairs whatever differs from the plan without pausing caller SQL and records its outcome. |
45
45
  | [0024: Access roles for namespaces and tables](api/0024-namespace-and-table-access-roles.md) | Accepted; implemented on development (API and Admin); hosted deployment pending | Actions and roles (`metadata_viewer`, `data_viewer`, `data_writer`, `editor`, `owner`) replace Reader/Writer; `namespaces.create` and `tables.create` are checked on the parent, the creator of a namespace owns it, admins hold every action, workloads use access but never manage it, and an ordinary user deploys a new application without an admin. |
46
+ | [0026: Atomic statement lists](api/0026-atomic-statement-lists.md) | Accepted; implemented on development for 0.1.60; SQLite tested, PostgreSQL not yet run | A write may carry up to 32 compiled statements that the API runs in order in one transaction it owns, with optional row expectations; each statement is sent alone and the driver must report the transaction still open after it, so ADR 0007's boundary holds without parsing SQL. PostgreSQL and SQLite only. |
46
47
 
47
48
  ## Agents
48
49
 
@@ -294,6 +294,62 @@
294
294
  "title": "CompiledOperation",
295
295
  "type": "object"
296
296
  },
297
+ "CompiledTransaction": {
298
+ "additionalProperties": false,
299
+ "properties": {
300
+ "data_source_uid": {
301
+ "format": "uuid",
302
+ "title": "Data Source Uid",
303
+ "type": "string"
304
+ },
305
+ "dialect": {
306
+ "default": "postgresql",
307
+ "enum": [
308
+ "postgresql",
309
+ "sqlite",
310
+ "mysql",
311
+ "mssql"
312
+ ],
313
+ "title": "Dialect",
314
+ "type": "string"
315
+ },
316
+ "limits": {
317
+ "$ref": "#/components/schemas/Limits"
318
+ },
319
+ "operation": {
320
+ "enum": [
321
+ "insert",
322
+ "update",
323
+ "delete",
324
+ "upsert"
325
+ ],
326
+ "title": "Operation",
327
+ "type": "string"
328
+ },
329
+ "statements": {
330
+ "items": {
331
+ "$ref": "#/components/schemas/TransactionStatement"
332
+ },
333
+ "maxItems": 32,
334
+ "minItems": 1,
335
+ "title": "Statements",
336
+ "type": "array"
337
+ },
338
+ "version": {
339
+ "const": "compiled-sql.v1",
340
+ "default": "compiled-sql.v1",
341
+ "title": "Version",
342
+ "type": "string"
343
+ }
344
+ },
345
+ "required": [
346
+ "operation",
347
+ "statements",
348
+ "data_source_uid"
349
+ ],
350
+ "title": "CompiledTransaction",
351
+ "type": "object"
352
+ },
297
353
  "CompressedStatistics": {
298
354
  "properties": {
299
355
  "data": {
@@ -4580,6 +4636,88 @@
4580
4636
  "title": "TimescaleTablePolicies",
4581
4637
  "type": "object"
4582
4638
  },
4639
+ "TransactionStatement": {
4640
+ "additionalProperties": false,
4641
+ "properties": {
4642
+ "expect_rows": {
4643
+ "anyOf": [
4644
+ {
4645
+ "minimum": 0.0,
4646
+ "type": "integer"
4647
+ },
4648
+ {
4649
+ "const": "at_least_one",
4650
+ "type": "string"
4651
+ },
4652
+ {
4653
+ "type": "null"
4654
+ }
4655
+ ],
4656
+ "title": "Expect Rows"
4657
+ },
4658
+ "label": {
4659
+ "anyOf": [
4660
+ {
4661
+ "maxLength": 200,
4662
+ "minLength": 1,
4663
+ "type": "string"
4664
+ },
4665
+ {
4666
+ "type": "null"
4667
+ }
4668
+ ],
4669
+ "title": "Label"
4670
+ },
4671
+ "parameter_types": {
4672
+ "anyOf": [
4673
+ {
4674
+ "additionalProperties": {
4675
+ "type": "string"
4676
+ },
4677
+ "type": "object"
4678
+ },
4679
+ {
4680
+ "type": "null"
4681
+ }
4682
+ ],
4683
+ "title": "Parameter Types"
4684
+ },
4685
+ "parameters": {
4686
+ "anyOf": [
4687
+ {
4688
+ "additionalProperties": true,
4689
+ "type": "object"
4690
+ },
4691
+ {
4692
+ "items": {},
4693
+ "type": "array"
4694
+ }
4695
+ ],
4696
+ "title": "Parameters"
4697
+ },
4698
+ "paramstyle": {
4699
+ "default": "pyformat",
4700
+ "enum": [
4701
+ "pyformat",
4702
+ "named",
4703
+ "qmark"
4704
+ ],
4705
+ "title": "Paramstyle",
4706
+ "type": "string"
4707
+ },
4708
+ "sql": {
4709
+ "maxLength": 1000000,
4710
+ "minLength": 1,
4711
+ "title": "Sql",
4712
+ "type": "string"
4713
+ }
4714
+ },
4715
+ "required": [
4716
+ "sql"
4717
+ ],
4718
+ "title": "TransactionStatement",
4719
+ "type": "object"
4720
+ },
4583
4721
  "TransferLimits": {
4584
4722
  "properties": {
4585
4723
  "chunk_receipts": {
@@ -5750,6 +5888,46 @@
5750
5888
  ]
5751
5889
  }
5752
5890
  },
5891
+ "/meta-tables/execute-transaction/": {
5892
+ "post": {
5893
+ "description": "Run compiled statements in order in one API-owned transaction (ADR 0026).\n\nThe API commits after the last statement and rolls back on any error, on a\nstatement that misses its ``expect_rows`` (409 ``compiled_sql_guard_failed``) and\non caller SQL that ends or controls the transaction. The last statement's rows\nreturn in the ``execute-operation`` response shape.",
5894
+ "operationId": "execute_transaction_meta_tables_execute_transaction__post",
5895
+ "requestBody": {
5896
+ "content": {
5897
+ "application/json": {
5898
+ "schema": {
5899
+ "$ref": "#/components/schemas/CompiledTransaction"
5900
+ }
5901
+ }
5902
+ },
5903
+ "required": true
5904
+ },
5905
+ "responses": {
5906
+ "200": {
5907
+ "content": {
5908
+ "application/json": {
5909
+ "schema": {}
5910
+ }
5911
+ },
5912
+ "description": "Successful Response"
5913
+ },
5914
+ "422": {
5915
+ "content": {
5916
+ "application/json": {
5917
+ "schema": {
5918
+ "$ref": "#/components/schemas/HTTPValidationError"
5919
+ }
5920
+ }
5921
+ },
5922
+ "description": "Validation Error"
5923
+ }
5924
+ },
5925
+ "summary": "Execute Transaction",
5926
+ "tags": [
5927
+ "MetaTables"
5928
+ ]
5929
+ }
5930
+ },
5753
5931
  "/meta-tables/filter/": {
5754
5932
  "post": {
5755
5933
  "operationId": "filter_meta_tables_meta_tables_filter__post",
@@ -8841,6 +9019,46 @@
8841
9019
  ]
8842
9020
  }
8843
9021
  },
9022
+ "/time-index-meta-tables/execute-transaction/": {
9023
+ "post": {
9024
+ "description": "Run compiled statements in order in one API-owned transaction (ADR 0026).\n\nThe API commits after the last statement and rolls back on any error, on a\nstatement that misses its ``expect_rows`` (409 ``compiled_sql_guard_failed``) and\non caller SQL that ends or controls the transaction. The last statement's rows\nreturn in the ``execute-operation`` response shape.",
9025
+ "operationId": "time_index_execute_transaction_time_index_meta_tables_execute_transaction__post",
9026
+ "requestBody": {
9027
+ "content": {
9028
+ "application/json": {
9029
+ "schema": {
9030
+ "$ref": "#/components/schemas/CompiledTransaction"
9031
+ }
9032
+ }
9033
+ },
9034
+ "required": true
9035
+ },
9036
+ "responses": {
9037
+ "200": {
9038
+ "content": {
9039
+ "application/json": {
9040
+ "schema": {}
9041
+ }
9042
+ },
9043
+ "description": "Successful Response"
9044
+ },
9045
+ "422": {
9046
+ "content": {
9047
+ "application/json": {
9048
+ "schema": {
9049
+ "$ref": "#/components/schemas/HTTPValidationError"
9050
+ }
9051
+ }
9052
+ },
9053
+ "description": "Validation Error"
9054
+ }
9055
+ },
9056
+ "summary": "Time Index Execute Transaction",
9057
+ "tags": [
9058
+ "TimeIndexMetaTables"
9059
+ ]
9060
+ }
9061
+ },
8844
9062
  "/time-index-meta-tables/filter/": {
8845
9063
  "post": {
8846
9064
  "operationId": "time_index_filter_meta_tables_time_index_meta_tables_filter__post",
@@ -23,6 +23,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
23
23
  | POST | `/meta-tables/` | Reserve Tables | 201 |
24
24
  | GET | `/meta-tables/column-search/` | Column Search | 200 |
25
25
  | POST | `/meta-tables/execute-operation/` | Execute Operation | 200 |
26
+ | POST | `/meta-tables/execute-transaction/` | Execute Transaction | 200 |
26
27
  | POST | `/meta-tables/filter/` | Filter Meta Tables | 200 |
27
28
  | POST | `/meta-tables/finalize-managed/` | Finalize Managed | 200 |
28
29
  | POST | `/meta-tables/import-from-data-source/` | Import Source | 200 |
@@ -83,6 +84,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
83
84
  | POST | `/time-index-meta-tables/` | Reserve Tables | 201 |
84
85
  | GET | `/time-index-meta-tables/column-search/` | Time Index Column Search | 200 |
85
86
  | POST | `/time-index-meta-tables/execute-operation/` | Time Index Execute Operation | 200 |
87
+ | POST | `/time-index-meta-tables/execute-transaction/` | Time Index Execute Transaction | 200 |
86
88
  | POST | `/time-index-meta-tables/filter/` | Time Index Filter Meta Tables | 200 |
87
89
  | POST | `/time-index-meta-tables/finalize-managed/` | Time Index Finalize Managed | 200 |
88
90
  | POST | `/time-index-meta-tables/get-data-between-dates-from-table-update/` | Get Data Between Dates From Table Update | 200 |
@@ -150,6 +150,26 @@ default to 1,000 and are capped at 10,000; time limits default to 15 seconds and
150
150
  capped at 60 seconds. `operation="select"` selects read mode; the other operation
151
151
  labels select write mode. They do not classify SQL.
152
152
 
153
+ `POST /meta-tables/execute-transaction/` accepts the same fields with `statements`,
154
+ a list of 1 to 32 statements, in place of `statement`, and a write operation
155
+ (`insert`, `update`, `delete` or `upsert`). Each statement may add `expect_rows`
156
+ (an exact count or `"at_least_one"`) and a `label`. The API runs them in order in
157
+ one write transaction, commits after the last and rolls back on any error. It
158
+ returns the last statement's rows in the `execute-operation` shape; the limits cover
159
+ the whole list. Its errors:
160
+
161
+ | Status | Code | When |
162
+ | --- | --- | --- |
163
+ | 400 | `compiled_sql_database_error` | A statement failed in the database; the body adds `statement_index` and `label`. |
164
+ | 400 | `compiled_sql_transaction_ended` | Caller SQL ended or controlled the API's transaction (PostgreSQL). |
165
+ | 400 | `sql_deadline_exceeded` | The list ran past its time limit. |
166
+ | 409 | `compiled_sql_guard_failed` | A statement missed `expect_rows`; the body adds `statement_index`, `label`, `expect_rows` and `row_count`. |
167
+ | 422 | `compiled_sql_statement_list_unsupported` | The DataSource is MySQL or SQL Server. |
168
+ | 422 | `compiled_sql_dialect_mismatch` | A statement's dialect or paramstyle differs from the DataSource's. |
169
+ | 422 | (request validation) | A read operation, an empty or longer list, or an invalid `expect_rows`. |
170
+
171
+ See [ADR 0026](../adr/api/0026-atomic-statement-lists.md).
172
+
153
173
  `POST /meta-tables/run-query/` accepts `{"data_source_uid": "…", "sql": "…"}` and
154
174
  optional `limits`. It uses the same restricted execution path in read mode and
155
175
  returns the `ok/results/truncated/max_rows/row_count/error` success envelope. Errors
@@ -63,10 +63,80 @@ version tables. Sharing, schema changes and table deletion remain API operations
63
63
 
64
64
  Bind values instead of interpolating user input. Requests have row and time limits.
65
65
  A full page indicates that more rows may exist. PostgreSQL, SQLite and MySQL reject
66
- multiple statements. SQL Server accepts a batch under the same restricted identity;
67
- an explicit commit inside a write batch can persist writes before a later error.
68
- Use the supported table operations when an operation needs their transaction and
69
- journal guarantees. See [database access](../security/index.md#sql-and-schema-boundary).
66
+ multiple statements in one SQL string. SQL Server accepts a batch under the same
67
+ restricted identity; an explicit commit inside a write batch can persist writes
68
+ before a later error. To write several statements atomically, send a
69
+ [statement list](#several-statements-in-one-transaction). Use the supported table
70
+ operations when an operation needs their journal guarantees. See
71
+ [database access](../security/index.md#sql-and-schema-boundary).
72
+
73
+ Only PostgreSQL runs `INSERT`, `UPDATE` or `DELETE` inside `WITH`. For SQLite, MySQL
74
+ and SQL Server, `compile_sqlalchemy_statement` raises `ValueError` when a CTE wraps
75
+ one, instead of returning SQL the database rejects when it runs.
76
+
77
+ ## Several statements in one transaction
78
+
79
+ A write that changes several tables together, such as a snapshot header and its
80
+ rows, can be one PostgreSQL statement with data-modifying CTEs. SQLite cannot run
81
+ that. Send the steps as a statement list instead: the API runs them in order in one
82
+ transaction it owns, commits after the last one and rolls back all of them on any
83
+ error ([ADR 0026](../adr/api/0026-atomic-statement-lists.md)).
84
+
85
+ ```python
86
+ from sqlalchemy import delete, insert, select
87
+
88
+ from metatables import MetaTable, MetaTableTransactionGuardError
89
+ from metatables.compiled_sql.v1 import (
90
+ GuardedStatement,
91
+ compile_sqlalchemy_statements,
92
+ dialect_upsert,
93
+ )
94
+
95
+ transaction = compile_sqlalchemy_statements(
96
+ [
97
+ GuardedStatement(
98
+ select(portfolio.c.uid).where(
99
+ portfolio.c.uid.in_(portfolio_uids), portfolio.c.retired_at.is_(None)
100
+ ),
101
+ expect_rows=len(portfolio_uids),
102
+ label="live_portfolios",
103
+ ),
104
+ dialect_upsert(snapshot, header, key_columns=["account_uid", "as_of"]),
105
+ delete(holding).where(holding.c.account_uid == account_uid),
106
+ insert(holding).values(rows).returning(holding.c.symbol),
107
+ ],
108
+ operation="upsert",
109
+ )
110
+ try:
111
+ result = MetaTable.execute_transaction(transaction)
112
+ except MetaTableTransactionGuardError as error:
113
+ raise PortfolioRetired(error.label) from error # Nothing was written.
114
+ ```
115
+
116
+ - **Statements.** Each item is a SQLAlchemy statement, or a `GuardedStatement` with
117
+ `expect_rows` and a `label`. A list has 1 to 32 statements. Statements do not
118
+ pass values to each other: a later one finds an earlier one's rows by key.
119
+ - **Guards.** `expect_rows` is an exact count or `"at_least_one"`. The count is the
120
+ statement's result rows, or the rows it changed when it returns none. A miss
121
+ rolls everything back and raises `MetaTableTransactionGuardError`, a subclass of
122
+ the SDK's `ConflictError` (HTTP 409, code `compiled_sql_guard_failed`) with
123
+ `statement_index` (from 0), `label`, `expect_rows` and `row_count`.
124
+ - **Result.** The last statement's rows, in the `execute_operation` response shape.
125
+ `limits` cover the whole list: one time limit for every statement, and `max_rows`
126
+ for the last statement's rows.
127
+ - **Writes only.** `operation` is `insert`, `update`, `delete` or `upsert`; it
128
+ selects the write identity, as in `execute_operation`.
129
+ - **Engines.** PostgreSQL and SQLite, including the local runtime. MySQL and SQL
130
+ Server refuse a list: the compiler raises `ValueError`, and the API answers 422
131
+ with `compiled_sql_statement_list_unsupported`.
132
+ - **Transaction control.** The API owns the transaction. SQLite refuses `COMMIT`,
133
+ `ROLLBACK` and savepoints as unauthorized. On PostgreSQL, a statement that ends or
134
+ controls the transaction stops the list with HTTP 400 and
135
+ `compiled_sql_transaction_ended`; statements before it may already be committed.
136
+
137
+ Other errors keep their `execute_operation` codes. A database error is HTTP 400
138
+ `compiled_sql_database_error`, raised as the SDK's `BadRequestError`; for a list,
139
+ its `payload["detail"]` also names `statement_index` and `label`.
70
140
 
71
141
  ## Read another registered source
72
142
 
@@ -43,6 +43,7 @@ This inventory records the support status of public resource methods and CLI com
43
43
  | `MetaTable.delete_with_cascade_by_uid` | tested | `POST /meta-tables/{table_uid}/delete-with-cascade/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_cascade_and_inherited_crud` |
44
44
  | `MetaTable.destroy_by_uid` | tested | `DELETE /meta-tables/{table_uid}/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_delete_client_api.py::test_public_delete_requires_edit_and_journals_physical_drop` |
45
45
  | `MetaTable.execute_operation` | tested | `POST /meta-tables/execute-operation/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_sql_and_migration_connection_check_local_scope` |
46
+ | `MetaTable.execute_transaction` | tested | `POST /meta-tables/execute-transaction/` | Writes several compiled statements in one API-owned transaction with optional row expectations (ADR 0026). SQLite tested through the local API and on its own connection; PostgreSQL not yet run; MySQL and SQL Server refuse. Tests: `tests/e2e/test_statement_lists.py::test_snapshot_writes_commit_together_or_not_at_all`, `tests/integrations/test_sqlite_statement_lists.py::test_a_failing_later_statement_rolls_back_every_earlier_write` |
46
47
  | `MetaTable.explain` | tested | `GET /meta-tables/{uid}/access/explain/` | Roles on namespaces and tables (ADR 0024) through the access API; changes need set_access or a workload's manager, with revision conflict checks. Tests: `tests/permissions/test_security_api.py::test_public_client_role_roundtrip` |
47
48
  | `MetaTable.filter` | implemented | `GET /meta-tables/` | Generic resource operation with a mounted API route. Check route constraints; method-specific evidence is not claimed. |
48
49
  | `MetaTable.filter_by_body` | tested | `POST /meta-tables/filter/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_filter_client_api.py::test_public_body_filter_hydrates_visible_tables_and_counts_before_page` |
@@ -110,6 +111,7 @@ This inventory records the support status of public resource methods and CLI com
110
111
  | `TimeIndexMetaTable.delete_with_cascade_by_uid` | tested | `POST /time-index-meta-tables/{table_uid}/delete-with-cascade/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_cascade_and_inherited_crud` |
111
112
  | `TimeIndexMetaTable.destroy_by_uid` | tested | `DELETE /time-index-meta-tables/{table_uid}/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_delete_client_api.py::test_public_delete_requires_edit_and_journals_physical_drop` |
112
113
  | `TimeIndexMetaTable.execute_operation` | tested | `POST /time-index-meta-tables/execute-operation/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_sql_and_migration_connection_check_local_scope` |
114
+ | `TimeIndexMetaTable.execute_transaction` | tested | `POST /time-index-meta-tables/execute-transaction/` | Writes several compiled statements in one API-owned transaction with optional row expectations (ADR 0026). SQLite tested through the local API and on its own connection; PostgreSQL not yet run; MySQL and SQL Server refuse. Tests: `tests/e2e/test_statement_lists.py::test_snapshot_writes_commit_together_or_not_at_all`, `tests/integrations/test_sqlite_statement_lists.py::test_a_failing_later_statement_rolls_back_every_earlier_write` |
113
115
  | `TimeIndexMetaTable.explain` | tested | `GET /meta-tables/{uid}/access/explain/` | Roles on namespaces and tables (ADR 0024) through the access API; changes need set_access or a workload's manager, with revision conflict checks. Tests: `tests/permissions/test_security_api.py::test_public_client_role_roundtrip` |
114
116
  | `TimeIndexMetaTable.filter` | implemented | `GET /time-index-meta-tables/` | Generic resource operation with a mounted API route. Check route constraints; method-specific evidence is not claimed. |
115
117
  | `TimeIndexMetaTable.filter_by_body` | tested | `POST /time-index-meta-tables/filter/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_filter_client_api.py::test_public_body_filter_hydrates_visible_tables_and_counts_before_page` |
@@ -43,6 +43,7 @@ Import application APIs from `metatables`. This list is generated from `metatabl
43
43
  | `MetaTableCompiledSQLDialect` | `typing` | constant |
44
44
  | `MetaTableCompiledSQLOperation` | `metatables.models` | class |
45
45
  | `MetaTableCompiledSQLParamstyle` | `typing` | constant |
46
+ | `MetaTableCompiledSQLTransaction` | `metatables.models` | class |
46
47
  | `MetaTableCompiledSQLVersion` | `typing` | constant |
47
48
  | `MetaTableContract` | `metatables.models` | class |
48
49
  | `MetaTableForeignKeyPayload` | `metatables.models` | class |
@@ -61,7 +62,10 @@ Import application APIs from `metatables`. This list is generated from `metatabl
61
62
  | `MetaTableRequestFields` | `metatables.models` | class |
62
63
  | `MetaTableSchemaManagementMode` | `typing` | constant |
63
64
  | `MetaTableStatementPayload` | `metatables.models` | class |
65
+ | `MetaTableTransactionGuardError` | `metatables.models` | class |
66
+ | `MetaTableTransactionStatement` | `metatables.models` | class |
64
67
  | `MetaTableValidateContractRequest` | `metatables.models` | class |
68
+ | `MetaTableWriteOperation` | `typing` | constant |
65
69
  | `Namespace` | `metatables.models` | class |
66
70
  | `POSTGRES_IDENTIFIER_MAX_LENGTH` | `metatables` | constant |
67
71
  | `PlatformManagedMetaTable` | `metatables.sqlalchemy_contracts` | class |
@@ -89,6 +89,7 @@ nav:
89
89
  - "0022: Concurrent requests and connection reuse": adr/api/0022-concurrent-requests-and-connection-reuse.md
90
90
  - "0023: Daily security check": adr/api/0023-daily-security-check.md
91
91
  - "0024: Namespace and table access roles": adr/api/0024-namespace-and-table-access-roles.md
92
+ - "0026: Atomic statement lists": adr/api/0026-atomic-statement-lists.md
92
93
  - Agents:
93
94
  - "0019: MetaTables Analyst agent": adr/agent/0019-metatables-analyst-agent.md
94
95
  - "0020: The Analyst reads as its requester": adr/agent/0020-analyst-reads-as-its-requester.md
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.59"
7
+ version = "0.1.60.dev91"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.59
3
+ Version: 0.1.60.dev91
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT