mainsequence-metatable 0.1.8.dev16__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.
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-local-development/SKILL.md +9 -5
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-meta-tables/SKILL.md +9 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-migrations/SKILL.md +4 -3
- {mainsequence_metatable-0.1.8.dev16/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8.dev18}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +82 -10
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-database-enforced-table-access.md +15 -4
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0009-shared-credential-store.md +15 -7
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +27 -0
- mainsequence_metatable-0.1.8.dev18/docs/adr/api/0015-timescale-compression-and-retention-policies.md +192 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/index.md +3 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/data-sources.md +37 -39
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/openapi.json +764 -135
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/overview.md +12 -5
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/reference.md +3 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/tables-and-migrations.md +2 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/time-index-and-updates.md +34 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/local-storage.md +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/query-and-mutate.md +2 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/tutorial.md +2 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/architecture.md +18 -13
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/data-sources.md +17 -17
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/identity-and-scope.md +4 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/database-backends.md +2 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/README.md +4 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/index.md +4 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/catalog-migrations.md +46 -36
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/configuration.md +13 -8
- mainsequence_metatable-0.1.8.dev18/docs/operations/hosted-runtime.md +189 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/local-runtime.md +19 -17
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/run-history.md +4 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/run-logs.md +2 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/reference/capabilities.md +4 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/reference/cli.md +2 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/security/index.md +11 -7
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/security/permissions.md +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/mkdocs.yml +1 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/SOURCES.txt +8 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/bootstrap.py +64 -111
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/configuration.py +73 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/main.py +2 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/data_sources.py +13 -74
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/managed_finalize.py +20 -4
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/migration_connection.py +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/runtime_context.py +2 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_registration.py +6 -4
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/routes/timescale_policies.py +295 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/runtime.py +5 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/runtime_control.py +26 -5
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/app/runtime_database.py +121 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -11
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +273 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/postgresql_access.py +88 -98
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/backends/timescale.py +379 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/storage_layouts.py +0 -6
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +42 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/register_catalog.py +0 -4
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/models.py +1 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/physical_operations.py +2 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_response.py +5 -1
- mainsequence_metatable-0.1.8.dev18/src/metatables/api/metatables/configuration.yaml +12 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/app.py +7 -22
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/endpoint.py +2 -4
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/README.md +4 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/__init__.py +0 -3
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/models.py +51 -6
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime_contract.py +3 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_data_source_identity.py +35 -40
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_bootstrap.py +10 -10
- mainsequence_metatable-0.1.8.dev18/tests/auth/test_runtime_database.py +123 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_scaffold.py +11 -25
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_selection.py +68 -41
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_migration.py +2 -2
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/capabilities.json +38 -6
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/database_operations.json +0 -9
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_catalog_contract.py +1 -1
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_runtime_bootstrap.py +69 -48
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_runtime_and_temporal.py +9 -9
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_api_endpoint.py +1 -14
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_data_source_registry.py +2 -9
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_runtime_transition.py +36 -18
- mainsequence_metatable-0.1.8.dev18/tests/e2e/test_runtime_upgrade.py +71 -0
- mainsequence_metatable-0.1.8.dev18/tests/e2e/test_timescale_policies_client_api.py +214 -0
- mainsequence_metatable-0.1.8.dev18/tests/operations/test_timescale_policies.py +104 -0
- mainsequence_metatable-0.1.8.dev16/docs/operations/hosted-runtime.md +0 -113
- mainsequence_metatable-0.1.8.dev16/src/metatables/api/app/configuration.py +0 -36
- mainsequence_metatable-0.1.8.dev16/src/metatables/api/app/source_registrations.py +0 -219
- mainsequence_metatable-0.1.8.dev16/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -657
- mainsequence_metatable-0.1.8.dev16/src/metatables/api/metatables/configuration.yaml +0 -1
- mainsequence_metatable-0.1.8.dev16/tests/e2e/test_runtime_upgrade.py +0 -55
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/LICENSE +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → mainsequence_metatable-0.1.8.dev18}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.8.dev16 → 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
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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.
|
|
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
|
-
|
|
39
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
|
@@ -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
|
|
@@ -174,12 +238,12 @@ never activates a partially initialized runtime. A database already initialized
|
|
|
174
238
|
and compatible can be selected without running migrations.
|
|
175
239
|
|
|
176
240
|
Amended 2026-10-02: before any runtime is registered, inspection also checks,
|
|
177
|
-
read-only,
|
|
178
|
-
[ADR 0007](0007-database-enforced-table-access.md):
|
|
179
|
-
`
|
|
180
|
-
target incompatible, with each reason shown in Settings,
|
|
181
|
-
database half-initialized. A registered runtime is not
|
|
182
|
-
|
|
241
|
+
read-only, the login's prerequisites under
|
|
242
|
+
[ADR 0007](0007-database-enforced-table-access.md): `CREATEROLE`, and permission to
|
|
243
|
+
create the `metatables` schema and tables in the default schema. Unmet
|
|
244
|
+
prerequisites make the target incompatible, with each reason shown in Settings,
|
|
245
|
+
so setup never leaves a database half-initialized. A registered runtime is not
|
|
246
|
+
rechecked.
|
|
183
247
|
|
|
184
248
|
Settings, runtime context, mode selection and bootstrap actions do not depend on
|
|
185
249
|
catalog sessions or catalog memberships. They retain the existing request admission.
|
|
@@ -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
|
|
278
|
-
instance identity. Admin requests carry that identity so
|
|
279
|
-
|
|
280
|
-
context and remounts cached views.
|
|
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)
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
> conflicting application-migration execution and credential restrictions;
|
|
7
7
|
> governed API operations and MetaTables system migrations remain separate.
|
|
8
8
|
|
|
9
|
+
> Amendment (2026-10-02): MetaTables secures only what it owns: its `metatables`
|
|
10
|
+
> schema, the tables it manages and the roles it creates. Database-wide defaults
|
|
11
|
+
> and `PUBLIC` access to other owners' objects, including extensions and other
|
|
12
|
+
> applications sharing the database, are the database administrator's
|
|
13
|
+
> responsibility. The login needs `CREATEROLE` and permission to create the
|
|
14
|
+
> `metatables` schema and tables in the DataSource's default schema; it need not
|
|
15
|
+
> own the database.
|
|
16
|
+
|
|
9
17
|
|
|
10
18
|
Date: 2026-09-29
|
|
11
19
|
|
|
@@ -160,12 +168,14 @@ client.
|
|
|
160
168
|
- **Ownership.** Tables are owned by `mt_owner`, a role that cannot log in, because
|
|
161
169
|
an owner holds every privilege. The API's own role manages grants and schema
|
|
162
170
|
changes and never runs caller SQL.
|
|
163
|
-
- **Defaults.** PostgreSQL's default `PUBLIC`
|
|
164
|
-
|
|
171
|
+
- **Defaults.** On objects MetaTables owns, PostgreSQL's default `PUBLIC`
|
|
172
|
+
privileges are revoked, including for future tables and routines. Database-wide
|
|
173
|
+
defaults (connecting, creating objects and temporary tables) and other owners'
|
|
174
|
+
objects belong to the database administrator.
|
|
165
175
|
- **Privileged routines.** Restricted caller roles must not be able to execute
|
|
166
176
|
application routines with elevated owner privileges, including
|
|
167
177
|
`SECURITY DEFINER` routines. Initialization establishes this restriction for
|
|
168
|
-
|
|
178
|
+
the routines MetaTables owns, existing and future, covering direct grants, inherited
|
|
169
179
|
roles and `PUBLIC`. Revoking a direct User grant alone is insufficient if
|
|
170
180
|
another grant still permits execution. Schema changes and extension installation
|
|
171
181
|
preserve the restriction before exposing new or changed routines to callers.
|
|
@@ -261,7 +271,8 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
|
|
|
261
271
|
|
|
262
272
|
- The explorer can run any PostgreSQL query, and the API has no SQL parser left
|
|
263
273
|
to get wrong.
|
|
264
|
-
- The DataSource login needs `CREATEROLE
|
|
274
|
+
- The DataSource login needs `CREATEROLE` and the right to create the `metatables`
|
|
275
|
+
schema; it does not need to own the database.
|
|
265
276
|
- Physical table names become visible to explorer users.
|
|
266
277
|
- Cascading foreign keys are unavailable where the explorer is enabled.
|
|
267
278
|
- Team membership reaches the database at the pace of the existing one-hour
|
|
@@ -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
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
mainsequence_metatable-0.1.8.dev18/docs/adr/api/0015-timescale-compression-and-retention-policies.md
ADDED
|
@@ -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;
|
|
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
|
|
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. |
|