mainsequence-metatable 0.1.47.dev75__tar.gz → 0.1.48.dev77__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.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-migrations/SKILL.md +28 -28
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +2 -2
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.mainsequence/workflows/metatables-api.yaml +7 -7
- {mainsequence_metatable-0.1.47.dev75/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.48.dev77}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0024-namespace-and-table-access-roles.md +61 -42
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/deploy-application-migrations.md +59 -50
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/permissions-namespaces-labels.md +5 -2
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/hosted-runtime.md +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/security/index.md +6 -3
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/security/ownership-and-sharing.md +24 -18
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/security/permissions.md +9 -3
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/namespaces.py +8 -4
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/security.py +63 -10
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/access_roles.py +9 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/platform_principals.py +20 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/security_check_job.py +1 -1
- mainsequence_metatable-0.1.48.dev77/src/metatables/api/backend/migrations/versions/0015_namespace_creator.py +23 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/register_catalog.py +8 -12
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/catalog.py +2 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/models.py +3 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/endpoint.py +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_agent_surface.py +3 -3
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_bootstrap.py +8 -8
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_migration.py +24 -6
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_catalog_contract.py +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_api_endpoint.py +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_runtime_upgrade.py +3 -3
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_register_catalog.py +57 -19
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_deployment_security.py +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_security_api.py +59 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_security_check.py +3 -3
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_workload_principals.py +21 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/uv.lock +1 -1
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/discover-tables/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/LICENSE +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0004-approved-application-migrations.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0009-shared-credential-store.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0013-application-owned-migrations.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0016-impact-preflight.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0017-hosted-request-identity.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0018-table-search.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0023-daily-security-check.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/adr/index.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/openapi.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/overview.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/reference.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/tables-and-migrations.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/api/time-index-and-updates.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/assets/diagrams/namespace-access.svg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/define-and-migrate-tables.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/installation-and-connection.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/query-and-mutate.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/tutorial.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/client/upgrade-legacy-app.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/architecture.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/runs-and-execution-graphs.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/releasing.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/index.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/catalog-migrations.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/configuration.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/local-runtime.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/run-history.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/operations/run-logs.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/reference/capabilities.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/reference/cli.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/mkdocs.yml +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/build_reference.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_boundaries.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_build.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/analysis.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/analyst/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/team_membership.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/configuration.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/connection_count.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/error_logging.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/main.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/mcp.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/access_map.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/caller.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/managed_finalize.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/run_logs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_search.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_crud.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime_database.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/connection_pool.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/contracts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/hosted.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/migration_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/timescale.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/run_logs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0014_access_roles.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/security_check.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/impact.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/documents.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/embeddings.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/index.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/ranking.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/text.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/worker.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/configuration.yaml +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/request_timing.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/app.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/migrations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/project.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/query.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/scripts/setup_metatables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/__main__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/frames.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/updaters.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/runner.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/sqlite.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/tls.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/models.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/storage_layout_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_api_search.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_mcp.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_tools.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_bootstrap_failure_cause.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_caller_endpoint.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_hosted_agent.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_request_identity.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_database.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_selection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_storage_binding.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_team_membership.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_schema_validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/capabilities.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_compiler_runtime_source.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_runtime_contract_compat.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/__init__.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_application_migration.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_application_owned_migrations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_data_source_registry.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_cli_workflow.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_client_selection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_remaining_client_routes.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_run_logs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_sqlite_runtime.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_scale.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_timescale_policies_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_setup_launch.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_tutorial.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_batch_introspection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_connection_reuse.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_request_timing.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_serving_policy.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_bootstrap_lock.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_timescale_policies.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_client_skills.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_installed_distribution.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_access_map.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_incremental_security.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_migration_boundary.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_queries.py +0 -0
|
@@ -46,35 +46,35 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
|
|
|
46
46
|
1. **Develop locally.** Author the revision and apply it to verified local SQLite
|
|
47
47
|
with the [local development skill](../metatables-local-development/SKILL.md).
|
|
48
48
|
2. **Commit the revision with the code that needs it.**
|
|
49
|
-
3. **Give the Job access.**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
`
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
has no owner until an Organization admin grants one. Recommend one namespace per
|
|
49
|
+
3. **Give the Job access.** Nothing is created by hand and no Organization admin is
|
|
50
|
+
needed. Follow "Give the Job access" in `docs/client/deploy-application-migrations.md`,
|
|
51
|
+
in each Environment:
|
|
52
|
+
1. Push the workflow file. It creates the Job's and the other resources' workload
|
|
53
|
+
Users before any step runs.
|
|
54
|
+
2. The first migration registers the provider's tables. A namespace they name that
|
|
55
|
+
does not exist yet is created by that registration, and the Job gets `editor` on
|
|
56
|
+
it. Do not tell the user to create the namespace before the push.
|
|
57
|
+
3. A person who manages the Job in the platform then manages the namespace's
|
|
58
|
+
access: grant `data_writer` to resources that only read and write rows, and
|
|
59
|
+
`owner` to themselves or to a Team they belong to, in the namespace's Access
|
|
60
|
+
panel (find a workload by its Job or release name) or with `grant_role` and its
|
|
61
|
+
`workload_user_uid`. A Team holding the roles with the workloads as members is
|
|
62
|
+
optional; it saves granting again when a Job or release is recreated.
|
|
63
|
+
|
|
64
|
+
Step 3 is the person's action, made in MetaTables, not in the repository. Tell the
|
|
65
|
+
user the step; with their explicit go-ahead you may run `grant_role` from their
|
|
66
|
+
session against the target Environment. Never put grants in the migration Job:
|
|
67
|
+
workloads are refused. If the namespace name is already taken, the first run stops
|
|
68
|
+
with `namespace_access_required`; an owner grants the Job `editor`, or the
|
|
69
|
+
application uses another namespace. A namespace created before ADR 0024 has no
|
|
70
|
+
owner until an Organization admin grants one. Recommend one namespace per
|
|
72
71
|
application; it is not required (see "Namespaces and applications" in
|
|
73
72
|
`docs/security/ownership-and-sharing.md`).
|
|
74
73
|
4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
|
|
75
74
|
migration Job that calls `upgrade_application` for each provider, in
|
|
76
75
|
dependency order, from the candidate image. The Job and every resource that
|
|
77
|
-
uses MetaTables declare `access.branches: [{repository: MetaTables,
|
|
76
|
+
uses MetaTables declare `access.branches: [{repository: MetaTables, policy: reader}]`
|
|
77
|
+
(workflow API `3.0.0`; the platform refuses `2.3.0` files and `level:` entries).
|
|
78
78
|
Every deployed resource that reads or writes the tables (FastAPI,
|
|
79
79
|
`harness_agent` and others) has a deploy step with `needs: [migrate]`. A failed
|
|
80
80
|
migration blocks the rollout.
|
|
@@ -267,10 +267,10 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
267
267
|
another install overwrote it. Move the provider under an application-owned
|
|
268
268
|
module (see [Provider placement](#provider-placement)), preserving its provider
|
|
269
269
|
identity and applied revision history. Do not edit files in `site-packages`.
|
|
270
|
-
- If reservation fails with `
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
`
|
|
270
|
+
- If reservation fails with `namespace_access_required` (403), the namespace already
|
|
271
|
+
exists: it is taken, or the Job was recreated with a new workload User. An owner the
|
|
272
|
+
error lists, or a manager of the workload that created the namespace, grants the
|
|
273
|
+
`caller_user_uid` `editor`, or adds it to a Team that holds it, then the Job is
|
|
274
274
|
re-run. With `namespace_required`, set the table's namespace. With
|
|
275
275
|
`table_not_editable`, an owner of the table or its namespace grants `editor`. Do
|
|
276
276
|
not change code or physical names to get around it.
|
|
@@ -53,8 +53,8 @@ output binding or explicitly authorized row scope for mutation tests.
|
|
|
53
53
|
|
|
54
54
|
A deployed producer runs as its Job's workload User. It needs `editor` on its output
|
|
55
55
|
tables, which lets it operate updaters and write rows, and `data_viewer` on its
|
|
56
|
-
inputs.
|
|
57
|
-
|
|
56
|
+
inputs. A person who manages the migration Job that created the output namespace, or
|
|
57
|
+
an owner, grants these on the namespaces, directly or through a Team (step 3 of the
|
|
58
58
|
[migrations skill](../metatables-migrations/SKILL.md)); no Organization admin is
|
|
59
59
|
needed. Output tables belong to the migration provider and its namespace: a workload
|
|
60
60
|
never creates a table outside a namespace.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
api_version: "
|
|
1
|
+
api_version: "3.0.0"
|
|
2
2
|
name: metatables-api
|
|
3
3
|
resources:
|
|
4
4
|
- key: metatables
|
|
@@ -27,14 +27,14 @@ resources:
|
|
|
27
27
|
access:
|
|
28
28
|
secrets:
|
|
29
29
|
- name: METATABLES_RUNTIME_DATABASE
|
|
30
|
-
|
|
30
|
+
policy: value_reader
|
|
31
31
|
# /runtime-context/ tells applications this branch's Analyst (ADR 0019).
|
|
32
32
|
resources:
|
|
33
33
|
- key: metatables-analyst-agent
|
|
34
|
-
|
|
34
|
+
policy: viewer
|
|
35
35
|
# The Admin's "Run security check now" starts the daily check (ADR 0023).
|
|
36
36
|
- key: check-security
|
|
37
|
-
|
|
37
|
+
policy: editor
|
|
38
38
|
|
|
39
39
|
- key: metatables-analyst-agent
|
|
40
40
|
kind: harness_agent
|
|
@@ -61,7 +61,7 @@ resources:
|
|
|
61
61
|
# The Analyst reads only as the person it serves (ADR 0020); it holds no grants.
|
|
62
62
|
acts_for_requester: true
|
|
63
63
|
access:
|
|
64
|
-
branch:
|
|
64
|
+
branch: reader
|
|
65
65
|
|
|
66
66
|
- key: migrate-system
|
|
67
67
|
kind: job
|
|
@@ -77,7 +77,7 @@ resources:
|
|
|
77
77
|
access:
|
|
78
78
|
secrets:
|
|
79
79
|
- name: METATABLES_RUNTIME_DATABASE
|
|
80
|
-
|
|
80
|
+
policy: value_reader
|
|
81
81
|
|
|
82
82
|
# The full database security check, outside the deployment (ADR 0023). Not a
|
|
83
83
|
# workflow step: every push activates its image, and it skips while the
|
|
@@ -101,7 +101,7 @@ resources:
|
|
|
101
101
|
access:
|
|
102
102
|
secrets:
|
|
103
103
|
- name: METATABLES_RUNTIME_DATABASE
|
|
104
|
-
|
|
104
|
+
policy: value_reader
|
|
105
105
|
|
|
106
106
|
execution:
|
|
107
107
|
steps:
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Status: Accepted.
|
|
4
4
|
|
|
5
5
|
Implementation status: implemented on development, in the API and in the MetaTables
|
|
6
|
-
Admin's Access panels.
|
|
6
|
+
Admin's Access panels. Namespaces created by a workload's registration (sections 3 and 5)
|
|
7
|
+
are implemented in the API; the Admin does not yet label the `manager` source. Non-container tests pass. The container matrix passes on SQLite;
|
|
7
8
|
on PostgreSQL, TimescaleDB, SQL Server and MySQL one runtime-bootstrap test fails, as it
|
|
8
9
|
did before this change. Hosted deployment is pending. The user guides are
|
|
9
10
|
[Ownership, roles, and inheritance](../../security/ownership-and-sharing.md) and the
|
|
@@ -52,8 +53,8 @@ instance contains namespaces, and a namespace contains tables.
|
|
|
52
53
|
- A principal holds at most one binding per object; granting another role replaces
|
|
53
54
|
it. Because roles are nested, its access is the strongest role among its own, its
|
|
54
55
|
Teams' and its namespace's bindings. There is no explicit deny.
|
|
55
|
-
- Organization admins, Team membership
|
|
56
|
-
stored.
|
|
56
|
+
- Organization admins, Team membership, namespace inheritance and the managers of a
|
|
57
|
+
namespace's creating workload are **computed**, never stored.
|
|
57
58
|
- The API checks actions, never role names. One evaluator answers both single checks
|
|
58
59
|
and list filters, so a list never shows what a check would refuse.
|
|
59
60
|
- Each action has a level: `read` (see metadata), `use` (read data), `write` (change
|
|
@@ -206,6 +207,10 @@ workload Users, Teams.
|
|
|
206
207
|
- A person who creates a namespace is granted `owner` on it (source `creator`). A taken
|
|
207
208
|
name is refused and never adopted; the refusal names its owners when the caller may
|
|
208
209
|
see them.
|
|
210
|
+
- Registering a table into a namespace that does not exist creates it. A person who
|
|
211
|
+
does so is granted `owner`. A workload User is granted `editor`, and the namespace
|
|
212
|
+
records it as its **creating workload**: the people who manage that workload manage
|
|
213
|
+
the namespace's access. An existing namespace needs `tables.create`, whoever created it.
|
|
209
214
|
- A person who creates a table outside any namespace is granted `owner` on it.
|
|
210
215
|
- A table created in a namespace gets no binding: the namespace's roles cover it.
|
|
211
216
|
|
|
@@ -216,12 +221,17 @@ workload Users, Teams.
|
|
|
216
221
|
| Every action on every object | Organization admin, from the platform on each request | `admin` |
|
|
217
222
|
| The roles granted to a Team | the caller's current Team membership, from the platform | `team`, with the Team |
|
|
218
223
|
| The table role of the same name | a role on the table's current namespace | `namespace`, with the namespace |
|
|
224
|
+
| `namespaces.get`, `namespaces.get_access`, `namespaces.set_access` on a namespace | managing its creating workload, from the platform on each request | `manager`, with the workload |
|
|
225
|
+
|
|
226
|
+
Managing the creating workload is access management only. It gives no role: no access
|
|
227
|
+
to the namespace's tables, no `namespaces.update` and no table-level bindings.
|
|
219
228
|
|
|
220
229
|
**Constraints** that no role overrides:
|
|
221
230
|
|
|
222
|
-
- A workload User is never granted `owner`, never grants or revokes a role
|
|
223
|
-
creates a
|
|
224
|
-
`owner` gives its
|
|
231
|
+
- A workload User is never granted `owner`, never grants or revokes a role and never
|
|
232
|
+
creates a table outside a namespace. It creates a namespace only by registering a
|
|
233
|
+
table into a free name, and then holds `editor`. A Team holding `owner` gives its
|
|
234
|
+
workload members no access management.
|
|
225
235
|
- A non-admin grants roles only to Teams they belong to, checked with the platform at
|
|
226
236
|
that moment, and to people and workload Users they can find in their own platform
|
|
227
237
|
directory.
|
|
@@ -233,7 +243,9 @@ workload Users, Teams.
|
|
|
233
243
|
|
|
234
244
|
1. hold `set_access` on the object and every action of the role on it (owners and
|
|
235
245
|
admins always do); or
|
|
236
|
-
2. manage the target workload User and hold every action of the role on the object
|
|
246
|
+
2. manage the target workload User and hold every action of the role on the object; or
|
|
247
|
+
3. manage the namespace's creating workload: any role, `owner` included, on that
|
|
248
|
+
namespace.
|
|
237
249
|
|
|
238
250
|
Revoking your own binding, and lowering or revoking a binding of a workload you manage,
|
|
239
251
|
are always allowed. Revoking the last owner leaves the admins. Every grant and revoke is
|
|
@@ -264,45 +276,44 @@ tables and whose FastAPI `crm-api` reads and writes them. Nothing exists yet.
|
|
|
264
276
|
```text
|
|
265
277
|
Ana (no admin role) MetaTables of the Environment
|
|
266
278
|
─────────────────── ─────────────────────────────
|
|
267
|
-
1.
|
|
268
|
-
|
|
279
|
+
1. push the workflow file ──► the platform creates migrate-crm and crm-api
|
|
280
|
+
and their workload Users; Ana manages them
|
|
269
281
|
|
|
270
|
-
2.
|
|
271
|
-
|
|
282
|
+
2. deploy: migrate-crm ───────────────────► namespace crm migrate-crm: editor
|
|
283
|
+
registers its tables in crm (creating workload)
|
|
284
|
+
its tables (no binding of their own)
|
|
272
285
|
|
|
273
|
-
3. grant on crm ──────────────────────────►
|
|
274
|
-
(
|
|
275
|
-
directly, or to a Team
|
|
276
|
-
Ana belongs to that contains them
|
|
286
|
+
3. grant on crm ──────────────────────────► crm-api: data_writer
|
|
287
|
+
(manages migrate-crm) Ana or a Team she belongs to: owner
|
|
277
288
|
|
|
278
|
-
4.
|
|
279
|
-
(no binding of their own)
|
|
280
|
-
crm-api ───────────────────► reads and writes their rows
|
|
289
|
+
4. crm-api ───────────────────────────────► reads and writes their rows
|
|
281
290
|
```
|
|
282
291
|
|
|
283
|
-
1. **
|
|
284
|
-
|
|
285
|
-
2. **
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
292
|
+
1. **Workloads.** Applying the workflow file creates both workload Users before any of
|
|
293
|
+
its Jobs run. The platform reports that Ana manages them.
|
|
294
|
+
2. **Namespace and tables.** The first deployment's migration Job registers its tables
|
|
295
|
+
in `crm`. The namespace does not exist, so the registration creates it, grants the
|
|
296
|
+
Job `editor` and records it as the creating workload.
|
|
297
|
+
3. **Access.** Because she manages `migrate-crm`, Ana manages `crm`'s access. She grants
|
|
298
|
+
`data_writer` to the FastAPI's workload User, and `owner` to herself or to a Team she
|
|
299
|
+
belongs to, so the namespace keeps an owner if the Job is recreated.
|
|
300
|
+
4. **Use.** The FastAPI reads and writes rows; its requests before step 3 were refused,
|
|
301
|
+
and succeed on the next request after it, with no redeployment.
|
|
291
302
|
|
|
292
303
|
This completes without an administrator:
|
|
293
304
|
|
|
294
|
-
- Every step needs only
|
|
295
|
-
|
|
296
|
-
- A Team is optional. With direct bindings, a recreated workload's new User needs
|
|
297
|
-
owner to grant its role again. With a Team,
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
workload User, the namespace, the missing action and the
|
|
301
|
-
|
|
305
|
+
- Every step needs only the push, the registration in step 2, or managing the Job.
|
|
306
|
+
- No namespace is created by hand, and the first migration succeeds.
|
|
307
|
+
- A Team is optional. With direct bindings, a recreated workload's new User needs an
|
|
308
|
+
owner, or a manager of the creating workload, to grant its role again. With a Team,
|
|
309
|
+
it needs only Team membership.
|
|
310
|
+
- A taken name stops the migration with `namespace_access_required`, naming the Job's
|
|
311
|
+
workload User, the namespace, the missing action and the owners when the Job may see
|
|
312
|
+
them. An owner grants the Job `editor`, or the application uses another namespace.
|
|
302
313
|
- Least privilege holds from the start: the FastAPI writes rows but cannot migrate,
|
|
303
|
-
delete or share.
|
|
304
|
-
- Each Environment has its own MetaTables.
|
|
305
|
-
|
|
314
|
+
delete or share, and the Job never decides access.
|
|
315
|
+
- Each Environment has its own MetaTables. The first deployment there creates the
|
|
316
|
+
namespace; step 3 is repeated by someone who manages the Job in that Environment.
|
|
306
317
|
|
|
307
318
|
### 6. API and clients
|
|
308
319
|
|
|
@@ -310,13 +321,15 @@ This completes without an administrator:
|
|
|
310
321
|
texts. The role documentation is generated from it.
|
|
311
322
|
- `POST /namespaces/` creates a namespace (replaces `POST /security/namespaces/`).
|
|
312
323
|
- `GET /namespaces/{uid}/access/` and `GET /meta-tables/{uid}/access/` return the
|
|
313
|
-
bindings with their source, who granted each and when.
|
|
324
|
+
bindings with their source, who granted each and when. A namespace's document also
|
|
325
|
+
names its creating workload.
|
|
314
326
|
- `POST .../access/changes/` grants and revokes roles in one request, checked against
|
|
315
327
|
the access revision the caller read.
|
|
316
328
|
- `GET .../access/me/` returns the caller's allowed actions; the Admin shows only the
|
|
317
329
|
buttons they allow.
|
|
318
330
|
- `GET .../access/explain/?user_uid=...&action=...` explains why someone can or cannot
|
|
319
|
-
do something.
|
|
331
|
+
do something. The `manager` source is shown only for the caller: the platform tells
|
|
332
|
+
only the caller which workloads they manage.
|
|
320
333
|
- Removed: `PUT /meta-tables/{uid}/permissions`, `PUT /namespaces/{uid}/permissions`,
|
|
321
334
|
`POST /security/namespaces/` and the Reader/Writer assignment documents.
|
|
322
335
|
- The Python client gets `Namespace.create()`, `get_access()`, `grant_role()`,
|
|
@@ -337,7 +350,8 @@ One new system migration converts every grant, with no compatibility layer:
|
|
|
337
350
|
| Namespace Writer | `editor` |
|
|
338
351
|
| Namespace without an owner | none; admins hold it until they grant an owner |
|
|
339
352
|
|
|
340
|
-
Access history is kept.
|
|
353
|
+
Access history is kept. A second migration records each namespace's creating workload;
|
|
354
|
+
existing namespaces have none, and their owners and admins manage them.
|
|
341
355
|
|
|
342
356
|
## Consequences
|
|
343
357
|
|
|
@@ -348,8 +362,11 @@ Access history is kept.
|
|
|
348
362
|
that person's access.
|
|
349
363
|
- A workload can no longer create a table outside a namespace. Updater Jobs that do so
|
|
350
364
|
today must set a namespace.
|
|
351
|
-
- Any person
|
|
352
|
-
owners.
|
|
365
|
+
- Any person, or a workload by registering a table, may claim a free namespace name.
|
|
366
|
+
Admins can rename a namespace or change its owners.
|
|
367
|
+
- The people who manage a namespace's creating workload manage its access for as long as
|
|
368
|
+
the platform reports that they manage it. A namespace whose creating workload nobody
|
|
369
|
+
manages any more keeps its owners, and admins.
|
|
353
370
|
- The catalog stores bindings instead of Reader/Writer flags, every route checks an
|
|
354
371
|
action, and database reconciliation gains the admin role.
|
|
355
372
|
- This amends ADR 0002 (namespace access is no longer admin-only; Reader/Writer become
|
|
@@ -363,5 +380,7 @@ Access history is kept.
|
|
|
363
380
|
- The conversion migration on a catalog with every kind of existing grant.
|
|
364
381
|
- The deployment of section 5 end to end as a non-admin, with direct bindings and with a
|
|
365
382
|
Team; a recreated workload; a namespace name already taken.
|
|
383
|
+
- A workload's registration creates the namespace with `editor`; a manager of the Job
|
|
384
|
+
grants any role; anyone else is refused.
|
|
366
385
|
- In the database: `data_viewer` gets `SELECT` only; `data_writer` writes rows but its
|
|
367
386
|
migration admission is refused; an admin reads a table without a binding.
|
|
@@ -15,13 +15,16 @@ before anything that uses the tables rolls out. See
|
|
|
15
15
|
[Local storage](local-storage.md).
|
|
16
16
|
2. **Commit the revision with the code that needs it.** Applied revisions are
|
|
17
17
|
immutable; every later schema change is a new revision.
|
|
18
|
-
3. **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
3. **Deploy.** The application's workflow runs its migration Job from the
|
|
19
|
+
candidate image, then deploys the resources that read or write the tables. The
|
|
20
|
+
first deployment to an Environment creates the application's namespace there and
|
|
21
|
+
gives the Job `editor` on it.
|
|
22
|
+
4. **Grant the other workloads.** Someone who manages the migration Job grants the
|
|
23
|
+
resources that read and write rows their roles on the namespace
|
|
24
|
+
([below](#give-the-job-access)). Nobody creates the namespace by hand, and no
|
|
25
|
+
Organization admin is needed.
|
|
26
|
+
|
|
27
|
+
Hosted runtimes are migrated only by step 3. Do not run `metatables migrations
|
|
25
28
|
upgrade` or `downgrade` against a hosted API from a developer machine or agent
|
|
26
29
|
session. Do not migrate at application startup either: several pods would race,
|
|
27
30
|
and a failure would not stop the rollout.
|
|
@@ -73,7 +76,7 @@ for provider in ("ledger.migrations:migration",):
|
|
|
73
76
|
Gate the deployments on it in `.mainsequence/workflows/<application>.yaml`:
|
|
74
77
|
|
|
75
78
|
```yaml
|
|
76
|
-
api_version: "
|
|
79
|
+
api_version: "3.0.0"
|
|
77
80
|
name: ledger
|
|
78
81
|
resources:
|
|
79
82
|
- key: ledger-api
|
|
@@ -111,48 +114,54 @@ against the branch's workflow template before committing it.
|
|
|
111
114
|
|
|
112
115
|
## Give the Job access
|
|
113
116
|
|
|
114
|
-
The Job runs as its own workload User.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
the application's tables in the namespace; the tables need no grants of their own.
|
|
137
|
-
|
|
138
|
-
Repeat steps 1, 3 and 4 in every Environment, each done by someone the platform admits
|
|
139
|
-
to that Environment: each Environment has its own MetaTables and its own workload Users.
|
|
117
|
+
The Job runs as its own workload User. A workload never grants roles and never creates
|
|
118
|
+
a table outside a namespace ([ADR 0024](../adr/api/0024-namespace-and-table-access-roles.md)).
|
|
119
|
+
It creates its namespace by registering its first table there:
|
|
120
|
+
|
|
121
|
+
1. **Push the workflow file.** Applying it creates the Job, the FastAPI release and
|
|
122
|
+
their workload Users before any step runs.
|
|
123
|
+
2. **The first migration creates the namespace.** When a provider's tables name a
|
|
124
|
+
namespace that does not exist in this Environment, the Job's registration creates
|
|
125
|
+
it and grants the Job `editor`. The namespace records the Job as its creating
|
|
126
|
+
workload. Later runs and new tables need nothing more.
|
|
127
|
+
3. **Grant the other workloads, and an owner.** The people who manage the Job in the
|
|
128
|
+
platform manage the namespace's access. In that Environment's Admin, open the
|
|
129
|
+
namespace's **Access** panel, find each workload by its Job or release name, and
|
|
130
|
+
grant `data_writer` to every resource that only reads and writes rows, such as the
|
|
131
|
+
FastAPI release. Grant `owner` to yourself or to a Team you belong to, so the
|
|
132
|
+
namespace keeps an owner if the Job is recreated. From Python, pass each resource's
|
|
133
|
+
`workload_user_uid`, which the Main Sequence SDK returns on the Job and the
|
|
134
|
+
ResourceRelease. The FastAPI's requests are refused until then, and succeed on the
|
|
135
|
+
next request after the grant, with no redeployment.
|
|
136
|
+
|
|
137
|
+
Repeat step 3 in every Environment, done by someone who manages the Job there: each
|
|
138
|
+
Environment has its own MetaTables and its own workload Users.
|
|
140
139
|
|
|
141
140
|
```python
|
|
142
141
|
from metatables import Namespace
|
|
143
142
|
|
|
144
|
-
ledger = Namespace.
|
|
145
|
-
ledger.grant_role(
|
|
146
|
-
ledger.grant_role(
|
|
143
|
+
ledger = next(n for n in Namespace.filter(search="ledger") if n.name == "ledger")
|
|
144
|
+
ledger.grant_role(api_workload_user_uid, "data_writer") # step 3
|
|
145
|
+
ledger.grant_role(your_user_uid, "owner")
|
|
147
146
|
```
|
|
148
147
|
|
|
148
|
+
Managing the Job lets you manage the namespace's access only: it gives you no access
|
|
149
|
+
to its tables until you grant yourself a role.
|
|
150
|
+
|
|
149
151
|
**Optionally, a Team.** Grant the roles to a Team you belong to instead of to the
|
|
150
152
|
workload Users, and add the workload Users to that Team: any person can create a Team
|
|
151
153
|
and, as its owner, add workloads they can view. A recreated Job or release then needs
|
|
152
154
|
only Team membership, not a new grant. One Team can hold the roles in every Environment:
|
|
153
155
|
Teams are Organization-wide, and a workload reaches only its own Environment's
|
|
154
156
|
MetaTables. People in the Team receive the same roles, so leave it once the workloads
|
|
155
|
-
are in if you should not hold them yourself
|
|
157
|
+
are in if you should not hold them yourself.
|
|
158
|
+
|
|
159
|
+
**A name that is already taken.** If the namespace already exists, created by another
|
|
160
|
+
application, by a person or before this change, the first migration stops with
|
|
161
|
+
`namespace_access_required`. An owner of that namespace grants the Job `editor`, or the
|
|
162
|
+
application uses another namespace. A person may still create a namespace in advance,
|
|
163
|
+
with **Create namespace** in the Admin or `Namespace.create("ledger")`, and grant the
|
|
164
|
+
Job `editor`; nothing requires it.
|
|
156
165
|
|
|
157
166
|
**Namespaces created before roles.** A namespace from before ADR 0024 has no owner: its
|
|
158
167
|
former Writers hold `editor`. An Organization admin grants someone `owner` on it once;
|
|
@@ -161,8 +170,9 @@ from then on that owner manages it.
|
|
|
161
170
|
One namespace per application is the recommended layout, not a rule; see
|
|
162
171
|
[Namespaces and applications](../security/ownership-and-sharing.md#namespaces-and-applications).
|
|
163
172
|
|
|
164
|
-
The Job also needs platform `
|
|
165
|
-
|
|
173
|
+
The Job also needs the platform's `reader` policy on the MetaTables branch, which
|
|
174
|
+
gives it `viewer` on the branch's `metatables` release, to discover the API. Declare it
|
|
175
|
+
on the Job (workflow API `3.0.0`):
|
|
166
176
|
|
|
167
177
|
```yaml
|
|
168
178
|
- key: migrate-ledger
|
|
@@ -173,7 +183,7 @@ its branch to discover the API; declare it on the Job:
|
|
|
173
183
|
access:
|
|
174
184
|
branches:
|
|
175
185
|
- repository: MetaTables
|
|
176
|
-
|
|
186
|
+
policy: reader
|
|
177
187
|
```
|
|
178
188
|
|
|
179
189
|
`upgrade_application()` waits up to five minutes for the API to wake or finish
|
|
@@ -187,18 +197,17 @@ the database.
|
|
|
187
197
|
|
|
188
198
|
### When registration is refused
|
|
189
199
|
|
|
190
|
-
- **`
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
on a new application's first run.
|
|
200
|
+
- **`namespace_access_required`**: the namespace already exists, but the
|
|
201
|
+
`caller_user_uid` the error names lacks `tables.create` on it. The error lists the
|
|
202
|
+
namespace's owners when the caller can see the namespace. One of them, or a manager
|
|
203
|
+
of the workload that created the namespace, grants it `editor`. A recreated Job gets
|
|
204
|
+
this too: its new workload User has no role yet.
|
|
196
205
|
- **`namespace_required`**: a workload tried to create a table outside any namespace.
|
|
197
206
|
Set the table's namespace.
|
|
198
207
|
- **`table_not_editable`**: the table already exists and the caller lacks
|
|
199
208
|
`tables.update` on it. An owner of the table or its namespace grants `editor`.
|
|
200
209
|
|
|
201
|
-
After the grant, re-run the Job
|
|
210
|
+
After the grant, re-run the Job. Do not run the Job as an Organization admin
|
|
202
211
|
or change physical names to get around a refusal.
|
|
203
212
|
|
|
204
213
|
## What the Job guarantees
|
|
@@ -212,8 +221,8 @@ or change physical names to get around a refusal.
|
|
|
212
221
|
- The Job finds the Environment's MetaTables API the same way any client does
|
|
213
222
|
([installation and connection](installation-and-connection.md)). That API must
|
|
214
223
|
be deployed with its system migrations applied; otherwise the Job fails. Its
|
|
215
|
-
workload User needs `editor`, directly or through a Team, on every
|
|
216
|
-
provider creates tables in
|
|
224
|
+
workload User needs `editor`, directly or through a Team, on every existing
|
|
225
|
+
namespace the provider creates tables in; a namespace it creates gives it `editor`.
|
|
217
226
|
|
|
218
227
|
## Keep each release compatible with the previous one
|
|
219
228
|
|
|
@@ -14,8 +14,11 @@ every action, data included.
|
|
|
14
14
|
## Namespaces
|
|
15
15
|
|
|
16
16
|
A catalog namespace groups tables for access. Any person can create a namespace whose
|
|
17
|
-
name is free and becomes its owner.
|
|
18
|
-
it
|
|
17
|
+
name is free and becomes its owner. Registering a table into a missing namespace also
|
|
18
|
+
creates it: a person owns it; a workload gets `editor`, and the people who manage that
|
|
19
|
+
workload manage the namespace's access. A namespace is visible to whoever holds a role
|
|
20
|
+
on it, can see at least one of its tables, or manages its creating workload; counts
|
|
21
|
+
show visible tables only. A role on a
|
|
19
22
|
namespace gives the table role of the same name on its current and future tables.
|
|
20
23
|
Revoking it, or moving a table out, removes that contribution; independent direct or
|
|
21
24
|
Team bindings remain. Moving a table needs `tables.update` on the table and
|
|
@@ -23,7 +23,7 @@ at least two runtime replicas; see [pods and connections](#size-pods-and-databas
|
|
|
23
23
|
The platform applies these settings on the next successful deployment.
|
|
24
24
|
|
|
25
25
|
The Python package bundles this same workflow for [client discovery](../client/installation-and-connection.md).
|
|
26
|
-
Workflow API `
|
|
26
|
+
Workflow API `3.0.0` derives a FastAPI release name from the directory containing
|
|
27
27
|
`source_path`, so the declared directory is also the client's exact lookup name.
|
|
28
28
|
Do not maintain a separate name constant in consuming projects. After changing
|
|
29
29
|
that source path, publish/install a matching package build. Clients select the
|
{mainsequence_metatable-0.1.47.dev75 → mainsequence_metatable-0.1.48.dev77}/docs/security/index.md
RENAMED
|
@@ -4,8 +4,10 @@ MetaTables separates **application administration** from **access to namespaces
|
|
|
4
4
|
and tables**. Organization admins configure the application and hold every action.
|
|
5
5
|
Everyone else gets access through **roles** granted on a namespace or a table:
|
|
6
6
|
`metadata_viewer`, `data_viewer`, `data_writer`, `editor` and `owner`. Any person can
|
|
7
|
-
create a namespace or a table and owns what they create.
|
|
8
|
-
|
|
7
|
+
create a namespace or a table and owns what they create. A deployed migration Job
|
|
8
|
+
creates its application's namespace on its first run, and the people who manage the
|
|
9
|
+
Job manage that namespace's access. Nobody needs to become an Organization admin to
|
|
10
|
+
deploy an application or maintain its tables.
|
|
9
11
|
|
|
10
12
|
The API enforces this model in both local and hosted runtimes. The Admin UI and
|
|
11
13
|
Python client use the same access endpoints. [ADR 0024](../adr/api/0024-namespace-and-table-access-roles.md)
|
|
@@ -92,7 +94,8 @@ These are browser routes. Resource API URLs remain unchanged and enforce their
|
|
|
92
94
|
own permissions: DataSource mutations and validation, runtime configuration and
|
|
93
95
|
selection, system migrations, local database destruction, external imports and
|
|
94
96
|
global Security operations require admin admission. Granting roles on a namespace or
|
|
95
|
-
table is available to its owners
|
|
97
|
+
table is available to its owners, and on a namespace also to the managers of the
|
|
98
|
+
workload that created it.
|
|
96
99
|
|
|
97
100
|
Every operation is enforced by the API, including requests from the Python client.
|
|
98
101
|
The UI shows the API's effective permissions. Hidden buttons are a presentation
|