mainsequence-metatable 0.1.30.dev57__tar.gz → 0.1.31.dev58__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 (590) hide show
  1. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-migrations/SKILL.md +34 -3
  2. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/PKG-INFO +1 -1
  3. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0013-application-owned-migrations.md +35 -0
  4. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/define-and-migrate-tables.md +15 -1
  5. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/deploy-application-migrations.md +26 -0
  6. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/installation-and-connection.md +7 -2
  7. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/contributing/documentation.md +1 -1
  8. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/catalog-migrations.md +7 -0
  9. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/pyproject.toml +1 -1
  10. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/PKG-INFO +1 -1
  11. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/SOURCES.txt +3 -0
  12. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/bootstrap.py +35 -14
  13. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/main.py +2 -1
  14. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/managed_finalize.py +34 -12
  15. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +80 -54
  16. mainsequence_metatable-0.1.31.dev58/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +162 -0
  17. mainsequence_metatable-0.1.31.dev58/src/metatables/api/backend/backends/batch_inspection.py +45 -0
  18. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/contracts.py +4 -0
  19. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/native.py +3 -0
  20. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/operations.py +22 -0
  21. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/relational.py +81 -62
  22. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/catalog_schema.py +52 -4
  23. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/endpoint.py +32 -11
  24. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/runner.py +59 -28
  25. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_data_source_identity.py +2 -2
  26. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_runtime_bootstrap.py +16 -0
  27. mainsequence_metatable-0.1.31.dev58/tests/catalog/test_schema_validation.py +60 -0
  28. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_api_endpoint.py +53 -2
  29. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_application_owned_migrations.py +91 -0
  30. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_package.py +1 -1
  31. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_managed_finalize_client_api.py +85 -3
  32. mainsequence_metatable-0.1.31.dev58/tests/e2e/test_runtime_upgrade.py +159 -0
  33. mainsequence_metatable-0.1.31.dev58/tests/integrations/test_batch_introspection.py +202 -0
  34. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/uv.lock +1 -1
  35. mainsequence_metatable-0.1.30.dev57/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -146
  36. mainsequence_metatable-0.1.30.dev57/tests/e2e/test_runtime_upgrade.py +0 -71
  37. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  39. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  40. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  41. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  42. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  43. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/discover-tables/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  45. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  46. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  47. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  48. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  49. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  50. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/.mainsequence/workflows/metatables-api.yaml +0 -0
  51. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/LICENSE +0 -0
  52. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/MANIFEST.in +0 -0
  53. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/README.md +0 -0
  54. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/alembic.ini +0 -0
  55. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/api/metatables/main.py +0 -0
  56. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/compose.database-tests.yml +0 -0
  57. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  58. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  59. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  60. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  61. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  62. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  63. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  64. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  65. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  66. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  67. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  68. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  69. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0009-shared-credential-store.md +0 -0
  70. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  71. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  72. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  73. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  74. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0016-impact-preflight.md +0 -0
  75. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  76. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  77. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0018-table-search.md +0 -0
  78. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  79. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  80. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  81. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/adr/index.md +0 -0
  82. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/authentication-and-errors.md +0 -0
  83. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/data-sources.md +0 -0
  84. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/openapi.json +0 -0
  85. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/overview.md +0 -0
  86. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/reference.md +0 -0
  87. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/tables-and-migrations.md +0 -0
  88. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/api/time-index-and-updates.md +0 -0
  89. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/assets/branding/metatables.svg +0 -0
  90. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/assets/diagrams/local-client-experience.svg +0 -0
  91. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/assets/diagrams/namespace-access.svg +0 -0
  92. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/bounded-transfers.md +0 -0
  93. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/build-an-updater.md +0 -0
  94. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/local-storage.md +0 -0
  95. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/query-and-mutate.md +0 -0
  96. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/quickstart.md +0 -0
  97. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/read-existing-time-index-tables.md +0 -0
  98. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/register-existing-tables.md +0 -0
  99. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/tutorial.md +0 -0
  100. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/client/upgrade-legacy-app.md +0 -0
  101. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/architecture.md +0 -0
  102. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/data-sources.md +0 -0
  103. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/identity-and-scope.md +0 -0
  104. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/permissions-namespaces-labels.md +0 -0
  105. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/runs-and-execution-graphs.md +0 -0
  106. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  107. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/concepts/time-index-tables-and-updates.md +0 -0
  108. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/contributing/architecture-and-boundaries.md +0 -0
  109. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/contributing/database-backends.md +0 -0
  110. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/contributing/releasing.md +0 -0
  111. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/contributing/testing.md +0 -0
  112. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/README.md +0 -0
  113. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/__init__.py +0 -0
  114. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/bounded_reader.py +0 -0
  115. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/data_sources/README.md +0 -0
  116. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/data_sources/mssql.json +0 -0
  117. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/data_sources/mysql.json +0 -0
  118. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/data_sources/postgresql.json +0 -0
  119. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/data_sources/register.py +0 -0
  120. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/external_table.py +0 -0
  121. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/README.md +0 -0
  122. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/__init__.py +0 -0
  123. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/__main__.py +0 -0
  124. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/migrations/__init__.py +0 -0
  125. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/migrations/env.py +0 -0
  126. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/migrations/script.py.mako +0 -0
  127. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  128. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/local_app/tables.py +0 -0
  129. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/query.py +0 -0
  130. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/quickstart.py +0 -0
  131. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/reader.py +0 -0
  132. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/scripts/__init__.py +0 -0
  133. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/scripts/setup_metatables.py +0 -0
  134. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tables.py +0 -0
  135. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/README.md +0 -0
  136. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/__init__.py +0 -0
  137. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/__main__.py +0 -0
  138. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/data/README.md +0 -0
  139. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  140. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/frames.py +0 -0
  141. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/__init__.py +0 -0
  142. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/env.py +0 -0
  143. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/registry.py +0 -0
  144. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  145. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  146. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  147. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  148. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  149. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/operations.py +0 -0
  150. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/tables.py +0 -0
  151. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/tutorial/updaters.py +0 -0
  152. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/examples/updater.py +0 -0
  153. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/index.md +0 -0
  154. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/configuration.md +0 -0
  155. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/hosted-runtime.md +0 -0
  156. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/local-runtime.md +0 -0
  157. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/recovery-and-observability.md +0 -0
  158. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/run-history.md +0 -0
  159. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/operations/run-logs.md +0 -0
  160. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/reference/capabilities.md +0 -0
  161. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/reference/cli.md +0 -0
  162. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/reference/python.md +0 -0
  163. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/security/index.md +0 -0
  164. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/security/ownership-and-sharing.md +0 -0
  165. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/docs/security/permissions.md +0 -0
  166. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/mkdocs.yml +0 -0
  167. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/__init__.py +0 -0
  168. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/build_reference.py +0 -0
  169. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_boundaries.py +0 -0
  170. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_client_api_coverage.py +0 -0
  171. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_distribution_sources.py +0 -0
  172. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_docs.py +0 -0
  173. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_examples_debug.py +0 -0
  174. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/check_project.py +0 -0
  175. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/dev_release_version.py +0 -0
  176. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/test_databases.py +0 -0
  177. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/scripts/test_postgresql.py +0 -0
  178. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/setup.cfg +0 -0
  179. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  180. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  181. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  182. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  183. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/__init__.py +0 -0
  184. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/_admin_source.json +0 -0
  185. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/_build.py +0 -0
  186. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/_skill_bundle.py +0 -0
  187. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/analysis.py +0 -0
  188. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/analyst/__init__.py +0 -0
  189. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/__init__.py +0 -0
  190. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/__init__.py +0 -0
  191. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/auth/__init__.py +0 -0
  192. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/auth/boundary.py +0 -0
  193. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/auth/local_actor.py +0 -0
  194. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/configuration.py +0 -0
  195. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/connection_count.py +0 -0
  196. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/credential_admin.py +0 -0
  197. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/development.py +0 -0
  198. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/development_client.py +0 -0
  199. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/error_logging.py +0 -0
  200. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/mcp.py +0 -0
  201. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/platform_cache.py +0 -0
  202. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/__init__.py +0 -0
  203. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/access_map.py +0 -0
  204. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/caller.py +0 -0
  205. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/column_search.py +0 -0
  206. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/contract_validation.py +0 -0
  207. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/data_sources.py +0 -0
  208. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/migration_connection.py +0 -0
  209. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/namespaces.py +0 -0
  210. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/run_logs.py +0 -0
  211. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/runtime_context.py +0 -0
  212. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/schema_graph.py +0 -0
  213. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/security.py +0 -0
  214. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_cascade.py +0 -0
  215. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_crud.py +0 -0
  216. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_delete.py +0 -0
  217. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_filter.py +0 -0
  218. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_import.py +0 -0
  219. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_introspection.py +0 -0
  220. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_patch.py +0 -0
  221. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_registration.py +0 -0
  222. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_response.py +0 -0
  223. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_search.py +0 -0
  224. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_search_document.py +0 -0
  225. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_sql.py +0 -0
  226. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  227. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  228. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  229. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  230. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  231. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_batch.py +0 -0
  232. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  233. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_constants.py +0 -0
  234. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_crud.py +0 -0
  235. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_details.py +0 -0
  236. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_graph.py +0 -0
  237. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  238. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_registration.py +0 -0
  239. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_runs.py +0 -0
  240. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/routes/update_statistics.py +0 -0
  241. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/runtime.py +0 -0
  242. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/runtime_control.py +0 -0
  243. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/runtime_database.py +0 -0
  244. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/source_passwords.py +0 -0
  245. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/app/transfer.py +0 -0
  246. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/__init__.py +0 -0
  247. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/access.py +0 -0
  249. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  250. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  251. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  252. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  253. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  254. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  255. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  256. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  257. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  258. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  259. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  260. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  261. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  262. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  263. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  264. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  265. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  266. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  267. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  268. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/catalog.py +0 -0
  269. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  270. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  271. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  272. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/hosted.py +0 -0
  273. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  274. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  275. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/pages.py +0 -0
  276. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  277. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/registry.py +0 -0
  278. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  279. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  280. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  281. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/streaming.py +0 -0
  282. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/backends/timescale.py +0 -0
  283. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/contracts/__init__.py +0 -0
  284. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  285. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  286. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  287. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/contracts/values.py +0 -0
  288. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/__init__.py +0 -0
  289. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  290. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  291. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  292. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/label_rules.py +0 -0
  293. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  294. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/domain/update_constants.py +0 -0
  295. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/__init__.py +0 -0
  296. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  297. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  298. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  299. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  300. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  301. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  302. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  303. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  304. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  305. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  306. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  307. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/__init__.py +0 -0
  308. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/env.py +0 -0
  309. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  310. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  311. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  312. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  313. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  314. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  315. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  316. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  317. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  318. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  319. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  320. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  321. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  322. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  323. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/__init__.py +0 -0
  324. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  325. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/create_table.py +0 -0
  326. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  327. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/import_relations.py +0 -0
  328. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  329. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  330. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  331. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/__init__.py +0 -0
  332. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/cascade.py +0 -0
  333. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/catalog.py +0 -0
  334. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/database.py +0 -0
  335. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/grants.py +0 -0
  336. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/impact.py +0 -0
  337. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/labels.py +0 -0
  338. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/locking.py +0 -0
  339. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/models.py +0 -0
  340. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  341. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/projections.py +0 -0
  342. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  343. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  344. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  345. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  346. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  347. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/table_response.py +0 -0
  348. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  349. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  350. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/updates.py +0 -0
  351. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  352. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  353. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/__init__.py +0 -0
  354. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/documents.py +0 -0
  355. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/embeddings.py +0 -0
  356. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/index.py +0 -0
  357. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/ranking.py +0 -0
  358. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/text.py +0 -0
  359. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/backend/search/worker.py +0 -0
  360. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/metatables/__init__.py +0 -0
  361. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/metatables/configuration.yaml +0 -0
  362. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/metatables/main.py +0 -0
  363. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/api/request_timing.py +0 -0
  364. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/__init__.py +0 -0
  365. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/admin_install.py +0 -0
  366. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/app.py +0 -0
  367. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/filters.py +0 -0
  368. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/local.py +0 -0
  369. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/migrations.py +0 -0
  370. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/project.py +0 -0
  371. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/cli/skills.py +0 -0
  372. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/compiled_sql/__init__.py +0 -0
  373. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/compiled_sql/mssql.py +0 -0
  374. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/compiled_sql/v1.py +0 -0
  375. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/dtype_codec.py +0 -0
  376. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/README.md +0 -0
  377. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/__init__.py +0 -0
  378. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/bounded_reader.py +0 -0
  379. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/data_sources/README.md +0 -0
  380. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/data_sources/mssql.json +0 -0
  381. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/data_sources/mysql.json +0 -0
  382. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/data_sources/postgresql.json +0 -0
  383. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/data_sources/register.py +0 -0
  384. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/external_table.py +0 -0
  385. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/README.md +0 -0
  386. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/__init__.py +0 -0
  387. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/__main__.py +0 -0
  388. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  389. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/migrations/env.py +0 -0
  390. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  391. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  392. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/local_app/tables.py +0 -0
  393. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/query.py +0 -0
  394. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/quickstart.py +0 -0
  395. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/reader.py +0 -0
  396. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/scripts/__init__.py +0 -0
  397. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  398. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tables.py +0 -0
  399. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/README.md +0 -0
  400. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/__init__.py +0 -0
  401. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/__main__.py +0 -0
  402. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/data/README.md +0 -0
  403. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  404. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/frames.py +0 -0
  405. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  406. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  407. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  408. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  409. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  410. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  411. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  412. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  413. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/operations.py +0 -0
  414. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/tables.py +0 -0
  415. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/tutorial/updaters.py +0 -0
  416. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/examples/updater.py +0 -0
  417. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/future_registry.py +0 -0
  418. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/hashing.py +0 -0
  419. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/instrumentation.py +0 -0
  420. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/local_connection.py +0 -0
  421. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/local_files.py +0 -0
  422. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/local_run_logs.py +0 -0
  423. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/log_contract.py +0 -0
  424. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/__init__.py +0 -0
  425. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/alembic.py +0 -0
  426. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/connection.py +0 -0
  427. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/env.py +0 -0
  428. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/provider.py +0 -0
  429. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/registry.py +0 -0
  430. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/scaffold.py +0 -0
  431. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/sqlite.py +0 -0
  432. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/templates/__init__.py +0 -0
  433. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/templates/env.py.mako +0 -0
  434. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/templates/script.py.mako +0 -0
  435. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/migrations/tls.py +0 -0
  436. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/models.py +0 -0
  437. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/pydantic_metadata.py +0 -0
  438. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/run_logging.py +0 -0
  439. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/runtime.py +0 -0
  440. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/runtime_context.py +0 -0
  441. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/runtime_contract.py +0 -0
  442. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/schema_names.py +0 -0
  443. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/sdk_compat.py +0 -0
  444. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/sqlalchemy_contracts.py +0 -0
  445. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/storage_layout_contract.py +0 -0
  446. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/time_index_table_refs.py +0 -0
  447. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/transfer.py +0 -0
  448. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/transfer_contract.py +0 -0
  449. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/transport.py +0 -0
  450. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/update_configuration_contract.py +0 -0
  451. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/__init__.py +0 -0
  452. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/configuration.py +0 -0
  453. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/dependencies.py +0 -0
  454. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/managers.py +0 -0
  455. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/namespacing.py +0 -0
  456. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/runner.py +0 -0
  457. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/updaters.py +0 -0
  458. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/updaters/utils.py +0 -0
  459. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/src/metatables/upload.py +0 -0
  460. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/analyst/test_agent_surface.py +0 -0
  461. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/analyst/test_api_search.py +0 -0
  462. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/analyst/test_mcp.py +0 -0
  463. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/analyst/test_tools.py +0 -0
  464. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  465. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_caller_endpoint.py +0 -0
  466. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_development_client.py +0 -0
  467. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_hosted_agent.py +0 -0
  468. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_hosted_environment_target.py +0 -0
  469. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_local_mode.py +0 -0
  470. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_platform_fact_cache.py +0 -0
  471. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_request_identity.py +0 -0
  472. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_runtime_database.py +0 -0
  473. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_runtime_scaffold.py +0 -0
  474. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_runtime_selection.py +0 -0
  475. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_runtime_storage_binding.py +0 -0
  476. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/auth/test_source_passwords.py +0 -0
  477. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/catalog/test_catalog_foundation.py +0 -0
  478. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/catalog/test_contract_projection.py +0 -0
  479. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/catalog/test_database_config.py +0 -0
  480. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/catalog/test_index_statistics.py +0 -0
  481. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/catalog/test_migration.py +0 -0
  482. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/conftest.py +0 -0
  483. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/capabilities.json +0 -0
  484. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/client_signatures.json +0 -0
  485. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/database_operations.json +0 -0
  486. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_bounded_transfer.py +0 -0
  487. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_compiler_runtime_source.py +0 -0
  488. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_relation_batching.py +0 -0
  489. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_relation_import.py +0 -0
  490. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_runtime_contract_compat.py +0 -0
  491. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_storage_layouts.py +0 -0
  492. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/contracts/test_table_contracts.py +0 -0
  493. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/Dockerfile +0 -0
  494. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/Dockerfile.dockerignore +0 -0
  495. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/__init__.py +0 -0
  496. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/conftest.py +0 -0
  497. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/provider/__init__.py +0 -0
  498. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/provider/env.py +0 -0
  499. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  500. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_api_contract.py +0 -0
  501. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_application_migration.py +0 -0
  502. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  503. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_catalog_contract.py +0 -0
  504. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_credential_catalog.py +0 -0
  505. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_physical_contract.py +0 -0
  506. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_relation_import.py +0 -0
  507. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  508. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_sql_security.py +0 -0
  509. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_backend/test_update_client.py +0 -0
  510. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_operations/test_physical_operations.py +0 -0
  511. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_operations/test_postgresql_operations.py +0 -0
  512. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  513. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/documentation/test_project_checks.py +0 -0
  514. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_admin_installation.py +0 -0
  515. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_catalog_outage.py +0 -0
  516. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_api_contract.py +0 -0
  517. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_api_coverage.py +0 -0
  518. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_migration_scaffold.py +0 -0
  519. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_migration_tls.py +0 -0
  520. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_signatures.py +0 -0
  521. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_client_value_behaviors.py +0 -0
  522. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_data_source_registry.py +0 -0
  523. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_local_actor_client_api.py +0 -0
  524. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_local_cli_workflow.py +0 -0
  525. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_local_client_selection.py +0 -0
  526. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_namespaces_admin_http.py +0 -0
  527. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_public_imports.py +0 -0
  528. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_remaining_client_routes.py +0 -0
  529. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_run_graphs.py +0 -0
  530. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_run_logs.py +0 -0
  531. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_sdk_local_startup.py +0 -0
  532. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_sqlite_runtime.py +0 -0
  533. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_delete_client_api.py +0 -0
  534. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_filter_client_api.py +0 -0
  535. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_introspection_client_api.py +0 -0
  536. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_patch_client_api.py +0 -0
  537. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_search_api.py +0 -0
  538. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_search_document_api.py +0 -0
  539. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_search_scale.py +0 -0
  540. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_stats_api.py +0 -0
  541. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_update_pipeline.py +0 -0
  542. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_table_updates_http.py +0 -0
  543. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  544. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  545. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  546. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_update_batch_client_api.py +0 -0
  547. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  548. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  549. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  550. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/e2e/test_update_registration_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/examples/test_documented_examples.py +0 -0
  552. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/examples/test_postgresql_examples.py +0 -0
  553. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/examples/test_setup_launch.py +0 -0
  554. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/examples/test_tutorial.py +0 -0
  555. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_connection_reuse.py +0 -0
  556. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_credential_store.py +0 -0
  557. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_data_source_rules.py +0 -0
  558. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_local_data_sources.py +0 -0
  559. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_local_run_logs.py +0 -0
  560. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_postgresql_connection.py +0 -0
  561. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_postgresql_sql.py +0 -0
  562. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_postgresql_tables.py +0 -0
  563. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  564. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_request_timing.py +0 -0
  565. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_serving_policy.py +0 -0
  566. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_source_validation.py +0 -0
  567. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/integrations/test_sqlite_operations.py +0 -0
  568. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/labels/test_labels.py +0 -0
  569. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_create_table_operation.py +0 -0
  570. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_create_table_postgres.py +0 -0
  571. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_physical_operation_journal.py +0 -0
  572. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_register_catalog.py +0 -0
  573. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_search_documents.py +0 -0
  574. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/operations/test_timescale_policies.py +0 -0
  575. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/packaging/test_client_skills.py +0 -0
  576. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/packaging/test_dev_release_version.py +0 -0
  577. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/packaging/test_distribution_sources.py +0 -0
  578. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/packaging/test_editable_build.py +0 -0
  579. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/packaging/test_installed_distribution.py +0 -0
  580. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_access_map.py +0 -0
  581. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_governed_sql_scope.py +0 -0
  582. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_incremental_security.py +0 -0
  583. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_local_actor_membership.py +0 -0
  584. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_migration_boundary.py +0 -0
  585. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_namespace_grants.py +0 -0
  586. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_security_api.py +0 -0
  587. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_table_body_filter.py +0 -0
  588. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_table_grants.py +0 -0
  589. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_table_queries.py +0 -0
  590. {mainsequence_metatable-0.1.30.dev57 → mainsequence_metatable-0.1.31.dev58}/tests/permissions/test_workload_principals.py +0 -0
@@ -190,12 +190,43 @@ API Writer checks govern connection admission and provider catalog operations.
190
190
  The client reserves catalog entries, runs Alembic, closes its physical connection,
191
191
  and finalizes contracts through the API. Treat connection material as private.
192
192
 
193
- Python code can call `metatables.upgrade_application("ledger.migrations:migration")`;
194
- `src/metatables/examples/scripts/setup_metatables.py` shows the pattern, and the
195
- deployment migration Job uses the same call. Remove the retired
193
+ Applications and consuming libraries use the same public Python entry point in
194
+ an explicit setup function or deployment migration Job:
195
+
196
+ ```python
197
+ from metatables import upgrade_application
198
+
199
+ result = upgrade_application("ledger.migrations:migration")
200
+ ```
201
+
202
+ `src/metatables/examples/scripts/setup_metatables.py` shows the pattern. Keep
203
+ migration execution out of a library's import-time side effects. Remove the retired
196
204
  `application_migration_providers` setting and use Python references instead of aliases.
197
205
  Application migration histories remain separate from API system migrations.
198
206
 
207
+ ## Repeated runs and migration performance
208
+
209
+ Use the shared `upgrade_application` path for every provider. Table-inventory and
210
+ physical-inspection batching are automatic in the client/API implementation; no
211
+ separate batching import, private backend helper or opt-in flag is needed.
212
+ An unchanged Alembic revision still reconciles physical contracts and refreshes
213
+ table descriptions, labels and column metadata. Do not skip finalization based
214
+ only on `migrated=False` or equal revision heads: missing/unreadable tables must
215
+ still fail, and only explicit removals may delete a catalog binding.
216
+
217
+ For a slow migration, read the "Migration timings" section in
218
+ `docs/client/deploy-application-migrations.md`. Enable INFO logging for
219
+ `metatables.migrations.runner` to see preparation, database setup, table checks,
220
+ Alembic, finalization and total duration. The API logs inspection and total time
221
+ per finalization batch. Measure these separately from platform job scheduling
222
+ and workflow coordination before attributing the delay to schema validation.
223
+
224
+ Check the installed client and deployed API versions. Client optimizations need
225
+ a package update and application image rebuild; API batching needs a shared API
226
+ deployment. After installing a release containing the changes, refresh copied
227
+ skills with `metatables copy-metatables-skills --path /path/to/application`.
228
+ This command copies guidance; Python imports alone do not refresh it.
229
+
199
230
  ## Lifecycle invariants
200
231
 
201
232
  - Provider tables and the Alembic registry are `platform_managed` +
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.30.dev57
3
+ Version: 0.1.31.dev58
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
@@ -95,6 +95,35 @@ requires inspection and application-owned recovery. No server executor journal i
95
95
  claimed for client DDL. Downgrade to base clears the recorded revision and reconciles
96
96
  dropped tables. Revision files already applied remain immutable.
97
97
 
98
+ ### Batched inspection (2026-10-09 amendment)
99
+
100
+ This is an implementation refinement of the lifecycle above, not a change to
101
+ execution ownership, authorization or the migration API.
102
+
103
+ - The client reads one table inventory per schema before Alembic and a fresh one
104
+ afterwards. Missing inventory entries still use `has_table` so views and temporary
105
+ tables retain their previous behavior. The first pass also rejects unversioned
106
+ application storage; it is not repeated for that check.
107
+ - The API authorizes every requested binding before physical inspection. It resolves
108
+ the admitted DataSource once per finalization request and shares a read connection
109
+ across its tables. PostgreSQL/TimescaleDB use four metadata queries per schema
110
+ (plus a diagnostic query for missing tables). SQLite/MySQL/SQL Server use SQLAlchemy
111
+ bulk reflection with dialect fallbacks and preserve their existing projections.
112
+ - Reflection caches last only for that inspection. No snapshot is reused across DDL
113
+ or requests. An unchanged Alembic revision still finalizes physical contracts and
114
+ refreshes semantic metadata; it is not evidence that the database has no drift.
115
+ - Missing, inaccessible and foreign-owned tables keep their existing failure
116
+ semantics. A bulk database error falls back to independent table inspections after
117
+ closing the failed transaction, so an unrelated table can still finalize. Only
118
+ explicitly removed, physically absent application tables lose their binding.
119
+ - Client phase timings and API inspection/total timings report where time is spent.
120
+ They do not include platform job scheduling or workflow coordination.
121
+
122
+ The client still sends bounded finalization requests (ten tables per batch); the
123
+ HTTP request/response contract is unchanged. Client inventory improvements require
124
+ a package update and application rebuild. API batching benefits existing clients
125
+ after the shared API is deployed, with larger gains for clients sending batches.
126
+
98
127
  ## MetaTables system migrations
99
128
 
100
129
  Hosted system upgrades also run as a deployment prerequisite Job
@@ -132,3 +161,9 @@ connection dialect/TLS options, catalog authorization and runtime hold release.
132
161
  SQLite integration tests use disposable files. Hosted driver configuration is
133
162
  checked without starting databases. Container/database-matrix tests are on demand;
134
163
  backend/runtime tests are not added to required CI checks.
164
+
165
+ The batching amendment adds non-container checks for query/connection counts,
166
+ fresh reflection after DDL, unchanged-revision reconciliation, authorization before
167
+ inspection, independent failures and dialect fallbacks. PostgreSQL query grouping is
168
+ checked with a recording driver; SQLite executes real local DDL. Hosted performance
169
+ and live MySQL/SQL Server/PostgreSQL verification remain pending.
@@ -89,7 +89,21 @@ metatables --local migrations upgrade --provider ledger.migrations:migration
89
89
  The local API must already be running; `--local` selects its connection, so inspect
90
90
  runtime status to verify the database actually selected in Settings.
91
91
 
92
- Python setup code can call `metatables.upgrade_application("ledger.migrations:migration")`.
92
+ Applications and libraries use the same public import in their migration Job or
93
+ explicit setup function:
94
+
95
+ ```python
96
+ from metatables import upgrade_application
97
+
98
+ result = upgrade_application("ledger.migrations:migration")
99
+ ```
100
+
101
+ The shared runner automatically uses the installed client's table inventories and
102
+ the API's batched finalization. No separate batching import or option is needed.
103
+ Keep this call in the explicit migration lifecycle, rather than executing it when
104
+ a library is imported. See [migration timings](deploy-application-migrations.md#migration-timings)
105
+ for diagnostics and the client/API updates needed to receive these optimizations.
106
+
93
107
  For current and downgrade, use `metatables.migrations.runner.run_migration` with
94
108
  `operation="current"` or `operation="downgrade", revision="0001"`.
95
109
 
@@ -26,6 +26,28 @@ upgrade` or `downgrade` against a hosted API from a developer machine or agent
26
26
  session. Do not migrate at application startup either: several pods would race,
27
27
  and a failure would not stop the rollout.
28
28
 
29
+ ## Migration timings
30
+
31
+ At INFO level, `metatables.migrations.runner` logs preparation, database setup,
32
+ table-presence checks before and after Alembic, Alembic execution, catalog
33
+ finalization and total duration. The API logs physical inspection and total time
34
+ for each finalization batch. Use these to distinguish database work from platform
35
+ scheduling and workflow coordination.
36
+
37
+ An already-current database still reconciles the provider's catalog contracts.
38
+ Checks use fresh table inventories and batched physical reflection; an unchanged
39
+ revision does not skip missing-table checks, permissions or metadata refresh.
40
+ PostgreSQL batches metadata queries by schema; other dialects use SQLAlchemy's
41
+ bulk reflection and its supported fallbacks. Caches do not survive the request.
42
+ Client improvements require updating the application's installed MetaTables package
43
+ and rebuilding its image; API improvements require deploying the shared API.
44
+ Applications and libraries continue to use `from metatables import upgrade_application`;
45
+ batching is automatic in this shared path, with no new import or opt-in flag.
46
+ After updating the installed package, refresh its agent guidance with
47
+ `metatables copy-metatables-skills --path /path/to/application`. This copies the
48
+ matching migration skill and its guide snapshots; importing Python code does not
49
+ update a project's copied skills.
50
+
29
51
  ## Declare the migration Job
30
52
 
31
53
  Add one Job script that applies every provider the application owns, in
@@ -117,6 +139,10 @@ its branch to discover the API; declare it on the Job:
117
139
  level: view
118
140
  ```
119
141
 
142
+ `upgrade_application()` waits up to five minutes for the API to wake or finish
143
+ replacing its pods before it fails with `ApiResolutionError`; other client calls
144
+ wait 30 seconds.
145
+
120
146
  Team membership takes effect on the workload's next request, in the catalog and in
121
147
  the database. When a workload User changes, add the new one to the Team; nothing
122
148
  in MetaTables changes. A table registered in a namespace the caller already
@@ -74,7 +74,7 @@ application migrations, persistence and credentials.
74
74
 
75
75
  ## Copy client skills into an application
76
76
 
77
- After installing MetaTables, explicitly copy its five client usage skills into a
77
+ After installing MetaTables, explicitly copy its client usage skills into a
78
78
  consuming project:
79
79
 
80
80
  ```bash
@@ -88,12 +88,17 @@ metatables --json copy-metatables-skills --path /path/to/application
88
88
  `metatables` does not copy skills.
89
89
 
90
90
  The destination is `<application>/.agents/skills/metatables/`. It contains the
91
- local development, table, application migration, time-index updater and legacy
91
+ local development, table, application migration, table discovery, time-index updater and legacy
92
92
  application upgrade skills, with matching
93
93
  guide/example snapshots in each skill's `references/` folder. The installed client
94
94
  version is recorded in `PINNED_FROM.txt`. Skills for API implementation or
95
95
  MetaTables project development are outside this bundle.
96
96
 
97
+ After upgrading the installed package, run the copy command again to refresh the
98
+ matching guidance. The migration skill includes the public `upgrade_application`
99
+ import, repeated-run behavior and migration timing diagnostics. Python imports
100
+ use the installed library independently of these copied agent instructions.
101
+
97
102
  Running the command again replaces the whole `metatables` namespace: folders the
98
103
  installed client does not ship, including any added there, are removed. Keep the
99
104
  application's own skills in another `.agents/skills/` namespace; the copy never
@@ -56,7 +56,7 @@ belong to their component documentation and project instructions.
56
56
  | --- | --- |
57
57
  | `.agents/skills/client/metatables-local-development/SKILL.md` | Local-first application development, runtime/DataSource checks, isolated verification and explicit return to the environment. |
58
58
  | `.agents/skills/client/metatables-meta-tables/SKILL.md` | SQLAlchemy contracts, external registration, governed queries and client access operations. |
59
- | `.agents/skills/client/metatables-migrations/SKILL.md` | Alembic providers, offline revisions, approved API-side execution and migration recovery for managed application tables. |
59
+ | `.agents/skills/client/metatables-migrations/SKILL.md` | Application-owned Alembic providers, offline revisions, shared migration execution, timing diagnostics and recovery for managed application tables. |
60
60
  | `.agents/skills/client/metatables-table-discovery/SKILL.md` | Table search, and the authoritative rules for table descriptions, labels and column metadata (ADR 0018). |
61
61
  | `.agents/skills/client/metatables-time-index-table-updates/SKILL.md` | Producers, dependencies, incremental frames and existing-table readers. |
62
62
 
@@ -10,6 +10,13 @@ new image, and a failure blocks the rollout. Settings is read-only in Hosted mod
10
10
  See [the deployment gate](hosted-runtime.md#deployment-gate) and
11
11
  [ADR 0014](../adr/api/0014-main-sequence-release-jobs-and-production-migrations.md).
12
12
 
13
+ The deployment gate checks revisions and registration during preflight, then
14
+ validates the full system schema once inside the migration runner, including when
15
+ the database is already current. Registration and permission setup finish under
16
+ the same bootstrap lock. Schema reflection is batched across the required tables;
17
+ the job logs the number of tables validated and elapsed time. Startup and explicit
18
+ activation still perform their own fresh schema validation.
19
+
13
20
  Local mode initializes its SQLite file explicitly in Settings:
14
21
 
15
22
  1. Open **Settings**. Local mode prefills the single local SQLite runtime file,
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.30.dev57"
7
+ version = "0.1.31.dev58"
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.30.dev57
3
+ Version: 0.1.31.dev58
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
@@ -249,6 +249,7 @@ src/metatables/api/app/routes/update_statistics.py
249
249
  src/metatables/api/backend/__init__.py
250
250
  src/metatables/api/backend/backends/__init__.py
251
251
  src/metatables/api/backend/backends/access.py
252
+ src/metatables/api/backend/backends/batch_inspection.py
252
253
  src/metatables/api/backend/backends/catalog.py
253
254
  src/metatables/api/backend/backends/catalog_ddl.py
254
255
  src/metatables/api/backend/backends/catalog_types.py
@@ -468,6 +469,7 @@ tests/catalog/test_contract_projection.py
468
469
  tests/catalog/test_database_config.py
469
470
  tests/catalog/test_index_statistics.py
470
471
  tests/catalog/test_migration.py
472
+ tests/catalog/test_schema_validation.py
471
473
  tests/contracts/capabilities.json
472
474
  tests/contracts/client_signatures.json
473
475
  tests/contracts/database_operations.json
@@ -545,6 +547,7 @@ tests/examples/test_documented_examples.py
545
547
  tests/examples/test_postgresql_examples.py
546
548
  tests/examples/test_setup_launch.py
547
549
  tests/examples/test_tutorial.py
550
+ tests/integrations/test_batch_introspection.py
548
551
  tests/integrations/test_connection_reuse.py
549
552
  tests/integrations/test_credential_store.py
550
553
  tests/integrations/test_data_source_rules.py
@@ -7,6 +7,7 @@ from contextlib import ExitStack, contextmanager
7
7
  from dataclasses import replace
8
8
  from pathlib import Path
9
9
  from threading import Lock
10
+ from time import perf_counter
10
11
  from types import SimpleNamespace
11
12
  from typing import Literal
12
13
  from uuid import UUID, uuid4
@@ -233,7 +234,7 @@ class RuntimeBootstrap:
233
234
  self.reader = None
234
235
  self.resources.close()
235
236
 
236
- def configure(self, body, owner):
237
+ def configure(self, body, owner, *, validate_schema=True):
237
238
  # Validate public configuration before replacing the current candidate.
238
239
  values = RuntimeSourceInput.model_validate(body).model_dump(mode="json")
239
240
  kind = values["class_type"]
@@ -271,7 +272,7 @@ class RuntimeBootstrap:
271
272
  self.candidate, self.owner = values, owner
272
273
  self.active, self.uid = False, None
273
274
  self.status, self.error, self.current = "unconfigured", None, []
274
- self.inspect()
275
+ self.inspect(validate_schema=validate_schema)
275
276
 
276
277
  def open_engine(self, *, create=False):
277
278
  from metatables.api.backend.backends.registry import backend_for_engine
@@ -288,8 +289,13 @@ class RuntimeBootstrap:
288
289
  self.factory = sessionmaker(self.engine, expire_on_commit=False)
289
290
  return self.engine
290
291
 
291
- def inspect(self):
292
+ def inspect(self, *, validate_schema=True):
293
+ # Migration preflight defers the full schema check to upgrade_catalog.
294
+ # Its result can also be reused for registration verification while the
295
+ # same bootstrap lock is held. Startup and activation always check it;
296
+ # startup's activation reuses the check startup just ran (MetaTables #55).
292
297
  self.error = None
298
+ started = perf_counter()
293
299
  try:
294
300
  script = ScriptDirectory.from_config(migration_config())
295
301
  self.expected = list(script.get_heads())
@@ -321,8 +327,11 @@ class RuntimeBootstrap:
321
327
  if not self.current:
322
328
  self.require_prerequisites(connection)
323
329
  return
324
- from metatables.api.backend.operations.catalog_schema import validate_system_schema
325
- validate_system_schema(connection, self.backend.catalog)
330
+ if validate_schema:
331
+ from metatables.api.backend.operations.catalog_schema import (
332
+ validate_system_schema,
333
+ )
334
+ validate_system_schema(connection, self.backend.catalog)
326
335
  with self.factory() as session:
327
336
  row = session.scalar(select(DataSource).where(DataSource.is_runtime.__eq__(True)))
328
337
  if row is None:
@@ -362,6 +371,9 @@ class RuntimeBootstrap:
362
371
  self.status = "unavailable"
363
372
  self.error = (f"Cannot verify the selected database or its Alembic history ({cause}). Check configuration, "
364
373
  "Secret access and the API's migration version. The log has the full error.")
374
+ finally:
375
+ logger.info("Runtime database inspection took %.3fs (status %s, schema validated: %s)",
376
+ perf_counter() - started, self.status, validate_schema)
365
377
 
366
378
  def require_prerequisites(self, connection):
367
379
  # Before any setup DDL: a database the login cannot secure must never be
@@ -389,11 +401,11 @@ class RuntimeBootstrap:
389
401
  try:
390
402
  # Check before creating a file or scope marker: an earlier local
391
403
  # store must remain untouched even when this target is absent.
392
- self.inspect()
404
+ self.inspect(validate_schema=False)
393
405
  if self.status not in {"migration_required", "registration_required", "ready"}:
394
406
  raise BootstrapError(self.error or "The selected database cannot be migrated.")
395
407
  with self.migration_lock():
396
- self.inspect()
408
+ self.inspect(validate_schema=False)
397
409
  if self.status not in {"migration_required", "registration_required", "ready"}:
398
410
  raise BootstrapError(self.error or "The selected database cannot be migrated.")
399
411
  self.status = "migrating"
@@ -421,11 +433,17 @@ class RuntimeBootstrap:
421
433
  if hasattr(credentials, "initialize"):
422
434
  credentials.initialize()
423
435
  session.commit()
436
+ # upgrade_catalog already verified the complete system schema.
437
+ # Recheck registration before releasing the lock, without
438
+ # repeating every table/column/index/constraint lookup.
439
+ self.inspect(validate_schema=False)
440
+ if self.status != "ready":
441
+ raise BootstrapError(self.error or "Migration finished but the runtime is not ready.")
442
+ except (BootstrapError, CatalogConfigurationError) as exc:
424
443
  self.inspect()
425
- if self.status != "ready":
426
- raise BootstrapError(self.error or "Migration finished but the runtime is not ready.")
427
- except BootstrapError:
428
- self.inspect()
444
+ if isinstance(exc, CatalogConfigurationError):
445
+ self.status, self.error = "incompatible", str(exc)
446
+ raise BootstrapError(self.error) from exc
429
447
  raise
430
448
  except Exception as exc:
431
449
  self.inspect()
@@ -502,8 +520,11 @@ class RuntimeBootstrap:
502
520
  self.error = message
503
521
  raise BootstrapError(message) from None
504
522
 
505
- def activate(self, request, user_uid=None, *, persist=True):
506
- self.inspect()
523
+ def activate(self, request, user_uid=None, *, persist=True, inspected=False):
524
+ # ``inspected``: the caller fully inspected this candidate just before,
525
+ # as startup does right after configure(). Every other activation checks.
526
+ if not inspected:
527
+ self.inspect()
507
528
  if self.status != "ready":
508
529
  raise BootstrapError(self.error or "Run MetaTables migrations before selecting this DataSource.")
509
530
  with self.factory() as session:
@@ -551,7 +572,7 @@ def deploy_runtime_database(user_uid):
551
572
  candidate = target.initial_candidate()
552
573
  if candidate is None:
553
574
  raise BootstrapError(target.error)
554
- target.configure(candidate, user_uid)
575
+ target.configure(candidate, user_uid, validate_schema=False)
555
576
  previous = sorted(target.current)
556
577
  target.migrate(user_uid)
557
578
  revisions = sorted(target.current)
@@ -152,7 +152,8 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
152
152
  bootstrap = _app.state.runtime.bootstrap
153
153
  if bootstrap and bootstrap.status == "ready":
154
154
  from types import SimpleNamespace
155
- bootstrap.activate(SimpleNamespace(app=_app), persist=False)
155
+ # initialize_runtime() just validated this candidate (MetaTables #55).
156
+ bootstrap.activate(SimpleNamespace(app=_app), persist=False, inspected=True)
156
157
  control = getattr(_app.state, "runtime_control", None)
157
158
  if control is not None:
158
159
  control.started()
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import logging
6
6
  from collections.abc import Callable
7
+ from time import perf_counter
7
8
  from typing import Any
8
9
  from uuid import UUID
9
10
 
@@ -19,7 +20,7 @@ from metatables.api.app.routes.table_introspection import data_source_provider
19
20
  from metatables.api.backend.backends.operations import (
20
21
  PhysicalConnectionUnavailable,
21
22
  PhysicalIntrospectionError,
22
- introspect_physical_table,
23
+ introspect_physical_tables,
23
24
  )
24
25
  from metatables.api.backend.backends.timescale import (
25
26
  TimescaleError,
@@ -73,7 +74,7 @@ def physical_hypertable_converter() -> Callable[..., None]:
73
74
 
74
75
 
75
76
  def physical_finalization_introspector() -> Callable[..., dict]:
76
- return introspect_physical_table
77
+ return introspect_physical_tables
77
78
 
78
79
 
79
80
  def _missing_error(root: bool, other_schemas: list[str]) -> dict:
@@ -127,6 +128,7 @@ def finalize_managed(
127
128
  make_hypertable: Callable[..., None] = Depends(physical_hypertable_converter),
128
129
  ) -> dict:
129
130
  """Reconcile each requested row and return a per-table result envelope."""
131
+ started = perf_counter()
130
132
  requested = list(dict.fromkeys(payload.meta_table_uids))
131
133
  removed = set(payload.removed_meta_table_uids)
132
134
  lock_catalog(session)
@@ -143,6 +145,7 @@ def finalize_managed(
143
145
  if version_root is not None and (root_table is None or root_table.management_mode != 'platform_managed' or root_table.schema_management_mode != 'alembic_managed' or (root_table.alembic_version_meta_table_uid is not None) or any((value is not None and getattr(root_table, field) != value for field, value in guards.items())) or (not GrantRepository(session).may_access_table(table_uid=version_root, actor=actor, edit=True))):
144
146
  raise HTTPException(status_code=404, detail="Alembic version MetaTable was not found.")
145
147
  rows = []
148
+ eligible = []
146
149
  source_uid = None
147
150
  for uid in requested:
148
151
  table = session.get(MetaTable, uid, with_for_update=True)
@@ -169,12 +172,33 @@ def finalize_managed(
169
172
  rows.append(_row(table, uid, previous=previous, specialization=specialization,
170
173
  error={"code": "provider_mismatch", "detail": "MetaTable belongs to another Alembic provider."}))
171
174
  continue
175
+ eligible.append((uid, table, previous, specialization))
176
+ # Admit the entire batch before opening physical storage. No denied or
177
+ # mismatched binding is passed to the physical inspector.
178
+ snapshots = {}
179
+ if eligible:
180
+ inspection_started = perf_counter()
172
181
  try:
173
- source = sources.get(table.data_source_uid)
174
- snapshot = physical_introspect(
175
- source=source, physical_schema=table.physical_schema,
176
- physical_table_name=table.physical_table_name,
182
+ source = sources.get(source_uid)
183
+ snapshots = physical_introspect(
184
+ source=source,
185
+ physical_tables=[(table.physical_schema, table.physical_table_name)
186
+ for _, table, _, _ in eligible],
177
187
  )
188
+ except DataSourceAdmissionError as exc:
189
+ session.rollback()
190
+ raise HTTPException(status_code=exc.status_code, detail=exc.code) from exc
191
+ except (DataSourceIntegrationError, PhysicalConnectionUnavailable) as exc:
192
+ session.rollback()
193
+ raise HTTPException(status_code=503, detail="DataSource is unavailable.") from exc
194
+ finally:
195
+ logger.info("Managed finalization: physical inspection of %s tables took %.3fs",
196
+ len(eligible), perf_counter() - inspection_started)
197
+ for uid, table, previous, specialization in eligible:
198
+ try:
199
+ snapshot = snapshots[(table.physical_schema, table.physical_table_name)]
200
+ if isinstance(snapshot, PhysicalIntrospectionError):
201
+ raise snapshot
178
202
  except PhysicalIntrospectionError as exc:
179
203
  logger.warning("Physical table introspection failed during finalization", exc_info=True)
180
204
  if exc.code == "physical_table_not_found":
@@ -195,12 +219,6 @@ def finalize_managed(
195
219
  rows.append(_row(table, uid, previous=previous, specialization=specialization, exists=True,
196
220
  error={"code": exc.code, "detail": detail}))
197
221
  continue
198
- except DataSourceAdmissionError as exc:
199
- session.rollback()
200
- raise HTTPException(status_code=exc.status_code, detail=exc.code) from exc
201
- except (DataSourceIntegrationError, PhysicalConnectionUnavailable) as exc:
202
- session.rollback()
203
- raise HTTPException(status_code=503, detail="DataSource is unavailable.") from exc
204
222
  if snapshot.get("owner_reachable") is False:
205
223
  # Grant reconciliation must re-own platform-managed tables (ADR 0007).
206
224
  rows.append(_row(table, uid, previous=previous, specialization=specialization, exists=True,
@@ -276,6 +294,8 @@ def finalize_managed(
276
294
  except (IntegrityError, SQLAlchemyError) as exc:
277
295
  session.rollback()
278
296
  raise HTTPException(status_code=503, detail="MetaTables catalog is unavailable.") from exc
297
+ by_uid = {row["meta_table_uid"]: row for row in rows}
298
+ rows = [by_uid[str(uid)] for uid in requested]
279
299
  finalized_count = sum(row["finalized"] for row in rows)
280
300
  active_count = sum(row["provisioning_status"] == "active" for row in rows)
281
301
  reserved_count = sum(row["provisioning_status"] == "reserved" for row in rows)
@@ -291,4 +311,6 @@ def finalize_managed(
291
311
  "tables": rows,
292
312
  }
293
313
  response.status_code = 200 if result["ok"] else 409
314
+ logger.info("Managed finalization: %s tables, %s failures, total %.3fs",
315
+ len(requested), failed_count, perf_counter() - started)
294
316
  return result