mainsequence-metatable 0.1.8.dev17__tar.gz → 0.1.8.dev18__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 (536) hide show
  1. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-local-development/SKILL.md +9 -5
  2. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-meta-tables/SKILL.md +9 -2
  3. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-migrations/SKILL.md +4 -3
  4. {mainsequence_metatable-0.1.8.dev17/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev18}/PKG-INFO +1 -1
  5. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +76 -4
  6. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0009-shared-credential-store.md +15 -7
  7. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +27 -0
  8. mainsequence_metatable-0.1.8.dev18/docs/adr/api/0015-timescale-compression-and-retention-policies.md +192 -0
  9. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/index.md +3 -2
  10. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/data-sources.md +28 -23
  11. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/openapi.json +764 -135
  12. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/overview.md +12 -5
  13. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/reference.md +3 -1
  14. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/tables-and-migrations.md +2 -1
  15. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/time-index-and-updates.md +34 -0
  16. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/local-storage.md +1 -1
  17. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/query-and-mutate.md +2 -1
  18. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/tutorial.md +2 -1
  19. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/architecture.md +18 -13
  20. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/data-sources.md +17 -17
  21. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/identity-and-scope.md +4 -3
  22. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/database-backends.md +2 -2
  23. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/README.md +4 -3
  24. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/index.md +4 -3
  25. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/catalog-migrations.md +46 -36
  26. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/configuration.md +13 -8
  27. mainsequence_metatable-0.1.8.dev18/docs/operations/hosted-runtime.md +189 -0
  28. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/local-runtime.md +19 -17
  29. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/run-history.md +4 -3
  30. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/run-logs.md +2 -2
  31. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/reference/capabilities.md +4 -2
  32. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/reference/cli.md +2 -2
  33. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/security/index.md +11 -7
  34. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/security/permissions.md +1 -1
  35. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/mkdocs.yml +1 -0
  36. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/pyproject.toml +1 -1
  37. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  38. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/SOURCES.txt +8 -1
  39. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/bootstrap.py +64 -111
  40. mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/configuration.py +73 -0
  41. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/main.py +2 -0
  42. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/data_sources.py +13 -74
  43. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/managed_finalize.py +20 -4
  44. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/migration_connection.py +1 -1
  45. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/runtime_context.py +2 -1
  46. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_registration.py +6 -4
  47. mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/routes/timescale_policies.py +295 -0
  48. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/runtime.py +5 -2
  49. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/runtime_control.py +26 -5
  50. mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/runtime_database.py +121 -0
  51. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -11
  52. mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +273 -0
  53. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/postgresql_access.py +8 -1
  54. mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/backends/timescale.py +379 -0
  55. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/storage_layouts.py +0 -6
  56. mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +42 -0
  57. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/register_catalog.py +0 -4
  58. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/models.py +1 -2
  59. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/physical_operations.py +2 -2
  60. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_response.py +5 -1
  61. mainsequence_metatable-0.1.8.dev18/src/metatables/api/metatables/configuration.yaml +12 -0
  62. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/app.py +7 -22
  63. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/endpoint.py +2 -4
  64. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/README.md +4 -3
  65. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/__init__.py +0 -3
  66. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/models.py +51 -6
  67. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime_contract.py +3 -1
  68. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_data_source_identity.py +16 -40
  69. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_bootstrap.py +10 -10
  70. mainsequence_metatable-0.1.8.dev18/tests/auth/test_runtime_database.py +123 -0
  71. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_scaffold.py +11 -25
  72. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_selection.py +68 -41
  73. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_migration.py +2 -2
  74. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/capabilities.json +38 -6
  75. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/database_operations.json +0 -9
  76. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_catalog_contract.py +1 -1
  77. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_runtime_bootstrap.py +69 -48
  78. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_runtime_and_temporal.py +9 -9
  79. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_api_endpoint.py +1 -14
  80. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_data_source_registry.py +2 -9
  81. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_runtime_transition.py +36 -18
  82. mainsequence_metatable-0.1.8.dev18/tests/e2e/test_runtime_upgrade.py +71 -0
  83. mainsequence_metatable-0.1.8.dev18/tests/e2e/test_timescale_policies_client_api.py +214 -0
  84. mainsequence_metatable-0.1.8.dev18/tests/operations/test_timescale_policies.py +104 -0
  85. mainsequence_metatable-0.1.8.dev17/docs/operations/hosted-runtime.md +0 -113
  86. mainsequence_metatable-0.1.8.dev17/src/metatables/api/app/configuration.py +0 -36
  87. mainsequence_metatable-0.1.8.dev17/src/metatables/api/app/source_registrations.py +0 -219
  88. mainsequence_metatable-0.1.8.dev17/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -657
  89. mainsequence_metatable-0.1.8.dev17/src/metatables/api/metatables/configuration.yaml +0 -1
  90. mainsequence_metatable-0.1.8.dev17/tests/e2e/test_runtime_upgrade.py +0 -55
  91. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  92. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  93. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/.mainsequence/workflows/metatables-api.yaml +0 -0
  94. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/LICENSE +0 -0
  95. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/MANIFEST.in +0 -0
  96. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/README.md +0 -0
  97. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/alembic.ini +0 -0
  98. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/api/metatables/main.py +0 -0
  99. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/compose.database-tests.yml +0 -0
  100. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  101. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  102. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  103. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  104. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  105. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  106. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  107. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  108. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  109. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  110. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  111. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  112. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  113. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/api/authentication-and-errors.md +0 -0
  114. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/assets/branding/metatables.svg +0 -0
  115. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/assets/diagrams/local-client-experience.svg +0 -0
  116. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/bounded-transfers.md +0 -0
  117. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/build-an-updater.md +0 -0
  118. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/define-and-migrate-tables.md +0 -0
  119. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/installation-and-connection.md +0 -0
  120. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/quickstart.md +0 -0
  121. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/read-existing-time-index-tables.md +0 -0
  122. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/register-existing-tables.md +0 -0
  123. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/client/upgrade-legacy-app.md +0 -0
  124. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/permissions-namespaces-labels.md +0 -0
  125. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/runs-and-execution-graphs.md +0 -0
  126. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  127. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/time-index-tables-and-updates.md +0 -0
  128. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/architecture-and-boundaries.md +0 -0
  129. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/documentation.md +0 -0
  130. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/releasing.md +0 -0
  131. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/testing.md +0 -0
  132. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/README.md +0 -0
  133. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/__init__.py +0 -0
  134. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/bounded_reader.py +0 -0
  135. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/README.md +0 -0
  136. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/mssql.json +0 -0
  137. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/mysql.json +0 -0
  138. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/postgresql.json +0 -0
  139. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/register.py +0 -0
  140. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/external_table.py +0 -0
  141. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/README.md +0 -0
  142. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/__init__.py +0 -0
  143. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/__main__.py +0 -0
  144. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/__init__.py +0 -0
  145. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/env.py +0 -0
  146. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/script.py.mako +0 -0
  147. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  148. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/tables.py +0 -0
  149. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/query.py +0 -0
  150. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/quickstart.py +0 -0
  151. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/reader.py +0 -0
  152. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/scripts/__init__.py +0 -0
  153. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/scripts/setup_metatables.py +0 -0
  154. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tables.py +0 -0
  155. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/__init__.py +0 -0
  156. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/__main__.py +0 -0
  157. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/data/README.md +0 -0
  158. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  159. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/frames.py +0 -0
  160. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/__init__.py +0 -0
  161. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/env.py +0 -0
  162. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/registry.py +0 -0
  163. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  164. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  165. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  166. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  167. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  168. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/operations.py +0 -0
  169. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/tables.py +0 -0
  170. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/updaters.py +0 -0
  171. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/examples/updater.py +0 -0
  172. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/operations/recovery-and-observability.md +0 -0
  173. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/reference/python.md +0 -0
  174. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/docs/security/ownership-and-sharing.md +0 -0
  175. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/__init__.py +0 -0
  176. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/build_reference.py +0 -0
  177. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_boundaries.py +0 -0
  178. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_client_api_coverage.py +0 -0
  179. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_distribution_sources.py +0 -0
  180. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_docs.py +0 -0
  181. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_examples_debug.py +0 -0
  182. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/check_project.py +0 -0
  183. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/dev_release_version.py +0 -0
  184. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/test_databases.py +0 -0
  185. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/scripts/test_postgresql.py +0 -0
  186. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/setup.cfg +0 -0
  187. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  188. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  189. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  190. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  191. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/__init__.py +0 -0
  192. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_admin_source.json +0 -0
  193. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_build.py +0 -0
  194. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_skill_bundle.py +0 -0
  195. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/__init__.py +0 -0
  196. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/__init__.py +0 -0
  197. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/__init__.py +0 -0
  198. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/boundary.py +0 -0
  199. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  200. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/local_actor.py +0 -0
  201. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/credential_admin.py +0 -0
  202. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/development.py +0 -0
  203. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/development_client.py +0 -0
  204. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/platform_cache.py +0 -0
  205. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/__init__.py +0 -0
  206. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/column_search.py +0 -0
  207. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/contract_validation.py +0 -0
  208. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/namespaces.py +0 -0
  209. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/run_logs.py +0 -0
  210. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/schema_graph.py +0 -0
  211. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/security.py +0 -0
  212. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_cascade.py +0 -0
  213. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_crud.py +0 -0
  214. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_delete.py +0 -0
  215. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_filter.py +0 -0
  216. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_import.py +0 -0
  217. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_introspection.py +0 -0
  218. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_patch.py +0 -0
  219. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_response.py +0 -0
  220. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_search_document.py +0 -0
  221. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_sql.py +0 -0
  222. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  223. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  224. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  225. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  226. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_batch.py +0 -0
  227. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  228. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_constants.py +0 -0
  229. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_crud.py +0 -0
  230. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_details.py +0 -0
  231. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_graph.py +0 -0
  232. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  233. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_registration.py +0 -0
  234. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_runs.py +0 -0
  235. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_statistics.py +0 -0
  236. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/source_passwords.py +0 -0
  237. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/transfer.py +0 -0
  238. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/__init__.py +0 -0
  239. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/__init__.py +0 -0
  240. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/access.py +0 -0
  241. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  242. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  243. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  244. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  245. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  246. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  247. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  248. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  249. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  250. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  251. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  252. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  253. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  254. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  255. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  256. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  257. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  258. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  259. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  260. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog.py +0 -0
  261. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  262. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  263. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/contracts.py +0 -0
  264. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/hosted.py +0 -0
  265. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  266. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  267. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/native.py +0 -0
  268. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/operations.py +0 -0
  269. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/pages.py +0 -0
  270. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/registry.py +0 -0
  271. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  272. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/relational.py +0 -0
  273. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  274. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  275. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/streaming.py +0 -0
  276. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/__init__.py +0 -0
  277. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  278. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  279. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/values.py +0 -0
  280. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/__init__.py +0 -0
  281. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  282. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  283. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  284. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/label_rules.py +0 -0
  285. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  286. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/update_constants.py +0 -0
  287. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/__init__.py +0 -0
  288. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  289. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  290. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  291. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  292. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  293. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  294. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  295. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  296. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  297. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  298. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  299. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/__init__.py +0 -0
  300. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/env.py +0 -0
  301. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  302. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  303. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  304. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  305. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  306. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  307. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  308. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  309. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  310. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  311. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/__init__.py +0 -0
  312. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  313. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  314. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/create_table.py +0 -0
  315. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  316. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/import_relations.py +0 -0
  317. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  318. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  319. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/search_documents.py +0 -0
  320. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/__init__.py +0 -0
  321. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/cascade.py +0 -0
  322. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/catalog.py +0 -0
  323. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/database.py +0 -0
  324. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/grants.py +0 -0
  325. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/labels.py +0 -0
  326. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/locking.py +0 -0
  327. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/projections.py +0 -0
  328. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  329. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  330. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  331. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  332. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  333. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  334. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  335. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/updates.py +0 -0
  336. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  337. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  338. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/metatables/__init__.py +0 -0
  339. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/metatables/main.py +0 -0
  340. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/__init__.py +0 -0
  341. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/admin_install.py +0 -0
  342. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/filters.py +0 -0
  343. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/local.py +0 -0
  344. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/migrations.py +0 -0
  345. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/project.py +0 -0
  346. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/skills.py +0 -0
  347. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/__init__.py +0 -0
  348. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/mssql.py +0 -0
  349. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/v1.py +0 -0
  350. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/dtype_codec.py +0 -0
  351. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/README.md +0 -0
  352. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/__init__.py +0 -0
  353. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/bounded_reader.py +0 -0
  354. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/README.md +0 -0
  355. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/mssql.json +0 -0
  356. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/mysql.json +0 -0
  357. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/postgresql.json +0 -0
  358. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/register.py +0 -0
  359. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/external_table.py +0 -0
  360. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/README.md +0 -0
  361. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/__init__.py +0 -0
  362. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/__main__.py +0 -0
  363. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  364. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/env.py +0 -0
  365. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  366. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  367. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/tables.py +0 -0
  368. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/query.py +0 -0
  369. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/quickstart.py +0 -0
  370. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/reader.py +0 -0
  371. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/scripts/__init__.py +0 -0
  372. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  373. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tables.py +0 -0
  374. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/__init__.py +0 -0
  375. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/__main__.py +0 -0
  376. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/data/README.md +0 -0
  377. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  378. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/frames.py +0 -0
  379. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  380. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  381. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  382. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  383. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  384. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  385. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  386. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  387. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/operations.py +0 -0
  388. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/tables.py +0 -0
  389. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/updaters.py +0 -0
  390. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/updater.py +0 -0
  391. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/future_registry.py +0 -0
  392. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/hashing.py +0 -0
  393. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/instrumentation.py +0 -0
  394. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_connection.py +0 -0
  395. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_files.py +0 -0
  396. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_run_logs.py +0 -0
  397. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/log_contract.py +0 -0
  398. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/alembic.py +0 -0
  399. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/connection.py +0 -0
  400. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/env.py +0 -0
  401. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/provider.py +0 -0
  402. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/registry.py +0 -0
  403. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/runner.py +0 -0
  404. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/scaffold.py +0 -0
  405. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/__init__.py +0 -0
  406. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/env.py.mako +0 -0
  407. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/script.py.mako +0 -0
  408. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/tls.py +0 -0
  409. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/pydantic_metadata.py +0 -0
  410. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/run_logging.py +0 -0
  411. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime.py +0 -0
  412. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime_context.py +0 -0
  413. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/schema_names.py +0 -0
  414. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/sdk_compat.py +0 -0
  415. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/sqlalchemy_contracts.py +0 -0
  416. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/time_index_table_refs.py +0 -0
  417. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transfer.py +0 -0
  418. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transfer_contract.py +0 -0
  419. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transport.py +0 -0
  420. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/update_configuration_contract.py +0 -0
  421. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/__init__.py +0 -0
  422. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/configuration.py +0 -0
  423. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/dependencies.py +0 -0
  424. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/managers.py +0 -0
  425. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/namespacing.py +0 -0
  426. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/runner.py +0 -0
  427. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/updaters.py +0 -0
  428. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/utils.py +0 -0
  429. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/src/metatables/upload.py +0 -0
  430. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_caller_assertions.py +0 -0
  431. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_development_client.py +0 -0
  432. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_hosted_environment_target.py +0 -0
  433. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_local_mode.py +0 -0
  434. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_platform_fact_cache.py +0 -0
  435. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_storage_binding.py +0 -0
  436. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_source_passwords.py +0 -0
  437. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_catalog_foundation.py +0 -0
  438. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_contract_projection.py +0 -0
  439. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_database_config.py +0 -0
  440. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_index_statistics.py +0 -0
  441. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/conftest.py +0 -0
  442. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/client_signatures.json +0 -0
  443. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_bounded_transfer.py +0 -0
  444. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_compiler_runtime_source.py +0 -0
  445. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_relation_batching.py +0 -0
  446. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_relation_import.py +0 -0
  447. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_storage_layouts.py +0 -0
  448. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_table_contracts.py +0 -0
  449. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/Dockerfile +0 -0
  450. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/Dockerfile.dockerignore +0 -0
  451. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/__init__.py +0 -0
  452. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/conftest.py +0 -0
  453. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/__init__.py +0 -0
  454. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/env.py +0 -0
  455. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  456. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_api_contract.py +0 -0
  457. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_application_migration.py +0 -0
  458. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  459. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_credential_catalog.py +0 -0
  460. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_physical_contract.py +0 -0
  461. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_relation_import.py +0 -0
  462. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_sql_security.py +0 -0
  463. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_update_client.py +0 -0
  464. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_physical_operations.py +0 -0
  465. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_postgresql_operations.py +0 -0
  466. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/documentation/test_project_checks.py +0 -0
  467. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_admin_installation.py +0 -0
  468. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_application_owned_migrations.py +0 -0
  469. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_catalog_outage.py +0 -0
  470. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_api_contract.py +0 -0
  471. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_api_coverage.py +0 -0
  472. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_migration_scaffold.py +0 -0
  473. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_migration_tls.py +0 -0
  474. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_package.py +0 -0
  475. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_signatures.py +0 -0
  476. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_value_behaviors.py +0 -0
  477. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_actor_client_api.py +0 -0
  478. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_cli_workflow.py +0 -0
  479. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_client_selection.py +0 -0
  480. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  481. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_namespaces_admin_http.py +0 -0
  482. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_public_imports.py +0 -0
  483. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_remaining_client_routes.py +0 -0
  484. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_run_graphs.py +0 -0
  485. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_run_logs.py +0 -0
  486. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_sdk_local_startup.py +0 -0
  487. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_sqlite_runtime.py +0 -0
  488. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_delete_client_api.py +0 -0
  489. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_filter_client_api.py +0 -0
  490. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_introspection_client_api.py +0 -0
  491. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_patch_client_api.py +0 -0
  492. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_search_document_api.py +0 -0
  493. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_stats_api.py +0 -0
  494. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_update_pipeline.py +0 -0
  495. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_updates_http.py +0 -0
  496. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  497. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  498. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_batch_client_api.py +0 -0
  499. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  500. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  501. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  502. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_registration_client_api.py +0 -0
  503. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_documented_examples.py +0 -0
  504. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_postgresql_examples.py +0 -0
  505. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_setup_launch.py +0 -0
  506. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_tutorial.py +0 -0
  507. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_credential_store.py +0 -0
  508. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_data_source_rules.py +0 -0
  509. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_local_data_sources.py +0 -0
  510. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_local_run_logs.py +0 -0
  511. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_connection.py +0 -0
  512. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_sql.py +0 -0
  513. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_tables.py +0 -0
  514. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  515. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_source_validation.py +0 -0
  516. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_sqlite_operations.py +0 -0
  517. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/labels/test_labels.py +0 -0
  518. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_create_table_operation.py +0 -0
  519. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_create_table_postgres.py +0 -0
  520. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_physical_operation_journal.py +0 -0
  521. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_register_catalog.py +0 -0
  522. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_search_documents.py +0 -0
  523. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_client_skills.py +0 -0
  524. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_dev_release_version.py +0 -0
  525. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_distribution_sources.py +0 -0
  526. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_editable_build.py +0 -0
  527. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_installed_distribution.py +0 -0
  528. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_governed_sql_scope.py +0 -0
  529. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_local_actor_membership.py +0 -0
  530. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_migration_boundary.py +0 -0
  531. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_namespace_grants.py +0 -0
  532. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_security_api.py +0 -0
  533. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_body_filter.py +0 -0
  534. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_grants.py +0 -0
  535. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_queries.py +0 -0
  536. {mainsequence_metatable-0.1.8.dev17 → mainsequence_metatable-0.1.8.dev18}/uv.lock +0 -0
@@ -140,12 +140,16 @@ local rows, catalog UIDs, credentials and fixture data are not promoted by a swi
140
140
  When returning to the environment is part of the requested workflow:
141
141
 
142
142
  1. Finish local tests and stop active writers. In Admin **Settings → Runtime mode**,
143
- inspect the displayed hosted environment and choose the intended registered
144
- DataSource. Use **Switch to Hosted**. This changes the API worker and selected
145
- database; it does not copy or merge the local database. Leave local capability
146
- enabled if the developer needs to switch back later.
143
+ inspect the displayed hosted environment and use **Switch to Hosted**. Hosted
144
+ opens the runtime database the API's deployment declares, through the same
145
+ Environment Secret; there is no DataSource to choose and the launcher never
146
+ migrates it. This changes the API worker and database; it does not copy or merge
147
+ the local database. Leave local capability enabled if the developer needs to
148
+ switch back later.
147
149
  2. Re-read runtime status and verify `local_mode: false`, the intended verified
148
- hosted environment, the expected DataSource and readiness. The same local
150
+ hosted environment, the expected DataSource and readiness. `migration_required`
151
+ means the branch has system migrations the deployed API does not have yet; it
152
+ clears once that code is deployed. The same local
149
153
  connection command still reaches this supervised API; its `--local` flag alone
150
154
  does not prove SQLite. If the switch fails and the old worker is restored,
151
155
  report the actual mode instead of claiming the switch succeeded.
@@ -35,8 +35,9 @@ identity and Git source facts use SDK imports. Table operations use the client's
35
35
  with SQLite behind it; ordinary clients never open local table files. Local
36
36
  workspaces use one persistent SQLite database for system and user tables per
37
37
  checkout; Git branches share it.
38
- Settings explicitly initializes or selects the runtime DataSource in both modes;
39
- startup never runs Alembic. See `docs/operations/catalog-migrations.md`.
38
+ A hosted API's deployment declares and initializes its runtime DataSource; Local
39
+ Settings explicitly initializes or selects the SQLite file. Startup never runs
40
+ Alembic. See `docs/operations/catalog-migrations.md`.
40
41
 
41
42
  ## Authoring decisions
42
43
 
@@ -118,6 +119,12 @@ A null cutoff requires a scope. Do not replace that workflow with ad hoc SQL.
118
119
  Deletion/cascade requires edit access, relevant protection checks, and explicit
119
120
  cascade intent; it is not an administrator-role bypass or migration repair.
120
121
 
122
+ On a TimescaleDB DataSource, time-index tables are hypertables. Their compression
123
+ and retention policies are set only through `TimeIndexMetaTable.set_timescale_policies`
124
+ (Writer) and read with `get_timescale_policies`. Do not add policies to table
125
+ contracts or Alembic revisions; to keep them in code, call the client from a
126
+ bootstrap Job. Retention permanently drops older chunks, including backfills.
127
+
121
128
  ## Validation
122
129
 
123
130
  Check authored models, normalization, physical naming, FK targets, and time grain
@@ -34,9 +34,10 @@ finalize catalog bindings through the API. Use the
34
34
  [table skill](../metatables-meta-tables/SKILL.md) for contract design.
35
35
 
36
36
  Check `docs/reference/capabilities.md` and `metatables migrations --help` before
37
- promising a command. The API's own catalog migrations are a separate history that
38
- an admin runs from Settings; see `docs/operations/catalog-migrations.md`. They
39
- are not application-provider revisions.
37
+ promising a command. The API's own catalog migrations are a separate history: a
38
+ hosted API's deployment applies them before it rolls out, and Local mode runs them
39
+ from Settings; see `docs/operations/catalog-migrations.md`. They are not
40
+ application-provider revisions.
40
41
 
41
42
  ## Source and runtime context
42
43
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.8.dev17
3
+ Version: 0.1.8.dev18
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
@@ -30,6 +30,8 @@ Amended 2026-09-29: one enforced runtime binding and explicit bootstrap select o
30
30
  database for system and user tables.
31
31
  Amended 2026-10-02: each runtime mode lists and selects only its own DataSources,
32
32
  and inspection checks the login's prerequisites before setup.
33
+ Amended 2026-10-03: the deployment declares the hosted runtime database; Settings
34
+ is read-only in Hosted mode.
33
35
 
34
36
  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).
35
37
  The SDK prerequisite is implemented on `metatables_removal`; the current local
@@ -83,8 +85,67 @@ API requirement. The guides and examples describe the implemented shared path.
83
85
 
84
86
  ## Decision
85
87
 
88
+ ### The deployment declares the hosted runtime database (amended 2026-10-03)
89
+
90
+ Implemented 2026-10-03 for [MetaTables #13](https://github.com/mainsequence-projects/MetaTables/issues/13) in the API, the migration Job and the Admin.
91
+ The PostgreSQL transition test and the container suite were updated but not run;
92
+ hosted verification is pending.
93
+
94
+ Settings used to save the hosted selection in the database it pointed to, with a
95
+ pointer file on the pod. A restarted or additional pod lost that pointer. The
96
+ hosted runtime database is now declared by the deployment:
97
+
98
+ - **Declaration.** The API's `configuration.yaml`
99
+ (`metatables/api/metatables/configuration.yaml`) has a `runtime_database`
100
+ section with the engine, the name of the Environment Secret holding the
101
+ connection URI, the default schema, the TLS mode and optional certificate
102
+ Secret names. It holds names and settings, never secret values. Each branch
103
+ keeps its own file, so each Environment's deployment reads its own file and
104
+ Secret.
105
+ - **Secret.** The database administrator creates it in each Environment, for
106
+ example `postgresql://login:password@host:5432/database`. Host, port, database,
107
+ login and password come only from the URI, certificates only from the named
108
+ Secrets. The runtime DataSource's `password_secret_uid` is the URI Secret's UID
109
+ ([ADR 0009](0009-shared-credential-store.md)).
110
+ - **Deployment.** On every deployment the `migrate-system` Job reads the
111
+ declaration and the Secret. It checks the prerequisites, applies the system
112
+ migrations, registers the runtime DataSource and reapplies access setup
113
+ ([ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md)).
114
+ Pointing the Secret at another database follows the same procedure: that
115
+ database is initialized and becomes the runtime. Each database keeps its own
116
+ catalog, and nothing is transferred. When only the connection changes (host,
117
+ login, TLS), the deployment updates the registration.
118
+ - **API.** Every pod reads the same declaration and Secret at startup and takes
119
+ the runtime row from the catalog. It never runs DDL and writes no pointer, so
120
+ restarts and additional pods agree and report the same instance identity
121
+ ([MetaTables #14](https://github.com/mainsequence-projects/MetaTables/issues/14)).
122
+ A pod that starts on an unprepared database reports `migration_required` or
123
+ `registration_required` and serves no application operations. A Secret change
124
+ therefore takes effect on deployment.
125
+ - **Settings, Hosted mode.** Settings is read-only: it shows the declaration, the
126
+ resolved connection, the status and the revisions.
127
+ - Hosted `configure`, `migrate` and `activate` answer 409.
128
+ - `select` and the pre-activation Hosted registry
129
+ (`runtime-source-candidates.json`, `hosted_source_uid`) are removed.
130
+ - Hosted DataSources are registered only in the active runtime catalog.
131
+ - Settings does not show the migration Job's result; the deployment run
132
+ reports a failed Job.
133
+ - **Developer launcher, Hosted mode.** The launcher reads the packaged deployment
134
+ file and the same Secret, so it uses the same database; its own
135
+ `configuration.yaml` only grants the developer capability. It never migrates. A
136
+ newer local migration reports `migration_required` until it is deployed.
137
+
138
+ Local mode is unchanged. For Hosted mode, this supersedes three earlier
139
+ decisions:
140
+ - the Hosted registry and selection in the 2026-10-02 amendment;
141
+ - Settings-initiated hosted initialization in the 2026-09-29 bootstrap amendment;
142
+ - the persisted hosted selection in the 2026-09-29 bootstrap amendment.
143
+
86
144
  ### Each runtime mode selects only its own DataSources (amended 2026-10-02)
87
145
 
146
+ Hosted rows are superseded by the 2026-10-03 amendment above: Hosted has no
147
+ registry before activation and no selection.
148
+
88
149
  Implemented 2026-10-02 in the API and Admin; the PostgreSQL runtime-transition test
89
150
  was updated but not run.
90
151
 
@@ -160,6 +221,9 @@ binding, automatic local catalog upgrades, and the requirement that switching to
160
221
  Hosted already have a migrated catalog. It corrects this ADR's runtime lifecycle;
161
222
  it does not introduce a second execution architecture.
162
223
 
224
+ For Hosted mode, the 2026-10-03 amendment replaces Settings selection and
225
+ initialization with the deployment's declaration and migration Job.
226
+
163
227
  Settings selects the runtime mode and its DataSource. That database contains both
164
228
  MetaTables' system tables and user tables. Local selects one persistent SQLite
165
229
  file; Hosted selects PostgreSQL/TimescaleDB. MySQL and MSSQL remain connection-only
@@ -274,10 +338,18 @@ The supervisor passes mode and transport parameters explicitly to the child;
274
338
  `METATABLES_LOCAL_RUNTIME` has no authority. Database credentials remain private
275
339
  deployment inputs and are never stored in YAML or sent to Vite.
276
340
 
277
- The runtime descriptor reports capability, switching availability and a fresh
278
- instance identity. Admin requests carry that identity so stale requests are
279
- rejected after a restart. During transition the UI blocks work, reloads runtime
280
- context and remounts cached views. A mode change affects the entire developer API
341
+ The runtime descriptor reports capability, switching availability and an
342
+ instance identity. Admin requests carry that identity so requests made against a
343
+ previous runtime are rejected. During transition the UI blocks work, reloads runtime
344
+ context and remounts cached views.
345
+
346
+ Amended 2026-10-03 for [MetaTables #14](https://github.com/mainsequence-projects/MetaTables/issues/14):
347
+ the instance identity names the runtime binding, not the process. It is derived
348
+ from the mode, the runtime database's public configuration, the runtime
349
+ DataSource UID, its activation and the catalog revision. Every process and pod
350
+ serving one binding reports the same identity, so an API deploy or restart keeps
351
+ open pages valid; selecting another DataSource, activating it, applying
352
+ migrations or switching mode changes it. A mode change affects the entire developer API
281
353
  instance, never an individual user's view of a shared service.
282
354
 
283
355
  ### Enforced runtime binding (amended 2026-09-29)
@@ -9,6 +9,10 @@
9
9
 
10
10
  Date: 2026-09-30
11
11
 
12
+ Amended 2026-10-03 ([MetaTables #13](https://github.com/mainsequence-projects/MetaTables/issues/13)): the hosted runtime login's password comes from the
13
+ URI Secret that the deployment declares. See
14
+ [Bootstrap, restart and lifecycle](#bootstrap-restart-and-lifecycle).
15
+
12
16
  Status: Accepted. Implemented by the API CredentialStore providers and catalog
13
17
  revision `0006_local_credentials`.
14
18
 
@@ -131,17 +135,21 @@ coverage must additionally run on its corresponding host.
131
135
  ### Bootstrap, restart and lifecycle
132
136
 
133
137
  Local SQLite opens using the existing API-owned file binding, before credential
134
- lookup. Hosted bootstrap resolves the selected connection's UUID through SDK
135
- Secrets before opening the catalog. Its credential never depends on opening the
136
- database that needs that password. Saved selection JSON holds only public
137
- settings and UUID references.
138
+ lookup. Hosted bootstrap reads the Environment Secret named by
139
+ `runtime_database.uri_secret` (amended 2026-10-03). It reads the Secret by name
140
+ through the SDK before opening the catalog. The login and password come from that
141
+ URI, and the runtime DataSource references the Secret's UID as
142
+ `password_secret_uid`. The hosted store serves that UID only as the database
143
+ password and refuses to delete it. Every other reference still resolves through
144
+ SDK Secrets by UID. The credential never depends on opening the database that
145
+ needs it. Local selection JSON holds only public settings and UUID references.
138
146
 
139
147
  A fresh local catalog must receive explicit system migrations before saving
140
148
  sources/credentials. Local saves never substitute JSON for encrypted SQL storage.
141
149
  Previously saved local candidate metadata can be materialized by explicit setup,
142
- retaining DataSource UIDs. Hosted pre-catalog registration continues to use SDK
143
- Secrets and its existing metadata registry; it becomes the runtime row during
144
- explicit setup. Startup never silently applies migrations.
150
+ retaining DataSource UIDs. Hosted has no pre-catalog registration: the
151
+ deployment's migration Job registers the declared runtime, and other hosted
152
+ sources are registered in its catalog. Startup never silently applies migrations.
145
153
 
146
154
  `metatables credentials` provides admin-only local operations:
147
155
 
@@ -3,6 +3,8 @@
3
3
  Date: 2026-10-02
4
4
 
5
5
  Status: Accepted. Implemented on `development`; hosted verification pending.
6
+ Amended 2026-10-03 ([MetaTables #13](https://github.com/mainsequence-projects/MetaTables/issues/13)): the Job reads the declared runtime database itself
7
+ and initializes it on the first deployment.
6
8
 
7
9
  Owners: MetaTables API. Main Sequence owns Job execution, images, deployment and
8
10
  platform authentication.
@@ -20,6 +22,31 @@ its API serves.
20
22
 
21
23
  ## Decision
22
24
 
25
+ ### The Job prepares the declared database (amended 2026-10-03)
26
+
27
+ The Job no longer reads the running API. `metatables runtime upgrade` loads
28
+ `runtime_database` from the candidate image's `configuration.yaml` and the
29
+ Environment Secret it names ([ADR 0001](0001-unified-api-storage-and-local-sqlite.md)).
30
+ Every run executes the same steps:
31
+
32
+ 1. Check that the login can secure the database (ADR 0007 prerequisites).
33
+ 2. Apply the system migrations.
34
+ 3. Register the runtime DataSource, or update its connection to the declaration.
35
+ 4. Reapply access setup. Per-User role passwords derive from the login password,
36
+ so a rotated password reaches them on the next deployment.
37
+
38
+ The first deployment therefore initializes the database. A missing declaration
39
+ or Secret, an unreachable database or unmet prerequisites fail the Job and block
40
+ the rollout. The deployment workflow is the authority, so no admin caller is
41
+ required. A new runtime DataSource records the Job's SDK user as its creator.
42
+ The Job prints `initialized`, `upgraded` or `up_to_date` with the revisions.
43
+
44
+ Settings' **Run MetaTables migrations** and `metatables runtime initialize` remain
45
+ for Local mode only. The original decision follows. The amendment supersedes
46
+ steps 1–2, the skip rules and the Settings initialization paragraph.
47
+
48
+ ### Original decision (2026-10-02)
49
+
23
50
  The deployment workflow upgrades the runtime from the candidate image before the
24
51
  rollout:
25
52
 
@@ -0,0 +1,192 @@
1
+ # ADR 0015: TimescaleDB compression and retention policies
2
+
3
+ Date: 2026-10-02
4
+
5
+ Status: Accepted.
6
+
7
+ Implementation status: Implemented on the `timescale-policies` branches of the API
8
+ and the Admin, with focused tests. TimescaleDB container verification is pending.
9
+
10
+ Owner: MetaTables API. The Admin owns the screens described here.
11
+
12
+ Related decisions: [ADR 0002: Table ownership](0002-application-administration-and-table-ownership.md),
13
+ [ADR 0007: Database-enforced access](0007-database-enforced-table-access.md) (amended
14
+ below), [ADR 0012: Safe retries](0012-bounded-data-transfer-and-safe-retries.md) and
15
+ [ADR 0013: Application-owned migrations](0013-application-owned-migrations.md).
16
+
17
+ ## Context
18
+
19
+ Time-index tables on `timescale_db` DataSources grow without bound. Users need to
20
+ compress older data and drop expired data on a schedule, without database access.
21
+
22
+ Source inspection on 2026-10-02 found:
23
+
24
+ - The Admin's Timescale Policies tab calls `GET/PATCH meta-tables/{uid}/policies`
25
+ and appears only when a table reports `capabilities.timescale_policies`. The API
26
+ provides neither, so the tab never appears.
27
+ - No current path creates hypertables. `storage_layout.partitioning.strategy`
28
+ accepts `timescale_hypertable`, but only the legacy
29
+ `create_multi_index_table_for_metadata` calls `create_hypertable`. Timescale
30
+ policies require hypertables.
31
+ - The legacy policy helpers in `adapters/maintenance/timescaledb.py` have no route
32
+ callers. They sleep between steps, remove and re-add policies in separate
33
+ commits, and some build SQL with f-strings.
34
+ - TimescaleDB creates a policy job owned by the hypertable owner and refuses to
35
+ create it when that role lacks `LOGIN`. ADR 0007 makes `mt_owner`, a `NOLOGIN`
36
+ role, the owner of every managed table.
37
+
38
+ ## Decision
39
+
40
+ ### Core model
41
+
42
+ **TimescaleDB stores the policy; MetaTables keeps no copy.** A policy is a
43
+ Timescale background job. Timescale already schedules and runs it, so MetaTables
44
+ adds no scheduler and no policy table. The API authorizes in the catalog, reads
45
+ jobs from `timescaledb_information`, and writes with Timescale's policy functions.
46
+
47
+ Policies are set only through the API and the Admin. An application that wants
48
+ its policies in code runs a Job at bootstrap that calls the client method. Table
49
+ contracts and application migrations carry no policy fields.
50
+
51
+ | Policy | User sets | MetaTables derives |
52
+ | --- | --- | --- |
53
+ | Compression | `after`; optional `schedule_interval`, `initial_start`, `timezone` | `segmentby` = identity dimensions; `orderby` = time index `DESC` |
54
+ | Retention | `after`; optional `schedule_interval`, `initial_start`, `timezone` | — |
55
+
56
+ - `after: null` removes that policy. Removing compression leaves already
57
+ compressed chunks compressed.
58
+ - If both are set, retention `after` must be longer than compression `after`.
59
+ - Each change runs in one transaction with parameterized SQL and no sleeps.
60
+ - Dropping a table removes its jobs.
61
+ - TimescaleDB 2.11 or later is required, since it accepts inserts, updates,
62
+ deletes and upserts on compressed chunks. Uploads and tail deletes therefore
63
+ need no decompression step.
64
+
65
+ ### Eligible tables
66
+
67
+ A table can have policies when:
68
+
69
+ 1. its DataSource is `timescale_db`;
70
+ 2. it is a time-index table and not `external_registered`;
71
+ 3. its physical table is a hypertable; and
72
+ 4. the installed TimescaleDB version is supported.
73
+
74
+ Conditions 1–2 are catalog facts. They set `capabilities.timescale_policies` on
75
+ the table response without opening a database connection. Conditions 3–4 are
76
+ checked live when policies are read or written. Saving additionally requires a
77
+ `read_write` DataSource. Tables on any other engine never show policies.
78
+
79
+ ### Hypertables
80
+
81
+ On a `timescale_db` DataSource, managed finalization converts each new time-index
82
+ table into a hypertable on its time index (`create_hypertable`, `if_not_exists`,
83
+ `migrate_data`). Strategy `backend_default` means hypertable there; `none` opts
84
+ out. `partitioning.strategy` is the only switch, so the duplicate
85
+ `backend_hints.timescale.partitioning` hint and `time_index_table.partition_strategy`
86
+ are removed. Chunk interval stays at Timescale's default. Every unique constraint
87
+ must include the time index; the storage layout's `uniqueness` already does.
88
+
89
+ ### Authorization and ownership
90
+
91
+ Writer on the table is the only permission check: a Writer can finalize the
92
+ hypertable and set or remove both policies. Readers can view policies and job
93
+ status. Organization admins also see every job on the DataSource.
94
+
95
+ **Amendment to ADR 0007:** on `timescale_db` DataSources, hypertables are owned
96
+ by the API's database login instead of `mt_owner`, so their policy jobs run as
97
+ that login. Access setup leaves hypertable ownership unchanged instead of handing
98
+ the tables to `mt_owner`. The API's login already owns the database and is a member of
99
+ `mt_owner`, so this grants it nothing new. Reader/Writer grants, caller SQL roles,
100
+ application migrations and other engines are unchanged. If the DataSource later
101
+ uses a different login, existing jobs keep running as the old one until the
102
+ tables are reassigned.
103
+
104
+ Each policy change is recorded in the `physical_operation` journal as
105
+ `timescale_policy`, with the requesting User. System migration
106
+ `0009_timescale_policies` adds that kind, drops `time_index_table.partition_strategy`
107
+ and removes the Timescale hint from stored layouts; existing runtimes upgrade
108
+ through Settings.
109
+
110
+ ### API
111
+
112
+ ```text
113
+ TimescalePolicy { after, schedule_interval?, initial_start?, timezone? }
114
+ TimescaleTablePolicies { compression, retention,
115
+ eligibility { eligible, reason? }, read-only
116
+ jobs [TimescaleJob], read-only
117
+ compression_stats { before_bytes, after_bytes,
118
+ compressed_chunks, total_chunks } } read-only
119
+ TimescaleJob { job_id, kind, table_uid?, hypertable, scheduled, status,
120
+ last_run_status, last_successful_finish, next_start,
121
+ total_failures, last_error? }
122
+ ```
123
+
124
+ Intervals use PostgreSQL interval text such as `30 days`; the database validates them.
125
+
126
+ | Endpoint | Access | Behavior |
127
+ | --- | --- | --- |
128
+ | `GET /meta-tables/{uid}/timescale-policies/` | Reader | Policies, eligibility, jobs and compression stats. |
129
+ | `PUT /meta-tables/{uid}/timescale-policies/` | Writer | Replaces both policies; idempotent, safe to retry. Returns the GET body. |
130
+ | `GET /data-sources/{uid}/timescale-jobs/` | Any User who can see the source | Jobs for tables the caller can read; admins see all. `timescale_db` only. |
131
+
132
+ Errors: `404 timescale_policies_unavailable` for other engines,
133
+ `403 write_access_required`, `409 timescale_not_hypertable`,
134
+ `409 timescale_version_unsupported`, `409 timescale_extension_missing`, the existing
135
+ DataSource access codes for read-only or disabled sources, and `422` for an invalid
136
+ interval or timezone or `timescale_retention_not_after_compression`.
137
+
138
+ The Python client exposes `get_timescale_policies()` and `set_timescale_policies()`
139
+ on time-index tables.
140
+
141
+ ### Admin
142
+
143
+ - **Table → Timescale Policies** (the existing tab, reworked): Compression and
144
+ Retention cards, each with an on/off switch, an `after` number with a unit
145
+ (days, weeks, months), and an Advanced section for schedule, start and timezone.
146
+ Each card shows its job's status (Scheduled, Running, Failed, Paused), last
147
+ success, next run and failures. Compression shows size before and after.
148
+ Saving retention asks for confirmation, naming the cutoff date and stating that
149
+ older chunks are permanently dropped on every run and that older backfills are
150
+ dropped too. Readers see the tab read-only. An ineligible table shows the reason.
151
+ - **DataSource → Jobs** (`timescale_db` only): a table of jobs — table link,
152
+ policy, status, last run, next run, failures — with a failed-only filter and
153
+ Refresh, under Policies and Failed jobs counts.
154
+
155
+ Screens use Command Center SDK components and theme tokens only.
156
+
157
+ ### Monitoring
158
+
159
+ Monitoring is read on demand from `jobs`, `job_stats`, `job_errors` and
160
+ `hypertable_compression_stats`. MetaTables stores no job history, polls nothing,
161
+ and sends no alerts.
162
+
163
+ ## Consequences
164
+
165
+ - One source of truth: a policy changed directly in the database appears in the
166
+ Admin as it is.
167
+ - The legacy Timescale policy, decompression and hypertable helpers and their
168
+ runtime registrations are deleted.
169
+ - Retention is destructive and available to every Writer; the confirmation is
170
+ the safeguard.
171
+ - Policy jobs belong to the API's login. Rotating its password does not affect
172
+ them; no role gains `LOGIN`.
173
+
174
+ ## Alternatives considered
175
+
176
+ - **Policies in table contracts or migrations.** Two authorities would overwrite
177
+ each other. A bootstrap Job calling the API covers code-defined policies.
178
+ - **A catalog copy with a reconciler.** It duplicates Timescale's job store and
179
+ adds drift handling.
180
+ - **A MetaTables scheduler.** Timescale already schedules policy jobs.
181
+ - **`mt_owner` with `LOGIN` and no password.** It changes a login setting and
182
+ depends on the server never accepting passwordless authentication for that role.
183
+
184
+ ## Verification
185
+
186
+ Focused tests cover eligibility, interval validation, authorization, the request
187
+ contract and the derived compression settings, using a fake backend. The
188
+ TimescaleDB container suite, run only on explicit request, verifies hypertable
189
+ conversion, policy add/replace/remove, job ownership by the API's login, Reader and
190
+ Writer grants reaching chunks and compressed chunks, and upserts into compressed
191
+ chunks. Admin checks cover tab visibility, read-only mode and the retention
192
+ confirmation.
@@ -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; each runtime mode lists and selects only its own DataSources. |
26
+ | [0001: One API execution path with SQLite for local development](api/0001-unified-api-storage-and-local-sqlite.md) | Accepted and implemented; hosted declaration verification pending | Shared execution, API-owned local storage, SDK context dependency, and DuckDB removal; the deployment declares the hosted runtime database in `configuration.yaml` and an Environment Secret, and Settings is read-only in Hosted mode. |
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. |
@@ -34,4 +34,5 @@ decisions belong in the SDK repository and are linked as dependencies.
34
34
  | [0010: Import external tables and views](api/0010-import-external-tables-and-views.md) | Accepted; implemented (verification boundaries in ADR) | Shared backend discovery, metadata import/refresh, and bounded reads of external tables and views, preserving one runtime catalog and existing grants. |
35
35
  | [0012: Bounded data transfer, concurrent execution, and safe retries](api/0012-bounded-data-transfer-and-safe-retries.md) | Accepted; implemented; hosted engine verification pending | API/client row and byte budgets, incremental fetching, concurrent admission, durable chunk receipts, safe recovery, and required user documentation; independent of Artifacts and temporary URLs. |
36
36
  | [0013: Application-owned migrations](api/0013-application-owned-migrations.md) | Accepted and implemented | Application-side Alembic, environment database authority, API catalog integration and separate system migrations. |
37
- | [0014: System migrations in the deployment workflow](api/0014-main-sequence-release-jobs-and-production-migrations.md) | Accepted; implemented on development; hosted verification pending | A Main Sequence Job upgrades the active runtime from the candidate image before each API rollout. |
37
+ | [0014: System migrations in the deployment workflow](api/0014-main-sequence-release-jobs-and-production-migrations.md) | Accepted; implemented on development; hosted verification pending | A Main Sequence Job verifies, migrates and registers the declared runtime database from the candidate image before each API rollout, including the first. |
38
+ | [0015: TimescaleDB compression and retention policies](api/0015-timescale-compression-and-retention-policies.md) | Accepted; implemented on branch; TimescaleDB verification pending | Time-index tables on TimescaleDB become hypertables; Writers set compression and retention through the API/Admin; Timescale keeps the jobs, and the Admin shows their status. |
@@ -18,11 +18,12 @@ selected driver and runs `SELECT 1`. For `timescale_db`, that probe does not
18
18
  verify that the TimescaleDB extension is installed in the target database.
19
19
 
20
20
  The **Data Sources** section and `/data-sources/` expose one registration workflow.
21
- Hosted database DataSources can be registered before hosted runtime initialization.
22
- In Local mode, run system migrations in Settings first; remote registrations then
23
- use the same catalog table as the SQLite runtime row. The initialized
24
- workspace SQLite DataSource appears in the same list and remains runtime-managed
25
- with `can_manage: false`. Its storage and access cannot be changed through this API.
21
+ Registrations live only in the active runtime's catalog. Before the runtime is
22
+ active, the list is empty and registration is refused: Hosted answers 409 until the
23
+ deployment has initialized its runtime database, and Local requires system migrations
24
+ in Settings first. The runtime DataSource appears in the same list and remains
25
+ runtime-managed with `can_manage: false`. Its storage and access cannot be changed
26
+ through this API.
26
27
 
27
28
  External registration, editing, validation and removal require Organization admin
28
29
  access but do not depend on the runtime database's SQL permission initialization.
@@ -30,15 +31,14 @@ These operations do not reconcile runtime table grants. If database permissions
30
31
  need repair in Security, caller queries remain blocked while external DataSource
31
32
  management remains available.
32
33
 
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
- initialized. The API's private pre-initialization storage is an implementation detail.
34
+ Each runtime mode lists only its own catalog's registrations. The hosted runtime
35
+ DataSource is declared by the API's deployment, not chosen from this list; see
36
+ [hosted runtime](../operations/hosted-runtime.md).
38
37
 
39
38
  The active runtime DataSource hosts the system catalog and default application
40
- tables. It exposes `can_manage: false`; configuration, inspection and selection
41
- belong to Settings. Other registrations cannot replace it by setting `is_default`.
39
+ tables. It exposes `can_manage: false`; its configuration belongs to the deployment
40
+ declaration in Hosted and to Settings in Local. Other registrations cannot replace
41
+ it by setting `is_default`.
42
42
  Hosted mode rejects injected SQLite catalog records with
43
43
  `hosted_runtime_rejects_local_storage`. Execution remains bound to the selected
44
44
  runtime DataSource; registering another database does not enable its table operations.
@@ -99,9 +99,9 @@ check: explicitly validate after registration or a configuration change.
99
99
 
100
100
  All remote engines require `host`, `database_name`, and `database_user`.
101
101
  `password_secret_uid` is an opaque CredentialStore UUID: a local encrypted record
102
- or a hosted SDK Secret. It is required
103
- for the selected hosted runtime, including databases that otherwise permit
104
- passwordless administrator connections: caller credentials are derived from it.
102
+ or a hosted SDK Secret. For the hosted runtime it is the UID of the URI Secret,
103
+ whose login password is required even where the database permits passwordless
104
+ administrator connections: caller credentials are derived from it.
105
105
  The write-only password is a top-level request field, separate from persistent
106
106
  `configuration`. Plaintext passwords inside configuration, connection strings,
107
107
  arbitrary driver options, and unknown fields are rejected. Ports must be between
@@ -140,7 +140,7 @@ JSON bodies and a small client script. Those same bodies can be submitted to
140
140
  In MetaTables Admin, open **Data Sources → Register source**, choose an engine,
141
141
  fill in connection settings and Secret UIDs, and save. The form supplies the
142
142
  engine's defaults and only its supported TLS options. Open the saved source to
143
- validate, edit, disable, or remove it. Select the runtime DataSource in Settings. All hosted engines use the same bootstrap and table APIs.
143
+ validate, edit, disable, or remove it. The hosted runtime DataSource is declared by the deployment, not registered here. All hosted engines use the same bootstrap and table APIs.
144
144
 
145
145
  For a configuration edit, submit the complete configuration rather than a nested
146
146
  partial patch. The registration's engine cannot change; create another registration
@@ -151,8 +151,9 @@ for a different engine. The default schema of a referenced source cannot change.
151
151
  - `403`: another caller tried to manage the registration or replace its default.
152
152
  - `404`: the registration does not exist.
153
153
  - `409`: a source is disabled during validation, referenced/default during deletion,
154
- has a protected schema, or the
155
- operation conflicts with the runtime's fixed storage binding.
154
+ has a protected schema, the
155
+ operation conflicts with the runtime's fixed storage binding, or a Hosted
156
+ registration arrives before the runtime is active.
156
157
  - `422`: invalid engine, configuration, field type, or Secret UID.
157
158
  - `503`: connection or credential storage failed, including unavailable drivers,
158
159
  keys, catalog initialization or hosted Secrets. Runtime-context reports the
@@ -182,10 +183,12 @@ other caller sessions. SQL Server requires login/user/role administration,
182
183
  `VIEW DEFINITION` and grant management. Managed database services must provide
183
184
  these capabilities; missing permissions leave caller SQL disabled.
184
185
 
185
- Settings checks these PostgreSQL requirements as soon as you select a database
186
- without a MetaTables runtime, before any migration runs. A missing one shows
187
- **Needs attention** with the reason, for example `metatables_dev lacks CREATEROLE`;
188
- **Run MetaTables migrations** stays unavailable and nothing is written.
186
+ Preparing the database, its login and these privileges is the database
187
+ administrator's responsibility. On every deployment, the hosted migration Job checks
188
+ the PostgreSQL requirements before any migration runs: `CREATEROLE`, `CREATE` on the
189
+ database or ownership of the `metatables` schema, and `CREATE` on the default schema.
190
+ A missing one fails the Job with the reason, for example `metatables_dev lacks
191
+ CREATEROLE`; nothing is written and the API does not roll out.
189
192
 
190
193
  The database may be shared with other applications. Setup revokes `PUBLIC` access
191
194
  only on objects MetaTables owns: its `metatables` schema, the tables it manages and
@@ -207,4 +210,6 @@ Timescale extension operations check the installed extension in the selected
207
210
  PostgreSQL database at invocation. Registering `timescale_db` does not establish
208
211
  that the extension exists. User roles and grants authorize operations; database
209
212
  features are resolved by the bound backend. Responses contain no static
210
- `supports_*` list and the Admin detail view has no capability table.
213
+ `supports_*` list and the Admin detail view has no capability table. Time-index
214
+ tables on `timescale_db` are hypertables owned by the API's login and can carry
215
+ [compression and retention policies](time-index-and-updates.md#timescaledb-policies).