mainsequence-metatable 0.1.8.dev14__tar.gz → 0.1.8.dev15__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.dev15}/PKG-INFO +1 -1
  2. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +50 -0
  3. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/index.md +1 -1
  4. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/data-sources.md +4 -4
  5. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/openapi.json +0 -52
  6. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/reference.md +0 -1
  7. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/catalog-migrations.md +0 -1
  8. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/hosted-runtime.md +5 -4
  9. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/local-runtime.md +12 -4
  10. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/pyproject.toml +1 -1
  11. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  12. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/bootstrap.py +2 -36
  13. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/main.py +0 -3
  14. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/data_sources.py +10 -4
  15. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/runtime_context.py +0 -1
  16. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/runtime.py +1 -13
  17. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/runtime_contract.py +0 -1
  18. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_hosted_environment_target.py +1 -1
  19. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_runtime_selection.py +57 -48
  20. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_data_source_registry.py +1 -2
  21. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_runtime_transition.py +13 -17
  22. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  23. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  24. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  25. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  26. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  27. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/.mainsequence/workflows/metatables-api.yaml +0 -0
  28. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/LICENSE +0 -0
  29. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/MANIFEST.in +0 -0
  30. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/README.md +0 -0
  31. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/alembic.ini +0 -0
  32. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/api/metatables/main.py +0 -0
  33. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/compose.database-tests.yml +0 -0
  34. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  35. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  36. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  37. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  38. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  39. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  40. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  41. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  42. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0009-shared-credential-store.md +0 -0
  43. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  44. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  45. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  46. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  47. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  48. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  49. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/authentication-and-errors.md +0 -0
  50. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/overview.md +0 -0
  51. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/tables-and-migrations.md +0 -0
  52. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/api/time-index-and-updates.md +0 -0
  53. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/assets/branding/metatables.svg +0 -0
  54. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/assets/diagrams/local-client-experience.svg +0 -0
  55. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/bounded-transfers.md +0 -0
  56. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/build-an-updater.md +0 -0
  57. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/define-and-migrate-tables.md +0 -0
  58. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/installation-and-connection.md +0 -0
  59. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/local-storage.md +0 -0
  60. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/query-and-mutate.md +0 -0
  61. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/quickstart.md +0 -0
  62. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/read-existing-time-index-tables.md +0 -0
  63. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/register-existing-tables.md +0 -0
  64. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/tutorial.md +0 -0
  65. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/client/upgrade-legacy-app.md +0 -0
  66. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/architecture.md +0 -0
  67. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/data-sources.md +0 -0
  68. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/identity-and-scope.md +0 -0
  69. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/permissions-namespaces-labels.md +0 -0
  70. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/runs-and-execution-graphs.md +0 -0
  71. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  72. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/concepts/time-index-tables-and-updates.md +0 -0
  73. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/contributing/architecture-and-boundaries.md +0 -0
  74. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/contributing/database-backends.md +0 -0
  75. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/contributing/documentation.md +0 -0
  76. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/contributing/releasing.md +0 -0
  77. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/contributing/testing.md +0 -0
  78. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/README.md +0 -0
  79. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/__init__.py +0 -0
  80. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/bounded_reader.py +0 -0
  81. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/data_sources/README.md +0 -0
  82. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/data_sources/mssql.json +0 -0
  83. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/data_sources/mysql.json +0 -0
  84. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/data_sources/postgresql.json +0 -0
  85. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/data_sources/register.py +0 -0
  86. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/external_table.py +0 -0
  87. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/README.md +0 -0
  88. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/__init__.py +0 -0
  89. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/__main__.py +0 -0
  90. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/migrations/__init__.py +0 -0
  91. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/migrations/env.py +0 -0
  92. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/migrations/script.py.mako +0 -0
  93. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  94. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/local_app/tables.py +0 -0
  95. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/query.py +0 -0
  96. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/quickstart.py +0 -0
  97. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/reader.py +0 -0
  98. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/scripts/__init__.py +0 -0
  99. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/scripts/setup_metatables.py +0 -0
  100. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tables.py +0 -0
  101. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/README.md +0 -0
  102. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/__init__.py +0 -0
  103. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/__main__.py +0 -0
  104. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/data/README.md +0 -0
  105. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  106. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/frames.py +0 -0
  107. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/__init__.py +0 -0
  108. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/env.py +0 -0
  109. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/registry.py +0 -0
  110. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  111. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  112. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  113. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  114. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  115. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/operations.py +0 -0
  116. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/tables.py +0 -0
  117. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/tutorial/updaters.py +0 -0
  118. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/examples/updater.py +0 -0
  119. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/index.md +0 -0
  120. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/configuration.md +0 -0
  121. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/recovery-and-observability.md +0 -0
  122. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/run-history.md +0 -0
  123. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/operations/run-logs.md +0 -0
  124. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/reference/capabilities.md +0 -0
  125. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/reference/cli.md +0 -0
  126. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/reference/python.md +0 -0
  127. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/security/index.md +0 -0
  128. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/security/ownership-and-sharing.md +0 -0
  129. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/docs/security/permissions.md +0 -0
  130. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/mkdocs.yml +0 -0
  131. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/__init__.py +0 -0
  132. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/build_reference.py +0 -0
  133. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_boundaries.py +0 -0
  134. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_client_api_coverage.py +0 -0
  135. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_distribution_sources.py +0 -0
  136. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_docs.py +0 -0
  137. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_examples_debug.py +0 -0
  138. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/check_project.py +0 -0
  139. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/dev_release_version.py +0 -0
  140. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/test_databases.py +0 -0
  141. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/scripts/test_postgresql.py +0 -0
  142. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/setup.cfg +0 -0
  143. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/mainsequence_metatable.egg-info/SOURCES.txt +0 -0
  144. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  145. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  146. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  147. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  148. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/__init__.py +0 -0
  149. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/_admin_source.json +0 -0
  150. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/_build.py +0 -0
  151. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/_skill_bundle.py +0 -0
  152. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/__init__.py +0 -0
  153. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/__init__.py +0 -0
  154. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/auth/__init__.py +0 -0
  155. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/auth/boundary.py +0 -0
  156. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  157. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/auth/local_actor.py +0 -0
  158. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/configuration.py +0 -0
  159. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/credential_admin.py +0 -0
  160. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/development.py +0 -0
  161. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/development_client.py +0 -0
  162. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/platform_cache.py +0 -0
  163. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/__init__.py +0 -0
  164. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/column_search.py +0 -0
  165. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/contract_validation.py +0 -0
  166. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  167. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/migration_connection.py +0 -0
  168. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/namespaces.py +0 -0
  169. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/run_logs.py +0 -0
  170. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/schema_graph.py +0 -0
  171. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/security.py +0 -0
  172. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_cascade.py +0 -0
  173. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_crud.py +0 -0
  174. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_delete.py +0 -0
  175. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_filter.py +0 -0
  176. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_import.py +0 -0
  177. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_introspection.py +0 -0
  178. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_patch.py +0 -0
  179. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_registration.py +0 -0
  180. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_response.py +0 -0
  181. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_search_document.py +0 -0
  182. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_sql.py +0 -0
  183. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  184. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  185. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  186. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  187. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_batch.py +0 -0
  188. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  189. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_constants.py +0 -0
  190. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_crud.py +0 -0
  191. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_details.py +0 -0
  192. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_graph.py +0 -0
  193. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  194. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_registration.py +0 -0
  195. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_runs.py +0 -0
  196. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/routes/update_statistics.py +0 -0
  197. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/runtime_control.py +0 -0
  198. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/source_passwords.py +0 -0
  199. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/source_registrations.py +0 -0
  200. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/app/transfer.py +0 -0
  201. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/__init__.py +0 -0
  202. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/__init__.py +0 -0
  203. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/access.py +0 -0
  204. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  205. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  206. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  207. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  208. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  209. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  210. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  211. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  212. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  213. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  214. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  215. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  216. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  217. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  218. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  219. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  220. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  221. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  222. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  223. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  224. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  225. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/catalog.py +0 -0
  226. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  227. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  228. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/contracts.py +0 -0
  229. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/hosted.py +0 -0
  230. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  231. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  232. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/native.py +0 -0
  233. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/operations.py +0 -0
  234. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/pages.py +0 -0
  235. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  236. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/registry.py +0 -0
  237. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  238. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/relational.py +0 -0
  239. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  240. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  241. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/backends/streaming.py +0 -0
  242. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/contracts/__init__.py +0 -0
  243. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  244. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  245. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  246. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/contracts/values.py +0 -0
  247. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  249. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  250. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  251. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/label_rules.py +0 -0
  252. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  253. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/domain/update_constants.py +0 -0
  254. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/__init__.py +0 -0
  255. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  256. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  257. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  258. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  259. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  260. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  261. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  262. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  263. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  264. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  265. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  266. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/__init__.py +0 -0
  267. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/env.py +0 -0
  268. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  269. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  270. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  271. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  272. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  273. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  274. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  275. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  276. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  277. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  278. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/__init__.py +0 -0
  279. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  280. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  281. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/create_table.py +0 -0
  282. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  283. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/import_relations.py +0 -0
  284. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  285. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  286. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  287. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/operations/search_documents.py +0 -0
  288. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/__init__.py +0 -0
  289. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/cascade.py +0 -0
  290. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/catalog.py +0 -0
  291. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/database.py +0 -0
  292. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/grants.py +0 -0
  293. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/labels.py +0 -0
  294. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/locking.py +0 -0
  295. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/models.py +0 -0
  296. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  297. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/projections.py +0 -0
  298. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  299. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  300. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  301. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  302. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  303. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/table_response.py +0 -0
  304. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  305. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  306. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/updates.py +0 -0
  307. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  308. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  309. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/metatables/__init__.py +0 -0
  310. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/metatables/configuration.yaml +0 -0
  311. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/api/metatables/main.py +0 -0
  312. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/__init__.py +0 -0
  313. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/admin_install.py +0 -0
  314. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/app.py +0 -0
  315. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/filters.py +0 -0
  316. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/local.py +0 -0
  317. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/migrations.py +0 -0
  318. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/project.py +0 -0
  319. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/cli/skills.py +0 -0
  320. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/compiled_sql/__init__.py +0 -0
  321. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/compiled_sql/mssql.py +0 -0
  322. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/compiled_sql/v1.py +0 -0
  323. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/dtype_codec.py +0 -0
  324. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/endpoint.py +0 -0
  325. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/README.md +0 -0
  326. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/__init__.py +0 -0
  327. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/bounded_reader.py +0 -0
  328. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/data_sources/README.md +0 -0
  329. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/data_sources/mssql.json +0 -0
  330. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/data_sources/mysql.json +0 -0
  331. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/data_sources/postgresql.json +0 -0
  332. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/data_sources/register.py +0 -0
  333. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/external_table.py +0 -0
  334. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/README.md +0 -0
  335. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/__init__.py +0 -0
  336. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/__main__.py +0 -0
  337. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  338. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/migrations/env.py +0 -0
  339. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  340. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  341. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/local_app/tables.py +0 -0
  342. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/query.py +0 -0
  343. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/quickstart.py +0 -0
  344. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/reader.py +0 -0
  345. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/scripts/__init__.py +0 -0
  346. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  347. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tables.py +0 -0
  348. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/README.md +0 -0
  349. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/__init__.py +0 -0
  350. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/__main__.py +0 -0
  351. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/data/README.md +0 -0
  352. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  353. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/frames.py +0 -0
  354. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  355. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  356. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  357. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  358. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  359. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  360. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  361. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  362. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/operations.py +0 -0
  363. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/tables.py +0 -0
  364. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/tutorial/updaters.py +0 -0
  365. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/examples/updater.py +0 -0
  366. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/future_registry.py +0 -0
  367. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/hashing.py +0 -0
  368. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/instrumentation.py +0 -0
  369. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/local_connection.py +0 -0
  370. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/local_files.py +0 -0
  371. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/local_run_logs.py +0 -0
  372. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/log_contract.py +0 -0
  373. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/__init__.py +0 -0
  374. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/alembic.py +0 -0
  375. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/connection.py +0 -0
  376. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/env.py +0 -0
  377. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/provider.py +0 -0
  378. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/registry.py +0 -0
  379. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/runner.py +0 -0
  380. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/scaffold.py +0 -0
  381. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/templates/__init__.py +0 -0
  382. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/templates/env.py.mako +0 -0
  383. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/templates/script.py.mako +0 -0
  384. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/migrations/tls.py +0 -0
  385. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/models.py +0 -0
  386. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/pydantic_metadata.py +0 -0
  387. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/run_logging.py +0 -0
  388. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/runtime.py +0 -0
  389. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/runtime_context.py +0 -0
  390. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/schema_names.py +0 -0
  391. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/sdk_compat.py +0 -0
  392. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/sqlalchemy_contracts.py +0 -0
  393. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/time_index_table_refs.py +0 -0
  394. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/transfer.py +0 -0
  395. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/transfer_contract.py +0 -0
  396. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/transport.py +0 -0
  397. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/update_configuration_contract.py +0 -0
  398. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/__init__.py +0 -0
  399. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/configuration.py +0 -0
  400. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/dependencies.py +0 -0
  401. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/managers.py +0 -0
  402. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/namespacing.py +0 -0
  403. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/runner.py +0 -0
  404. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/updaters.py +0 -0
  405. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/updaters/utils.py +0 -0
  406. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/src/metatables/upload.py +0 -0
  407. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_caller_assertions.py +0 -0
  408. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_data_source_identity.py +0 -0
  409. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_development_client.py +0 -0
  410. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_local_mode.py +0 -0
  411. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_platform_fact_cache.py +0 -0
  412. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_runtime_bootstrap.py +0 -0
  413. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_runtime_scaffold.py +0 -0
  414. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_runtime_storage_binding.py +0 -0
  415. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/auth/test_source_passwords.py +0 -0
  416. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/catalog/test_catalog_foundation.py +0 -0
  417. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/catalog/test_contract_projection.py +0 -0
  418. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/catalog/test_database_config.py +0 -0
  419. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/catalog/test_index_statistics.py +0 -0
  420. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/catalog/test_migration.py +0 -0
  421. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/conftest.py +0 -0
  422. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/capabilities.json +0 -0
  423. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/client_signatures.json +0 -0
  424. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/database_operations.json +0 -0
  425. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_bounded_transfer.py +0 -0
  426. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_compiler_runtime_source.py +0 -0
  427. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_relation_batching.py +0 -0
  428. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_relation_import.py +0 -0
  429. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_storage_layouts.py +0 -0
  430. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/contracts/test_table_contracts.py +0 -0
  431. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/Dockerfile +0 -0
  432. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/Dockerfile.dockerignore +0 -0
  433. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/__init__.py +0 -0
  434. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/conftest.py +0 -0
  435. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/provider/__init__.py +0 -0
  436. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/provider/env.py +0 -0
  437. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  438. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_api_contract.py +0 -0
  439. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_application_migration.py +0 -0
  440. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  441. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_catalog_contract.py +0 -0
  442. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_credential_catalog.py +0 -0
  443. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_physical_contract.py +0 -0
  444. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_relation_import.py +0 -0
  445. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  446. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_sql_security.py +0 -0
  447. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_backend/test_update_client.py +0 -0
  448. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_operations/test_physical_operations.py +0 -0
  449. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_operations/test_postgresql_operations.py +0 -0
  450. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  451. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/documentation/test_project_checks.py +0 -0
  452. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_admin_installation.py +0 -0
  453. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_api_endpoint.py +0 -0
  454. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_application_owned_migrations.py +0 -0
  455. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_catalog_outage.py +0 -0
  456. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_api_contract.py +0 -0
  457. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_api_coverage.py +0 -0
  458. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_migration_scaffold.py +0 -0
  459. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_migration_tls.py +0 -0
  460. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_package.py +0 -0
  461. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_signatures.py +0 -0
  462. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_client_value_behaviors.py +0 -0
  463. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_local_actor_client_api.py +0 -0
  464. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_local_cli_workflow.py +0 -0
  465. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_local_client_selection.py +0 -0
  466. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  467. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_namespaces_admin_http.py +0 -0
  468. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_public_imports.py +0 -0
  469. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_remaining_client_routes.py +0 -0
  470. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_run_graphs.py +0 -0
  471. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_run_logs.py +0 -0
  472. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_runtime_upgrade.py +0 -0
  473. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_sdk_local_startup.py +0 -0
  474. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_sqlite_runtime.py +0 -0
  475. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_delete_client_api.py +0 -0
  476. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_filter_client_api.py +0 -0
  477. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_introspection_client_api.py +0 -0
  478. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_patch_client_api.py +0 -0
  479. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_search_document_api.py +0 -0
  480. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_stats_api.py +0 -0
  481. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_update_pipeline.py +0 -0
  482. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_table_updates_http.py +0 -0
  483. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  484. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  485. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_update_batch_client_api.py +0 -0
  486. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  487. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  488. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  489. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/e2e/test_update_registration_client_api.py +0 -0
  490. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/examples/test_documented_examples.py +0 -0
  491. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/examples/test_postgresql_examples.py +0 -0
  492. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/examples/test_setup_launch.py +0 -0
  493. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/examples/test_tutorial.py +0 -0
  494. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_credential_store.py +0 -0
  495. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_data_source_rules.py +0 -0
  496. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_local_data_sources.py +0 -0
  497. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_local_run_logs.py +0 -0
  498. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_postgresql_connection.py +0 -0
  499. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_postgresql_sql.py +0 -0
  500. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_postgresql_tables.py +0 -0
  501. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  502. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_source_validation.py +0 -0
  503. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/integrations/test_sqlite_operations.py +0 -0
  504. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/labels/test_labels.py +0 -0
  505. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/operations/test_create_table_operation.py +0 -0
  506. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/operations/test_create_table_postgres.py +0 -0
  507. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/operations/test_physical_operation_journal.py +0 -0
  508. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/operations/test_register_catalog.py +0 -0
  509. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/operations/test_search_documents.py +0 -0
  510. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/packaging/test_client_skills.py +0 -0
  511. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/packaging/test_dev_release_version.py +0 -0
  512. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/packaging/test_distribution_sources.py +0 -0
  513. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/packaging/test_editable_build.py +0 -0
  514. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/packaging/test_installed_distribution.py +0 -0
  515. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_governed_sql_scope.py +0 -0
  516. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_local_actor_membership.py +0 -0
  517. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_migration_boundary.py +0 -0
  518. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_namespace_grants.py +0 -0
  519. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_security_api.py +0 -0
  520. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_table_body_filter.py +0 -0
  521. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_table_grants.py +0 -0
  522. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/tests/permissions/test_table_queries.py +0 -0
  523. {mainsequence_metatable-0.1.8.dev14 → mainsequence_metatable-0.1.8.dev15}/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.dev15
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,7 @@ 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.
31
32
 
32
33
  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
34
  The SDK prerequisite is implemented on `metatables_removal`; the current local
@@ -81,6 +82,55 @@ API requirement. The guides and examples describe the implemented shared path.
81
82
 
82
83
  ## Decision
83
84
 
85
+ ### Each runtime mode selects only its own DataSources (amended 2026-10-02)
86
+
87
+ Implemented 2026-10-02 in the API and Admin; the PostgreSQL runtime-transition test
88
+ was updated but not run.
89
+
90
+ A DataSource belongs to the runtime mode that registered it. Data Sources and
91
+ Settings show only the current mode's registrations:
92
+
93
+ | Mode | Registrations | Credential references |
94
+ | --- | --- | --- |
95
+ | Local | The workspace SQLite catalog | Local CredentialStore |
96
+ | Hosted | The Hosted registry until activation, then the hosted catalog | SDK Secrets |
97
+
98
+ Neither mode lists, selects or copies the other mode's registrations. This applies
99
+ ADR 0009's rule against automatic credential transfers to selection. A Hosted
100
+ DataSource is registered and selected after switching to Hosted. Local mode offers
101
+ **Switch to Hosted** without choosing a source; Hosted starts with its saved
102
+ selection or uninitialized, as the supervised-selection amendment below requires.
103
+
104
+ Gap observed 2026-10-02: in Local mode, the Settings Hosted picker listed the local
105
+ catalog (`GET /data-sources/`). Selecting a TimescaleDB registered there made
106
+ `POST /runtime-bootstrap/hosted/select/` copy the row, with its local password
107
+ reference, into `.local/runtime-source-candidates.json`. SDK Secrets could not
108
+ resolve that reference ("SDK Secret access failed"). Local mode also offered no
109
+ way to register a Hosted source: **Add DataSource** writes the local catalog, and
110
+ the Admin disables **Switch to Hosted** until a Hosted source is selected. The
111
+ operations guide documents this cross-mode flow.
112
+
113
+ Fix:
114
+
115
+ 1. API: remove Local-mode Hosted preselection: `POST /runtime-bootstrap/hosted/select/`,
116
+ the Local `hosted_bootstrap` and its runtime-context field. Remove the
117
+ local-catalog lookup and `remember()` from `registered_hosted_source`. Hosted
118
+ `POST /runtime-bootstrap/select/` resolves only the Hosted registry or the
119
+ active hosted catalog.
120
+ 2. Admin: in Local mode, Settings enables **Switch to Hosted** with no source
121
+ picker. The Hosted picker and its **Add DataSource** render only in Hosted
122
+ mode, where Data Sources is the Hosted registry.
123
+ 3. Docs: `docs/operations/local-runtime.md` describes the order Switch to Hosted,
124
+ register in Data Sources, select in Settings, then run MetaTables migrations
125
+ or use the existing catalog.
126
+ 4. Tests: the Local-mode selection route no longer exists; Hosted selection
127
+ rejects a local-catalog UID; a fresh Hosted runtime registers a source with an
128
+ SDK Secret reference and selects it; Settings in Local mode switches without a
129
+ selection.
130
+
131
+ Hosted registry entries already copied from a local catalog carry unusable
132
+ references; developers remove them. No data migration is provided.
133
+
84
134
  ### One local runtime across branches (amended 2026-09-30)
85
135
 
86
136
  MetaTables owns one persistent local SQLite runtime for a checkout. Git branches,
@@ -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
@@ -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 |
@@ -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.dev15"
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.dev15
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
@@ -544,46 +544,12 @@ def persist_registered_selection(candidate):
544
544
  candidate.persist_selection()
545
545
 
546
546
 
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
547
  @router.post("/select/", response_model=RuntimeBootstrapDescriptor)
583
548
  def select_hosted_runtime_source(body: RuntimeSourceSelection, request: Request,
584
549
  caller: AdmittedCaller = Depends(require_admin)):
550
+ # Each mode selects only its own registrations; Local never prepares Hosted.
585
551
  if request.app.state.runtime.config.local_mode:
586
- raise HTTPException(409, "Use hosted selection while Local mode is active.")
552
+ raise HTTPException(409, "Switch to Hosted before selecting its DataSource.")
587
553
  source = registered_hosted_source(request, body.source_uid)
588
554
  with mutation(request, caller) as current:
589
555
  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)
@@ -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
@@ -53,7 +53,7 @@ def test_runtime_descriptor_distinguishes_switch_target_from_active_environment(
53
53
  uid = uuid4()
54
54
  environment = HostedEnvironment(uid=str(uid), name="Development", status="verified")
55
55
  state = SimpleNamespace(config=SimpleNamespace(local_mode=local, developer_mode=True,
56
- configuration_path=None, expected_host="127.0.0.1:18473"), workspace=None, bootstrap=None, hosted_bootstrap=None,
56
+ configuration_path=None, expected_host="127.0.0.1:18473"), workspace=None, bootstrap=None,
57
57
  binding=SimpleNamespace(source_uid=None), environment_cache=PlatformCache(),
58
58
  credential_store=SimpleNamespace(descriptor=lambda: dict(provider="unconfigured", status="uninitialized", error=None)))
59
59
  control = SimpleNamespace(instance_id="worker", error=None, shutdown=lambda: None) if switch_available else None
@@ -83,53 +83,64 @@ def test_switch_drains_and_hands_off_without_changing_binding(runtime):
83
83
  assert runtime.client.get("/data-sources/").status_code == 503
84
84
 
85
85
 
86
- def test_hosted_source_can_be_saved_before_switch_without_changing_local_binding(runtime, monkeypatch):
87
- from metatables.api.app.bootstrap import RuntimeBootstrap
88
-
89
- inspect = RuntimeBootstrap.inspect
90
- migrations = RuntimeBootstrap.migration_descriptor
91
- def inspect_without_remote_connection(self):
92
- if self.config.local_mode:
93
- return inspect(self)
94
- self.status, self.error, self.current = "migration_required", None, []
95
- def migration_without_remote_connection(self):
96
- if self.config.local_mode:
97
- return migrations(self)
98
- return dict(current_revisions=[], required_revisions=self.expected,
99
- pending_revisions=self.expected, migration_status="pending", migration_error=None)
100
- monkeypatch.setattr(RuntimeBootstrap, "inspect", inspect_without_remote_connection)
101
- monkeypatch.setattr(RuntimeBootstrap, "migration_descriptor", migration_without_remote_connection)
102
-
103
- before = runtime.client.get("/runtime-context/").json()
104
- candidate = {"display_name": "Hosted catalog", "class_type": "postgresql", "configuration": {
105
- "host": "db.example.invalid", "port": 5432, "database_name": "metatables",
106
- "database_user": "metatables", "ssl_mode": "disable"}}
107
- registered = runtime.client.post("/data-sources/", json=candidate)
86
+ def test_local_mode_lists_and_selects_only_its_own_sources(runtime):
87
+ registered = runtime.client.post("/data-sources/", json={"display_name": "Reporting", "class_type": "postgresql",
88
+ "configuration": {"host": "db.example.invalid", "database_name": "reports", "database_user": "reader"}})
108
89
  assert registered.status_code == 201, registered.text
109
90
  uid = registered.json()["uid"]
91
+ registry = runtime.root / ".local/runtime-source-candidates.json"
92
+ assert not registry.exists()
93
+ # A Hosted registration never appears in, or becomes selectable from, Local.
94
+ hosted_uid = str(uuid4())
95
+ registry.write_text(json.dumps({hosted_uid: {
96
+ "uid": hosted_uid, "display_name": "Hosted catalog", "class_type": "postgresql",
97
+ "storage_access_mode": "read_write", "status": "REGISTERED", "is_default": False,
98
+ "created_at": "2026-10-02T10:00:00+00:00", "configuration": {
99
+ "host": "db.example.invalid", "database_name": "metatables", "database_user": "metatables",
100
+ "password_secret_uid": str(uuid4())}}}))
110
101
  listed = runtime.client.get("/data-sources/").json()
111
102
  assert {row["uid"] for row in listed["results"]} == {uid, str(runtime.workspace.data_source.uid)}
112
- assert next(row for row in listed["results"] if row["class_type"] == "sqlite")["can_manage"] is False
113
- assert runtime.client.get(f"/data-sources/{uid}/summary/").status_code == 200
114
- response = runtime.client.post("/runtime-bootstrap/hosted/select/", json={"source_uid": uid})
115
- assert response.status_code == 200, response.text
116
- after = runtime.client.get("/runtime-context/").json()
117
- assert after["local_mode"] is True
118
- assert after["runtime_instance_id"] == before["runtime_instance_id"]
119
- assert after["bootstrap"]["active"] is True
120
- assert after["data_source"] == before["data_source"]
121
- assert after["hosted_bootstrap"]["candidate"]["display_name"] == "Hosted catalog"
122
- assert after["hosted_bootstrap"]["selected_source_uid"] == uid
123
- assert runtime.client.get(f"/data-sources/{uid}/").json()["can_manage"] is False
124
- assert runtime.client.patch(f"/data-sources/{uid}/", json={"display_name": "Changed"}).status_code == 409
125
- assert runtime.client.delete(f"/data-sources/{uid}/").status_code == 409
126
- assert not runtime.events and not (runtime.root / "request.json").exists()
127
- saved = json.loads((runtime.root / ".local/runtime-data-sources.json").read_text())
128
- assert saved["hosted"]["display_name"] == "Hosted catalog"
129
- assert saved["local"]["class_type"] == "sqlite"
130
- rejected = runtime.client.post("/runtime-bootstrap/hosted/select/", json={"source_uid": str(uuid4())})
131
- assert rejected.status_code == 404
132
- assert runtime.client.get("/runtime-context/").json()["hosted_bootstrap"]["candidate"]["display_name"] == "Hosted catalog"
103
+ assert runtime.client.get(f"/data-sources/{hosted_uid}/").status_code == 404
104
+ for source_uid in (uid, hosted_uid):
105
+ response = runtime.client.post("/runtime-bootstrap/select/", json={"source_uid": source_uid})
106
+ assert response.status_code == 409, response.text
107
+ assert runtime.client.post("/runtime-bootstrap/hosted/select/", json={"source_uid": uid}).status_code == 404
108
+ assert "hosted_bootstrap" not in runtime.client.get("/runtime-context/").json()
109
+ assert runtime.client.patch(f"/data-sources/{uid}/", json={"display_name": "Reporting warehouse"}).status_code == 200
110
+ assert json.loads(registry.read_text()).keys() == {hosted_uid}
111
+
112
+
113
+ def test_hosted_mode_registers_and_selects_with_sdk_secret_references(tmp_path, monkeypatch):
114
+ from mainsequence.client import Secret
115
+
116
+ from metatables.api.app.auth.boundary import AdmittedCaller, admit_request
117
+ from metatables.api.app.bootstrap import RuntimeBootstrap
118
+ configuration = tmp_path / "configuration.yaml"
119
+ configuration.write_text("local_mode_available: false\n")
120
+ secret_uid = uuid4()
121
+ monkeypatch.setattr(Secret, "create", lambda **kwargs: SimpleNamespace(uid=str(secret_uid)))
122
+ def inspect_without_remote_connection(self):
123
+ self.status, self.error, self.current = "migration_required", None, []
124
+ monkeypatch.setattr(RuntimeBootstrap, "inspect", inspect_without_remote_connection)
125
+ monkeypatch.setattr(RuntimeBootstrap, "migration_descriptor", lambda self: dict(
126
+ current_revisions=[], required_revisions=self.expected, pending_revisions=self.expected,
127
+ migration_status="pending", migration_error=None))
128
+ app = create_app(RuntimeConfig(local_mode=False, configuration_path=configuration))
129
+ app.dependency_overrides[admit_request] = lambda: AdmittedCaller(user_uid=uuid4(), is_admin=True)
130
+ with TestClient(app) as client:
131
+ created = client.post("/data-sources/", json={"display_name": "Hosted catalog", "class_type": "timescale_db",
132
+ "password": "hosted-test-password", "configuration": {"host": "db.example.invalid",
133
+ "database_name": "metatables", "database_user": "metatables", "ssl_mode": "disable"}})
134
+ assert created.status_code == 201, created.text
135
+ uid = created.json()["uid"]
136
+ assert created.json()["configuration"]["password_secret_uid"] == str(secret_uid)
137
+ selected = client.post("/runtime-bootstrap/select/", json={"source_uid": uid})
138
+ assert selected.status_code == 200, selected.text
139
+ assert selected.json()["selected_source_uid"] == uid
140
+ assert selected.json()["candidate"]["configuration"]["password_secret_uid"] == str(secret_uid)
141
+ assert client.post("/runtime-bootstrap/select/", json={"source_uid": str(uuid4())}).status_code == 404
142
+ saved = json.loads((tmp_path / ".local/runtime-data-sources.json").read_text())
143
+ assert saved["hosted_source_uid"] == uid and "local" not in saved
133
144
 
134
145
 
135
146
  def test_registered_sources_can_be_managed_before_runtime_selection(runtime, monkeypatch):
@@ -151,10 +162,9 @@ def test_registered_sources_can_be_managed_before_runtime_selection(runtime, mon
151
162
  assert runtime.client.get("/runtime-source-candidates/").status_code == 404
152
163
 
153
164
 
154
- def test_password_registration_and_rotation_store_only_secret_uid_before_switch(runtime, monkeypatch):
165
+ def test_local_password_registration_and_rotation_use_local_credentials(runtime, monkeypatch):
155
166
  from mainsequence.client import Secret
156
167
 
157
- from metatables.api.app.source_registrations import registry_path
158
168
  created = []
159
169
  from metatables.api.backend.integrations.local_credentials import LocalCredentialStore
160
170
  original_create = LocalCredentialStore.create
@@ -173,10 +183,9 @@ def test_password_registration_and_rotation_store_only_secret_uid_before_switch(
173
183
  response = runtime.client.patch(f"/data-sources/{uid}/", json={"password": "second-password"})
174
184
  assert response.status_code == 200, response.text
175
185
  assert response.json()["configuration"]["password_secret_uid"] == str(created[1][0])
176
- saved = registry_path(SimpleNamespace(app=runtime.app)).read_text()
177
- assert "first-password" not in saved and "second-password" not in saved
186
+ # Local registrations stay in the local catalog; nothing reaches the Hosted registry.
187
+ assert not (runtime.root / ".local/runtime-source-candidates.json").exists()
178
188
  assert created[0][1] == "first-password" and created[1][1] == "second-password"
179
- assert "password" not in json.loads(saved)[uid]
180
189
 
181
190
 
182
191
  def test_disabled_capability_and_unsupervised_process_cannot_switch(runtime):
@@ -225,8 +225,7 @@ def test_management_is_admin_only_and_no_plaintext_configuration(registry):
225
225
  listed = next(row for row in listing.json()['results'] if row['uid'] == uid)
226
226
  assert listed['configuration'] is None and not listed['can_manage']
227
227
  assert f.http.get(f'/data-sources/{uid}/summary/').status_code == 200
228
- for path in ('/runtime-bootstrap/select/', '/runtime-bootstrap/hosted/select/'):
229
- assert f.http.post(path, json={'source_uid': uid}).status_code == 403
228
+ assert f.http.post('/runtime-bootstrap/select/', json={'source_uid': uid}).status_code == 403
230
229
  assert f.http.patch(f'/data-sources/{uid}/', json={'display_name': 'stolen'}).status_code == 403
231
230
  assert f.http.delete(f'/data-sources/{uid}/').status_code == 403
232
231
  # Creator identity does not grant access after admin rights are removed.
@@ -127,22 +127,23 @@ def test_switch_local_hosted_and_back_restarts_worker_and_preserves_stores(tmp_p
127
127
  local = client.get("/runtime-context/").json()
128
128
  assert local["dialect"] == "sqlite"
129
129
  original_pid = workers[-1].pid
130
+ # Hosted starts uninitialized; its DataSource is registered and
131
+ # selected there, never prepared from Local.
132
+ switched = post_when_idle("/runtime-mode/", json={"mode": "hosted"})
133
+ assert switched.status_code == 202, switched.text
134
+ hosted = ready(False, local["runtime_instance_id"])
135
+ assert hosted["bootstrap"]["candidate"] is None
136
+ assert workers[-1].pid != original_pid
137
+ assert client.get("/data-sources/", headers={"X-MetaTables-Runtime-Instance": local["runtime_instance_id"]}).status_code == 409
130
138
  from sqlalchemy.engine import make_url
131
139
  parsed = make_url(catalog)
132
140
  registered = post_when_idle("/data-sources/", json={"display_name": "Hosted runtime", "class_type": "postgresql", "configuration": {
133
141
  "host": parsed.host, "port": parsed.port, "database_name": parsed.database, "database_user": parsed.username, "ssl_mode": "disable", "password_secret_uid": str(uuid4())}})
134
142
  assert registered.status_code == 201, registered.text
135
- response = post_when_idle("/runtime-bootstrap/hosted/select/", json={"source_uid": registered.json()["uid"]})
143
+ response = post_when_idle("/runtime-bootstrap/select/", json={"source_uid": registered.json()["uid"]})
136
144
  assert response.status_code == 200, response.text
137
145
  assert response.json()["status"] == "migration_required"
138
- assert client.get("/runtime-context/").json()["data_source"] == local["data_source"]
139
- assert workers[-1].pid == original_pid
140
- switched = post_when_idle("/runtime-mode/", json={"mode": "hosted"})
141
- assert switched.status_code == 202, switched.text
142
- hosted = ready(False, local["runtime_instance_id"])
143
- assert hosted["bootstrap"]["candidate"]["display_name"] == "Hosted runtime"
144
- assert workers[-1].pid != original_pid
145
- assert client.get("/data-sources/", headers={"X-MetaTables-Runtime-Instance": local["runtime_instance_id"]}).status_code == 409
146
+ assert response.json()["candidate"]["display_name"] == "Hosted runtime"
146
147
  response = post_when_idle("/runtime-bootstrap/migrate/", timeout=30)
147
148
  assert response.status_code == 200, response.text
148
149
  hosted = client.get("/runtime-context/").json()
@@ -154,18 +155,13 @@ def test_switch_local_hosted_and_back_restarts_worker_and_preserves_stores(tmp_p
154
155
  assert post_when_idle("/runtime-mode/", json={"mode": "local"}).status_code == 202
155
156
  back = ready(True, hosted["runtime_instance_id"])
156
157
  assert back["data_source"]["uid"] == local["data_source"]["uid"]
157
- # Saved registrations remain selectable across runtime switches.
158
- # Only the local SQLite source is the active default on return.
158
+ # Each mode lists only its own registrations.
159
159
  sources = client.get("/data-sources/").json()["results"]
160
- assert {row["uid"] for row in sources} == {
161
- local["data_source"]["uid"], registered.json()["uid"], hosted_uid,
162
- }
163
- assert [row["uid"] for row in sources if row["is_default"]] == [
164
- local["data_source"]["uid"]
165
- ]
160
+ assert [row["uid"] for row in sources] == [local["data_source"]["uid"]]
166
161
  assert post_when_idle("/runtime-mode/", json={"mode": "hosted"}).status_code == 202
167
162
  ready(False, back["runtime_instance_id"])
168
163
  assert client.get(f"/data-sources/{hosted_uid}/").status_code == 200
164
+ assert client.get(f"/data-sources/{registered.json()['uid']}/").status_code == 200
169
165
  deadline = time.monotonic() + 2
170
166
  while json.loads(supervisor.selection.read_text())["mode"] != "hosted" and time.monotonic() < deadline:
171
167
  time.sleep(.02)