mainsequence-metatable 0.1.30.dev56__tar.gz → 0.1.31__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.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-migrations/SKILL.md +34 -3
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0007-database-enforced-table-access.md +9 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0013-application-owned-migrations.md +91 -0
- mainsequence_metatable-0.1.31/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +183 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/define-and-migrate-tables.md +15 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/deploy-application-migrations.md +26 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/installation-and-connection.md +7 -2
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/contributing/documentation.md +1 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/catalog-migrations.md +7 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/SOURCES.txt +6 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/bootstrap.py +117 -73
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/main.py +2 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/managed_finalize.py +70 -29
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/access.py +26 -5
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +13 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +80 -54
- mainsequence_metatable-0.1.31/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +162 -0
- mainsequence_metatable-0.1.31/src/metatables/api/backend/backends/batch_inspection.py +45 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/catalog.py +2 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/contracts.py +4 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/native.py +3 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/operations.py +22 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/postgresql_access.py +143 -22
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/relational.py +81 -62
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/bootstrap_migrations.py +19 -3
- mainsequence_metatable-0.1.31/src/metatables/api/backend/operations/bootstrap_timing.py +19 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/catalog_schema.py +52 -4
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/projections.py +86 -18
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/endpoint.py +32 -11
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/runner.py +59 -28
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_data_source_identity.py +5 -2
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_runtime_bootstrap.py +16 -0
- mainsequence_metatable-0.1.31/tests/catalog/test_schema_validation.py +60 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_api_endpoint.py +53 -2
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_application_owned_migrations.py +139 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_package.py +1 -1
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_managed_finalize_client_api.py +85 -3
- mainsequence_metatable-0.1.31/tests/e2e/test_managed_finalize_unchanged.py +256 -0
- mainsequence_metatable-0.1.31/tests/e2e/test_runtime_upgrade.py +266 -0
- mainsequence_metatable-0.1.31/tests/integrations/test_batch_introspection.py +202 -0
- mainsequence_metatable-0.1.31/tests/permissions/test_deployment_security.py +304 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/uv.lock +1 -1
- mainsequence_metatable-0.1.30.dev56/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -98
- mainsequence_metatable-0.1.30.dev56/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -146
- mainsequence_metatable-0.1.30.dev56/tests/e2e/test_runtime_upgrade.py +0 -71
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/LICENSE +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/openapi.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/assets/diagrams/namespace-access.svg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/analysis.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/connection_count.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/mcp.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/access_map.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/caller.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/connection_pool.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/api/request_timing.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/analyst/test_agent_surface.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/analyst/test_mcp.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_caller_endpoint.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_connection_reuse.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_request_timing.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_serving_policy.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_access_map.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_incremental_security.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.30.dev56 → mainsequence_metatable-0.1.31}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -190,12 +190,43 @@ API Writer checks govern connection admission and provider catalog operations.
|
|
|
190
190
|
The client reserves catalog entries, runs Alembic, closes its physical connection,
|
|
191
191
|
and finalizes contracts through the API. Treat connection material as private.
|
|
192
192
|
|
|
193
|
-
Python
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
Applications and consuming libraries use the same public Python entry point in
|
|
194
|
+
an explicit setup function or deployment migration Job:
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
from metatables import upgrade_application
|
|
198
|
+
|
|
199
|
+
result = upgrade_application("ledger.migrations:migration")
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`src/metatables/examples/scripts/setup_metatables.py` shows the pattern. Keep
|
|
203
|
+
migration execution out of a library's import-time side effects. Remove the retired
|
|
196
204
|
`application_migration_providers` setting and use Python references instead of aliases.
|
|
197
205
|
Application migration histories remain separate from API system migrations.
|
|
198
206
|
|
|
207
|
+
## Repeated runs and migration performance
|
|
208
|
+
|
|
209
|
+
Use the shared `upgrade_application` path for every provider. Table-inventory and
|
|
210
|
+
physical-inspection batching are automatic in the client/API implementation; no
|
|
211
|
+
separate batching import, private backend helper or opt-in flag is needed.
|
|
212
|
+
An unchanged Alembic revision still reconciles physical contracts and refreshes
|
|
213
|
+
table descriptions, labels and column metadata. Do not skip finalization based
|
|
214
|
+
only on `migrated=False` or equal revision heads: missing/unreadable tables must
|
|
215
|
+
still fail, and only explicit removals may delete a catalog binding.
|
|
216
|
+
|
|
217
|
+
For a slow migration, read the "Migration timings" section in
|
|
218
|
+
`docs/client/deploy-application-migrations.md`. Enable INFO logging for
|
|
219
|
+
`metatables.migrations.runner` to see preparation, database setup, table checks,
|
|
220
|
+
Alembic, finalization and total duration. The API logs inspection and total time
|
|
221
|
+
per finalization batch. Measure these separately from platform job scheduling
|
|
222
|
+
and workflow coordination before attributing the delay to schema validation.
|
|
223
|
+
|
|
224
|
+
Check the installed client and deployed API versions. Client optimizations need
|
|
225
|
+
a package update and application image rebuild; API batching needs a shared API
|
|
226
|
+
deployment. After installing a release containing the changes, refresh copied
|
|
227
|
+
skills with `metatables copy-metatables-skills --path /path/to/application`.
|
|
228
|
+
This command copies guidance; Python imports alone do not refresh it.
|
|
229
|
+
|
|
199
230
|
## Lifecycle invariants
|
|
200
231
|
|
|
201
232
|
- Provider tables and the Alembic registry are `platform_managed` +
|
|
@@ -51,6 +51,15 @@
|
|
|
51
51
|
> are when grants changed outside MetaTables are repaired, not on every catalog
|
|
52
52
|
> change. MySQL and SQL Server keep the full sweep on every change.
|
|
53
53
|
|
|
54
|
+
> Amendment (2026-10-10): [ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md#conditional-system-bootstrap-2026-10-10-amendment)
|
|
55
|
+
> replaces the unconditional deployment sweep on PostgreSQL/TimescaleDB with
|
|
56
|
+
> fresh native-security and login validation under the security-state lock.
|
|
57
|
+
> Every deployment still checks table policies. Unchanged security evidence uses
|
|
58
|
+
> incremental grant application and one conditional write of the complete
|
|
59
|
+
> manifest; drift, credential rotation, pending state or missing evidence retains
|
|
60
|
+
> full repair. An explicit admin repair remains a full sweep. A routine catalog
|
|
61
|
+
> update must not establish a new native baseline for unverified outside drift.
|
|
62
|
+
|
|
54
63
|
> Amendment (2026-10-09): [ADR 0022](0022-concurrent-requests-and-connection-reuse.md)
|
|
55
64
|
> reuses login-role connections within a pod, only by the login role that opened them
|
|
56
65
|
> and never through `SET ROLE`; no session state carries over from one use to the next.
|
|
@@ -95,6 +95,80 @@ requires inspection and application-owned recovery. No server executor journal i
|
|
|
95
95
|
claimed for client DDL. Downgrade to base clears the recorded revision and reconciles
|
|
96
96
|
dropped tables. Revision files already applied remain immutable.
|
|
97
97
|
|
|
98
|
+
### Batched inspection (2026-10-09 amendment)
|
|
99
|
+
|
|
100
|
+
This is an implementation refinement of the lifecycle above, not a change to
|
|
101
|
+
execution ownership, authorization or the migration API.
|
|
102
|
+
|
|
103
|
+
- The client reads one table inventory per schema before Alembic and a fresh one
|
|
104
|
+
afterwards. Missing inventory entries still use `has_table` so views and temporary
|
|
105
|
+
tables retain their previous behavior. The first pass also rejects unversioned
|
|
106
|
+
application storage; it is not repeated for that check.
|
|
107
|
+
- The API authorizes every requested binding before physical inspection. It resolves
|
|
108
|
+
the admitted DataSource once per finalization request and shares a read connection
|
|
109
|
+
across its tables. PostgreSQL/TimescaleDB use four metadata queries per schema
|
|
110
|
+
(plus a diagnostic query for missing tables). SQLite/MySQL/SQL Server use SQLAlchemy
|
|
111
|
+
bulk reflection with dialect fallbacks and preserve their existing projections.
|
|
112
|
+
- Reflection caches last only for that inspection. No snapshot is reused across DDL
|
|
113
|
+
or requests. An unchanged Alembic revision still finalizes physical contracts and
|
|
114
|
+
refreshes semantic metadata; it is not evidence that the database has no drift.
|
|
115
|
+
- Missing, inaccessible and foreign-owned tables keep their existing failure
|
|
116
|
+
semantics. A bulk database error falls back to independent table inspections after
|
|
117
|
+
closing the failed transaction, so an unrelated table can still finalize. Only
|
|
118
|
+
explicitly removed, physically absent application tables lose their binding.
|
|
119
|
+
- Client phase timings and API inspection/total timings report where time is spent.
|
|
120
|
+
They do not include platform job scheduling or workflow coordination.
|
|
121
|
+
|
|
122
|
+
The client still sends bounded finalization requests (ten tables per batch); the
|
|
123
|
+
HTTP request/response contract is unchanged. Client inventory improvements require
|
|
124
|
+
a package update and application rebuild. API batching benefits existing clients
|
|
125
|
+
after the shared API is deployed, with larger gains for clients sending batches.
|
|
126
|
+
|
|
127
|
+
### Conditional catalog reconciliation (2026-10-10 amendment)
|
|
128
|
+
|
|
129
|
+
Reconciliation means making the catalog describe the freshly observed physical
|
|
130
|
+
table while preserving declared semantic metadata. It is additional MetaTables
|
|
131
|
+
behavior around Alembic, not an instruction to reapply migration scripts or rebuild
|
|
132
|
+
identical catalog rows. An unchanged Alembic revision does not prove absence of
|
|
133
|
+
physical drift or completion of an earlier catalog finalization.
|
|
134
|
+
|
|
135
|
+
```mermaid
|
|
136
|
+
flowchart TD
|
|
137
|
+
A[Run pending Alembic revisions] --> B[Fresh admission and physical inspection]
|
|
138
|
+
B --> C[Reconcile physical facts with existing semantic metadata]
|
|
139
|
+
C --> D{Do stored projections match?}
|
|
140
|
+
D -->|Yes| E[Keep existing projection rows and UUIDs]
|
|
141
|
+
D -->|No| F[Replace damaged or changed projections]
|
|
142
|
+
E --> G[Update only changed contract and lifecycle fields]
|
|
143
|
+
F --> G
|
|
144
|
+
G --> H[Fresh security-policy checks and commit]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- Finalization retains the catalog lock, per-table Writer/provider/source checks,
|
|
148
|
+
fresh physical inspection, owner reachability, foreign-key target validation,
|
|
149
|
+
missing-table/removal handling, and Timescale hypertable checks. No physical
|
|
150
|
+
snapshot or authorization result is cached across requests.
|
|
151
|
+
- The API reads existing column, index and foreign-key projections in three batch
|
|
152
|
+
queries. Comparison includes their scalar fields, full contract fragments and
|
|
153
|
+
resolved FK target UIDs, and detects missing, extra or damaged rows. Projection
|
|
154
|
+
row UUIDs and reflection ordering of independent objects are not differences;
|
|
155
|
+
column ordinals and the order of columns inside keys/indexes remain meaningful.
|
|
156
|
+
- Matching projections are kept, even if only the recorded Alembic revision or
|
|
157
|
+
lifecycle metadata changes. Changed projections are replaced inside the existing
|
|
158
|
+
per-table savepoint. Equal-valued contract, snapshot and lifecycle fields are not
|
|
159
|
+
assigned, avoiding unnecessary ORM dirtiness and metadata/search writes.
|
|
160
|
+
- Hosted/local runtime security-policy checks are explicitly retained at commit
|
|
161
|
+
even when table metadata is unchanged. Existing policy reconciliation repairs
|
|
162
|
+
policy differences; equal policies and their JSON permission manifest do not
|
|
163
|
+
require metadata writes. A failed physical check or conversion still fails
|
|
164
|
+
rather than being hidden by equality.
|
|
165
|
+
- A healthy unchanged finalization issues no table/projection metadata DML. A
|
|
166
|
+
matching contract with damaged projections still repairs them. A previously
|
|
167
|
+
committed migration with failed finalization can retry at the same revision;
|
|
168
|
+
physical drift is freshly observed and catalog reconciliation completes without
|
|
169
|
+
replaying already-applied DDL. The response contract and client calls stay the
|
|
170
|
+
same; no consuming-application opt-in is required.
|
|
171
|
+
|
|
98
172
|
## MetaTables system migrations
|
|
99
173
|
|
|
100
174
|
Hosted system upgrades also run as a deployment prerequisite Job
|
|
@@ -132,3 +206,20 @@ connection dialect/TLS options, catalog authorization and runtime hold release.
|
|
|
132
206
|
SQLite integration tests use disposable files. Hosted driver configuration is
|
|
133
207
|
checked without starting databases. Container/database-matrix tests are on demand;
|
|
134
208
|
backend/runtime tests are not added to required CI checks.
|
|
209
|
+
|
|
210
|
+
The batching amendment adds non-container checks for query/connection counts,
|
|
211
|
+
fresh reflection after DDL, unchanged-revision reconciliation, authorization before
|
|
212
|
+
inspection, independent failures and dialect fallbacks. PostgreSQL query grouping is
|
|
213
|
+
checked with a recording driver; SQLite executes real local DDL. Hosted performance
|
|
214
|
+
and live MySQL/SQL Server/PostgreSQL verification remain pending.
|
|
215
|
+
|
|
216
|
+
The conditional-reconciliation amendment adds SQL-recording checks for zero
|
|
217
|
+
metadata writes and stable projection UUIDs on unchanged finalization, damaged
|
|
218
|
+
scalar/fragment and missing/extra projection repair, revision-only updates,
|
|
219
|
+
semantic changes at the same revision, drift plus failed-finalization retry, and
|
|
220
|
+
fresh permission/missing/inaccessible/owner checks, including self-referencing key
|
|
221
|
+
projection repair. A real local-runtime check verifies zero catalog DML on an
|
|
222
|
+
unchanged upgrade while still refreshing physical security policies, and detects
|
|
223
|
+
a newly added trigger that changes write safety without changing the contract.
|
|
224
|
+
Existing local SQLite application-provider tests verify actual physical drift and recovery without
|
|
225
|
+
reapplying DDL. These are focused non-container checks, not new required CI jobs.
|
|
@@ -0,0 +1,183 @@
|
|
|
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. Freshly validate access setup and repair changes. Per-User role passwords
|
|
36
|
+
derive from the login password, so a rotated password reaches them on the
|
|
37
|
+
next deployment. The conditional reconciliation amendment below replaces
|
|
38
|
+
unconditional rebuilding on every deployment.
|
|
39
|
+
|
|
40
|
+
The first deployment therefore initializes the database. A missing declaration
|
|
41
|
+
or Secret, an unreachable database or unmet prerequisites fail the Job and block
|
|
42
|
+
the rollout. The deployment workflow is the authority, so no admin caller is
|
|
43
|
+
required. A new runtime DataSource records the Job's SDK user as its creator.
|
|
44
|
+
The Job prints `initialized`, `upgraded` or `up_to_date` with the revisions.
|
|
45
|
+
|
|
46
|
+
Settings' **Run MetaTables migrations** and `metatables runtime initialize` remain
|
|
47
|
+
for Local mode only. The original decision follows. The amendment supersedes
|
|
48
|
+
steps 1–2, the skip rules and the Settings initialization paragraph.
|
|
49
|
+
|
|
50
|
+
### Conditional system bootstrap (2026-10-10 amendment)
|
|
51
|
+
|
|
52
|
+
An unchanged deployment remains a validation gate, but does not restart completed
|
|
53
|
+
work or rewrite an identical catalog/security projection. This concerns the
|
|
54
|
+
MetaTables **system** Job, separate from application-provider finalization in
|
|
55
|
+
[ADR 0013](0013-application-owned-migrations.md).
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
resolve declaration and Secret
|
|
59
|
+
-> bootstrap lock
|
|
60
|
+
-> fresh history, recovery and runtime-binding checks
|
|
61
|
+
-> current heads + completed journal?
|
|
62
|
+
yes: fresh physical system-schema validation; preserve journal
|
|
63
|
+
no: existing Alembic execution and durable recovery; validate schema
|
|
64
|
+
-> reconcile runtime registration if changed
|
|
65
|
+
-> security-state lock; fresh native security and login validation
|
|
66
|
+
-> unchanged evidence? fresh table-policy checks; apply only grant differences
|
|
67
|
+
otherwise: full security repair, including credential rotation
|
|
68
|
+
-> commit; fresh registration/reference verification; release bootstrap lock
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Hosted configuration defers database inspection to the authoritative preflight
|
|
72
|
+
inside the bootstrap lock. The local path retains its pre-lock check, so an old
|
|
73
|
+
store cannot be replaced or a new file created before compatibility is checked.
|
|
74
|
+
Registration/reference validation is read again after commit under the lock;
|
|
75
|
+
it does not repeat schema reflection or the already verified migration history.
|
|
76
|
+
Startup and explicit activation continue their existing fresh checks.
|
|
77
|
+
|
|
78
|
+
Matching Alembic heads alone are insufficient. Only a **completed** progress
|
|
79
|
+
journal allows skipping Alembic and journal writes, after fresh schema validation.
|
|
80
|
+
A missing journal is established through the existing path. An incomplete
|
|
81
|
+
journal retains plan/binding checks, acknowledged-step recovery and rejection
|
|
82
|
+
of unknown outcomes. A completed journal records its original execution; a
|
|
83
|
+
source-code change without new revisions does not reset that history. Schema
|
|
84
|
+
drift still blocks deployment and is not silently repaired by replaying Alembic.
|
|
85
|
+
|
|
86
|
+
On PostgreSQL/TimescaleDB, the existing private `SQLSecurityState.manifest` stores
|
|
87
|
+
versioned native-security evidence and a domain-separated credential checksum,
|
|
88
|
+
alongside roles, memberships, privileges and routine evidence. No schema revision
|
|
89
|
+
is needed. Initialization compares fresh database evidence: role attributes and
|
|
90
|
+
memberships; schema, relation, column, routine, database and default ACLs; owners,
|
|
91
|
+
routine definitions and row-security policies. Table data and statistics are
|
|
92
|
+
excluded. Declared schemas and grant-target tables are included even when the
|
|
93
|
+
login has grant authority without owning them. Fresh per-login authentication
|
|
94
|
+
uses the configured TLS material and a new connection, never a pooled session
|
|
95
|
+
that could conceal a password change.
|
|
96
|
+
The security-state row stays locked until commit to serialize with catalog
|
|
97
|
+
changes and caller admission.
|
|
98
|
+
|
|
99
|
+
All registered table policies are freshly checked even on the unchanged path.
|
|
100
|
+
Unchanged table owners and `PUBLIC` grants cause no ownership/revoke writes.
|
|
101
|
+
Policies and grant differences still apply when a trigger or catalog change
|
|
102
|
+
affects access. Native drift, credential rotation, pending/unready state or
|
|
103
|
+
missing evidence invokes full repair. Login authentication failures likewise
|
|
104
|
+
require repair. Exhausted login connection capacity conservatively falls back
|
|
105
|
+
to the existing repair. libpq can omit SQLSTATE on a connection/authentication
|
|
106
|
+
failure; these ambiguous driver connection errors also require repair rather
|
|
107
|
+
than allowing a skip. Other probe failures fail deployment. An old installation
|
|
108
|
+
therefore performs one full repair to establish evidence, then converges.
|
|
109
|
+
Explicit admin repair remains a full sweep; MySQL/SQL Server keep their existing
|
|
110
|
+
security initialization behavior.
|
|
111
|
+
|
|
112
|
+
The complete manifest is compared and persisted once, including backend fields;
|
|
113
|
+
reconciliation must not remove and then restore the routine fingerprint. Ordinary
|
|
114
|
+
incremental changes cannot checkpoint unverified native drift as success. Failed
|
|
115
|
+
security work rolls back its catalog checkpoint and remains repairable on retry.
|
|
116
|
+
|
|
117
|
+
Named timings cover declaration/Secret resolution, bootstrap/security lock waits,
|
|
118
|
+
preflight, catalog/Alembic execution, system-schema validation, registration,
|
|
119
|
+
native security and login authentication validation, routine repair, table
|
|
120
|
+
policies, roles/grants, credential-store setup, commit and final registration
|
|
121
|
+
verification. Each timing
|
|
122
|
+
reports completion/failure without connection strings, passwords, checksums or
|
|
123
|
+
driver exception text. Successful security setup logs the selected path and its
|
|
124
|
+
reason, including first-run evidence establishment.
|
|
125
|
+
|
|
126
|
+
Focused verification uses disposable SQLite catalog transactions and recording
|
|
127
|
+
PostgreSQL adapters: unchanged deployments invoke no Alembic or catalog/journal
|
|
128
|
+
DML; unchanged native security emits no role/grant DDL or manifest UPDATE;
|
|
129
|
+
schema drift, interrupted/ambiguous recovery, credential rotation, permission
|
|
130
|
+
drift and failed repair remain checked. Live PostgreSQL/TimescaleDB validation is
|
|
131
|
+
separate from these non-container checks.
|
|
132
|
+
|
|
133
|
+
### Original decision (2026-10-02)
|
|
134
|
+
|
|
135
|
+
The deployment workflow upgrades the runtime from the candidate image before the
|
|
136
|
+
rollout:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
candidate image -> migrate-system Job -> API deployment
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
A failed upgrade blocks the rollout.
|
|
143
|
+
|
|
144
|
+
The Job, `jobs/migrate_system.py`, runs `metatables runtime upgrade`:
|
|
145
|
+
|
|
146
|
+
1. Find the Environment's MetaTables API the same way the client does.
|
|
147
|
+
2. Read `GET /runtime-context/` as an organization admin. For admins,
|
|
148
|
+
`bootstrap.candidate` is the Settings DataSource's public configuration with
|
|
149
|
+
its Secret references; the Secrets are resolved through the SDK.
|
|
150
|
+
3. Apply this package's system migrations through the shared bootstrap operation:
|
|
151
|
+
backend lock, progress recovery, runtime registration, access setup and
|
|
152
|
+
verification. A runtime already at the current revision is left untouched.
|
|
153
|
+
|
|
154
|
+
The command acts only on an active runtime. With no API deployment or no active
|
|
155
|
+
runtime yet, it succeeds without DDL. The Environment's DataSource is set
|
|
156
|
+
through the deployed API, so if it is set the command migrates when necessary;
|
|
157
|
+
if it is not, it skips migrations and the API deploys. An API release that the
|
|
158
|
+
workflow created but has never deployed counts as no API deployment, so the
|
|
159
|
+
first run deploys the API. A non-admin identity or an unreadable
|
|
160
|
+
context fails before DDL. When it registers the runtime DataSource, it records
|
|
161
|
+
the Job identity's user UID as the creator.
|
|
162
|
+
|
|
163
|
+
Settings' **Run MetaTables migrations** and `metatables runtime initialize` keep
|
|
164
|
+
initializing a newly selected DataSource: the API serving them is the deployed
|
|
165
|
+
revision and runs its own migrations, so there is no version skew. API startup
|
|
166
|
+
stays inspection-only.
|
|
167
|
+
|
|
168
|
+
Both targets declare `automatic_redeployment` with `tag_regex: null`, so every
|
|
169
|
+
eligible commit runs the graph. Package publication stays in GitHub Actions.
|
|
170
|
+
|
|
171
|
+
The upgrade owns only `metatables.api.backend.migrations` and
|
|
172
|
+
`metatables_catalog_version`. Application providers keep their own histories
|
|
173
|
+
under ADR 0013.
|
|
174
|
+
|
|
175
|
+
## Consequences
|
|
176
|
+
|
|
177
|
+
- The previous API keeps serving during the upgrade, so each schema change must
|
|
178
|
+
stay compatible with the previous release. Coordination with its writes is not
|
|
179
|
+
defined yet.
|
|
180
|
+
- An upgrade followed by a failed deployment leaves the database upgraded. There
|
|
181
|
+
is no automatic downgrade.
|
|
182
|
+
- The workflow runs only when the platform receives the branch's commit.
|
|
183
|
+
Verification in a hosted Environment is pending.
|
|
@@ -89,7 +89,21 @@ metatables --local migrations upgrade --provider ledger.migrations:migration
|
|
|
89
89
|
The local API must already be running; `--local` selects its connection, so inspect
|
|
90
90
|
runtime status to verify the database actually selected in Settings.
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
Applications and libraries use the same public import in their migration Job or
|
|
93
|
+
explicit setup function:
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
from metatables import upgrade_application
|
|
97
|
+
|
|
98
|
+
result = upgrade_application("ledger.migrations:migration")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The shared runner automatically uses the installed client's table inventories and
|
|
102
|
+
the API's batched finalization. No separate batching import or option is needed.
|
|
103
|
+
Keep this call in the explicit migration lifecycle, rather than executing it when
|
|
104
|
+
a library is imported. See [migration timings](deploy-application-migrations.md#migration-timings)
|
|
105
|
+
for diagnostics and the client/API updates needed to receive these optimizations.
|
|
106
|
+
|
|
93
107
|
For current and downgrade, use `metatables.migrations.runner.run_migration` with
|
|
94
108
|
`operation="current"` or `operation="downgrade", revision="0001"`.
|
|
95
109
|
|
|
@@ -26,6 +26,28 @@ upgrade` or `downgrade` against a hosted API from a developer machine or agent
|
|
|
26
26
|
session. Do not migrate at application startup either: several pods would race,
|
|
27
27
|
and a failure would not stop the rollout.
|
|
28
28
|
|
|
29
|
+
## Migration timings
|
|
30
|
+
|
|
31
|
+
At INFO level, `metatables.migrations.runner` logs preparation, database setup,
|
|
32
|
+
table-presence checks before and after Alembic, Alembic execution, catalog
|
|
33
|
+
finalization and total duration. The API logs physical inspection and total time
|
|
34
|
+
for each finalization batch. Use these to distinguish database work from platform
|
|
35
|
+
scheduling and workflow coordination.
|
|
36
|
+
|
|
37
|
+
An already-current database still reconciles the provider's catalog contracts.
|
|
38
|
+
Checks use fresh table inventories and batched physical reflection; an unchanged
|
|
39
|
+
revision does not skip missing-table checks, permissions or metadata refresh.
|
|
40
|
+
PostgreSQL batches metadata queries by schema; other dialects use SQLAlchemy's
|
|
41
|
+
bulk reflection and its supported fallbacks. Caches do not survive the request.
|
|
42
|
+
Client improvements require updating the application's installed MetaTables package
|
|
43
|
+
and rebuilding its image; API improvements require deploying the shared API.
|
|
44
|
+
Applications and libraries continue to use `from metatables import upgrade_application`;
|
|
45
|
+
batching is automatic in this shared path, with no new import or opt-in flag.
|
|
46
|
+
After updating the installed package, refresh its agent guidance with
|
|
47
|
+
`metatables copy-metatables-skills --path /path/to/application`. This copies the
|
|
48
|
+
matching migration skill and its guide snapshots; importing Python code does not
|
|
49
|
+
update a project's copied skills.
|
|
50
|
+
|
|
29
51
|
## Declare the migration Job
|
|
30
52
|
|
|
31
53
|
Add one Job script that applies every provider the application owns, in
|
|
@@ -117,6 +139,10 @@ its branch to discover the API; declare it on the Job:
|
|
|
117
139
|
level: view
|
|
118
140
|
```
|
|
119
141
|
|
|
142
|
+
`upgrade_application()` waits up to five minutes for the API to wake or finish
|
|
143
|
+
replacing its pods before it fails with `ApiResolutionError`; other client calls
|
|
144
|
+
wait 30 seconds.
|
|
145
|
+
|
|
120
146
|
Team membership takes effect on the workload's next request, in the catalog and in
|
|
121
147
|
the database. When a workload User changes, add the new one to the Team; nothing
|
|
122
148
|
in MetaTables changes. A table registered in a namespace the caller already
|
|
@@ -74,7 +74,7 @@ application migrations, persistence and credentials.
|
|
|
74
74
|
|
|
75
75
|
## Copy client skills into an application
|
|
76
76
|
|
|
77
|
-
After installing MetaTables, explicitly copy its
|
|
77
|
+
After installing MetaTables, explicitly copy its client usage skills into a
|
|
78
78
|
consuming project:
|
|
79
79
|
|
|
80
80
|
```bash
|
|
@@ -88,12 +88,17 @@ metatables --json copy-metatables-skills --path /path/to/application
|
|
|
88
88
|
`metatables` does not copy skills.
|
|
89
89
|
|
|
90
90
|
The destination is `<application>/.agents/skills/metatables/`. It contains the
|
|
91
|
-
local development, table, application migration, time-index updater and legacy
|
|
91
|
+
local development, table, application migration, table discovery, time-index updater and legacy
|
|
92
92
|
application upgrade skills, with matching
|
|
93
93
|
guide/example snapshots in each skill's `references/` folder. The installed client
|
|
94
94
|
version is recorded in `PINNED_FROM.txt`. Skills for API implementation or
|
|
95
95
|
MetaTables project development are outside this bundle.
|
|
96
96
|
|
|
97
|
+
After upgrading the installed package, run the copy command again to refresh the
|
|
98
|
+
matching guidance. The migration skill includes the public `upgrade_application`
|
|
99
|
+
import, repeated-run behavior and migration timing diagnostics. Python imports
|
|
100
|
+
use the installed library independently of these copied agent instructions.
|
|
101
|
+
|
|
97
102
|
Running the command again replaces the whole `metatables` namespace: folders the
|
|
98
103
|
installed client does not ship, including any added there, are removed. Keep the
|
|
99
104
|
application's own skills in another `.agents/skills/` namespace; the copy never
|
|
@@ -56,7 +56,7 @@ belong to their component documentation and project instructions.
|
|
|
56
56
|
| --- | --- |
|
|
57
57
|
| `.agents/skills/client/metatables-local-development/SKILL.md` | Local-first application development, runtime/DataSource checks, isolated verification and explicit return to the environment. |
|
|
58
58
|
| `.agents/skills/client/metatables-meta-tables/SKILL.md` | SQLAlchemy contracts, external registration, governed queries and client access operations. |
|
|
59
|
-
| `.agents/skills/client/metatables-migrations/SKILL.md` | Alembic providers, offline revisions,
|
|
59
|
+
| `.agents/skills/client/metatables-migrations/SKILL.md` | Application-owned Alembic providers, offline revisions, shared migration execution, timing diagnostics and recovery for managed application tables. |
|
|
60
60
|
| `.agents/skills/client/metatables-table-discovery/SKILL.md` | Table search, and the authoritative rules for table descriptions, labels and column metadata (ADR 0018). |
|
|
61
61
|
| `.agents/skills/client/metatables-time-index-table-updates/SKILL.md` | Producers, dependencies, incremental frames and existing-table readers. |
|
|
62
62
|
|
|
@@ -10,6 +10,13 @@ new image, and a failure blocks the rollout. Settings is read-only in Hosted mod
|
|
|
10
10
|
See [the deployment gate](hosted-runtime.md#deployment-gate) and
|
|
11
11
|
[ADR 0014](../adr/api/0014-main-sequence-release-jobs-and-production-migrations.md).
|
|
12
12
|
|
|
13
|
+
The deployment gate checks revisions and registration during preflight, then
|
|
14
|
+
validates the full system schema once inside the migration runner, including when
|
|
15
|
+
the database is already current. Registration and permission setup finish under
|
|
16
|
+
the same bootstrap lock. Schema reflection is batched across the required tables;
|
|
17
|
+
the job logs the number of tables validated and elapsed time. Startup and explicit
|
|
18
|
+
activation still perform their own fresh schema validation.
|
|
19
|
+
|
|
13
20
|
Local mode initializes its SQLite file explicitly in Settings:
|
|
14
21
|
|
|
15
22
|
1. Open **Settings**. Local mode prefills the single local SQLite runtime file,
|
|
@@ -249,6 +249,7 @@ src/metatables/api/app/routes/update_statistics.py
|
|
|
249
249
|
src/metatables/api/backend/__init__.py
|
|
250
250
|
src/metatables/api/backend/backends/__init__.py
|
|
251
251
|
src/metatables/api/backend/backends/access.py
|
|
252
|
+
src/metatables/api/backend/backends/batch_inspection.py
|
|
252
253
|
src/metatables/api/backend/backends/catalog.py
|
|
253
254
|
src/metatables/api/backend/backends/catalog_ddl.py
|
|
254
255
|
src/metatables/api/backend/backends/catalog_types.py
|
|
@@ -331,6 +332,7 @@ src/metatables/api/backend/migrations/versions/0012_table_creator.py
|
|
|
331
332
|
src/metatables/api/backend/migrations/versions/__init__.py
|
|
332
333
|
src/metatables/api/backend/operations/__init__.py
|
|
333
334
|
src/metatables/api/backend/operations/bootstrap_migrations.py
|
|
335
|
+
src/metatables/api/backend/operations/bootstrap_timing.py
|
|
334
336
|
src/metatables/api/backend/operations/catalog_schema.py
|
|
335
337
|
src/metatables/api/backend/operations/create_table.py
|
|
336
338
|
src/metatables/api/backend/operations/finalize_managed.py
|
|
@@ -468,6 +470,7 @@ tests/catalog/test_contract_projection.py
|
|
|
468
470
|
tests/catalog/test_database_config.py
|
|
469
471
|
tests/catalog/test_index_statistics.py
|
|
470
472
|
tests/catalog/test_migration.py
|
|
473
|
+
tests/catalog/test_schema_validation.py
|
|
471
474
|
tests/contracts/capabilities.json
|
|
472
475
|
tests/contracts/client_signatures.json
|
|
473
476
|
tests/contracts/database_operations.json
|
|
@@ -515,6 +518,7 @@ tests/e2e/test_local_actor_client_api.py
|
|
|
515
518
|
tests/e2e/test_local_cli_workflow.py
|
|
516
519
|
tests/e2e/test_local_client_selection.py
|
|
517
520
|
tests/e2e/test_managed_finalize_client_api.py
|
|
521
|
+
tests/e2e/test_managed_finalize_unchanged.py
|
|
518
522
|
tests/e2e/test_namespaces_admin_http.py
|
|
519
523
|
tests/e2e/test_public_imports.py
|
|
520
524
|
tests/e2e/test_remaining_client_routes.py
|
|
@@ -545,6 +549,7 @@ tests/examples/test_documented_examples.py
|
|
|
545
549
|
tests/examples/test_postgresql_examples.py
|
|
546
550
|
tests/examples/test_setup_launch.py
|
|
547
551
|
tests/examples/test_tutorial.py
|
|
552
|
+
tests/integrations/test_batch_introspection.py
|
|
548
553
|
tests/integrations/test_connection_reuse.py
|
|
549
554
|
tests/integrations/test_credential_store.py
|
|
550
555
|
tests/integrations/test_data_source_rules.py
|
|
@@ -571,6 +576,7 @@ tests/packaging/test_distribution_sources.py
|
|
|
571
576
|
tests/packaging/test_editable_build.py
|
|
572
577
|
tests/packaging/test_installed_distribution.py
|
|
573
578
|
tests/permissions/test_access_map.py
|
|
579
|
+
tests/permissions/test_deployment_security.py
|
|
574
580
|
tests/permissions/test_governed_sql_scope.py
|
|
575
581
|
tests/permissions/test_incremental_security.py
|
|
576
582
|
tests/permissions/test_local_actor_membership.py
|