mainsequence-metatable 0.1.27.dev46__tar.gz → 0.1.28__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.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-meta-tables/SKILL.md +4 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-migrations/SKILL.md +40 -8
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +4 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +10 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.mainsequence/workflows/metatables-api.yaml +12 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/agent/0019-metatables-analyst-agent.md +3 -3
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +1 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +1 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0002-application-administration-and-table-ownership.md +43 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0007-database-enforced-table-access.md +29 -2
- mainsequence_metatable-0.1.28/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +131 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/index.md +1 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/authentication-and-errors.md +2 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/openapi.json +74 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/reference.md +2 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/tables-and-migrations.md +3 -0
- mainsequence_metatable-0.1.28/docs/assets/diagrams/namespace-access.svg +115 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/bounded-transfers.md +5 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/deploy-application-migrations.md +60 -3
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/permissions-namespaces-labels.md +5 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/configuration.md +7 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/hosted-runtime.md +68 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/security/ownership-and-sharing.md +70 -4
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/security/permissions.md +2 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/mkdocs.yml +1 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/pyproject.toml +2 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/SOURCES.txt +14 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/analysis.py +6 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/auth/boundary.py +3 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/auth/local_actor.py +3 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/bootstrap.py +2 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/configuration.py +14 -1
- mainsequence_metatable-0.1.28/src/metatables/api/app/connection_count.py +67 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/main.py +28 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/mcp.py +7 -1
- mainsequence_metatable-0.1.28/src/metatables/api/app/routes/access_map.py +124 -0
- mainsequence_metatable-0.1.28/src/metatables/api/app/routes/caller.py +31 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/runtime_context.py +3 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_registration.py +3 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_sql.py +4 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/runtime.py +3 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/transfer.py +10 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/access.py +159 -14
- mainsequence_metatable-0.1.28/src/metatables/api/backend/backends/adapters/postgresql_connection.py +279 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +3 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/table_cursor.py +1 -3
- mainsequence_metatable-0.1.28/src/metatables/api/backend/backends/connection_pool.py +430 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/hosted.py +6 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/hosted_access.py +26 -26
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/postgresql_access.py +163 -101
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/relational.py +38 -23
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/restricted_sql.py +10 -6
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/sqlite_access.py +3 -1
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/catalog_rules.py +10 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/platform_principals.py +23 -5
- mainsequence_metatable-0.1.28/src/metatables/api/backend/migrations/versions/0012_table_creator.py +42 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/register_catalog.py +62 -11
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/catalog.py +1 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/models.py +2 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/metatables/configuration.yaml +5 -0
- mainsequence_metatable-0.1.28/src/metatables/api/request_timing.py +162 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/__init__.py +49 -11
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/transfer_contract.py +4 -2
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/analyst/test_mcp.py +13 -0
- mainsequence_metatable-0.1.28/tests/auth/test_caller_endpoint.py +37 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_runtime_bootstrap.py +16 -8
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/catalog/test_migration.py +46 -8
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/conftest.py +11 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/conftest.py +3 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_catalog_contract.py +4 -3
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_application_owned_migrations.py +45 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_remaining_client_routes.py +1 -1
- mainsequence_metatable-0.1.28/tests/integrations/test_connection_reuse.py +641 -0
- mainsequence_metatable-0.1.28/tests/integrations/test_request_timing.py +294 -0
- mainsequence_metatable-0.1.28/tests/integrations/test_serving_policy.py +23 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_register_catalog.py +114 -0
- mainsequence_metatable-0.1.28/tests/permissions/test_access_map.py +122 -0
- mainsequence_metatable-0.1.28/tests/permissions/test_incremental_security.py +198 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/uv.lock +5 -5
- mainsequence_metatable-0.1.27.dev46/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -105
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/LICENSE +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/analyst/test_agent_surface.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev46 → mainsequence_metatable-0.1.28}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -178,3 +178,7 @@ for restart recovery. On an uncertain outcome, inspect `upload_receipt()` before
|
|
|
178
178
|
resubmitting; do not assign a fresh key to bypass uncertainty. Administrator
|
|
179
179
|
reconciliation requires verified physical evidence. This workflow uses the Main
|
|
180
180
|
Sequence API and has no Artifact or temporary-URL dependency.
|
|
181
|
+
|
|
182
|
+
A 429 `transfer_capacity_exceeded` or 503 `database_connections_busy` means the
|
|
183
|
+
API was at capacity and nothing ran. Retry after `Retry-After`, including SQL and
|
|
184
|
+
writes; it is not an uncertain outcome.
|
|
@@ -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,24 @@ 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, in that
|
|
58
|
+
Environment, each namespace the provider registers tables in, and grants the
|
|
59
|
+
Team Writer on it. Recommend one namespace per application, owned by its Team;
|
|
60
|
+
it is not required (see "Namespaces and applications" in
|
|
61
|
+
`docs/security/ownership-and-sharing.md`).
|
|
62
|
+
Tell the user these steps; they are made in the platform and in MetaTables
|
|
63
|
+
Security, not in the repository.
|
|
64
|
+
4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
|
|
54
65
|
migration Job that calls `upgrade_application` for each provider, in
|
|
55
|
-
dependency order, from the candidate image.
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
dependency order, from the candidate image. The Job and every resource that
|
|
67
|
+
uses MetaTables declare `access.branches: [{repository: MetaTables, level: view}]`.
|
|
68
|
+
Every deployed resource that reads or writes the tables (FastAPI,
|
|
69
|
+
`harness_agent` and others) has a deploy step with `needs: [migrate]`. A failed
|
|
70
|
+
migration blocks the rollout.
|
|
58
71
|
|
|
59
72
|
Rules:
|
|
60
73
|
|
|
@@ -69,6 +82,13 @@ Rules:
|
|
|
69
82
|
during and after a failed rollout. Add first; drop or rename in a later release.
|
|
70
83
|
- Redeploying an older image does not roll back the schema. Downgrade is never a
|
|
71
84
|
deployment step.
|
|
85
|
+
- Tables belong to the Team, never to one workload User. Workload Users change
|
|
86
|
+
with each Environment and each recreated Job; a new one needs Team membership
|
|
87
|
+
only. Do not ask for direct table grants to a workload User, and do not run the
|
|
88
|
+
Job as an Organization admin to get around a refusal.
|
|
89
|
+
- A table registered in a namespace the caller already writes gets no grant of
|
|
90
|
+
its own; the namespace's Writers own it. The Team needs Writer on every
|
|
91
|
+
namespace the provider uses.
|
|
72
92
|
|
|
73
93
|
## Source and runtime context
|
|
74
94
|
|
|
@@ -205,14 +225,25 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
205
225
|
another install overwrote it. Move the provider as the
|
|
206
226
|
[legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md) describes;
|
|
207
227
|
do not edit files in `site-packages`.
|
|
208
|
-
- If reservation fails
|
|
209
|
-
|
|
228
|
+
- If reservation fails with `namespace_not_writable` or `table_not_editable`
|
|
229
|
+
(403), the caller lacks Writer through the owning Team. Add the
|
|
230
|
+
`caller_user_uid` from the error to the Team with Writer on the namespace, or,
|
|
231
|
+
when the namespace or Team is missing, set them up as in step 3. A table
|
|
232
|
+
registered before the Team existed may have only a retired workload User as
|
|
233
|
+
Writer; an Organization admin grants the Team Writer on its namespace. Do not
|
|
234
|
+
change code or physical names to get around it.
|
|
235
|
+
- If reservation fails otherwise, compare provider scope and physical identities
|
|
236
|
+
before changing code. Do not create a second catalog row for the same table.
|
|
210
237
|
- If Alembic succeeds but finalization fails, physical DDL may already be
|
|
211
238
|
committed. Inspect every per-table result and the actual schema before
|
|
212
239
|
retrying.
|
|
213
240
|
- Inspect partial DDL before retrying, especially on engines without transactional
|
|
214
241
|
DDL. A finalization-only failure can be retried without reapplying committed
|
|
215
242
|
revisions. Client DDL has no API executor journal.
|
|
243
|
+
- Finalization sends at most 10 tables per request, the version table first, and
|
|
244
|
+
reports `Finalizing MetaTables 11-20 of 62.` for larger providers (client 0.1.28
|
|
245
|
+
and later). A run that stops partway leaves earlier batches active; rerun the
|
|
246
|
+
same upgrade to finalize the rest.
|
|
216
247
|
- Destructive catalog deletion is not migration recovery and never bypasses
|
|
217
248
|
schema-management protection.
|
|
218
249
|
|
|
@@ -220,5 +251,6 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
220
251
|
|
|
221
252
|
Verify provider scope and placement, revision content, the selected environment
|
|
222
253
|
connection, repeat execution, and final active bindings. Check that the deployment
|
|
223
|
-
workflow runs the migration Job before every resource that uses the tables
|
|
254
|
+
workflow runs the migration Job before every resource that uses the tables, and
|
|
255
|
+
that each Environment has its owning Team with the Job's workload User. Report
|
|
224
256
|
separately what was checked offline and what was exercised against a configured API.
|
|
@@ -124,3 +124,7 @@ for restart recovery. On an uncertain outcome, inspect `upload_receipt()` before
|
|
|
124
124
|
resubmitting; do not assign a fresh key to bypass uncertainty. Administrator
|
|
125
125
|
reconciliation requires verified physical evidence. This workflow uses the Main
|
|
126
126
|
Sequence API and has no Artifact or temporary-URL dependency.
|
|
127
|
+
|
|
128
|
+
A 429 `transfer_capacity_exceeded` or 503 `database_connections_busy` means the
|
|
129
|
+
API was at capacity and nothing ran. Retry after `Retry-After`, an upload with the
|
|
130
|
+
same operation UUID; it is not an uncertain outcome.
|
|
@@ -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.
|
|
4
|
+
pinned_version=2.0.9
|
|
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 .
|
|
@@ -81,6 +81,16 @@ in the system prompt because a tool named `read` exists. Extensions must not reg
|
|
|
81
81
|
this mode.
|
|
82
82
|
Excluding coding tools does not sandbox extension Python code.
|
|
83
83
|
|
|
84
|
+
## Application tool time limits
|
|
85
|
+
|
|
86
|
+
A declared application's tool sets how long it may run, in seconds, in its MCP `_meta` under
|
|
87
|
+
`mainsequence.ai/timeout-seconds/v1`; with the MCP Python SDK that is
|
|
88
|
+
`@mcp.tool(meta={"mainsequence.ai/timeout-seconds/v1": 300})` in the application. Set the limit on
|
|
89
|
+
the application's tool, not in the Agent. A tool that declares nothing gets
|
|
90
|
+
`TAU_MCP_TOOL_TIMEOUT_SECONDS` (default `60`); set it like the tool composition settings above, in
|
|
91
|
+
`harness_agent.spec.env_vars`, the process environment, or
|
|
92
|
+
`TauSDKSettings(mcp_tool_timeout_seconds=...)`. No call outlives its turn.
|
|
93
|
+
|
|
84
94
|
## Invariants extensions must not replace
|
|
85
95
|
|
|
86
96
|
Extensions may change effective agent capabilities, but they must not replace or bypass:
|
|
@@ -9,7 +9,18 @@ resources:
|
|
|
9
9
|
automatic_redeployment:
|
|
10
10
|
enabled: true
|
|
11
11
|
tag_regex: null
|
|
12
|
-
|
|
12
|
+
# One Uvicorn process uses one core; configuration.yaml sizes its threads and
|
|
13
|
+
# connections as serving.concurrency (ADR 0022).
|
|
14
|
+
cpu_request: "1"
|
|
15
|
+
memory_request: 2Gi
|
|
16
|
+
min_scale: 2
|
|
17
|
+
# A pod runs serving.concurrency (20) requests at once, so the platform sends it no
|
|
18
|
+
# more and queues the rest while it adds pods. Ten pods keep 3 × 20 × 10 connections
|
|
19
|
+
# within the database budget (ADR 0022). The request timeout bounds deep_search,
|
|
20
|
+
# whose declared limit is 300 s.
|
|
21
|
+
container_concurrency: 20
|
|
22
|
+
max_scale: 10
|
|
23
|
+
timeout_seconds: 300
|
|
13
24
|
revision_retention_count: 3
|
|
14
25
|
# The Analyst's read tools, served at /mcp (ADR 0021).
|
|
15
26
|
mcp_enabled: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.28
|
|
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.
|
|
54
|
+
Requires-Dist: ms-tau-sdk==2.0.9; 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
|
|
@@ -39,7 +39,7 @@ Status: Accepted.
|
|
|
39
39
|
Implementation status: implemented on `development`; not yet deployed. Tests cover the
|
|
40
40
|
tools against a stand-in catalog, `deep_search`, `describe_table` and `list_namespaces`
|
|
41
41
|
through the client against the API, and the extension, card, workflow and vendored skills with
|
|
42
|
-
ms-tau-sdk 2.0.
|
|
42
|
+
ms-tau-sdk 2.0.9. A local `ms-tau` session and the hosted deployment have not run.
|
|
43
43
|
|
|
44
44
|
Owner: this repository deploys the agent. The MetaTables API is unchanged; the agent
|
|
45
45
|
is one more API client.
|
|
@@ -70,7 +70,7 @@ refuses anything else.
|
|
|
70
70
|
|
|
71
71
|
| Part | Rule |
|
|
72
72
|
| --- | --- |
|
|
73
|
-
| Runtime | `ms-tau-sdk` 2.0.
|
|
73
|
+
| Runtime | `ms-tau-sdk` 2.0.9, `openai-codex` / `gpt-5.6-luna`, thinking `medium`. |
|
|
74
74
|
| Identity | The person each turn serves (ADR 0020); the agent's own identity holds no grants. |
|
|
75
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. |
|
|
76
76
|
| Instructions | `.tau/SYSTEM.md` covers MetaTables; vendored `pg-aiguide` skills cover PostgreSQL and TimescaleDB. |
|
|
@@ -129,7 +129,7 @@ The agent card's two skills, `discover-tables` and `analyze-with-sql` in
|
|
|
129
129
|
The skills of [timescale/pg-aiguide](https://github.com/timescale/pg-aiguide)
|
|
130
130
|
(Apache-2.0) are vendored at commit `b236d35` with its license and notice, one
|
|
131
131
|
directory per skill under `.tau/skills/`, because Tau discovers skills one level deep.
|
|
132
|
-
The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.
|
|
132
|
+
The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.9 registers
|
|
133
133
|
when `TAU_EXCLUDE_BASE_TOOLS=true`. The directive takes precedence over them:
|
|
134
134
|
|
|
135
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.
|
|
6
|
+
ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.9 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
|
|
|
@@ -34,6 +34,7 @@ The hosted API serves the read tools at `/mcp`, and the hosted Analyst uses them
|
|
|
34
34
|
| Authorization | A tool's calls run through the API's own routes, in process, with the caller assertion of the `/mcp` request. The SDK verifies the same caller, or the person it works for, and each route authorizes exactly as over REST, including ADR 0020's read-only rule. |
|
|
35
35
|
| Analyst | The agent declares `mcp_applications: [{resource: metatables}]` and gets `metatables__list_tools` and `metatables__call_tool`. Its extension registers the tools only in a local `ms-tau` session, where they call the local API as the developer. |
|
|
36
36
|
| Key | The API's workflow key is `metatables`, because MCP keys become tool prefixes and must match `^[a-z][a-z0-9_]{0,39}$`. |
|
|
37
|
+
| Time limits | Each tool declares how long an Agent should wait in its MCP `_meta` under `mainsequence.ai/timeout-seconds/v1` (ms-tau-sdk 2.0.9): 120 s, the bound of one in-process API call, and 300 s for `deep_search`, which the release's 300 s request timeout bounds. An undeclared tool would get the Agent's default of 60 s. |
|
|
37
38
|
|
|
38
39
|
## Consequences
|
|
39
40
|
|
|
@@ -344,6 +344,46 @@ 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 grants a platform Team Writer
|
|
357
|
+
on each namespace the application's tables are registered in, creating any that
|
|
358
|
+
don't exist. The application's migration Job and every workload User that reads
|
|
359
|
+
or writes its tables are members of that Team. One namespace per application is
|
|
360
|
+
recommended, not enforced: MetaTables authorizes identities and has no trusted
|
|
361
|
+
fact about which project a caller runs, so any Writer of a namespace may
|
|
362
|
+
register tables in it from any project.
|
|
363
|
+
Use one Team per Environment, so that one Environment's workloads are not
|
|
364
|
+
Writers in another. A new workload User needs Team membership only; the tables
|
|
365
|
+
keep their owner.
|
|
366
|
+
- **No creator grant under a namespace Writer.** Registering a new table into a
|
|
367
|
+
namespace where the caller is already a Writer, directly or through a Team, adds
|
|
368
|
+
no creator grant: the namespace's Writers control the table. Otherwise the
|
|
369
|
+
creator still receives Writer, including an admin registering into a namespace
|
|
370
|
+
where they have no grant, so no table starts without a Writer.
|
|
371
|
+
- **Creator attribution is a column.** `meta_table.created_by_user_uid` records
|
|
372
|
+
who registered each table and grants nothing. System migration
|
|
373
|
+
`0012_table_creator` adds it and fills it from each table's first self-granted
|
|
374
|
+
Writer in the grant history.
|
|
375
|
+
- **Refusals say how to recover.** Registration refusals are 403s with a `code`:
|
|
376
|
+
`table_not_editable` for an existing table the caller cannot edit,
|
|
377
|
+
`namespace_not_writable` for a namespace that is missing or that the caller
|
|
378
|
+
cannot write. Both name the caller's User UID and the recovery: add it to the
|
|
379
|
+
Team with Writer on the namespace, or ask an Organization admin. The table's
|
|
380
|
+
namespace is named when the caller requested it or can read the table; its
|
|
381
|
+
Writers are listed only when the caller can read the table.
|
|
382
|
+
|
|
383
|
+
Tables whose only Writer is a replaced identity are recovered the same way: an
|
|
384
|
+
admin grants the application's Team Writer on their namespace. There is no admin
|
|
385
|
+
bypass and no automatic adoption.
|
|
386
|
+
|
|
347
387
|
## Superseded behavior and preserved boundaries
|
|
348
388
|
|
|
349
389
|
This decision supersedes ADR 0001's pending-runtime configurator/existing-source
|
|
@@ -397,6 +437,9 @@ schema baseline/recreation policy remains governed by ADR 0001.
|
|
|
397
437
|
resources through counts, search, lineage, or error details.
|
|
398
438
|
- A Writer can grant/revoke Reader and Writer access only on tables they control.
|
|
399
439
|
Re-registering an existing table never grants the caller ownership.
|
|
440
|
+
- A new member of a Team with Writer on a table's namespace registers and migrates
|
|
441
|
+
that existing table; a caller outside it is refused with a recovery path that
|
|
442
|
+
reveals nothing it cannot read.
|
|
400
443
|
- Team changes and namespace revocation/moves change effective access under the
|
|
401
444
|
documented freshness rules; independent grants remain visible and effective.
|
|
402
445
|
- Non-admins cannot manage DataSources, runtime selection, system migrations,
|
|
@@ -32,6 +32,29 @@
|
|
|
32
32
|
> Reconciliation still records each table's cascade targets, but only so the
|
|
33
33
|
> [impact pre-flight](0016-impact-preflight.md) can show their effects.
|
|
34
34
|
|
|
35
|
+
> Amendment (2026-10-09): On PostgreSQL and TimescaleDB, a catalog change applies
|
|
36
|
+
> only what it changed. Reconciliation used to rebuild every role, re-inspect every
|
|
37
|
+
> table and re-secure every routine on each change, all under the catalog lock, so
|
|
38
|
+
> one registration could hold the lock for minutes and stop every other request.
|
|
39
|
+
> Now a change:
|
|
40
|
+
>
|
|
41
|
+
> - re-inspects the policies of the tables it changed, plus the tables whose
|
|
42
|
+
> recorded cascade targets they affect;
|
|
43
|
+
> - rebuilds only roles that are new or whose definition changed, and grants or
|
|
44
|
+
> revokes only the memberships and privileges that differ from the applied
|
|
45
|
+
> manifest;
|
|
46
|
+
> - re-secures routines only when the owned schemas, routines or `PUBLIC` grants
|
|
47
|
+
> changed since the last sweep.
|
|
48
|
+
>
|
|
49
|
+
> The full sweep still runs when the runtime DataSource changes, at initialization
|
|
50
|
+
> (the migration Job of every deployment) and from the admin repair action. Those
|
|
51
|
+
> are when grants changed outside MetaTables are repaired, not on every catalog
|
|
52
|
+
> change. MySQL and SQL Server keep the full sweep on every change.
|
|
53
|
+
|
|
54
|
+
> Amendment (2026-10-09): [ADR 0022](0022-concurrent-requests-and-connection-reuse.md)
|
|
55
|
+
> reuses login-role connections within a pod, only by the login role that opened them
|
|
56
|
+
> and never through `SET ROLE`; no session state carries over from one use to the next.
|
|
57
|
+
|
|
35
58
|
|
|
36
59
|
Date: 2026-09-29
|
|
37
60
|
|
|
@@ -299,8 +322,12 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
|
|
|
299
322
|
- Physical table names become visible to explorer users.
|
|
300
323
|
- Cascading foreign keys are allowed. Tables that reference a table never change
|
|
301
324
|
who may write it.
|
|
302
|
-
- Team membership reaches the database
|
|
303
|
-
|
|
325
|
+
- Team membership reaches the database on the caller's next query. Each SQL
|
|
326
|
+
admission compares the caller's current Teams with the ones its role was last
|
|
327
|
+
given and reconciles the roles first when they differ. A hosted caller's Teams
|
|
328
|
+
come from its signed assertion on every request
|
|
329
|
+
([ADR 0017](0017-hosted-request-identity.md), 2026-10-05 amendment); only the
|
|
330
|
+
developer's own facts in Local and developer mode are cached for up to an hour.
|
|
304
331
|
|
|
305
332
|
## Implementation
|
|
306
333
|
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# ADR 0022: Concurrent requests per pod and reused database connections
|
|
2
|
+
|
|
3
|
+
Status: Accepted.
|
|
4
|
+
|
|
5
|
+
Implementation status: implemented on development. Unit tests pass; deployment
|
|
6
|
+
verification, the MySQL and SQL Server container suites and the load test against the
|
|
7
|
+
development deployment are pending.
|
|
8
|
+
|
|
9
|
+
Owner: this repository.
|
|
10
|
+
|
|
11
|
+
Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (each User
|
|
12
|
+
queries as their own login roles), [ADR 0012](0012-bounded-data-transfer-and-safe-retries.md)
|
|
13
|
+
(deadlines, cancellation and the shared SQL security guard),
|
|
14
|
+
[ADR 0001](0001-unified-api-storage-and-local-sqlite.md) (`configuration.yaml`),
|
|
15
|
+
[ADR 0008](0008-mysql-mssql-table-workflows.md) (MySQL and SQL Server) and
|
|
16
|
+
[ADR 0021](../agent/0021-api-serves-the-analyst-tools-over-mcp.md) (MCP tools call the
|
|
17
|
+
API's own routes).
|
|
18
|
+
|
|
19
|
+
## Context
|
|
20
|
+
|
|
21
|
+
The hosted API must serve tens to hundreds of clients at the same time. Main Sequence
|
|
22
|
+
runs it as identical pods, each running one Uvicorn process, and adds pods under load
|
|
23
|
+
up to a maximum. A Python process runs Python code on one core at a time, so a pod's
|
|
24
|
+
capacity comes from threads that wait on the database, and the API's capacity from the
|
|
25
|
+
number of pods.
|
|
26
|
+
|
|
27
|
+
Today:
|
|
28
|
+
|
|
29
|
+
- Nearly every route is a plain `def`, so each request runs on one of the process's 40
|
|
30
|
+
worker threads, AnyIO's fixed default.
|
|
31
|
+
- The catalog engine uses SQLAlchemy's default pool: 5 connections plus 10 overflow,
|
|
32
|
+
with a 30 s wait.
|
|
33
|
+
- Each SQL request opens a new connection as the caller's login role and closes it
|
|
34
|
+
afterwards: a TCP and TLS handshake, a password check and a new database backend for
|
|
35
|
+
every request. MySQL and SQL Server build a whole engine per request, and physical
|
|
36
|
+
data-source operations build and dispose of one per call.
|
|
37
|
+
- A SQL request holds two connections at once: its catalog transaction keeps the shared
|
|
38
|
+
SQL security guard (ADR 0012) while the login-role query runs.
|
|
39
|
+
- ADR 0012's admission runs at most 8 data requests per process (`run-query`, `read`,
|
|
40
|
+
inserts and the other data actions) and answers 429 after a 1 s wait for a slot,
|
|
41
|
+
whatever the thread count.
|
|
42
|
+
- Nothing relates the connections all pods may open to what the database allows.
|
|
43
|
+
|
|
44
|
+
A burst therefore opens connections as fast as requests arrive, spends latency and
|
|
45
|
+
database CPU on connecting, and can exhaust the database's connection limit.
|
|
46
|
+
|
|
47
|
+
## Decision
|
|
48
|
+
|
|
49
|
+
One number, **T**, sizes a pod: the requests it runs at once and the connections it may
|
|
50
|
+
hold.
|
|
51
|
+
|
|
52
|
+
| Part | Rule |
|
|
53
|
+
| --- | --- |
|
|
54
|
+
| Threads | Route handlers run on T threads per process. |
|
|
55
|
+
| Catalog | The catalog pool holds at most T connections, with no overflow, and closes each at the maximum age. |
|
|
56
|
+
| Data requests | ADR 0012's admission runs T data requests at once per process, not 8, and a request waits for a slot within its deadline instead of 1 s. `/runtime-context/` publishes the effective T as `transfer_limits.concurrent_requests`. |
|
|
57
|
+
| Login-role connections | A pod holds at most T login-role connections per database server, idle or in use. A connection is reused only by the login role that opened it, never by another role and never through `SET ROLE` (ADR 0007). |
|
|
58
|
+
| Data-source operations | Physical data-source operations reuse connections per (DataSource, login), through one kept engine on MySQL and SQL Server, instead of connecting per call; they count against the same cap. |
|
|
59
|
+
| Budget | Maximum pods × 3T ≤ the database's `max_connections`, minus a reserve for migrations, the Admin and other clients: per pod, T catalog connections, T capped connections, and about T per-call connections (see below). Each server the API connects to has its own budget. |
|
|
60
|
+
| Setting | `configuration.yaml` declares T as `serving.concurrency`. Local runtimes use the default. |
|
|
61
|
+
|
|
62
|
+
Rules for reused connections:
|
|
63
|
+
|
|
64
|
+
- Each use sets its own statement timeout, read-only or write mode, and search path.
|
|
65
|
+
Nothing carries over from a previous use: on PostgreSQL, `DISCARD ALL` returns the
|
|
66
|
+
session to its defaults before the connection is reused.
|
|
67
|
+
- On MySQL and SQL Server, a login-role connection closes after each use. Neither
|
|
68
|
+
driver can reset a session, and SQL Server may keep a session's role memberships.
|
|
69
|
+
These connections still count against the cap; the DataSource's own login is reused.
|
|
70
|
+
- A connection that errored, was cancelled, or stopped before its result was read is
|
|
71
|
+
closed, not reused. ADR 0012 already forbids draining a read to return a connection.
|
|
72
|
+
- Idle connections close after a timeout, and every connection closes at a maximum age.
|
|
73
|
+
The maximum age bounds how long a connection outlives a password change or a disabled
|
|
74
|
+
login. Grant changes apply at once, because the database checks privileges on every
|
|
75
|
+
statement.
|
|
76
|
+
- When the cap is full, the least recently used idle connection closes to make room. If
|
|
77
|
+
none is idle, the request waits within its deadline (ADR 0012) and then fails with 503,
|
|
78
|
+
`database_connections_busy` and `Retry-After: 1`. No statement ran, so a retry is safe.
|
|
79
|
+
- MCP tool calls keep their own threads. The route calls a tool makes count against T
|
|
80
|
+
like any request. Sharing T would let tool calls hold every thread while their own
|
|
81
|
+
route calls wait.
|
|
82
|
+
- Connection probes that bring their own host or timeout (DataSource validation and
|
|
83
|
+
maintenance), relation discovery and reads, and MySQL's administrative connections
|
|
84
|
+
(grant changes and `KILL QUERY`) connect per call, outside the cap. A pod's T threads
|
|
85
|
+
bound them to about T, the third T in the budget. A relation read holds its reader
|
|
86
|
+
while it runs the caller's login-role query; counting both against one cap could
|
|
87
|
+
leave every thread waiting for a second connection.
|
|
88
|
+
|
|
89
|
+
### Suggested values
|
|
90
|
+
|
|
91
|
+
These are starting values, not measurements. A load test against the development
|
|
92
|
+
deployment replaces them.
|
|
93
|
+
|
|
94
|
+
| Setting | Suggested | Why |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| Pod CPU | 1 vCPU | One process uses one core. |
|
|
97
|
+
| Pod memory | 2 GiB | About 160 MiB at idle, plus results in flight. |
|
|
98
|
+
| Minimum pods | 2 | A burst lands on two pods while more start, and one survives a restart. |
|
|
99
|
+
| T | 20 | At the current maximum of 10 pods: 3 × 20 × 10 = 600 connections. |
|
|
100
|
+
| Idle timeout | 60 s | Long enough to reuse a role's connection across a session of requests. |
|
|
101
|
+
| Maximum age | 30 min | Bounds a connection's life after a credential change. |
|
|
102
|
+
|
|
103
|
+
The workflow declares CPU, memory and minimum pods for the `metatables` resource;
|
|
104
|
+
`configuration.yaml` declares T. T is raised only when the budget allows it.
|
|
105
|
+
|
|
106
|
+
The workflow also declares the platform's per-replica request policy
|
|
107
|
+
(platform issues 921 and 922): `container_concurrency` equal to T, so the platform sends a pod
|
|
108
|
+
no more requests than it has threads and queues the rest while it adds pods, and
|
|
109
|
+
`max_scale` equal to the budget's maximum pods (10). Changing T changes both files.
|
|
110
|
+
|
|
111
|
+
## Consequences
|
|
112
|
+
|
|
113
|
+
- On PostgreSQL most requests reuse a connection; a role's first request on a pod still
|
|
114
|
+
connects. On MySQL and SQL Server, caller SQL and caller table operations still connect
|
|
115
|
+
per request, though their engines are kept.
|
|
116
|
+
- Connections are bounded by configuration, not by traffic.
|
|
117
|
+
- A pod runs at most T requests at once; further requests wait for a thread. Capacity
|
|
118
|
+
grows by adding pods.
|
|
119
|
+
- Many Users share one cap per pod, so a pod serving many Users reconnects more often
|
|
120
|
+
than one serving few.
|
|
121
|
+
- A reused connection stays logged in as its role until its idle timeout or maximum age.
|
|
122
|
+
- SQLite has no login roles; only the thread count applies locally.
|
|
123
|
+
- Changing T is a configuration change and a deployment.
|
|
124
|
+
|
|
125
|
+
Verification: unit tests (`tests/integrations/test_connection_reuse.py`) cover role
|
|
126
|
+
isolation, per-use settings and the session reset, closing broken connections, the cap
|
|
127
|
+
and eviction, waiting within the deadline, the idle timeout and maximum age, T applied
|
|
128
|
+
to the route threads, the catalog pool and data-request admission, and the kept engines. The hosted engines,
|
|
129
|
+
including the MySQL and SQL Server behavior above, are verified through the container
|
|
130
|
+
suite on request, and a load test against the development deployment sets the values
|
|
131
|
+
above.
|
|
@@ -39,6 +39,7 @@ decisions belong in the SDK repository and are linked as dependencies.
|
|
|
39
39
|
| [0016: Impact pre-flight for cascades and deletes](api/0016-impact-preflight.md) | Accepted; implemented; container engine verification pending | `get_impact` returns what a row delete, key update or table drop reaches, every blocker and whether the caller may write each table, from the planner the confirmed delete runs; cascade effects never block. Projects render it in their own UIs. |
|
|
40
40
|
| [0017: Hosted caller identity through the SDK request identity](api/0017-hosted-request-identity.md) | Accepted; implemented for 0.1.21; hosted rollout verification pending | The hosted API installs the SDK request identity that the platform launcher requires; the SDK verifies each caller assertion once and admission reads `User.get_logged_user()`, including the caller's signed Teams and admin flag. Local keeps its loopback token admission. |
|
|
41
41
|
| [0018: Table search by meaning and columns](api/0018-table-search.md) | Accepted; implemented; container engine verification pending | One route ranks visible tables by BM25 keywords and a local English embedding model over a per-table document that includes columns, merges the rankings and returns `matched_columns`; the index refreshes on every metadata write. |
|
|
42
|
+
| [0022: Concurrent requests per pod and reused database connections](api/0022-concurrent-requests-and-connection-reuse.md) | Accepted; implemented on development; deployment and load verification pending | One number per pod sizes its threads, data-request admission, catalog pool and login-role connections; connections are reused only by the role that opened them, and maximum pods × 3T stays within the database's connection limit. |
|
|
42
43
|
|
|
43
44
|
## Agents
|
|
44
45
|
|
|
@@ -73,7 +73,7 @@ DataSource and bootstrap state and returns `Cache-Control: no-store`.
|
|
|
73
73
|
| 404 | Resource missing or not visible to the current actor. |
|
|
74
74
|
| 409 | Lifecycle, capability, protection, reference, or physical-state conflict. |
|
|
75
75
|
| 422 | Request/schema validation failure. |
|
|
76
|
-
| 503 | Catalog, SDK verification/source access, physical connection, or an uncertain operation outcome is unavailable. |
|
|
76
|
+
| 503 | Catalog, SDK verification/source access, physical connection, or an uncertain operation outcome is unavailable; or every database connection the API may hold stayed busy (`database_connections_busy`, `Retry-After: 1`). |
|
|
77
77
|
|
|
78
78
|
Most framework errors use a `detail` field. Some domain operations provide a
|
|
79
79
|
structured code and field information. Raw-query validation errors can be returned
|
|
@@ -87,4 +87,4 @@ An unknown physical commit outcome requires reconciliation, not a blind retry.
|
|
|
87
87
|
|
|
88
88
|
## Transfer errors
|
|
89
89
|
|
|
90
|
-
Data routes return 413 for request/row/response byte limits, 408 for the overall transfer deadline, and 429 with `Retry-After: 1` when
|
|
90
|
+
Data routes return 413 for request/row/response byte limits, 408 for the overall transfer deadline, and 429 `transfer_capacity_exceeded` with `Retry-After: 1` when no data-request slot freed up within the request deadline (each API process runs `serving.concurrency` data requests at once). A 503 `database_connections_busy` with `Retry-After: 1` means every database connection stayed busy until the deadline. In both cases no statement ran, so any request, including SQL and writes, is safe to retry. Existing SQL/driver errors can retain their engine-specific deadline codes and status. Upload conflicts use 409 and uncertainty can use 503. A limit enforced by schema validation can return 422. See [typed client exceptions and recovery](../client/bounded-transfers.md).
|
|
@@ -4439,7 +4439,7 @@
|
|
|
4439
4439
|
"type": "integer"
|
|
4440
4440
|
},
|
|
4441
4441
|
"concurrent_requests": {
|
|
4442
|
-
"default":
|
|
4442
|
+
"default": 20,
|
|
4443
4443
|
"title": "Concurrent Requests",
|
|
4444
4444
|
"type": "integer"
|
|
4445
4445
|
},
|
|
@@ -4499,7 +4499,7 @@
|
|
|
4499
4499
|
"type": "integer"
|
|
4500
4500
|
},
|
|
4501
4501
|
"queue_seconds": {
|
|
4502
|
-
"default":
|
|
4502
|
+
"default": 60,
|
|
4503
4503
|
"title": "Queue Seconds",
|
|
4504
4504
|
"type": "integer"
|
|
4505
4505
|
},
|
|
@@ -4918,6 +4918,26 @@
|
|
|
4918
4918
|
"summary": "Hello"
|
|
4919
4919
|
}
|
|
4920
4920
|
},
|
|
4921
|
+
"/caller/": {
|
|
4922
|
+
"get": {
|
|
4923
|
+
"description": "Who this request runs as: the User, Teams and admin flag the API admitted, named\nthrough the platform directory as that User sees it.\n\nHosted, the identity comes from the platform-signed caller assertion (ADR 0017);\nLocal and developer runtimes admit the developer's own SDK session.",
|
|
4924
|
+
"operationId": "admitted_caller_caller__get",
|
|
4925
|
+
"responses": {
|
|
4926
|
+
"200": {
|
|
4927
|
+
"content": {
|
|
4928
|
+
"application/json": {
|
|
4929
|
+
"schema": {}
|
|
4930
|
+
}
|
|
4931
|
+
},
|
|
4932
|
+
"description": "Successful Response"
|
|
4933
|
+
}
|
|
4934
|
+
},
|
|
4935
|
+
"summary": "Admitted Caller",
|
|
4936
|
+
"tags": [
|
|
4937
|
+
"Runtime"
|
|
4938
|
+
]
|
|
4939
|
+
}
|
|
4940
|
+
},
|
|
4921
4941
|
"/data-sources/": {
|
|
4922
4942
|
"get": {
|
|
4923
4943
|
"operationId": "list_sources_data_sources__get",
|
|
@@ -7124,6 +7144,58 @@
|
|
|
7124
7144
|
]
|
|
7125
7145
|
}
|
|
7126
7146
|
},
|
|
7147
|
+
"/namespaces/{namespace_uid}/access-map/": {
|
|
7148
|
+
"get": {
|
|
7149
|
+
"description": "Principals, Teams, grants and tables of one namespace, as the caller may see them.",
|
|
7150
|
+
"operationId": "namespace_access_map_namespaces__namespace_uid__access_map__get",
|
|
7151
|
+
"parameters": [
|
|
7152
|
+
{
|
|
7153
|
+
"in": "path",
|
|
7154
|
+
"name": "namespace_uid",
|
|
7155
|
+
"required": true,
|
|
7156
|
+
"schema": {
|
|
7157
|
+
"format": "uuid",
|
|
7158
|
+
"title": "Namespace Uid",
|
|
7159
|
+
"type": "string"
|
|
7160
|
+
}
|
|
7161
|
+
},
|
|
7162
|
+
{
|
|
7163
|
+
"in": "query",
|
|
7164
|
+
"name": "relationships",
|
|
7165
|
+
"required": false,
|
|
7166
|
+
"schema": {
|
|
7167
|
+
"default": false,
|
|
7168
|
+
"title": "Relationships",
|
|
7169
|
+
"type": "boolean"
|
|
7170
|
+
}
|
|
7171
|
+
}
|
|
7172
|
+
],
|
|
7173
|
+
"responses": {
|
|
7174
|
+
"200": {
|
|
7175
|
+
"content": {
|
|
7176
|
+
"application/json": {
|
|
7177
|
+
"schema": {}
|
|
7178
|
+
}
|
|
7179
|
+
},
|
|
7180
|
+
"description": "Successful Response"
|
|
7181
|
+
},
|
|
7182
|
+
"422": {
|
|
7183
|
+
"content": {
|
|
7184
|
+
"application/json": {
|
|
7185
|
+
"schema": {
|
|
7186
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
7187
|
+
}
|
|
7188
|
+
}
|
|
7189
|
+
},
|
|
7190
|
+
"description": "Validation Error"
|
|
7191
|
+
}
|
|
7192
|
+
},
|
|
7193
|
+
"summary": "Namespace Access Map",
|
|
7194
|
+
"tags": [
|
|
7195
|
+
"Namespaces"
|
|
7196
|
+
]
|
|
7197
|
+
}
|
|
7198
|
+
},
|
|
7127
7199
|
"/namespaces/{namespace_uid}/tables/": {
|
|
7128
7200
|
"get": {
|
|
7129
7201
|
"operationId": "namespace_tables_namespaces__namespace_uid__tables__get",
|
|
@@ -7,6 +7,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
|
|
|
7
7
|
| Method | Path | Operation | Success responses |
|
|
8
8
|
| --- | --- | --- | --- |
|
|
9
9
|
| GET | `/` | Hello | 200 |
|
|
10
|
+
| GET | `/caller/` | Admitted Caller | 200 |
|
|
10
11
|
| GET | `/data-sources/` | List Sources | 200 |
|
|
11
12
|
| POST | `/data-sources/` | Create Source | 201 |
|
|
12
13
|
| POST | `/data-sources/test-connection/` | Test Source Connection | 200 |
|
|
@@ -51,6 +52,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
|
|
|
51
52
|
| GET | `/namespaces/` | List Namespaces | 200 |
|
|
52
53
|
| GET | `/namespaces/{namespace_uid}/` | Retrieve Namespace | 200 |
|
|
53
54
|
| PATCH | `/namespaces/{namespace_uid}/` | Patch Namespace | 200 |
|
|
55
|
+
| GET | `/namespaces/{namespace_uid}/access-map/` | Namespace Access Map | 200 |
|
|
54
56
|
| GET | `/namespaces/{namespace_uid}/tables/` | Namespace Tables | 200 |
|
|
55
57
|
| GET | `/namespaces/{uid}/permissions` | Namespace Permissions | 200 |
|
|
56
58
|
| PUT | `/namespaces/{uid}/permissions` | Set Namespace Permissions | 200 |
|
|
@@ -183,6 +183,9 @@ but does not expire the configured database login.
|
|
|
183
183
|
After execution, the client closes its database connection and calls
|
|
184
184
|
`finalize-managed` with actual revision IDs (or explicit null at base). Finalization
|
|
185
185
|
reconciles physical contracts, dropped provider tables and SQL permission projections.
|
|
186
|
+
The client finalizes at most 10 tables per request, the Alembic version table first,
|
|
187
|
+
so each request holds the catalog lock briefly and finishes within the hosted request
|
|
188
|
+
limit. If a run stops partway, rerunning it finalizes the tables still reserved.
|
|
186
189
|
The former `/application-migrations/upgrade/` endpoint and provider allowlist are
|
|
187
190
|
removed. MetaTables system migrations run in the hosted deployment's migration Job,
|
|
188
191
|
or through Settings in Local mode. See
|