mainsequence-metatable 0.1.7.dev9__tar.gz → 0.1.8__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.7.dev9 → mainsequence_metatable-0.1.8}/.agents/skills/client/metatables-local-development/SKILL.md +9 -5
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/.agents/skills/client/metatables-meta-tables/SKILL.md +9 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/.agents/skills/client/metatables-migrations/SKILL.md +46 -11
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +26 -4
- mainsequence_metatable-0.1.8/.mainsequence/workflows/metatables-api.yaml +40 -0
- {mainsequence_metatable-0.1.7.dev9/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.8}/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +140 -4
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0007-database-enforced-table-access.md +15 -4
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0008-mysql-mssql-table-workflows.md +4 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0009-shared-credential-store.md +15 -7
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0013-application-owned-migrations.md +4 -0
- mainsequence_metatable-0.1.8/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +98 -0
- mainsequence_metatable-0.1.8/docs/adr/api/0015-timescale-compression-and-retention-policies.md +192 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/index.md +3 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/data-sources.md +38 -21
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/openapi.json +706 -129
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/overview.md +12 -5
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/reference.md +3 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/tables-and-migrations.md +2 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/time-index-and-updates.md +34 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/define-and-migrate-tables.md +20 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/installation-and-connection.md +5 -5
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/local-storage.md +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/query-and-mutate.md +2 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/tutorial.md +2 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/upgrade-legacy-app.md +14 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/architecture.md +18 -13
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/data-sources.md +17 -17
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/identity-and-scope.md +4 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/contributing/database-backends.md +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/contributing/releasing.md +7 -4
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/contributing/testing.md +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/README.md +4 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/index.md +4 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/catalog-migrations.md +46 -32
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/configuration.md +13 -8
- mainsequence_metatable-0.1.8/docs/operations/hosted-runtime.md +189 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/local-runtime.md +20 -10
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/run-history.md +4 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/run-logs.md +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/reference/capabilities.md +4 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/reference/cli.md +2 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/security/index.md +11 -7
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/security/permissions.md +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/mkdocs.yml +2 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/pyproject.toml +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8/src/mainsequence_metatable.egg-info}/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/mainsequence_metatable.egg-info/SOURCES.txt +10 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/bootstrap.py +99 -135
- mainsequence_metatable-0.1.8/src/metatables/api/app/configuration.py +73 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/main.py +2 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/data_sources.py +13 -68
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/managed_finalize.py +20 -4
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/migration_connection.py +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/runtime_context.py +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_registration.py +6 -4
- mainsequence_metatable-0.1.8/src/metatables/api/app/routes/timescale_policies.py +295 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/runtime.py +5 -14
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/runtime_control.py +26 -5
- mainsequence_metatable-0.1.8/src/metatables/api/app/runtime_database.py +121 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/access.py +4 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -11
- mainsequence_metatable-0.1.8/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +273 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/postgresql_access.py +96 -60
- mainsequence_metatable-0.1.8/src/metatables/api/backend/backends/timescale.py +379 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/contracts/storage_layouts.py +0 -6
- mainsequence_metatable-0.1.8/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +42 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/register_catalog.py +0 -4
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/models.py +1 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/physical_operations.py +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/table_response.py +5 -1
- mainsequence_metatable-0.1.8/src/metatables/api/metatables/configuration.yaml +12 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/app.py +20 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/endpoint.py +10 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/README.md +4 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/__init__.py +0 -3
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/models.py +51 -6
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/runtime_contract.py +3 -2
- mainsequence_metatable-0.1.8/tests/auth/test_data_source_identity.py +166 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_hosted_environment_target.py +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_runtime_bootstrap.py +10 -10
- mainsequence_metatable-0.1.8/tests/auth/test_runtime_database.py +123 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_runtime_scaffold.py +11 -25
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_runtime_selection.py +86 -50
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/catalog/test_migration.py +2 -2
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/capabilities.json +45 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/database_operations.json +0 -9
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_catalog_contract.py +1 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_runtime_bootstrap.py +69 -48
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_operations/test_runtime_and_temporal.py +9 -9
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_api_endpoint.py +9 -1
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_data_source_registry.py +2 -10
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_runtime_transition.py +38 -24
- mainsequence_metatable-0.1.8/tests/e2e/test_runtime_upgrade.py +71 -0
- mainsequence_metatable-0.1.8/tests/e2e/test_timescale_policies_client_api.py +214 -0
- mainsequence_metatable-0.1.8/tests/operations/test_timescale_policies.py +104 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/uv.lock +5 -5
- mainsequence_metatable-0.1.7.dev9/.mainsequence/workflows/metatables-api.yaml +0 -10
- mainsequence_metatable-0.1.7.dev9/docs/operations/hosted-runtime.md +0 -106
- mainsequence_metatable-0.1.7.dev9/src/metatables/api/app/configuration.py +0 -36
- mainsequence_metatable-0.1.7.dev9/src/metatables/api/app/source_registrations.py +0 -219
- mainsequence_metatable-0.1.7.dev9/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -657
- mainsequence_metatable-0.1.7.dev9/src/metatables/api/metatables/configuration.yaml +0 -1
- mainsequence_metatable-0.1.7.dev9/tests/auth/test_data_source_identity.py +0 -85
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/LICENSE +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.7.dev9 → mainsequence_metatable-0.1.8}/tests/permissions/test_table_queries.py +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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: metatables-migrations
|
|
3
|
-
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope, scaffolding, revision authoring, client-side execution, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
3
|
+
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope and placement, scaffolding, revision authoring, client-side execution, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# MetaTables client application migrations
|
|
@@ -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
|
|
|
@@ -55,9 +56,11 @@ are not application-provider revisions.
|
|
|
55
56
|
1. Define the SQLAlchemy models with stable, application-prefixed physical names.
|
|
56
57
|
2. Identify one provider module, migration namespace, target `MetaData`, model
|
|
57
58
|
registry, and prefixed Alembic version-table binding.
|
|
58
|
-
3.
|
|
59
|
+
3. Choose a provider module name that no other installed package uses (see
|
|
60
|
+
[Provider placement](#provider-placement)).
|
|
61
|
+
4. Keep provider scope explicit. Do not scan all imported models or installed
|
|
59
62
|
packages.
|
|
60
|
-
|
|
63
|
+
5. Scaffold only when the application has no provider yet:
|
|
61
64
|
|
|
62
65
|
```bash
|
|
63
66
|
metatables migrations scaffold \
|
|
@@ -65,13 +68,17 @@ are not application-provider revisions.
|
|
|
65
68
|
--module ledger.migrations \
|
|
66
69
|
--namespace ledger \
|
|
67
70
|
--base ledger.tables:Base \
|
|
68
|
-
--metadata ledger.tables:Base.metadata
|
|
71
|
+
--metadata ledger.tables:Base.metadata \
|
|
72
|
+
--alembic-version-table-name ledger__alembic_version
|
|
69
73
|
```
|
|
70
74
|
|
|
71
|
-
|
|
75
|
+
Always pass `--module` and `--alembic-version-table-name`. Without them the
|
|
76
|
+
scaffold creates a top-level `migrations` module and the shared
|
|
77
|
+
`public.alembic_version` table.
|
|
78
|
+
6. Edit the generated `registry.py` so it returns exactly the models owned by
|
|
72
79
|
that migration stream. Scaffolding alone selects no models and creates no
|
|
73
80
|
tables.
|
|
74
|
-
|
|
81
|
+
7. Create and review an Alembic revision (defaults to autogeneration):
|
|
75
82
|
|
|
76
83
|
```bash
|
|
77
84
|
metatables migrations revision \
|
|
@@ -83,6 +90,27 @@ Use `--source-root` and `--code-repository-root` when the application does not
|
|
|
83
90
|
use the default `src/` layout. Keep applied revisions immutable; add a new
|
|
84
91
|
revision for every later schema change.
|
|
85
92
|
|
|
93
|
+
## Provider placement
|
|
94
|
+
|
|
95
|
+
The application decides where its provider lives. The module name, however,
|
|
96
|
+
must not collide with any other package installed in the same environment. A
|
|
97
|
+
library's provider ships in its wheel and runs inside its consumers'
|
|
98
|
+
environments, next to providers from other libraries. When two packages install
|
|
99
|
+
the same top-level module, such as `migrations`, the later install overwrites
|
|
100
|
+
the earlier one's files. Imports then load the wrong provider, and Alembic reads
|
|
101
|
+
the wrong revisions.
|
|
102
|
+
|
|
103
|
+
- Place the provider under an import package the application owns, for example
|
|
104
|
+
`ledger.migrations`, or give it a name specific to the application, for example
|
|
105
|
+
`ledger_migrations`.
|
|
106
|
+
- Point `script_location` and `version_location_prefix` at that module. The
|
|
107
|
+
scaffold derives both from `--module`. A hand-written
|
|
108
|
+
`build_metatable_migration_provider` call must pass both, because the builder
|
|
109
|
+
defaults to `migrations:`.
|
|
110
|
+
- Before releasing a package that others install, list the built wheel with
|
|
111
|
+
`python -m zipfile -l <wheel>`. Its top-level entries must be packages the
|
|
112
|
+
application owns.
|
|
113
|
+
|
|
86
114
|
## Execute with the environment connection
|
|
87
115
|
|
|
88
116
|
After verifying the intended runtime, use the application's provider reference:
|
|
@@ -132,6 +160,13 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
132
160
|
|
|
133
161
|
- If provider loading fails, verify the import path, model registry, metadata,
|
|
134
162
|
version-table binding, and installed `metatables` version.
|
|
163
|
+
- If the provider loads another package's code or revisions, find the file that
|
|
164
|
+
its module resolves to with
|
|
165
|
+
`python -c "import importlib.util as u; print(u.find_spec('migrations').origin)"`,
|
|
166
|
+
replacing `migrations` with the provider module. A shared module name means
|
|
167
|
+
another install overwrote it. Move the provider as the
|
|
168
|
+
[legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md) describes;
|
|
169
|
+
do not edit files in `site-packages`.
|
|
135
170
|
- If reservation fails, compare provider scope and physical identities before
|
|
136
171
|
changing code. Do not create a second catalog row for the same table.
|
|
137
172
|
- If Alembic succeeds but finalization fails, physical DDL may already be
|
|
@@ -145,6 +180,6 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
145
180
|
|
|
146
181
|
## Validation
|
|
147
182
|
|
|
148
|
-
Verify provider scope, revision content, the selected environment
|
|
149
|
-
repeat execution, and final active bindings. Report separately what was checked
|
|
183
|
+
Verify provider scope and placement, revision content, the selected environment
|
|
184
|
+
connection, repeat execution, and final active bindings. Report separately what was checked
|
|
150
185
|
offline and what was exercised against a configured API.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: metatables-upgrade-legacy-app
|
|
3
|
-
description: "Upgrade consuming applications from MainSequence 8.x MetaTables or older extracted clients to the installed metatables package. Use for legacy imports, removed SQL scopes, repository compilers
|
|
3
|
+
description: "Upgrade consuming applications from MainSequence 8.x MetaTables or older extracted clients to the installed metatables package. Use for legacy imports, removed SQL scopes, repository compilers, application migration-provider integration and provider modules that collide with other installed packages. Excludes MetaTables client/API implementation and ordinary schema revision authoring."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Upgrade a legacy MetaTables application
|
|
@@ -58,11 +58,33 @@ Read `docs/client/query-and-mutate.md` for current query behavior and
|
|
|
58
58
|
|
|
59
59
|
## Upgrade application migration integration
|
|
60
60
|
|
|
61
|
-
Keep the existing provider package, namespace, model registry,
|
|
62
|
-
binding and applied revision history. Update bootstrap/import wiring
|
|
63
|
-
installed client's public migration interfaces. Do not scaffold a replacement
|
|
61
|
+
Keep the existing provider `package=` value, namespace, model registry,
|
|
62
|
+
version-table binding and applied revision history. Update bootstrap/import wiring
|
|
63
|
+
to the installed client's public migration interfaces. Do not scaffold a replacement
|
|
64
64
|
provider, rewrite applied history or stamp the database to bypass an upgrade issue.
|
|
65
65
|
|
|
66
|
+
### Move a provider whose module name collides
|
|
67
|
+
|
|
68
|
+
A provider installed under a generic top-level module, such as `migrations`,
|
|
69
|
+
shares files and imports with every other installed package that chose the same
|
|
70
|
+
name. Move it under a module the application owns, for example `ledger.migrations`
|
|
71
|
+
or `ledger_migrations`:
|
|
72
|
+
|
|
73
|
+
- Move the provider package with its `env.py`, `script.py.mako` and `versions/`
|
|
74
|
+
tree.
|
|
75
|
+
- Update `script_location`, `version_location_prefix`, the `env.py` import,
|
|
76
|
+
imports inside the provider, packaging configuration, and every provider
|
|
77
|
+
reference in code, scripts and jobs.
|
|
78
|
+
- Keep `package=`, `migration_namespace`, the version-table binding and the
|
|
79
|
+
revision files unchanged. The catalog binds provider tables to
|
|
80
|
+
`package:namespace` and rejects a reservation from a different key. Alembic
|
|
81
|
+
stores only revision IDs, so the module path can change.
|
|
82
|
+
- Do not ship a module under the old name. A forwarding module would keep the
|
|
83
|
+
file collision.
|
|
84
|
+
|
|
85
|
+
Then confirm that `migrations current` reports the same revision as before the
|
|
86
|
+
move, and that the built wheel no longer installs the old top-level name.
|
|
87
|
+
|
|
66
88
|
Providers load in the application process from Python references such as
|
|
67
89
|
`ledger.migrations:migration`. The client executes Alembic with the environment
|
|
68
90
|
connection; the API handles authorization, reservations and finalization. The
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
api_version: "2.3.0"
|
|
2
|
+
name: metatables-api
|
|
3
|
+
resources:
|
|
4
|
+
- key: metatables-api
|
|
5
|
+
kind: fastapi
|
|
6
|
+
spec:
|
|
7
|
+
source_path: api/metatables/main.py
|
|
8
|
+
automatic_deployment: true
|
|
9
|
+
automatic_redeployment:
|
|
10
|
+
enabled: true
|
|
11
|
+
tag_regex: null
|
|
12
|
+
min_scale: 1
|
|
13
|
+
revision_retention_count: 3
|
|
14
|
+
|
|
15
|
+
- key: migrate-system
|
|
16
|
+
kind: job
|
|
17
|
+
spec:
|
|
18
|
+
name: MetaTables system migrations
|
|
19
|
+
execution_path: jobs/migrate_system.py
|
|
20
|
+
cpu_request: "1"
|
|
21
|
+
memory_request: "1"
|
|
22
|
+
max_runtime_seconds: 1800
|
|
23
|
+
automatic_redeployment:
|
|
24
|
+
enabled: true
|
|
25
|
+
tag_regex: null
|
|
26
|
+
|
|
27
|
+
execution:
|
|
28
|
+
steps:
|
|
29
|
+
image:
|
|
30
|
+
prepare_image: metatables-api
|
|
31
|
+
|
|
32
|
+
migrate:
|
|
33
|
+
run_job: migrate-system
|
|
34
|
+
image_from: image
|
|
35
|
+
needs: [image]
|
|
36
|
+
|
|
37
|
+
deploy_api:
|
|
38
|
+
deploy: metatables-api
|
|
39
|
+
image_from: image
|
|
40
|
+
needs: [migrate]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
5
|
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: mainsequence[server]<10,>=9.0.
|
|
17
|
+
Requires-Dist: mainsequence[server]<10,>=9.0.4
|
|
18
18
|
Requires-Dist: alembic<2,>=1.18
|
|
19
19
|
Requires-Dist: cachetools
|
|
20
20
|
Requires-Dist: cryptography<51,>=46
|
|
@@ -28,6 +28,10 @@ does not cache this API's runtime context or select its runtime mode or DataSour
|
|
|
28
28
|
Updated 2026-09-28: application Environment policy and relationships are removed.
|
|
29
29
|
Amended 2026-09-29: one enforced runtime binding and explicit bootstrap select one
|
|
30
30
|
database for system and user tables.
|
|
31
|
+
Amended 2026-10-02: each runtime mode lists and selects only its own DataSources,
|
|
32
|
+
and inspection checks the login's prerequisites before setup.
|
|
33
|
+
Amended 2026-10-03: the deployment declares the hosted runtime database; Settings
|
|
34
|
+
is read-only in Hosted mode.
|
|
31
35
|
|
|
32
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).
|
|
33
37
|
The SDK prerequisite is implemented on `metatables_removal`; the current local
|
|
@@ -81,6 +85,114 @@ API requirement. The guides and examples describe the implemented shared path.
|
|
|
81
85
|
|
|
82
86
|
## Decision
|
|
83
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
|
+
|
|
144
|
+
### Each runtime mode selects only its own DataSources (amended 2026-10-02)
|
|
145
|
+
|
|
146
|
+
Hosted rows are superseded by the 2026-10-03 amendment above: Hosted has no
|
|
147
|
+
registry before activation and no selection.
|
|
148
|
+
|
|
149
|
+
Implemented 2026-10-02 in the API and Admin; the PostgreSQL runtime-transition test
|
|
150
|
+
was updated but not run.
|
|
151
|
+
|
|
152
|
+
A DataSource belongs to the runtime mode that registered it. Data Sources and
|
|
153
|
+
Settings show only the current mode's registrations:
|
|
154
|
+
|
|
155
|
+
| Mode | Registrations | Credential references |
|
|
156
|
+
| --- | --- | --- |
|
|
157
|
+
| Local | The workspace SQLite catalog | Local CredentialStore |
|
|
158
|
+
| Hosted | The Hosted registry until activation, then the hosted catalog | SDK Secrets |
|
|
159
|
+
|
|
160
|
+
Neither mode lists, selects or copies the other mode's registrations. This applies
|
|
161
|
+
ADR 0009's rule against automatic credential transfers to selection. A Hosted
|
|
162
|
+
DataSource is registered and selected after switching to Hosted. Local mode offers
|
|
163
|
+
**Switch to Hosted** without choosing a source; Hosted starts with its saved
|
|
164
|
+
selection or uninitialized, as the supervised-selection amendment below requires.
|
|
165
|
+
|
|
166
|
+
Gap observed 2026-10-02: in Local mode, the Settings Hosted picker listed the local
|
|
167
|
+
catalog (`GET /data-sources/`). Selecting a TimescaleDB registered there made
|
|
168
|
+
`POST /runtime-bootstrap/hosted/select/` copy the row, with its local password
|
|
169
|
+
reference, into `.local/runtime-source-candidates.json`. SDK Secrets could not
|
|
170
|
+
resolve that reference ("SDK Secret access failed"). Local mode also offered no
|
|
171
|
+
way to register a Hosted source: **Add DataSource** writes the local catalog, and
|
|
172
|
+
the Admin disables **Switch to Hosted** until a Hosted source is selected. The
|
|
173
|
+
operations guide documents this cross-mode flow.
|
|
174
|
+
|
|
175
|
+
Fix:
|
|
176
|
+
|
|
177
|
+
1. API: remove Local-mode Hosted preselection: `POST /runtime-bootstrap/hosted/select/`,
|
|
178
|
+
the Local `hosted_bootstrap` and its runtime-context field. Remove the
|
|
179
|
+
local-catalog lookup and `remember()` from `registered_hosted_source`. Hosted
|
|
180
|
+
`POST /runtime-bootstrap/select/` resolves only the Hosted registry or the
|
|
181
|
+
active hosted catalog.
|
|
182
|
+
2. Admin: in Local mode, Settings enables **Switch to Hosted** with no source
|
|
183
|
+
picker. The Hosted picker and its **Add DataSource** render only in Hosted
|
|
184
|
+
mode, where Data Sources is the Hosted registry.
|
|
185
|
+
3. Docs: `docs/operations/local-runtime.md` describes the order Switch to Hosted,
|
|
186
|
+
register in Data Sources, select in Settings, then run MetaTables migrations
|
|
187
|
+
or use the existing catalog.
|
|
188
|
+
4. Tests: the Local-mode selection route no longer exists; Hosted selection
|
|
189
|
+
rejects a local-catalog UID; a fresh Hosted runtime registers a source with an
|
|
190
|
+
SDK Secret reference and selects it; Settings in Local mode switches without a
|
|
191
|
+
selection.
|
|
192
|
+
|
|
193
|
+
Hosted registry entries already copied from a local catalog carry unusable
|
|
194
|
+
references; developers remove them. No data migration is provided.
|
|
195
|
+
|
|
84
196
|
### One local runtime across branches (amended 2026-09-30)
|
|
85
197
|
|
|
86
198
|
MetaTables owns one persistent local SQLite runtime for a checkout. Git branches,
|
|
@@ -99,11 +211,19 @@ by startup or migration. This supersedes the previous branch isolation policy.
|
|
|
99
211
|
|
|
100
212
|
### Explicit runtime bootstrap in the selected DataSource (amended 2026-09-29)
|
|
101
213
|
|
|
214
|
+
Hosted upgrades: before each API rollout, the deployment workflow runs
|
|
215
|
+
`metatables runtime upgrade` from the new image against the active runtime
|
|
216
|
+
([ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md)). Initializing a selected DataSource and startup
|
|
217
|
+
inspection follow the lifecycle below.
|
|
218
|
+
|
|
102
219
|
This amendment supersedes the separate catalog connection, the two-file SQLite
|
|
103
220
|
binding, automatic local catalog upgrades, and the requirement that switching to
|
|
104
221
|
Hosted already have a migrated catalog. It corrects this ADR's runtime lifecycle;
|
|
105
222
|
it does not introduce a second execution architecture.
|
|
106
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
|
+
|
|
107
227
|
Settings selects the runtime mode and its DataSource. That database contains both
|
|
108
228
|
MetaTables' system tables and user tables. Local selects one persistent SQLite
|
|
109
229
|
file; Hosted selects PostgreSQL/TimescaleDB. MySQL and MSSQL remain connection-only
|
|
@@ -117,6 +237,14 @@ configuration inserted as the runtime DataSource in that database. Failed work
|
|
|
117
237
|
never activates a partially initialized runtime. A database already initialized
|
|
118
238
|
and compatible can be selected without running migrations.
|
|
119
239
|
|
|
240
|
+
Amended 2026-10-02: before any runtime is registered, inspection also checks,
|
|
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.
|
|
247
|
+
|
|
120
248
|
Settings, runtime context, mode selection and bootstrap actions do not depend on
|
|
121
249
|
catalog sessions or catalog memberships. They retain the existing request admission.
|
|
122
250
|
The caller who configures a pending target controls its initialization; an existing
|
|
@@ -210,10 +338,18 @@ The supervisor passes mode and transport parameters explicitly to the child;
|
|
|
210
338
|
`METATABLES_LOCAL_RUNTIME` has no authority. Database credentials remain private
|
|
211
339
|
deployment inputs and are never stored in YAML or sent to Vite.
|
|
212
340
|
|
|
213
|
-
The runtime descriptor reports capability, switching availability and
|
|
214
|
-
instance identity. Admin requests carry that identity so
|
|
215
|
-
|
|
216
|
-
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
|
|
217
353
|
instance, never an individual user's view of a shared service.
|
|
218
354
|
|
|
219
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
|
|
@@ -253,6 +253,10 @@ this work must not require recreation or transfer them to another DataSource.
|
|
|
253
253
|
|
|
254
254
|
### First-bootstrap and migration recovery
|
|
255
255
|
|
|
256
|
+
The deployment workflow's `metatables runtime upgrade` ([ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md))
|
|
257
|
+
runs this same protocol, with its backend locks, progress reconciliation,
|
|
258
|
+
registration and schema verification, before each hosted API rollout.
|
|
259
|
+
|
|
256
260
|
The shared bootstrap service operates before a DataSource row or the full operation
|
|
257
261
|
journal exists. Startup and Settings inspection remain read-only. Only the explicit
|
|
258
262
|
**Run MetaTables migrations** action may initialize or upgrade the selected database.
|
|
@@ -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
|
|
|
@@ -80,6 +80,10 @@ dropped tables. Revision files already applied remain immutable.
|
|
|
80
80
|
|
|
81
81
|
## MetaTables system migrations
|
|
82
82
|
|
|
83
|
+
Hosted system upgrades also run as a deployment prerequisite Job
|
|
84
|
+
([ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md)). Application providers keep their own histories and are not
|
|
85
|
+
part of that Job.
|
|
86
|
+
|
|
83
87
|
The API continues to own `metatables.api.backend.migrations`, `metatables_catalog_version`
|
|
84
88
|
and the explicit admin bootstrap/upgrade operation in Settings. Application
|
|
85
89
|
migration commands do not invoke that operation. Applications must keep their
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# ADR 0014: System migrations in the deployment workflow
|
|
2
|
+
|
|
3
|
+
Date: 2026-10-02
|
|
4
|
+
|
|
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.
|
|
8
|
+
|
|
9
|
+
Owners: MetaTables API. Main Sequence owns Job execution, images, deployment and
|
|
10
|
+
platform authentication.
|
|
11
|
+
|
|
12
|
+
Related: [ADR 0001: Runtime storage and bootstrap](0001-unified-api-storage-and-local-sqlite.md),
|
|
13
|
+
[ADR 0008: Database workflows and recovery](0008-mysql-mssql-table-workflows.md) and
|
|
14
|
+
[ADR 0013: Application-owned migrations](0013-application-owned-migrations.md).
|
|
15
|
+
|
|
16
|
+
## Context
|
|
17
|
+
|
|
18
|
+
Main Sequence deploys the hosted API from `.mainsequence/workflows/metatables-api.yaml`.
|
|
19
|
+
Settings runs system migrations inside the running API, and that API can only
|
|
20
|
+
apply the revisions it ships. A release's new revisions must be applied before
|
|
21
|
+
its API serves.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
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
|
+
|
|
50
|
+
The deployment workflow upgrades the runtime from the candidate image before the
|
|
51
|
+
rollout:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
candidate image -> migrate-system Job -> API deployment
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
A failed upgrade blocks the rollout.
|
|
58
|
+
|
|
59
|
+
The Job, `jobs/migrate_system.py`, runs `metatables runtime upgrade`:
|
|
60
|
+
|
|
61
|
+
1. Find the Environment's MetaTables API the same way the client does.
|
|
62
|
+
2. Read `GET /runtime-context/` as an organization admin. For admins,
|
|
63
|
+
`bootstrap.candidate` is the Settings DataSource's public configuration with
|
|
64
|
+
its Secret references; the Secrets are resolved through the SDK.
|
|
65
|
+
3. Apply this package's system migrations through the shared bootstrap operation:
|
|
66
|
+
backend lock, progress recovery, runtime registration, access setup and
|
|
67
|
+
verification. A runtime already at the current revision is left untouched.
|
|
68
|
+
|
|
69
|
+
The command acts only on an active runtime. With no API deployment or no active
|
|
70
|
+
runtime yet, it succeeds without DDL. The Environment's DataSource is set
|
|
71
|
+
through the deployed API, so if it is set the command migrates when necessary;
|
|
72
|
+
if it is not, it skips migrations and the API deploys. An API release that the
|
|
73
|
+
workflow created but has never deployed counts as no API deployment, so the
|
|
74
|
+
first run deploys the API. A non-admin identity or an unreadable
|
|
75
|
+
context fails before DDL. When it registers the runtime DataSource, it records
|
|
76
|
+
the Job identity's user UID as the creator.
|
|
77
|
+
|
|
78
|
+
Settings' **Run MetaTables migrations** and `metatables runtime initialize` keep
|
|
79
|
+
initializing a newly selected DataSource: the API serving them is the deployed
|
|
80
|
+
revision and runs its own migrations, so there is no version skew. API startup
|
|
81
|
+
stays inspection-only.
|
|
82
|
+
|
|
83
|
+
Both targets declare `automatic_redeployment` with `tag_regex: null`, so every
|
|
84
|
+
eligible commit runs the graph. Package publication stays in GitHub Actions.
|
|
85
|
+
|
|
86
|
+
The upgrade owns only `metatables.api.backend.migrations` and
|
|
87
|
+
`metatables_catalog_version`. Application providers keep their own histories
|
|
88
|
+
under ADR 0013.
|
|
89
|
+
|
|
90
|
+
## Consequences
|
|
91
|
+
|
|
92
|
+
- The previous API keeps serving during the upgrade, so each schema change must
|
|
93
|
+
stay compatible with the previous release. Coordination with its writes is not
|
|
94
|
+
defined yet.
|
|
95
|
+
- An upgrade followed by a failed deployment leaves the database upgraded. There
|
|
96
|
+
is no automatic downgrade.
|
|
97
|
+
- The workflow runs only when the platform receives the branch's commit.
|
|
98
|
+
Verification in a hosted Environment is pending.
|