mainsequence-metatable 0.1.36.dev68__tar.gz → 0.1.37.dev69__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.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +5 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +8 -3
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +25 -9
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +34 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/PKG-INFO +3 -3
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0017-hosted-request-identity.md +10 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/authentication-and-errors.md +7 -5
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/openapi.json +1 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/identity-and-scope.md +2 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/releasing.md +2 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/security/index.md +10 -4
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/pyproject.toml +3 -3
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/PKG-INFO +3 -3
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/SOURCES.txt +2 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/requires.txt +2 -2
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/boundary.py +15 -7
- mainsequence_metatable-0.1.37.dev69/src/metatables/api/app/auth/team_membership.py +104 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/main.py +3 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/mcp.py +13 -13
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/platform_cache.py +2 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/caller.py +3 -2
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime.py +8 -1
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/access.py +6 -0
- mainsequence_metatable-0.1.37.dev69/src/metatables/api/backend/domain/permission_rules.py +43 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/sdk_compat.py +5 -2
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_agent_surface.py +4 -2
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_mcp.py +3 -3
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_platform_fact_cache.py +36 -10
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_request_identity.py +18 -3
- mainsequence_metatable-0.1.37.dev69/tests/auth/test_team_membership.py +55 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/conftest.py +15 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_sql_security.py +34 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/uv.lock +70 -19
- mainsequence_metatable-0.1.36.dev68/src/metatables/api/backend/domain/permission_rules.py +0 -18
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/LICENSE +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0023-daily-security-check.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/assets/diagrams/namespace-access.svg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/deploy-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/security/permissions.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/analysis.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/connection_count.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/access_map.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/connection_pool.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/security_check_job.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/security_check.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/request_timing.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_caller_endpoint.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_schema_validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_api_endpoint.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_runtime_upgrade.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_batch_introspection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_connection_reuse.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_request_timing.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_serving_policy.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_access_map.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_deployment_security.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_incremental_security.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_security_api.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_security_check.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_queries.py +0 -0
- {mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_workload_principals.py +0 -0
|
@@ -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.16
|
|
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 .
|
|
@@ -54,6 +54,11 @@ For a deployed Agent, use the projected `a2a.send_message` MCP operation. The pl
|
|
|
54
54
|
resolves the target `AgentSession`, waits for its runtime to become ready, and dispatches the
|
|
55
55
|
message. For asynchronous work, use the returned Task handle with `a2a.wait_task`.
|
|
56
56
|
|
|
57
|
+
The platform gives a direct Message (`response_kind: "message"`) 90 seconds, and no setting
|
|
58
|
+
extends that limit. A target that has not answered by then stops its turn, and the send fails
|
|
59
|
+
because of the limit. Send work that may take longer with `response_kind: "task"`, and do not
|
|
60
|
+
resend a Message that ran out of time: the work it already did is not rolled back.
|
|
61
|
+
|
|
57
62
|
For local Tau development, start `ms-tau` and wait for its local `/ready` result. The public A2A
|
|
58
63
|
REST and JSON-RPC surfaces support Message and Task execution against the workspace-local SQLite
|
|
59
64
|
store, including streaming, list/get/cancel/subscribe, and continuation. An A2A protocol Task does
|
|
@@ -35,9 +35,9 @@ The SDK looks for the CLI in `MAINSEQUENCE_CLI`, then beside the Python interpre
|
|
|
35
35
|
CLI. Do not add token lines to `.env`. A pair found there still works, but it is deprecated and
|
|
36
36
|
startup logs a warning. `mainsequence refresh-token` run in that directory removes the lines.
|
|
37
37
|
|
|
38
|
-
Do not set `APP_NAME`, `FASTAPI_PUBLIC_BASE_URL`, `MAINSEQUENCE_CALLER_AUTH_MODE=assertion`,
|
|
39
|
-
`MAINSEQUENCE_CALLER_ASSERTION_*` variables
|
|
40
|
-
local mode refuses to start with them.
|
|
38
|
+
Do not set `APP_NAME`, `FASTAPI_PUBLIC_BASE_URL`, `MAINSEQUENCE_CALLER_AUTH_MODE=assertion`, the
|
|
39
|
+
`MAINSEQUENCE_CALLER_ASSERTION_*` variables or `MAINSEQUENCE_A2A_MESSAGE_LIMIT_SECONDS`. The
|
|
40
|
+
platform sets them when it hosts a runtime, and local mode refuses to start with them.
|
|
41
41
|
|
|
42
42
|
Set `MAINSEQUENCE_ENDPOINT` only for a non-default platform endpoint. The CLI session must be for
|
|
43
43
|
the same endpoint. Local mode binds to `127.0.0.1:8787` by default. Treat an explicit public bind
|
|
@@ -118,6 +118,11 @@ To request a Task from `message:send`, send the response-kind extension header
|
|
|
118
118
|
response. `message:stream` is always Task-oriented and does not accept `responseKind` or
|
|
119
119
|
`returnImmediately`.
|
|
120
120
|
|
|
121
|
+
Local mode has no platform Message limit: a direct Message ends only at
|
|
122
|
+
`MAINSEQUENCE_TAU_TURN_TIMEOUT_SECONDS`. A hosted Agent answers a direct Message within the
|
|
123
|
+
platform's 90 seconds or with HTTP 504 `DEADLINE_EXCEEDED`, so design work that may take longer as
|
|
124
|
+
a Task.
|
|
125
|
+
|
|
121
126
|
Task terminality is derived only from its A2A state. `completed`, `failed`, `canceled`, and
|
|
122
127
|
`rejected` are terminal; `input_required` and `auth_required` are resumable. A normal execution
|
|
123
128
|
failure produces a durable failed Task and a standard responder `status.message`. A
|
|
@@ -26,8 +26,13 @@ second SDK-specific prompt override or companion append file. Other resources fo
|
|
|
26
26
|
version pinned by the installed SDK.
|
|
27
27
|
|
|
28
28
|
`.agents/skills/ms_tau_sdk/` is different: it contains managed development instructions for coding
|
|
29
|
-
agents working on the repository. It is not
|
|
30
|
-
|
|
29
|
+
agents working on the repository. It is not the runtime's `.tau` behavior and must not be used as
|
|
30
|
+
application configuration.
|
|
31
|
+
|
|
32
|
+
Tau reads skills in `.tau/skills/` and `.agents/skills/` at any depth: a folder without a
|
|
33
|
+
`SKILL.md` groups skills, such as `.agents/skills/mcp_tools/<skill>/SKILL.md`, the folder an
|
|
34
|
+
application can publish with the mainsequence SDK's skills publisher. The managed skills in
|
|
35
|
+
`.agents/skills/ms_tau_sdk/` are read too.
|
|
31
36
|
|
|
32
37
|
## Extension ownership
|
|
33
38
|
|
|
@@ -74,7 +79,7 @@ Task controls requires an actual Task context and is specified by ADR 0015.
|
|
|
74
79
|
The A2A Task controls are `task_request_input` and `task_request_authorization`. They remain
|
|
75
80
|
available in every mode for the agent's own Task; extensions must not register those names.
|
|
76
81
|
Register project tools under `.tau/extensions/` and verify the effective catalog after loading.
|
|
77
|
-
With base tools excluded, the skill-scoped `read` keeps
|
|
82
|
+
With base tools excluded, the skill-scoped `read` keeps the project skills available: it opens a
|
|
78
83
|
discovered skill's `SKILL.md` and the files in its directory, such as `references/*.md`, and
|
|
79
84
|
rejects every other path, including symlinks that resolve outside the skill. Tau lists the skills
|
|
80
85
|
in the system prompt because a tool named `read` exists. Extensions must not register `read` in
|
|
@@ -96,6 +101,16 @@ retry guidance for up to `TAU_MCP_APPLICATION_READY_TIMEOUT_SECONDS` (default `1
|
|
|
96
101
|
turn time. This startup budget is separate from the tool's execution limit; an expired readiness
|
|
97
102
|
wait reports `readiness_timeout`. Cancellation, ended delegation and terminal refusals stop the wait.
|
|
98
103
|
|
|
104
|
+
## Skills that applications publish
|
|
105
|
+
|
|
106
|
+
A declared application can publish Agent Skills through the MCP Skills extension, as the
|
|
107
|
+
mainsequence SDK's skills publisher does. The Agent lists them with `<name>__list_resources` and
|
|
108
|
+
reads one file with `<name>__read_resource`; a skill file is returned only when its bytes match the
|
|
109
|
+
size and SHA-256 digest the skill lists. Published skills stay the application's: they are not
|
|
110
|
+
project skills under `.tau/skills/`, and fields such as `allowed-tools` grant nothing. With the
|
|
111
|
+
coding tools, a model that follows a published skill can run commands; set
|
|
112
|
+
`TAU_EXCLUDE_BASE_TOOLS=true` when that must not happen.
|
|
113
|
+
|
|
99
114
|
## Invariants extensions must not replace
|
|
100
115
|
|
|
101
116
|
Extensions may change effective agent capabilities, but they must not replace or bypass:
|
|
@@ -143,10 +158,13 @@ async def revenue_by_region(tool_call_id, arguments, signal=None, on_update=None
|
|
|
143
158
|
return AgentToolResult(content=[TextContent(text=json.dumps(answer.json()["rows"]))])
|
|
144
159
|
```
|
|
145
160
|
|
|
146
|
-
- `current_requester()` returns the person the turn serves, with `uid` and
|
|
147
|
-
`
|
|
148
|
-
|
|
149
|
-
|
|
161
|
+
- `current_requester()` returns the person the turn serves, with `uid` and
|
|
162
|
+
`await in_teams(team_uids, *, max_age_seconds=None)`, or `None`. `in_teams()` answers while the
|
|
163
|
+
person is the verified caller of the turn's request (see `tau_security_and_access`, "Checking the
|
|
164
|
+
person's teams"); `team_uids` is deprecated. The platform names that person when the turn
|
|
165
|
+
starts, whoever called; it is `None` when the platform names nobody, in local mode, and in code
|
|
166
|
+
outside a turn. Only it names the requester: never take a person's UID from tool arguments, the
|
|
167
|
+
prompt, history, or a header.
|
|
150
168
|
- `platform_client()` returns a client. `await client.request("GET", "/api/v1/...")` calls a
|
|
151
169
|
platform API path, and `await client.call_release(release_uid, method, path, ...)` calls another
|
|
152
170
|
platform application. Both return an `httpx.Response`.
|
|
@@ -167,8 +185,6 @@ Rules for tools that act for the requester:
|
|
|
167
185
|
- A delegated call uses the person's ordinary permissions, including administrative ones; any other
|
|
168
186
|
call uses the Agent's own. Each operation decides what it needs. Never infer write permission
|
|
169
187
|
from view access.
|
|
170
|
-
- This needs the platform's matching change, deployed in the same cutover; check the deployed
|
|
171
|
-
platform and the installed SDK before depending on it.
|
|
172
188
|
- Return to the model only business results, such as rows, numbers, and names. Never return the
|
|
173
189
|
response object, its headers, a token, a proof, or a raw error body.
|
|
174
190
|
- Keep nothing for another turn or another person. The delegation ends with the turn, and a task
|
|
@@ -178,7 +178,13 @@ What makes it safe:
|
|
|
178
178
|
|
|
179
179
|
A delegated read returns anything the person can view in the Agent's Environment: what they
|
|
180
180
|
created and what others shared with them, directly or through a team. This holds for Secrets and
|
|
181
|
-
|
|
181
|
+
other shared resources. Ordinary Teams use explicit membership: the creator is added once and
|
|
182
|
+
can be removed; current Organization admins are protected writer members. Removing the admin
|
|
183
|
+
role keeps membership and writer access but ends protection. Only Organization admins manage
|
|
184
|
+
membership, and managing a workload that created a Team does not grant Team control. A Team's
|
|
185
|
+
members still receive the resources shared with it. The Full directory remains unchanged.
|
|
186
|
+
See the SDK Security and access guide's **Teams and membership** section for platform rollout.
|
|
187
|
+
The platform enforces sharing; which of those objects a tool uses is part of
|
|
182
188
|
the tool's design. For Secrets, the naming convention states that design:
|
|
183
189
|
|
|
184
190
|
- **A personal credential:** a name tied to the person, such as `QUOTES_API_KEY__<person uid>`.
|
|
@@ -201,6 +207,33 @@ How sharing works:
|
|
|
201
207
|
tool can use them when its design needs to, for example to refuse a team key where it expects a
|
|
202
208
|
personal one. That is a choice of the tool, not a platform rule.
|
|
203
209
|
|
|
210
|
+
## Checking the person's teams
|
|
211
|
+
|
|
212
|
+
A delegated call already reaches exactly what the person can, including what is shared with their
|
|
213
|
+
teams, so a tool rarely checks teams itself. When the tool's own policy names teams, ask the
|
|
214
|
+
platform with `in_teams()`:
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
person = current_requester()
|
|
218
|
+
if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM_UID]):
|
|
219
|
+
return AgentToolResult(content=[TextContent(text="These reports are for the team's members.")])
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
- `await in_teams(team_uids, *, max_age_seconds=None)` returns the subset of `team_uids` the
|
|
223
|
+
person is an active member of, as a `frozenset`. Unknown and inactive teams are left out.
|
|
224
|
+
- On the turn's requester it answers only while that person is the verified caller of the request
|
|
225
|
+
the turn runs in, such as a chat or A2A Message they sent. A turn with no such request raises
|
|
226
|
+
`TauSDKError`: a Task attempt the platform dispatches, a turn that resumes a caller delivery, or
|
|
227
|
+
work another Agent asked for. Refuse the action then; never read the error as a membership
|
|
228
|
+
answer. An HTTP handler asks for its caller with `await request.state.user.in_teams(...)`.
|
|
229
|
+
- The process reuses an answer across requests for `TAU_TEAM_MEMBERSHIP_CACHE_SECONDS` (default
|
|
230
|
+
`0`: only within its request); set it in `harness_agent.spec.env_vars`. `max_age_seconds=0`
|
|
231
|
+
always asks the platform: use it before a write that must see a removal at once.
|
|
232
|
+
- A check the platform cannot answer raises `BackendError`; it never answers "not a member".
|
|
233
|
+
- `team_uids` on the requester is deprecated and warns when read. It is empty when the turn does
|
|
234
|
+
not know the person's teams, and raises when the caller's assertion carried no team list, as
|
|
235
|
+
every assertion will once the platform stops signing them. Use `in_teams()`.
|
|
236
|
+
|
|
204
237
|
## What never reaches the model
|
|
205
238
|
|
|
206
239
|
Tool results, their `details`, and errors can reach the model provider and the session history.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.37.dev69
|
|
4
4
|
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
5
|
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: mainsequence[mcp]<10,>=9.0.
|
|
17
|
+
Requires-Dist: mainsequence[mcp]<10,>=9.0.26
|
|
18
18
|
Requires-Dist: alembic<2,>=1.18
|
|
19
19
|
Requires-Dist: cachetools
|
|
20
20
|
Requires-Dist: cryptography<51,>=46
|
|
@@ -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.16; 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
|
|
@@ -9,6 +9,16 @@ launcher declaration, genuine EdDSA caller assertions verified by the SDK, rejec
|
|
|
9
9
|
callers, Local isolation, and PodDeploymentOrchestrator's own launcher run against
|
|
10
10
|
the deployed entrypoint. A hosted rollout has not yet been verified.
|
|
11
11
|
|
|
12
|
+
> Amendment (2026-10-15, SDK #225): caller assertions stop carrying Team UIDs.
|
|
13
|
+
> Admission asks the platform with `in_teams()` which of the Teams that MetaTables
|
|
14
|
+
> grants name the caller, or the requester of a delegated call, belongs to. The SDK
|
|
15
|
+
> reuses an answer for 24 hours (`team_membership_cache_seconds`). SQL writes act
|
|
16
|
+
> on an answer at most a minute old; migration credentials, table deletion,
|
|
17
|
+
> finalization and permission changes ask at once. A SQL login's stored Teams, and
|
|
18
|
+
> so its database role memberships, change only on a fresh answer, so pods holding
|
|
19
|
+
> answers of different ages cannot flip them. A failed check is a 503, never "not a
|
|
20
|
+
> member".
|
|
21
|
+
|
|
12
22
|
Owner: MetaTables API. The SDK owns caller verification
|
|
13
23
|
([SDK 9.0.6 ADR 0036: Request-scoped logged user](https://github.com/mainsequence-sdk/mainsequence-sdk/blob/v9.0.6/docs/adr/0036-request-scoped-logged-user.md));
|
|
14
24
|
the platform's FastAPI launcher owns the startup check.
|
|
@@ -22,11 +22,13 @@ other SDK mode. Once it is installed, every route not declared in the deployment
|
|
|
22
22
|
MetaTables declares no anonymous route. A hosted API started without that
|
|
23
23
|
configuration installs nothing, and admission rejects every caller.
|
|
24
24
|
|
|
25
|
-
The assertion also carries the caller's
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
The assertion also carries the caller's admin flag, which the SDK exposes on
|
|
26
|
+
`User.get_logged_user()`. Admission uses it as signed and performs no User lookup,
|
|
27
|
+
so workload Users, such as applications and Jobs that run as their own User, are
|
|
28
|
+
admitted like people. Team membership is asked of the platform with `in_teams()`,
|
|
29
|
+
only for the Teams MetaTables grants name, and reused for 24 hours; writes use an
|
|
30
|
+
answer at most a minute old, and credential, deletion and permission requests ask
|
|
31
|
+
at once. When the platform cannot answer, the request fails with 503. The API evaluates table/namespace
|
|
30
32
|
grants in its runtime database. User and Team facts remain platform-owned; no local
|
|
31
33
|
membership registry is used. This adds no authentication mechanism.
|
|
32
34
|
|
{mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/api/openapi.json
RENAMED
|
@@ -5025,7 +5025,7 @@
|
|
|
5025
5025
|
},
|
|
5026
5026
|
"/caller/": {
|
|
5027
5027
|
"get": {
|
|
5028
|
-
"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)
|
|
5028
|
+
"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),\nand the Teams are those MetaTables grants name that the caller belongs to (SDK\n#225); Local and developer runtimes admit the developer's own SDK session.",
|
|
5029
5029
|
"operationId": "admitted_caller_caller__get",
|
|
5030
5030
|
"responses": {
|
|
5031
5031
|
"200": {
|
|
@@ -20,7 +20,8 @@ TimescaleDB, MySQL or MSSQL runtime DataSource their deployment declares, for bo
|
|
|
20
20
|
roles; the deployment's migration Job initializes it. Local Settings initializes or
|
|
21
21
|
selects the SQLite file. Both use the same bootstrap operation.
|
|
22
22
|
|
|
23
|
-
The SDK supplies trusted User identity,
|
|
23
|
+
The SDK supplies trusted User identity, membership answers for the Teams MetaTables
|
|
24
|
+
grants name, Organization admin status,
|
|
24
25
|
and independent Git source facts. MetaTables owns workspace identity and
|
|
25
26
|
Reader/Writer table/namespace grants. It does not store an independent membership
|
|
26
27
|
registry or replicate platform Organization policy. See the implemented
|
|
@@ -66,6 +66,8 @@ The minimum and lockfile now select published SDK `9.0.19`. SDK 9.0.14 is the fi
|
|
|
66
66
|
caller and to name workloads
|
|
67
67
|
([ADR 0002](../adr/api/0002-application-administration-and-table-ownership.md)).
|
|
68
68
|
SDK 9.0.10 is the first whose `User` reads workload User rows.
|
|
69
|
+
The repository requires SDK 9.0.26, whose request identity asks Team membership on
|
|
70
|
+
demand with `in_teams()` (SDK #225); caller assertions stop carrying Team UIDs.
|
|
69
71
|
SDK 9.0.9 is the first whose request identity exposes the caller's signed Team UIDs
|
|
70
72
|
and admin flag; hosted admission needs them to admit workload Users
|
|
71
73
|
([#37](https://github.com/mainsequence-projects/MetaTables/issues/37)). SDK 9.0.4 is the first
|
{mainsequence_metatable-0.1.36.dev68 → mainsequence_metatable-0.1.37.dev69}/docs/security/index.md
RENAMED
|
@@ -98,11 +98,17 @@ choice, not an authorization mechanism.
|
|
|
98
98
|
Use the compatible published SDK prerequisite described in
|
|
99
99
|
[installation](../client/installation-and-connection.md). In hosted mode the SDK
|
|
100
100
|
request identity verifies the existing signed caller assertion. Admission takes the
|
|
101
|
-
caller
|
|
102
|
-
|
|
101
|
+
caller and its admin flag from `User.get_logged_user()`, as the platform signed
|
|
102
|
+
them, and looks up no User
|
|
103
103
|
([ADR 0017](../adr/api/0017-hosted-request-identity.md)). Workload Users are
|
|
104
|
-
admitted like people.
|
|
105
|
-
|
|
104
|
+
admitted like people. The assertion carries no Teams: admission asks the platform,
|
|
105
|
+
with `in_teams()`, which of the Teams that MetaTables grants name the caller belongs
|
|
106
|
+
to. Each pod reuses an answer for 24 hours, so a person removed from a Team can
|
|
107
|
+
keep reading through that Team's grants for up to a day. Writes act on an answer
|
|
108
|
+
at most a minute old. Migration credentials, table deletion, finalization and
|
|
109
|
+
permission changes always ask the platform at once, and a login's database role
|
|
110
|
+
memberships change only on such a fresh answer. A failed check fails the request;
|
|
111
|
+
it never counts as "not a member". Local admission resolves facts for the running SDK user,
|
|
106
112
|
whose platform User response must supply `is_organization_admin` and
|
|
107
113
|
`active_team_uids`.
|
|
108
114
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mainsequence-metatable"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.37.dev69"
|
|
8
8
|
description = "Main Sequence MetaTables Python client and standalone API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -18,7 +18,7 @@ classifiers = [
|
|
|
18
18
|
"Operating System :: OS Independent",
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
|
-
"mainsequence[mcp]>=9.0.
|
|
21
|
+
"mainsequence[mcp]>=9.0.26,<10",
|
|
22
22
|
"alembic>=1.18,<2",
|
|
23
23
|
"cachetools",
|
|
24
24
|
"cryptography>=46,<51",
|
|
@@ -59,7 +59,7 @@ Documentation = "https://potential-doodle-wn39mnm.pages.github.io/"
|
|
|
59
59
|
[project.optional-dependencies]
|
|
60
60
|
dev = ["pytest>=8,<10", "ruff>=0.14", "build>=1,<2", "packaging>=24.2", "twine>=6,<7"]
|
|
61
61
|
docs = ["mkdocs>=1.6,<2"]
|
|
62
|
-
agent = ["ms-tau-sdk==2.0.
|
|
62
|
+
agent = ["ms-tau-sdk==2.0.16"]
|
|
63
63
|
mysql = ["PyMySQL[rsa]>=1.1.1,<1.2"]
|
|
64
64
|
# Keep the published extra name for existing installers; pyodbc is required.
|
|
65
65
|
mssql = []
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mainsequence-metatable
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.37.dev69
|
|
4
4
|
Summary: Main Sequence MetaTables Python client and standalone API
|
|
5
5
|
Author-email: Main Sequence GmbH <dev@main-sequence.io>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Requires-Python: >=3.13
|
|
15
15
|
Description-Content-Type: text/markdown
|
|
16
16
|
License-File: LICENSE
|
|
17
|
-
Requires-Dist: mainsequence[mcp]<10,>=9.0.
|
|
17
|
+
Requires-Dist: mainsequence[mcp]<10,>=9.0.26
|
|
18
18
|
Requires-Dist: alembic<2,>=1.18
|
|
19
19
|
Requires-Dist: cachetools
|
|
20
20
|
Requires-Dist: cryptography<51,>=46
|
|
@@ -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.16; 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
|
|
@@ -206,6 +206,7 @@ src/metatables/api/app/transfer.py
|
|
|
206
206
|
src/metatables/api/app/auth/__init__.py
|
|
207
207
|
src/metatables/api/app/auth/boundary.py
|
|
208
208
|
src/metatables/api/app/auth/local_actor.py
|
|
209
|
+
src/metatables/api/app/auth/team_membership.py
|
|
209
210
|
src/metatables/api/app/routes/__init__.py
|
|
210
211
|
src/metatables/api/app/routes/access_map.py
|
|
211
212
|
src/metatables/api/app/routes/caller.py
|
|
@@ -468,6 +469,7 @@ tests/auth/test_runtime_scaffold.py
|
|
|
468
469
|
tests/auth/test_runtime_selection.py
|
|
469
470
|
tests/auth/test_runtime_storage_binding.py
|
|
470
471
|
tests/auth/test_source_passwords.py
|
|
472
|
+
tests/auth/test_team_membership.py
|
|
471
473
|
tests/catalog/test_catalog_foundation.py
|
|
472
474
|
tests/catalog/test_contract_projection.py
|
|
473
475
|
tests/catalog/test_database_config.py
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
mainsequence[mcp]<10,>=9.0.
|
|
1
|
+
mainsequence[mcp]<10,>=9.0.26
|
|
2
2
|
alembic<2,>=1.18
|
|
3
3
|
cachetools
|
|
4
4
|
cryptography<51,>=46
|
|
@@ -28,7 +28,7 @@ urllib3>=2.7.0
|
|
|
28
28
|
uvicorn==0.52.4
|
|
29
29
|
|
|
30
30
|
[agent]
|
|
31
|
-
ms-tau-sdk==2.0.
|
|
31
|
+
ms-tau-sdk==2.0.16
|
|
32
32
|
|
|
33
33
|
[dev]
|
|
34
34
|
pytest<10,>=8
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from
|
|
5
|
+
from collections.abc import Callable
|
|
6
|
+
from dataclasses import dataclass, field
|
|
6
7
|
from uuid import UUID
|
|
7
8
|
|
|
8
9
|
from fastapi import Depends, HTTPException, Request
|
|
9
10
|
|
|
11
|
+
from metatables.api.app.auth.team_membership import request_max_age, team_checker
|
|
10
12
|
from metatables.api.app.runtime import RuntimeState
|
|
11
13
|
from metatables.api.backend.domain.permission_rules import TrustedActorFacts
|
|
12
14
|
from metatables.api.request_timing import thread_started
|
|
@@ -22,6 +24,8 @@ class AdmittedCaller:
|
|
|
22
24
|
environment_uid: UUID | None = None
|
|
23
25
|
active_team_uids: frozenset[UUID] = frozenset()
|
|
24
26
|
is_admin: bool = False
|
|
27
|
+
check_teams: Callable[[float | None], frozenset[UUID]] | None = field(
|
|
28
|
+
default=None, compare=False, repr=False)
|
|
25
29
|
|
|
26
30
|
|
|
27
31
|
def admit_request(request: Request) -> AdmittedCaller:
|
|
@@ -55,13 +59,16 @@ def admit_request(request: Request) -> AdmittedCaller:
|
|
|
55
59
|
route = getattr(request.scope.get("route"), "path", None)
|
|
56
60
|
if request.method not in {"GET", "HEAD", "OPTIONS"} and route not in DELEGATED_READ_POSTS:
|
|
57
61
|
raise HTTPException(403, "A call made for a person by another application can only read.")
|
|
62
|
+
check = team_checker(request, requester)
|
|
58
63
|
return AdmittedCaller(
|
|
59
64
|
user_uid=UUID(requester.uid), environment_uid=environment_uid,
|
|
60
|
-
active_team_uids=
|
|
65
|
+
active_team_uids=check(request_max_age(request)), check_teams=check,
|
|
61
66
|
)
|
|
67
|
+
# The assertion no longer lists teams: ask about the teams MetaTables grants name.
|
|
68
|
+
check = team_checker(request, caller)
|
|
62
69
|
return AdmittedCaller(
|
|
63
70
|
user_uid=UUID(caller.uid), is_admin=caller.is_organization_admin,
|
|
64
|
-
active_team_uids=
|
|
71
|
+
active_team_uids=check(request_max_age(request)), check_teams=check,
|
|
65
72
|
environment_uid=environment_uid,
|
|
66
73
|
)
|
|
67
74
|
|
|
@@ -70,9 +77,9 @@ def logged_user():
|
|
|
70
77
|
"""Return the caller that the SDK request identity verified for this request.
|
|
71
78
|
|
|
72
79
|
The SDK verifies the platform-signed caller assertion once, before any route
|
|
73
|
-
runs, and answers missing or invalid proof itself. The assertion
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
runs, and answers missing or invalid proof itself. The assertion carries the
|
|
81
|
+
caller's admin flag; team membership is asked of the platform on demand (SDK
|
|
82
|
+
#225). Admission admits people and workload Users alike. When no caller is bound, for
|
|
76
83
|
example on a hosted API started without the platform's trust configuration,
|
|
77
84
|
admission fails; there is no header or process-account fallback.
|
|
78
85
|
"""
|
|
@@ -103,7 +110,8 @@ def platform_facts(identity):
|
|
|
103
110
|
|
|
104
111
|
def trusted_actor_facts(caller: AdmittedCaller = Depends(admit_request)) -> TrustedActorFacts:
|
|
105
112
|
return TrustedActorFacts(user_uid=caller.user_uid, user_active=True,
|
|
106
|
-
active_team_uids=caller.active_team_uids, is_admin=caller.is_admin
|
|
113
|
+
active_team_uids=caller.active_team_uids, is_admin=caller.is_admin,
|
|
114
|
+
check_teams=caller.check_teams)
|
|
107
115
|
|
|
108
116
|
|
|
109
117
|
def require_admin(caller: AdmittedCaller = Depends(admit_request)) -> AdmittedCaller:
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Team membership of hosted callers, asked of the platform on demand (SDK #225).
|
|
2
|
+
|
|
3
|
+
The caller assertion no longer carries a team list. MetaTables asks the platform,
|
|
4
|
+
with ``in_teams()``, about the only teams that can matter here: the teams its own
|
|
5
|
+
namespace and table grants name. How old an answer may be depends on what the
|
|
6
|
+
request does:
|
|
7
|
+
|
|
8
|
+
- reads reuse an answer for a day (Jose, 2026-10-15): a person removed from a team
|
|
9
|
+
can keep reading through that team's grants for up to 24 hours;
|
|
10
|
+
- data and SQL writes accept an answer at most a minute old;
|
|
11
|
+
- issuing migration credentials, deleting tables, finalizing and changing
|
|
12
|
+
permissions always ask the platform now.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import itertools
|
|
18
|
+
from collections.abc import Callable
|
|
19
|
+
from uuid import UUID
|
|
20
|
+
|
|
21
|
+
from fastapi import HTTPException, Request
|
|
22
|
+
from sqlalchemy import event, select, union
|
|
23
|
+
from sqlalchemy.orm import Session
|
|
24
|
+
|
|
25
|
+
from metatables.api.backend.persistence.models import MetaTableGrant, NamespaceGrant
|
|
26
|
+
|
|
27
|
+
TEAM_MEMBERSHIP_CACHE_SECONDS = 24 * 60 * 60
|
|
28
|
+
# Routes whose effect a stale "member" answer must never authorize.
|
|
29
|
+
FRESH_ROUTES = frozenset({
|
|
30
|
+
("POST", "/meta-tables/{table_uid}/migration-connection/"),
|
|
31
|
+
("POST", "/meta-tables/finalize-managed/"),
|
|
32
|
+
("DELETE", "/meta-tables/{table_uid}/"),
|
|
33
|
+
("POST", "/meta-tables/{table_uid}/delete-with-cascade/"),
|
|
34
|
+
("POST", "/time-index-meta-tables/{table_uid}/delete-after-date/"),
|
|
35
|
+
("PUT", "/meta-tables/{uid}/permissions"),
|
|
36
|
+
("PUT", "/namespaces/{uid}/permissions"),
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
_grant_changes = itertools.count()
|
|
40
|
+
_grant_generation = 0
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _grants_flushed(session: Session, _context) -> None:
|
|
44
|
+
if any(isinstance(row, (NamespaceGrant, MetaTableGrant))
|
|
45
|
+
for row in (*session.new, *session.dirty, *session.deleted)):
|
|
46
|
+
session.info["grant_teams_changed"] = True
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _grants_committed(session: Session) -> None:
|
|
50
|
+
global _grant_generation
|
|
51
|
+
if session.info.pop("grant_teams_changed", False):
|
|
52
|
+
_grant_generation = next(_grant_changes) + 1
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
event.listen(Session, "after_flush", _grants_flushed)
|
|
56
|
+
event.listen(Session, "after_commit", _grants_committed)
|
|
57
|
+
event.listen(Session, "after_rollback", lambda session: session.info.pop("grant_teams_changed", None))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def grant_teams(request: Request) -> frozenset[str]:
|
|
61
|
+
"""The teams this catalog's grants name; none before a catalog is active."""
|
|
62
|
+
from metatables.api.app.auth.local_actor import active_catalog_factory
|
|
63
|
+
|
|
64
|
+
factory = active_catalog_factory(request.app)
|
|
65
|
+
if factory is None:
|
|
66
|
+
return frozenset()
|
|
67
|
+
|
|
68
|
+
def load() -> frozenset[str]:
|
|
69
|
+
query = union(
|
|
70
|
+
select(NamespaceGrant.principal_uid).where(NamespaceGrant.principal_kind == "team"),
|
|
71
|
+
select(MetaTableGrant.principal_uid).where(MetaTableGrant.principal_kind == "team"),
|
|
72
|
+
)
|
|
73
|
+
with factory() as session:
|
|
74
|
+
return frozenset(str(uid) for uid in session.scalars(query))
|
|
75
|
+
|
|
76
|
+
try:
|
|
77
|
+
return request.app.state.runtime.grant_teams.get(_grant_generation, load)
|
|
78
|
+
except Exception as exc:
|
|
79
|
+
raise HTTPException(503, "MetaTables catalog is unavailable.") from exc
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def team_checker(request: Request, person) -> Callable[[float | None], frozenset[UUID]]:
|
|
83
|
+
"""Ask which of the grant teams ``person`` belongs to, no older than ``max_age``.
|
|
84
|
+
|
|
85
|
+
``None`` reuses the day-long answer; failures fail the request and are never
|
|
86
|
+
read as "not a member".
|
|
87
|
+
"""
|
|
88
|
+
teams = grant_teams(request)
|
|
89
|
+
|
|
90
|
+
def check(max_age: float | None) -> frozenset[UUID]:
|
|
91
|
+
if not teams:
|
|
92
|
+
return frozenset()
|
|
93
|
+
try:
|
|
94
|
+
members = person.in_teams(teams, max_age_seconds=max_age)
|
|
95
|
+
except Exception as exc:
|
|
96
|
+
raise HTTPException(503, "Team membership is unavailable.") from exc
|
|
97
|
+
return frozenset(UUID(uid) for uid in members)
|
|
98
|
+
|
|
99
|
+
return check
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def request_max_age(request: Request) -> float | None:
|
|
103
|
+
route = getattr(request.scope.get("route"), "path", None)
|
|
104
|
+
return 0 if (request.method, route) in FRESH_ROUTES else None
|
|
@@ -128,7 +128,9 @@ def install_hosted_request_identity(service: FastAPI, config: RuntimeConfig) ->
|
|
|
128
128
|
return
|
|
129
129
|
if not any(os.environ.get(name) for name in PLATFORM_CALLER_AUTHENTICATION):
|
|
130
130
|
return
|
|
131
|
-
|
|
131
|
+
from metatables.api.app.auth.team_membership import TEAM_MEMBERSHIP_CACHE_SECONDS
|
|
132
|
+
# Membership answers are reused for a day; writes and credentials ask sooner (SDK #225).
|
|
133
|
+
install_request_identity(service, team_membership_cache_seconds=TEAM_MEMBERSHIP_CACHE_SECONDS)
|
|
132
134
|
if service.state.mainsequence_request_identity["mode"] != "assertion":
|
|
133
135
|
raise RuntimeError(
|
|
134
136
|
"The hosted MetaTables API accepts only platform caller assertions. "
|
|
@@ -37,22 +37,21 @@ class ApiCallError(RuntimeError):
|
|
|
37
37
|
|
|
38
38
|
def install_metatables_mcp(app) -> None:
|
|
39
39
|
"""Serve the read tools at ``/mcp``; request identity must already be installed."""
|
|
40
|
-
server = Server("MetaTables", instructions=INSTRUCTIONS)
|
|
41
40
|
tools = {tool.name: tool for tool in TOOLS}
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
async def list_tools(ctx, params) -> types.ListToolsResult:
|
|
43
|
+
return types.ListToolsResult(tools=[
|
|
44
|
+
types.Tool(name=tool.name, title=tool.label, description=tool.description,
|
|
45
|
+
input_schema=tool.parameters, meta={TIMEOUT_META_KEY: tool.timeout_seconds})
|
|
46
|
+
for tool in TOOLS
|
|
47
|
+
])
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
tool = tools.get(name)
|
|
49
|
+
async def call_tool(ctx, params: types.CallToolRequestParams) -> types.CallToolResult:
|
|
50
|
+
tool = tools.get(params.name)
|
|
53
51
|
if tool is None:
|
|
54
|
-
raise ValueError(f"Unknown tool: {name}.")
|
|
55
|
-
|
|
52
|
+
raise ValueError(f"Unknown tool: {params.name}.")
|
|
53
|
+
arguments: dict[str, Any] = dict(params.arguments or {})
|
|
54
|
+
assertion = ctx.request.headers.get(ASSERTION_HEADER)
|
|
56
55
|
loop = asyncio.get_running_loop()
|
|
57
56
|
|
|
58
57
|
def api(method: str, path: str, *, params: dict | None = None, json: Any = None) -> Any:
|
|
@@ -67,9 +66,10 @@ def install_metatables_mcp(app) -> None:
|
|
|
67
66
|
result = {"error": str(exc)}
|
|
68
67
|
return types.CallToolResult(
|
|
69
68
|
content=[types.TextContent(type="text", text=json.dumps(result, default=str))],
|
|
70
|
-
|
|
69
|
+
is_error="error" in result,
|
|
71
70
|
)
|
|
72
71
|
|
|
72
|
+
server = Server("MetaTables", instructions=INSTRUCTIONS, on_list_tools=list_tools, on_call_tool=call_tool)
|
|
73
73
|
manager = StreamableHTTPSessionManager(app=server, json_response=True, stateless=True)
|
|
74
74
|
install_mcp(app, manager.handle_request, lifespan=manager.run)
|
|
75
75
|
|
|
@@ -12,8 +12,9 @@ def admitted_caller(request: Request, caller: AdmittedCaller = Depends(admit_req
|
|
|
12
12
|
"""Who this request runs as: the User, Teams and admin flag the API admitted, named
|
|
13
13
|
through the platform directory as that User sees it.
|
|
14
14
|
|
|
15
|
-
Hosted, the identity comes from the platform-signed caller assertion (ADR 0017)
|
|
16
|
-
|
|
15
|
+
Hosted, the identity comes from the platform-signed caller assertion (ADR 0017),
|
|
16
|
+
and the Teams are those MetaTables grants name that the caller belongs to (SDK
|
|
17
|
+
#225); Local and developer runtimes admit the developer's own SDK session.
|
|
17
18
|
"""
|
|
18
19
|
config = request.app.state.runtime.config
|
|
19
20
|
user = describe_user(caller.user_uid)
|