mainsequence-metatable 0.1.8.dev14__tar.gz → 0.1.8.dev16__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 (523) hide show
  1. {mainsequence_metatable-0.1.8.dev14/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev16}/PKG-INFO +1 -1
  2. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +59 -0
  3. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/index.md +1 -1
  4. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/data-sources.md +23 -4
  5. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/openapi.json +0 -52
  6. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/reference.md +0 -1
  7. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/catalog-migrations.md +1 -2
  8. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/hosted-runtime.md +5 -4
  9. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/local-runtime.md +12 -4
  10. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/pyproject.toml +1 -1
  11. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  12. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/bootstrap.py +27 -36
  13. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/main.py +0 -3
  14. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/data_sources.py +10 -4
  15. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/runtime_context.py +0 -1
  16. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime.py +1 -13
  17. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/access.py +4 -0
  18. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/postgresql_access.py +46 -0
  19. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_contract.py +0 -1
  20. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_data_source_identity.py +86 -0
  21. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_hosted_environment_target.py +1 -1
  22. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_selection.py +57 -48
  23. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_data_source_registry.py +1 -2
  24. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_transition.py +13 -17
  25. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  26. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  27. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  28. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  29. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  30. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/.mainsequence/workflows/metatables-api.yaml +0 -0
  31. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/LICENSE +0 -0
  32. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/MANIFEST.in +0 -0
  33. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/README.md +0 -0
  34. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/alembic.ini +0 -0
  35. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/api/metatables/main.py +0 -0
  36. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/compose.database-tests.yml +0 -0
  37. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  38. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  39. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  40. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  41. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  42. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  43. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  44. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  45. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0009-shared-credential-store.md +0 -0
  46. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  47. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  48. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  49. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  50. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  51. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  52. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/authentication-and-errors.md +0 -0
  53. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/overview.md +0 -0
  54. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/tables-and-migrations.md +0 -0
  55. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/api/time-index-and-updates.md +0 -0
  56. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/assets/branding/metatables.svg +0 -0
  57. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/assets/diagrams/local-client-experience.svg +0 -0
  58. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/bounded-transfers.md +0 -0
  59. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/build-an-updater.md +0 -0
  60. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/define-and-migrate-tables.md +0 -0
  61. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/installation-and-connection.md +0 -0
  62. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/local-storage.md +0 -0
  63. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/query-and-mutate.md +0 -0
  64. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/quickstart.md +0 -0
  65. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/read-existing-time-index-tables.md +0 -0
  66. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/register-existing-tables.md +0 -0
  67. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/tutorial.md +0 -0
  68. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/client/upgrade-legacy-app.md +0 -0
  69. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/architecture.md +0 -0
  70. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/data-sources.md +0 -0
  71. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/identity-and-scope.md +0 -0
  72. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/permissions-namespaces-labels.md +0 -0
  73. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/runs-and-execution-graphs.md +0 -0
  74. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  75. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/concepts/time-index-tables-and-updates.md +0 -0
  76. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/architecture-and-boundaries.md +0 -0
  77. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/database-backends.md +0 -0
  78. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/documentation.md +0 -0
  79. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/releasing.md +0 -0
  80. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/contributing/testing.md +0 -0
  81. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/README.md +0 -0
  82. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/__init__.py +0 -0
  83. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/bounded_reader.py +0 -0
  84. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/README.md +0 -0
  85. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mssql.json +0 -0
  86. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/mysql.json +0 -0
  87. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/postgresql.json +0 -0
  88. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/data_sources/register.py +0 -0
  89. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/external_table.py +0 -0
  90. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/README.md +0 -0
  91. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__init__.py +0 -0
  92. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/__main__.py +0 -0
  93. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/__init__.py +0 -0
  94. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/env.py +0 -0
  95. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/script.py.mako +0 -0
  96. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  97. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/local_app/tables.py +0 -0
  98. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/query.py +0 -0
  99. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/quickstart.py +0 -0
  100. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/reader.py +0 -0
  101. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/__init__.py +0 -0
  102. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/scripts/setup_metatables.py +0 -0
  103. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tables.py +0 -0
  104. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/README.md +0 -0
  105. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__init__.py +0 -0
  106. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/__main__.py +0 -0
  107. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/data/README.md +0 -0
  108. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  109. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/frames.py +0 -0
  110. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/__init__.py +0 -0
  111. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/env.py +0 -0
  112. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/registry.py +0 -0
  113. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  114. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  115. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  116. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  117. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  118. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/operations.py +0 -0
  119. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/tables.py +0 -0
  120. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/tutorial/updaters.py +0 -0
  121. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/examples/updater.py +0 -0
  122. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/index.md +0 -0
  123. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/configuration.md +0 -0
  124. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/recovery-and-observability.md +0 -0
  125. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-history.md +0 -0
  126. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/operations/run-logs.md +0 -0
  127. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/capabilities.md +0 -0
  128. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/cli.md +0 -0
  129. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/reference/python.md +0 -0
  130. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/index.md +0 -0
  131. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/ownership-and-sharing.md +0 -0
  132. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/docs/security/permissions.md +0 -0
  133. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/mkdocs.yml +0 -0
  134. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/__init__.py +0 -0
  135. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/build_reference.py +0 -0
  136. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_boundaries.py +0 -0
  137. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_client_api_coverage.py +0 -0
  138. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_distribution_sources.py +0 -0
  139. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_docs.py +0 -0
  140. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_examples_debug.py +0 -0
  141. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/check_project.py +0 -0
  142. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/dev_release_version.py +0 -0
  143. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/test_databases.py +0 -0
  144. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/scripts/test_postgresql.py +0 -0
  145. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/setup.cfg +0 -0
  146. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/SOURCES.txt +0 -0
  147. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  148. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  149. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  150. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  151. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/__init__.py +0 -0
  152. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_admin_source.json +0 -0
  153. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_build.py +0 -0
  154. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/_skill_bundle.py +0 -0
  155. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/__init__.py +0 -0
  156. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/__init__.py +0 -0
  157. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/__init__.py +0 -0
  158. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/boundary.py +0 -0
  159. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  160. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/auth/local_actor.py +0 -0
  161. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/configuration.py +0 -0
  162. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/credential_admin.py +0 -0
  163. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development.py +0 -0
  164. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/development_client.py +0 -0
  165. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/platform_cache.py +0 -0
  166. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/__init__.py +0 -0
  167. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/column_search.py +0 -0
  168. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/contract_validation.py +0 -0
  169. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  170. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/migration_connection.py +0 -0
  171. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/namespaces.py +0 -0
  172. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/run_logs.py +0 -0
  173. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/schema_graph.py +0 -0
  174. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/security.py +0 -0
  175. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_cascade.py +0 -0
  176. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_crud.py +0 -0
  177. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_delete.py +0 -0
  178. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_filter.py +0 -0
  179. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_import.py +0 -0
  180. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_introspection.py +0 -0
  181. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_patch.py +0 -0
  182. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_registration.py +0 -0
  183. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_response.py +0 -0
  184. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_search_document.py +0 -0
  185. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_sql.py +0 -0
  186. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  187. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  188. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  189. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  190. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_batch.py +0 -0
  191. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  192. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_constants.py +0 -0
  193. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_crud.py +0 -0
  194. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_details.py +0 -0
  195. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_graph.py +0 -0
  196. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  197. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_registration.py +0 -0
  198. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_runs.py +0 -0
  199. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/routes/update_statistics.py +0 -0
  200. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/runtime_control.py +0 -0
  201. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_passwords.py +0 -0
  202. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/source_registrations.py +0 -0
  203. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/app/transfer.py +0 -0
  204. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/__init__.py +0 -0
  205. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/__init__.py +0 -0
  206. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  207. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  208. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  209. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  210. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  211. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  212. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  213. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  214. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  215. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  216. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  217. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  218. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  219. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  220. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  221. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  222. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  223. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  224. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  225. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  226. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  227. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog.py +0 -0
  228. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  229. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  230. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/contracts.py +0 -0
  231. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted.py +0 -0
  232. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  233. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  234. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/native.py +0 -0
  235. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/operations.py +0 -0
  236. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/pages.py +0 -0
  237. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/registry.py +0 -0
  238. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  239. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/relational.py +0 -0
  240. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  241. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  242. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/backends/streaming.py +0 -0
  243. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/__init__.py +0 -0
  244. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  245. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  246. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  247. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/contracts/values.py +0 -0
  248. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/__init__.py +0 -0
  249. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  250. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  251. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  252. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/label_rules.py +0 -0
  253. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  254. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/domain/update_constants.py +0 -0
  255. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/__init__.py +0 -0
  256. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  257. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  258. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  259. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  260. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  261. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  262. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  263. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  264. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  265. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  266. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  267. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/__init__.py +0 -0
  268. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/env.py +0 -0
  269. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  270. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  271. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  272. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  273. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  274. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  275. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  276. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  277. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  278. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  279. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/__init__.py +0 -0
  280. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  281. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  282. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/create_table.py +0 -0
  283. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  284. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/import_relations.py +0 -0
  285. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  286. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  287. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  288. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/operations/search_documents.py +0 -0
  289. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/__init__.py +0 -0
  290. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/cascade.py +0 -0
  291. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/catalog.py +0 -0
  292. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/database.py +0 -0
  293. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/grants.py +0 -0
  294. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/labels.py +0 -0
  295. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/locking.py +0 -0
  296. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/models.py +0 -0
  297. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  298. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/projections.py +0 -0
  299. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  300. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  301. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  302. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  303. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  304. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/table_response.py +0 -0
  305. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  306. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  307. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/updates.py +0 -0
  308. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  309. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  310. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/__init__.py +0 -0
  311. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/configuration.yaml +0 -0
  312. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/api/metatables/main.py +0 -0
  313. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/__init__.py +0 -0
  314. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/admin_install.py +0 -0
  315. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/app.py +0 -0
  316. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/filters.py +0 -0
  317. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/local.py +0 -0
  318. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/migrations.py +0 -0
  319. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/project.py +0 -0
  320. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/cli/skills.py +0 -0
  321. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/__init__.py +0 -0
  322. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/mssql.py +0 -0
  323. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/compiled_sql/v1.py +0 -0
  324. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/dtype_codec.py +0 -0
  325. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/endpoint.py +0 -0
  326. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/README.md +0 -0
  327. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/__init__.py +0 -0
  328. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/bounded_reader.py +0 -0
  329. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/README.md +0 -0
  330. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mssql.json +0 -0
  331. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/mysql.json +0 -0
  332. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/postgresql.json +0 -0
  333. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/data_sources/register.py +0 -0
  334. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/external_table.py +0 -0
  335. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/README.md +0 -0
  336. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__init__.py +0 -0
  337. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/__main__.py +0 -0
  338. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  339. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/env.py +0 -0
  340. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  341. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  342. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/local_app/tables.py +0 -0
  343. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/query.py +0 -0
  344. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/quickstart.py +0 -0
  345. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/reader.py +0 -0
  346. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/__init__.py +0 -0
  347. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  348. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tables.py +0 -0
  349. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/README.md +0 -0
  350. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__init__.py +0 -0
  351. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/__main__.py +0 -0
  352. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/data/README.md +0 -0
  353. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  354. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/frames.py +0 -0
  355. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  356. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  357. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  358. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  359. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  360. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  361. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  362. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  363. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/operations.py +0 -0
  364. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/tables.py +0 -0
  365. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/tutorial/updaters.py +0 -0
  366. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/examples/updater.py +0 -0
  367. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/future_registry.py +0 -0
  368. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/hashing.py +0 -0
  369. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/instrumentation.py +0 -0
  370. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_connection.py +0 -0
  371. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_files.py +0 -0
  372. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/local_run_logs.py +0 -0
  373. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/log_contract.py +0 -0
  374. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/__init__.py +0 -0
  375. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/alembic.py +0 -0
  376. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/connection.py +0 -0
  377. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/env.py +0 -0
  378. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/provider.py +0 -0
  379. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/registry.py +0 -0
  380. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/runner.py +0 -0
  381. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/scaffold.py +0 -0
  382. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/__init__.py +0 -0
  383. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/env.py.mako +0 -0
  384. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/templates/script.py.mako +0 -0
  385. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/migrations/tls.py +0 -0
  386. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/models.py +0 -0
  387. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/pydantic_metadata.py +0 -0
  388. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/run_logging.py +0 -0
  389. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime.py +0 -0
  390. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/runtime_context.py +0 -0
  391. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/schema_names.py +0 -0
  392. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sdk_compat.py +0 -0
  393. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/sqlalchemy_contracts.py +0 -0
  394. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/time_index_table_refs.py +0 -0
  395. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer.py +0 -0
  396. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transfer_contract.py +0 -0
  397. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/transport.py +0 -0
  398. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/update_configuration_contract.py +0 -0
  399. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/__init__.py +0 -0
  400. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/configuration.py +0 -0
  401. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/dependencies.py +0 -0
  402. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/managers.py +0 -0
  403. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/namespacing.py +0 -0
  404. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/runner.py +0 -0
  405. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/updaters.py +0 -0
  406. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/updaters/utils.py +0 -0
  407. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/src/metatables/upload.py +0 -0
  408. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_caller_assertions.py +0 -0
  409. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_development_client.py +0 -0
  410. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_local_mode.py +0 -0
  411. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_platform_fact_cache.py +0 -0
  412. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_bootstrap.py +0 -0
  413. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_scaffold.py +0 -0
  414. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_runtime_storage_binding.py +0 -0
  415. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/auth/test_source_passwords.py +0 -0
  416. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_catalog_foundation.py +0 -0
  417. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_contract_projection.py +0 -0
  418. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_database_config.py +0 -0
  419. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_index_statistics.py +0 -0
  420. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/catalog/test_migration.py +0 -0
  421. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/conftest.py +0 -0
  422. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/capabilities.json +0 -0
  423. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/client_signatures.json +0 -0
  424. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/database_operations.json +0 -0
  425. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_bounded_transfer.py +0 -0
  426. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_compiler_runtime_source.py +0 -0
  427. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_batching.py +0 -0
  428. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_relation_import.py +0 -0
  429. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_storage_layouts.py +0 -0
  430. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/contracts/test_table_contracts.py +0 -0
  431. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile +0 -0
  432. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/Dockerfile.dockerignore +0 -0
  433. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/__init__.py +0 -0
  434. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/conftest.py +0 -0
  435. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/__init__.py +0 -0
  436. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/env.py +0 -0
  437. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  438. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_api_contract.py +0 -0
  439. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_application_migration.py +0 -0
  440. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  441. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_catalog_contract.py +0 -0
  442. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_credential_catalog.py +0 -0
  443. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_physical_contract.py +0 -0
  444. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_relation_import.py +0 -0
  445. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  446. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_sql_security.py +0 -0
  447. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_backend/test_update_client.py +0 -0
  448. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_physical_operations.py +0 -0
  449. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_postgresql_operations.py +0 -0
  450. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  451. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/documentation/test_project_checks.py +0 -0
  452. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_admin_installation.py +0 -0
  453. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_api_endpoint.py +0 -0
  454. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_application_owned_migrations.py +0 -0
  455. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_catalog_outage.py +0 -0
  456. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_contract.py +0 -0
  457. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_api_coverage.py +0 -0
  458. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_scaffold.py +0 -0
  459. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_migration_tls.py +0 -0
  460. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_package.py +0 -0
  461. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_signatures.py +0 -0
  462. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_client_value_behaviors.py +0 -0
  463. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_actor_client_api.py +0 -0
  464. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_cli_workflow.py +0 -0
  465. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_local_client_selection.py +0 -0
  466. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  467. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_namespaces_admin_http.py +0 -0
  468. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_public_imports.py +0 -0
  469. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_remaining_client_routes.py +0 -0
  470. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_graphs.py +0 -0
  471. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_run_logs.py +0 -0
  472. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_runtime_upgrade.py +0 -0
  473. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sdk_local_startup.py +0 -0
  474. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_sqlite_runtime.py +0 -0
  475. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_delete_client_api.py +0 -0
  476. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_filter_client_api.py +0 -0
  477. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_introspection_client_api.py +0 -0
  478. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_patch_client_api.py +0 -0
  479. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_search_document_api.py +0 -0
  480. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_stats_api.py +0 -0
  481. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_update_pipeline.py +0 -0
  482. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_table_updates_http.py +0 -0
  483. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  484. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  485. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_batch_client_api.py +0 -0
  486. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  487. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  488. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  489. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/e2e/test_update_registration_client_api.py +0 -0
  490. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_documented_examples.py +0 -0
  491. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_postgresql_examples.py +0 -0
  492. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_setup_launch.py +0 -0
  493. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/examples/test_tutorial.py +0 -0
  494. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_credential_store.py +0 -0
  495. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_data_source_rules.py +0 -0
  496. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_data_sources.py +0 -0
  497. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_local_run_logs.py +0 -0
  498. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_connection.py +0 -0
  499. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_sql.py +0 -0
  500. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_tables.py +0 -0
  501. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  502. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_source_validation.py +0 -0
  503. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/integrations/test_sqlite_operations.py +0 -0
  504. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/labels/test_labels.py +0 -0
  505. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_operation.py +0 -0
  506. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_create_table_postgres.py +0 -0
  507. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_physical_operation_journal.py +0 -0
  508. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_register_catalog.py +0 -0
  509. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/operations/test_search_documents.py +0 -0
  510. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_client_skills.py +0 -0
  511. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_dev_release_version.py +0 -0
  512. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_distribution_sources.py +0 -0
  513. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_editable_build.py +0 -0
  514. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/packaging/test_installed_distribution.py +0 -0
  515. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_governed_sql_scope.py +0 -0
  516. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_local_actor_membership.py +0 -0
  517. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_migration_boundary.py +0 -0
  518. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_namespace_grants.py +0 -0
  519. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_security_api.py +0 -0
  520. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_body_filter.py +0 -0
  521. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_grants.py +0 -0
  522. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/tests/permissions/test_table_queries.py +0 -0
  523. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev16}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.8.dev14
3
+ Version: 0.1.8.dev16
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
@@ -28,6 +28,8 @@ does not cache this API's runtime context or select its runtime mode or DataSour
28
28
  Updated 2026-09-28: application Environment policy and relationships are removed.
29
29
  Amended 2026-09-29: one enforced runtime binding and explicit bootstrap select one
30
30
  database for system and user tables.
31
+ Amended 2026-10-02: each runtime mode lists and selects only its own DataSources,
32
+ and inspection checks the login's prerequisites before setup.
31
33
 
32
34
  Companion decision: [Main Sequence SDK ADR 0035: Independent Git source and platform execution context](https://github.com/mainsequence-sdk/mainsequence-sdk/blob/metatables_removal/docs/adr/0035-independent-git-source-and-platform-context.md).
33
35
  The SDK prerequisite is implemented on `metatables_removal`; the current local
@@ -81,6 +83,55 @@ API requirement. The guides and examples describe the implemented shared path.
81
83
 
82
84
  ## Decision
83
85
 
86
+ ### Each runtime mode selects only its own DataSources (amended 2026-10-02)
87
+
88
+ Implemented 2026-10-02 in the API and Admin; the PostgreSQL runtime-transition test
89
+ was updated but not run.
90
+
91
+ A DataSource belongs to the runtime mode that registered it. Data Sources and
92
+ Settings show only the current mode's registrations:
93
+
94
+ | Mode | Registrations | Credential references |
95
+ | --- | --- | --- |
96
+ | Local | The workspace SQLite catalog | Local CredentialStore |
97
+ | Hosted | The Hosted registry until activation, then the hosted catalog | SDK Secrets |
98
+
99
+ Neither mode lists, selects or copies the other mode's registrations. This applies
100
+ ADR 0009's rule against automatic credential transfers to selection. A Hosted
101
+ DataSource is registered and selected after switching to Hosted. Local mode offers
102
+ **Switch to Hosted** without choosing a source; Hosted starts with its saved
103
+ selection or uninitialized, as the supervised-selection amendment below requires.
104
+
105
+ Gap observed 2026-10-02: in Local mode, the Settings Hosted picker listed the local
106
+ catalog (`GET /data-sources/`). Selecting a TimescaleDB registered there made
107
+ `POST /runtime-bootstrap/hosted/select/` copy the row, with its local password
108
+ reference, into `.local/runtime-source-candidates.json`. SDK Secrets could not
109
+ resolve that reference ("SDK Secret access failed"). Local mode also offered no
110
+ way to register a Hosted source: **Add DataSource** writes the local catalog, and
111
+ the Admin disables **Switch to Hosted** until a Hosted source is selected. The
112
+ operations guide documents this cross-mode flow.
113
+
114
+ Fix:
115
+
116
+ 1. API: remove Local-mode Hosted preselection: `POST /runtime-bootstrap/hosted/select/`,
117
+ the Local `hosted_bootstrap` and its runtime-context field. Remove the
118
+ local-catalog lookup and `remember()` from `registered_hosted_source`. Hosted
119
+ `POST /runtime-bootstrap/select/` resolves only the Hosted registry or the
120
+ active hosted catalog.
121
+ 2. Admin: in Local mode, Settings enables **Switch to Hosted** with no source
122
+ picker. The Hosted picker and its **Add DataSource** render only in Hosted
123
+ mode, where Data Sources is the Hosted registry.
124
+ 3. Docs: `docs/operations/local-runtime.md` describes the order Switch to Hosted,
125
+ register in Data Sources, select in Settings, then run MetaTables migrations
126
+ or use the existing catalog.
127
+ 4. Tests: the Local-mode selection route no longer exists; Hosted selection
128
+ rejects a local-catalog UID; a fresh Hosted runtime registers a source with an
129
+ SDK Secret reference and selects it; Settings in Local mode switches without a
130
+ selection.
131
+
132
+ Hosted registry entries already copied from a local catalog carry unusable
133
+ references; developers remove them. No data migration is provided.
134
+
84
135
  ### One local runtime across branches (amended 2026-09-30)
85
136
 
86
137
  MetaTables owns one persistent local SQLite runtime for a checkout. Git branches,
@@ -122,6 +173,14 @@ configuration inserted as the runtime DataSource in that database. Failed work
122
173
  never activates a partially initialized runtime. A database already initialized
123
174
  and compatible can be selected without running migrations.
124
175
 
176
+ Amended 2026-10-02: before any runtime is registered, inspection also checks,
177
+ read-only, that the login can secure the database under
178
+ [ADR 0007](0007-database-enforced-table-access.md): it owns the database, has
179
+ `CREATEROLE`, and owns every non-system object. Unmet prerequisites make the
180
+ target incompatible, with each reason shown in Settings, so setup never leaves a
181
+ database half-initialized. A registered runtime is not rechecked, because it may
182
+ hold imported external objects.
183
+
125
184
  Settings, runtime context, mode selection and bootstrap actions do not depend on
126
185
  catalog sessions or catalog memberships. They retain the existing request admission.
127
186
  The caller who configures a pending target controls its initialization; an existing
@@ -23,7 +23,7 @@ decisions belong in the SDK repository and are linked as dependencies.
23
23
 
24
24
  | ADR | Status | Scope |
25
25
  | --- | --- | --- |
26
- | [0001: One API execution path with SQLite for local development](api/0001-unified-api-storage-and-local-sqlite.md) | Accepted and implemented | Shared execution, API-owned local storage, SDK context dependency, and DuckDB removal. |
26
+ | [0001: One API execution path with SQLite for local development](api/0001-unified-api-storage-and-local-sqlite.md) | Accepted and implemented | Shared execution, API-owned local storage, SDK context dependency, and DuckDB removal; each runtime mode lists and selects only its own DataSources. |
27
27
  | [0002: Application administration and table ownership](api/0002-application-administration-and-table-ownership.md) | Accepted and implemented | Platform admin facts, table Reader/Writer ownership, User/Team grants, live namespace inheritance, and application-owned access management. |
28
28
  | [0004: Execute approved application migrations inside the API](api/0004-approved-application-migrations.md) | Superseded by ADR 0013 | Historical API-installed provider execution model. |
29
29
  | [0005: Shared run logs with local file capture](api/0005-run-logs-and-local-file-capture.md) | Accepted and implemented; live hosted verification pending | Shared run correlation and log API, runtime-bound local JSONL files, and hosted retrieval through the SDK. |
@@ -30,10 +30,10 @@ These operations do not reconcile runtime table grants. If database permissions
30
30
  need repair in Security, caller queries remain blocked while external DataSource
31
31
  management remains available.
32
32
 
33
- Settings lists eligible PostgreSQL, TimescaleDB, MySQL and MSSQL DataSources from
34
- that same registry and selects one by UID through `/runtime-bootstrap/hosted/select/`
35
- while Local is active or `/runtime-bootstrap/select/` in Hosted mode. Selection does
36
- not itself switch runtime mode. Registration preserves the UID when its catalog is
33
+ Each runtime mode lists only its own registrations: Local the workspace catalog,
34
+ Hosted its registry. In Hosted mode, Settings lists eligible PostgreSQL, TimescaleDB,
35
+ MySQL and MSSQL DataSources and selects one by UID through `/runtime-bootstrap/select/`.
36
+ Local mode cannot select a Hosted DataSource; switch to Hosted first. Registration preserves the UID when its catalog is
37
37
  initialized. The API's private pre-initialization storage is an implementation detail.
38
38
 
39
39
  The active runtime DataSource hosts the system catalog and default application
@@ -181,6 +181,25 @@ other caller sessions. SQL Server requires login/user/role administration,
181
181
  `VIEW DEFINITION` and grant management. Managed database services must provide
182
182
  these capabilities; missing permissions leave caller SQL disabled.
183
183
 
184
+ Settings checks the PostgreSQL requirements as soon as you select a database
185
+ without a MetaTables runtime, before any migration runs. The login must own the
186
+ database, have `CREATEROLE`, and own, directly or through role membership, every
187
+ schema, table, view, sequence and routine outside the system catalogs, because
188
+ setup revokes `PUBLIC` access on each of them. Otherwise Settings shows
189
+ **Needs attention** with each reason, for example
190
+ `metatables_dev does not own database "development"` or
191
+ `291 object(s) are owned by postgres (extension timescaledb)`, and
192
+ **Run MetaTables migrations** stays unavailable. Nothing is written to that database.
193
+
194
+ A database operator prepares a qualifying database for the login, for example
195
+ `CREATE DATABASE metatables OWNER metatables_dev TEMPLATE template0;`. On
196
+ PostgreSQL 14 and earlier the `public` schema belongs to the bootstrap superuser,
197
+ so also run `ALTER SCHEMA public OWNER TO metatables_dev;` in that database.
198
+ Extensions such as TimescaleDB and pgvector install their objects as the
199
+ bootstrap superuser, so a database with those extensions cannot currently be
200
+ secured by a non-superuser login. Do not select a database other applications
201
+ share: setup would change their objects' `PUBLIC` access.
202
+
184
203
  Hosted sources require a password Secret to derive per-User database credentials.
185
204
  MySQL global mandatory roles are unsupported. Registration admits ordinary tables
186
205
  only; it does not transfer external ownership. Privileged routines and triggers
@@ -3127,16 +3127,6 @@
3127
3127
  ],
3128
3128
  "title": "Git Source"
3129
3129
  },
3130
- "hosted_bootstrap": {
3131
- "anyOf": [
3132
- {
3133
- "$ref": "#/components/schemas/RuntimeBootstrapDescriptor"
3134
- },
3135
- {
3136
- "type": "null"
3137
- }
3138
- ]
3139
- },
3140
3130
  "hosted_environment": {
3141
3131
  "anyOf": [
3142
3132
  {
@@ -6510,48 +6500,6 @@
6510
6500
  ]
6511
6501
  }
6512
6502
  },
6513
- "/runtime-bootstrap/hosted/select/": {
6514
- "post": {
6515
- "description": "Select a registered hosted DataSource without changing the active local runtime.",
6516
- "operationId": "select_hosted_before_switch_runtime_bootstrap_hosted_select__post",
6517
- "requestBody": {
6518
- "content": {
6519
- "application/json": {
6520
- "schema": {
6521
- "$ref": "#/components/schemas/RuntimeSourceSelection"
6522
- }
6523
- }
6524
- },
6525
- "required": true
6526
- },
6527
- "responses": {
6528
- "200": {
6529
- "content": {
6530
- "application/json": {
6531
- "schema": {
6532
- "$ref": "#/components/schemas/RuntimeBootstrapDescriptor"
6533
- }
6534
- }
6535
- },
6536
- "description": "Successful Response"
6537
- },
6538
- "422": {
6539
- "content": {
6540
- "application/json": {
6541
- "schema": {
6542
- "$ref": "#/components/schemas/HTTPValidationError"
6543
- }
6544
- }
6545
- },
6546
- "description": "Validation Error"
6547
- }
6548
- },
6549
- "summary": "Select Hosted Before Switch",
6550
- "tags": [
6551
- "Runtime bootstrap"
6552
- ]
6553
- }
6554
- },
6555
6503
  "/runtime-bootstrap/migrate/": {
6556
6504
  "post": {
6557
6505
  "operationId": "migrate_runtime_bootstrap_migrate__post",
@@ -51,7 +51,6 @@ These methods and paths are mounted by the current application. See the [OpenAPI
51
51
  | POST | `/runtime-bootstrap/activate/` | Activate | 200 |
52
52
  | POST | `/runtime-bootstrap/configure/` | Configure | 200 |
53
53
  | POST | `/runtime-bootstrap/destroy-local/` | Destroy Local | 200 |
54
- | POST | `/runtime-bootstrap/hosted/select/` | Select Hosted Before Switch | 200 |
55
54
  | POST | `/runtime-bootstrap/migrate/` | Migrate | 200 |
56
55
  | POST | `/runtime-bootstrap/select/` | Select Hosted Runtime Source | 200 |
57
56
  | GET | `/runtime-context/` | Runtime Context | 200 |
@@ -10,7 +10,7 @@ system tables, including `data_source`, alongside user tables. There is no separ
10
10
  catalog connection to configure. Local and hosted use the same initialization flow.
11
11
 
12
12
  1. For Hosted mode, register a PostgreSQL, TimescaleDB, MySQL or MSSQL connection under **MetaTables → Data Sources**. This registration is available before the hosted catalog is initialized.
13
- 2. Open **Settings**, choose Hosted runtime mode, and select that registered DataSource from the list. Local mode prefills the single local SQLite runtime file, shared across Git branches, and uses **Check DataSource**. Choosing a hosted DataSource and switching modes are separate actions.
13
+ 2. Open **Settings**, choose Hosted runtime mode, and select that registered DataSource from the list. Local mode prefills the single local SQLite runtime file, shared across Git branches, and uses **Check DataSource**. Choosing a hosted DataSource and switching modes are separate actions. For a database without a MetaTables runtime, selection also checks that the login can secure it; **Needs attention** lists what is missing ([database privileges](../api/data-sources.md#database-privileges-and-sql-behavior)) and no migration can run until another database is selected.
14
14
  3. For an empty or outdated database, click **Run MetaTables migrations**. This
15
15
  explicitly runs the packaged Alembic history. After success, the API saves the
16
16
  proposal as the runtime DataSource inside the newly initialized registry.
@@ -31,7 +31,6 @@ The API owns these endpoints in both modes:
31
31
  | --- | --- |
32
32
  | `GET /runtime-context/` | Read runtime and bootstrap status, including before any catalog exists. |
33
33
  | `GET/POST /data-sources/` | List or register DataSources, including before hosted bootstrap. |
34
- | `POST /runtime-bootstrap/hosted/select/` | Select a registered hosted DataSource while Local remains active. |
35
34
  | `POST /runtime-bootstrap/select/` | Select a registered DataSource in Hosted mode. |
36
35
  | `POST /runtime-bootstrap/configure/` | Hold and inspect a proposed `{display_name, class_type, configuration}`. |
37
36
  | `POST /runtime-bootstrap/migrate/` | Explicitly migrate, register the runtime source, and activate. |
@@ -42,8 +42,8 @@ The injected SDKCredentialStore saves the password as a managed platform Secret
42
42
  and stores its UID. Hosted never provisions a local key or applies MetaTables AES
43
43
  encryption to that Secret. Then select it
44
44
  from the registered DataSources list in **Settings → Runtime → DataSource**. In the
45
- developer launcher, this selection can be saved while Local mode remains active;
46
- **Switch to Hosted** is a separate action.
45
+ developer launcher, switch to Hosted first: Local mode lists only its workspace
46
+ DataSources and cannot register or select Hosted ones.
47
47
  If MetaTables is absent or outdated, explicitly click **Run MetaTables migrations**.
48
48
  If its schema is already compatible, choose **Use this DataSource**. The selected
49
49
  database stores both the system catalog and user tables; the source registration is
@@ -55,9 +55,10 @@ returns HTTP 200 with a null active DataSource; application routes remain unavai
55
55
  This lets the Vite site show Settings even on the first launch. Once active, the descriptor
56
56
  supplies the source UID, dialect, parameter style and schema to both clients.
57
57
 
58
- DataSources are registered through `/data-sources/` in either runtime mode. Private
58
+ Each runtime mode registers through `/data-sources/` into its own registry. Hosted
59
59
  pre-initialization persistence retains the legacy `.local/runtime-source-candidates.json`
60
- filename for compatibility; it is not a second resource. Selection saves
60
+ filename for compatibility; it is not a second resource, and Local mode never reads
61
+ or writes it. Selection saves
61
62
  public connection settings and Secret references to `.local/runtime-data-sources.json`.
62
63
  Persist that directory across restarts. Startup verifies
63
64
  the existing schema and reopens the selected source; it never upgrades. An incompatible
@@ -67,10 +67,18 @@ Apply application providers through the client with
67
67
 
68
68
  ## Switch modes in one Admin site
69
69
 
70
- Register a hosted connection under **MetaTables → Data Sources**, then choose Hosted under
71
- **Settings → Runtime mode** and select the registered DataSource. **Switch to Hosted**
72
- stops the old worker before starting the selected mode; it never copies data. A fresh
73
- Hosted runtime can start without a database, so Settings remains available.
70
+ Each mode lists and selects only its own DataSources. Local shows the workspace
71
+ catalog and keeps its passwords in the local CredentialStore; Hosted shows the
72
+ Hosted registry and keeps passwords as managed Main Sequence Secrets. A DataSource
73
+ registered in Local never appears in Hosted, and neither mode copies the other's
74
+ registrations or credentials.
75
+
76
+ To use a hosted database, choose Hosted under **Settings → Runtime mode** and click
77
+ **Switch to Hosted**; no DataSource selection is needed first. The worker restarts in
78
+ Hosted with its saved selection, or uninitialized with Settings available. Register
79
+ the database under **MetaTables → Data Sources**, select it in **Settings → Runtime →
80
+ DataSource**, then click **Run MetaTables migrations** or **Use this DataSource**.
81
+ Switching stops the old worker before starting the selected mode; it never copies data.
74
82
  Failed worker startup restores the previous worker. Mode selection is recorded in
75
83
  `.local/runtime-selection.json`; successful DataSource selection is recorded separately
76
84
  in `.local/runtime-data-sources.json` using public settings and Secret references only.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.8.dev14"
7
+ version = "0.1.8.dev16"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.8.dev14
3
+ Version: 0.1.8.dev16
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
@@ -58,6 +58,14 @@ class BootstrapError(RuntimeError):
58
58
  pass
59
59
 
60
60
 
61
+ def insufficient_privilege(exc):
62
+ """The database's own message for a missing privilege, never SQL text or parameters."""
63
+ orig = getattr(exc, "orig", None)
64
+ code = getattr(orig, "pgcode", None) or getattr(orig, "sqlstate", None)
65
+ message = getattr(getattr(orig, "diag", None), "message_primary", None)
66
+ return message if code == "42501" and message else None
67
+
68
+
61
69
  class DestroyLocalInput(BaseModel):
62
70
  model_config = ConfigDict(extra="forbid")
63
71
  path: str
@@ -254,6 +262,8 @@ class RuntimeBootstrap:
254
262
  return
255
263
  if set(self.current) != set(self.expected):
256
264
  self.status = "migration_required"
265
+ if not self.current:
266
+ self.require_prerequisites(connection)
257
267
  return
258
268
  from metatables.api.backend.operations.catalog_schema import validate_system_schema
259
269
  validate_system_schema(connection, self.backend.catalog)
@@ -261,6 +271,8 @@ class RuntimeBootstrap:
261
271
  row = session.scalar(select(DataSource).where(DataSource.is_runtime.__eq__(True)))
262
272
  if row is None:
263
273
  self.status = "registration_required"
274
+ with engine.connect() as connection:
275
+ self.require_prerequisites(connection)
264
276
  elif not self.matches(row):
265
277
  self.status = "incompatible"
266
278
  self.error = "The stored runtime DataSource does not match this connection."
@@ -286,6 +298,15 @@ class RuntimeBootstrap:
286
298
  self.status = "unavailable"
287
299
  self.error = "Cannot verify the selected database or its Alembic history. Check configuration, Secret access and the API's migration version."
288
300
 
301
+ def require_prerequisites(self, connection):
302
+ # Before any setup DDL: a database the login cannot secure must never be
303
+ # half-initialized. A registered runtime may hold external objects.
304
+ problems = self.backend.access.prerequisite_problems(connection)
305
+ if problems:
306
+ self.status = "incompatible"
307
+ self.error = ("MetaTables cannot secure this database: " + "; ".join(problems) + ". Select a database "
308
+ "owned by the DataSource login, as described in DataSource database privileges.")
309
+
289
310
  def matches(self, row):
290
311
  return (row.class_type == self.candidate["class_type"]
291
312
  and row.configuration == self.candidate["configuration"]
@@ -347,6 +368,10 @@ class RuntimeBootstrap:
347
368
  if isinstance(exc, SQLExecutionError):
348
369
  self.error = f"Database access setup failed ({exc.code}). Check the DataSource password Secret and database permissions, then retry setup."
349
370
  raise BootstrapError(self.error) from None
371
+ if privilege_error := insufficient_privilege(exc):
372
+ self.error = (f"Database setup failed: {privilege_error}. The DataSource login must own the runtime "
373
+ "database and every object in it; see the DataSource database privileges.")
374
+ raise BootstrapError(self.error) from None
350
375
  self.error = "MetaTables migration or registration failed. The runtime was not activated; inspect the database before retrying."
351
376
  raise BootstrapError(self.error) from None
352
377
 
@@ -544,46 +569,12 @@ def persist_registered_selection(candidate):
544
569
  candidate.persist_selection()
545
570
 
546
571
 
547
- @router.post("/hosted/select/", response_model=RuntimeBootstrapDescriptor)
548
- def select_hosted_before_switch(body: RuntimeSourceSelection, request: Request,
549
- caller: AdmittedCaller = Depends(require_admin)):
550
- """Select a registered hosted DataSource without changing the active local runtime."""
551
- state = request.app.state.runtime
552
- current = state.hosted_bootstrap
553
- if not state.config.local_mode or current is None:
554
- raise HTTPException(403, "Hosted DataSource preparation is available only in Local mode.")
555
- if not current.lock.acquire(blocking=False):
556
- raise HTTPException(409, "Hosted DataSource configuration is already in progress.")
557
- try:
558
- if request.app.state.runtime.hosted_bootstrap is not current:
559
- raise HTTPException(409, "Hosted DataSource configuration changed. Refresh Settings.")
560
- source = registered_hosted_source(request, body.source_uid)
561
- candidate = RuntimeBootstrap(replace(state.config, local_mode=False),
562
- replace(state.identity, workspace=None))
563
- try:
564
- candidate.selected_source_uid = str(body.source_uid)
565
- candidate.configure(source, caller.user_uid)
566
- if candidate.status == "unavailable":
567
- raise BootstrapError(candidate.error or "Cannot verify the hosted DataSource connection.")
568
- persist_registered_selection(candidate)
569
- request.app.state.runtime = replace(request.app.state.runtime, hosted_bootstrap=candidate)
570
- current.close()
571
- return candidate.descriptor(caller.user_uid, is_admin=caller.is_admin)
572
- except BootstrapError as exc:
573
- candidate.close()
574
- raise HTTPException(409, str(exc)) from None
575
- except Exception:
576
- candidate.close()
577
- raise HTTPException(503, "Unable to save the hosted DataSource configuration.") from None
578
- finally:
579
- current.lock.release()
580
-
581
-
582
572
  @router.post("/select/", response_model=RuntimeBootstrapDescriptor)
583
573
  def select_hosted_runtime_source(body: RuntimeSourceSelection, request: Request,
584
574
  caller: AdmittedCaller = Depends(require_admin)):
575
+ # Each mode selects only its own registrations; Local never prepares Hosted.
585
576
  if request.app.state.runtime.config.local_mode:
586
- raise HTTPException(409, "Use hosted selection while Local mode is active.")
577
+ raise HTTPException(409, "Switch to Hosted before selecting its DataSource.")
587
578
  source = registered_hosted_source(request, body.source_uid)
588
579
  with mutation(request, caller) as current:
589
580
  state = request.app.state.runtime
@@ -115,9 +115,6 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
115
115
  finally:
116
116
  if bootstrap:
117
117
  bootstrap.close()
118
- hosted_bootstrap = _app.state.runtime.hosted_bootstrap
119
- if hosted_bootstrap:
120
- hosted_bootstrap.close()
121
118
 
122
119
  service = FastAPI(title="MetaTables API", version="0.1.0", lifespan=lifespan)
123
120
  from metatables.api.backend.backends.contracts import SQLExecutionError
@@ -54,8 +54,14 @@ def registrations():
54
54
  return source_registrations
55
55
 
56
56
 
57
+ def hosted_registry(request):
58
+ # The saved registry holds Hosted registrations only; Local lists its catalog.
59
+ runtime = request.app.state.runtime
60
+ return runtime.bootstrap is not None and not runtime.config.local_mode
61
+
62
+
57
63
  def saved_rows(request):
58
- if request.app.state.runtime.bootstrap is None:
64
+ if not hosted_registry(request):
59
65
  return {}
60
66
  store = registrations()
61
67
  return store.read_registry(store.registry_path(request))
@@ -67,7 +73,7 @@ def saved_source(uid, request, session):
67
73
 
68
74
 
69
75
  def remember_source(row, request):
70
- if request.app.state.runtime.bootstrap is not None:
76
+ if hosted_registry(request):
71
77
  registrations().remember(row, request)
72
78
 
73
79
  class SourceRoute(APIRoute):
@@ -179,7 +185,7 @@ def payload(row, actor, binding, request=None):
179
185
 
180
186
 
181
187
  def selected_source(uid, request):
182
- if request is None or request.app.state.runtime.bootstrap is None:
188
+ if request is None or not hosted_registry(request):
183
189
  return False
184
190
  return registrations().selected_uid(request) == str(uid)
185
191
 
@@ -372,7 +378,7 @@ def delete_source(uid: UUID, request: Request, actor: TrustedActorFacts = Depend
372
378
  raise HTTPException(409, "Default or referenced DataSources cannot be removed.")
373
379
  session.delete(row)
374
380
  session.commit()
375
- if request.app.state.runtime.bootstrap is not None:
381
+ if hosted_registry(request):
376
382
  registrations().forget(uid, request)
377
383
  return Response(status_code=204)
378
384
 
@@ -87,7 +87,6 @@ def runtime_context(
87
87
  "git_source": source_descriptor(workspace.source) if workspace else None,
88
88
  "data_source_selection": selection,
89
89
  "bootstrap": state.bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.bootstrap else None,
90
- "hosted_bootstrap": state.hosted_bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.hosted_bootstrap else None,
91
90
  "data_source_error": None,
92
91
  "data_source": None, "dialect": None, "paramstyle": None,
93
92
  "default_schema": None,
@@ -211,7 +211,6 @@ class RuntimeState:
211
211
  credential_store: CredentialStore = field(default_factory=UnavailableCredentialStore, repr=False, compare=False)
212
212
  binding: RuntimeStorageBinding = field(default_factory=RuntimeStorageBinding)
213
213
  bootstrap: object | None = None
214
- hosted_bootstrap: object | None = None
215
214
  actor_facts_cache: PlatformCache[tuple[bool, UUID], tuple[frozenset[UUID], bool]] = field(
216
215
  default_factory=PlatformCache, repr=False, compare=False)
217
216
  environment_cache: PlatformCache[UUID, HostedEnvironment] = field(
@@ -247,18 +246,7 @@ def initialize_runtime(config: RuntimeConfig) -> RuntimeState:
247
246
  except Exception:
248
247
  bootstrap.status = "unavailable"
249
248
  bootstrap.error = "Saved runtime configuration is invalid. Configure the DataSource again in Settings."
250
- hosted_bootstrap = None
251
- if config.local_mode:
252
- hosted_bootstrap = RuntimeBootstrap(replace(config, local_mode=False), replace(identity, workspace=None))
253
- hosted_candidate = hosted_bootstrap.initial_candidate()
254
- if hosted_candidate:
255
- try:
256
- hosted_bootstrap.configure(hosted_candidate, None)
257
- except Exception:
258
- hosted_bootstrap.status = "unavailable"
259
- hosted_bootstrap.error = "Saved hosted DataSource is invalid. Configure it again in Settings."
260
- state = RuntimeState(config=config, identity=identity, bootstrap=bootstrap, hosted_bootstrap=hosted_bootstrap,
261
- credential_store=credentials)
249
+ state = RuntimeState(config=config, identity=identity, bootstrap=bootstrap, credential_store=credentials)
262
250
  if identity is not None and identity.actor_facts is not None:
263
251
  state.actor_facts_cache.seed((True, identity.user_uid), identity.actor_facts,
264
252
  expires_at=identity.facts_expires_at)
@@ -60,6 +60,10 @@ class DatabaseAccess:
60
60
  ).hexdigest()
61
61
  )
62
62
 
63
+ def prerequisite_problems(self, connection):
64
+ """Read-only reasons this login cannot secure the database; checked before setup."""
65
+ return []
66
+
63
67
  def initialize(self, session):
64
68
  raise NotImplementedError
65
69
 
@@ -13,7 +13,53 @@ def quote(value):
13
13
  return '"' + str(value).replace('"', '""') + '"'
14
14
 
15
15
 
16
+ # Objects outside the system catalogs that the login neither owns nor inherits.
17
+ # Setup revokes PUBLIC access and changes default privileges on every one of
18
+ # them, which PostgreSQL permits only to their owner.
19
+ FOREIGN_OBJECTS = """
20
+ WITH objects AS (
21
+ SELECT 'schema' AS kind, n.nspname AS name, n.nspowner AS owner,
22
+ 'pg_namespace'::regclass AS classid, n.oid AS objid
23
+ FROM pg_namespace n
24
+ WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
25
+ UNION ALL
26
+ SELECT 'table', n.nspname || '.' || c.relname, c.relowner, 'pg_class'::regclass, c.oid
27
+ FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
28
+ WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
29
+ AND c.relkind IN ('r', 'p', 'v', 'm', 'S', 'f')
30
+ UNION ALL
31
+ SELECT 'routine', n.nspname || '.' || p.proname, p.proowner, 'pg_proc'::regclass, p.oid
32
+ FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace
33
+ WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
34
+ )
35
+ SELECT pg_get_userbyid(o.owner) AS owner, e.extname AS extension, count(*) AS objects,
36
+ min(o.kind || ' ' || o.name) AS example
37
+ FROM objects o
38
+ LEFT JOIN pg_depend d ON d.classid = o.classid AND d.objid = o.objid AND d.deptype = 'e'
39
+ LEFT JOIN pg_extension e ON e.oid = d.refobjid
40
+ WHERE NOT pg_has_role(current_user, o.owner, 'MEMBER')
41
+ GROUP BY 1, 2
42
+ ORDER BY 3 DESC, 1
43
+ """
44
+
45
+
16
46
  class PostgreSQLAccess(DatabaseAccess):
47
+ def prerequisite_problems(self, connection):
48
+ login, database, owns_database, creates_roles = connection.execute(text(
49
+ "SELECT current_user, current_database(), pg_has_role(current_user, d.datdba, 'MEMBER'), "
50
+ "r.rolcreaterole OR r.rolsuper FROM pg_database d JOIN pg_roles r ON r.rolname = current_user "
51
+ "WHERE d.datname = current_database()"
52
+ )).one()
53
+ problems = []
54
+ if not owns_database:
55
+ problems.append(f'{login} does not own database "{database}"')
56
+ if not creates_roles:
57
+ problems.append(f"{login} lacks CREATEROLE")
58
+ for owner, extension, count, example in connection.execute(text(FOREIGN_OBJECTS)).all()[:3]:
59
+ source = f" (extension {extension})" if extension else ""
60
+ problems.append(f"{count} object(s) are owned by {owner}{source}, e.g. {example}")
61
+ return problems
62
+
17
63
  def initialize(self, session):
18
64
  self.identity_secret()
19
65
  connection = session.connection()
@@ -61,7 +61,6 @@ class RuntimeContext(BaseModel):
61
61
  data_source_selection: Literal["local_workspace", "catalog_default", "runtime_override", "runtime_binding"] = "catalog_default"
62
62
  data_source_error: str | None = None
63
63
  bootstrap: RuntimeBootstrapDescriptor | None = None
64
- hosted_bootstrap: RuntimeBootstrapDescriptor | None = None
65
64
  dialect: Literal["sqlite", "postgresql", "mysql", "mssql"] | None
66
65
  paramstyle: Literal["named", "pyformat", "qmark"] | None
67
66
  data_source: dict | None