mainsequence-metatable 0.1.27.dev47__tar.gz → 0.1.28.dev48__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.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-migrations/SKILL.md +10 -6
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +10 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.mainsequence/workflows/metatables-api.yaml +12 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/agent/0019-metatables-analyst-agent.md +3 -3
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +1 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +1 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0002-application-administration-and-table-ownership.md +10 -6
- mainsequence_metatable-0.1.28.dev48/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +130 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/index.md +1 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/openapi.json +74 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/reference.md +2 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/tables-and-migrations.md +3 -0
- mainsequence_metatable-0.1.28.dev48/docs/assets/diagrams/namespace-access.svg +115 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/deploy-application-migrations.md +10 -7
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/permissions-namespaces-labels.md +5 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/configuration.md +7 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/hosted-runtime.md +68 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/security/ownership-and-sharing.md +60 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/mkdocs.yml +1 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/pyproject.toml +2 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/PKG-INFO +2 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/SOURCES.txt +12 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/analysis.py +6 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/auth/boundary.py +3 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/auth/local_actor.py +3 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/bootstrap.py +2 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/configuration.py +14 -1
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/app/connection_count.py +67 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/main.py +28 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/mcp.py +7 -1
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/app/routes/access_map.py +124 -0
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/app/routes/caller.py +31 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/runtime_context.py +3 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_sql.py +4 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/runtime.py +3 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/transfer.py +10 -1
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/backend/backends/adapters/postgresql_connection.py +279 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +3 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/table_cursor.py +1 -3
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/backend/backends/connection_pool.py +430 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/hosted.py +6 -1
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/hosted_access.py +24 -24
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/postgresql_access.py +29 -32
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/relational.py +38 -23
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/restricted_sql.py +10 -6
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/platform_principals.py +23 -5
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/metatables/configuration.yaml +5 -0
- mainsequence_metatable-0.1.28.dev48/src/metatables/api/request_timing.py +162 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/__init__.py +49 -11
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/transfer_contract.py +4 -2
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/analyst/test_mcp.py +13 -0
- mainsequence_metatable-0.1.28.dev48/tests/auth/test_caller_endpoint.py +37 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_runtime_bootstrap.py +8 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/conftest.py +11 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/conftest.py +3 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_application_owned_migrations.py +45 -0
- mainsequence_metatable-0.1.28.dev48/tests/integrations/test_connection_reuse.py +641 -0
- mainsequence_metatable-0.1.28.dev48/tests/integrations/test_request_timing.py +294 -0
- mainsequence_metatable-0.1.28.dev48/tests/integrations/test_serving_policy.py +23 -0
- mainsequence_metatable-0.1.28.dev48/tests/permissions/test_access_map.py +122 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/uv.lock +5 -5
- mainsequence_metatable-0.1.27.dev47/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -105
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/LICENSE +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/security/index.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/analyst/test_agent_surface.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -54,10 +54,13 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
|
|
|
54
54
|
Environment, the application's tables need an owning Team: one platform Team
|
|
55
55
|
per Environment (for example `ledger-development`), whose members are the
|
|
56
56
|
migration Job's workload User and the workload User of every resource that
|
|
57
|
-
reads or writes the tables. An Organization admin creates
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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.
|
|
61
64
|
4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
|
|
62
65
|
migration Job that calls `upgrade_application` for each provider, in
|
|
63
66
|
dependency order, from the candidate image. The Job and every resource that
|
|
@@ -83,8 +86,9 @@ Rules:
|
|
|
83
86
|
with each Environment and each recreated Job; a new one needs Team membership
|
|
84
87
|
only. Do not ask for direct table grants to a workload User, and do not run the
|
|
85
88
|
Job as an Organization admin to get around a refusal.
|
|
86
|
-
-
|
|
87
|
-
|
|
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.
|
|
88
92
|
|
|
89
93
|
## Source and runtime context
|
|
90
94
|
|
|
@@ -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.dev48
|
|
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
|
|
|
@@ -353,9 +353,13 @@ identity of the same application could not re-register its own tables
|
|
|
353
353
|
([#43](https://github.com/mainsequence-projects/MetaTables/issues/43)).
|
|
354
354
|
|
|
355
355
|
- **A Team owns an application's tables.** Before an application's first
|
|
356
|
-
migration in an Environment, an Organization admin
|
|
357
|
-
|
|
358
|
-
|
|
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.
|
|
359
363
|
Use one Team per Environment, so that one Environment's workloads are not
|
|
360
364
|
Writers in another. A new workload User needs Team membership only; the tables
|
|
361
365
|
keep their owner.
|
|
@@ -433,9 +437,9 @@ schema baseline/recreation policy remains governed by ADR 0001.
|
|
|
433
437
|
resources through counts, search, lineage, or error details.
|
|
434
438
|
- A Writer can grant/revoke Reader and Writer access only on tables they control.
|
|
435
439
|
Re-registering an existing table never grants the caller ownership.
|
|
436
|
-
- A new member of
|
|
437
|
-
|
|
438
|
-
|
|
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.
|
|
439
443
|
- Team changes and namespace revocation/moves change effective access under the
|
|
440
444
|
documented freshness rules; independent grants remain visible and effective.
|
|
441
445
|
- Non-admins cannot manage DataSources, runtime selection, system migrations,
|
mainsequence_metatable-0.1.28.dev48/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# ADR 0022: Concurrent requests per pod and reused database connections
|
|
2
|
+
|
|
3
|
+
Status: Proposed.
|
|
4
|
+
|
|
5
|
+
Implementation status: implemented on development; not deployed. Unit tests pass;
|
|
6
|
+
the container suite and the load test against the development deployment are pending.
|
|
7
|
+
|
|
8
|
+
Owner: this repository.
|
|
9
|
+
|
|
10
|
+
Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (each User
|
|
11
|
+
queries as their own login roles), [ADR 0012](0012-bounded-data-transfer-and-safe-retries.md)
|
|
12
|
+
(deadlines, cancellation and the shared SQL security guard),
|
|
13
|
+
[ADR 0001](0001-unified-api-storage-and-local-sqlite.md) (`configuration.yaml`),
|
|
14
|
+
[ADR 0008](0008-mysql-mssql-table-workflows.md) (MySQL and SQL Server) and
|
|
15
|
+
[ADR 0021](../agent/0021-api-serves-the-analyst-tools-over-mcp.md) (MCP tools call the
|
|
16
|
+
API's own routes).
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
The hosted API must serve tens to hundreds of clients at the same time. Main Sequence
|
|
21
|
+
runs it as identical pods, each running one Uvicorn process, and adds pods under load
|
|
22
|
+
up to a maximum. A Python process runs Python code on one core at a time, so a pod's
|
|
23
|
+
capacity comes from threads that wait on the database, and the API's capacity from the
|
|
24
|
+
number of pods.
|
|
25
|
+
|
|
26
|
+
Today:
|
|
27
|
+
|
|
28
|
+
- Nearly every route is a plain `def`, so each request runs on one of the process's 40
|
|
29
|
+
worker threads, AnyIO's fixed default.
|
|
30
|
+
- The catalog engine uses SQLAlchemy's default pool: 5 connections plus 10 overflow,
|
|
31
|
+
with a 30 s wait.
|
|
32
|
+
- Each SQL request opens a new connection as the caller's login role and closes it
|
|
33
|
+
afterwards: a TCP and TLS handshake, a password check and a new database backend for
|
|
34
|
+
every request. MySQL and SQL Server build a whole engine per request, and physical
|
|
35
|
+
data-source operations build and dispose of one per call.
|
|
36
|
+
- A SQL request holds two connections at once: its catalog transaction keeps the shared
|
|
37
|
+
SQL security guard (ADR 0012) while the login-role query runs.
|
|
38
|
+
- ADR 0012's admission runs at most 8 data requests per process (`run-query`, `read`,
|
|
39
|
+
inserts and the other data actions) and answers 429 after a 1 s wait for a slot,
|
|
40
|
+
whatever the thread count.
|
|
41
|
+
- Nothing relates the connections all pods may open to what the database allows.
|
|
42
|
+
|
|
43
|
+
A burst therefore opens connections as fast as requests arrive, spends latency and
|
|
44
|
+
database CPU on connecting, and can exhaust the database's connection limit.
|
|
45
|
+
|
|
46
|
+
## Decision
|
|
47
|
+
|
|
48
|
+
One number, **T**, sizes a pod: the requests it runs at once and the connections it may
|
|
49
|
+
hold.
|
|
50
|
+
|
|
51
|
+
| Part | Rule |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| Threads | Route handlers run on T threads per process. |
|
|
54
|
+
| Catalog | The catalog pool holds at most T connections, with no overflow, and closes each at the maximum age. |
|
|
55
|
+
| 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`. |
|
|
56
|
+
| 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). |
|
|
57
|
+
| 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. |
|
|
58
|
+
| 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. |
|
|
59
|
+
| Setting | `configuration.yaml` declares T as `serving.concurrency`. Local runtimes use the default. |
|
|
60
|
+
|
|
61
|
+
Rules for reused connections:
|
|
62
|
+
|
|
63
|
+
- Each use sets its own statement timeout, read-only or write mode, and search path.
|
|
64
|
+
Nothing carries over from a previous use: on PostgreSQL, `DISCARD ALL` returns the
|
|
65
|
+
session to its defaults before the connection is reused.
|
|
66
|
+
- On MySQL and SQL Server, a login-role connection closes after each use. Neither
|
|
67
|
+
driver can reset a session, and SQL Server may keep a session's role memberships.
|
|
68
|
+
These connections still count against the cap; the DataSource's own login is reused.
|
|
69
|
+
- A connection that errored, was cancelled, or stopped before its result was read is
|
|
70
|
+
closed, not reused. ADR 0012 already forbids draining a read to return a connection.
|
|
71
|
+
- Idle connections close after a timeout, and every connection closes at a maximum age.
|
|
72
|
+
The maximum age bounds how long a connection outlives a password change or a disabled
|
|
73
|
+
login. Grant changes apply at once, because the database checks privileges on every
|
|
74
|
+
statement.
|
|
75
|
+
- When the cap is full, the least recently used idle connection closes to make room. If
|
|
76
|
+
none is idle, the request waits within its deadline (ADR 0012) and then fails with 503,
|
|
77
|
+
`database_connections_busy` and `Retry-After: 1`. No statement ran, so a retry is safe.
|
|
78
|
+
- MCP tool calls keep their own threads. The route calls a tool makes count against T
|
|
79
|
+
like any request. Sharing T would let tool calls hold every thread while their own
|
|
80
|
+
route calls wait.
|
|
81
|
+
- Connection probes that bring their own host or timeout (DataSource validation and
|
|
82
|
+
maintenance), relation discovery and reads, and MySQL's administrative connections
|
|
83
|
+
(grant changes and `KILL QUERY`) connect per call, outside the cap. A pod's T threads
|
|
84
|
+
bound them to about T, the third T in the budget. A relation read holds its reader
|
|
85
|
+
while it runs the caller's login-role query; counting both against one cap could
|
|
86
|
+
leave every thread waiting for a second connection.
|
|
87
|
+
|
|
88
|
+
### Suggested values
|
|
89
|
+
|
|
90
|
+
These are starting values, not measurements. A load test against the development
|
|
91
|
+
deployment replaces them.
|
|
92
|
+
|
|
93
|
+
| Setting | Suggested | Why |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| Pod CPU | 1 vCPU | One process uses one core. |
|
|
96
|
+
| Pod memory | 2 GiB | About 160 MiB at idle, plus results in flight. |
|
|
97
|
+
| Minimum pods | 2 | A burst lands on two pods while more start, and one survives a restart. |
|
|
98
|
+
| T | 20 | At the current maximum of 10 pods: 3 × 20 × 10 = 600 connections. |
|
|
99
|
+
| Idle timeout | 60 s | Long enough to reuse a role's connection across a session of requests. |
|
|
100
|
+
| Maximum age | 30 min | Bounds a connection's life after a credential change. |
|
|
101
|
+
|
|
102
|
+
The workflow declares CPU, memory and minimum pods for the `metatables` resource;
|
|
103
|
+
`configuration.yaml` declares T. T is raised only when the budget allows it.
|
|
104
|
+
|
|
105
|
+
The workflow also declares the platform's per-replica request policy
|
|
106
|
+
(platform issues 921 and 922): `container_concurrency` equal to T, so the platform sends a pod
|
|
107
|
+
no more requests than it has threads and queues the rest while it adds pods, and
|
|
108
|
+
`max_scale` equal to the budget's maximum pods (10). Changing T changes both files.
|
|
109
|
+
|
|
110
|
+
## Consequences
|
|
111
|
+
|
|
112
|
+
- On PostgreSQL most requests reuse a connection; a role's first request on a pod still
|
|
113
|
+
connects. On MySQL and SQL Server, caller SQL and caller table operations still connect
|
|
114
|
+
per request, though their engines are kept.
|
|
115
|
+
- Connections are bounded by configuration, not by traffic.
|
|
116
|
+
- A pod runs at most T requests at once; further requests wait for a thread. Capacity
|
|
117
|
+
grows by adding pods.
|
|
118
|
+
- Many Users share one cap per pod, so a pod serving many Users reconnects more often
|
|
119
|
+
than one serving few.
|
|
120
|
+
- A reused connection stays logged in as its role until its idle timeout or maximum age.
|
|
121
|
+
- SQLite has no login roles; only the thread count applies locally.
|
|
122
|
+
- Changing T is a configuration change and a deployment.
|
|
123
|
+
|
|
124
|
+
Verification: unit tests (`tests/integrations/test_connection_reuse.py`) cover role
|
|
125
|
+
isolation, per-use settings and the session reset, closing broken connections, the cap
|
|
126
|
+
and eviction, waiting within the deadline, the idle timeout and maximum age, T applied
|
|
127
|
+
to the route threads, the catalog pool and data-request admission, and the kept engines. The hosted engines,
|
|
128
|
+
including the MySQL and SQL Server behavior above, are verified through the container
|
|
129
|
+
suite on request, and a load test against the development deployment sets the values
|
|
130
|
+
above.
|
{mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/adr/index.md
RENAMED
|
@@ -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) | Proposed; implemented on development; not deployed; container 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
|
|
{mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/openapi.json
RENAMED
|
@@ -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",
|
{mainsequence_metatable-0.1.27.dev47 → mainsequence_metatable-0.1.28.dev48}/docs/api/reference.md
RENAMED
|
@@ -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
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1240" height="740" viewBox="0 0 1240 740" role="img" aria-labelledby="ns-title ns-desc">
|
|
2
|
+
<title id="ns-title">Namespaces are access groups, not application boundaries</title>
|
|
3
|
+
<desc id="ns-desc">In one Environment, the workload Users of the prices application are members of the Team prices-development, which is Writer on namespace prices. The workload Users of the trading application are members of trading-development, which is Writer on namespace trading and Reader on namespace prices. Registering a table in a namespace requires Writer on it or admin. Reading or writing a table requires a grant on the table or its namespace, checked by the API and by the database. Which project's tables go in which namespace is not checked.</desc>
|
|
4
|
+
<style>
|
|
5
|
+
.sans { font-family: -apple-system, "Segoe UI", Helvetica, Arial, sans-serif; }
|
|
6
|
+
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
|
7
|
+
.title { font-size: 22px; font-weight: 700; fill: #0f172a; }
|
|
8
|
+
.sub { font-size: 14px; fill: #475569; }
|
|
9
|
+
.col { font-size: 11.5px; font-weight: 700; fill: #64748b; letter-spacing: 0.08em; }
|
|
10
|
+
.name { font-size: 14px; font-weight: 700; fill: #0f172a; }
|
|
11
|
+
.small { font-size: 12px; fill: #64748b; }
|
|
12
|
+
.table { font-size: 12.5px; fill: #1e293b; }
|
|
13
|
+
.note { font-size: 13px; fill: #334155; }
|
|
14
|
+
.head { font-size: 15px; font-weight: 700; fill: #0f172a; }
|
|
15
|
+
.tag { font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; }
|
|
16
|
+
.label { font-size: 12.5px; font-weight: 700; }
|
|
17
|
+
.box { fill: #ffffff; stroke: #cbd5e1; stroke-width: 1.5; }
|
|
18
|
+
.team { fill: #f1f5f9; stroke: #64748b; stroke-width: 1.5; }
|
|
19
|
+
.ns { fill: #ffffff; stroke: #94a3b8; stroke-width: 1.5; }
|
|
20
|
+
.pill { fill: #f8fafc; stroke: #e2e8f0; stroke-width: 1; }
|
|
21
|
+
.member { fill: none; stroke: #64748b; stroke-width: 1.6; marker-end: url(#ns-arrow-member); }
|
|
22
|
+
.writer { fill: none; stroke: #c2410c; stroke-width: 2.4; marker-end: url(#ns-arrow-writer); }
|
|
23
|
+
.reader { fill: none; stroke: #1d4ed8; stroke-width: 2.4; stroke-dasharray: 7 5; marker-end: url(#ns-arrow-reader); }
|
|
24
|
+
</style>
|
|
25
|
+
<defs>
|
|
26
|
+
<marker id="ns-arrow-member" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#64748b"/></marker>
|
|
27
|
+
<marker id="ns-arrow-writer" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#c2410c"/></marker>
|
|
28
|
+
<marker id="ns-arrow-reader" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#1d4ed8"/></marker>
|
|
29
|
+
</defs>
|
|
30
|
+
<rect width="1240" height="740" rx="16" fill="#f8fafc"/>
|
|
31
|
+
<text x="40" y="48" class="sans title">Namespaces are access groups, not application boundaries</text>
|
|
32
|
+
<text x="40" y="74" class="sans sub">One Environment · Teams own namespaces · every check is on the caller's identity, never on its project</text>
|
|
33
|
+
|
|
34
|
+
<text x="40" y="114" class="sans col">WORKLOAD USERS</text>
|
|
35
|
+
<text x="380" y="114" class="sans col">PLATFORM TEAMS</text>
|
|
36
|
+
<text x="760" y="114" class="sans col">METATABLES NAMESPACES AND TABLES</text>
|
|
37
|
+
|
|
38
|
+
<!-- prices application -->
|
|
39
|
+
<rect x="40" y="135" width="260" height="44" rx="8" class="box"/>
|
|
40
|
+
<text x="56" y="162" class="sans name">prices migration Job</text>
|
|
41
|
+
<rect x="40" y="195" width="260" height="44" rx="8" class="box"/>
|
|
42
|
+
<text x="56" y="222" class="sans name">prices API</text>
|
|
43
|
+
<path d="M 300 157 L 378 179" class="member"/>
|
|
44
|
+
<path d="M 300 217 L 378 196" class="member"/>
|
|
45
|
+
<rect x="380" y="159" width="230" height="56" rx="10" class="team"/>
|
|
46
|
+
<text x="396" y="184" class="mono name">prices-development</text>
|
|
47
|
+
<text x="396" y="203" class="sans small">Team</text>
|
|
48
|
+
|
|
49
|
+
<path d="M 610 187 L 758 187" class="writer"/>
|
|
50
|
+
<text x="684" y="178" class="sans label" fill="#c2410c" text-anchor="middle">Writer</text>
|
|
51
|
+
|
|
52
|
+
<rect x="760" y="128" width="440" height="128" rx="12" class="ns"/>
|
|
53
|
+
<text x="780" y="153" class="sans small">namespace</text>
|
|
54
|
+
<text x="852" y="153" class="mono name">prices</text>
|
|
55
|
+
<rect x="780" y="166" width="400" height="24" rx="6" class="pill"/>
|
|
56
|
+
<text x="792" y="183" class="mono table">prices.alembic_version</text>
|
|
57
|
+
<rect x="780" y="196" width="400" height="24" rx="6" class="pill"/>
|
|
58
|
+
<text x="792" y="213" class="mono table">prices.daily_close</text>
|
|
59
|
+
<rect x="780" y="226" width="400" height="24" rx="6" class="pill"/>
|
|
60
|
+
<text x="792" y="243" class="mono table">prices.intraday</text>
|
|
61
|
+
|
|
62
|
+
<!-- trading application -->
|
|
63
|
+
<rect x="40" y="365" width="260" height="44" rx="8" class="box"/>
|
|
64
|
+
<text x="56" y="392" class="sans name">trading migration Job</text>
|
|
65
|
+
<rect x="40" y="425" width="260" height="44" rx="8" class="box"/>
|
|
66
|
+
<text x="56" y="452" class="sans name">trading API</text>
|
|
67
|
+
<path d="M 300 387 L 378 409" class="member"/>
|
|
68
|
+
<path d="M 300 447 L 378 426" class="member"/>
|
|
69
|
+
<rect x="380" y="389" width="230" height="56" rx="10" class="team"/>
|
|
70
|
+
<text x="396" y="414" class="mono name">trading-development</text>
|
|
71
|
+
<text x="396" y="433" class="sans small">Team</text>
|
|
72
|
+
|
|
73
|
+
<path d="M 610 425 L 758 425" class="writer"/>
|
|
74
|
+
<text x="684" y="448" class="sans label" fill="#c2410c" text-anchor="middle">Writer</text>
|
|
75
|
+
|
|
76
|
+
<path d="M 610 403 C 680 403, 690 262, 758 248" class="reader"/>
|
|
77
|
+
<text x="702" y="318" class="sans label" fill="#1d4ed8">Reader</text>
|
|
78
|
+
<text x="702" y="334" class="sans small">every current and</text>
|
|
79
|
+
<text x="702" y="349" class="sans small">future prices table</text>
|
|
80
|
+
|
|
81
|
+
<rect x="760" y="380" width="440" height="98" rx="12" class="ns"/>
|
|
82
|
+
<text x="780" y="405" class="sans small">namespace</text>
|
|
83
|
+
<text x="852" y="405" class="mono name">trading</text>
|
|
84
|
+
<rect x="780" y="418" width="400" height="24" rx="6" class="pill"/>
|
|
85
|
+
<text x="792" y="435" class="mono table">trading.alembic_version</text>
|
|
86
|
+
<rect x="780" y="448" width="400" height="24" rx="6" class="pill"/>
|
|
87
|
+
<text x="792" y="465" class="mono table">trading.orders</text>
|
|
88
|
+
|
|
89
|
+
<text x="40" y="510" class="sans small">A new workload User, after a new Environment or a recreated Job, only needs Team membership. The namespaces and their tables keep their owner.</text>
|
|
90
|
+
|
|
91
|
+
<!-- checks -->
|
|
92
|
+
<rect x="40" y="540" width="373" height="170" rx="12" class="box"/>
|
|
93
|
+
<text x="58" y="570" class="sans tag" fill="#15803d">ENFORCED</text>
|
|
94
|
+
<text x="58" y="596" class="sans head">Registering a table in a namespace</text>
|
|
95
|
+
<text x="58" y="622" class="sans note">The caller must be a Writer of the namespace,</text>
|
|
96
|
+
<text x="58" y="642" class="sans note">directly or through a Team, or an admin.</text>
|
|
97
|
+
<text x="58" y="662" class="sans note">Otherwise: 403 namespace_not_writable.</text>
|
|
98
|
+
<text x="58" y="682" class="sans note">A Writer's new table gets no grant of its own.</text>
|
|
99
|
+
|
|
100
|
+
<rect x="433" y="540" width="373" height="170" rx="12" class="box"/>
|
|
101
|
+
<text x="451" y="570" class="sans tag" fill="#15803d">ENFORCED</text>
|
|
102
|
+
<text x="451" y="596" class="sans head">Reading or writing a table</text>
|
|
103
|
+
<text x="451" y="622" class="sans note">A grant on the table or on its namespace,</text>
|
|
104
|
+
<text x="451" y="642" class="sans note">to the caller or one of its Teams. Checked</text>
|
|
105
|
+
<text x="451" y="662" class="sans note">by the API and by the caller's own role in</text>
|
|
106
|
+
<text x="451" y="682" class="sans note">the database.</text>
|
|
107
|
+
|
|
108
|
+
<rect x="826" y="540" width="374" height="170" rx="12" class="box"/>
|
|
109
|
+
<text x="844" y="570" class="sans tag" fill="#b91c1c">NOT ENFORCED</text>
|
|
110
|
+
<text x="844" y="596" class="sans head">Which project uses which namespace</text>
|
|
111
|
+
<text x="844" y="622" class="sans note">Any Writer of prices can register tables there</text>
|
|
112
|
+
<text x="844" y="642" class="sans note">from any project. A project may use several</text>
|
|
113
|
+
<text x="844" y="662" class="sans note">namespaces or share one. One namespace per</text>
|
|
114
|
+
<text x="844" y="682" class="sans note">application is a recommendation.</text>
|
|
115
|
+
</svg>
|
|
@@ -93,11 +93,14 @@ application's tables belong to a platform Team instead:
|
|
|
93
93
|
2. **Add the workload Users.** Add the migration Job's workload User, and the
|
|
94
94
|
workload User of every resource that reads or writes the tables (FastAPI
|
|
95
95
|
release, Agent, other Jobs). Each resource's `workload_user_uid` names it.
|
|
96
|
-
3. **Grant the Team
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
3. **Grant the Team its namespaces.** For each namespace the tables are
|
|
97
|
+
registered in, an Organization admin creates it in that Environment's
|
|
98
|
+
MetaTables if it doesn't exist yet, under **Security** or with
|
|
99
|
+
`POST /security/namespaces/`, and grants the Team Writer on it
|
|
100
|
+
(`PUT /namespaces/{uid}/permissions`). Every table registered in the namespace
|
|
101
|
+
inherits the grant. One namespace per application is the recommended layout,
|
|
102
|
+
not a rule; see
|
|
103
|
+
[Namespaces and applications](../security/ownership-and-sharing.md#namespaces-and-applications).
|
|
101
104
|
|
|
102
105
|
The Job also needs platform `view` on the Environment's `metatables` release and
|
|
103
106
|
its branch to discover the API; declare it on the Job:
|
|
@@ -142,8 +145,8 @@ writes gets no grant of its own, so the Team stays its only owner.
|
|
|
142
145
|
- The Job finds the Environment's MetaTables API the same way any client does
|
|
143
146
|
([installation and connection](installation-and-connection.md)). That API must
|
|
144
147
|
be deployed with its system migrations applied; otherwise the Job fails. Its
|
|
145
|
-
workload User needs Writer
|
|
146
|
-
|
|
148
|
+
workload User needs Writer, through the Team above, on every namespace the
|
|
149
|
+
provider registers tables in.
|
|
147
150
|
|
|
148
151
|
## Keep each release compatible with the previous one
|
|
149
152
|
|
|
@@ -20,6 +20,11 @@ removes that contribution; independent direct or Team grants remain effective.
|
|
|
20
20
|
Moving a table requires its Writer and destination namespace Writer, or admin
|
|
21
21
|
authority for the destination. Table Writer alone cannot change global grants.
|
|
22
22
|
|
|
23
|
+
A namespace is not tied to a project. Registering a table in it needs Writer on
|
|
24
|
+
the namespace, whatever project the caller runs. One namespace per application,
|
|
25
|
+
owned by a Team per Environment, is the recommended layout; see
|
|
26
|
+
[Namespaces and applications](../security/ownership-and-sharing.md#namespaces-and-applications).
|
|
27
|
+
|
|
23
28
|
## Labels
|
|
24
29
|
|
|
25
30
|
Labels classify resources and never authorize an operation. The catalog owns
|