mainsequence-metatable 0.1.36.dev67__tar.gz → 0.1.37.dev69__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +1 -1
  2. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +5 -0
  3. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +8 -3
  4. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +25 -9
  5. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +34 -1
  6. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/PKG-INFO +3 -3
  7. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0017-hosted-request-identity.md +10 -0
  8. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/authentication-and-errors.md +7 -5
  9. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/openapi.json +1 -1
  10. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/identity-and-scope.md +2 -1
  11. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/releasing.md +2 -0
  12. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/security/index.md +10 -4
  13. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/pyproject.toml +3 -3
  14. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/PKG-INFO +3 -3
  15. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/SOURCES.txt +2 -0
  16. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/requires.txt +2 -2
  17. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/boundary.py +15 -7
  18. mainsequence_metatable-0.1.37.dev69/src/metatables/api/app/auth/team_membership.py +104 -0
  19. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/main.py +3 -1
  20. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/mcp.py +13 -13
  21. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/platform_cache.py +2 -0
  22. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/caller.py +3 -2
  23. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime.py +8 -1
  24. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/access.py +13 -4
  25. mainsequence_metatable-0.1.37.dev69/src/metatables/api/backend/domain/permission_rules.py +43 -0
  26. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/sdk_compat.py +5 -2
  27. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_agent_surface.py +4 -2
  28. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_mcp.py +3 -3
  29. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_platform_fact_cache.py +36 -10
  30. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_request_identity.py +18 -3
  31. mainsequence_metatable-0.1.37.dev69/tests/auth/test_team_membership.py +55 -0
  32. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/conftest.py +15 -0
  33. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_sql_security.py +34 -0
  34. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_deployment_security.py +36 -0
  35. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/uv.lock +70 -19
  36. mainsequence_metatable-0.1.36.dev67/src/metatables/api/backend/domain/permission_rules.py +0 -18
  37. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  39. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  40. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  41. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  42. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  43. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/discover-tables/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  45. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/.mainsequence/workflows/metatables-api.yaml +0 -0
  46. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/LICENSE +0 -0
  47. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/MANIFEST.in +0 -0
  48. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/README.md +0 -0
  49. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/alembic.ini +0 -0
  50. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/api/metatables/main.py +0 -0
  51. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/compose.database-tests.yml +0 -0
  52. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  53. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  54. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  55. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  56. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  57. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  58. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  59. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  60. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  61. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  62. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  63. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  64. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0009-shared-credential-store.md +0 -0
  65. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  66. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  67. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  68. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  69. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  70. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0016-impact-preflight.md +0 -0
  71. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  72. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0018-table-search.md +0 -0
  73. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  74. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/api/0023-daily-security-check.md +0 -0
  75. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  76. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  77. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/adr/index.md +0 -0
  78. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/data-sources.md +0 -0
  79. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/overview.md +0 -0
  80. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/reference.md +0 -0
  81. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/tables-and-migrations.md +0 -0
  82. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/api/time-index-and-updates.md +0 -0
  83. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/assets/branding/metatables.svg +0 -0
  84. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/assets/diagrams/local-client-experience.svg +0 -0
  85. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/assets/diagrams/namespace-access.svg +0 -0
  86. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/bounded-transfers.md +0 -0
  87. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/build-an-updater.md +0 -0
  88. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/define-and-migrate-tables.md +0 -0
  89. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/deploy-application-migrations.md +0 -0
  90. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/installation-and-connection.md +0 -0
  91. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/local-storage.md +0 -0
  92. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/query-and-mutate.md +0 -0
  93. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/quickstart.md +0 -0
  94. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/read-existing-time-index-tables.md +0 -0
  95. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/register-existing-tables.md +0 -0
  96. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/tutorial.md +0 -0
  97. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/client/upgrade-legacy-app.md +0 -0
  98. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/architecture.md +0 -0
  99. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/data-sources.md +0 -0
  100. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/permissions-namespaces-labels.md +0 -0
  101. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/runs-and-execution-graphs.md +0 -0
  102. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  103. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/concepts/time-index-tables-and-updates.md +0 -0
  104. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/architecture-and-boundaries.md +0 -0
  105. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/database-backends.md +0 -0
  106. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/documentation.md +0 -0
  107. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/contributing/testing.md +0 -0
  108. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/README.md +0 -0
  109. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/__init__.py +0 -0
  110. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/bounded_reader.py +0 -0
  111. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/README.md +0 -0
  112. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/mssql.json +0 -0
  113. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/mysql.json +0 -0
  114. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/postgresql.json +0 -0
  115. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/data_sources/register.py +0 -0
  116. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/external_table.py +0 -0
  117. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/README.md +0 -0
  118. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/__init__.py +0 -0
  119. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/__main__.py +0 -0
  120. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/__init__.py +0 -0
  121. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/env.py +0 -0
  122. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/script.py.mako +0 -0
  123. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  124. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/local_app/tables.py +0 -0
  125. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/query.py +0 -0
  126. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/quickstart.py +0 -0
  127. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/reader.py +0 -0
  128. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/scripts/__init__.py +0 -0
  129. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/scripts/setup_metatables.py +0 -0
  130. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tables.py +0 -0
  131. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/README.md +0 -0
  132. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/__init__.py +0 -0
  133. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/__main__.py +0 -0
  134. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/data/README.md +0 -0
  135. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  136. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/frames.py +0 -0
  137. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/__init__.py +0 -0
  138. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/env.py +0 -0
  139. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/registry.py +0 -0
  140. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  141. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  142. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  143. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  144. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  145. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/operations.py +0 -0
  146. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/tables.py +0 -0
  147. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/tutorial/updaters.py +0 -0
  148. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/examples/updater.py +0 -0
  149. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/index.md +0 -0
  150. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/catalog-migrations.md +0 -0
  151. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/configuration.md +0 -0
  152. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/hosted-runtime.md +0 -0
  153. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/local-runtime.md +0 -0
  154. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/recovery-and-observability.md +0 -0
  155. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/run-history.md +0 -0
  156. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/operations/run-logs.md +0 -0
  157. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/reference/capabilities.md +0 -0
  158. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/reference/cli.md +0 -0
  159. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/reference/python.md +0 -0
  160. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/security/ownership-and-sharing.md +0 -0
  161. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/docs/security/permissions.md +0 -0
  162. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/mkdocs.yml +0 -0
  163. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/__init__.py +0 -0
  164. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/build_reference.py +0 -0
  165. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_boundaries.py +0 -0
  166. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_client_api_coverage.py +0 -0
  167. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_distribution_sources.py +0 -0
  168. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_docs.py +0 -0
  169. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_examples_debug.py +0 -0
  170. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/check_project.py +0 -0
  171. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/dev_release_version.py +0 -0
  172. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/test_databases.py +0 -0
  173. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/scripts/test_postgresql.py +0 -0
  174. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/setup.cfg +0 -0
  175. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  176. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  177. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  178. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/__init__.py +0 -0
  179. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_admin_source.json +0 -0
  180. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_build.py +0 -0
  181. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/_skill_bundle.py +0 -0
  182. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/analysis.py +0 -0
  183. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/analyst/__init__.py +0 -0
  184. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/__init__.py +0 -0
  185. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/__init__.py +0 -0
  186. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/__init__.py +0 -0
  187. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/auth/local_actor.py +0 -0
  188. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/bootstrap.py +0 -0
  189. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/configuration.py +0 -0
  190. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/connection_count.py +0 -0
  191. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/credential_admin.py +0 -0
  192. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/development.py +0 -0
  193. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/development_client.py +0 -0
  194. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/error_logging.py +0 -0
  195. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/__init__.py +0 -0
  196. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/access_map.py +0 -0
  197. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/column_search.py +0 -0
  198. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/contract_validation.py +0 -0
  199. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/data_sources.py +0 -0
  200. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  201. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/migration_connection.py +0 -0
  202. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/namespaces.py +0 -0
  203. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/run_logs.py +0 -0
  204. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/runtime_context.py +0 -0
  205. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/schema_graph.py +0 -0
  206. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/security.py +0 -0
  207. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_cascade.py +0 -0
  208. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_crud.py +0 -0
  209. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_delete.py +0 -0
  210. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_filter.py +0 -0
  211. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_import.py +0 -0
  212. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_introspection.py +0 -0
  213. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_patch.py +0 -0
  214. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_registration.py +0 -0
  215. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_response.py +0 -0
  216. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_search.py +0 -0
  217. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_search_document.py +0 -0
  218. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_sql.py +0 -0
  219. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  220. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  221. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  222. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  223. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  224. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_batch.py +0 -0
  225. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  226. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_constants.py +0 -0
  227. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_crud.py +0 -0
  228. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_details.py +0 -0
  229. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_graph.py +0 -0
  230. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  231. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_registration.py +0 -0
  232. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_runs.py +0 -0
  233. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/routes/update_statistics.py +0 -0
  234. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime_control.py +0 -0
  235. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/runtime_database.py +0 -0
  236. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/source_passwords.py +0 -0
  237. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/app/transfer.py +0 -0
  238. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/__init__.py +0 -0
  239. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/__init__.py +0 -0
  240. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  241. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  242. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  243. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  244. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  245. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  246. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  247. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  248. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  249. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  250. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  251. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  252. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  253. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  254. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  255. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  256. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  257. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  258. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  259. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  260. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  261. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  262. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog.py +0 -0
  263. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  264. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  265. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  266. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/contracts.py +0 -0
  267. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/hosted.py +0 -0
  268. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  269. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  270. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/native.py +0 -0
  271. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/operations.py +0 -0
  272. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/pages.py +0 -0
  273. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  274. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/registry.py +0 -0
  275. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  276. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/relational.py +0 -0
  277. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  278. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  279. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/streaming.py +0 -0
  280. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/backends/timescale.py +0 -0
  281. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/__init__.py +0 -0
  282. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  283. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  284. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  285. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/contracts/values.py +0 -0
  286. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/__init__.py +0 -0
  287. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  288. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  289. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  290. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/label_rules.py +0 -0
  291. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/domain/update_constants.py +0 -0
  292. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/__init__.py +0 -0
  293. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  294. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  295. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  296. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  297. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  298. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  299. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  300. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  301. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  302. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  303. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/security_check_job.py +0 -0
  304. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  305. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/__init__.py +0 -0
  306. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/env.py +0 -0
  307. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  308. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  309. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  310. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  311. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  312. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  313. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  314. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  315. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  316. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  317. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  318. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  319. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  320. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
  321. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  322. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/__init__.py +0 -0
  323. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  324. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  325. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  326. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/create_table.py +0 -0
  327. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  328. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/import_relations.py +0 -0
  329. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  330. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  331. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  332. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/operations/security_check.py +0 -0
  333. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/__init__.py +0 -0
  334. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/cascade.py +0 -0
  335. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/catalog.py +0 -0
  336. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/database.py +0 -0
  337. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/grants.py +0 -0
  338. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/impact.py +0 -0
  339. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/labels.py +0 -0
  340. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/locking.py +0 -0
  341. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/models.py +0 -0
  342. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  343. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/projections.py +0 -0
  344. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  345. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  346. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  347. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  348. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  349. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/table_response.py +0 -0
  350. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  351. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  352. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/updates.py +0 -0
  353. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  354. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  355. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/__init__.py +0 -0
  356. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/documents.py +0 -0
  357. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/embeddings.py +0 -0
  358. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/index.py +0 -0
  359. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/ranking.py +0 -0
  360. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/text.py +0 -0
  361. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/backend/search/worker.py +0 -0
  362. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/__init__.py +0 -0
  363. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/configuration.yaml +0 -0
  364. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/metatables/main.py +0 -0
  365. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/api/request_timing.py +0 -0
  366. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/__init__.py +0 -0
  367. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/admin_install.py +0 -0
  368. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/app.py +0 -0
  369. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/filters.py +0 -0
  370. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/local.py +0 -0
  371. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/migrations.py +0 -0
  372. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/project.py +0 -0
  373. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/cli/skills.py +0 -0
  374. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/__init__.py +0 -0
  375. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/mssql.py +0 -0
  376. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/compiled_sql/v1.py +0 -0
  377. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/dtype_codec.py +0 -0
  378. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/endpoint.py +0 -0
  379. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/README.md +0 -0
  380. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/__init__.py +0 -0
  381. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/bounded_reader.py +0 -0
  382. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/README.md +0 -0
  383. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/mssql.json +0 -0
  384. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/mysql.json +0 -0
  385. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/postgresql.json +0 -0
  386. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/data_sources/register.py +0 -0
  387. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/external_table.py +0 -0
  388. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/README.md +0 -0
  389. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/__init__.py +0 -0
  390. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/__main__.py +0 -0
  391. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  392. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/env.py +0 -0
  393. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  394. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  395. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/local_app/tables.py +0 -0
  396. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/query.py +0 -0
  397. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/quickstart.py +0 -0
  398. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/reader.py +0 -0
  399. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/scripts/__init__.py +0 -0
  400. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  401. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tables.py +0 -0
  402. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/README.md +0 -0
  403. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/__init__.py +0 -0
  404. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/__main__.py +0 -0
  405. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/data/README.md +0 -0
  406. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  407. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/frames.py +0 -0
  408. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  409. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  410. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  411. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  412. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  413. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  414. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  415. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  416. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/operations.py +0 -0
  417. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/tables.py +0 -0
  418. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/tutorial/updaters.py +0 -0
  419. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/examples/updater.py +0 -0
  420. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/future_registry.py +0 -0
  421. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/hashing.py +0 -0
  422. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/instrumentation.py +0 -0
  423. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_connection.py +0 -0
  424. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_files.py +0 -0
  425. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/local_run_logs.py +0 -0
  426. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/log_contract.py +0 -0
  427. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/__init__.py +0 -0
  428. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/alembic.py +0 -0
  429. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/connection.py +0 -0
  430. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/env.py +0 -0
  431. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/provider.py +0 -0
  432. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/registry.py +0 -0
  433. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/runner.py +0 -0
  434. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/scaffold.py +0 -0
  435. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/sqlite.py +0 -0
  436. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/__init__.py +0 -0
  437. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/env.py.mako +0 -0
  438. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/templates/script.py.mako +0 -0
  439. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/migrations/tls.py +0 -0
  440. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/models.py +0 -0
  441. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/pydantic_metadata.py +0 -0
  442. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/run_logging.py +0 -0
  443. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime.py +0 -0
  444. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime_context.py +0 -0
  445. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/runtime_contract.py +0 -0
  446. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/schema_names.py +0 -0
  447. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/sqlalchemy_contracts.py +0 -0
  448. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/storage_layout_contract.py +0 -0
  449. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/time_index_table_refs.py +0 -0
  450. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transfer.py +0 -0
  451. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transfer_contract.py +0 -0
  452. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/transport.py +0 -0
  453. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/update_configuration_contract.py +0 -0
  454. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/__init__.py +0 -0
  455. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/configuration.py +0 -0
  456. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/dependencies.py +0 -0
  457. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/managers.py +0 -0
  458. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/namespacing.py +0 -0
  459. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/runner.py +0 -0
  460. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/updaters.py +0 -0
  461. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/updaters/utils.py +0 -0
  462. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/src/metatables/upload.py +0 -0
  463. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_api_search.py +0 -0
  464. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/analyst/test_tools.py +0 -0
  465. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  466. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_caller_endpoint.py +0 -0
  467. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_data_source_identity.py +0 -0
  468. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_development_client.py +0 -0
  469. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_hosted_agent.py +0 -0
  470. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_hosted_environment_target.py +0 -0
  471. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_local_mode.py +0 -0
  472. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_bootstrap.py +0 -0
  473. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_database.py +0 -0
  474. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_scaffold.py +0 -0
  475. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_selection.py +0 -0
  476. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_runtime_storage_binding.py +0 -0
  477. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/auth/test_source_passwords.py +0 -0
  478. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_catalog_foundation.py +0 -0
  479. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_contract_projection.py +0 -0
  480. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_database_config.py +0 -0
  481. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_index_statistics.py +0 -0
  482. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_migration.py +0 -0
  483. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/catalog/test_schema_validation.py +0 -0
  484. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/capabilities.json +0 -0
  485. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/client_signatures.json +0 -0
  486. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/database_operations.json +0 -0
  487. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_bounded_transfer.py +0 -0
  488. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_compiler_runtime_source.py +0 -0
  489. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_relation_batching.py +0 -0
  490. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_relation_import.py +0 -0
  491. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_runtime_contract_compat.py +0 -0
  492. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_storage_layouts.py +0 -0
  493. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/contracts/test_table_contracts.py +0 -0
  494. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/Dockerfile +0 -0
  495. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/Dockerfile.dockerignore +0 -0
  496. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/__init__.py +0 -0
  497. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/conftest.py +0 -0
  498. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/__init__.py +0 -0
  499. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/env.py +0 -0
  500. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  501. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_api_contract.py +0 -0
  502. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_application_migration.py +0 -0
  503. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  504. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_catalog_contract.py +0 -0
  505. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_credential_catalog.py +0 -0
  506. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_physical_contract.py +0 -0
  507. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_relation_import.py +0 -0
  508. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  509. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_backend/test_update_client.py +0 -0
  510. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_physical_operations.py +0 -0
  511. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_postgresql_operations.py +0 -0
  512. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  513. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/documentation/test_project_checks.py +0 -0
  514. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_admin_installation.py +0 -0
  515. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_api_endpoint.py +0 -0
  516. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_application_owned_migrations.py +0 -0
  517. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_catalog_outage.py +0 -0
  518. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_api_contract.py +0 -0
  519. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_api_coverage.py +0 -0
  520. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_migration_scaffold.py +0 -0
  521. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_migration_tls.py +0 -0
  522. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_package.py +0 -0
  523. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_signatures.py +0 -0
  524. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_client_value_behaviors.py +0 -0
  525. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_data_source_registry.py +0 -0
  526. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_actor_client_api.py +0 -0
  527. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_cli_workflow.py +0 -0
  528. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_local_client_selection.py +0 -0
  529. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  530. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
  531. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
  532. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_namespaces_admin_http.py +0 -0
  533. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_public_imports.py +0 -0
  534. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_remaining_client_routes.py +0 -0
  535. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_run_graphs.py +0 -0
  536. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_run_logs.py +0 -0
  537. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_runtime_upgrade.py +0 -0
  538. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_sdk_local_startup.py +0 -0
  539. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_sqlite_runtime.py +0 -0
  540. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_delete_client_api.py +0 -0
  541. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_filter_client_api.py +0 -0
  542. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_introspection_client_api.py +0 -0
  543. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_patch_client_api.py +0 -0
  544. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_api.py +0 -0
  545. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_document_api.py +0 -0
  546. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_search_scale.py +0 -0
  547. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_stats_api.py +0 -0
  548. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_update_pipeline.py +0 -0
  549. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_table_updates_http.py +0 -0
  550. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  552. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  553. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_batch_client_api.py +0 -0
  554. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  555. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  556. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  557. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/e2e/test_update_registration_client_api.py +0 -0
  558. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_documented_examples.py +0 -0
  559. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_postgresql_examples.py +0 -0
  560. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_setup_launch.py +0 -0
  561. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/examples/test_tutorial.py +0 -0
  562. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_batch_introspection.py +0 -0
  563. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_connection_reuse.py +0 -0
  564. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_credential_store.py +0 -0
  565. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_data_source_rules.py +0 -0
  566. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_local_data_sources.py +0 -0
  567. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_local_run_logs.py +0 -0
  568. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_connection.py +0 -0
  569. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_sql.py +0 -0
  570. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_tables.py +0 -0
  571. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  572. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_request_timing.py +0 -0
  573. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_serving_policy.py +0 -0
  574. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_source_validation.py +0 -0
  575. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/integrations/test_sqlite_operations.py +0 -0
  576. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/labels/test_labels.py +0 -0
  577. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_create_table_operation.py +0 -0
  578. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_create_table_postgres.py +0 -0
  579. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_physical_operation_journal.py +0 -0
  580. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_register_catalog.py +0 -0
  581. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_search_documents.py +0 -0
  582. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/operations/test_timescale_policies.py +0 -0
  583. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_client_skills.py +0 -0
  584. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_dev_release_version.py +0 -0
  585. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_distribution_sources.py +0 -0
  586. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_editable_build.py +0 -0
  587. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/packaging/test_installed_distribution.py +0 -0
  588. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_access_map.py +0 -0
  589. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_governed_sql_scope.py +0 -0
  590. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_incremental_security.py +0 -0
  591. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_local_actor_membership.py +0 -0
  592. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_migration_boundary.py +0 -0
  593. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_namespace_grants.py +0 -0
  594. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_security_api.py +0 -0
  595. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_security_check.py +0 -0
  596. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_body_filter.py +0 -0
  597. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_grants.py +0 -0
  598. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_table_queries.py +0 -0
  599. {mainsequence_metatable-0.1.36.dev67 → mainsequence_metatable-0.1.37.dev69}/tests/permissions/test_workload_principals.py +0 -0
@@ -1,7 +1,7 @@
1
1
  schema=1
2
2
  library_name=ms-tau-sdk
3
3
  namespace=ms_tau_sdk
4
- pinned_version=2.0.10
4
+ pinned_version=2.0.16
5
5
  skills_path=src/ms_tau_sdk/agent_skills
6
6
  skills=tau_a2a_runtime_adapter,tau_local_development,tau_project_customization,tau_repository_integration,tau_security_and_access
7
7
  command=ms-tau skills sync --path .
@@ -54,6 +54,11 @@ For a deployed Agent, use the projected `a2a.send_message` MCP operation. The pl
54
54
  resolves the target `AgentSession`, waits for its runtime to become ready, and dispatches the
55
55
  message. For asynchronous work, use the returned Task handle with `a2a.wait_task`.
56
56
 
57
+ The platform gives a direct Message (`response_kind: "message"`) 90 seconds, and no setting
58
+ extends that limit. A target that has not answered by then stops its turn, and the send fails
59
+ because of the limit. Send work that may take longer with `response_kind: "task"`, and do not
60
+ resend a Message that ran out of time: the work it already did is not rolled back.
61
+
57
62
  For local Tau development, start `ms-tau` and wait for its local `/ready` result. The public A2A
58
63
  REST and JSON-RPC surfaces support Message and Task execution against the workspace-local SQLite
59
64
  store, including streaming, list/get/cancel/subscribe, and continuation. An A2A protocol Task does
@@ -35,9 +35,9 @@ The SDK looks for the CLI in `MAINSEQUENCE_CLI`, then beside the Python interpre
35
35
  CLI. Do not add token lines to `.env`. A pair found there still works, but it is deprecated and
36
36
  startup logs a warning. `mainsequence refresh-token` run in that directory removes the lines.
37
37
 
38
- Do not set `APP_NAME`, `FASTAPI_PUBLIC_BASE_URL`, `MAINSEQUENCE_CALLER_AUTH_MODE=assertion`, or the
39
- `MAINSEQUENCE_CALLER_ASSERTION_*` variables. The platform sets them when it hosts a runtime, and
40
- local mode refuses to start with them.
38
+ Do not set `APP_NAME`, `FASTAPI_PUBLIC_BASE_URL`, `MAINSEQUENCE_CALLER_AUTH_MODE=assertion`, the
39
+ `MAINSEQUENCE_CALLER_ASSERTION_*` variables or `MAINSEQUENCE_A2A_MESSAGE_LIMIT_SECONDS`. The
40
+ platform sets them when it hosts a runtime, and local mode refuses to start with them.
41
41
 
42
42
  Set `MAINSEQUENCE_ENDPOINT` only for a non-default platform endpoint. The CLI session must be for
43
43
  the same endpoint. Local mode binds to `127.0.0.1:8787` by default. Treat an explicit public bind
@@ -118,6 +118,11 @@ To request a Task from `message:send`, send the response-kind extension header
118
118
  response. `message:stream` is always Task-oriented and does not accept `responseKind` or
119
119
  `returnImmediately`.
120
120
 
121
+ Local mode has no platform Message limit: a direct Message ends only at
122
+ `MAINSEQUENCE_TAU_TURN_TIMEOUT_SECONDS`. A hosted Agent answers a direct Message within the
123
+ platform's 90 seconds or with HTTP 504 `DEADLINE_EXCEEDED`, so design work that may take longer as
124
+ a Task.
125
+
121
126
  Task terminality is derived only from its A2A state. `completed`, `failed`, `canceled`, and
122
127
  `rejected` are terminal; `input_required` and `auth_required` are resumable. A normal execution
123
128
  failure produces a durable failed Task and a standard responder `status.message`. A
@@ -26,8 +26,13 @@ second SDK-specific prompt override or companion append file. Other resources fo
26
26
  version pinned by the installed SDK.
27
27
 
28
28
  `.agents/skills/ms_tau_sdk/` is different: it contains managed development instructions for coding
29
- agents working on the repository. It is not loaded as the runtime's `.tau` behavior and must not be
30
- used as application configuration.
29
+ agents working on the repository. It is not the runtime's `.tau` behavior and must not be used as
30
+ application configuration.
31
+
32
+ Tau reads skills in `.tau/skills/` and `.agents/skills/` at any depth: a folder without a
33
+ `SKILL.md` groups skills, such as `.agents/skills/mcp_tools/<skill>/SKILL.md`, the folder an
34
+ application can publish with the mainsequence SDK's skills publisher. The managed skills in
35
+ `.agents/skills/ms_tau_sdk/` are read too.
31
36
 
32
37
  ## Extension ownership
33
38
 
@@ -74,7 +79,7 @@ Task controls requires an actual Task context and is specified by ADR 0015.
74
79
  The A2A Task controls are `task_request_input` and `task_request_authorization`. They remain
75
80
  available in every mode for the agent's own Task; extensions must not register those names.
76
81
  Register project tools under `.tau/extensions/` and verify the effective catalog after loading.
77
- With base tools excluded, the skill-scoped `read` keeps `.tau/skills/` available: it opens a
82
+ With base tools excluded, the skill-scoped `read` keeps the project skills available: it opens a
78
83
  discovered skill's `SKILL.md` and the files in its directory, such as `references/*.md`, and
79
84
  rejects every other path, including symlinks that resolve outside the skill. Tau lists the skills
80
85
  in the system prompt because a tool named `read` exists. Extensions must not register `read` in
@@ -96,6 +101,16 @@ retry guidance for up to `TAU_MCP_APPLICATION_READY_TIMEOUT_SECONDS` (default `1
96
101
  turn time. This startup budget is separate from the tool's execution limit; an expired readiness
97
102
  wait reports `readiness_timeout`. Cancellation, ended delegation and terminal refusals stop the wait.
98
103
 
104
+ ## Skills that applications publish
105
+
106
+ A declared application can publish Agent Skills through the MCP Skills extension, as the
107
+ mainsequence SDK's skills publisher does. The Agent lists them with `<name>__list_resources` and
108
+ reads one file with `<name>__read_resource`; a skill file is returned only when its bytes match the
109
+ size and SHA-256 digest the skill lists. Published skills stay the application's: they are not
110
+ project skills under `.tau/skills/`, and fields such as `allowed-tools` grant nothing. With the
111
+ coding tools, a model that follows a published skill can run commands; set
112
+ `TAU_EXCLUDE_BASE_TOOLS=true` when that must not happen.
113
+
99
114
  ## Invariants extensions must not replace
100
115
 
101
116
  Extensions may change effective agent capabilities, but they must not replace or bypass:
@@ -143,10 +158,13 @@ async def revenue_by_region(tool_call_id, arguments, signal=None, on_update=None
143
158
  return AgentToolResult(content=[TextContent(text=json.dumps(answer.json()["rows"]))])
144
159
  ```
145
160
 
146
- - `current_requester()` returns the person the turn serves, with `uid` and `team_uids`, or
147
- `None`. The platform names that person when the turn starts, whoever called; it is `None` when
148
- the platform names nobody, in local mode, and in code outside a turn. Only it names the
149
- requester: never take a person's UID from tool arguments, the prompt, history, or a header.
161
+ - `current_requester()` returns the person the turn serves, with `uid` and
162
+ `await in_teams(team_uids, *, max_age_seconds=None)`, or `None`. `in_teams()` answers while the
163
+ person is the verified caller of the turn's request (see `tau_security_and_access`, "Checking the
164
+ person's teams"); `team_uids` is deprecated. The platform names that person when the turn
165
+ starts, whoever called; it is `None` when the platform names nobody, in local mode, and in code
166
+ outside a turn. Only it names the requester: never take a person's UID from tool arguments, the
167
+ prompt, history, or a header.
150
168
  - `platform_client()` returns a client. `await client.request("GET", "/api/v1/...")` calls a
151
169
  platform API path, and `await client.call_release(release_uid, method, path, ...)` calls another
152
170
  platform application. Both return an `httpx.Response`.
@@ -167,8 +185,6 @@ Rules for tools that act for the requester:
167
185
  - A delegated call uses the person's ordinary permissions, including administrative ones; any other
168
186
  call uses the Agent's own. Each operation decides what it needs. Never infer write permission
169
187
  from view access.
170
- - This needs the platform's matching change, deployed in the same cutover; check the deployed
171
- platform and the installed SDK before depending on it.
172
188
  - Return to the model only business results, such as rows, numbers, and names. Never return the
173
189
  response object, its headers, a token, a proof, or a raw error body.
174
190
  - Keep nothing for another turn or another person. The delegation ends with the turn, and a task
@@ -178,7 +178,13 @@ What makes it safe:
178
178
 
179
179
  A delegated read returns anything the person can view in the Agent's Environment: what they
180
180
  created and what others shared with them, directly or through a team. This holds for Secrets and
181
- every other object. The platform enforces sharing; which of those objects a tool uses is part of
181
+ other shared resources. Ordinary Teams use explicit membership: the creator is added once and
182
+ can be removed; current Organization admins are protected writer members. Removing the admin
183
+ role keeps membership and writer access but ends protection. Only Organization admins manage
184
+ membership, and managing a workload that created a Team does not grant Team control. A Team's
185
+ members still receive the resources shared with it. The Full directory remains unchanged.
186
+ See the SDK Security and access guide's **Teams and membership** section for platform rollout.
187
+ The platform enforces sharing; which of those objects a tool uses is part of
182
188
  the tool's design. For Secrets, the naming convention states that design:
183
189
 
184
190
  - **A personal credential:** a name tied to the person, such as `QUOTES_API_KEY__<person uid>`.
@@ -201,6 +207,33 @@ How sharing works:
201
207
  tool can use them when its design needs to, for example to refuse a team key where it expects a
202
208
  personal one. That is a choice of the tool, not a platform rule.
203
209
 
210
+ ## Checking the person's teams
211
+
212
+ A delegated call already reaches exactly what the person can, including what is shared with their
213
+ teams, so a tool rarely checks teams itself. When the tool's own policy names teams, ask the
214
+ platform with `in_teams()`:
215
+
216
+ ```python
217
+ person = current_requester()
218
+ if person is None or REPORTS_TEAM_UID not in await person.in_teams([REPORTS_TEAM_UID]):
219
+ return AgentToolResult(content=[TextContent(text="These reports are for the team's members.")])
220
+ ```
221
+
222
+ - `await in_teams(team_uids, *, max_age_seconds=None)` returns the subset of `team_uids` the
223
+ person is an active member of, as a `frozenset`. Unknown and inactive teams are left out.
224
+ - On the turn's requester it answers only while that person is the verified caller of the request
225
+ the turn runs in, such as a chat or A2A Message they sent. A turn with no such request raises
226
+ `TauSDKError`: a Task attempt the platform dispatches, a turn that resumes a caller delivery, or
227
+ work another Agent asked for. Refuse the action then; never read the error as a membership
228
+ answer. An HTTP handler asks for its caller with `await request.state.user.in_teams(...)`.
229
+ - The process reuses an answer across requests for `TAU_TEAM_MEMBERSHIP_CACHE_SECONDS` (default
230
+ `0`: only within its request); set it in `harness_agent.spec.env_vars`. `max_age_seconds=0`
231
+ always asks the platform: use it before a write that must see a removal at once.
232
+ - A check the platform cannot answer raises `BackendError`; it never answers "not a member".
233
+ - `team_uids` on the requester is deprecated and warns when read. It is empty when the turn does
234
+ not know the person's teams, and raises when the caller's assertion carried no team list, as
235
+ every assertion will once the platform stops signing them. Use `in_teams()`.
236
+
204
237
  ## What never reaches the model
205
238
 
206
239
  Tool results, their `details`, and errors can reach the model provider and the session history.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.36.dev67
3
+ Version: 0.1.37.dev69
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: mainsequence[mcp]<10,>=9.0.19
17
+ Requires-Dist: mainsequence[mcp]<10,>=9.0.26
18
18
  Requires-Dist: alembic<2,>=1.18
19
19
  Requires-Dist: cachetools
20
20
  Requires-Dist: cryptography<51,>=46
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
51
51
  Provides-Extra: docs
52
52
  Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
53
53
  Provides-Extra: agent
54
- Requires-Dist: ms-tau-sdk==2.0.10; extra == "agent"
54
+ Requires-Dist: ms-tau-sdk==2.0.16; extra == "agent"
55
55
  Provides-Extra: mysql
56
56
  Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
57
57
  Provides-Extra: mssql
@@ -9,6 +9,16 @@ launcher declaration, genuine EdDSA caller assertions verified by the SDK, rejec
9
9
  callers, Local isolation, and PodDeploymentOrchestrator's own launcher run against
10
10
  the deployed entrypoint. A hosted rollout has not yet been verified.
11
11
 
12
+ > Amendment (2026-10-15, SDK #225): caller assertions stop carrying Team UIDs.
13
+ > Admission asks the platform with `in_teams()` which of the Teams that MetaTables
14
+ > grants name the caller, or the requester of a delegated call, belongs to. The SDK
15
+ > reuses an answer for 24 hours (`team_membership_cache_seconds`). SQL writes act
16
+ > on an answer at most a minute old; migration credentials, table deletion,
17
+ > finalization and permission changes ask at once. A SQL login's stored Teams, and
18
+ > so its database role memberships, change only on a fresh answer, so pods holding
19
+ > answers of different ages cannot flip them. A failed check is a 503, never "not a
20
+ > member".
21
+
12
22
  Owner: MetaTables API. The SDK owns caller verification
13
23
  ([SDK 9.0.6 ADR 0036: Request-scoped logged user](https://github.com/mainsequence-sdk/mainsequence-sdk/blob/v9.0.6/docs/adr/0036-request-scoped-logged-user.md));
14
24
  the platform's FastAPI launcher owns the startup check.
@@ -22,11 +22,13 @@ other SDK mode. Once it is installed, every route not declared in the deployment
22
22
  MetaTables declares no anonymous route. A hosted API started without that
23
23
  configuration installs nothing, and admission rejects every caller.
24
24
 
25
- The assertion also carries the caller's active Team UIDs and admin flag, which
26
- the SDK exposes on `User.get_logged_user()`. Admission uses them as signed and
27
- performs no User lookup, so workload Users, such as applications and Jobs that run
28
- as their own User, are admitted like people. Each request's assertion states
29
- current facts, so hosted facts are not cached. The API evaluates table/namespace
25
+ The assertion also carries the caller's admin flag, which the SDK exposes on
26
+ `User.get_logged_user()`. Admission uses it as signed and performs no User lookup,
27
+ so workload Users, such as applications and Jobs that run as their own User, are
28
+ admitted like people. Team membership is asked of the platform with `in_teams()`,
29
+ only for the Teams MetaTables grants name, and reused for 24 hours; writes use an
30
+ answer at most a minute old, and credential, deletion and permission requests ask
31
+ at once. When the platform cannot answer, the request fails with 503. The API evaluates table/namespace
30
32
  grants in its runtime database. User and Team facts remain platform-owned; no local
31
33
  membership registry is used. This adds no authentication mechanism.
32
34
 
@@ -5025,7 +5025,7 @@
5025
5025
  },
5026
5026
  "/caller/": {
5027
5027
  "get": {
5028
- "description": "Who this request runs as: the User, Teams and admin flag the API admitted, named\nthrough the platform directory as that User sees it.\n\nHosted, the identity comes from the platform-signed caller assertion (ADR 0017);\nLocal and developer runtimes admit the developer's own SDK session.",
5028
+ "description": "Who this request runs as: the User, Teams and admin flag the API admitted, named\nthrough the platform directory as that User sees it.\n\nHosted, the identity comes from the platform-signed caller assertion (ADR 0017),\nand the Teams are those MetaTables grants name that the caller belongs to (SDK\n#225); Local and developer runtimes admit the developer's own SDK session.",
5029
5029
  "operationId": "admitted_caller_caller__get",
5030
5030
  "responses": {
5031
5031
  "200": {
@@ -20,7 +20,8 @@ TimescaleDB, MySQL or MSSQL runtime DataSource their deployment declares, for bo
20
20
  roles; the deployment's migration Job initializes it. Local Settings initializes or
21
21
  selects the SQLite file. Both use the same bootstrap operation.
22
22
 
23
- The SDK supplies trusted User identity, active Team UIDs, Organization admin status,
23
+ The SDK supplies trusted User identity, membership answers for the Teams MetaTables
24
+ grants name, Organization admin status,
24
25
  and independent Git source facts. MetaTables owns workspace identity and
25
26
  Reader/Writer table/namespace grants. It does not store an independent membership
26
27
  registry or replicate platform Organization policy. See the implemented
@@ -66,6 +66,8 @@ The minimum and lockfile now select published SDK `9.0.19`. SDK 9.0.14 is the fi
66
66
  caller and to name workloads
67
67
  ([ADR 0002](../adr/api/0002-application-administration-and-table-ownership.md)).
68
68
  SDK 9.0.10 is the first whose `User` reads workload User rows.
69
+ The repository requires SDK 9.0.26, whose request identity asks Team membership on
70
+ demand with `in_teams()` (SDK #225); caller assertions stop carrying Team UIDs.
69
71
  SDK 9.0.9 is the first whose request identity exposes the caller's signed Team UIDs
70
72
  and admin flag; hosted admission needs them to admit workload Users
71
73
  ([#37](https://github.com/mainsequence-projects/MetaTables/issues/37)). SDK 9.0.4 is the first
@@ -98,11 +98,17 @@ choice, not an authorization mechanism.
98
98
  Use the compatible published SDK prerequisite described in
99
99
  [installation](../client/installation-and-connection.md). In hosted mode the SDK
100
100
  request identity verifies the existing signed caller assertion. Admission takes the
101
- caller, its active Team UIDs and its admin flag from `User.get_logged_user()`, as
102
- the platform signed them, and looks up no User
101
+ caller and its admin flag from `User.get_logged_user()`, as the platform signed
102
+ them, and looks up no User
103
103
  ([ADR 0017](../adr/api/0017-hosted-request-identity.md)). Workload Users are
104
- admitted like people. An assertion without those facts admits the caller with no
105
- Teams and no admin access. Local admission resolves facts for the running SDK user,
104
+ admitted like people. The assertion carries no Teams: admission asks the platform,
105
+ with `in_teams()`, which of the Teams that MetaTables grants name the caller belongs
106
+ to. Each pod reuses an answer for 24 hours, so a person removed from a Team can
107
+ keep reading through that Team's grants for up to a day. Writes act on an answer
108
+ at most a minute old. Migration credentials, table deletion, finalization and
109
+ permission changes always ask the platform at once, and a login's database role
110
+ memberships change only on such a fresh answer. A failed check fails the request;
111
+ it never counts as "not a member". Local admission resolves facts for the running SDK user,
106
112
  whose platform User response must supply `is_organization_admin` and
107
113
  `active_team_uids`.
108
114
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.36.dev67"
7
+ version = "0.1.37.dev69"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -18,7 +18,7 @@ classifiers = [
18
18
  "Operating System :: OS Independent",
19
19
  ]
20
20
  dependencies = [
21
- "mainsequence[mcp]>=9.0.19,<10",
21
+ "mainsequence[mcp]>=9.0.26,<10",
22
22
  "alembic>=1.18,<2",
23
23
  "cachetools",
24
24
  "cryptography>=46,<51",
@@ -59,7 +59,7 @@ Documentation = "https://potential-doodle-wn39mnm.pages.github.io/"
59
59
  [project.optional-dependencies]
60
60
  dev = ["pytest>=8,<10", "ruff>=0.14", "build>=1,<2", "packaging>=24.2", "twine>=6,<7"]
61
61
  docs = ["mkdocs>=1.6,<2"]
62
- agent = ["ms-tau-sdk==2.0.10"]
62
+ agent = ["ms-tau-sdk==2.0.16"]
63
63
  mysql = ["PyMySQL[rsa]>=1.1.1,<1.2"]
64
64
  # Keep the published extra name for existing installers; pyodbc is required.
65
65
  mssql = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.36.dev67
3
+ Version: 0.1.37.dev69
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -14,7 +14,7 @@ Classifier: Operating System :: OS Independent
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: mainsequence[mcp]<10,>=9.0.19
17
+ Requires-Dist: mainsequence[mcp]<10,>=9.0.26
18
18
  Requires-Dist: alembic<2,>=1.18
19
19
  Requires-Dist: cachetools
20
20
  Requires-Dist: cryptography<51,>=46
@@ -51,7 +51,7 @@ Requires-Dist: twine<7,>=6; extra == "dev"
51
51
  Provides-Extra: docs
52
52
  Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
53
53
  Provides-Extra: agent
54
- Requires-Dist: ms-tau-sdk==2.0.10; extra == "agent"
54
+ Requires-Dist: ms-tau-sdk==2.0.16; extra == "agent"
55
55
  Provides-Extra: mysql
56
56
  Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
57
57
  Provides-Extra: mssql
@@ -206,6 +206,7 @@ src/metatables/api/app/transfer.py
206
206
  src/metatables/api/app/auth/__init__.py
207
207
  src/metatables/api/app/auth/boundary.py
208
208
  src/metatables/api/app/auth/local_actor.py
209
+ src/metatables/api/app/auth/team_membership.py
209
210
  src/metatables/api/app/routes/__init__.py
210
211
  src/metatables/api/app/routes/access_map.py
211
212
  src/metatables/api/app/routes/caller.py
@@ -468,6 +469,7 @@ tests/auth/test_runtime_scaffold.py
468
469
  tests/auth/test_runtime_selection.py
469
470
  tests/auth/test_runtime_storage_binding.py
470
471
  tests/auth/test_source_passwords.py
472
+ tests/auth/test_team_membership.py
471
473
  tests/catalog/test_catalog_foundation.py
472
474
  tests/catalog/test_contract_projection.py
473
475
  tests/catalog/test_database_config.py
@@ -1,4 +1,4 @@
1
- mainsequence[mcp]<10,>=9.0.19
1
+ mainsequence[mcp]<10,>=9.0.26
2
2
  alembic<2,>=1.18
3
3
  cachetools
4
4
  cryptography<51,>=46
@@ -28,7 +28,7 @@ urllib3>=2.7.0
28
28
  uvicorn==0.52.4
29
29
 
30
30
  [agent]
31
- ms-tau-sdk==2.0.10
31
+ ms-tau-sdk==2.0.16
32
32
 
33
33
  [dev]
34
34
  pytest<10,>=8
@@ -2,11 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from dataclasses import dataclass
5
+ from collections.abc import Callable
6
+ from dataclasses import dataclass, field
6
7
  from uuid import UUID
7
8
 
8
9
  from fastapi import Depends, HTTPException, Request
9
10
 
11
+ from metatables.api.app.auth.team_membership import request_max_age, team_checker
10
12
  from metatables.api.app.runtime import RuntimeState
11
13
  from metatables.api.backend.domain.permission_rules import TrustedActorFacts
12
14
  from metatables.api.request_timing import thread_started
@@ -22,6 +24,8 @@ class AdmittedCaller:
22
24
  environment_uid: UUID | None = None
23
25
  active_team_uids: frozenset[UUID] = frozenset()
24
26
  is_admin: bool = False
27
+ check_teams: Callable[[float | None], frozenset[UUID]] | None = field(
28
+ default=None, compare=False, repr=False)
25
29
 
26
30
 
27
31
  def admit_request(request: Request) -> AdmittedCaller:
@@ -55,13 +59,16 @@ def admit_request(request: Request) -> AdmittedCaller:
55
59
  route = getattr(request.scope.get("route"), "path", None)
56
60
  if request.method not in {"GET", "HEAD", "OPTIONS"} and route not in DELEGATED_READ_POSTS:
57
61
  raise HTTPException(403, "A call made for a person by another application can only read.")
62
+ check = team_checker(request, requester)
58
63
  return AdmittedCaller(
59
64
  user_uid=UUID(requester.uid), environment_uid=environment_uid,
60
- active_team_uids=frozenset(UUID(uid) for uid in requester.team_uids),
65
+ active_team_uids=check(request_max_age(request)), check_teams=check,
61
66
  )
67
+ # The assertion no longer lists teams: ask about the teams MetaTables grants name.
68
+ check = team_checker(request, caller)
62
69
  return AdmittedCaller(
63
70
  user_uid=UUID(caller.uid), is_admin=caller.is_organization_admin,
64
- active_team_uids=frozenset(UUID(uid) for uid in caller.team_uids),
71
+ active_team_uids=check(request_max_age(request)), check_teams=check,
65
72
  environment_uid=environment_uid,
66
73
  )
67
74
 
@@ -70,9 +77,9 @@ def logged_user():
70
77
  """Return the caller that the SDK request identity verified for this request.
71
78
 
72
79
  The SDK verifies the platform-signed caller assertion once, before any route
73
- runs, and answers missing or invalid proof itself. The assertion also carries
74
- the caller's active Team UIDs and admin flag, so hosted admission needs no User
75
- lookup and admits people and workload Users alike. When no caller is bound, for
80
+ runs, and answers missing or invalid proof itself. The assertion carries the
81
+ caller's admin flag; team membership is asked of the platform on demand (SDK
82
+ #225). Admission admits people and workload Users alike. When no caller is bound, for
76
83
  example on a hosted API started without the platform's trust configuration,
77
84
  admission fails; there is no header or process-account fallback.
78
85
  """
@@ -103,7 +110,8 @@ def platform_facts(identity):
103
110
 
104
111
  def trusted_actor_facts(caller: AdmittedCaller = Depends(admit_request)) -> TrustedActorFacts:
105
112
  return TrustedActorFacts(user_uid=caller.user_uid, user_active=True,
106
- active_team_uids=caller.active_team_uids, is_admin=caller.is_admin)
113
+ active_team_uids=caller.active_team_uids, is_admin=caller.is_admin,
114
+ check_teams=caller.check_teams)
107
115
 
108
116
 
109
117
  def require_admin(caller: AdmittedCaller = Depends(admit_request)) -> AdmittedCaller:
@@ -0,0 +1,104 @@
1
+ """Team membership of hosted callers, asked of the platform on demand (SDK #225).
2
+
3
+ The caller assertion no longer carries a team list. MetaTables asks the platform,
4
+ with ``in_teams()``, about the only teams that can matter here: the teams its own
5
+ namespace and table grants name. How old an answer may be depends on what the
6
+ request does:
7
+
8
+ - reads reuse an answer for a day (Jose, 2026-10-15): a person removed from a team
9
+ can keep reading through that team's grants for up to 24 hours;
10
+ - data and SQL writes accept an answer at most a minute old;
11
+ - issuing migration credentials, deleting tables, finalizing and changing
12
+ permissions always ask the platform now.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import itertools
18
+ from collections.abc import Callable
19
+ from uuid import UUID
20
+
21
+ from fastapi import HTTPException, Request
22
+ from sqlalchemy import event, select, union
23
+ from sqlalchemy.orm import Session
24
+
25
+ from metatables.api.backend.persistence.models import MetaTableGrant, NamespaceGrant
26
+
27
+ TEAM_MEMBERSHIP_CACHE_SECONDS = 24 * 60 * 60
28
+ # Routes whose effect a stale "member" answer must never authorize.
29
+ FRESH_ROUTES = frozenset({
30
+ ("POST", "/meta-tables/{table_uid}/migration-connection/"),
31
+ ("POST", "/meta-tables/finalize-managed/"),
32
+ ("DELETE", "/meta-tables/{table_uid}/"),
33
+ ("POST", "/meta-tables/{table_uid}/delete-with-cascade/"),
34
+ ("POST", "/time-index-meta-tables/{table_uid}/delete-after-date/"),
35
+ ("PUT", "/meta-tables/{uid}/permissions"),
36
+ ("PUT", "/namespaces/{uid}/permissions"),
37
+ })
38
+
39
+ _grant_changes = itertools.count()
40
+ _grant_generation = 0
41
+
42
+
43
+ def _grants_flushed(session: Session, _context) -> None:
44
+ if any(isinstance(row, (NamespaceGrant, MetaTableGrant))
45
+ for row in (*session.new, *session.dirty, *session.deleted)):
46
+ session.info["grant_teams_changed"] = True
47
+
48
+
49
+ def _grants_committed(session: Session) -> None:
50
+ global _grant_generation
51
+ if session.info.pop("grant_teams_changed", False):
52
+ _grant_generation = next(_grant_changes) + 1
53
+
54
+
55
+ event.listen(Session, "after_flush", _grants_flushed)
56
+ event.listen(Session, "after_commit", _grants_committed)
57
+ event.listen(Session, "after_rollback", lambda session: session.info.pop("grant_teams_changed", None))
58
+
59
+
60
+ def grant_teams(request: Request) -> frozenset[str]:
61
+ """The teams this catalog's grants name; none before a catalog is active."""
62
+ from metatables.api.app.auth.local_actor import active_catalog_factory
63
+
64
+ factory = active_catalog_factory(request.app)
65
+ if factory is None:
66
+ return frozenset()
67
+
68
+ def load() -> frozenset[str]:
69
+ query = union(
70
+ select(NamespaceGrant.principal_uid).where(NamespaceGrant.principal_kind == "team"),
71
+ select(MetaTableGrant.principal_uid).where(MetaTableGrant.principal_kind == "team"),
72
+ )
73
+ with factory() as session:
74
+ return frozenset(str(uid) for uid in session.scalars(query))
75
+
76
+ try:
77
+ return request.app.state.runtime.grant_teams.get(_grant_generation, load)
78
+ except Exception as exc:
79
+ raise HTTPException(503, "MetaTables catalog is unavailable.") from exc
80
+
81
+
82
+ def team_checker(request: Request, person) -> Callable[[float | None], frozenset[UUID]]:
83
+ """Ask which of the grant teams ``person`` belongs to, no older than ``max_age``.
84
+
85
+ ``None`` reuses the day-long answer; failures fail the request and are never
86
+ read as "not a member".
87
+ """
88
+ teams = grant_teams(request)
89
+
90
+ def check(max_age: float | None) -> frozenset[UUID]:
91
+ if not teams:
92
+ return frozenset()
93
+ try:
94
+ members = person.in_teams(teams, max_age_seconds=max_age)
95
+ except Exception as exc:
96
+ raise HTTPException(503, "Team membership is unavailable.") from exc
97
+ return frozenset(UUID(uid) for uid in members)
98
+
99
+ return check
100
+
101
+
102
+ def request_max_age(request: Request) -> float | None:
103
+ route = getattr(request.scope.get("route"), "path", None)
104
+ return 0 if (request.method, route) in FRESH_ROUTES else None
@@ -128,7 +128,9 @@ def install_hosted_request_identity(service: FastAPI, config: RuntimeConfig) ->
128
128
  return
129
129
  if not any(os.environ.get(name) for name in PLATFORM_CALLER_AUTHENTICATION):
130
130
  return
131
- install_request_identity(service)
131
+ from metatables.api.app.auth.team_membership import TEAM_MEMBERSHIP_CACHE_SECONDS
132
+ # Membership answers are reused for a day; writes and credentials ask sooner (SDK #225).
133
+ install_request_identity(service, team_membership_cache_seconds=TEAM_MEMBERSHIP_CACHE_SECONDS)
132
134
  if service.state.mainsequence_request_identity["mode"] != "assertion":
133
135
  raise RuntimeError(
134
136
  "The hosted MetaTables API accepts only platform caller assertions. "
@@ -37,22 +37,21 @@ class ApiCallError(RuntimeError):
37
37
 
38
38
  def install_metatables_mcp(app) -> None:
39
39
  """Serve the read tools at ``/mcp``; request identity must already be installed."""
40
- server = Server("MetaTables", instructions=INSTRUCTIONS)
41
40
  tools = {tool.name: tool for tool in TOOLS}
42
41
 
43
- @server.list_tools()
44
- async def list_tools() -> list[types.Tool]:
45
- # `_meta` is the field's wire alias; `meta=` would be dropped as an unknown key.
46
- return [types.Tool(name=tool.name, title=tool.label, description=tool.description,
47
- inputSchema=tool.parameters,
48
- **{"_meta": {TIMEOUT_META_KEY: tool.timeout_seconds}}) for tool in TOOLS]
42
+ async def list_tools(ctx, params) -> types.ListToolsResult:
43
+ return types.ListToolsResult(tools=[
44
+ types.Tool(name=tool.name, title=tool.label, description=tool.description,
45
+ input_schema=tool.parameters, meta={TIMEOUT_META_KEY: tool.timeout_seconds})
46
+ for tool in TOOLS
47
+ ])
49
48
 
50
- @server.call_tool()
51
- async def call_tool(name: str, arguments: dict[str, Any]) -> types.CallToolResult:
52
- tool = tools.get(name)
49
+ async def call_tool(ctx, params: types.CallToolRequestParams) -> types.CallToolResult:
50
+ tool = tools.get(params.name)
53
51
  if tool is None:
54
- raise ValueError(f"Unknown tool: {name}.")
55
- assertion = server.request_context.request.headers.get(ASSERTION_HEADER)
52
+ raise ValueError(f"Unknown tool: {params.name}.")
53
+ arguments: dict[str, Any] = dict(params.arguments or {})
54
+ assertion = ctx.request.headers.get(ASSERTION_HEADER)
56
55
  loop = asyncio.get_running_loop()
57
56
 
58
57
  def api(method: str, path: str, *, params: dict | None = None, json: Any = None) -> Any:
@@ -67,9 +66,10 @@ def install_metatables_mcp(app) -> None:
67
66
  result = {"error": str(exc)}
68
67
  return types.CallToolResult(
69
68
  content=[types.TextContent(type="text", text=json.dumps(result, default=str))],
70
- isError="error" in result,
69
+ is_error="error" in result,
71
70
  )
72
71
 
72
+ server = Server("MetaTables", instructions=INSTRUCTIONS, on_list_tools=list_tools, on_call_tool=call_tool)
73
73
  manager = StreamableHTTPSessionManager(app=server, json_response=True, stateless=True)
74
74
  install_mcp(app, manager.handle_request, lifespan=manager.run)
75
75
 
@@ -7,6 +7,8 @@ from threading import Lock
7
7
  from time import monotonic
8
8
 
9
9
  PLATFORM_FACTS_TTL_SECONDS = 60 * 60
10
+ # Other pods see a new team grant within this time; the pod that wrote it at once.
11
+ GRANT_TEAMS_SECONDS = 60
10
12
 
11
13
 
12
14
  class PlatformCache[K, V]:
@@ -12,8 +12,9 @@ def admitted_caller(request: Request, caller: AdmittedCaller = Depends(admit_req
12
12
  """Who this request runs as: the User, Teams and admin flag the API admitted, named
13
13
  through the platform directory as that User sees it.
14
14
 
15
- Hosted, the identity comes from the platform-signed caller assertion (ADR 0017);
16
- Local and developer runtimes admit the developer's own SDK session.
15
+ Hosted, the identity comes from the platform-signed caller assertion (ADR 0017),
16
+ and the Teams are those MetaTables grants name that the caller belongs to (SDK
17
+ #225); Local and developer runtimes admit the developer's own SDK session.
17
18
  """
18
19
  config = request.app.state.runtime.config
19
20
  user = describe_user(caller.user_uid)