mainsequence-metatable 0.1.26.dev43__tar.gz → 0.1.27__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.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-migrations/SKILL.md +32 -8
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.mainsequence/workflows/metatables-api.yaml +5 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0019-metatables-analyst-agent.md +12 -3
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +1 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0002-application-administration-and-table-ownership.md +39 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-database-enforced-table-access.md +6 -2
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/openapi.json +53 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/deploy-application-migrations.md +57 -3
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/ownership-and-sharing.md +12 -4
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/permissions.md +2 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/pyproject.toml +2 -2
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_boundaries.py +1 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/SOURCES.txt +2 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/runtime_context.py +29 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_registration.py +3 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime.py +3 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/catalog_rules.py +10 -0
- mainsequence_metatable-0.1.27/src/metatables/api/backend/migrations/versions/0012_table_creator.py +42 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/register_catalog.py +62 -11
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/catalog.py +1 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/models.py +2 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime_contract.py +9 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_agent_surface.py +3 -1
- mainsequence_metatable-0.1.27/tests/auth/test_hosted_agent.py +59 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_hosted_environment_target.py +6 -3
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_bootstrap.py +8 -8
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_migration.py +46 -8
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_catalog_contract.py +4 -3
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_remaining_client_routes.py +1 -1
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_register_catalog.py +114 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/uv.lock +5 -5
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/LICENSE +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/analysis.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/mcp.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_mcp.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: metatables-migrations
|
|
3
|
-
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope and placement, scaffolding, revision authoring, local execution, the deployment-workflow migration Job for hosted runtimes, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
3
|
+
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope and placement, scaffolding, revision authoring, local execution, the deployment-workflow migration Job for hosted runtimes, the Team that owns an application's tables in each Environment, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# MetaTables client application migrations
|
|
@@ -50,11 +50,21 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
|
|
|
50
50
|
1. **Develop locally.** Author the revision and apply it to verified local SQLite
|
|
51
51
|
with the [local development skill](../metatables-local-development/SKILL.md).
|
|
52
52
|
2. **Commit the revision with the code that needs it.**
|
|
53
|
-
3. **
|
|
53
|
+
3. **Give a Team the tables.** Before the first hosted migration in each
|
|
54
|
+
Environment, the application's tables need an owning Team: one platform Team
|
|
55
|
+
per Environment (for example `ledger-development`), whose members are the
|
|
56
|
+
migration Job's workload User and the workload User of every resource that
|
|
57
|
+
reads or writes the tables. An Organization admin creates the application's
|
|
58
|
+
namespace in that Environment and grants the Team Writer on it. Tell the user
|
|
59
|
+
these steps; they are made in the platform and in MetaTables Security, not in
|
|
60
|
+
the repository.
|
|
61
|
+
4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
|
|
54
62
|
migration Job that calls `upgrade_application` for each provider, in
|
|
55
|
-
dependency order, from the candidate image.
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
dependency order, from the candidate image. The Job and every resource that
|
|
64
|
+
uses MetaTables declare `access.branches: [{repository: MetaTables, level: view}]`.
|
|
65
|
+
Every deployed resource that reads or writes the tables (FastAPI,
|
|
66
|
+
`harness_agent` and others) has a deploy step with `needs: [migrate]`. A failed
|
|
67
|
+
migration blocks the rollout.
|
|
58
68
|
|
|
59
69
|
Rules:
|
|
60
70
|
|
|
@@ -69,6 +79,12 @@ Rules:
|
|
|
69
79
|
during and after a failed rollout. Add first; drop or rename in a later release.
|
|
70
80
|
- Redeploying an older image does not roll back the schema. Downgrade is never a
|
|
71
81
|
deployment step.
|
|
82
|
+
- Tables belong to the Team, never to one workload User. Workload Users change
|
|
83
|
+
with each Environment and each recreated Job; a new one needs Team membership
|
|
84
|
+
only. Do not ask for direct table grants to a workload User, and do not run the
|
|
85
|
+
Job as an Organization admin to get around a refusal.
|
|
86
|
+
- Every table a provider registers goes in the Team's namespace. A table
|
|
87
|
+
registered in a namespace the caller already writes gets no grant of its own.
|
|
72
88
|
|
|
73
89
|
## Source and runtime context
|
|
74
90
|
|
|
@@ -205,8 +221,15 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
205
221
|
another install overwrote it. Move the provider as the
|
|
206
222
|
[legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md) describes;
|
|
207
223
|
do not edit files in `site-packages`.
|
|
208
|
-
- If reservation fails
|
|
209
|
-
|
|
224
|
+
- If reservation fails with `namespace_not_writable` or `table_not_editable`
|
|
225
|
+
(403), the caller lacks Writer through the owning Team. Add the
|
|
226
|
+
`caller_user_uid` from the error to the Team with Writer on the namespace, or,
|
|
227
|
+
when the namespace or Team is missing, set them up as in step 3. A table
|
|
228
|
+
registered before the Team existed may have only a retired workload User as
|
|
229
|
+
Writer; an Organization admin grants the Team Writer on its namespace. Do not
|
|
230
|
+
change code or physical names to get around it.
|
|
231
|
+
- If reservation fails otherwise, compare provider scope and physical identities
|
|
232
|
+
before changing code. Do not create a second catalog row for the same table.
|
|
210
233
|
- If Alembic succeeds but finalization fails, physical DDL may already be
|
|
211
234
|
committed. Inspect every per-table result and the actual schema before
|
|
212
235
|
retrying.
|
|
@@ -220,5 +243,6 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
220
243
|
|
|
221
244
|
Verify provider scope and placement, revision content, the selected environment
|
|
222
245
|
connection, repeat execution, and final active bindings. Check that the deployment
|
|
223
|
-
workflow runs the migration Job before every resource that uses the tables
|
|
246
|
+
workflow runs the migration Job before every resource that uses the tables, and
|
|
247
|
+
that each Environment has its owning Team with the Job's workload User. Report
|
|
224
248
|
separately what was checked offline and what was exercised against a configured API.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
schema=1
|
|
2
2
|
library_name=ms-tau-sdk
|
|
3
3
|
namespace=ms_tau_sdk
|
|
4
|
-
pinned_version=2.0.8
|
|
4
|
+
pinned_version=2.0.8
|
|
5
5
|
skills_path=src/ms_tau_sdk/agent_skills
|
|
6
6
|
skills=tau_a2a_runtime_adapter,tau_local_development,tau_project_customization,tau_repository_integration,tau_security_and_access
|
|
7
7
|
command=ms-tau skills sync --path .
|
|
@@ -17,12 +17,16 @@ resources:
|
|
|
17
17
|
secrets:
|
|
18
18
|
- name: METATABLES_RUNTIME_DATABASE
|
|
19
19
|
level: view
|
|
20
|
+
# /runtime-context/ tells applications this branch's Analyst (ADR 0019).
|
|
21
|
+
resources:
|
|
22
|
+
- key: metatables-analyst-agent
|
|
23
|
+
level: view
|
|
20
24
|
|
|
21
25
|
- key: metatables-analyst-agent
|
|
22
26
|
kind: harness_agent
|
|
23
27
|
spec:
|
|
24
28
|
source_path: api/tau/main.py
|
|
25
|
-
llm_provider: openai
|
|
29
|
+
llm_provider: openai-codex
|
|
26
30
|
llm_model: gpt-5.6-luna
|
|
27
31
|
llm_thinking: medium
|
|
28
32
|
automatic_deployment: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.27
|
|
4
4
|
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
5
|
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
|
|
|
51
51
|
Provides-Extra: docs
|
|
52
52
|
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
|
|
53
53
|
Provides-Extra: agent
|
|
54
|
-
Requires-Dist: ms-tau-sdk==2.0.8
|
|
54
|
+
Requires-Dist: ms-tau-sdk==2.0.8; extra == "agent"
|
|
55
55
|
Provides-Extra: mysql
|
|
56
56
|
Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
|
|
57
57
|
Provides-Extra: mssql
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# ADR 0019: MetaTables Analyst agent
|
|
2
2
|
|
|
3
|
+
> Amendment (2026-10-08): The API names this branch's Analyst to applications.
|
|
4
|
+
> `GET /runtime-context/` returns `hosted_agent` (`uid`, `name`, `status`) beside
|
|
5
|
+
> `hosted_environment`: the Agent the API's own branch deploys, which the API finds with its
|
|
6
|
+
> workload credentials and caches for an hour like the Environment; a failed lookup is
|
|
7
|
+
> `unavailable` and is not cached. The API's `access` names the Analyst by its key so it can
|
|
8
|
+
> see it. An application's assistant, such as the MetaTables Admin rail, takes the Agent and
|
|
9
|
+
> the Environment from there instead of build values. A re-created Analyst reaches it at the
|
|
10
|
+
> API's next deployment, which the same push starts. Local mode reports neither.
|
|
11
|
+
>
|
|
3
12
|
> Amendment (2026-10-08): [ADR 0020](0020-analyst-reads-as-its-requester.md) replaces
|
|
4
13
|
> the agent's own Reader grants: each tool call is answered as the person the turn
|
|
5
14
|
> serves, so nobody reads more through the agent than they can read directly.
|
|
@@ -30,7 +39,7 @@ Status: Accepted.
|
|
|
30
39
|
Implementation status: implemented on `development`; not yet deployed. Tests cover the
|
|
31
40
|
tools against a stand-in catalog, `deep_search`, `describe_table` and `list_namespaces`
|
|
32
41
|
through the client against the API, and the extension, card, workflow and vendored skills with
|
|
33
|
-
ms-tau-sdk 2.0.8.
|
|
42
|
+
ms-tau-sdk 2.0.8. A local `ms-tau` session and the hosted deployment have not run.
|
|
34
43
|
|
|
35
44
|
Owner: this repository deploys the agent. The MetaTables API is unchanged; the agent
|
|
36
45
|
is one more API client.
|
|
@@ -61,7 +70,7 @@ refuses anything else.
|
|
|
61
70
|
|
|
62
71
|
| Part | Rule |
|
|
63
72
|
| --- | --- |
|
|
64
|
-
| Runtime | `ms-tau-sdk` 2.0.8
|
|
73
|
+
| Runtime | `ms-tau-sdk` 2.0.8, `openai-codex` / `gpt-5.6-luna`, thinking `medium`. |
|
|
65
74
|
| Identity | The person each turn serves (ADR 0020); the agent's own identity holds no grants. |
|
|
66
75
|
| Tools | The six tools below, served by the API over MCP when hosted (ADR 0021), and the SDK's skill-scoped `read`. No shell, file writes or Main Sequence MCP. |
|
|
67
76
|
| Instructions | `.tau/SYSTEM.md` covers MetaTables; vendored `pg-aiguide` skills cover PostgreSQL and TimescaleDB. |
|
|
@@ -120,7 +129,7 @@ The agent card's two skills, `discover-tables` and `analyze-with-sql` in
|
|
|
120
129
|
The skills of [timescale/pg-aiguide](https://github.com/timescale/pg-aiguide)
|
|
121
130
|
(Apache-2.0) are vendored at commit `b236d35` with its license and notice, one
|
|
122
131
|
directory per skill under `.tau/skills/`, because Tau discovers skills one level deep.
|
|
123
|
-
The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.8
|
|
132
|
+
The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.8 registers
|
|
124
133
|
when `TAU_EXCLUDE_BASE_TOOLS=true`. The directive takes precedence over them:
|
|
125
134
|
|
|
126
135
|
- Discover tables through the MetaTables tools, not `pg_catalog`, which also lists
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Status: Accepted.
|
|
4
4
|
|
|
5
5
|
Implementation status: implemented on `development`; not deployed. It builds on platform
|
|
6
|
-
ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.8
|
|
6
|
+
ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.8 for the
|
|
7
7
|
Analyst and mainsequence 9.0.19, whose `User.get_requester()` the API reads. Tests cover
|
|
8
8
|
admission through real signed assertions; a hosted turn has not run.
|
|
9
9
|
|
|
@@ -344,6 +344,42 @@ their own workload Users, which need to be granted like people.
|
|
|
344
344
|
`reads_as_caller()`, the User `search` filter, `managed_by_caller`,
|
|
345
345
|
`workload_name` and Team members that may be workload Users.
|
|
346
346
|
|
|
347
|
+
### Amendment: Teams own application tables (2026-10-09)
|
|
348
|
+
|
|
349
|
+
Since platform ADR-0048 every Job, release and Agent runs as its own workload
|
|
350
|
+
User. Each Environment, and each recreated Job, has a new one. A table's creator
|
|
351
|
+
grant tied the table to the workload User that first registered it, so the next
|
|
352
|
+
identity of the same application could not re-register its own tables
|
|
353
|
+
([#43](https://github.com/mainsequence-projects/MetaTables/issues/43)).
|
|
354
|
+
|
|
355
|
+
- **A Team owns an application's tables.** Before an application's first
|
|
356
|
+
migration in an Environment, an Organization admin creates its namespace and
|
|
357
|
+
grants Writer on it to a platform Team. The application's migration Job and
|
|
358
|
+
every workload User that reads or writes its tables are members of that Team.
|
|
359
|
+
Use one Team per Environment, so that one Environment's workloads are not
|
|
360
|
+
Writers in another. A new workload User needs Team membership only; the tables
|
|
361
|
+
keep their owner.
|
|
362
|
+
- **No creator grant under a namespace Writer.** Registering a new table into a
|
|
363
|
+
namespace where the caller is already a Writer, directly or through a Team, adds
|
|
364
|
+
no creator grant: the namespace's Writers control the table. Otherwise the
|
|
365
|
+
creator still receives Writer, including an admin registering into a namespace
|
|
366
|
+
where they have no grant, so no table starts without a Writer.
|
|
367
|
+
- **Creator attribution is a column.** `meta_table.created_by_user_uid` records
|
|
368
|
+
who registered each table and grants nothing. System migration
|
|
369
|
+
`0012_table_creator` adds it and fills it from each table's first self-granted
|
|
370
|
+
Writer in the grant history.
|
|
371
|
+
- **Refusals say how to recover.** Registration refusals are 403s with a `code`:
|
|
372
|
+
`table_not_editable` for an existing table the caller cannot edit,
|
|
373
|
+
`namespace_not_writable` for a namespace that is missing or that the caller
|
|
374
|
+
cannot write. Both name the caller's User UID and the recovery: add it to the
|
|
375
|
+
Team with Writer on the namespace, or ask an Organization admin. The table's
|
|
376
|
+
namespace is named when the caller requested it or can read the table; its
|
|
377
|
+
Writers are listed only when the caller can read the table.
|
|
378
|
+
|
|
379
|
+
Tables whose only Writer is a replaced identity are recovered the same way: an
|
|
380
|
+
admin grants the application's Team Writer on their namespace. There is no admin
|
|
381
|
+
bypass and no automatic adoption.
|
|
382
|
+
|
|
347
383
|
## Superseded behavior and preserved boundaries
|
|
348
384
|
|
|
349
385
|
This decision supersedes ADR 0001's pending-runtime configurator/existing-source
|
|
@@ -397,6 +433,9 @@ schema baseline/recreation policy remains governed by ADR 0001.
|
|
|
397
433
|
resources through counts, search, lineage, or error details.
|
|
398
434
|
- A Writer can grant/revoke Reader and Writer access only on tables they control.
|
|
399
435
|
Re-registering an existing table never grants the caller ownership.
|
|
436
|
+
- A new member of the Team with Writer on an application's namespace registers and
|
|
437
|
+
migrates that application's existing tables; a caller outside it is refused with
|
|
438
|
+
a recovery path that reveals nothing it cannot read.
|
|
400
439
|
- Team changes and namespace revocation/moves change effective access under the
|
|
401
440
|
documented freshness rules; independent grants remain visible and effective.
|
|
402
441
|
- Non-admins cannot manage DataSources, runtime selection, system migrations,
|
|
@@ -299,8 +299,12 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
|
|
|
299
299
|
- Physical table names become visible to explorer users.
|
|
300
300
|
- Cascading foreign keys are allowed. Tables that reference a table never change
|
|
301
301
|
who may write it.
|
|
302
|
-
- Team membership reaches the database
|
|
303
|
-
|
|
302
|
+
- Team membership reaches the database on the caller's next query. Each SQL
|
|
303
|
+
admission compares the caller's current Teams with the ones its role was last
|
|
304
|
+
given and reconciles the roles first when they differ. A hosted caller's Teams
|
|
305
|
+
come from its signed assertion on every request
|
|
306
|
+
([ADR 0017](0017-hosted-request-identity.md), 2026-10-05 amendment); only the
|
|
307
|
+
developer's own facts in Local and developer mode are cached for up to an hour.
|
|
304
308
|
|
|
305
309
|
## Implementation
|
|
306
310
|
|
|
@@ -763,6 +763,49 @@
|
|
|
763
763
|
"title": "HTTPValidationError",
|
|
764
764
|
"type": "object"
|
|
765
765
|
},
|
|
766
|
+
"HostedAgent": {
|
|
767
|
+
"description": "The Harness Agent this API's branch deploys, as the API's workload sees it.",
|
|
768
|
+
"properties": {
|
|
769
|
+
"name": {
|
|
770
|
+
"anyOf": [
|
|
771
|
+
{
|
|
772
|
+
"type": "string"
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"type": "null"
|
|
776
|
+
}
|
|
777
|
+
],
|
|
778
|
+
"title": "Name"
|
|
779
|
+
},
|
|
780
|
+
"status": {
|
|
781
|
+
"enum": [
|
|
782
|
+
"verified",
|
|
783
|
+
"not_found",
|
|
784
|
+
"unavailable",
|
|
785
|
+
"not_configured"
|
|
786
|
+
],
|
|
787
|
+
"title": "Status",
|
|
788
|
+
"type": "string"
|
|
789
|
+
},
|
|
790
|
+
"uid": {
|
|
791
|
+
"anyOf": [
|
|
792
|
+
{
|
|
793
|
+
"type": "string"
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"type": "null"
|
|
797
|
+
}
|
|
798
|
+
],
|
|
799
|
+
"title": "Uid"
|
|
800
|
+
}
|
|
801
|
+
},
|
|
802
|
+
"required": [
|
|
803
|
+
"uid",
|
|
804
|
+
"status"
|
|
805
|
+
],
|
|
806
|
+
"title": "HostedAgent",
|
|
807
|
+
"type": "object"
|
|
808
|
+
},
|
|
766
809
|
"HostedEnvironment": {
|
|
767
810
|
"properties": {
|
|
768
811
|
"is_production": {
|
|
@@ -3152,6 +3195,16 @@
|
|
|
3152
3195
|
],
|
|
3153
3196
|
"title": "Git Source"
|
|
3154
3197
|
},
|
|
3198
|
+
"hosted_agent": {
|
|
3199
|
+
"anyOf": [
|
|
3200
|
+
{
|
|
3201
|
+
"$ref": "#/components/schemas/HostedAgent"
|
|
3202
|
+
},
|
|
3203
|
+
{
|
|
3204
|
+
"type": "null"
|
|
3205
|
+
}
|
|
3206
|
+
]
|
|
3207
|
+
},
|
|
3155
3208
|
"hosted_environment": {
|
|
3156
3209
|
"anyOf": [
|
|
3157
3210
|
{
|
|
@@ -15,10 +15,13 @@ before anything that uses the tables rolls out. See
|
|
|
15
15
|
[Local storage](local-storage.md).
|
|
16
16
|
2. **Commit the revision with the code that needs it.** Applied revisions are
|
|
17
17
|
immutable; every later schema change is a new revision.
|
|
18
|
-
3. **
|
|
18
|
+
3. **Give a Team the tables.** Before the first hosted migration in each
|
|
19
|
+
Environment, set up the Team that owns the application's tables
|
|
20
|
+
([below](#give-the-job-access-through-a-team)).
|
|
21
|
+
4. **Deploy.** The application's workflow runs its migration Job from the
|
|
19
22
|
candidate image, then deploys the resources that read or write the tables.
|
|
20
23
|
|
|
21
|
-
Hosted runtimes are migrated only by step
|
|
24
|
+
Hosted runtimes are migrated only by step 4. Do not run `metatables migrations
|
|
22
25
|
upgrade` or `downgrade` against a hosted API from a developer machine or agent
|
|
23
26
|
session. Do not migrate at application startup either: several pods would race,
|
|
24
27
|
and a failure would not stop the rollout.
|
|
@@ -78,6 +81,56 @@ Give every other deployed resource that reads or writes the tables, such as a
|
|
|
78
81
|
`harness_agent`, its own deploy step with `needs: [migrate]`. Validate the file
|
|
79
82
|
against the branch's workflow template before committing it.
|
|
80
83
|
|
|
84
|
+
## Give the Job access through a Team
|
|
85
|
+
|
|
86
|
+
The Job runs as its own workload User, and each Environment, and each recreated
|
|
87
|
+
Job, has a new one. A table owned by one workload User is lost to the next, so the
|
|
88
|
+
application's tables belong to a platform Team instead:
|
|
89
|
+
|
|
90
|
+
1. **Create one Team per Environment** for the application, for example
|
|
91
|
+
`ledger-development` and `ledger-production`. A shared Team would make one
|
|
92
|
+
Environment's workloads Writers in another.
|
|
93
|
+
2. **Add the workload Users.** Add the migration Job's workload User, and the
|
|
94
|
+
workload User of every resource that reads or writes the tables (FastAPI
|
|
95
|
+
release, Agent, other Jobs). Each resource's `workload_user_uid` names it.
|
|
96
|
+
3. **Grant the Team the namespace.** An Organization admin creates the
|
|
97
|
+
application's namespace in that Environment's MetaTables, under
|
|
98
|
+
**Security**, or with `POST /security/namespaces/`, and grants the Team Writer
|
|
99
|
+
on it (`PUT /namespaces/{uid}/permissions`). Every table registered in the
|
|
100
|
+
namespace inherits the grant.
|
|
101
|
+
|
|
102
|
+
The Job also needs platform `view` on the Environment's `metatables` release and
|
|
103
|
+
its branch to discover the API; declare it on the Job:
|
|
104
|
+
|
|
105
|
+
```yaml
|
|
106
|
+
- key: migrate-ledger
|
|
107
|
+
kind: job
|
|
108
|
+
spec:
|
|
109
|
+
name: Ledger migrations
|
|
110
|
+
execution_path: jobs/migrate_ledger.py
|
|
111
|
+
access:
|
|
112
|
+
branches:
|
|
113
|
+
- repository: MetaTables
|
|
114
|
+
level: view
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Team membership takes effect on the workload's next request, in the catalog and in
|
|
118
|
+
the database. When a workload User changes, add the new one to the Team; nothing
|
|
119
|
+
in MetaTables changes. A table registered in a namespace the caller already
|
|
120
|
+
writes gets no grant of its own, so the Team stays its only owner.
|
|
121
|
+
|
|
122
|
+
### When registration is refused
|
|
123
|
+
|
|
124
|
+
- **`namespace_not_writable`**: the namespace does not exist in this Environment,
|
|
125
|
+
or the caller is not its Writer. Do steps 1 to 3 for the `caller_user_uid` the
|
|
126
|
+
error names.
|
|
127
|
+
- **`table_not_editable`**: the table is already registered and the caller is not
|
|
128
|
+
its Writer. Add the `caller_user_uid` to the Team with Writer on the table's
|
|
129
|
+
namespace. When the table was registered before the Team existed, its only
|
|
130
|
+
Writer may be a workload User that no longer runs: an Organization admin
|
|
131
|
+
grants the Team Writer on the namespace, and the table inherits it. The error
|
|
132
|
+
lists the table's Writers when the caller can read the table.
|
|
133
|
+
|
|
81
134
|
## What the Job guarantees
|
|
82
135
|
|
|
83
136
|
- It runs on every deployment. A database already at head is left unchanged and
|
|
@@ -89,7 +142,8 @@ against the branch's workflow template before committing it.
|
|
|
89
142
|
- The Job finds the Environment's MetaTables API the same way any client does
|
|
90
143
|
([installation and connection](installation-and-connection.md)). That API must
|
|
91
144
|
be deployed with its system migrations applied; otherwise the Job fails. Its
|
|
92
|
-
|
|
145
|
+
workload User needs Writer on the application's namespace through the Team
|
|
146
|
+
above.
|
|
93
147
|
|
|
94
148
|
## Keep each release compatible with the previous one
|
|
95
149
|
|
|
@@ -2,15 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## Ownership is Writer access
|
|
4
4
|
|
|
5
|
-
The creator receives Writer access when a new table is registered
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
The creator receives Writer access when a new table is registered, unless the
|
|
6
|
+
table's namespace already makes the creator a Writer, directly or through a Team.
|
|
7
|
+
Then the namespace's Writers control the table and no creator grant is added. A
|
|
8
|
+
Writer can grant Reader or Writer access to other platform Users and Teams, change
|
|
9
|
+
a direct grant, or revoke it. Readers cannot change grants.
|
|
8
10
|
|
|
9
11
|
Several principals can be Writers. The original creator has no permanent
|
|
10
|
-
permission separate from grants:
|
|
12
|
+
permission separate from grants: `created_by_user_uid` records who created the
|
|
11
13
|
table, while effective access determines who controls it now. Organization admins
|
|
12
14
|
can restore access when no Writer remains.
|
|
13
15
|
|
|
16
|
+
Deployed Jobs, releases and Agents run as their own workload Users, which change
|
|
17
|
+
with each Environment and each recreated Job. Give an application's tables to a
|
|
18
|
+
Team instead: grant the Team Writer on the application's namespace and make the
|
|
19
|
+
workload Users members. See
|
|
20
|
+
[Migrate in the deployment workflow](../client/deploy-application-migrations.md#give-the-job-access-through-a-team).
|
|
21
|
+
|
|
14
22
|
## One central table-access model
|
|
15
23
|
|
|
16
24
|
`MetaTableGrant` is the foundation of the central access model. Each direct grant
|
{mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/permissions.md
RENAMED
|
@@ -22,7 +22,8 @@ Organization admin status comes from the platform through the SDK.
|
|
|
22
22
|
|
|
23
23
|
Creation checks the selected DataSource's storage access mode and the table's
|
|
24
24
|
lifecycle requirements. The table and its creator's Writer grant are recorded
|
|
25
|
-
together
|
|
25
|
+
together, unless the namespace already makes the creator a Writer. Re-registering
|
|
26
|
+
an existing table cannot give another caller ownership.
|
|
26
27
|
|
|
27
28
|
Initial runtime setup must check the platform admin fact before the application
|
|
28
29
|
grant tables exist. Configuring a pending database does not make the first caller
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mainsequence-metatable"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.27"
|
|
8
8
|
description = "Main Sequence MetaTables Python client and standalone API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -59,7 +59,7 @@ Documentation = "https://potential-doodle-wn39mnm.pages.github.io/"
|
|
|
59
59
|
[project.optional-dependencies]
|
|
60
60
|
dev = ["pytest>=8,<10", "ruff>=0.14", "build>=1,<2", "packaging>=24.2", "twine>=6,<7"]
|
|
61
61
|
docs = ["mkdocs>=1.6,<2"]
|
|
62
|
-
agent = ["ms-tau-sdk==2.0.8
|
|
62
|
+
agent = ["ms-tau-sdk==2.0.8"]
|
|
63
63
|
mysql = ["PyMySQL[rsa]>=1.1.1,<1.2"]
|
|
64
64
|
# Keep the published extra name for existing installers; pyodbc is required.
|
|
65
65
|
mssql = []
|
{mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_boundaries.py
RENAMED
|
@@ -15,7 +15,7 @@ RETIRED_TERMS = (
|
|
|
15
15
|
)
|
|
16
16
|
SDK_MODULES = frozenset({
|
|
17
17
|
'mainsequence.scaffold_skills',
|
|
18
|
-
'mainsequence.client', 'mainsequence.client.base', 'mainsequence.client.exceptions',
|
|
18
|
+
'mainsequence.client', 'mainsequence.client.agent_runtime_models', 'mainsequence.client.base', 'mainsequence.client.exceptions',
|
|
19
19
|
'mainsequence.client.models_helpers',
|
|
20
20
|
'mainsequence.client.models_user', 'mainsequence.client.utils', 'mainsequence.client.value_sets',
|
|
21
21
|
'mainsequence.cli.config', 'mainsequence.code_repository_context',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.27
|
|
4
4
|
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
5
|
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
|
|
|
51
51
|
Provides-Extra: docs
|
|
52
52
|
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
|
|
53
53
|
Provides-Extra: agent
|
|
54
|
-
Requires-Dist: ms-tau-sdk==2.0.8
|
|
54
|
+
Requires-Dist: ms-tau-sdk==2.0.8; extra == "agent"
|
|
55
55
|
Provides-Extra: mysql
|
|
56
56
|
Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
|
|
57
57
|
Provides-Extra: mssql
|
|
@@ -320,6 +320,7 @@ src/metatables/api/backend/migrations/versions/0008_upload_receipts.py
|
|
|
320
320
|
src/metatables/api/backend/migrations/versions/0009_timescale_policies.py
|
|
321
321
|
src/metatables/api/backend/migrations/versions/0010_cascade_targets.py
|
|
322
322
|
src/metatables/api/backend/migrations/versions/0011_table_search.py
|
|
323
|
+
src/metatables/api/backend/migrations/versions/0012_table_creator.py
|
|
323
324
|
src/metatables/api/backend/migrations/versions/__init__.py
|
|
324
325
|
src/metatables/api/backend/operations/__init__.py
|
|
325
326
|
src/metatables/api/backend/operations/bootstrap_migrations.py
|
|
@@ -443,6 +444,7 @@ tests/analyst/test_tools.py
|
|
|
443
444
|
tests/auth/test_bootstrap_failure_cause.py
|
|
444
445
|
tests/auth/test_data_source_identity.py
|
|
445
446
|
tests/auth/test_development_client.py
|
|
447
|
+
tests/auth/test_hosted_agent.py
|
|
446
448
|
tests/auth/test_hosted_environment_target.py
|
|
447
449
|
tests/auth/test_local_mode.py
|
|
448
450
|
tests/auth/test_platform_fact_cache.py
|
|
@@ -12,7 +12,7 @@ from metatables.api.app.runtime import data_source_provider
|
|
|
12
12
|
from metatables.api.app.runtime_control import runtime_instance_id
|
|
13
13
|
from metatables.api.backend.integrations.local_workspace import source_descriptor
|
|
14
14
|
from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
|
|
15
|
-
from metatables.runtime_contract import HostedEnvironment, RuntimeContext
|
|
15
|
+
from metatables.runtime_contract import HostedAgent, HostedEnvironment, RuntimeContext
|
|
16
16
|
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
18
18
|
|
|
@@ -49,6 +49,32 @@ def cached_environment(cache: PlatformCache[UUID, HostedEnvironment], uid: UUID
|
|
|
49
49
|
return cache.get(uid, lambda: verified_environment(uid))
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
def branch_agent() -> HostedAgent:
|
|
53
|
+
"""The Harness Agent this API's branch deploys (ADR 0019); a branch deploys at most one.
|
|
54
|
+
|
|
55
|
+
A failed lookup raises, so the cache keeps no failure.
|
|
56
|
+
"""
|
|
57
|
+
from mainsequence.client.agent_runtime_models import Agent
|
|
58
|
+
from mainsequence.code_repository_context import get_code_repository_context
|
|
59
|
+
|
|
60
|
+
branch_uid = get_code_repository_context().code_repository_branch_uid
|
|
61
|
+
agents = [agent for agent in Agent.filter(timeout=(2, 5))
|
|
62
|
+
if branch_uid and agent.code_repository_branch_uid == branch_uid]
|
|
63
|
+
if len(agents) != 1:
|
|
64
|
+
return HostedAgent(uid=None, status="not_found")
|
|
65
|
+
return HostedAgent(uid=agents[0].uid, status="verified", name=agents[0].name)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def cached_agent(cache: PlatformCache[UUID, HostedAgent], environment_uid: UUID | None) -> HostedAgent:
|
|
69
|
+
if environment_uid is None:
|
|
70
|
+
return HostedAgent(uid=None, status="not_configured")
|
|
71
|
+
try:
|
|
72
|
+
return cache.get(environment_uid, branch_agent)
|
|
73
|
+
except Exception:
|
|
74
|
+
logger.exception("Hosted agent lookup failed")
|
|
75
|
+
return HostedAgent(uid=None, status="unavailable")
|
|
76
|
+
|
|
77
|
+
|
|
52
78
|
@router.get("/runtime-context/", response_model=RuntimeContext, response_model_exclude_unset=True)
|
|
53
79
|
def runtime_context(
|
|
54
80
|
request: Request, response: Response,
|
|
@@ -73,6 +99,8 @@ def runtime_context(
|
|
|
73
99
|
"runtime_instance_id": runtime_instance_id(state) if control else None,
|
|
74
100
|
"api_endpoint": f"http://{state.config.expected_host}" if state.config.local_mode else str(request.base_url).rstrip("/"),
|
|
75
101
|
"hosted_environment": environment,
|
|
102
|
+
# The Analyst an application's assistant talks to, in the same Environment (ADR 0019).
|
|
103
|
+
"hosted_agent": None if state.config.local_mode else cached_agent(state.agent_cache, caller.environment_uid),
|
|
76
104
|
"git_source": source_descriptor(workspace.source) if workspace else None,
|
|
77
105
|
"data_source_selection": selection,
|
|
78
106
|
"bootstrap": state.bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.bootstrap else None,
|
|
@@ -25,7 +25,7 @@ from metatables.api.backend.backends.operations import (
|
|
|
25
25
|
from metatables.api.backend.backends.timescale import TimescaleError, convert_time_index_table
|
|
26
26
|
from metatables.api.backend.contracts.storage_layouts import StorageLayoutValidationError
|
|
27
27
|
from metatables.api.backend.contracts.table_contracts import ContractValidationError
|
|
28
|
-
from metatables.api.backend.domain.catalog_rules import CatalogInvariantError
|
|
28
|
+
from metatables.api.backend.domain.catalog_rules import CatalogAccessError, CatalogInvariantError
|
|
29
29
|
from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
|
|
30
30
|
from metatables.api.backend.domain.permission_rules import TrustedActorFacts
|
|
31
31
|
from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
|
|
@@ -164,6 +164,8 @@ def _failure(session, exc, *, item=None):
|
|
|
164
164
|
cause = exc
|
|
165
165
|
if isinstance(exc, HTTPException):
|
|
166
166
|
status, detail, cause = exc.status_code, exc.detail, exc.__cause__
|
|
167
|
+
elif isinstance(exc, CatalogAccessError):
|
|
168
|
+
status, detail = 403, exc.detail
|
|
167
169
|
elif isinstance(exc, DataSourceAdmissionError):
|
|
168
170
|
# Contract rejections name the offending column or index, as contract validation does.
|
|
169
171
|
status = exc.status_code
|
|
@@ -37,7 +37,7 @@ from metatables.api.backend.integrations.runtime_binding import (
|
|
|
37
37
|
RuntimeBindingError,
|
|
38
38
|
RuntimeStorageBinding,
|
|
39
39
|
)
|
|
40
|
-
from metatables.runtime_contract import HostedEnvironment
|
|
40
|
+
from metatables.runtime_contract import HostedAgent, HostedEnvironment
|
|
41
41
|
|
|
42
42
|
logger = logging.getLogger(__name__)
|
|
43
43
|
|
|
@@ -221,6 +221,8 @@ class RuntimeState:
|
|
|
221
221
|
default_factory=PlatformCache, repr=False, compare=False)
|
|
222
222
|
environment_cache: PlatformCache[UUID, HostedEnvironment] = field(
|
|
223
223
|
default_factory=PlatformCache, repr=False, compare=False)
|
|
224
|
+
agent_cache: PlatformCache[UUID, HostedAgent] = field(
|
|
225
|
+
default_factory=PlatformCache, repr=False, compare=False)
|
|
224
226
|
|
|
225
227
|
@property
|
|
226
228
|
def workspace(self) -> LocalWorkspace | None:
|
|
@@ -14,6 +14,15 @@ class CatalogInvariantError(ValueError):
|
|
|
14
14
|
"""A proposed catalog transition violates a MetaTables invariant."""
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
class CatalogAccessError(CatalogInvariantError):
|
|
18
|
+
"""The caller lacks the Writer access a registration needs; ``detail`` says how to recover."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, code: str, message: str, **context):
|
|
21
|
+
super().__init__(message)
|
|
22
|
+
self.code = code
|
|
23
|
+
self.detail = {"code": code, "message": message, **context}
|
|
24
|
+
|
|
25
|
+
|
|
17
26
|
@dataclass(frozen=True)
|
|
18
27
|
class TimeIndexSpec:
|
|
19
28
|
time_index_name: str
|
|
@@ -51,6 +60,7 @@ class TableRegistration:
|
|
|
51
60
|
migration_namespace: str | None = None
|
|
52
61
|
migration_provider_key: str | None = None
|
|
53
62
|
time_index: TimeIndexSpec | None = None
|
|
63
|
+
created_by_user_uid: UUID | None = None
|
|
54
64
|
|
|
55
65
|
@property
|
|
56
66
|
def kind(self) -> str:
|