mainsequence-metatable 0.1.27.dev47__tar.gz → 0.1.28.dev49__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 (586) hide show
  1. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-migrations/SKILL.md +10 -6
  2. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
  3. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +10 -0
  4. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.mainsequence/workflows/metatables-api.yaml +12 -1
  5. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/PKG-INFO +2 -2
  6. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/agent/0019-metatables-analyst-agent.md +3 -3
  7. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +1 -1
  8. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +1 -0
  9. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0002-application-administration-and-table-ownership.md +10 -6
  10. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0007-database-enforced-table-access.md +19 -0
  11. mainsequence_metatable-0.1.28.dev49/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +130 -0
  12. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/index.md +1 -0
  13. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/openapi.json +74 -2
  14. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/reference.md +2 -0
  15. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/tables-and-migrations.md +3 -0
  16. mainsequence_metatable-0.1.28.dev49/docs/assets/diagrams/namespace-access.svg +115 -0
  17. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/deploy-application-migrations.md +10 -7
  18. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/permissions-namespaces-labels.md +5 -0
  19. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/configuration.md +7 -1
  20. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/hosted-runtime.md +68 -2
  21. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/security/ownership-and-sharing.md +60 -2
  22. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/mkdocs.yml +1 -0
  23. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/pyproject.toml +2 -2
  24. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/PKG-INFO +2 -2
  25. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/SOURCES.txt +13 -0
  26. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
  27. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/analysis.py +6 -0
  28. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/auth/boundary.py +3 -0
  29. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/auth/local_actor.py +3 -0
  30. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/bootstrap.py +2 -0
  31. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/configuration.py +14 -1
  32. mainsequence_metatable-0.1.28.dev49/src/metatables/api/app/connection_count.py +67 -0
  33. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/main.py +28 -1
  34. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/mcp.py +7 -1
  35. mainsequence_metatable-0.1.28.dev49/src/metatables/api/app/routes/access_map.py +124 -0
  36. mainsequence_metatable-0.1.28.dev49/src/metatables/api/app/routes/caller.py +31 -0
  37. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/runtime_context.py +3 -1
  38. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_sql.py +4 -0
  39. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/runtime.py +3 -0
  40. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/transfer.py +10 -1
  41. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/access.py +159 -14
  42. mainsequence_metatable-0.1.28.dev49/src/metatables/api/backend/backends/adapters/postgresql_connection.py +279 -0
  43. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +3 -0
  44. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/table_cursor.py +1 -3
  45. mainsequence_metatable-0.1.28.dev49/src/metatables/api/backend/backends/connection_pool.py +430 -0
  46. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/hosted.py +6 -1
  47. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/hosted_access.py +26 -26
  48. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/postgresql_access.py +163 -101
  49. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/relational.py +38 -23
  50. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/restricted_sql.py +10 -6
  51. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/sqlite_access.py +3 -1
  52. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/platform_principals.py +23 -5
  53. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/metatables/configuration.yaml +5 -0
  54. mainsequence_metatable-0.1.28.dev49/src/metatables/api/request_timing.py +162 -0
  55. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/__init__.py +49 -11
  56. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/transfer_contract.py +4 -2
  57. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/analyst/test_mcp.py +13 -0
  58. mainsequence_metatable-0.1.28.dev49/tests/auth/test_caller_endpoint.py +37 -0
  59. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_runtime_bootstrap.py +8 -0
  60. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/conftest.py +11 -0
  61. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/conftest.py +3 -0
  62. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_application_owned_migrations.py +45 -0
  63. mainsequence_metatable-0.1.28.dev49/tests/integrations/test_connection_reuse.py +641 -0
  64. mainsequence_metatable-0.1.28.dev49/tests/integrations/test_request_timing.py +294 -0
  65. mainsequence_metatable-0.1.28.dev49/tests/integrations/test_serving_policy.py +23 -0
  66. mainsequence_metatable-0.1.28.dev49/tests/permissions/test_access_map.py +122 -0
  67. mainsequence_metatable-0.1.28.dev49/tests/permissions/test_incremental_security.py +198 -0
  68. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/uv.lock +5 -5
  69. mainsequence_metatable-0.1.27.dev47/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -105
  70. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  71. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  72. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  73. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  74. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  75. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  76. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/discover-tables/SKILL.md +0 -0
  77. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  78. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  79. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  80. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  81. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/LICENSE +0 -0
  82. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/MANIFEST.in +0 -0
  83. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/README.md +0 -0
  84. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/alembic.ini +0 -0
  85. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/api/metatables/main.py +0 -0
  86. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/compose.database-tests.yml +0 -0
  87. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  88. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  89. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  90. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  91. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  92. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  93. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  94. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0009-shared-credential-store.md +0 -0
  95. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  96. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  97. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  98. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  99. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  100. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0016-impact-preflight.md +0 -0
  101. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  102. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  103. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/api/0018-table-search.md +0 -0
  104. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  105. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  106. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/authentication-and-errors.md +0 -0
  107. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/data-sources.md +0 -0
  108. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/overview.md +0 -0
  109. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/api/time-index-and-updates.md +0 -0
  110. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/assets/branding/metatables.svg +0 -0
  111. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/assets/diagrams/local-client-experience.svg +0 -0
  112. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/bounded-transfers.md +0 -0
  113. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/build-an-updater.md +0 -0
  114. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/define-and-migrate-tables.md +0 -0
  115. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/installation-and-connection.md +0 -0
  116. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/local-storage.md +0 -0
  117. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/query-and-mutate.md +0 -0
  118. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/quickstart.md +0 -0
  119. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/read-existing-time-index-tables.md +0 -0
  120. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/register-existing-tables.md +0 -0
  121. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/tutorial.md +0 -0
  122. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/client/upgrade-legacy-app.md +0 -0
  123. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/architecture.md +0 -0
  124. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/data-sources.md +0 -0
  125. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/identity-and-scope.md +0 -0
  126. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/runs-and-execution-graphs.md +0 -0
  127. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  128. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/concepts/time-index-tables-and-updates.md +0 -0
  129. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/contributing/architecture-and-boundaries.md +0 -0
  130. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/contributing/database-backends.md +0 -0
  131. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/contributing/documentation.md +0 -0
  132. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/contributing/releasing.md +0 -0
  133. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/contributing/testing.md +0 -0
  134. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/README.md +0 -0
  135. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/__init__.py +0 -0
  136. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/bounded_reader.py +0 -0
  137. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/data_sources/README.md +0 -0
  138. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/data_sources/mssql.json +0 -0
  139. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/data_sources/mysql.json +0 -0
  140. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/data_sources/postgresql.json +0 -0
  141. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/data_sources/register.py +0 -0
  142. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/external_table.py +0 -0
  143. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/README.md +0 -0
  144. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/__init__.py +0 -0
  145. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/__main__.py +0 -0
  146. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/migrations/__init__.py +0 -0
  147. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/migrations/env.py +0 -0
  148. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/migrations/script.py.mako +0 -0
  149. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  150. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/local_app/tables.py +0 -0
  151. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/query.py +0 -0
  152. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/quickstart.py +0 -0
  153. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/reader.py +0 -0
  154. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/scripts/__init__.py +0 -0
  155. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/scripts/setup_metatables.py +0 -0
  156. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tables.py +0 -0
  157. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/README.md +0 -0
  158. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/__init__.py +0 -0
  159. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/__main__.py +0 -0
  160. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/data/README.md +0 -0
  161. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  162. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/frames.py +0 -0
  163. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/__init__.py +0 -0
  164. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/env.py +0 -0
  165. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/registry.py +0 -0
  166. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  167. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  168. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  169. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  170. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  171. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/operations.py +0 -0
  172. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/tables.py +0 -0
  173. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/tutorial/updaters.py +0 -0
  174. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/examples/updater.py +0 -0
  175. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/index.md +0 -0
  176. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/catalog-migrations.md +0 -0
  177. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/local-runtime.md +0 -0
  178. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/recovery-and-observability.md +0 -0
  179. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/run-history.md +0 -0
  180. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/operations/run-logs.md +0 -0
  181. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/reference/capabilities.md +0 -0
  182. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/reference/cli.md +0 -0
  183. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/reference/python.md +0 -0
  184. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/security/index.md +0 -0
  185. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/docs/security/permissions.md +0 -0
  186. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/__init__.py +0 -0
  187. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/build_reference.py +0 -0
  188. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_boundaries.py +0 -0
  189. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_client_api_coverage.py +0 -0
  190. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_distribution_sources.py +0 -0
  191. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_docs.py +0 -0
  192. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_examples_debug.py +0 -0
  193. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/check_project.py +0 -0
  194. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/dev_release_version.py +0 -0
  195. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/test_databases.py +0 -0
  196. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/scripts/test_postgresql.py +0 -0
  197. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/setup.cfg +0 -0
  198. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  199. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  200. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  201. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/__init__.py +0 -0
  202. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/_admin_source.json +0 -0
  203. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/_build.py +0 -0
  204. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/_skill_bundle.py +0 -0
  205. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/analyst/__init__.py +0 -0
  206. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/__init__.py +0 -0
  207. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/__init__.py +0 -0
  208. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/auth/__init__.py +0 -0
  209. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/credential_admin.py +0 -0
  210. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/development.py +0 -0
  211. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/development_client.py +0 -0
  212. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/error_logging.py +0 -0
  213. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/platform_cache.py +0 -0
  214. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/__init__.py +0 -0
  215. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/column_search.py +0 -0
  216. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/contract_validation.py +0 -0
  217. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/data_sources.py +0 -0
  218. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  219. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/migration_connection.py +0 -0
  220. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/namespaces.py +0 -0
  221. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/run_logs.py +0 -0
  222. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/schema_graph.py +0 -0
  223. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/security.py +0 -0
  224. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_cascade.py +0 -0
  225. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_crud.py +0 -0
  226. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_delete.py +0 -0
  227. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_filter.py +0 -0
  228. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_import.py +0 -0
  229. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_introspection.py +0 -0
  230. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_patch.py +0 -0
  231. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_registration.py +0 -0
  232. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_response.py +0 -0
  233. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_search.py +0 -0
  234. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_search_document.py +0 -0
  235. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  236. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  237. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  238. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  239. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  240. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_batch.py +0 -0
  241. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  242. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_constants.py +0 -0
  243. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_crud.py +0 -0
  244. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_details.py +0 -0
  245. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_graph.py +0 -0
  246. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  247. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_registration.py +0 -0
  248. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_runs.py +0 -0
  249. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/routes/update_statistics.py +0 -0
  250. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/runtime_control.py +0 -0
  251. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/runtime_database.py +0 -0
  252. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/app/source_passwords.py +0 -0
  253. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/__init__.py +0 -0
  254. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/__init__.py +0 -0
  255. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  256. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  257. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  258. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  259. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  260. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  261. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  262. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  263. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  264. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  265. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  266. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  267. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  268. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  269. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  270. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  271. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  272. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  273. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/catalog.py +0 -0
  274. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  275. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  276. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/contracts.py +0 -0
  277. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  278. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/native.py +0 -0
  279. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/operations.py +0 -0
  280. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/pages.py +0 -0
  281. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/registry.py +0 -0
  282. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  283. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/streaming.py +0 -0
  284. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/backends/timescale.py +0 -0
  285. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/contracts/__init__.py +0 -0
  286. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  287. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  288. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  289. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/contracts/values.py +0 -0
  290. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/__init__.py +0 -0
  291. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  292. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  293. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  294. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/label_rules.py +0 -0
  295. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  296. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/domain/update_constants.py +0 -0
  297. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/__init__.py +0 -0
  298. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  299. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  300. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  301. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  302. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  303. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  304. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  305. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  306. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  307. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  308. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/__init__.py +0 -0
  309. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/env.py +0 -0
  310. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  311. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  312. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  313. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  314. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  315. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  316. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  317. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  318. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  319. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  320. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  321. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  322. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  323. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  324. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/__init__.py +0 -0
  325. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  326. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  327. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/create_table.py +0 -0
  328. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  329. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/import_relations.py +0 -0
  330. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  331. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  332. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  333. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/__init__.py +0 -0
  334. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/cascade.py +0 -0
  335. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/catalog.py +0 -0
  336. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/database.py +0 -0
  337. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/grants.py +0 -0
  338. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/impact.py +0 -0
  339. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/labels.py +0 -0
  340. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/locking.py +0 -0
  341. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/models.py +0 -0
  342. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  343. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/projections.py +0 -0
  344. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  345. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  346. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  347. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  348. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  349. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/table_response.py +0 -0
  350. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  351. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  352. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/updates.py +0 -0
  353. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  354. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  355. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/__init__.py +0 -0
  356. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/documents.py +0 -0
  357. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/embeddings.py +0 -0
  358. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/index.py +0 -0
  359. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/ranking.py +0 -0
  360. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/text.py +0 -0
  361. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/backend/search/worker.py +0 -0
  362. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/metatables/__init__.py +0 -0
  363. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/api/metatables/main.py +0 -0
  364. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/__init__.py +0 -0
  365. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/admin_install.py +0 -0
  366. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/app.py +0 -0
  367. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/filters.py +0 -0
  368. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/local.py +0 -0
  369. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/migrations.py +0 -0
  370. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/project.py +0 -0
  371. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/cli/skills.py +0 -0
  372. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/compiled_sql/__init__.py +0 -0
  373. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/compiled_sql/mssql.py +0 -0
  374. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/compiled_sql/v1.py +0 -0
  375. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/dtype_codec.py +0 -0
  376. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/endpoint.py +0 -0
  377. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/README.md +0 -0
  378. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/__init__.py +0 -0
  379. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/bounded_reader.py +0 -0
  380. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/data_sources/README.md +0 -0
  381. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/data_sources/mssql.json +0 -0
  382. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/data_sources/mysql.json +0 -0
  383. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/data_sources/postgresql.json +0 -0
  384. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/data_sources/register.py +0 -0
  385. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/external_table.py +0 -0
  386. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/README.md +0 -0
  387. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/__init__.py +0 -0
  388. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/__main__.py +0 -0
  389. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  390. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/migrations/env.py +0 -0
  391. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  392. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  393. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/local_app/tables.py +0 -0
  394. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/query.py +0 -0
  395. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/quickstart.py +0 -0
  396. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/reader.py +0 -0
  397. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/scripts/__init__.py +0 -0
  398. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  399. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tables.py +0 -0
  400. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/README.md +0 -0
  401. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/__init__.py +0 -0
  402. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/__main__.py +0 -0
  403. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/data/README.md +0 -0
  404. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  405. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/frames.py +0 -0
  406. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  407. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  408. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  409. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  410. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  411. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  412. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  413. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  414. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/operations.py +0 -0
  415. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/tables.py +0 -0
  416. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/tutorial/updaters.py +0 -0
  417. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/examples/updater.py +0 -0
  418. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/future_registry.py +0 -0
  419. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/hashing.py +0 -0
  420. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/instrumentation.py +0 -0
  421. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/local_connection.py +0 -0
  422. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/local_files.py +0 -0
  423. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/local_run_logs.py +0 -0
  424. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/log_contract.py +0 -0
  425. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/alembic.py +0 -0
  426. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/connection.py +0 -0
  427. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/env.py +0 -0
  428. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/provider.py +0 -0
  429. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/registry.py +0 -0
  430. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/runner.py +0 -0
  431. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/scaffold.py +0 -0
  432. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/sqlite.py +0 -0
  433. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/templates/__init__.py +0 -0
  434. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/templates/env.py.mako +0 -0
  435. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/templates/script.py.mako +0 -0
  436. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/migrations/tls.py +0 -0
  437. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/models.py +0 -0
  438. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/pydantic_metadata.py +0 -0
  439. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/run_logging.py +0 -0
  440. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/runtime.py +0 -0
  441. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/runtime_context.py +0 -0
  442. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/runtime_contract.py +0 -0
  443. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/schema_names.py +0 -0
  444. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/sdk_compat.py +0 -0
  445. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/sqlalchemy_contracts.py +0 -0
  446. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/storage_layout_contract.py +0 -0
  447. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/time_index_table_refs.py +0 -0
  448. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/transfer.py +0 -0
  449. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/transport.py +0 -0
  450. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/update_configuration_contract.py +0 -0
  451. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/__init__.py +0 -0
  452. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/configuration.py +0 -0
  453. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/dependencies.py +0 -0
  454. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/managers.py +0 -0
  455. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/namespacing.py +0 -0
  456. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/runner.py +0 -0
  457. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/updaters.py +0 -0
  458. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/updaters/utils.py +0 -0
  459. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/src/metatables/upload.py +0 -0
  460. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/analyst/test_agent_surface.py +0 -0
  461. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/analyst/test_api_search.py +0 -0
  462. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/analyst/test_tools.py +0 -0
  463. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  464. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_data_source_identity.py +0 -0
  465. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_development_client.py +0 -0
  466. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_hosted_agent.py +0 -0
  467. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_hosted_environment_target.py +0 -0
  468. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_local_mode.py +0 -0
  469. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_platform_fact_cache.py +0 -0
  470. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_request_identity.py +0 -0
  471. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_runtime_database.py +0 -0
  472. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_runtime_scaffold.py +0 -0
  473. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_runtime_selection.py +0 -0
  474. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_runtime_storage_binding.py +0 -0
  475. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/auth/test_source_passwords.py +0 -0
  476. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/catalog/test_catalog_foundation.py +0 -0
  477. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/catalog/test_contract_projection.py +0 -0
  478. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/catalog/test_database_config.py +0 -0
  479. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/catalog/test_index_statistics.py +0 -0
  480. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/catalog/test_migration.py +0 -0
  481. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/capabilities.json +0 -0
  482. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/client_signatures.json +0 -0
  483. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/database_operations.json +0 -0
  484. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_bounded_transfer.py +0 -0
  485. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_compiler_runtime_source.py +0 -0
  486. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_relation_batching.py +0 -0
  487. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_relation_import.py +0 -0
  488. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_runtime_contract_compat.py +0 -0
  489. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_storage_layouts.py +0 -0
  490. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/contracts/test_table_contracts.py +0 -0
  491. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/Dockerfile +0 -0
  492. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/Dockerfile.dockerignore +0 -0
  493. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/__init__.py +0 -0
  494. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/provider/__init__.py +0 -0
  495. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/provider/env.py +0 -0
  496. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  497. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_api_contract.py +0 -0
  498. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_application_migration.py +0 -0
  499. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  500. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_catalog_contract.py +0 -0
  501. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_credential_catalog.py +0 -0
  502. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_physical_contract.py +0 -0
  503. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_relation_import.py +0 -0
  504. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  505. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_sql_security.py +0 -0
  506. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_backend/test_update_client.py +0 -0
  507. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_operations/test_physical_operations.py +0 -0
  508. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_operations/test_postgresql_operations.py +0 -0
  509. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  510. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/documentation/test_project_checks.py +0 -0
  511. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_admin_installation.py +0 -0
  512. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_api_endpoint.py +0 -0
  513. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_catalog_outage.py +0 -0
  514. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_api_contract.py +0 -0
  515. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_api_coverage.py +0 -0
  516. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_migration_scaffold.py +0 -0
  517. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_migration_tls.py +0 -0
  518. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_package.py +0 -0
  519. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_signatures.py +0 -0
  520. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_client_value_behaviors.py +0 -0
  521. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_data_source_registry.py +0 -0
  522. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_local_actor_client_api.py +0 -0
  523. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_local_cli_workflow.py +0 -0
  524. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_local_client_selection.py +0 -0
  525. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  526. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_namespaces_admin_http.py +0 -0
  527. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_public_imports.py +0 -0
  528. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_remaining_client_routes.py +0 -0
  529. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_run_graphs.py +0 -0
  530. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_run_logs.py +0 -0
  531. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_runtime_upgrade.py +0 -0
  532. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_sdk_local_startup.py +0 -0
  533. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_sqlite_runtime.py +0 -0
  534. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_delete_client_api.py +0 -0
  535. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_filter_client_api.py +0 -0
  536. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_introspection_client_api.py +0 -0
  537. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_patch_client_api.py +0 -0
  538. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_search_api.py +0 -0
  539. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_search_document_api.py +0 -0
  540. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_search_scale.py +0 -0
  541. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_stats_api.py +0 -0
  542. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_update_pipeline.py +0 -0
  543. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_table_updates_http.py +0 -0
  544. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  545. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  546. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  547. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_update_batch_client_api.py +0 -0
  548. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  549. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  550. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/e2e/test_update_registration_client_api.py +0 -0
  552. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/examples/test_documented_examples.py +0 -0
  553. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/examples/test_postgresql_examples.py +0 -0
  554. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/examples/test_setup_launch.py +0 -0
  555. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/examples/test_tutorial.py +0 -0
  556. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_credential_store.py +0 -0
  557. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_data_source_rules.py +0 -0
  558. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_local_data_sources.py +0 -0
  559. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_local_run_logs.py +0 -0
  560. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_postgresql_connection.py +0 -0
  561. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_postgresql_sql.py +0 -0
  562. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_postgresql_tables.py +0 -0
  563. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  564. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_source_validation.py +0 -0
  565. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/integrations/test_sqlite_operations.py +0 -0
  566. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/labels/test_labels.py +0 -0
  567. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_create_table_operation.py +0 -0
  568. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_create_table_postgres.py +0 -0
  569. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_physical_operation_journal.py +0 -0
  570. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_register_catalog.py +0 -0
  571. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_search_documents.py +0 -0
  572. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/operations/test_timescale_policies.py +0 -0
  573. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/packaging/test_client_skills.py +0 -0
  574. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/packaging/test_dev_release_version.py +0 -0
  575. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/packaging/test_distribution_sources.py +0 -0
  576. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/packaging/test_editable_build.py +0 -0
  577. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/packaging/test_installed_distribution.py +0 -0
  578. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_governed_sql_scope.py +0 -0
  579. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_local_actor_membership.py +0 -0
  580. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_migration_boundary.py +0 -0
  581. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_namespace_grants.py +0 -0
  582. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_security_api.py +0 -0
  583. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_table_body_filter.py +0 -0
  584. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_table_grants.py +0 -0
  585. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_table_queries.py +0 -0
  586. {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev49}/tests/permissions/test_workload_principals.py +0 -0
@@ -54,10 +54,13 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
54
54
  Environment, the application's tables need an owning Team: one platform Team
55
55
  per Environment (for example `ledger-development`), whose members are the
56
56
  migration Job's workload User and the workload User of every resource that
57
- reads or writes the tables. An Organization admin creates the application's
58
- namespace in that Environment and grants the Team Writer on it. Tell the user
59
- these steps; they are made in the platform and in MetaTables Security, not in
60
- the repository.
57
+ reads or writes the tables. An Organization admin creates, in that
58
+ Environment, each namespace the provider registers tables in, and grants the
59
+ Team Writer on it. Recommend one namespace per application, owned by its Team;
60
+ it is not required (see "Namespaces and applications" in
61
+ `docs/security/ownership-and-sharing.md`).
62
+ Tell the user these steps; they are made in the platform and in MetaTables
63
+ Security, not in the repository.
61
64
  4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
62
65
  migration Job that calls `upgrade_application` for each provider, in
63
66
  dependency order, from the candidate image. The Job and every resource that
@@ -83,8 +86,9 @@ Rules:
83
86
  with each Environment and each recreated Job; a new one needs Team membership
84
87
  only. Do not ask for direct table grants to a workload User, and do not run the
85
88
  Job as an Organization admin to get around a refusal.
86
- - Every table a provider registers goes in the Team's namespace. A table
87
- registered in a namespace the caller already writes gets no grant of its own.
89
+ - A table registered in a namespace the caller already writes gets no grant of
90
+ its own; the namespace's Writers own it. The Team needs Writer on every
91
+ namespace the provider uses.
88
92
 
89
93
  ## Source and runtime context
90
94
 
@@ -1,7 +1,7 @@
1
1
  schema=1
2
2
  library_name=ms-tau-sdk
3
3
  namespace=ms_tau_sdk
4
- pinned_version=2.0.8
4
+ pinned_version=2.0.9
5
5
  skills_path=src/ms_tau_sdk/agent_skills
6
6
  skills=tau_a2a_runtime_adapter,tau_local_development,tau_project_customization,tau_repository_integration,tau_security_and_access
7
7
  command=ms-tau skills sync --path .
@@ -81,6 +81,16 @@ in the system prompt because a tool named `read` exists. Extensions must not reg
81
81
  this mode.
82
82
  Excluding coding tools does not sandbox extension Python code.
83
83
 
84
+ ## Application tool time limits
85
+
86
+ A declared application's tool sets how long it may run, in seconds, in its MCP `_meta` under
87
+ `mainsequence.ai/timeout-seconds/v1`; with the MCP Python SDK that is
88
+ `@mcp.tool(meta={"mainsequence.ai/timeout-seconds/v1": 300})` in the application. Set the limit on
89
+ the application's tool, not in the Agent. A tool that declares nothing gets
90
+ `TAU_MCP_TOOL_TIMEOUT_SECONDS` (default `60`); set it like the tool composition settings above, in
91
+ `harness_agent.spec.env_vars`, the process environment, or
92
+ `TauSDKSettings(mcp_tool_timeout_seconds=...)`. No call outlives its turn.
93
+
84
94
  ## Invariants extensions must not replace
85
95
 
86
96
  Extensions may change effective agent capabilities, but they must not replace or bypass:
@@ -9,7 +9,18 @@ resources:
9
9
  automatic_redeployment:
10
10
  enabled: true
11
11
  tag_regex: null
12
- min_scale: 1
12
+ # One Uvicorn process uses one core; configuration.yaml sizes its threads and
13
+ # connections as serving.concurrency (ADR 0022).
14
+ cpu_request: "1"
15
+ memory_request: 2Gi
16
+ min_scale: 2
17
+ # A pod runs serving.concurrency (20) requests at once, so the platform sends it no
18
+ # more and queues the rest while it adds pods. Ten pods keep 3 × 20 × 10 connections
19
+ # within the database budget (ADR 0022). The request timeout bounds deep_search,
20
+ # whose declared limit is 300 s.
21
+ container_concurrency: 20
22
+ max_scale: 10
23
+ timeout_seconds: 300
13
24
  revision_retention_count: 3
14
25
  # The Analyst's read tools, served at /mcp (ADR 0021).
15
26
  mcp_enabled: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.27.dev47
3
+ Version: 0.1.28.dev49
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
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
51
51
  Provides-Extra: docs
52
52
  Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
53
53
  Provides-Extra: agent
54
- Requires-Dist: ms-tau-sdk==2.0.8; extra == "agent"
54
+ Requires-Dist: ms-tau-sdk==2.0.9; extra == "agent"
55
55
  Provides-Extra: mysql
56
56
  Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
57
57
  Provides-Extra: mssql
@@ -39,7 +39,7 @@ Status: Accepted.
39
39
  Implementation status: implemented on `development`; not yet deployed. Tests cover the
40
40
  tools against a stand-in catalog, `deep_search`, `describe_table` and `list_namespaces`
41
41
  through the client against the API, and the extension, card, workflow and vendored skills with
42
- ms-tau-sdk 2.0.8. A local `ms-tau` session and the hosted deployment have not run.
42
+ ms-tau-sdk 2.0.9. A local `ms-tau` session and the hosted deployment have not run.
43
43
 
44
44
  Owner: this repository deploys the agent. The MetaTables API is unchanged; the agent
45
45
  is one more API client.
@@ -70,7 +70,7 @@ refuses anything else.
70
70
 
71
71
  | Part | Rule |
72
72
  | --- | --- |
73
- | Runtime | `ms-tau-sdk` 2.0.8, `openai-codex` / `gpt-5.6-luna`, thinking `medium`. |
73
+ | Runtime | `ms-tau-sdk` 2.0.9, `openai-codex` / `gpt-5.6-luna`, thinking `medium`. |
74
74
  | Identity | The person each turn serves (ADR 0020); the agent's own identity holds no grants. |
75
75
  | Tools | The six tools below, served by the API over MCP when hosted (ADR 0021), and the SDK's skill-scoped `read`. No shell, file writes or Main Sequence MCP. |
76
76
  | Instructions | `.tau/SYSTEM.md` covers MetaTables; vendored `pg-aiguide` skills cover PostgreSQL and TimescaleDB. |
@@ -129,7 +129,7 @@ The agent card's two skills, `discover-tables` and `analyze-with-sql` in
129
129
  The skills of [timescale/pg-aiguide](https://github.com/timescale/pg-aiguide)
130
130
  (Apache-2.0) are vendored at commit `b236d35` with its license and notice, one
131
131
  directory per skill under `.tau/skills/`, because Tau discovers skills one level deep.
132
- The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.8 registers
132
+ The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.9 registers
133
133
  when `TAU_EXCLUDE_BASE_TOOLS=true`. The directive takes precedence over them:
134
134
 
135
135
  - Discover tables through the MetaTables tools, not `pg_catalog`, which also lists
@@ -3,7 +3,7 @@
3
3
  Status: Accepted.
4
4
 
5
5
  Implementation status: implemented on `development`; not deployed. It builds on platform
6
- ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.8 for the
6
+ ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.9 for the
7
7
  Analyst and mainsequence 9.0.19, whose `User.get_requester()` the API reads. Tests cover
8
8
  admission through real signed assertions; a hosted turn has not run.
9
9
 
@@ -34,6 +34,7 @@ The hosted API serves the read tools at `/mcp`, and the hosted Analyst uses them
34
34
  | Authorization | A tool's calls run through the API's own routes, in process, with the caller assertion of the `/mcp` request. The SDK verifies the same caller, or the person it works for, and each route authorizes exactly as over REST, including ADR 0020's read-only rule. |
35
35
  | Analyst | The agent declares `mcp_applications: [{resource: metatables}]` and gets `metatables__list_tools` and `metatables__call_tool`. Its extension registers the tools only in a local `ms-tau` session, where they call the local API as the developer. |
36
36
  | Key | The API's workflow key is `metatables`, because MCP keys become tool prefixes and must match `^[a-z][a-z0-9_]{0,39}$`. |
37
+ | Time limits | Each tool declares how long an Agent should wait in its MCP `_meta` under `mainsequence.ai/timeout-seconds/v1` (ms-tau-sdk 2.0.9): 120 s, the bound of one in-process API call, and 300 s for `deep_search`, which the release's 300 s request timeout bounds. An undeclared tool would get the Agent's default of 60 s. |
37
38
 
38
39
  ## Consequences
39
40
 
@@ -353,9 +353,13 @@ identity of the same application could not re-register its own tables
353
353
  ([#43](https://github.com/mainsequence-projects/MetaTables/issues/43)).
354
354
 
355
355
  - **A Team owns an application's tables.** Before an application's first
356
- migration in an Environment, an Organization admin creates its namespace and
357
- grants Writer on it to a platform Team. The application's migration Job and
358
- every workload User that reads or writes its tables are members of that Team.
356
+ migration in an Environment, an Organization admin grants a platform Team Writer
357
+ on each namespace the application's tables are registered in, creating any that
358
+ don't exist. The application's migration Job and every workload User that reads
359
+ or writes its tables are members of that Team. One namespace per application is
360
+ recommended, not enforced: MetaTables authorizes identities and has no trusted
361
+ fact about which project a caller runs, so any Writer of a namespace may
362
+ register tables in it from any project.
359
363
  Use one Team per Environment, so that one Environment's workloads are not
360
364
  Writers in another. A new workload User needs Team membership only; the tables
361
365
  keep their owner.
@@ -433,9 +437,9 @@ schema baseline/recreation policy remains governed by ADR 0001.
433
437
  resources through counts, search, lineage, or error details.
434
438
  - A Writer can grant/revoke Reader and Writer access only on tables they control.
435
439
  Re-registering an existing table never grants the caller ownership.
436
- - A new member of the Team with Writer on an application's namespace registers and
437
- migrates that application's existing tables; a caller outside it is refused with
438
- a recovery path that reveals nothing it cannot read.
440
+ - A new member of a Team with Writer on a table's namespace registers and migrates
441
+ that existing table; a caller outside it is refused with a recovery path that
442
+ reveals nothing it cannot read.
439
443
  - Team changes and namespace revocation/moves change effective access under the
440
444
  documented freshness rules; independent grants remain visible and effective.
441
445
  - Non-admins cannot manage DataSources, runtime selection, system migrations,
@@ -32,6 +32,25 @@
32
32
  > Reconciliation still records each table's cascade targets, but only so the
33
33
  > [impact pre-flight](0016-impact-preflight.md) can show their effects.
34
34
 
35
+ > Amendment (2026-10-09): On PostgreSQL and TimescaleDB, a catalog change applies
36
+ > only what it changed. Reconciliation used to rebuild every role, re-inspect every
37
+ > table and re-secure every routine on each change, all under the catalog lock, so
38
+ > one registration could hold the lock for minutes and stop every other request.
39
+ > Now a change:
40
+ >
41
+ > - re-inspects the policies of the tables it changed, plus the tables whose
42
+ > recorded cascade targets they affect;
43
+ > - rebuilds only roles that are new or whose definition changed, and grants or
44
+ > revokes only the memberships and privileges that differ from the applied
45
+ > manifest;
46
+ > - re-secures routines only when the owned schemas, routines or `PUBLIC` grants
47
+ > changed since the last sweep.
48
+ >
49
+ > The full sweep still runs when the runtime DataSource changes, at initialization
50
+ > (the migration Job of every deployment) and from the admin repair action. Those
51
+ > are when grants changed outside MetaTables are repaired, not on every catalog
52
+ > change. MySQL and SQL Server keep the full sweep on every change.
53
+
35
54
 
36
55
  Date: 2026-09-29
37
56
 
@@ -0,0 +1,130 @@
1
+ # ADR 0022: Concurrent requests per pod and reused database connections
2
+
3
+ Status: Proposed.
4
+
5
+ Implementation status: implemented on development; not deployed. Unit tests pass;
6
+ the container suite and the load test against the development deployment are pending.
7
+
8
+ Owner: this repository.
9
+
10
+ Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (each User
11
+ queries as their own login roles), [ADR 0012](0012-bounded-data-transfer-and-safe-retries.md)
12
+ (deadlines, cancellation and the shared SQL security guard),
13
+ [ADR 0001](0001-unified-api-storage-and-local-sqlite.md) (`configuration.yaml`),
14
+ [ADR 0008](0008-mysql-mssql-table-workflows.md) (MySQL and SQL Server) and
15
+ [ADR 0021](../agent/0021-api-serves-the-analyst-tools-over-mcp.md) (MCP tools call the
16
+ API's own routes).
17
+
18
+ ## Context
19
+
20
+ The hosted API must serve tens to hundreds of clients at the same time. Main Sequence
21
+ runs it as identical pods, each running one Uvicorn process, and adds pods under load
22
+ up to a maximum. A Python process runs Python code on one core at a time, so a pod's
23
+ capacity comes from threads that wait on the database, and the API's capacity from the
24
+ number of pods.
25
+
26
+ Today:
27
+
28
+ - Nearly every route is a plain `def`, so each request runs on one of the process's 40
29
+ worker threads, AnyIO's fixed default.
30
+ - The catalog engine uses SQLAlchemy's default pool: 5 connections plus 10 overflow,
31
+ with a 30 s wait.
32
+ - Each SQL request opens a new connection as the caller's login role and closes it
33
+ afterwards: a TCP and TLS handshake, a password check and a new database backend for
34
+ every request. MySQL and SQL Server build a whole engine per request, and physical
35
+ data-source operations build and dispose of one per call.
36
+ - A SQL request holds two connections at once: its catalog transaction keeps the shared
37
+ SQL security guard (ADR 0012) while the login-role query runs.
38
+ - ADR 0012's admission runs at most 8 data requests per process (`run-query`, `read`,
39
+ inserts and the other data actions) and answers 429 after a 1 s wait for a slot,
40
+ whatever the thread count.
41
+ - Nothing relates the connections all pods may open to what the database allows.
42
+
43
+ A burst therefore opens connections as fast as requests arrive, spends latency and
44
+ database CPU on connecting, and can exhaust the database's connection limit.
45
+
46
+ ## Decision
47
+
48
+ One number, **T**, sizes a pod: the requests it runs at once and the connections it may
49
+ hold.
50
+
51
+ | Part | Rule |
52
+ | --- | --- |
53
+ | Threads | Route handlers run on T threads per process. |
54
+ | Catalog | The catalog pool holds at most T connections, with no overflow, and closes each at the maximum age. |
55
+ | Data requests | ADR 0012's admission runs T data requests at once per process, not 8, and a request waits for a slot within its deadline instead of 1 s. `/runtime-context/` publishes the effective T as `transfer_limits.concurrent_requests`. |
56
+ | Login-role connections | A pod holds at most T login-role connections per database server, idle or in use. A connection is reused only by the login role that opened it, never by another role and never through `SET ROLE` (ADR 0007). |
57
+ | Data-source operations | Physical data-source operations reuse connections per (DataSource, login), through one kept engine on MySQL and SQL Server, instead of connecting per call; they count against the same cap. |
58
+ | Budget | Maximum pods × 3T ≤ the database's `max_connections`, minus a reserve for migrations, the Admin and other clients: per pod, T catalog connections, T capped connections, and about T per-call connections (see below). Each server the API connects to has its own budget. |
59
+ | Setting | `configuration.yaml` declares T as `serving.concurrency`. Local runtimes use the default. |
60
+
61
+ Rules for reused connections:
62
+
63
+ - Each use sets its own statement timeout, read-only or write mode, and search path.
64
+ Nothing carries over from a previous use: on PostgreSQL, `DISCARD ALL` returns the
65
+ session to its defaults before the connection is reused.
66
+ - On MySQL and SQL Server, a login-role connection closes after each use. Neither
67
+ driver can reset a session, and SQL Server may keep a session's role memberships.
68
+ These connections still count against the cap; the DataSource's own login is reused.
69
+ - A connection that errored, was cancelled, or stopped before its result was read is
70
+ closed, not reused. ADR 0012 already forbids draining a read to return a connection.
71
+ - Idle connections close after a timeout, and every connection closes at a maximum age.
72
+ The maximum age bounds how long a connection outlives a password change or a disabled
73
+ login. Grant changes apply at once, because the database checks privileges on every
74
+ statement.
75
+ - When the cap is full, the least recently used idle connection closes to make room. If
76
+ none is idle, the request waits within its deadline (ADR 0012) and then fails with 503,
77
+ `database_connections_busy` and `Retry-After: 1`. No statement ran, so a retry is safe.
78
+ - MCP tool calls keep their own threads. The route calls a tool makes count against T
79
+ like any request. Sharing T would let tool calls hold every thread while their own
80
+ route calls wait.
81
+ - Connection probes that bring their own host or timeout (DataSource validation and
82
+ maintenance), relation discovery and reads, and MySQL's administrative connections
83
+ (grant changes and `KILL QUERY`) connect per call, outside the cap. A pod's T threads
84
+ bound them to about T, the third T in the budget. A relation read holds its reader
85
+ while it runs the caller's login-role query; counting both against one cap could
86
+ leave every thread waiting for a second connection.
87
+
88
+ ### Suggested values
89
+
90
+ These are starting values, not measurements. A load test against the development
91
+ deployment replaces them.
92
+
93
+ | Setting | Suggested | Why |
94
+ | --- | --- | --- |
95
+ | Pod CPU | 1 vCPU | One process uses one core. |
96
+ | Pod memory | 2 GiB | About 160 MiB at idle, plus results in flight. |
97
+ | Minimum pods | 2 | A burst lands on two pods while more start, and one survives a restart. |
98
+ | T | 20 | At the current maximum of 10 pods: 3 × 20 × 10 = 600 connections. |
99
+ | Idle timeout | 60 s | Long enough to reuse a role's connection across a session of requests. |
100
+ | Maximum age | 30 min | Bounds a connection's life after a credential change. |
101
+
102
+ The workflow declares CPU, memory and minimum pods for the `metatables` resource;
103
+ `configuration.yaml` declares T. T is raised only when the budget allows it.
104
+
105
+ The workflow also declares the platform's per-replica request policy
106
+ (platform issues 921 and 922): `container_concurrency` equal to T, so the platform sends a pod
107
+ no more requests than it has threads and queues the rest while it adds pods, and
108
+ `max_scale` equal to the budget's maximum pods (10). Changing T changes both files.
109
+
110
+ ## Consequences
111
+
112
+ - On PostgreSQL most requests reuse a connection; a role's first request on a pod still
113
+ connects. On MySQL and SQL Server, caller SQL and caller table operations still connect
114
+ per request, though their engines are kept.
115
+ - Connections are bounded by configuration, not by traffic.
116
+ - A pod runs at most T requests at once; further requests wait for a thread. Capacity
117
+ grows by adding pods.
118
+ - Many Users share one cap per pod, so a pod serving many Users reconnects more often
119
+ than one serving few.
120
+ - A reused connection stays logged in as its role until its idle timeout or maximum age.
121
+ - SQLite has no login roles; only the thread count applies locally.
122
+ - Changing T is a configuration change and a deployment.
123
+
124
+ Verification: unit tests (`tests/integrations/test_connection_reuse.py`) cover role
125
+ isolation, per-use settings and the session reset, closing broken connections, the cap
126
+ and eviction, waiting within the deadline, the idle timeout and maximum age, T applied
127
+ to the route threads, the catalog pool and data-request admission, and the kept engines. The hosted engines,
128
+ including the MySQL and SQL Server behavior above, are verified through the container
129
+ suite on request, and a load test against the development deployment sets the values
130
+ above.
@@ -39,6 +39,7 @@ decisions belong in the SDK repository and are linked as dependencies.
39
39
  | [0016: Impact pre-flight for cascades and deletes](api/0016-impact-preflight.md) | Accepted; implemented; container engine verification pending | `get_impact` returns what a row delete, key update or table drop reaches, every blocker and whether the caller may write each table, from the planner the confirmed delete runs; cascade effects never block. Projects render it in their own UIs. |
40
40
  | [0017: Hosted caller identity through the SDK request identity](api/0017-hosted-request-identity.md) | Accepted; implemented for 0.1.21; hosted rollout verification pending | The hosted API installs the SDK request identity that the platform launcher requires; the SDK verifies each caller assertion once and admission reads `User.get_logged_user()`, including the caller's signed Teams and admin flag. Local keeps its loopback token admission. |
41
41
  | [0018: Table search by meaning and columns](api/0018-table-search.md) | Accepted; implemented; container engine verification pending | One route ranks visible tables by BM25 keywords and a local English embedding model over a per-table document that includes columns, merges the rankings and returns `matched_columns`; the index refreshes on every metadata write. |
42
+ | [0022: Concurrent requests per pod and reused database connections](api/0022-concurrent-requests-and-connection-reuse.md) | Proposed; implemented on development; not deployed; container and load verification pending | One number per pod sizes its threads, data-request admission, catalog pool and login-role connections; connections are reused only by the role that opened them, and maximum pods × 3T stays within the database's connection limit. |
42
43
 
43
44
  ## Agents
44
45
 
@@ -4439,7 +4439,7 @@
4439
4439
  "type": "integer"
4440
4440
  },
4441
4441
  "concurrent_requests": {
4442
- "default": 8,
4442
+ "default": 20,
4443
4443
  "title": "Concurrent Requests",
4444
4444
  "type": "integer"
4445
4445
  },
@@ -4499,7 +4499,7 @@
4499
4499
  "type": "integer"
4500
4500
  },
4501
4501
  "queue_seconds": {
4502
- "default": 1,
4502
+ "default": 60,
4503
4503
  "title": "Queue Seconds",
4504
4504
  "type": "integer"
4505
4505
  },
@@ -4918,6 +4918,26 @@
4918
4918
  "summary": "Hello"
4919
4919
  }
4920
4920
  },
4921
+ "/caller/": {
4922
+ "get": {
4923
+ "description": "Who this request runs as: the User, Teams and admin flag the API admitted, named\nthrough the platform directory as that User sees it.\n\nHosted, the identity comes from the platform-signed caller assertion (ADR 0017);\nLocal and developer runtimes admit the developer's own SDK session.",
4924
+ "operationId": "admitted_caller_caller__get",
4925
+ "responses": {
4926
+ "200": {
4927
+ "content": {
4928
+ "application/json": {
4929
+ "schema": {}
4930
+ }
4931
+ },
4932
+ "description": "Successful Response"
4933
+ }
4934
+ },
4935
+ "summary": "Admitted Caller",
4936
+ "tags": [
4937
+ "Runtime"
4938
+ ]
4939
+ }
4940
+ },
4921
4941
  "/data-sources/": {
4922
4942
  "get": {
4923
4943
  "operationId": "list_sources_data_sources__get",
@@ -7124,6 +7144,58 @@
7124
7144
  ]
7125
7145
  }
7126
7146
  },
7147
+ "/namespaces/{namespace_uid}/access-map/": {
7148
+ "get": {
7149
+ "description": "Principals, Teams, grants and tables of one namespace, as the caller may see them.",
7150
+ "operationId": "namespace_access_map_namespaces__namespace_uid__access_map__get",
7151
+ "parameters": [
7152
+ {
7153
+ "in": "path",
7154
+ "name": "namespace_uid",
7155
+ "required": true,
7156
+ "schema": {
7157
+ "format": "uuid",
7158
+ "title": "Namespace Uid",
7159
+ "type": "string"
7160
+ }
7161
+ },
7162
+ {
7163
+ "in": "query",
7164
+ "name": "relationships",
7165
+ "required": false,
7166
+ "schema": {
7167
+ "default": false,
7168
+ "title": "Relationships",
7169
+ "type": "boolean"
7170
+ }
7171
+ }
7172
+ ],
7173
+ "responses": {
7174
+ "200": {
7175
+ "content": {
7176
+ "application/json": {
7177
+ "schema": {}
7178
+ }
7179
+ },
7180
+ "description": "Successful Response"
7181
+ },
7182
+ "422": {
7183
+ "content": {
7184
+ "application/json": {
7185
+ "schema": {
7186
+ "$ref": "#/components/schemas/HTTPValidationError"
7187
+ }
7188
+ }
7189
+ },
7190
+ "description": "Validation Error"
7191
+ }
7192
+ },
7193
+ "summary": "Namespace Access Map",
7194
+ "tags": [
7195
+ "Namespaces"
7196
+ ]
7197
+ }
7198
+ },
7127
7199
  "/namespaces/{namespace_uid}/tables/": {
7128
7200
  "get": {
7129
7201
  "operationId": "namespace_tables_namespaces__namespace_uid__tables__get",
@@ -7,6 +7,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
7
7
  | Method | Path | Operation | Success responses |
8
8
  | --- | --- | --- | --- |
9
9
  | GET | `/` | Hello | 200 |
10
+ | GET | `/caller/` | Admitted Caller | 200 |
10
11
  | GET | `/data-sources/` | List Sources | 200 |
11
12
  | POST | `/data-sources/` | Create Source | 201 |
12
13
  | POST | `/data-sources/test-connection/` | Test Source Connection | 200 |
@@ -51,6 +52,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
51
52
  | GET | `/namespaces/` | List Namespaces | 200 |
52
53
  | GET | `/namespaces/{namespace_uid}/` | Retrieve Namespace | 200 |
53
54
  | PATCH | `/namespaces/{namespace_uid}/` | Patch Namespace | 200 |
55
+ | GET | `/namespaces/{namespace_uid}/access-map/` | Namespace Access Map | 200 |
54
56
  | GET | `/namespaces/{namespace_uid}/tables/` | Namespace Tables | 200 |
55
57
  | GET | `/namespaces/{uid}/permissions` | Namespace Permissions | 200 |
56
58
  | PUT | `/namespaces/{uid}/permissions` | Set Namespace Permissions | 200 |
@@ -183,6 +183,9 @@ but does not expire the configured database login.
183
183
  After execution, the client closes its database connection and calls
184
184
  `finalize-managed` with actual revision IDs (or explicit null at base). Finalization
185
185
  reconciles physical contracts, dropped provider tables and SQL permission projections.
186
+ The client finalizes at most 10 tables per request, the Alembic version table first,
187
+ so each request holds the catalog lock briefly and finishes within the hosted request
188
+ limit. If a run stops partway, rerunning it finalizes the tables still reserved.
186
189
  The former `/application-migrations/upgrade/` endpoint and provider allowlist are
187
190
  removed. MetaTables system migrations run in the hosted deployment's migration Job,
188
191
  or through Settings in Local mode. See
@@ -0,0 +1,115 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1240" height="740" viewBox="0 0 1240 740" role="img" aria-labelledby="ns-title ns-desc">
2
+ <title id="ns-title">Namespaces are access groups, not application boundaries</title>
3
+ <desc id="ns-desc">In one Environment, the workload Users of the prices application are members of the Team prices-development, which is Writer on namespace prices. The workload Users of the trading application are members of trading-development, which is Writer on namespace trading and Reader on namespace prices. Registering a table in a namespace requires Writer on it or admin. Reading or writing a table requires a grant on the table or its namespace, checked by the API and by the database. Which project's tables go in which namespace is not checked.</desc>
4
+ <style>
5
+ .sans { font-family: -apple-system, "Segoe UI", Helvetica, Arial, sans-serif; }
6
+ .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
7
+ .title { font-size: 22px; font-weight: 700; fill: #0f172a; }
8
+ .sub { font-size: 14px; fill: #475569; }
9
+ .col { font-size: 11.5px; font-weight: 700; fill: #64748b; letter-spacing: 0.08em; }
10
+ .name { font-size: 14px; font-weight: 700; fill: #0f172a; }
11
+ .small { font-size: 12px; fill: #64748b; }
12
+ .table { font-size: 12.5px; fill: #1e293b; }
13
+ .note { font-size: 13px; fill: #334155; }
14
+ .head { font-size: 15px; font-weight: 700; fill: #0f172a; }
15
+ .tag { font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; }
16
+ .label { font-size: 12.5px; font-weight: 700; }
17
+ .box { fill: #ffffff; stroke: #cbd5e1; stroke-width: 1.5; }
18
+ .team { fill: #f1f5f9; stroke: #64748b; stroke-width: 1.5; }
19
+ .ns { fill: #ffffff; stroke: #94a3b8; stroke-width: 1.5; }
20
+ .pill { fill: #f8fafc; stroke: #e2e8f0; stroke-width: 1; }
21
+ .member { fill: none; stroke: #64748b; stroke-width: 1.6; marker-end: url(#ns-arrow-member); }
22
+ .writer { fill: none; stroke: #c2410c; stroke-width: 2.4; marker-end: url(#ns-arrow-writer); }
23
+ .reader { fill: none; stroke: #1d4ed8; stroke-width: 2.4; stroke-dasharray: 7 5; marker-end: url(#ns-arrow-reader); }
24
+ </style>
25
+ <defs>
26
+ <marker id="ns-arrow-member" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/></marker>
27
+ <marker id="ns-arrow-writer" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#c2410c"/></marker>
28
+ <marker id="ns-arrow-reader" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#1d4ed8"/></marker>
29
+ </defs>
30
+ <rect width="1240" height="740" rx="16" fill="#f8fafc"/>
31
+ <text x="40" y="48" class="sans title">Namespaces are access groups, not application boundaries</text>
32
+ <text x="40" y="74" class="sans sub">One Environment · Teams own namespaces · every check is on the caller's identity, never on its project</text>
33
+
34
+ <text x="40" y="114" class="sans col">WORKLOAD USERS</text>
35
+ <text x="380" y="114" class="sans col">PLATFORM TEAMS</text>
36
+ <text x="760" y="114" class="sans col">METATABLES NAMESPACES AND TABLES</text>
37
+
38
+ <!-- prices application -->
39
+ <rect x="40" y="135" width="260" height="44" rx="8" class="box"/>
40
+ <text x="56" y="162" class="sans name">prices migration Job</text>
41
+ <rect x="40" y="195" width="260" height="44" rx="8" class="box"/>
42
+ <text x="56" y="222" class="sans name">prices API</text>
43
+ <path d="M 300 157 L 378 179" class="member"/>
44
+ <path d="M 300 217 L 378 196" class="member"/>
45
+ <rect x="380" y="159" width="230" height="56" rx="10" class="team"/>
46
+ <text x="396" y="184" class="mono name">prices-development</text>
47
+ <text x="396" y="203" class="sans small">Team</text>
48
+
49
+ <path d="M 610 187 L 758 187" class="writer"/>
50
+ <text x="684" y="178" class="sans label" fill="#c2410c" text-anchor="middle">Writer</text>
51
+
52
+ <rect x="760" y="128" width="440" height="128" rx="12" class="ns"/>
53
+ <text x="780" y="153" class="sans small">namespace</text>
54
+ <text x="852" y="153" class="mono name">prices</text>
55
+ <rect x="780" y="166" width="400" height="24" rx="6" class="pill"/>
56
+ <text x="792" y="183" class="mono table">prices.alembic_version</text>
57
+ <rect x="780" y="196" width="400" height="24" rx="6" class="pill"/>
58
+ <text x="792" y="213" class="mono table">prices.daily_close</text>
59
+ <rect x="780" y="226" width="400" height="24" rx="6" class="pill"/>
60
+ <text x="792" y="243" class="mono table">prices.intraday</text>
61
+
62
+ <!-- trading application -->
63
+ <rect x="40" y="365" width="260" height="44" rx="8" class="box"/>
64
+ <text x="56" y="392" class="sans name">trading migration Job</text>
65
+ <rect x="40" y="425" width="260" height="44" rx="8" class="box"/>
66
+ <text x="56" y="452" class="sans name">trading API</text>
67
+ <path d="M 300 387 L 378 409" class="member"/>
68
+ <path d="M 300 447 L 378 426" class="member"/>
69
+ <rect x="380" y="389" width="230" height="56" rx="10" class="team"/>
70
+ <text x="396" y="414" class="mono name">trading-development</text>
71
+ <text x="396" y="433" class="sans small">Team</text>
72
+
73
+ <path d="M 610 425 L 758 425" class="writer"/>
74
+ <text x="684" y="448" class="sans label" fill="#c2410c" text-anchor="middle">Writer</text>
75
+
76
+ <path d="M 610 403 C 680 403, 690 262, 758 248" class="reader"/>
77
+ <text x="702" y="318" class="sans label" fill="#1d4ed8">Reader</text>
78
+ <text x="702" y="334" class="sans small">every current and</text>
79
+ <text x="702" y="349" class="sans small">future prices table</text>
80
+
81
+ <rect x="760" y="380" width="440" height="98" rx="12" class="ns"/>
82
+ <text x="780" y="405" class="sans small">namespace</text>
83
+ <text x="852" y="405" class="mono name">trading</text>
84
+ <rect x="780" y="418" width="400" height="24" rx="6" class="pill"/>
85
+ <text x="792" y="435" class="mono table">trading.alembic_version</text>
86
+ <rect x="780" y="448" width="400" height="24" rx="6" class="pill"/>
87
+ <text x="792" y="465" class="mono table">trading.orders</text>
88
+
89
+ <text x="40" y="510" class="sans small">A new workload User, after a new Environment or a recreated Job, only needs Team membership. The namespaces and their tables keep their owner.</text>
90
+
91
+ <!-- checks -->
92
+ <rect x="40" y="540" width="373" height="170" rx="12" class="box"/>
93
+ <text x="58" y="570" class="sans tag" fill="#15803d">ENFORCED</text>
94
+ <text x="58" y="596" class="sans head">Registering a table in a namespace</text>
95
+ <text x="58" y="622" class="sans note">The caller must be a Writer of the namespace,</text>
96
+ <text x="58" y="642" class="sans note">directly or through a Team, or an admin.</text>
97
+ <text x="58" y="662" class="sans note">Otherwise: 403 namespace_not_writable.</text>
98
+ <text x="58" y="682" class="sans note">A Writer's new table gets no grant of its own.</text>
99
+
100
+ <rect x="433" y="540" width="373" height="170" rx="12" class="box"/>
101
+ <text x="451" y="570" class="sans tag" fill="#15803d">ENFORCED</text>
102
+ <text x="451" y="596" class="sans head">Reading or writing a table</text>
103
+ <text x="451" y="622" class="sans note">A grant on the table or on its namespace,</text>
104
+ <text x="451" y="642" class="sans note">to the caller or one of its Teams. Checked</text>
105
+ <text x="451" y="662" class="sans note">by the API and by the caller's own role in</text>
106
+ <text x="451" y="682" class="sans note">the database.</text>
107
+
108
+ <rect x="826" y="540" width="374" height="170" rx="12" class="box"/>
109
+ <text x="844" y="570" class="sans tag" fill="#b91c1c">NOT ENFORCED</text>
110
+ <text x="844" y="596" class="sans head">Which project uses which namespace</text>
111
+ <text x="844" y="622" class="sans note">Any Writer of prices can register tables there</text>
112
+ <text x="844" y="642" class="sans note">from any project. A project may use several</text>
113
+ <text x="844" y="662" class="sans note">namespaces or share one. One namespace per</text>
114
+ <text x="844" y="682" class="sans note">application is a recommendation.</text>
115
+ </svg>
@@ -93,11 +93,14 @@ application's tables belong to a platform Team instead:
93
93
  2. **Add the workload Users.** Add the migration Job's workload User, and the
94
94
  workload User of every resource that reads or writes the tables (FastAPI
95
95
  release, Agent, other Jobs). Each resource's `workload_user_uid` names it.
96
- 3. **Grant the Team the namespace.** An Organization admin creates the
97
- application's namespace in that Environment's MetaTables, under
98
- **Security**, or with `POST /security/namespaces/`, and grants the Team Writer
99
- on it (`PUT /namespaces/{uid}/permissions`). Every table registered in the
100
- namespace inherits the grant.
96
+ 3. **Grant the Team its namespaces.** For each namespace the tables are
97
+ registered in, an Organization admin creates it in that Environment's
98
+ MetaTables if it doesn't exist yet, under **Security** or with
99
+ `POST /security/namespaces/`, and grants the Team Writer on it
100
+ (`PUT /namespaces/{uid}/permissions`). Every table registered in the namespace
101
+ inherits the grant. One namespace per application is the recommended layout,
102
+ not a rule; see
103
+ [Namespaces and applications](../security/ownership-and-sharing.md#namespaces-and-applications).
101
104
 
102
105
  The Job also needs platform `view` on the Environment's `metatables` release and
103
106
  its branch to discover the API; declare it on the Job:
@@ -142,8 +145,8 @@ writes gets no grant of its own, so the Team stays its only owner.
142
145
  - The Job finds the Environment's MetaTables API the same way any client does
143
146
  ([installation and connection](installation-and-connection.md)). That API must
144
147
  be deployed with its system migrations applied; otherwise the Job fails. Its
145
- workload User needs Writer on the application's namespace through the Team
146
- above.
148
+ workload User needs Writer, through the Team above, on every namespace the
149
+ provider registers tables in.
147
150
 
148
151
  ## Keep each release compatible with the previous one
149
152