mainsequence-metatable 0.1.26.dev43__tar.gz → 0.1.27__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.
Files changed (572) hide show
  1. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-migrations/SKILL.md +32 -8
  2. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
  3. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.mainsequence/workflows/metatables-api.yaml +5 -1
  4. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/PKG-INFO +2 -2
  5. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0019-metatables-analyst-agent.md +12 -3
  6. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +1 -1
  7. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0002-application-administration-and-table-ownership.md +39 -0
  8. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-database-enforced-table-access.md +6 -2
  9. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/openapi.json +53 -0
  10. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/deploy-application-migrations.md +57 -3
  11. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/ownership-and-sharing.md +12 -4
  12. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/permissions.md +2 -1
  13. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/pyproject.toml +2 -2
  14. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_boundaries.py +1 -1
  15. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/PKG-INFO +2 -2
  16. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/SOURCES.txt +2 -0
  17. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/requires.txt +1 -1
  18. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/runtime_context.py +29 -1
  19. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_registration.py +3 -1
  20. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime.py +3 -1
  21. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/catalog_rules.py +10 -0
  22. mainsequence_metatable-0.1.27/src/metatables/api/backend/migrations/versions/0012_table_creator.py +42 -0
  23. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/register_catalog.py +62 -11
  24. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/catalog.py +1 -0
  25. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/models.py +2 -0
  26. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime_contract.py +9 -0
  27. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_agent_surface.py +3 -1
  28. mainsequence_metatable-0.1.27/tests/auth/test_hosted_agent.py +59 -0
  29. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_hosted_environment_target.py +6 -3
  30. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_bootstrap.py +8 -8
  31. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_migration.py +46 -8
  32. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_catalog_contract.py +4 -3
  33. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_remaining_client_routes.py +1 -1
  34. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_register_catalog.py +114 -0
  35. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/uv.lock +5 -5
  36. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  37. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  39. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  40. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  41. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  42. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/discover-tables/SKILL.md +0 -0
  43. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  45. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  46. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  47. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  48. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/LICENSE +0 -0
  49. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/MANIFEST.in +0 -0
  50. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/README.md +0 -0
  51. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/alembic.ini +0 -0
  52. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/api/metatables/main.py +0 -0
  53. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/compose.database-tests.yml +0 -0
  54. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  55. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  56. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  57. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  58. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  59. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  60. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  61. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  62. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0009-shared-credential-store.md +0 -0
  63. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  64. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  65. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  66. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  67. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  68. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0016-impact-preflight.md +0 -0
  69. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  70. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  71. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/api/0018-table-search.md +0 -0
  72. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  73. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  74. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/adr/index.md +0 -0
  75. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/authentication-and-errors.md +0 -0
  76. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/data-sources.md +0 -0
  77. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/overview.md +0 -0
  78. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/reference.md +0 -0
  79. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/tables-and-migrations.md +0 -0
  80. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/api/time-index-and-updates.md +0 -0
  81. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/assets/branding/metatables.svg +0 -0
  82. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/assets/diagrams/local-client-experience.svg +0 -0
  83. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/bounded-transfers.md +0 -0
  84. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/build-an-updater.md +0 -0
  85. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/define-and-migrate-tables.md +0 -0
  86. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/installation-and-connection.md +0 -0
  87. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/local-storage.md +0 -0
  88. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/query-and-mutate.md +0 -0
  89. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/quickstart.md +0 -0
  90. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/read-existing-time-index-tables.md +0 -0
  91. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/register-existing-tables.md +0 -0
  92. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/tutorial.md +0 -0
  93. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/client/upgrade-legacy-app.md +0 -0
  94. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/architecture.md +0 -0
  95. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/data-sources.md +0 -0
  96. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/identity-and-scope.md +0 -0
  97. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/permissions-namespaces-labels.md +0 -0
  98. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/runs-and-execution-graphs.md +0 -0
  99. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  100. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/concepts/time-index-tables-and-updates.md +0 -0
  101. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/architecture-and-boundaries.md +0 -0
  102. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/database-backends.md +0 -0
  103. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/documentation.md +0 -0
  104. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/releasing.md +0 -0
  105. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/contributing/testing.md +0 -0
  106. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/README.md +0 -0
  107. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/__init__.py +0 -0
  108. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/bounded_reader.py +0 -0
  109. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/README.md +0 -0
  110. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/mssql.json +0 -0
  111. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/mysql.json +0 -0
  112. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/postgresql.json +0 -0
  113. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/data_sources/register.py +0 -0
  114. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/external_table.py +0 -0
  115. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/README.md +0 -0
  116. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/__init__.py +0 -0
  117. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/__main__.py +0 -0
  118. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/__init__.py +0 -0
  119. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/env.py +0 -0
  120. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/script.py.mako +0 -0
  121. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  122. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/local_app/tables.py +0 -0
  123. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/query.py +0 -0
  124. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/quickstart.py +0 -0
  125. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/reader.py +0 -0
  126. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/scripts/__init__.py +0 -0
  127. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/scripts/setup_metatables.py +0 -0
  128. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tables.py +0 -0
  129. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/README.md +0 -0
  130. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/__init__.py +0 -0
  131. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/__main__.py +0 -0
  132. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/data/README.md +0 -0
  133. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  134. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/frames.py +0 -0
  135. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/__init__.py +0 -0
  136. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/env.py +0 -0
  137. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/registry.py +0 -0
  138. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  139. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  140. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  141. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  142. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  143. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/operations.py +0 -0
  144. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/tables.py +0 -0
  145. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/tutorial/updaters.py +0 -0
  146. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/examples/updater.py +0 -0
  147. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/index.md +0 -0
  148. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/catalog-migrations.md +0 -0
  149. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/configuration.md +0 -0
  150. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/hosted-runtime.md +0 -0
  151. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/local-runtime.md +0 -0
  152. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/recovery-and-observability.md +0 -0
  153. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/run-history.md +0 -0
  154. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/operations/run-logs.md +0 -0
  155. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/capabilities.md +0 -0
  156. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/cli.md +0 -0
  157. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/reference/python.md +0 -0
  158. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/docs/security/index.md +0 -0
  159. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/mkdocs.yml +0 -0
  160. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/__init__.py +0 -0
  161. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/build_reference.py +0 -0
  162. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_client_api_coverage.py +0 -0
  163. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_distribution_sources.py +0 -0
  164. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_docs.py +0 -0
  165. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_examples_debug.py +0 -0
  166. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/check_project.py +0 -0
  167. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/dev_release_version.py +0 -0
  168. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/test_databases.py +0 -0
  169. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/scripts/test_postgresql.py +0 -0
  170. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/setup.cfg +0 -0
  171. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  172. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  173. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  174. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/__init__.py +0 -0
  175. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_admin_source.json +0 -0
  176. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_build.py +0 -0
  177. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/_skill_bundle.py +0 -0
  178. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/analysis.py +0 -0
  179. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/analyst/__init__.py +0 -0
  180. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/__init__.py +0 -0
  181. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/__init__.py +0 -0
  182. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/__init__.py +0 -0
  183. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/boundary.py +0 -0
  184. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/auth/local_actor.py +0 -0
  185. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/bootstrap.py +0 -0
  186. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/configuration.py +0 -0
  187. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/credential_admin.py +0 -0
  188. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/development.py +0 -0
  189. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/development_client.py +0 -0
  190. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/error_logging.py +0 -0
  191. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/main.py +0 -0
  192. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/mcp.py +0 -0
  193. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/platform_cache.py +0 -0
  194. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/__init__.py +0 -0
  195. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/column_search.py +0 -0
  196. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/contract_validation.py +0 -0
  197. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/data_sources.py +0 -0
  198. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  199. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/migration_connection.py +0 -0
  200. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/namespaces.py +0 -0
  201. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/run_logs.py +0 -0
  202. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/schema_graph.py +0 -0
  203. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/security.py +0 -0
  204. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_cascade.py +0 -0
  205. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_crud.py +0 -0
  206. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_delete.py +0 -0
  207. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_filter.py +0 -0
  208. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_import.py +0 -0
  209. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_introspection.py +0 -0
  210. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_patch.py +0 -0
  211. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_response.py +0 -0
  212. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_search.py +0 -0
  213. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_search_document.py +0 -0
  214. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_sql.py +0 -0
  215. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  216. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  217. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  218. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  219. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  220. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_batch.py +0 -0
  221. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  222. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_constants.py +0 -0
  223. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_crud.py +0 -0
  224. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_details.py +0 -0
  225. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_graph.py +0 -0
  226. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  227. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_registration.py +0 -0
  228. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_runs.py +0 -0
  229. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/routes/update_statistics.py +0 -0
  230. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime_control.py +0 -0
  231. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/runtime_database.py +0 -0
  232. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/source_passwords.py +0 -0
  233. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/app/transfer.py +0 -0
  234. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/__init__.py +0 -0
  235. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/__init__.py +0 -0
  236. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/access.py +0 -0
  237. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  238. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  239. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  240. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  241. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  242. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  243. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  244. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  245. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  246. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  247. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  248. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  249. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  250. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  251. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  252. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  253. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  254. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  255. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  256. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  257. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  258. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog.py +0 -0
  259. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  260. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  261. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/contracts.py +0 -0
  262. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/hosted.py +0 -0
  263. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  264. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  265. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/native.py +0 -0
  266. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/operations.py +0 -0
  267. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/pages.py +0 -0
  268. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  269. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/registry.py +0 -0
  270. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  271. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/relational.py +0 -0
  272. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  273. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  274. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/streaming.py +0 -0
  275. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/backends/timescale.py +0 -0
  276. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/__init__.py +0 -0
  277. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  278. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  279. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  280. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/contracts/values.py +0 -0
  281. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/__init__.py +0 -0
  282. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  283. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  284. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/label_rules.py +0 -0
  285. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  286. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/domain/update_constants.py +0 -0
  287. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/__init__.py +0 -0
  288. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  289. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  290. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  291. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  292. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  293. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  294. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  295. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  296. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  297. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  298. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  299. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/__init__.py +0 -0
  300. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/env.py +0 -0
  301. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  302. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  303. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  304. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  305. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  306. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  307. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  308. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  309. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  310. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  311. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  312. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  313. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  314. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/__init__.py +0 -0
  315. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  316. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  317. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/create_table.py +0 -0
  318. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  319. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/import_relations.py +0 -0
  320. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  321. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  322. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/__init__.py +0 -0
  323. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/cascade.py +0 -0
  324. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/database.py +0 -0
  325. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/grants.py +0 -0
  326. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/impact.py +0 -0
  327. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/labels.py +0 -0
  328. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/locking.py +0 -0
  329. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  330. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/projections.py +0 -0
  331. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  332. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  333. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  334. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  335. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  336. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/table_response.py +0 -0
  337. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  338. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  339. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/updates.py +0 -0
  340. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  341. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  342. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/__init__.py +0 -0
  343. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/documents.py +0 -0
  344. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/embeddings.py +0 -0
  345. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/index.py +0 -0
  346. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/ranking.py +0 -0
  347. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/text.py +0 -0
  348. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/backend/search/worker.py +0 -0
  349. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/__init__.py +0 -0
  350. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/configuration.yaml +0 -0
  351. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/api/metatables/main.py +0 -0
  352. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/__init__.py +0 -0
  353. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/admin_install.py +0 -0
  354. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/app.py +0 -0
  355. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/filters.py +0 -0
  356. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/local.py +0 -0
  357. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/migrations.py +0 -0
  358. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/project.py +0 -0
  359. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/cli/skills.py +0 -0
  360. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/__init__.py +0 -0
  361. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/mssql.py +0 -0
  362. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/compiled_sql/v1.py +0 -0
  363. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/dtype_codec.py +0 -0
  364. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/endpoint.py +0 -0
  365. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/README.md +0 -0
  366. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/__init__.py +0 -0
  367. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/bounded_reader.py +0 -0
  368. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/README.md +0 -0
  369. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/mssql.json +0 -0
  370. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/mysql.json +0 -0
  371. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/postgresql.json +0 -0
  372. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/data_sources/register.py +0 -0
  373. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/external_table.py +0 -0
  374. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/README.md +0 -0
  375. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/__init__.py +0 -0
  376. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/__main__.py +0 -0
  377. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  378. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/env.py +0 -0
  379. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  380. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  381. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/local_app/tables.py +0 -0
  382. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/query.py +0 -0
  383. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/quickstart.py +0 -0
  384. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/reader.py +0 -0
  385. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/scripts/__init__.py +0 -0
  386. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  387. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tables.py +0 -0
  388. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/README.md +0 -0
  389. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/__init__.py +0 -0
  390. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/__main__.py +0 -0
  391. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/data/README.md +0 -0
  392. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  393. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/frames.py +0 -0
  394. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  395. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  396. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  397. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  398. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  399. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  400. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  401. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  402. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/operations.py +0 -0
  403. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/tables.py +0 -0
  404. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/tutorial/updaters.py +0 -0
  405. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/examples/updater.py +0 -0
  406. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/future_registry.py +0 -0
  407. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/hashing.py +0 -0
  408. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/instrumentation.py +0 -0
  409. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_connection.py +0 -0
  410. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_files.py +0 -0
  411. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/local_run_logs.py +0 -0
  412. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/log_contract.py +0 -0
  413. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/__init__.py +0 -0
  414. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/alembic.py +0 -0
  415. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/connection.py +0 -0
  416. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/env.py +0 -0
  417. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/provider.py +0 -0
  418. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/registry.py +0 -0
  419. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/runner.py +0 -0
  420. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/scaffold.py +0 -0
  421. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/sqlite.py +0 -0
  422. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/__init__.py +0 -0
  423. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/env.py.mako +0 -0
  424. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/templates/script.py.mako +0 -0
  425. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/migrations/tls.py +0 -0
  426. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/models.py +0 -0
  427. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/pydantic_metadata.py +0 -0
  428. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/run_logging.py +0 -0
  429. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime.py +0 -0
  430. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/runtime_context.py +0 -0
  431. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/schema_names.py +0 -0
  432. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/sdk_compat.py +0 -0
  433. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/sqlalchemy_contracts.py +0 -0
  434. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/storage_layout_contract.py +0 -0
  435. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/time_index_table_refs.py +0 -0
  436. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transfer.py +0 -0
  437. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transfer_contract.py +0 -0
  438. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/transport.py +0 -0
  439. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/update_configuration_contract.py +0 -0
  440. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/__init__.py +0 -0
  441. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/configuration.py +0 -0
  442. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/dependencies.py +0 -0
  443. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/managers.py +0 -0
  444. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/namespacing.py +0 -0
  445. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/runner.py +0 -0
  446. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/updaters.py +0 -0
  447. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/updaters/utils.py +0 -0
  448. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/src/metatables/upload.py +0 -0
  449. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_api_search.py +0 -0
  450. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_mcp.py +0 -0
  451. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/analyst/test_tools.py +0 -0
  452. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  453. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_data_source_identity.py +0 -0
  454. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_development_client.py +0 -0
  455. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_local_mode.py +0 -0
  456. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_platform_fact_cache.py +0 -0
  457. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_request_identity.py +0 -0
  458. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_database.py +0 -0
  459. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_scaffold.py +0 -0
  460. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_selection.py +0 -0
  461. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_runtime_storage_binding.py +0 -0
  462. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/auth/test_source_passwords.py +0 -0
  463. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_catalog_foundation.py +0 -0
  464. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_contract_projection.py +0 -0
  465. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_database_config.py +0 -0
  466. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/catalog/test_index_statistics.py +0 -0
  467. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/conftest.py +0 -0
  468. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/capabilities.json +0 -0
  469. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/client_signatures.json +0 -0
  470. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/database_operations.json +0 -0
  471. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_bounded_transfer.py +0 -0
  472. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_compiler_runtime_source.py +0 -0
  473. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_relation_batching.py +0 -0
  474. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_relation_import.py +0 -0
  475. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_runtime_contract_compat.py +0 -0
  476. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_storage_layouts.py +0 -0
  477. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/contracts/test_table_contracts.py +0 -0
  478. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/Dockerfile +0 -0
  479. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/Dockerfile.dockerignore +0 -0
  480. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/__init__.py +0 -0
  481. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/conftest.py +0 -0
  482. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/__init__.py +0 -0
  483. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/env.py +0 -0
  484. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  485. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_api_contract.py +0 -0
  486. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_application_migration.py +0 -0
  487. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  488. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_credential_catalog.py +0 -0
  489. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_physical_contract.py +0 -0
  490. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_relation_import.py +0 -0
  491. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  492. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_sql_security.py +0 -0
  493. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_backend/test_update_client.py +0 -0
  494. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_physical_operations.py +0 -0
  495. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_postgresql_operations.py +0 -0
  496. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  497. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/documentation/test_project_checks.py +0 -0
  498. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_admin_installation.py +0 -0
  499. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_api_endpoint.py +0 -0
  500. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_application_owned_migrations.py +0 -0
  501. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_catalog_outage.py +0 -0
  502. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_api_contract.py +0 -0
  503. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_api_coverage.py +0 -0
  504. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_migration_scaffold.py +0 -0
  505. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_migration_tls.py +0 -0
  506. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_package.py +0 -0
  507. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_signatures.py +0 -0
  508. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_client_value_behaviors.py +0 -0
  509. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_data_source_registry.py +0 -0
  510. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_actor_client_api.py +0 -0
  511. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_cli_workflow.py +0 -0
  512. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_local_client_selection.py +0 -0
  513. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  514. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_namespaces_admin_http.py +0 -0
  515. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_public_imports.py +0 -0
  516. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_run_graphs.py +0 -0
  517. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_run_logs.py +0 -0
  518. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_runtime_upgrade.py +0 -0
  519. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_sdk_local_startup.py +0 -0
  520. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_sqlite_runtime.py +0 -0
  521. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_delete_client_api.py +0 -0
  522. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_filter_client_api.py +0 -0
  523. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_introspection_client_api.py +0 -0
  524. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_patch_client_api.py +0 -0
  525. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_api.py +0 -0
  526. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_document_api.py +0 -0
  527. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_search_scale.py +0 -0
  528. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_stats_api.py +0 -0
  529. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_update_pipeline.py +0 -0
  530. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_table_updates_http.py +0 -0
  531. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  532. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  533. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  534. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_batch_client_api.py +0 -0
  535. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  536. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  537. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  538. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/e2e/test_update_registration_client_api.py +0 -0
  539. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_documented_examples.py +0 -0
  540. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_postgresql_examples.py +0 -0
  541. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_setup_launch.py +0 -0
  542. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/examples/test_tutorial.py +0 -0
  543. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_credential_store.py +0 -0
  544. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_data_source_rules.py +0 -0
  545. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_local_data_sources.py +0 -0
  546. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_local_run_logs.py +0 -0
  547. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_connection.py +0 -0
  548. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_sql.py +0 -0
  549. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_tables.py +0 -0
  550. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  551. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_source_validation.py +0 -0
  552. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/integrations/test_sqlite_operations.py +0 -0
  553. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/labels/test_labels.py +0 -0
  554. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_create_table_operation.py +0 -0
  555. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_create_table_postgres.py +0 -0
  556. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_physical_operation_journal.py +0 -0
  557. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_search_documents.py +0 -0
  558. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/operations/test_timescale_policies.py +0 -0
  559. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_client_skills.py +0 -0
  560. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_dev_release_version.py +0 -0
  561. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_distribution_sources.py +0 -0
  562. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_editable_build.py +0 -0
  563. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/packaging/test_installed_distribution.py +0 -0
  564. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_governed_sql_scope.py +0 -0
  565. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_local_actor_membership.py +0 -0
  566. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_migration_boundary.py +0 -0
  567. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_namespace_grants.py +0 -0
  568. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_security_api.py +0 -0
  569. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_body_filter.py +0 -0
  570. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_grants.py +0 -0
  571. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_table_queries.py +0 -0
  572. {mainsequence_metatable-0.1.26.dev43 → mainsequence_metatable-0.1.27}/tests/permissions/test_workload_principals.py +0 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: metatables-migrations
3
- description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope and placement, scaffolding, revision authoring, local execution, the deployment-workflow migration Job for hosted runtimes, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
3
+ description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope and placement, scaffolding, revision authoring, local execution, the deployment-workflow migration Job for hosted runtimes, the Team that owns an application's tables in each Environment, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
4
4
  ---
5
5
 
6
6
  # MetaTables client application migrations
@@ -50,11 +50,21 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
50
50
  1. **Develop locally.** Author the revision and apply it to verified local SQLite
51
51
  with the [local development skill](../metatables-local-development/SKILL.md).
52
52
  2. **Commit the revision with the code that needs it.**
53
- 3. **Deploy.** The application's `.mainsequence/workflows/` file declares a
53
+ 3. **Give a Team the tables.** Before the first hosted migration in each
54
+ Environment, the application's tables need an owning Team: one platform Team
55
+ per Environment (for example `ledger-development`), whose members are the
56
+ migration Job's workload User and the workload User of every resource that
57
+ reads or writes the tables. An Organization admin creates the application's
58
+ namespace in that Environment and grants the Team Writer on it. Tell the user
59
+ these steps; they are made in the platform and in MetaTables Security, not in
60
+ the repository.
61
+ 4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
54
62
  migration Job that calls `upgrade_application` for each provider, in
55
- dependency order, from the candidate image. Every deployed resource that reads
56
- or writes the tables (FastAPI, `harness_agent` and others) has a deploy step
57
- with `needs: [migrate]`. A failed migration blocks the rollout.
63
+ dependency order, from the candidate image. The Job and every resource that
64
+ uses MetaTables declare `access.branches: [{repository: MetaTables, level: view}]`.
65
+ Every deployed resource that reads or writes the tables (FastAPI,
66
+ `harness_agent` and others) has a deploy step with `needs: [migrate]`. A failed
67
+ migration blocks the rollout.
58
68
 
59
69
  Rules:
60
70
 
@@ -69,6 +79,12 @@ Rules:
69
79
  during and after a failed rollout. Add first; drop or rename in a later release.
70
80
  - Redeploying an older image does not roll back the schema. Downgrade is never a
71
81
  deployment step.
82
+ - Tables belong to the Team, never to one workload User. Workload Users change
83
+ with each Environment and each recreated Job; a new one needs Team membership
84
+ only. Do not ask for direct table grants to a workload User, and do not run the
85
+ Job as an Organization admin to get around a refusal.
86
+ - Every table a provider registers goes in the Team's namespace. A table
87
+ registered in a namespace the caller already writes gets no grant of its own.
72
88
 
73
89
  ## Source and runtime context
74
90
 
@@ -205,8 +221,15 @@ Read `docs/operations/recovery-and-observability.md`.
205
221
  another install overwrote it. Move the provider as the
206
222
  [legacy upgrade skill](../metatables-upgrade-legacy-app/SKILL.md) describes;
207
223
  do not edit files in `site-packages`.
208
- - If reservation fails, compare provider scope and physical identities before
209
- changing code. Do not create a second catalog row for the same table.
224
+ - If reservation fails with `namespace_not_writable` or `table_not_editable`
225
+ (403), the caller lacks Writer through the owning Team. Add the
226
+ `caller_user_uid` from the error to the Team with Writer on the namespace, or,
227
+ when the namespace or Team is missing, set them up as in step 3. A table
228
+ registered before the Team existed may have only a retired workload User as
229
+ Writer; an Organization admin grants the Team Writer on its namespace. Do not
230
+ change code or physical names to get around it.
231
+ - If reservation fails otherwise, compare provider scope and physical identities
232
+ before changing code. Do not create a second catalog row for the same table.
210
233
  - If Alembic succeeds but finalization fails, physical DDL may already be
211
234
  committed. Inspect every per-table result and the actual schema before
212
235
  retrying.
@@ -220,5 +243,6 @@ Read `docs/operations/recovery-and-observability.md`.
220
243
 
221
244
  Verify provider scope and placement, revision content, the selected environment
222
245
  connection, repeat execution, and final active bindings. Check that the deployment
223
- workflow runs the migration Job before every resource that uses the tables. Report
246
+ workflow runs the migration Job before every resource that uses the tables, and
247
+ that each Environment has its owning Team with the Job's workload User. Report
224
248
  separately what was checked offline and what was exercised against a configured API.
@@ -1,7 +1,7 @@
1
1
  schema=1
2
2
  library_name=ms-tau-sdk
3
3
  namespace=ms_tau_sdk
4
- pinned_version=2.0.8.dev44
4
+ pinned_version=2.0.8
5
5
  skills_path=src/ms_tau_sdk/agent_skills
6
6
  skills=tau_a2a_runtime_adapter,tau_local_development,tau_project_customization,tau_repository_integration,tau_security_and_access
7
7
  command=ms-tau skills sync --path .
@@ -17,12 +17,16 @@ resources:
17
17
  secrets:
18
18
  - name: METATABLES_RUNTIME_DATABASE
19
19
  level: view
20
+ # /runtime-context/ tells applications this branch's Analyst (ADR 0019).
21
+ resources:
22
+ - key: metatables-analyst-agent
23
+ level: view
20
24
 
21
25
  - key: metatables-analyst-agent
22
26
  kind: harness_agent
23
27
  spec:
24
28
  source_path: api/tau/main.py
25
- llm_provider: openai
29
+ llm_provider: openai-codex
26
30
  llm_model: gpt-5.6-luna
27
31
  llm_thinking: medium
28
32
  automatic_deployment: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.26.dev43
3
+ Version: 0.1.27
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
51
51
  Provides-Extra: docs
52
52
  Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
53
53
  Provides-Extra: agent
54
- Requires-Dist: ms-tau-sdk==2.0.8.dev44; extra == "agent"
54
+ Requires-Dist: ms-tau-sdk==2.0.8; extra == "agent"
55
55
  Provides-Extra: mysql
56
56
  Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
57
57
  Provides-Extra: mssql
@@ -1,5 +1,14 @@
1
1
  # ADR 0019: MetaTables Analyst agent
2
2
 
3
+ > Amendment (2026-10-08): The API names this branch's Analyst to applications.
4
+ > `GET /runtime-context/` returns `hosted_agent` (`uid`, `name`, `status`) beside
5
+ > `hosted_environment`: the Agent the API's own branch deploys, which the API finds with its
6
+ > workload credentials and caches for an hour like the Environment; a failed lookup is
7
+ > `unavailable` and is not cached. The API's `access` names the Analyst by its key so it can
8
+ > see it. An application's assistant, such as the MetaTables Admin rail, takes the Agent and
9
+ > the Environment from there instead of build values. A re-created Analyst reaches it at the
10
+ > API's next deployment, which the same push starts. Local mode reports neither.
11
+ >
3
12
  > Amendment (2026-10-08): [ADR 0020](0020-analyst-reads-as-its-requester.md) replaces
4
13
  > the agent's own Reader grants: each tool call is answered as the person the turn
5
14
  > serves, so nobody reads more through the agent than they can read directly.
@@ -30,7 +39,7 @@ Status: Accepted.
30
39
  Implementation status: implemented on `development`; not yet deployed. Tests cover the
31
40
  tools against a stand-in catalog, `deep_search`, `describe_table` and `list_namespaces`
32
41
  through the client against the API, and the extension, card, workflow and vendored skills with
33
- ms-tau-sdk 2.0.8.dev44. A local `ms-tau` session and the hosted deployment have not run.
42
+ ms-tau-sdk 2.0.8. A local `ms-tau` session and the hosted deployment have not run.
34
43
 
35
44
  Owner: this repository deploys the agent. The MetaTables API is unchanged; the agent
36
45
  is one more API client.
@@ -61,7 +70,7 @@ refuses anything else.
61
70
 
62
71
  | Part | Rule |
63
72
  | --- | --- |
64
- | Runtime | `ms-tau-sdk` 2.0.8.dev44, `openai` / `gpt-5.6-luna`, thinking `medium`. |
73
+ | Runtime | `ms-tau-sdk` 2.0.8, `openai-codex` / `gpt-5.6-luna`, thinking `medium`. |
65
74
  | Identity | The person each turn serves (ADR 0020); the agent's own identity holds no grants. |
66
75
  | Tools | The six tools below, served by the API over MCP when hosted (ADR 0021), and the SDK's skill-scoped `read`. No shell, file writes or Main Sequence MCP. |
67
76
  | Instructions | `.tau/SYSTEM.md` covers MetaTables; vendored `pg-aiguide` skills cover PostgreSQL and TimescaleDB. |
@@ -120,7 +129,7 @@ The agent card's two skills, `discover-tables` and `analyze-with-sql` in
120
129
  The skills of [timescale/pg-aiguide](https://github.com/timescale/pg-aiguide)
121
130
  (Apache-2.0) are vendored at commit `b236d35` with its license and notice, one
122
131
  directory per skill under `.tau/skills/`, because Tau discovers skills one level deep.
123
- The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.8.dev44 registers
132
+ The agent opens them through the skill-scoped `read`, which ms-tau-sdk 2.0.8 registers
124
133
  when `TAU_EXCLUDE_BASE_TOOLS=true`. The directive takes precedence over them:
125
134
 
126
135
  - Discover tables through the MetaTables tools, not `pg_catalog`, which also lists
@@ -3,7 +3,7 @@
3
3
  Status: Accepted.
4
4
 
5
5
  Implementation status: implemented on `development`; not deployed. It builds on platform
6
- ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.8.dev44 for the
6
+ ADR-0051 (requester-bound access, implemented 2026-10-06), ms-tau-sdk 2.0.8 for the
7
7
  Analyst and mainsequence 9.0.19, whose `User.get_requester()` the API reads. Tests cover
8
8
  admission through real signed assertions; a hosted turn has not run.
9
9
 
@@ -344,6 +344,42 @@ their own workload Users, which need to be granted like people.
344
344
  `reads_as_caller()`, the User `search` filter, `managed_by_caller`,
345
345
  `workload_name` and Team members that may be workload Users.
346
346
 
347
+ ### Amendment: Teams own application tables (2026-10-09)
348
+
349
+ Since platform ADR-0048 every Job, release and Agent runs as its own workload
350
+ User. Each Environment, and each recreated Job, has a new one. A table's creator
351
+ grant tied the table to the workload User that first registered it, so the next
352
+ identity of the same application could not re-register its own tables
353
+ ([#43](https://github.com/mainsequence-projects/MetaTables/issues/43)).
354
+
355
+ - **A Team owns an application's tables.** Before an application's first
356
+ migration in an Environment, an Organization admin creates its namespace and
357
+ grants Writer on it to a platform Team. The application's migration Job and
358
+ every workload User that reads or writes its tables are members of that Team.
359
+ Use one Team per Environment, so that one Environment's workloads are not
360
+ Writers in another. A new workload User needs Team membership only; the tables
361
+ keep their owner.
362
+ - **No creator grant under a namespace Writer.** Registering a new table into a
363
+ namespace where the caller is already a Writer, directly or through a Team, adds
364
+ no creator grant: the namespace's Writers control the table. Otherwise the
365
+ creator still receives Writer, including an admin registering into a namespace
366
+ where they have no grant, so no table starts without a Writer.
367
+ - **Creator attribution is a column.** `meta_table.created_by_user_uid` records
368
+ who registered each table and grants nothing. System migration
369
+ `0012_table_creator` adds it and fills it from each table's first self-granted
370
+ Writer in the grant history.
371
+ - **Refusals say how to recover.** Registration refusals are 403s with a `code`:
372
+ `table_not_editable` for an existing table the caller cannot edit,
373
+ `namespace_not_writable` for a namespace that is missing or that the caller
374
+ cannot write. Both name the caller's User UID and the recovery: add it to the
375
+ Team with Writer on the namespace, or ask an Organization admin. The table's
376
+ namespace is named when the caller requested it or can read the table; its
377
+ Writers are listed only when the caller can read the table.
378
+
379
+ Tables whose only Writer is a replaced identity are recovered the same way: an
380
+ admin grants the application's Team Writer on their namespace. There is no admin
381
+ bypass and no automatic adoption.
382
+
347
383
  ## Superseded behavior and preserved boundaries
348
384
 
349
385
  This decision supersedes ADR 0001's pending-runtime configurator/existing-source
@@ -397,6 +433,9 @@ schema baseline/recreation policy remains governed by ADR 0001.
397
433
  resources through counts, search, lineage, or error details.
398
434
  - A Writer can grant/revoke Reader and Writer access only on tables they control.
399
435
  Re-registering an existing table never grants the caller ownership.
436
+ - A new member of the Team with Writer on an application's namespace registers and
437
+ migrates that application's existing tables; a caller outside it is refused with
438
+ a recovery path that reveals nothing it cannot read.
400
439
  - Team changes and namespace revocation/moves change effective access under the
401
440
  documented freshness rules; independent grants remain visible and effective.
402
441
  - Non-admins cannot manage DataSources, runtime selection, system migrations,
@@ -299,8 +299,12 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
299
299
  - Physical table names become visible to explorer users.
300
300
  - Cascading foreign keys are allowed. Tables that reference a table never change
301
301
  who may write it.
302
- - Team membership reaches the database at the pace of the existing one-hour
303
- platform-fact cache.
302
+ - Team membership reaches the database on the caller's next query. Each SQL
303
+ admission compares the caller's current Teams with the ones its role was last
304
+ given and reconciles the roles first when they differ. A hosted caller's Teams
305
+ come from its signed assertion on every request
306
+ ([ADR 0017](0017-hosted-request-identity.md), 2026-10-05 amendment); only the
307
+ developer's own facts in Local and developer mode are cached for up to an hour.
304
308
 
305
309
  ## Implementation
306
310
 
@@ -763,6 +763,49 @@
763
763
  "title": "HTTPValidationError",
764
764
  "type": "object"
765
765
  },
766
+ "HostedAgent": {
767
+ "description": "The Harness Agent this API's branch deploys, as the API's workload sees it.",
768
+ "properties": {
769
+ "name": {
770
+ "anyOf": [
771
+ {
772
+ "type": "string"
773
+ },
774
+ {
775
+ "type": "null"
776
+ }
777
+ ],
778
+ "title": "Name"
779
+ },
780
+ "status": {
781
+ "enum": [
782
+ "verified",
783
+ "not_found",
784
+ "unavailable",
785
+ "not_configured"
786
+ ],
787
+ "title": "Status",
788
+ "type": "string"
789
+ },
790
+ "uid": {
791
+ "anyOf": [
792
+ {
793
+ "type": "string"
794
+ },
795
+ {
796
+ "type": "null"
797
+ }
798
+ ],
799
+ "title": "Uid"
800
+ }
801
+ },
802
+ "required": [
803
+ "uid",
804
+ "status"
805
+ ],
806
+ "title": "HostedAgent",
807
+ "type": "object"
808
+ },
766
809
  "HostedEnvironment": {
767
810
  "properties": {
768
811
  "is_production": {
@@ -3152,6 +3195,16 @@
3152
3195
  ],
3153
3196
  "title": "Git Source"
3154
3197
  },
3198
+ "hosted_agent": {
3199
+ "anyOf": [
3200
+ {
3201
+ "$ref": "#/components/schemas/HostedAgent"
3202
+ },
3203
+ {
3204
+ "type": "null"
3205
+ }
3206
+ ]
3207
+ },
3155
3208
  "hosted_environment": {
3156
3209
  "anyOf": [
3157
3210
  {
@@ -15,10 +15,13 @@ before anything that uses the tables rolls out. See
15
15
  [Local storage](local-storage.md).
16
16
  2. **Commit the revision with the code that needs it.** Applied revisions are
17
17
  immutable; every later schema change is a new revision.
18
- 3. **Deploy.** The application's workflow runs its migration Job from the
18
+ 3. **Give a Team the tables.** Before the first hosted migration in each
19
+ Environment, set up the Team that owns the application's tables
20
+ ([below](#give-the-job-access-through-a-team)).
21
+ 4. **Deploy.** The application's workflow runs its migration Job from the
19
22
  candidate image, then deploys the resources that read or write the tables.
20
23
 
21
- Hosted runtimes are migrated only by step 3. Do not run `metatables migrations
24
+ Hosted runtimes are migrated only by step 4. Do not run `metatables migrations
22
25
  upgrade` or `downgrade` against a hosted API from a developer machine or agent
23
26
  session. Do not migrate at application startup either: several pods would race,
24
27
  and a failure would not stop the rollout.
@@ -78,6 +81,56 @@ Give every other deployed resource that reads or writes the tables, such as a
78
81
  `harness_agent`, its own deploy step with `needs: [migrate]`. Validate the file
79
82
  against the branch's workflow template before committing it.
80
83
 
84
+ ## Give the Job access through a Team
85
+
86
+ The Job runs as its own workload User, and each Environment, and each recreated
87
+ Job, has a new one. A table owned by one workload User is lost to the next, so the
88
+ application's tables belong to a platform Team instead:
89
+
90
+ 1. **Create one Team per Environment** for the application, for example
91
+ `ledger-development` and `ledger-production`. A shared Team would make one
92
+ Environment's workloads Writers in another.
93
+ 2. **Add the workload Users.** Add the migration Job's workload User, and the
94
+ workload User of every resource that reads or writes the tables (FastAPI
95
+ release, Agent, other Jobs). Each resource's `workload_user_uid` names it.
96
+ 3. **Grant the Team the namespace.** An Organization admin creates the
97
+ application's namespace in that Environment's MetaTables, under
98
+ **Security**, or with `POST /security/namespaces/`, and grants the Team Writer
99
+ on it (`PUT /namespaces/{uid}/permissions`). Every table registered in the
100
+ namespace inherits the grant.
101
+
102
+ The Job also needs platform `view` on the Environment's `metatables` release and
103
+ its branch to discover the API; declare it on the Job:
104
+
105
+ ```yaml
106
+ - key: migrate-ledger
107
+ kind: job
108
+ spec:
109
+ name: Ledger migrations
110
+ execution_path: jobs/migrate_ledger.py
111
+ access:
112
+ branches:
113
+ - repository: MetaTables
114
+ level: view
115
+ ```
116
+
117
+ Team membership takes effect on the workload's next request, in the catalog and in
118
+ the database. When a workload User changes, add the new one to the Team; nothing
119
+ in MetaTables changes. A table registered in a namespace the caller already
120
+ writes gets no grant of its own, so the Team stays its only owner.
121
+
122
+ ### When registration is refused
123
+
124
+ - **`namespace_not_writable`**: the namespace does not exist in this Environment,
125
+ or the caller is not its Writer. Do steps 1 to 3 for the `caller_user_uid` the
126
+ error names.
127
+ - **`table_not_editable`**: the table is already registered and the caller is not
128
+ its Writer. Add the `caller_user_uid` to the Team with Writer on the table's
129
+ namespace. When the table was registered before the Team existed, its only
130
+ Writer may be a workload User that no longer runs: an Organization admin
131
+ grants the Team Writer on the namespace, and the table inherits it. The error
132
+ lists the table's Writers when the caller can read the table.
133
+
81
134
  ## What the Job guarantees
82
135
 
83
136
  - It runs on every deployment. A database already at head is left unchanged and
@@ -89,7 +142,8 @@ against the branch's workflow template before committing it.
89
142
  - The Job finds the Environment's MetaTables API the same way any client does
90
143
  ([installation and connection](installation-and-connection.md)). That API must
91
144
  be deployed with its system migrations applied; otherwise the Job fails. Its
92
- SDK user needs the same API access a developer needs to run the provider.
145
+ workload User needs Writer on the application's namespace through the Team
146
+ above.
93
147
 
94
148
  ## Keep each release compatible with the previous one
95
149
 
@@ -2,15 +2,23 @@
2
2
 
3
3
  ## Ownership is Writer access
4
4
 
5
- The creator receives Writer access when a new table is registered. A Writer can
6
- grant Reader or Writer access to other platform Users and Teams, change a direct
7
- grant, or revoke it. Readers cannot change grants.
5
+ The creator receives Writer access when a new table is registered, unless the
6
+ table's namespace already makes the creator a Writer, directly or through a Team.
7
+ Then the namespace's Writers control the table and no creator grant is added. A
8
+ Writer can grant Reader or Writer access to other platform Users and Teams, change
9
+ a direct grant, or revoke it. Readers cannot change grants.
8
10
 
9
11
  Several principals can be Writers. The original creator has no permanent
10
- permission separate from grants: creator attribution records who created the
12
+ permission separate from grants: `created_by_user_uid` records who created the
11
13
  table, while effective access determines who controls it now. Organization admins
12
14
  can restore access when no Writer remains.
13
15
 
16
+ Deployed Jobs, releases and Agents run as their own workload Users, which change
17
+ with each Environment and each recreated Job. Give an application's tables to a
18
+ Team instead: grant the Team Writer on the application's namespace and make the
19
+ workload Users members. See
20
+ [Migrate in the deployment workflow](../client/deploy-application-migrations.md#give-the-job-access-through-a-team).
21
+
14
22
  ## One central table-access model
15
23
 
16
24
  `MetaTableGrant` is the foundation of the central access model. Each direct grant
@@ -22,7 +22,8 @@ Organization admin status comes from the platform through the SDK.
22
22
 
23
23
  Creation checks the selected DataSource's storage access mode and the table's
24
24
  lifecycle requirements. The table and its creator's Writer grant are recorded
25
- together. Re-registering an existing table cannot give another caller ownership.
25
+ together, unless the namespace already makes the creator a Writer. Re-registering
26
+ an existing table cannot give another caller ownership.
26
27
 
27
28
  Initial runtime setup must check the platform admin fact before the application
28
29
  grant tables exist. Configuring a pending database does not make the first caller
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.26.dev43"
7
+ version = "0.1.27"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -59,7 +59,7 @@ Documentation = "https://potential-doodle-wn39mnm.pages.github.io/"
59
59
  [project.optional-dependencies]
60
60
  dev = ["pytest>=8,<10", "ruff>=0.14", "build>=1,<2", "packaging>=24.2", "twine>=6,<7"]
61
61
  docs = ["mkdocs>=1.6,<2"]
62
- agent = ["ms-tau-sdk==2.0.8.dev44"]
62
+ agent = ["ms-tau-sdk==2.0.8"]
63
63
  mysql = ["PyMySQL[rsa]>=1.1.1,<1.2"]
64
64
  # Keep the published extra name for existing installers; pyodbc is required.
65
65
  mssql = []
@@ -15,7 +15,7 @@ RETIRED_TERMS = (
15
15
  )
16
16
  SDK_MODULES = frozenset({
17
17
  'mainsequence.scaffold_skills',
18
- 'mainsequence.client', 'mainsequence.client.base', 'mainsequence.client.exceptions',
18
+ 'mainsequence.client', 'mainsequence.client.agent_runtime_models', 'mainsequence.client.base', 'mainsequence.client.exceptions',
19
19
  'mainsequence.client.models_helpers',
20
20
  'mainsequence.client.models_user', 'mainsequence.client.utils', 'mainsequence.client.value_sets',
21
21
  'mainsequence.cli.config', 'mainsequence.code_repository_context',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.26.dev43
3
+ Version: 0.1.27
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
51
51
  Provides-Extra: docs
52
52
  Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
53
53
  Provides-Extra: agent
54
- Requires-Dist: ms-tau-sdk==2.0.8.dev44; extra == "agent"
54
+ Requires-Dist: ms-tau-sdk==2.0.8; extra == "agent"
55
55
  Provides-Extra: mysql
56
56
  Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
57
57
  Provides-Extra: mssql
@@ -320,6 +320,7 @@ src/metatables/api/backend/migrations/versions/0008_upload_receipts.py
320
320
  src/metatables/api/backend/migrations/versions/0009_timescale_policies.py
321
321
  src/metatables/api/backend/migrations/versions/0010_cascade_targets.py
322
322
  src/metatables/api/backend/migrations/versions/0011_table_search.py
323
+ src/metatables/api/backend/migrations/versions/0012_table_creator.py
323
324
  src/metatables/api/backend/migrations/versions/__init__.py
324
325
  src/metatables/api/backend/operations/__init__.py
325
326
  src/metatables/api/backend/operations/bootstrap_migrations.py
@@ -443,6 +444,7 @@ tests/analyst/test_tools.py
443
444
  tests/auth/test_bootstrap_failure_cause.py
444
445
  tests/auth/test_data_source_identity.py
445
446
  tests/auth/test_development_client.py
447
+ tests/auth/test_hosted_agent.py
446
448
  tests/auth/test_hosted_environment_target.py
447
449
  tests/auth/test_local_mode.py
448
450
  tests/auth/test_platform_fact_cache.py
@@ -28,7 +28,7 @@ urllib3>=2.7.0
28
28
  uvicorn==0.52.4
29
29
 
30
30
  [agent]
31
- ms-tau-sdk==2.0.8.dev44
31
+ ms-tau-sdk==2.0.8
32
32
 
33
33
  [dev]
34
34
  pytest<10,>=8
@@ -12,7 +12,7 @@ from metatables.api.app.runtime import data_source_provider
12
12
  from metatables.api.app.runtime_control import runtime_instance_id
13
13
  from metatables.api.backend.integrations.local_workspace import source_descriptor
14
14
  from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
15
- from metatables.runtime_contract import HostedEnvironment, RuntimeContext
15
+ from metatables.runtime_contract import HostedAgent, HostedEnvironment, RuntimeContext
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
@@ -49,6 +49,32 @@ def cached_environment(cache: PlatformCache[UUID, HostedEnvironment], uid: UUID
49
49
  return cache.get(uid, lambda: verified_environment(uid))
50
50
 
51
51
 
52
+ def branch_agent() -> HostedAgent:
53
+ """The Harness Agent this API's branch deploys (ADR 0019); a branch deploys at most one.
54
+
55
+ A failed lookup raises, so the cache keeps no failure.
56
+ """
57
+ from mainsequence.client.agent_runtime_models import Agent
58
+ from mainsequence.code_repository_context import get_code_repository_context
59
+
60
+ branch_uid = get_code_repository_context().code_repository_branch_uid
61
+ agents = [agent for agent in Agent.filter(timeout=(2, 5))
62
+ if branch_uid and agent.code_repository_branch_uid == branch_uid]
63
+ if len(agents) != 1:
64
+ return HostedAgent(uid=None, status="not_found")
65
+ return HostedAgent(uid=agents[0].uid, status="verified", name=agents[0].name)
66
+
67
+
68
+ def cached_agent(cache: PlatformCache[UUID, HostedAgent], environment_uid: UUID | None) -> HostedAgent:
69
+ if environment_uid is None:
70
+ return HostedAgent(uid=None, status="not_configured")
71
+ try:
72
+ return cache.get(environment_uid, branch_agent)
73
+ except Exception:
74
+ logger.exception("Hosted agent lookup failed")
75
+ return HostedAgent(uid=None, status="unavailable")
76
+
77
+
52
78
  @router.get("/runtime-context/", response_model=RuntimeContext, response_model_exclude_unset=True)
53
79
  def runtime_context(
54
80
  request: Request, response: Response,
@@ -73,6 +99,8 @@ def runtime_context(
73
99
  "runtime_instance_id": runtime_instance_id(state) if control else None,
74
100
  "api_endpoint": f"http://{state.config.expected_host}" if state.config.local_mode else str(request.base_url).rstrip("/"),
75
101
  "hosted_environment": environment,
102
+ # The Analyst an application's assistant talks to, in the same Environment (ADR 0019).
103
+ "hosted_agent": None if state.config.local_mode else cached_agent(state.agent_cache, caller.environment_uid),
76
104
  "git_source": source_descriptor(workspace.source) if workspace else None,
77
105
  "data_source_selection": selection,
78
106
  "bootstrap": state.bootstrap.descriptor(caller.user_uid, is_admin=caller.is_admin) if state.bootstrap else None,
@@ -25,7 +25,7 @@ from metatables.api.backend.backends.operations import (
25
25
  from metatables.api.backend.backends.timescale import TimescaleError, convert_time_index_table
26
26
  from metatables.api.backend.contracts.storage_layouts import StorageLayoutValidationError
27
27
  from metatables.api.backend.contracts.table_contracts import ContractValidationError
28
- from metatables.api.backend.domain.catalog_rules import CatalogInvariantError
28
+ from metatables.api.backend.domain.catalog_rules import CatalogAccessError, CatalogInvariantError
29
29
  from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
30
30
  from metatables.api.backend.domain.permission_rules import TrustedActorFacts
31
31
  from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
@@ -164,6 +164,8 @@ def _failure(session, exc, *, item=None):
164
164
  cause = exc
165
165
  if isinstance(exc, HTTPException):
166
166
  status, detail, cause = exc.status_code, exc.detail, exc.__cause__
167
+ elif isinstance(exc, CatalogAccessError):
168
+ status, detail = 403, exc.detail
167
169
  elif isinstance(exc, DataSourceAdmissionError):
168
170
  # Contract rejections name the offending column or index, as contract validation does.
169
171
  status = exc.status_code
@@ -37,7 +37,7 @@ from metatables.api.backend.integrations.runtime_binding import (
37
37
  RuntimeBindingError,
38
38
  RuntimeStorageBinding,
39
39
  )
40
- from metatables.runtime_contract import HostedEnvironment
40
+ from metatables.runtime_contract import HostedAgent, HostedEnvironment
41
41
 
42
42
  logger = logging.getLogger(__name__)
43
43
 
@@ -221,6 +221,8 @@ class RuntimeState:
221
221
  default_factory=PlatformCache, repr=False, compare=False)
222
222
  environment_cache: PlatformCache[UUID, HostedEnvironment] = field(
223
223
  default_factory=PlatformCache, repr=False, compare=False)
224
+ agent_cache: PlatformCache[UUID, HostedAgent] = field(
225
+ default_factory=PlatformCache, repr=False, compare=False)
224
226
 
225
227
  @property
226
228
  def workspace(self) -> LocalWorkspace | None:
@@ -14,6 +14,15 @@ class CatalogInvariantError(ValueError):
14
14
  """A proposed catalog transition violates a MetaTables invariant."""
15
15
 
16
16
 
17
+ class CatalogAccessError(CatalogInvariantError):
18
+ """The caller lacks the Writer access a registration needs; ``detail`` says how to recover."""
19
+
20
+ def __init__(self, code: str, message: str, **context):
21
+ super().__init__(message)
22
+ self.code = code
23
+ self.detail = {"code": code, "message": message, **context}
24
+
25
+
17
26
  @dataclass(frozen=True)
18
27
  class TimeIndexSpec:
19
28
  time_index_name: str
@@ -51,6 +60,7 @@ class TableRegistration:
51
60
  migration_namespace: str | None = None
52
61
  migration_provider_key: str | None = None
53
62
  time_index: TimeIndexSpec | None = None
63
+ created_by_user_uid: UUID | None = None
54
64
 
55
65
  @property
56
66
  def kind(self) -> str: