mainsequence-metatable 0.1.4.dev5__tar.gz → 0.1.5.dev6__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.4.dev5 → mainsequence_metatable-0.1.5.dev6}/.agents/skills/client/metatables-local-development/SKILL.md +7 -8
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/.agents/skills/client/metatables-meta-tables/SKILL.md +20 -5
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/.agents/skills/client/metatables-migrations/SKILL.md +36 -32
- mainsequence_metatable-0.1.5.dev6/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +91 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/configuration.py +1 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/main.py +0 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/managed_finalize.py +1 -1
- mainsequence_metatable-0.1.5.dev6/api/app/routes/migration_connection.py +93 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/run_logs.py +34 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/runtime_context.py +0 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_crud.py +7 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/catalog.py +0 -24
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/contracts.py +0 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/hosted.py +0 -13
- mainsequence_metatable-0.1.5.dev6/api/backend/backends/migration_connection.py +62 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/run_logs.py +3 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/run_graphs.py +15 -4
- mainsequence_metatable-0.1.5.dev6/api/metatables/configuration.yaml +1 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +9 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0002-application-administration-and-table-ownership.md +11 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0004-approved-application-migrations.md +10 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0007-database-enforced-table-access.md +14 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0008-mysql-mssql-table-workflows.md +7 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0009-shared-credential-store.md +7 -0
- mainsequence_metatable-0.1.5.dev6/docs/adr/api/0013-application-owned-migrations.md +113 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +19 -16
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/index.md +3 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/openapi.json +164 -63
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/overview.md +5 -4
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/reference.md +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/tables-and-migrations.md +20 -11
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/time-index-and-updates.md +11 -4
- mainsequence_metatable-0.1.5.dev6/docs/client/define-and-migrate-tables.md +102 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/installation-and-connection.md +12 -6
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/query-and-mutate.md +4 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/tutorial.md +86 -36
- mainsequence_metatable-0.1.5.dev6/docs/client/upgrade-legacy-app.md +157 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/architecture.md +6 -4
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/runs-and-execution-graphs.md +37 -18
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/contributing/releasing.md +3 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/README.md +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/README.md +5 -7
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/migrations/__init__.py +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/scripts/setup_metatables.py +2 -12
- mainsequence_metatable-0.1.5.dev6/docs/examples/tutorial/README.md +129 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/__main__.py +12 -6
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6/docs}/examples/tutorial/frames.py +32 -1
- mainsequence_metatable-0.1.5.dev6/docs/examples/tutorial/migrations/registry.py +11 -0
- mainsequence_metatable-0.1.5.dev6/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +42 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/operations.py +9 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6/docs}/examples/tutorial/tables.py +37 -1
- mainsequence_metatable-0.1.5.dev6/docs/examples/tutorial/updaters.py +172 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/index.md +3 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/catalog-migrations.md +2 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/configuration.md +6 -12
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/local-runtime.md +4 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/run-history.md +30 -17
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/run-logs.md +4 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/reference/capabilities.md +8 -8
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/reference/cli.md +5 -5
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/security/index.md +15 -13
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/security/permissions.md +8 -6
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/README.md +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/README.md +5 -7
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/migrations/__init__.py +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/scripts/setup_metatables.py +2 -12
- mainsequence_metatable-0.1.5.dev6/examples/tutorial/README.md +127 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/__main__.py +12 -6
- {mainsequence_metatable-0.1.4.dev5/docs → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/frames.py +32 -1
- mainsequence_metatable-0.1.5.dev6/examples/tutorial/migrations/registry.py +11 -0
- mainsequence_metatable-0.1.5.dev6/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +42 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/operations.py +9 -1
- {mainsequence_metatable-0.1.4.dev5/docs → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/tables.py +37 -1
- mainsequence_metatable-0.1.5.dev6/examples/tutorial/updaters.py +172 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/PKG-INFO +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/SOURCES.txt +9 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mkdocs.yml +2 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/pyproject.toml +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/build_reference.py +1 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_boundaries.py +1 -5
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/app.py +2 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/migrations.py +51 -88
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/project.py +1 -11
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/__init__.py +14 -3
- mainsequence_metatable-0.1.5.dev6/src/metatables/migrations/connection.py +75 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/env.py +7 -33
- mainsequence_metatable-0.1.5.dev6/src/metatables/migrations/runner.py +152 -0
- mainsequence_metatable-0.1.5.dev6/src/metatables/migrations/tls.py +41 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/models.py +7 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/runtime.py +6 -6
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/runtime_contract.py +0 -1
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_runtime_selection.py +7 -4
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_runtime_storage_binding.py +2 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/capabilities.json +27 -19
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/provider/__init__.py +1 -1
- mainsequence_metatable-0.1.5.dev6/tests/database_backend/test_application_migration.py +28 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_api_endpoint.py +4 -3
- mainsequence_metatable-0.1.5.dev6/tests/e2e/test_application_owned_migrations.py +240 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_data_source_registry.py +2 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_local_cli_workflow.py +2 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_local_client_selection.py +12 -7
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_remaining_client_routes.py +2 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_run_graphs.py +9 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_run_logs.py +62 -3
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_sqlite_runtime.py +79 -13
- mainsequence_metatable-0.1.5.dev6/tests/examples/test_setup_launch.py +102 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/examples/test_tutorial.py +146 -6
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/packaging/test_client_skills.py +1 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/packaging/test_distribution_sources.py +1 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/packaging/test_installed_distribution.py +5 -3
- mainsequence_metatable-0.1.5.dev6/tests/permissions/test_migration_boundary.py +77 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_security_api.py +5 -2
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/uv.lock +1 -1
- mainsequence_metatable-0.1.4.dev5/api/app/routes/application_migrations.py +0 -170
- mainsequence_metatable-0.1.4.dev5/api/app/routes/migration_connection.py +0 -41
- mainsequence_metatable-0.1.4.dev5/api/metatables/configuration.yaml +0 -3
- mainsequence_metatable-0.1.4.dev5/docs/client/define-and-migrate-tables.md +0 -88
- mainsequence_metatable-0.1.4.dev5/docs/examples/tutorial/README.md +0 -82
- mainsequence_metatable-0.1.4.dev5/docs/examples/tutorial/migrations/registry.py +0 -9
- mainsequence_metatable-0.1.4.dev5/docs/examples/tutorial/updaters.py +0 -95
- mainsequence_metatable-0.1.4.dev5/examples/tutorial/README.md +0 -80
- mainsequence_metatable-0.1.4.dev5/examples/tutorial/migrations/registry.py +0 -9
- mainsequence_metatable-0.1.4.dev5/examples/tutorial/updaters.py +0 -95
- mainsequence_metatable-0.1.4.dev5/src/metatables/migrations/tls.py +0 -23
- mainsequence_metatable-0.1.4.dev5/tests/database_backend/test_application_migration.py +0 -36
- mainsequence_metatable-0.1.4.dev5/tests/examples/test_setup_launch.py +0 -45
- mainsequence_metatable-0.1.4.dev5/tests/permissions/test_migration_boundary.py +0 -19
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/.mainsequence/workflows/metatables-api.yaml +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/LICENSE +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/MANIFEST.in +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/README.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/alembic.ini +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/auth/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/auth/boundary.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/auth/caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/auth/local_actor.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/bootstrap.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/credential_admin.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/development.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/development_client.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/platform_cache.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/column_search.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/contract_validation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/data_sources.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/namespaces.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/security.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_cascade.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_crud.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_delete.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_filter.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_import.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_introspection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_patch.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_registration.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_response.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_search_document.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_sql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/time_index_reads.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_batch.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_chunk_insert.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_constants.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_details.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_graph.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_registration.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_runs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/update_statistics.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/runtime.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/runtime_control.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/source_passwords.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/source_registrations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/transfer.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/access.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/runtime.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/temporal.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/maintenance/validation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_introspection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_time_index.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/source_validation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/sqlite_connection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/sqlite_introspection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/adapters/table_cursor.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/catalog_ddl.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/catalog_types.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/hosted_access.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/native.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/operations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/pages.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/postgresql_access.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/registry.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/relation_tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/relational.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/restricted_sql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/sqlite_access.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/backends/streaming.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/contracts/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/contracts/relation_import.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/contracts/storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/contracts/table_contracts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/contracts/values.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/catalog_rules.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/index_statistics.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/label_rules.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/permission_rules.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/domain/update_constants.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/catalog_data_sources.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/credential_keys.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/credential_store.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/data_source_provider.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/local_credentials.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/local_workspace.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/platform_principals.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/runtime_binding.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/runtime_data_sources.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/integrations/source_validation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0001_initial.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0002_security_model.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0005_database_access.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0006_local_credentials.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/bootstrap_migrations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/catalog_schema.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/create_table.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/finalize_managed.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/import_relations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/introspect_table.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/read_time_index.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/register_catalog.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/operations/search_documents.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/cascade.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/catalog.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/database.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/grants.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/labels.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/locking.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/models.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/physical_operations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/projections.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/schema_graph.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/sqlite_types.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/table_queries.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/table_response.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/update_graph.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/updates.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/persistence/upload_receipts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/backend/presentation/data_source_summary.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/metatables/main.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/compose.database-tests.yml +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0006-historical-run-graphs.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/authentication-and-errors.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/api/data-sources.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/assets/branding/metatables.svg +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/assets/diagrams/local-client-experience.svg +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/bounded-transfers.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/build-an-updater.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/local-storage.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/quickstart.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/read-existing-time-index-tables.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/client/register-existing-tables.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/data-sources.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/identity-and-scope.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/permissions-namespaces-labels.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/concepts/time-index-tables-and-updates.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/contributing/architecture-and-boundaries.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/contributing/database-backends.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/contributing/documentation.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/contributing/testing.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/query.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/hosted-runtime.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/operations/recovery-and-observability.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/reference/python.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/docs/security/ownership-and-sharing.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/bounded_reader.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/data_sources/README.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/data_sources/mssql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/data_sources/mysql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/data_sources/postgresql.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/data_sources/register.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/external_table.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/__main__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/local_app/tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/query.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/quickstart.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/reader.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/data/README.md +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/versions/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/examples/updater.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/entry_points.txt +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/requires.txt +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/mainsequence_metatable.egg-info/top_level.txt +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/build_package.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_distribution_sources.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_docs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_examples_debug.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/check_project.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/test_databases.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/scripts/test_postgresql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/setup.cfg +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/_admin_source.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/_skill_bundle.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/admin_install.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/filters.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/local.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/cli/skills.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/compiled_sql/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/compiled_sql/mssql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/compiled_sql/v1.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/dtype_codec.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/endpoint.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/future_registry.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/hashing.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/instrumentation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/local_connection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/local_files.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/log_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/alembic.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/provider.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/registry.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/scaffold.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/templates/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/templates/env.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/migrations/templates/script.py.mako +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/pydantic_metadata.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/run_logging.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/runtime_context.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/schema_names.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/sdk_compat.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/sqlalchemy_contracts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/time_index_table_refs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/transfer.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/transfer_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/transport.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/update_configuration_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/configuration.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/dependencies.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/managers.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/namespacing.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/runner.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/updaters.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/updaters/utils.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/src/metatables/upload.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_caller_assertions.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_data_source_identity.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_development_client.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_hosted_environment_target.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_local_mode.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_platform_fact_cache.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_runtime_scaffold.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/auth/test_source_passwords.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/catalog/test_catalog_foundation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/catalog/test_contract_projection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/catalog/test_database_config.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/catalog/test_index_statistics.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/catalog/test_migration.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/conftest.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/client_signatures.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/database_operations.json +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/test_bounded_transfer.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/test_relation_batching.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/test_storage_layouts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/contracts/test_table_contracts.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/Dockerfile +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/Dockerfile.dockerignore +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/__init__.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/conftest.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/provider/env.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_api_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_bootstrap_recovery.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_catalog_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_credential_catalog.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_physical_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_relation_import.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_runtime_bootstrap.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_sql_security.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_backend/test_update_client.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_operations/test_physical_operations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_operations/test_postgresql_operations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/database_operations/test_runtime_and_temporal.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/documentation/test_project_checks.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_admin_installation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_catalog_outage.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_api_contract.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_api_coverage.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_migration_scaffold.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_migration_tls.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_package.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_signatures.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_client_value_behaviors.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_local_actor_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_managed_finalize_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_namespaces_admin_http.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_public_imports.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_runtime_transition.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_sdk_local_startup.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_filter_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_introspection_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_patch_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_search_document_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_stats_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_update_pipeline.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_table_updates_http.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_time_index_delete_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_time_index_reads_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_update_batch_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/e2e/test_update_registration_client_api.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/examples/test_documented_examples.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/examples/test_postgresql_examples.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_credential_store.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_data_source_rules.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_local_data_sources.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_local_run_logs.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_postgresql_connection.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_postgresql_sql.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_postgresql_tables.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_source_validation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/integrations/test_sqlite_operations.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/labels/test_labels.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/operations/test_create_table_operation.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/operations/test_create_table_postgres.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/operations/test_physical_operation_journal.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/operations/test_register_catalog.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/operations/test_search_documents.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/packaging/test_dev_release_version.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/packaging/test_editable_build.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_governed_sql_scope.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_local_actor_membership.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_namespace_grants.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_table_body_filter.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_table_grants.py +0 -0
- {mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/tests/permissions/test_table_queries.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: metatables-local-development
|
|
3
|
-
description: "Develop and test applications using the installed MetaTables client against local SQLite before returning to the intended environment database. Covers project/API/Admin setup, runtime verification, isolated fixtures,
|
|
3
|
+
description: "Develop and test applications using the installed MetaTables client against local SQLite before returning to the intended environment database. Covers project/API/Admin setup, runtime verification, isolated fixtures, application-owned migrations and switching back after verification. Excludes MetaTables client/API implementation and hosted frontend deployment."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Local-first MetaTables application development
|
|
@@ -62,17 +62,16 @@ Do not retry against automatic hosted discovery when a local connection fails.
|
|
|
62
62
|
`metatables --local runtime initialize`, then inspect status again.
|
|
63
63
|
Starting the API does not initialize or migrate a database.
|
|
64
64
|
4. Author and review application migrations using the
|
|
65
|
-
[migrations skill](../metatables-migrations/SKILL.md).
|
|
66
|
-
provider
|
|
65
|
+
[migrations skill](../metatables-migrations/SKILL.md). Run the application-local
|
|
66
|
+
provider against the verified local runtime:
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
metatables
|
|
70
|
-
metatables --local migrations upgrade --provider ledger
|
|
69
|
+
metatables --local migrations upgrade --provider ledger.migrations:migration
|
|
71
70
|
```
|
|
72
71
|
|
|
73
|
-
Substitute the application's own
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
Substitute the application's own module. Provider code and revisions are
|
|
73
|
+
installed in the application process; the API requires no provider approval
|
|
74
|
+
or installation. System initialization and application histories remain separate.
|
|
76
75
|
5. Build application contracts/queries with the
|
|
77
76
|
[table skill](../metatables-meta-tables/SKILL.md), or producers/readers with the
|
|
78
77
|
[updater skill](../metatables-time-index-table-updates/SKILL.md). Use small,
|
|
@@ -85,11 +85,26 @@ revisions; do not recompute identity from columns or rewrite applied history.
|
|
|
85
85
|
## Queries and mutations
|
|
86
86
|
|
|
87
87
|
Read `docs/client/query-and-mutate.md` and `examples/query.py`. Use
|
|
88
|
-
`compile_sqlalchemy_statement` with bound parameters
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
`compile_sqlalchemy_statement` with bound parameters. The request sends SQL and
|
|
89
|
+
selects one DataSource; the API executes as the authenticated user, and the
|
|
90
|
+
selected database backend enforces Reader/Writer permissions on the tables
|
|
91
|
+
actually touched. The API does not parse SQL for authorization. The compiler can
|
|
92
|
+
resolve DataSource and dialect from the selected runtime; supply both explicitly
|
|
93
|
+
for offline compilation. Preserve execution mode, row limits and timeouts.
|
|
94
|
+
|
|
95
|
+
There is no declared table list: `MetaTableOperationScopeTable`,
|
|
96
|
+
`MetaTableOperationScope` and `scope_tables` were intentionally removed. Do not
|
|
97
|
+
recreate them, add per-query registration checks, or parse SQL to enforce a client
|
|
98
|
+
scope. Use existing physical bindings in SQLAlchemy models. Registration and
|
|
99
|
+
schema evolution belong to their lifecycle workflows. For older applications,
|
|
100
|
+
use the [legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md) and
|
|
101
|
+
`docs/client/upgrade-legacy-app.md`.
|
|
102
|
+
|
|
103
|
+
`operation="select"` selects read execution; the other labels select write
|
|
104
|
+
execution. The label does not classify the SQL. Database permissions enforce
|
|
105
|
+
access; row/time limits and transaction handling remain in the API. Refer to the
|
|
106
|
+
query guide for engine-specific statement/batch behavior. Application DDL belongs
|
|
107
|
+
to the separate migration-provider workflow.
|
|
93
108
|
|
|
94
109
|
Column search is supported. Description search, search-index refresh, and
|
|
95
110
|
legacy convenience sharing/label actions are not supported API workflows.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: metatables-migrations
|
|
3
|
-
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope, scaffolding,
|
|
3
|
+
description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope, scaffolding, revision authoring, client-side execution, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# MetaTables client application migrations
|
|
@@ -12,6 +12,10 @@ client. It covers application-facing models and workflows. Client-library
|
|
|
12
12
|
implementation, this repository's development/release tooling, and API internals
|
|
13
13
|
have separate ownership.
|
|
14
14
|
|
|
15
|
+
For upgrading older client imports, SQL scopes or provider integration, use the
|
|
16
|
+
[legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md). This skill
|
|
17
|
+
covers authoring and running application schema revisions.
|
|
18
|
+
|
|
15
19
|
In a copied skill, resolve the `docs/` and `examples/` paths below relative to
|
|
16
20
|
this skill's `references/` directory. The client CLI bundles the matching version's
|
|
17
21
|
guides and examples there, including their linked documents. In the MetaTables
|
|
@@ -25,8 +29,8 @@ verification within the requested scope.
|
|
|
25
29
|
Read `docs/client/define-and-migrate-tables.md`,
|
|
26
30
|
`docs/concepts/table-contracts-and-lifecycle.md`, and the tested
|
|
27
31
|
`examples/tables.py`. Managed authoring is migration-first: define SQLAlchemy
|
|
28
|
-
models, select a provider, author a revision
|
|
29
|
-
finalize
|
|
32
|
+
models, select a provider, author and apply a revision with the client, then
|
|
33
|
+
finalize catalog bindings through the API. Use the
|
|
30
34
|
[table skill](../metatables-meta-tables/SKILL.md) for contract design.
|
|
31
35
|
|
|
32
36
|
Check `docs/reference/capabilities.md` and `metatables migrations --help` before
|
|
@@ -36,14 +40,15 @@ are not application-provider revisions.
|
|
|
36
40
|
|
|
37
41
|
## Source and runtime context
|
|
38
42
|
|
|
39
|
-
- The API selects its active runtime DataSource.
|
|
40
|
-
|
|
43
|
+
- The API selects its active runtime DataSource. Upgrade and downgrade use that
|
|
44
|
+
environment connection. An explicit `--sqlalchemy-url` is available for revision
|
|
45
|
+
authoring; use it only when that authoring target is intended.
|
|
41
46
|
- Git source facts come from the current checkout through the SDK. Do not ask the
|
|
42
47
|
user to choose a branch or environment for a migration.
|
|
43
48
|
- An explicit `METATABLES_API_URL` selects an API endpoint, not a branch or a
|
|
44
49
|
storage binding. See `docs/client/installation-and-connection.md`.
|
|
45
|
-
- Provider
|
|
46
|
-
|
|
50
|
+
- Provider references resolve in the application process, for example
|
|
51
|
+
`ledger.migrations:migration`. The API needs no provider code or allowlist.
|
|
47
52
|
|
|
48
53
|
## Author the migration
|
|
49
54
|
|
|
@@ -66,12 +71,11 @@ are not application-provider revisions.
|
|
|
66
71
|
5. Edit the generated `registry.py` so it returns exactly the models owned by
|
|
67
72
|
that migration stream. Scaffolding alone selects no models and creates no
|
|
68
73
|
tables.
|
|
69
|
-
6. Create and review an
|
|
74
|
+
6. Create and review an Alembic revision (defaults to autogeneration):
|
|
70
75
|
|
|
71
76
|
```bash
|
|
72
77
|
metatables migrations revision \
|
|
73
78
|
--provider ledger.migrations:migration \
|
|
74
|
-
--no-autogenerate \
|
|
75
79
|
--message "create ledger"
|
|
76
80
|
```
|
|
77
81
|
|
|
@@ -79,33 +83,32 @@ Use `--source-root` and `--code-repository-root` when the application does not
|
|
|
79
83
|
use the default `src/` layout. Keep applied revisions immutable; add a new
|
|
80
84
|
revision for every later schema change.
|
|
81
85
|
|
|
82
|
-
## Execute
|
|
86
|
+
## Execute with the environment connection
|
|
83
87
|
|
|
84
|
-
|
|
85
|
-
connections and database autogeneration are unsupported. `--sqlalchemy-url` does
|
|
86
|
-
not bypass that boundary. The supported upgrade command executes inside the API.
|
|
87
|
-
After verifying Local mode and the selected DataSource, use:
|
|
88
|
+
After verifying the intended runtime, use the application's provider reference:
|
|
88
89
|
|
|
89
90
|
```bash
|
|
90
|
-
metatables --local migrations upgrade --provider ledger
|
|
91
|
+
metatables --local migrations upgrade --provider ledger.migrations:migration
|
|
92
|
+
metatables --local migrations current --provider ledger.migrations:migration
|
|
93
|
+
metatables --local migrations downgrade 0001 --provider ledger.migrations:migration
|
|
91
94
|
```
|
|
92
95
|
|
|
93
|
-
`
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
The global `--local` selects the running project's API connection; inspect runtime
|
|
97
|
+
status because Admin can switch that API to Hosted. Upgrade/downgrade accept
|
|
98
|
+
Alembic targets. Use `--no-autogenerate` for offline revision authoring.
|
|
96
99
|
|
|
97
|
-
The
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
downgrade. See `docs/api/tables-and-migrations.md`.
|
|
100
|
+
The client imports and executes application revisions, using the connection
|
|
101
|
+
resolved for the selected environment. Environment operators supply the database
|
|
102
|
+
login's DDL privileges. MetaTables does not mint migration roles or sandbox DDL.
|
|
103
|
+
API Writer checks govern connection admission and provider catalog operations.
|
|
104
|
+
The client reserves catalog entries, runs Alembic, closes its physical connection,
|
|
105
|
+
and finalizes contracts through the API. Treat connection material as private.
|
|
104
106
|
|
|
105
|
-
Use the application's
|
|
106
|
-
`
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
Use the application's setup entry point when available. Python code can call
|
|
108
|
+
`metatables.upgrade_application("ledger.migrations:migration")`;
|
|
109
|
+
`examples/scripts/setup_metatables.py` shows the pattern. Remove the retired
|
|
110
|
+
`application_migration_providers` setting and use Python references instead of aliases.
|
|
111
|
+
Application migration histories remain separate from API system migrations.
|
|
109
112
|
|
|
110
113
|
## Lifecycle invariants
|
|
111
114
|
|
|
@@ -134,13 +137,14 @@ Read `docs/operations/recovery-and-observability.md`.
|
|
|
134
137
|
- If Alembic succeeds but finalization fails, physical DDL may already be
|
|
135
138
|
committed. Inspect every per-table result and the actual schema before
|
|
136
139
|
retrying.
|
|
137
|
-
-
|
|
138
|
-
|
|
140
|
+
- Inspect partial DDL before retrying, especially on engines without transactional
|
|
141
|
+
DDL. A finalization-only failure can be retried without reapplying committed
|
|
142
|
+
revisions. Client DDL has no API executor journal.
|
|
139
143
|
- Destructive catalog deletion is not migration recovery and never bypasses
|
|
140
144
|
schema-management protection.
|
|
141
145
|
|
|
142
146
|
## Validation
|
|
143
147
|
|
|
144
|
-
Verify provider scope, revision content, the
|
|
148
|
+
Verify provider scope, revision content, the selected environment connection,
|
|
145
149
|
repeat execution, and final active bindings. Report separately what was checked
|
|
146
150
|
offline and what was exercised against a configured API.
|
mainsequence_metatable-0.1.5.dev6/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: metatables-upgrade-legacy-app
|
|
3
|
+
description: "Upgrade consuming applications from MainSequence 8.x MetaTables or older extracted clients to the installed metatables package. Use for legacy imports, removed SQL scopes, repository compilers and application migration-provider integration. Excludes MetaTables client/API implementation and ordinary schema revision authoring."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Upgrade a legacy MetaTables application
|
|
7
|
+
|
|
8
|
+
## Scope and references
|
|
9
|
+
|
|
10
|
+
Update the consuming application to the installed client's current contract.
|
|
11
|
+
Removed scope APIs are intentional; do not restore them in the client or create
|
|
12
|
+
application compatibility shims. Keep identity/login and Git source integration
|
|
13
|
+
in the MainSequence SDK.
|
|
14
|
+
|
|
15
|
+
Read `docs/client/upgrade-legacy-app.md` for the conversion table and before/after
|
|
16
|
+
repository compiler examples. In a copied skill, resolve the `docs/` and
|
|
17
|
+
`examples/` paths here relative to this skill's `references/` directory. In the
|
|
18
|
+
MetaTables source checkout, resolve them from the repository root.
|
|
19
|
+
|
|
20
|
+
Use `docs/client/installation-and-connection.md` to establish the target package
|
|
21
|
+
and compatible SDK versions. Refresh copied skills after a client upgrade with
|
|
22
|
+
`metatables copy-metatables-skills`. Inspect the installed public exports and CLI
|
|
23
|
+
help before mapping an unfamiliar old interface; avoid broad import rewrites.
|
|
24
|
+
|
|
25
|
+
## Find and replace legacy usage
|
|
26
|
+
|
|
27
|
+
Inspect dependency pins, table imports, shared repository compilers and their
|
|
28
|
+
callers, runtime setup, and existing Alembic provider integration. Useful search
|
|
29
|
+
terms are `mainsequence.client.metatables`, `mainsequence.meta_tables`,
|
|
30
|
+
`MetaTableOperationScopeTable`, `MetaTableOperationScope`, `scope_tables`, and
|
|
31
|
+
`application_migration_providers`.
|
|
32
|
+
|
|
33
|
+
For SQL operations:
|
|
34
|
+
|
|
35
|
+
- Import public table resources from `metatables` and the compiler from
|
|
36
|
+
`metatables.compiled_sql.v1`.
|
|
37
|
+
- Send SQL and a DataSource. The API executes as the authenticated user, and the
|
|
38
|
+
selected engine enforces that user's table permissions on actual SQL access.
|
|
39
|
+
Removing the declared table list does not remove table permissions.
|
|
40
|
+
- Delete scope classes, `scope_tables`, and scope-only wrappers or parameters,
|
|
41
|
+
including `models`, `access`, aliases or `reserved_policy` when they serve only
|
|
42
|
+
scope construction. Update callers and old nested wire payloads together.
|
|
43
|
+
- Do not substitute per-query catalog lookups, registration/binding preflights,
|
|
44
|
+
local permission checks or SQL parsing for the removed scope machinery.
|
|
45
|
+
Registration/finalization remain table lifecycle operations. Preserve separate
|
|
46
|
+
application business rules.
|
|
47
|
+
- Let the compiler obtain DataSource and dialect from the selected API runtime,
|
|
48
|
+
or supply both explicitly for offline compilation. Never use a MetaTable UID as
|
|
49
|
+
a DataSource UID or infer a new database from the retired table list.
|
|
50
|
+
- Preserve the query's physical bindings, bound parameters, result behavior,
|
|
51
|
+
execution mode, offsets, row limits, statement deadlines and HTTP timeouts.
|
|
52
|
+
`select` selects read execution; the other operation labels select write
|
|
53
|
+
execution. These labels do not classify the SQL statement.
|
|
54
|
+
|
|
55
|
+
Read `docs/client/query-and-mutate.md` for current query behavior and
|
|
56
|
+
`docs/adr/api/0007-database-enforced-table-access.md` for the decision. The retained
|
|
57
|
+
`compiled-sql.v1` label does not make the old scoped payload compatible.
|
|
58
|
+
|
|
59
|
+
## Upgrade application migration integration
|
|
60
|
+
|
|
61
|
+
Keep the existing provider package, namespace, model registry, version-table
|
|
62
|
+
binding and applied revision history. Update bootstrap/import wiring to the
|
|
63
|
+
installed client's public migration interfaces. Do not scaffold a replacement
|
|
64
|
+
provider, rewrite applied history or stamp the database to bypass an upgrade issue.
|
|
65
|
+
|
|
66
|
+
Providers load in the application process from Python references such as
|
|
67
|
+
`ledger.migrations:migration`. The client executes Alembic with the environment
|
|
68
|
+
connection; the API handles authorization, reservations and finalization. The
|
|
69
|
+
environment operator supplies database DDL privileges. Remove retired API provider
|
|
70
|
+
allowlists and aliases; the API needs no application provider code installed.
|
|
71
|
+
MetaTables' internal catalog migrations remain a separate history.
|
|
72
|
+
|
|
73
|
+
Use the [application migrations skill](../metatables-migrations/SKILL.md),
|
|
74
|
+
`docs/client/define-and-migrate-tables.md`, and
|
|
75
|
+
`docs/adr/api/0013-application-owned-migrations.md` for that workflow. Ordinary
|
|
76
|
+
SQL continues through the governed API, independently of the migration connection.
|
|
77
|
+
|
|
78
|
+
## Verify the upgrade
|
|
79
|
+
|
|
80
|
+
Run imports and offline compilation first. The guide includes an example that
|
|
81
|
+
needs no registration, credentials or running API. Check actual query parameters,
|
|
82
|
+
mode and limits; use existing tests for application business behavior. Review
|
|
83
|
+
provider loading and unchanged Alembic history. Remove obsolete tests that assert
|
|
84
|
+
scope construction rather than recreating that behavior to make them pass.
|
|
85
|
+
|
|
86
|
+
For application execution checks, follow the
|
|
87
|
+
[local development skill](../metatables-local-development/SKILL.md), verify the
|
|
88
|
+
actual local runtime, and exercise the smallest relevant workflow. Respect the
|
|
89
|
+
requested scope for database mutations; a client upgrade alone does not authorize
|
|
90
|
+
hosted migrations. Distinguish offline verification from API execution and from
|
|
91
|
+
hosted-engine verification in the result.
|
{mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/configuration.py
RENAMED
|
@@ -4,7 +4,7 @@ from pathlib import Path
|
|
|
4
4
|
from typing import Literal
|
|
5
5
|
|
|
6
6
|
import yaml
|
|
7
|
-
from pydantic import BaseModel, ConfigDict, Field, StrictBool
|
|
7
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class LocalCredentialConfiguration(BaseModel):
|
|
@@ -16,7 +16,6 @@ class LocalCredentialConfiguration(BaseModel):
|
|
|
16
16
|
class DeploymentConfiguration(BaseModel):
|
|
17
17
|
model_config = ConfigDict(extra="forbid", frozen=True)
|
|
18
18
|
local_mode_available: StrictBool = False
|
|
19
|
-
application_migration_providers: dict[StrictStr, StrictStr] = Field(default_factory=dict)
|
|
20
19
|
local_credentials: LocalCredentialConfiguration = Field(default_factory=LocalCredentialConfiguration)
|
|
21
20
|
|
|
22
21
|
@classmethod
|
|
@@ -10,7 +10,6 @@ from sqlalchemy.orm import Session
|
|
|
10
10
|
|
|
11
11
|
from api.app.auth.boundary import trusted_actor_facts
|
|
12
12
|
from api.app.auth.local_actor import catalog_session
|
|
13
|
-
from api.app.routes.application_migrations import router as application_migrations_router
|
|
14
13
|
from api.app.routes.column_search import router as column_search_router
|
|
15
14
|
from api.app.routes.contract_validation import router as contract_validation_router
|
|
16
15
|
from api.app.routes.data_sources import router as data_sources_router
|
|
@@ -189,7 +188,6 @@ def create_app(config: RuntimeConfig | None = None) -> FastAPI:
|
|
|
189
188
|
service.include_router(managed_finalize_router)
|
|
190
189
|
service.include_router(table_sql_router)
|
|
191
190
|
service.include_router(migration_connection_router)
|
|
192
|
-
service.include_router(application_migrations_router)
|
|
193
191
|
service.include_router(table_import_router)
|
|
194
192
|
service.include_router(source_relations_router)
|
|
195
193
|
service.include_router(table_registration_router)
|
|
@@ -203,7 +203,7 @@ def finalize_managed(
|
|
|
203
203
|
table.introspection_snapshot = snapshot
|
|
204
204
|
table.provisioning_status = "active"
|
|
205
205
|
table.protect_from_deletion = True
|
|
206
|
-
if payload.
|
|
206
|
+
if "alembic_revision" in payload.model_fields_set:
|
|
207
207
|
table.alembic_revision = payload.alembic_revision
|
|
208
208
|
if version_root is not None and uid != version_root:
|
|
209
209
|
table.alembic_version_meta_table_uid = version_root
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Resolve the selected environment connection for application-owned migrations."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
from uuid import UUID
|
|
7
|
+
|
|
8
|
+
from fastapi import APIRouter, Depends, HTTPException, Request, Response
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
from sqlalchemy import select
|
|
11
|
+
from sqlalchemy.orm import Session
|
|
12
|
+
|
|
13
|
+
from api.app.auth.boundary import trusted_actor_facts
|
|
14
|
+
from api.app.auth.local_actor import catalog_session
|
|
15
|
+
from api.app.routes.table_introspection import data_source_provider
|
|
16
|
+
from api.app.routes.table_sql import authorized_table
|
|
17
|
+
from api.backend.backends.migration_connection import migration_connection_description
|
|
18
|
+
from api.backend.domain.data_source_rules import (
|
|
19
|
+
DataSourceAdmissionError,
|
|
20
|
+
require_data_source_access,
|
|
21
|
+
)
|
|
22
|
+
from api.backend.domain.permission_rules import TrustedActorFacts
|
|
23
|
+
from api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
|
|
24
|
+
from api.backend.persistence.grants import GrantRepository
|
|
25
|
+
from api.backend.persistence.locking import lock_catalog
|
|
26
|
+
from api.backend.persistence.models import MetaTable
|
|
27
|
+
|
|
28
|
+
router = APIRouter(prefix="/meta-tables", tags=["MetaTables"])
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class MigrationRequest(BaseModel):
|
|
32
|
+
model_config = ConfigDict(extra="forbid")
|
|
33
|
+
purpose: Literal["schema_migration"] = "schema_migration"
|
|
34
|
+
package: str = ""
|
|
35
|
+
migration_namespace: str = ""
|
|
36
|
+
migration_provider_key: str = ""
|
|
37
|
+
ttl_seconds: int = Field(default=900, ge=60, le=3600)
|
|
38
|
+
code_repository_context: dict[str, Any] | None = None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@router.post("/{table_uid}/migration-connection/")
|
|
42
|
+
def migration_connection(
|
|
43
|
+
table_uid: UUID,
|
|
44
|
+
payload: MigrationRequest,
|
|
45
|
+
request: Request,
|
|
46
|
+
response: Response,
|
|
47
|
+
actor: TrustedActorFacts = Depends(trusted_actor_facts),
|
|
48
|
+
session: Session = Depends(catalog_session),
|
|
49
|
+
sources=Depends(data_source_provider),
|
|
50
|
+
):
|
|
51
|
+
lock_catalog(session)
|
|
52
|
+
table = authorized_table(session, actor, table_uid, edit=True, reserved_policy="reconcile")
|
|
53
|
+
if (
|
|
54
|
+
table.management_mode != "platform_managed"
|
|
55
|
+
or table.schema_management_mode != "alembic_managed"
|
|
56
|
+
):
|
|
57
|
+
raise HTTPException(409, "MetaTable is not Alembic managed.")
|
|
58
|
+
for field, value in [
|
|
59
|
+
("migration_package", payload.package),
|
|
60
|
+
("migration_namespace", payload.migration_namespace),
|
|
61
|
+
("migration_provider_key", payload.migration_provider_key),
|
|
62
|
+
]:
|
|
63
|
+
if value and value != getattr(table, field):
|
|
64
|
+
raise HTTPException(409, "Migration provider identity does not match.")
|
|
65
|
+
root_uid = table.alembic_version_meta_table_uid or table.uid
|
|
66
|
+
tables = list(
|
|
67
|
+
session.scalars(
|
|
68
|
+
select(MetaTable).where(
|
|
69
|
+
(MetaTable.uid == root_uid) | (MetaTable.alembic_version_meta_table_uid == root_uid)
|
|
70
|
+
)
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
if any(
|
|
74
|
+
not GrantRepository(session).may_access_table(table_uid=item.uid, actor=actor, edit=True)
|
|
75
|
+
for item in tables
|
|
76
|
+
):
|
|
77
|
+
raise HTTPException(403, "Writer access is required for every provider catalog table.")
|
|
78
|
+
try:
|
|
79
|
+
source = sources.get(table.data_source_uid)
|
|
80
|
+
require_data_source_access(source, access="write")
|
|
81
|
+
result = migration_connection_description(source)
|
|
82
|
+
except DataSourceAdmissionError as exc:
|
|
83
|
+
raise HTTPException(exc.status_code, exc.code) from exc
|
|
84
|
+
except DataSourceIntegrationError as exc:
|
|
85
|
+
raise HTTPException(503, "DataSource is unavailable.") from exc
|
|
86
|
+
# Include removed provider models so finalization reconciles dropped tables.
|
|
87
|
+
result["meta_table_uids"] = [str(item.uid) for item in tables if item.uid != root_uid]
|
|
88
|
+
control = getattr(request.app.state, "runtime_control", None)
|
|
89
|
+
if control is not None:
|
|
90
|
+
result.update(control.hold_migration(actor.user_uid))
|
|
91
|
+
response.headers["Cache-Control"] = "no-store"
|
|
92
|
+
response.headers["Pragma"] = "no-cache"
|
|
93
|
+
return result
|
{mainsequence_metatable-0.1.4.dev5 → mainsequence_metatable-0.1.5.dev6}/api/app/routes/run_logs.py
RENAMED
|
@@ -14,7 +14,9 @@ from api.app.auth.local_actor import catalog_session
|
|
|
14
14
|
from api.app.routes.update_crud import admitted_update
|
|
15
15
|
from api.backend.domain.permission_rules import TrustedActorFacts
|
|
16
16
|
from api.backend.integrations.run_logs import _query, read_logs
|
|
17
|
-
from api.backend.persistence.
|
|
17
|
+
from api.backend.persistence.grants import GrantRepository
|
|
18
|
+
from api.backend.persistence.models import MetaTable, UpdateNode, UpdateRun
|
|
19
|
+
from api.backend.persistence.run_graphs import MAX_NODES
|
|
18
20
|
from metatables.log_contract import LogPage
|
|
19
21
|
|
|
20
22
|
router = APIRouter(tags=["TimeIndexTableUpdates"])
|
|
@@ -49,6 +51,37 @@ def run_logs(
|
|
|
49
51
|
return read_logs(state, state.log_snapshots, [run], request.query_params, scope=str(run_uid))
|
|
50
52
|
|
|
51
53
|
|
|
54
|
+
@router.get("/table-update-runs/{run_uid}/invocation-logs/", response_model=LogPage)
|
|
55
|
+
def invocation_logs(
|
|
56
|
+
run_uid: UUID,
|
|
57
|
+
request: Request,
|
|
58
|
+
query: Annotated[LogQuery, Query()],
|
|
59
|
+
actor: TrustedActorFacts = Depends(trusted_actor_facts),
|
|
60
|
+
session: Session = Depends(catalog_session),
|
|
61
|
+
):
|
|
62
|
+
"""One time-ordered page across the readable attempts of the selected run's invocation.
|
|
63
|
+
|
|
64
|
+
`run_uid` narrows the page to one attempt of that invocation. A run without a
|
|
65
|
+
saved graph is its own invocation.
|
|
66
|
+
"""
|
|
67
|
+
run = session.get(UpdateRun, run_uid)
|
|
68
|
+
if run is None:
|
|
69
|
+
raise HTTPException(404, "Run not found.")
|
|
70
|
+
admitted_update(session, actor, run.update_uid)
|
|
71
|
+
member = UpdateRun.root_run_uid == run.root_run_uid if run.root_run_uid else UpdateRun.uid == run.uid
|
|
72
|
+
statement = select(UpdateRun).join(UpdateNode, UpdateNode.uid == UpdateRun.update_uid).join(
|
|
73
|
+
MetaTable, MetaTable.uid == UpdateNode.output_table_uid
|
|
74
|
+
).where(member, GrantRepository.table_access_predicate(actor))
|
|
75
|
+
if query.run_uid is not None:
|
|
76
|
+
statement = statement.where(UpdateRun.uid == query.run_uid)
|
|
77
|
+
runs = list(session.scalars(statement.order_by(UpdateRun.started_at, UpdateRun.uid)))
|
|
78
|
+
if not runs:
|
|
79
|
+
raise HTTPException(422, "Run filter is not a readable attempt of this invocation.")
|
|
80
|
+
state = request.app.state.runtime
|
|
81
|
+
return read_logs(state, state.log_snapshots, runs, request.query_params,
|
|
82
|
+
scope=f"invocation:{run.root_run_uid or run.uid}", max_runs=MAX_NODES)
|
|
83
|
+
|
|
84
|
+
|
|
52
85
|
@router.get("/time-index-table-updates/{update_uid}/logs/", response_model=LogPage)
|
|
53
86
|
def update_logs(
|
|
54
87
|
update_uid: UUID,
|
|
@@ -74,7 +74,6 @@ def runtime_context(
|
|
|
74
74
|
|
|
75
75
|
result = {
|
|
76
76
|
"credential_store": state.credential_store.descriptor(),
|
|
77
|
-
"application_migrations_available": bool(getattr(deployment, "application_migration_providers", {})),
|
|
78
77
|
"is_admin": caller.is_admin,
|
|
79
78
|
"user_uid": str(caller.user_uid),
|
|
80
79
|
"local_mode": state.config.local_mode,
|
|
@@ -16,6 +16,7 @@ from api.app.auth.local_actor import catalog_session
|
|
|
16
16
|
from api.app.routes.table_response import project_table_response
|
|
17
17
|
from api.app.routes.update_runs import _run_payload
|
|
18
18
|
from api.backend.domain.permission_rules import TrustedActorFacts
|
|
19
|
+
from api.backend.persistence import run_graphs
|
|
19
20
|
from api.backend.persistence.grants import GrantRepository
|
|
20
21
|
from api.backend.persistence.labels import LabelRepository
|
|
21
22
|
from api.backend.persistence.models import (
|
|
@@ -207,7 +208,7 @@ def list_runs(request: Request, actor: TrustedActorFacts = Depends(trusted_actor
|
|
|
207
208
|
item = _run_payload(row)
|
|
208
209
|
graph = session.get(UpdateRunGraph, row.root_run_uid) if row.root_run_uid else None
|
|
209
210
|
saved = next((node for node in graph.snapshot['nodes'] if node['id'] == f'update:{row.update_uid}'), None) if graph else None
|
|
210
|
-
item['updater_label'] = saved['label'] if saved else session.get(UpdateNode, row.update_uid)
|
|
211
|
+
item['updater_label'] = saved['label'] if saved else run_graphs.updater_label(session.get(UpdateNode, row.update_uid))
|
|
211
212
|
item['graph_availability'] = 'available' if graph else 'unavailable'
|
|
212
213
|
if graph is None:
|
|
213
214
|
item['root_run_uid'] = None
|
|
@@ -220,9 +221,12 @@ def get_run(run_uid: UUID, actor: TrustedActorFacts = Depends(trusted_actor_fact
|
|
|
220
221
|
run = session.get(UpdateRun, run_uid)
|
|
221
222
|
if run is None:
|
|
222
223
|
raise HTTPException(404, 'Run not found.')
|
|
223
|
-
admitted_update(session, actor, run.update_uid)
|
|
224
|
+
update = admitted_update(session, actor, run.update_uid)
|
|
224
225
|
result = _run_payload(run)
|
|
225
|
-
|
|
226
|
+
graph = session.get(UpdateRunGraph, run.root_run_uid) if run.root_run_uid else None
|
|
227
|
+
saved = next((node for node in graph.snapshot['nodes'] if node['id'] == f'update:{run.update_uid}'), None) if graph else None
|
|
228
|
+
result['updater_label'] = saved['label'] if saved else run_graphs.updater_label(update)
|
|
229
|
+
if graph is None:
|
|
226
230
|
result.update(root_run_uid=None, graph_availability='unavailable')
|
|
227
231
|
return result
|
|
228
232
|
|
|
@@ -167,24 +167,11 @@ class PostgreSQLCatalog:
|
|
|
167
167
|
"SELECT pg_advisory_unlock(hashtext('metatables:bootstrap'))"
|
|
168
168
|
)
|
|
169
169
|
|
|
170
|
-
@contextmanager
|
|
171
|
-
def migration_guard(self, connection):
|
|
172
|
-
from sqlalchemy.orm import Session
|
|
173
|
-
|
|
174
|
-
with Session(bind=connection.engine) as session:
|
|
175
|
-
yield session
|
|
176
|
-
|
|
177
170
|
@contextmanager
|
|
178
171
|
def migration_connection(self, engine):
|
|
179
172
|
with engine.connect() as connection, connection.begin():
|
|
180
173
|
yield connection
|
|
181
174
|
|
|
182
|
-
@contextmanager
|
|
183
|
-
def application_migration_connection(self, engine):
|
|
184
|
-
with self.migration_connection(engine) as connection:
|
|
185
|
-
connection.exec_driver_sql("SET LOCAL search_path TO public")
|
|
186
|
-
yield connection
|
|
187
|
-
|
|
188
175
|
|
|
189
176
|
class SQLiteCatalog(PostgreSQLCatalog):
|
|
190
177
|
default_schema = None
|
|
@@ -192,17 +179,6 @@ class SQLiteCatalog(PostgreSQLCatalog):
|
|
|
192
179
|
def initialize_namespace(self, connection):
|
|
193
180
|
pass
|
|
194
181
|
|
|
195
|
-
@contextmanager
|
|
196
|
-
def migration_guard(self, connection):
|
|
197
|
-
from sqlalchemy.orm import Session
|
|
198
|
-
with Session(bind=connection) as session:
|
|
199
|
-
yield session
|
|
200
|
-
|
|
201
|
-
@contextmanager
|
|
202
|
-
def application_migration_connection(self, engine):
|
|
203
|
-
with self.migration_connection(engine) as connection:
|
|
204
|
-
yield connection
|
|
205
|
-
|
|
206
182
|
def create_engine(self, url, *, native_values=False):
|
|
207
183
|
options = {"timeout": 30, "check_same_thread": False}
|
|
208
184
|
if native_values:
|
|
@@ -173,8 +173,6 @@ class CatalogBackend(Protocol):
|
|
|
173
173
|
def schema(self, name: str | None) -> str | None: ...
|
|
174
174
|
def bootstrap_lock(self, engine: Engine) -> AbstractContextManager[None]: ...
|
|
175
175
|
def migration_connection(self, engine: Engine) -> AbstractContextManager[Connection]: ...
|
|
176
|
-
def application_migration_connection(self, engine: Engine) -> AbstractContextManager[Connection]: ...
|
|
177
|
-
def migration_guard(self, connection: Connection) -> AbstractContextManager[Session]: ...
|
|
178
176
|
def schema_object_state(self, connection: Connection, name: str) -> Any: ...
|
|
179
177
|
def column_type_matches(self, expected: Any, actual: Any, dialect: Any) -> bool: ...
|
|
180
178
|
def index_names(self, inspector: Any, table: str) -> set[str]: ...
|
|
@@ -21,11 +21,6 @@ class HostedCatalog(PostgreSQLCatalog):
|
|
|
21
21
|
def initialize_namespace(self, connection):
|
|
22
22
|
pass
|
|
23
23
|
|
|
24
|
-
@contextmanager
|
|
25
|
-
def application_migration_connection(self, engine):
|
|
26
|
-
with self.migration_connection(engine) as connection:
|
|
27
|
-
yield connection
|
|
28
|
-
|
|
29
24
|
def registration_schema(self, source, name):
|
|
30
25
|
return self.physical_schema(source, name)
|
|
31
26
|
|
|
@@ -126,14 +121,6 @@ class MySQLCatalog(HostedCatalog):
|
|
|
126
121
|
]:
|
|
127
122
|
raise CatalogConfigurationError("catalog_index_definition_drift")
|
|
128
123
|
|
|
129
|
-
@contextmanager
|
|
130
|
-
def migration_guard(self, connection):
|
|
131
|
-
from sqlalchemy.orm import Session
|
|
132
|
-
|
|
133
|
-
# Hold catalog admission while implicit DDL commits use a separate connection.
|
|
134
|
-
with Session(connection.engine) as session:
|
|
135
|
-
yield session
|
|
136
|
-
|
|
137
124
|
@contextmanager
|
|
138
125
|
def migration_connection(self, engine):
|
|
139
126
|
# DDL implicitly commits on MySQL. The shared bootstrap journal records
|