mainsequence-metatable 0.1.47.dev76__tar.gz → 0.1.48.dev77__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (603) hide show
  1. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-migrations/SKILL.md +26 -27
  2. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +2 -2
  3. {mainsequence_metatable-0.1.47.dev76/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.48.dev77}/PKG-INFO +1 -1
  4. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0024-namespace-and-table-access-roles.md +61 -42
  5. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/deploy-application-migrations.md +54 -46
  6. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/permissions-namespaces-labels.md +5 -2
  7. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/security/index.md +6 -3
  8. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/security/ownership-and-sharing.md +24 -18
  9. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/security/permissions.md +9 -3
  10. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/pyproject.toml +1 -1
  11. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  12. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
  13. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/namespaces.py +8 -4
  14. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/security.py +63 -10
  15. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/access_roles.py +9 -1
  16. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/platform_principals.py +20 -0
  17. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/security_check_job.py +1 -1
  18. mainsequence_metatable-0.1.48.dev77/src/metatables/api/backend/migrations/versions/0015_namespace_creator.py +23 -0
  19. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/register_catalog.py +8 -12
  20. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/catalog.py +2 -0
  21. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/models.py +3 -0
  22. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/endpoint.py +1 -1
  23. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_agent_surface.py +3 -3
  24. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_bootstrap.py +8 -8
  25. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_migration.py +24 -6
  26. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_catalog_contract.py +1 -1
  27. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_api_endpoint.py +1 -1
  28. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_runtime_upgrade.py +3 -3
  29. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_register_catalog.py +57 -19
  30. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_deployment_security.py +1 -1
  31. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_security_api.py +59 -0
  32. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_security_check.py +3 -3
  33. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_workload_principals.py +21 -0
  34. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/uv.lock +1 -1
  35. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  36. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  37. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  39. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/discover-tables/SKILL.md +0 -0
  40. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  41. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  42. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  43. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  45. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  46. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/.mainsequence/workflows/metatables-api.yaml +0 -0
  47. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/LICENSE +0 -0
  48. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/MANIFEST.in +0 -0
  49. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/README.md +0 -0
  50. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/alembic.ini +0 -0
  51. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/api/metatables/main.py +0 -0
  52. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/compose.database-tests.yml +0 -0
  53. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  54. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  55. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  56. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  57. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  58. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  59. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  60. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  61. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  62. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  63. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  64. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  65. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0009-shared-credential-store.md +0 -0
  66. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  67. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  68. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  69. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  70. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  71. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0016-impact-preflight.md +0 -0
  72. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  73. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  74. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0018-table-search.md +0 -0
  75. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  76. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/api/0023-daily-security-check.md +0 -0
  77. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  78. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  79. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/adr/index.md +0 -0
  80. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/authentication-and-errors.md +0 -0
  81. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/data-sources.md +0 -0
  82. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/openapi.json +0 -0
  83. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/overview.md +0 -0
  84. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/reference.md +0 -0
  85. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/tables-and-migrations.md +0 -0
  86. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/api/time-index-and-updates.md +0 -0
  87. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/assets/branding/metatables.svg +0 -0
  88. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/assets/diagrams/local-client-experience.svg +0 -0
  89. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/assets/diagrams/namespace-access.svg +0 -0
  90. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/bounded-transfers.md +0 -0
  91. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/build-an-updater.md +0 -0
  92. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/define-and-migrate-tables.md +0 -0
  93. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/installation-and-connection.md +0 -0
  94. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/local-storage.md +0 -0
  95. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/query-and-mutate.md +0 -0
  96. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/quickstart.md +0 -0
  97. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/read-existing-time-index-tables.md +0 -0
  98. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/register-existing-tables.md +0 -0
  99. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/tutorial.md +0 -0
  100. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/client/upgrade-legacy-app.md +0 -0
  101. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/architecture.md +0 -0
  102. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/data-sources.md +0 -0
  103. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/identity-and-scope.md +0 -0
  104. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/runs-and-execution-graphs.md +0 -0
  105. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  106. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/concepts/time-index-tables-and-updates.md +0 -0
  107. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/architecture-and-boundaries.md +0 -0
  108. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/database-backends.md +0 -0
  109. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/documentation.md +0 -0
  110. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/releasing.md +0 -0
  111. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/contributing/testing.md +0 -0
  112. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/README.md +0 -0
  113. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/__init__.py +0 -0
  114. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/bounded_reader.py +0 -0
  115. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/README.md +0 -0
  116. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/mssql.json +0 -0
  117. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/mysql.json +0 -0
  118. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/postgresql.json +0 -0
  119. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/data_sources/register.py +0 -0
  120. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/external_table.py +0 -0
  121. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/README.md +0 -0
  122. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/__init__.py +0 -0
  123. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/__main__.py +0 -0
  124. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/__init__.py +0 -0
  125. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/env.py +0 -0
  126. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/script.py.mako +0 -0
  127. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  128. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/local_app/tables.py +0 -0
  129. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/query.py +0 -0
  130. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/quickstart.py +0 -0
  131. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/reader.py +0 -0
  132. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/scripts/__init__.py +0 -0
  133. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/scripts/setup_metatables.py +0 -0
  134. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tables.py +0 -0
  135. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/README.md +0 -0
  136. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/__init__.py +0 -0
  137. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/__main__.py +0 -0
  138. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/data/README.md +0 -0
  139. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  140. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/frames.py +0 -0
  141. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/__init__.py +0 -0
  142. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/env.py +0 -0
  143. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/registry.py +0 -0
  144. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  145. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  146. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  147. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  148. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  149. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/operations.py +0 -0
  150. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/tables.py +0 -0
  151. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/tutorial/updaters.py +0 -0
  152. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/examples/updater.py +0 -0
  153. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/index.md +0 -0
  154. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/catalog-migrations.md +0 -0
  155. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/configuration.md +0 -0
  156. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/hosted-runtime.md +0 -0
  157. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/local-runtime.md +0 -0
  158. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/recovery-and-observability.md +0 -0
  159. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/run-history.md +0 -0
  160. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/operations/run-logs.md +0 -0
  161. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/reference/capabilities.md +0 -0
  162. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/reference/cli.md +0 -0
  163. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/docs/reference/python.md +0 -0
  164. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/mkdocs.yml +0 -0
  165. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/__init__.py +0 -0
  166. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/build_reference.py +0 -0
  167. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_boundaries.py +0 -0
  168. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_client_api_coverage.py +0 -0
  169. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_distribution_sources.py +0 -0
  170. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_docs.py +0 -0
  171. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_examples_debug.py +0 -0
  172. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/check_project.py +0 -0
  173. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/dev_release_version.py +0 -0
  174. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/test_databases.py +0 -0
  175. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/scripts/test_postgresql.py +0 -0
  176. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/setup.cfg +0 -0
  177. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  178. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  179. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  180. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  181. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/__init__.py +0 -0
  182. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_admin_source.json +0 -0
  183. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_build.py +0 -0
  184. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/_skill_bundle.py +0 -0
  185. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/analysis.py +0 -0
  186. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/analyst/__init__.py +0 -0
  187. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/__init__.py +0 -0
  188. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/__init__.py +0 -0
  189. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/__init__.py +0 -0
  190. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/boundary.py +0 -0
  191. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/local_actor.py +0 -0
  192. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/auth/team_membership.py +0 -0
  193. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/bootstrap.py +0 -0
  194. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/configuration.py +0 -0
  195. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/connection_count.py +0 -0
  196. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/credential_admin.py +0 -0
  197. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/development.py +0 -0
  198. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/development_client.py +0 -0
  199. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/error_logging.py +0 -0
  200. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/main.py +0 -0
  201. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/mcp.py +0 -0
  202. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/platform_cache.py +0 -0
  203. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/__init__.py +0 -0
  204. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/access_map.py +0 -0
  205. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/caller.py +0 -0
  206. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/column_search.py +0 -0
  207. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/contract_validation.py +0 -0
  208. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/data_sources.py +0 -0
  209. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  210. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/migration_connection.py +0 -0
  211. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/run_logs.py +0 -0
  212. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/runtime_context.py +0 -0
  213. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/schema_graph.py +0 -0
  214. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_cascade.py +0 -0
  215. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_crud.py +0 -0
  216. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_delete.py +0 -0
  217. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_filter.py +0 -0
  218. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_import.py +0 -0
  219. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_introspection.py +0 -0
  220. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_patch.py +0 -0
  221. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_registration.py +0 -0
  222. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_response.py +0 -0
  223. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_search.py +0 -0
  224. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_search_document.py +0 -0
  225. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_sql.py +0 -0
  226. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  227. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  228. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  229. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  230. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  231. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_batch.py +0 -0
  232. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  233. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_constants.py +0 -0
  234. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_crud.py +0 -0
  235. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_details.py +0 -0
  236. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_graph.py +0 -0
  237. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  238. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_registration.py +0 -0
  239. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_runs.py +0 -0
  240. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/routes/update_statistics.py +0 -0
  241. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime.py +0 -0
  242. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime_control.py +0 -0
  243. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/runtime_database.py +0 -0
  244. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/source_passwords.py +0 -0
  245. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/app/transfer.py +0 -0
  246. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/__init__.py +0 -0
  247. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/access.py +0 -0
  249. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  250. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  251. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  252. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  253. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  254. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  255. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  256. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  257. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  258. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  259. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  260. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  261. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  262. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  263. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  264. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  265. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  266. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  267. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  268. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  269. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  270. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  271. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog.py +0 -0
  272. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  273. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  274. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  275. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/contracts.py +0 -0
  276. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/hosted.py +0 -0
  277. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  278. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  279. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/native.py +0 -0
  280. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/operations.py +0 -0
  281. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/pages.py +0 -0
  282. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  283. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/registry.py +0 -0
  284. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  285. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/relational.py +0 -0
  286. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  287. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  288. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/streaming.py +0 -0
  289. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/backends/timescale.py +0 -0
  290. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/__init__.py +0 -0
  291. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  292. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  293. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  294. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/contracts/values.py +0 -0
  295. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/__init__.py +0 -0
  296. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  297. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  298. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  299. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/label_rules.py +0 -0
  300. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  301. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/domain/update_constants.py +0 -0
  302. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/__init__.py +0 -0
  303. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  304. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  305. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  306. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  307. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  308. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  309. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  310. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  311. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  312. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  313. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/__init__.py +0 -0
  314. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/env.py +0 -0
  315. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  316. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  317. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  318. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  319. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  320. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  321. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  322. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  323. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  324. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  325. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  326. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  327. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  328. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0013_security_check.py +0 -0
  329. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/0014_access_roles.py +0 -0
  330. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  331. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/__init__.py +0 -0
  332. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  333. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  334. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  335. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/create_table.py +0 -0
  336. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  337. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/import_relations.py +0 -0
  338. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  339. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  340. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/operations/security_check.py +0 -0
  341. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/__init__.py +0 -0
  342. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/cascade.py +0 -0
  343. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/database.py +0 -0
  344. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/grants.py +0 -0
  345. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/impact.py +0 -0
  346. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/labels.py +0 -0
  347. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/locking.py +0 -0
  348. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  349. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/projections.py +0 -0
  350. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  351. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  352. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  353. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  354. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  355. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/table_response.py +0 -0
  356. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  357. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  358. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/updates.py +0 -0
  359. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  360. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  361. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/__init__.py +0 -0
  362. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/documents.py +0 -0
  363. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/embeddings.py +0 -0
  364. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/index.py +0 -0
  365. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/ranking.py +0 -0
  366. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/text.py +0 -0
  367. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/backend/search/worker.py +0 -0
  368. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/__init__.py +0 -0
  369. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/configuration.yaml +0 -0
  370. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/metatables/main.py +0 -0
  371. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/api/request_timing.py +0 -0
  372. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/__init__.py +0 -0
  373. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/admin_install.py +0 -0
  374. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/app.py +0 -0
  375. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/filters.py +0 -0
  376. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/local.py +0 -0
  377. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/migrations.py +0 -0
  378. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/project.py +0 -0
  379. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/cli/skills.py +0 -0
  380. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/__init__.py +0 -0
  381. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/mssql.py +0 -0
  382. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/compiled_sql/v1.py +0 -0
  383. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/dtype_codec.py +0 -0
  384. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/README.md +0 -0
  385. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/__init__.py +0 -0
  386. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/bounded_reader.py +0 -0
  387. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/README.md +0 -0
  388. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/mssql.json +0 -0
  389. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/mysql.json +0 -0
  390. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/postgresql.json +0 -0
  391. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/data_sources/register.py +0 -0
  392. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/external_table.py +0 -0
  393. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/README.md +0 -0
  394. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/__init__.py +0 -0
  395. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/__main__.py +0 -0
  396. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  397. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/env.py +0 -0
  398. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  399. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  400. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/local_app/tables.py +0 -0
  401. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/query.py +0 -0
  402. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/quickstart.py +0 -0
  403. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/reader.py +0 -0
  404. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/scripts/__init__.py +0 -0
  405. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  406. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tables.py +0 -0
  407. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/README.md +0 -0
  408. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/__init__.py +0 -0
  409. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/__main__.py +0 -0
  410. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/data/README.md +0 -0
  411. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  412. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/frames.py +0 -0
  413. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  414. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  415. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  416. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  417. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  418. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  419. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  420. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  421. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/operations.py +0 -0
  422. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/tables.py +0 -0
  423. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/tutorial/updaters.py +0 -0
  424. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/examples/updater.py +0 -0
  425. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/future_registry.py +0 -0
  426. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/hashing.py +0 -0
  427. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/instrumentation.py +0 -0
  428. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_connection.py +0 -0
  429. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_files.py +0 -0
  430. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/local_run_logs.py +0 -0
  431. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/log_contract.py +0 -0
  432. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/__init__.py +0 -0
  433. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/alembic.py +0 -0
  434. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/connection.py +0 -0
  435. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/env.py +0 -0
  436. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/provider.py +0 -0
  437. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/registry.py +0 -0
  438. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/runner.py +0 -0
  439. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/scaffold.py +0 -0
  440. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/sqlite.py +0 -0
  441. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/__init__.py +0 -0
  442. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/env.py.mako +0 -0
  443. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/templates/script.py.mako +0 -0
  444. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/migrations/tls.py +0 -0
  445. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/models.py +0 -0
  446. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/pydantic_metadata.py +0 -0
  447. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/run_logging.py +0 -0
  448. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime.py +0 -0
  449. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime_context.py +0 -0
  450. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/runtime_contract.py +0 -0
  451. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/schema_names.py +0 -0
  452. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/sdk_compat.py +0 -0
  453. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/sqlalchemy_contracts.py +0 -0
  454. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/storage_layout_contract.py +0 -0
  455. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/time_index_table_refs.py +0 -0
  456. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transfer.py +0 -0
  457. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transfer_contract.py +0 -0
  458. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/transport.py +0 -0
  459. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/update_configuration_contract.py +0 -0
  460. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/__init__.py +0 -0
  461. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/configuration.py +0 -0
  462. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/dependencies.py +0 -0
  463. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/managers.py +0 -0
  464. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/namespacing.py +0 -0
  465. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/runner.py +0 -0
  466. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/updaters.py +0 -0
  467. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/updaters/utils.py +0 -0
  468. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/src/metatables/upload.py +0 -0
  469. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_api_search.py +0 -0
  470. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_mcp.py +0 -0
  471. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/analyst/test_tools.py +0 -0
  472. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  473. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_caller_endpoint.py +0 -0
  474. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_data_source_identity.py +0 -0
  475. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_development_client.py +0 -0
  476. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_hosted_agent.py +0 -0
  477. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_hosted_environment_target.py +0 -0
  478. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_local_mode.py +0 -0
  479. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_platform_fact_cache.py +0 -0
  480. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_request_identity.py +0 -0
  481. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_database.py +0 -0
  482. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_scaffold.py +0 -0
  483. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_selection.py +0 -0
  484. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_runtime_storage_binding.py +0 -0
  485. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_source_passwords.py +0 -0
  486. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/auth/test_team_membership.py +0 -0
  487. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_catalog_foundation.py +0 -0
  488. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_contract_projection.py +0 -0
  489. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_database_config.py +0 -0
  490. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_index_statistics.py +0 -0
  491. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/catalog/test_schema_validation.py +0 -0
  492. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/conftest.py +0 -0
  493. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/capabilities.json +0 -0
  494. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/client_signatures.json +0 -0
  495. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/database_operations.json +0 -0
  496. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_bounded_transfer.py +0 -0
  497. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_compiler_runtime_source.py +0 -0
  498. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_relation_batching.py +0 -0
  499. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_relation_import.py +0 -0
  500. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_runtime_contract_compat.py +0 -0
  501. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_storage_layouts.py +0 -0
  502. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/contracts/test_table_contracts.py +0 -0
  503. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/Dockerfile +0 -0
  504. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/Dockerfile.dockerignore +0 -0
  505. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/__init__.py +0 -0
  506. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/conftest.py +0 -0
  507. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/__init__.py +0 -0
  508. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/env.py +0 -0
  509. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  510. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_api_contract.py +0 -0
  511. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_application_migration.py +0 -0
  512. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  513. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_credential_catalog.py +0 -0
  514. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_physical_contract.py +0 -0
  515. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_relation_import.py +0 -0
  516. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  517. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_sql_security.py +0 -0
  518. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_backend/test_update_client.py +0 -0
  519. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_physical_operations.py +0 -0
  520. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_postgresql_operations.py +0 -0
  521. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  522. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/documentation/test_project_checks.py +0 -0
  523. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_admin_installation.py +0 -0
  524. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_application_owned_migrations.py +0 -0
  525. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_catalog_outage.py +0 -0
  526. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_api_contract.py +0 -0
  527. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_api_coverage.py +0 -0
  528. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_migration_scaffold.py +0 -0
  529. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_migration_tls.py +0 -0
  530. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_package.py +0 -0
  531. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_signatures.py +0 -0
  532. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_client_value_behaviors.py +0 -0
  533. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_data_source_registry.py +0 -0
  534. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_actor_client_api.py +0 -0
  535. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_cli_workflow.py +0 -0
  536. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_local_client_selection.py +0 -0
  537. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  538. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
  539. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
  540. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_namespaces_admin_http.py +0 -0
  541. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_public_imports.py +0 -0
  542. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_remaining_client_routes.py +0 -0
  543. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_run_graphs.py +0 -0
  544. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_run_logs.py +0 -0
  545. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_sdk_local_startup.py +0 -0
  546. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_sqlite_runtime.py +0 -0
  547. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_delete_client_api.py +0 -0
  548. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_filter_client_api.py +0 -0
  549. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_introspection_client_api.py +0 -0
  550. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_patch_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_api.py +0 -0
  552. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_document_api.py +0 -0
  553. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_search_scale.py +0 -0
  554. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_stats_api.py +0 -0
  555. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_update_pipeline.py +0 -0
  556. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_table_updates_http.py +0 -0
  557. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  558. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  559. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  560. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_batch_client_api.py +0 -0
  561. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  562. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  563. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  564. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/e2e/test_update_registration_client_api.py +0 -0
  565. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_documented_examples.py +0 -0
  566. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_postgresql_examples.py +0 -0
  567. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_setup_launch.py +0 -0
  568. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/examples/test_tutorial.py +0 -0
  569. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_batch_introspection.py +0 -0
  570. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_connection_reuse.py +0 -0
  571. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_credential_store.py +0 -0
  572. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_data_source_rules.py +0 -0
  573. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_local_data_sources.py +0 -0
  574. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_local_run_logs.py +0 -0
  575. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_connection.py +0 -0
  576. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_sql.py +0 -0
  577. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_tables.py +0 -0
  578. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  579. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_request_timing.py +0 -0
  580. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_serving_policy.py +0 -0
  581. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_source_validation.py +0 -0
  582. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/integrations/test_sqlite_operations.py +0 -0
  583. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/labels/test_labels.py +0 -0
  584. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_bootstrap_lock.py +0 -0
  585. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_create_table_operation.py +0 -0
  586. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_create_table_postgres.py +0 -0
  587. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_physical_operation_journal.py +0 -0
  588. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_search_documents.py +0 -0
  589. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/operations/test_timescale_policies.py +0 -0
  590. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_client_skills.py +0 -0
  591. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_dev_release_version.py +0 -0
  592. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_distribution_sources.py +0 -0
  593. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_editable_build.py +0 -0
  594. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/packaging/test_installed_distribution.py +0 -0
  595. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_access_map.py +0 -0
  596. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_governed_sql_scope.py +0 -0
  597. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_incremental_security.py +0 -0
  598. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_local_actor_membership.py +0 -0
  599. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_migration_boundary.py +0 -0
  600. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_namespace_grants.py +0 -0
  601. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_body_filter.py +0 -0
  602. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_grants.py +0 -0
  603. {mainsequence_metatable-0.1.47.dev76 → mainsequence_metatable-0.1.48.dev77}/tests/permissions/test_table_queries.py +0 -0
@@ -46,29 +46,28 @@ migrations. Read `docs/client/deploy-application-migrations.md`.
46
46
  1. **Develop locally.** Author the revision and apply it to verified local SQLite
47
47
  with the [local development skill](../metatables-local-development/SKILL.md).
48
48
  2. **Commit the revision with the code that needs it.**
49
- 3. **Give the Job access.** Any person admitted to the Environment sets it up; no
50
- Organization admin is needed. Follow "Give the Job access" in
51
- `docs/client/deploy-application-migrations.md`, in this order, in each
52
- Environment:
53
- 1. Before the first push, create each namespace the provider creates tables in:
54
- **Create namespace** in that Environment's Admin, or `Namespace.create(name)`
55
- from the person's own session connected to it. The creator becomes `owner`.
56
- 2. Push the workflow file. It creates the Job's and the other resources' workload
57
- Users before any step runs, so the first migration may stop with
58
- `namespace_access_required`.
59
- 3. As owner, grant the migration Job's workload User `editor`, and `data_writer` to
60
- resources that only read and write rows, in the namespace's Access panel (find
61
- a workload by its Job or release name) or with `grant_role` and its
62
- `workload_user_uid`. A Team the owner belongs to, holding the roles with the
63
- workloads as members, is optional; it saves granting again when a Job is
64
- recreated.
65
- 4. Re-run the migration Job.
66
-
67
- These are the person's actions, made in MetaTables, not in the repository. Tell
68
- the user the steps; with their explicit go-ahead you may run `Namespace.create`
69
- and `grant_role` from their session against the target Environment. Never put them
70
- in the migration Job: workloads are refused. A namespace created before ADR 0024
71
- has no owner until an Organization admin grants one. Recommend one namespace per
49
+ 3. **Give the Job access.** Nothing is created by hand and no Organization admin is
50
+ needed. Follow "Give the Job access" in `docs/client/deploy-application-migrations.md`,
51
+ in each Environment:
52
+ 1. Push the workflow file. It creates the Job's and the other resources' workload
53
+ Users before any step runs.
54
+ 2. The first migration registers the provider's tables. A namespace they name that
55
+ does not exist yet is created by that registration, and the Job gets `editor` on
56
+ it. Do not tell the user to create the namespace before the push.
57
+ 3. A person who manages the Job in the platform then manages the namespace's
58
+ access: grant `data_writer` to resources that only read and write rows, and
59
+ `owner` to themselves or to a Team they belong to, in the namespace's Access
60
+ panel (find a workload by its Job or release name) or with `grant_role` and its
61
+ `workload_user_uid`. A Team holding the roles with the workloads as members is
62
+ optional; it saves granting again when a Job or release is recreated.
63
+
64
+ Step 3 is the person's action, made in MetaTables, not in the repository. Tell the
65
+ user the step; with their explicit go-ahead you may run `grant_role` from their
66
+ session against the target Environment. Never put grants in the migration Job:
67
+ workloads are refused. If the namespace name is already taken, the first run stops
68
+ with `namespace_access_required`; an owner grants the Job `editor`, or the
69
+ application uses another namespace. A namespace created before ADR 0024 has no
70
+ owner until an Organization admin grants one. Recommend one namespace per
72
71
  application; it is not required (see "Namespaces and applications" in
73
72
  `docs/security/ownership-and-sharing.md`).
74
73
  4. **Deploy.** The application's `.mainsequence/workflows/` file declares a
@@ -268,10 +267,10 @@ Read `docs/operations/recovery-and-observability.md`.
268
267
  another install overwrote it. Move the provider under an application-owned
269
268
  module (see [Provider placement](#provider-placement)), preserving its provider
270
269
  identity and applied revision history. Do not edit files in `site-packages`.
271
- - If reservation fails with `namespace_not_found` (403), create the namespace and
272
- grant the Job `editor`, as in step 3. `namespace_access_required` is expected on a
273
- new application's first run: an owner the error lists grants the `caller_user_uid`
274
- `editor` on the namespace, or adds it to a Team that holds it, then the Job is
270
+ - If reservation fails with `namespace_access_required` (403), the namespace already
271
+ exists: it is taken, or the Job was recreated with a new workload User. An owner the
272
+ error lists, or a manager of the workload that created the namespace, grants the
273
+ `caller_user_uid` `editor`, or adds it to a Team that holds it, then the Job is
275
274
  re-run. With `namespace_required`, set the table's namespace. With
276
275
  `table_not_editable`, an owner of the table or its namespace grants `editor`. Do
277
276
  not change code or physical names to get around it.
@@ -53,8 +53,8 @@ output binding or explicitly authorized row scope for mutation tests.
53
53
 
54
54
  A deployed producer runs as its Job's workload User. It needs `editor` on its output
55
55
  tables, which lets it operate updaters and write rows, and `data_viewer` on its
56
- inputs. Grant these on the namespaces, directly or through a Team, the same way and
57
- in the same order as the migration Job's `editor` (step 3 of the
56
+ inputs. A person who manages the migration Job that created the output namespace, or
57
+ an owner, grants these on the namespaces, directly or through a Team (step 3 of the
58
58
  [migrations skill](../metatables-migrations/SKILL.md)); no Organization admin is
59
59
  needed. Output tables belong to the migration provider and its namespace: a workload
60
60
  never creates a table outside a namespace.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.47.dev76
3
+ Version: 0.1.48.dev77
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
@@ -3,7 +3,8 @@
3
3
  Status: Accepted.
4
4
 
5
5
  Implementation status: implemented on development, in the API and in the MetaTables
6
- Admin's Access panels. Non-container tests pass. The container matrix passes on SQLite;
6
+ Admin's Access panels. Namespaces created by a workload's registration (sections 3 and 5)
7
+ are implemented in the API; the Admin does not yet label the `manager` source. Non-container tests pass. The container matrix passes on SQLite;
7
8
  on PostgreSQL, TimescaleDB, SQL Server and MySQL one runtime-bootstrap test fails, as it
8
9
  did before this change. Hosted deployment is pending. The user guides are
9
10
  [Ownership, roles, and inheritance](../../security/ownership-and-sharing.md) and the
@@ -52,8 +53,8 @@ instance contains namespaces, and a namespace contains tables.
52
53
  - A principal holds at most one binding per object; granting another role replaces
53
54
  it. Because roles are nested, its access is the strongest role among its own, its
54
55
  Teams' and its namespace's bindings. There is no explicit deny.
55
- - Organization admins, Team membership and namespace inheritance are **computed**, never
56
- stored.
56
+ - Organization admins, Team membership, namespace inheritance and the managers of a
57
+ namespace's creating workload are **computed**, never stored.
57
58
  - The API checks actions, never role names. One evaluator answers both single checks
58
59
  and list filters, so a list never shows what a check would refuse.
59
60
  - Each action has a level: `read` (see metadata), `use` (read data), `write` (change
@@ -206,6 +207,10 @@ workload Users, Teams.
206
207
  - A person who creates a namespace is granted `owner` on it (source `creator`). A taken
207
208
  name is refused and never adopted; the refusal names its owners when the caller may
208
209
  see them.
210
+ - Registering a table into a namespace that does not exist creates it. A person who
211
+ does so is granted `owner`. A workload User is granted `editor`, and the namespace
212
+ records it as its **creating workload**: the people who manage that workload manage
213
+ the namespace's access. An existing namespace needs `tables.create`, whoever created it.
209
214
  - A person who creates a table outside any namespace is granted `owner` on it.
210
215
  - A table created in a namespace gets no binding: the namespace's roles cover it.
211
216
 
@@ -216,12 +221,17 @@ workload Users, Teams.
216
221
  | Every action on every object | Organization admin, from the platform on each request | `admin` |
217
222
  | The roles granted to a Team | the caller's current Team membership, from the platform | `team`, with the Team |
218
223
  | The table role of the same name | a role on the table's current namespace | `namespace`, with the namespace |
224
+ | `namespaces.get`, `namespaces.get_access`, `namespaces.set_access` on a namespace | managing its creating workload, from the platform on each request | `manager`, with the workload |
225
+
226
+ Managing the creating workload is access management only. It gives no role: no access
227
+ to the namespace's tables, no `namespaces.update` and no table-level bindings.
219
228
 
220
229
  **Constraints** that no role overrides:
221
230
 
222
- - A workload User is never granted `owner`, never grants or revokes a role, never
223
- creates a namespace and never creates a table outside a namespace. A Team holding
224
- `owner` gives its workload members no access management.
231
+ - A workload User is never granted `owner`, never grants or revokes a role and never
232
+ creates a table outside a namespace. It creates a namespace only by registering a
233
+ table into a free name, and then holds `editor`. A Team holding `owner` gives its
234
+ workload members no access management.
225
235
  - A non-admin grants roles only to Teams they belong to, checked with the platform at
226
236
  that moment, and to people and workload Users they can find in their own platform
227
237
  directory.
@@ -233,7 +243,9 @@ workload Users, Teams.
233
243
 
234
244
  1. hold `set_access` on the object and every action of the role on it (owners and
235
245
  admins always do); or
236
- 2. manage the target workload User and hold every action of the role on the object.
246
+ 2. manage the target workload User and hold every action of the role on the object; or
247
+ 3. manage the namespace's creating workload: any role, `owner` included, on that
248
+ namespace.
237
249
 
238
250
  Revoking your own binding, and lowering or revoking a binding of a workload you manage,
239
251
  are always allowed. Revoking the last owner leaves the admins. Every grant and revoke is
@@ -264,45 +276,44 @@ tables and whose FastAPI `crm-api` reads and writes them. Nothing exists yet.
264
276
  ```text
265
277
  Ana (no admin role) MetaTables of the Environment
266
278
  ─────────────────── ─────────────────────────────
267
- 1. create namespace crm ──────────────────► namespace crm Ana: owner (creator)
268
- (namespaces.create, through member)
279
+ 1. push the workflow file ──► the platform creates migrate-crm and crm-api
280
+ and their workload Users; Ana manages them
269
281
 
270
- 2. push the workflow file ──► the platform creates migrate-crm and crm-api
271
- and their workload Users
282
+ 2. deploy: migrate-crm ───────────────────► namespace crm migrate-crm: editor
283
+ registers its tables in crm (creating workload)
284
+ its tables (no binding of their own)
272
285
 
273
- 3. grant on crm ──────────────────────────► migrate-crm: editor
274
- (owner of crm) crm-api: data_writer
275
- directly, or to a Team
276
- Ana belongs to that contains them
286
+ 3. grant on crm ──────────────────────────► crm-api: data_writer
287
+ (manages migrate-crm) Ana or a Team she belongs to: owner
277
288
 
278
- 4. deploy: migrate-crm ───────────────────► creates its tables in crm
279
- (no binding of their own)
280
- crm-api ───────────────────► reads and writes their rows
289
+ 4. crm-api ───────────────────────────────► reads and writes their rows
281
290
  ```
282
291
 
283
- 1. **Namespace.** Ana creates `crm` with `namespaces.create`, which every person holds
284
- through `member`, and becomes its `owner`.
285
- 2. **Workloads.** Applying the workflow file creates both workload Users before any of
286
- its Jobs run.
287
- 3. **Access.** As `owner`, Ana grants `editor` to the migration Job's workload User and
288
- `data_writer` to the FastAPI's, either directly or through a Team she belongs to that
289
- contains them.
290
- 4. **Deploy.** The Job creates and migrates its tables; the FastAPI uses them.
292
+ 1. **Workloads.** Applying the workflow file creates both workload Users before any of
293
+ its Jobs run. The platform reports that Ana manages them.
294
+ 2. **Namespace and tables.** The first deployment's migration Job registers its tables
295
+ in `crm`. The namespace does not exist, so the registration creates it, grants the
296
+ Job `editor` and records it as the creating workload.
297
+ 3. **Access.** Because she manages `migrate-crm`, Ana manages `crm`'s access. She grants
298
+ `data_writer` to the FastAPI's workload User, and `owner` to herself or to a Team she
299
+ belongs to, so the namespace keeps an owner if the Job is recreated.
300
+ 4. **Use.** The FastAPI reads and writes rows; its requests before step 3 were refused,
301
+ and succeed on the next request after it, with no redeployment.
291
302
 
292
303
  This completes without an administrator:
293
304
 
294
- - Every step needs only `member`, held by every person, or the `owner` binding Ana
295
- received in step 1.
296
- - A Team is optional. With direct bindings, a recreated workload's new User needs the
297
- owner to grant its role again. With a Team, it needs only Team membership.
298
- - The workload Users exist only once step 2 applies the file. If the first migration
299
- runs before step 3, it stops with `namespace_access_required`, naming the Job's
300
- workload User, the namespace, the missing action and the namespace's owners; re-running
301
- it after step 3 succeeds. If step 1 is missing, it stops with `namespace_not_found`.
305
+ - Every step needs only the push, the registration in step 2, or managing the Job.
306
+ - No namespace is created by hand, and the first migration succeeds.
307
+ - A Team is optional. With direct bindings, a recreated workload's new User needs an
308
+ owner, or a manager of the creating workload, to grant its role again. With a Team,
309
+ it needs only Team membership.
310
+ - A taken name stops the migration with `namespace_access_required`, naming the Job's
311
+ workload User, the namespace, the missing action and the owners when the Job may see
312
+ them. An owner grants the Job `editor`, or the application uses another namespace.
302
313
  - Least privilege holds from the start: the FastAPI writes rows but cannot migrate,
303
- delete or share.
304
- - Each Environment has its own MetaTables. Another Environment repeats steps 1 and 3
305
- there, done by someone the platform admits to it.
314
+ delete or share, and the Job never decides access.
315
+ - Each Environment has its own MetaTables. The first deployment there creates the
316
+ namespace; step 3 is repeated by someone who manages the Job in that Environment.
306
317
 
307
318
  ### 6. API and clients
308
319
 
@@ -310,13 +321,15 @@ This completes without an administrator:
310
321
  texts. The role documentation is generated from it.
311
322
  - `POST /namespaces/` creates a namespace (replaces `POST /security/namespaces/`).
312
323
  - `GET /namespaces/{uid}/access/` and `GET /meta-tables/{uid}/access/` return the
313
- bindings with their source, who granted each and when.
324
+ bindings with their source, who granted each and when. A namespace's document also
325
+ names its creating workload.
314
326
  - `POST .../access/changes/` grants and revokes roles in one request, checked against
315
327
  the access revision the caller read.
316
328
  - `GET .../access/me/` returns the caller's allowed actions; the Admin shows only the
317
329
  buttons they allow.
318
330
  - `GET .../access/explain/?user_uid=...&action=...` explains why someone can or cannot
319
- do something.
331
+ do something. The `manager` source is shown only for the caller: the platform tells
332
+ only the caller which workloads they manage.
320
333
  - Removed: `PUT /meta-tables/{uid}/permissions`, `PUT /namespaces/{uid}/permissions`,
321
334
  `POST /security/namespaces/` and the Reader/Writer assignment documents.
322
335
  - The Python client gets `Namespace.create()`, `get_access()`, `grant_role()`,
@@ -337,7 +350,8 @@ One new system migration converts every grant, with no compatibility layer:
337
350
  | Namespace Writer | `editor` |
338
351
  | Namespace without an owner | none; admins hold it until they grant an owner |
339
352
 
340
- Access history is kept.
353
+ Access history is kept. A second migration records each namespace's creating workload;
354
+ existing namespaces have none, and their owners and admins manage them.
341
355
 
342
356
  ## Consequences
343
357
 
@@ -348,8 +362,11 @@ Access history is kept.
348
362
  that person's access.
349
363
  - A workload can no longer create a table outside a namespace. Updater Jobs that do so
350
364
  today must set a namespace.
351
- - Any person may claim a free namespace name. Admins can rename a namespace or change its
352
- owners.
365
+ - Any person, or a workload by registering a table, may claim a free namespace name.
366
+ Admins can rename a namespace or change its owners.
367
+ - The people who manage a namespace's creating workload manage its access for as long as
368
+ the platform reports that they manage it. A namespace whose creating workload nobody
369
+ manages any more keeps its owners, and admins.
353
370
  - The catalog stores bindings instead of Reader/Writer flags, every route checks an
354
371
  action, and database reconciliation gains the admin role.
355
372
  - This amends ADR 0002 (namespace access is no longer admin-only; Reader/Writer become
@@ -363,5 +380,7 @@ Access history is kept.
363
380
  - The conversion migration on a catalog with every kind of existing grant.
364
381
  - The deployment of section 5 end to end as a non-admin, with direct bindings and with a
365
382
  Team; a recreated workload; a namespace name already taken.
383
+ - A workload's registration creates the namespace with `editor`; a manager of the Job
384
+ grants any role; anyone else is refused.
366
385
  - In the database: `data_viewer` gets `SELECT` only; `data_writer` writes rows but its
367
386
  migration admission is refused; an admin reads a table without a binding.
@@ -15,13 +15,16 @@ before anything that uses the tables rolls out. See
15
15
  [Local storage](local-storage.md).
16
16
  2. **Commit the revision with the code that needs it.** Applied revisions are
17
17
  immutable; every later schema change is a new revision.
18
- 3. **Give the Job access.** Before the first push to each Environment, create the
19
- application's namespace; once the workload Users exist, grant them their roles
20
- ([below](#give-the-job-access)). Any person can; no Organization admin is needed.
21
- 4. **Deploy.** The application's workflow runs its migration Job from the
22
- candidate image, then deploys the resources that read or write the tables.
23
-
24
- Hosted runtimes are migrated only by step 4. Do not run `metatables migrations
18
+ 3. **Deploy.** The application's workflow runs its migration Job from the
19
+ candidate image, then deploys the resources that read or write the tables. The
20
+ first deployment to an Environment creates the application's namespace there and
21
+ gives the Job `editor` on it.
22
+ 4. **Grant the other workloads.** Someone who manages the migration Job grants the
23
+ resources that read and write rows their roles on the namespace
24
+ ([below](#give-the-job-access)). Nobody creates the namespace by hand, and no
25
+ Organization admin is needed.
26
+
27
+ Hosted runtimes are migrated only by step 3. Do not run `metatables migrations
25
28
  upgrade` or `downgrade` against a hosted API from a developer machine or agent
26
29
  session. Do not migrate at application startup either: several pods would race,
27
30
  and a failure would not stop the rollout.
@@ -111,48 +114,54 @@ against the branch's workflow template before committing it.
111
114
 
112
115
  ## Give the Job access
113
116
 
114
- The Job runs as its own workload User. Workloads never create namespaces, never grant
115
- roles, and create tables only inside a namespace where they hold `editor`
116
- ([ADR 0024](../adr/api/0024-namespace-and-table-access-roles.md)). So a person sets up
117
- the application's access, once per Environment, and no Organization admin is needed.
118
- Do it in this order:
119
-
120
- 1. **Before the first push, create the namespace.** Any person admitted to the
121
- Environment can, in that Environment's MetaTables: with **Create namespace** on the
122
- deployed Admin's Namespaces page, or with `Namespace.create("ledger")` from your own
123
- session connected to that Environment
124
- ([installation and connection](installation-and-connection.md)). You become its
125
- `owner`. A name that is already taken is refused with its owners, when you can see
126
- them; ask one of them for access instead.
127
- 2. **Push the workflow file.** Applying it creates the Job, the FastAPI release and
128
- their workload Users before any step runs. The first migration can run before
129
- step 3 and stop with `namespace_access_required`; that is expected.
130
- 3. **Grant the workloads their roles.** On the namespace's **Access** panel, find each
131
- workload by its Job or release name and grant the migration Job `editor` and every
132
- resource that only reads and writes rows, such as the FastAPI release, `data_writer`.
133
- From Python, pass each resource's `workload_user_uid`, which the Main Sequence SDK
134
- returns on the Job and the ResourceRelease.
135
- 4. **Re-run the migration Job** if step 2's run was refused, or deploy again. It creates
136
- the application's tables in the namespace; the tables need no grants of their own.
137
-
138
- Repeat steps 1, 3 and 4 in every Environment, each done by someone the platform admits
139
- to that Environment: each Environment has its own MetaTables and its own workload Users.
117
+ The Job runs as its own workload User. A workload never grants roles and never creates
118
+ a table outside a namespace ([ADR 0024](../adr/api/0024-namespace-and-table-access-roles.md)).
119
+ It creates its namespace by registering its first table there:
120
+
121
+ 1. **Push the workflow file.** Applying it creates the Job, the FastAPI release and
122
+ their workload Users before any step runs.
123
+ 2. **The first migration creates the namespace.** When a provider's tables name a
124
+ namespace that does not exist in this Environment, the Job's registration creates
125
+ it and grants the Job `editor`. The namespace records the Job as its creating
126
+ workload. Later runs and new tables need nothing more.
127
+ 3. **Grant the other workloads, and an owner.** The people who manage the Job in the
128
+ platform manage the namespace's access. In that Environment's Admin, open the
129
+ namespace's **Access** panel, find each workload by its Job or release name, and
130
+ grant `data_writer` to every resource that only reads and writes rows, such as the
131
+ FastAPI release. Grant `owner` to yourself or to a Team you belong to, so the
132
+ namespace keeps an owner if the Job is recreated. From Python, pass each resource's
133
+ `workload_user_uid`, which the Main Sequence SDK returns on the Job and the
134
+ ResourceRelease. The FastAPI's requests are refused until then, and succeed on the
135
+ next request after the grant, with no redeployment.
136
+
137
+ Repeat step 3 in every Environment, done by someone who manages the Job there: each
138
+ Environment has its own MetaTables and its own workload Users.
140
139
 
141
140
  ```python
142
141
  from metatables import Namespace
143
142
 
144
- ledger = Namespace.create("ledger") # step 1: you become its owner
145
- ledger.grant_role(migration_job_workload_user_uid, "editor") # step 3
146
- ledger.grant_role(api_workload_user_uid, "data_writer")
143
+ ledger = next(n for n in Namespace.filter(search="ledger") if n.name == "ledger")
144
+ ledger.grant_role(api_workload_user_uid, "data_writer") # step 3
145
+ ledger.grant_role(your_user_uid, "owner")
147
146
  ```
148
147
 
148
+ Managing the Job lets you manage the namespace's access only: it gives you no access
149
+ to its tables until you grant yourself a role.
150
+
149
151
  **Optionally, a Team.** Grant the roles to a Team you belong to instead of to the
150
152
  workload Users, and add the workload Users to that Team: any person can create a Team
151
153
  and, as its owner, add workloads they can view. A recreated Job or release then needs
152
154
  only Team membership, not a new grant. One Team can hold the roles in every Environment:
153
155
  Teams are Organization-wide, and a workload reaches only its own Environment's
154
156
  MetaTables. People in the Team receive the same roles, so leave it once the workloads
155
- are in if you should not hold them yourself; you stay the namespace's owner.
157
+ are in if you should not hold them yourself.
158
+
159
+ **A name that is already taken.** If the namespace already exists, created by another
160
+ application, by a person or before this change, the first migration stops with
161
+ `namespace_access_required`. An owner of that namespace grants the Job `editor`, or the
162
+ application uses another namespace. A person may still create a namespace in advance,
163
+ with **Create namespace** in the Admin or `Namespace.create("ledger")`, and grant the
164
+ Job `editor`; nothing requires it.
156
165
 
157
166
  **Namespaces created before roles.** A namespace from before ADR 0024 has no owner: its
158
167
  former Writers hold `editor`. An Organization admin grants someone `owner` on it once;
@@ -188,18 +197,17 @@ the database.
188
197
 
189
198
  ### When registration is refused
190
199
 
191
- - **`namespace_not_found`**: the namespace does not exist in this Environment. Create
192
- it (step 1) and grant the roles (step 3).
193
- - **`namespace_access_required`**: the namespace exists, but the `caller_user_uid` the
194
- error names lacks `tables.create` on it. The error lists the namespace's owners when
195
- the caller can see the namespace; one of them grants it `editor` (step 3). Expected
196
- on a new application's first run.
200
+ - **`namespace_access_required`**: the namespace already exists, but the
201
+ `caller_user_uid` the error names lacks `tables.create` on it. The error lists the
202
+ namespace's owners when the caller can see the namespace. One of them, or a manager
203
+ of the workload that created the namespace, grants it `editor`. A recreated Job gets
204
+ this too: its new workload User has no role yet.
197
205
  - **`namespace_required`**: a workload tried to create a table outside any namespace.
198
206
  Set the table's namespace.
199
207
  - **`table_not_editable`**: the table already exists and the caller lacks
200
208
  `tables.update` on it. An owner of the table or its namespace grants `editor`.
201
209
 
202
- After the grant, re-run the Job (step 4). Do not run the Job as an Organization admin
210
+ After the grant, re-run the Job. Do not run the Job as an Organization admin
203
211
  or change physical names to get around a refusal.
204
212
 
205
213
  ## What the Job guarantees
@@ -213,8 +221,8 @@ or change physical names to get around a refusal.
213
221
  - The Job finds the Environment's MetaTables API the same way any client does
214
222
  ([installation and connection](installation-and-connection.md)). That API must
215
223
  be deployed with its system migrations applied; otherwise the Job fails. Its
216
- workload User needs `editor`, directly or through a Team, on every namespace the
217
- provider creates tables in.
224
+ workload User needs `editor`, directly or through a Team, on every existing
225
+ namespace the provider creates tables in; a namespace it creates gives it `editor`.
218
226
 
219
227
  ## Keep each release compatible with the previous one
220
228
 
@@ -14,8 +14,11 @@ every action, data included.
14
14
  ## Namespaces
15
15
 
16
16
  A catalog namespace groups tables for access. Any person can create a namespace whose
17
- name is free and becomes its owner. A namespace is visible to whoever holds a role on
18
- it or can see at least one of its tables; counts show visible tables only. A role on a
17
+ name is free and becomes its owner. Registering a table into a missing namespace also
18
+ creates it: a person owns it; a workload gets `editor`, and the people who manage that
19
+ workload manage the namespace's access. A namespace is visible to whoever holds a role
20
+ on it, can see at least one of its tables, or manages its creating workload; counts
21
+ show visible tables only. A role on a
19
22
  namespace gives the table role of the same name on its current and future tables.
20
23
  Revoking it, or moving a table out, removes that contribution; independent direct or
21
24
  Team bindings remain. Moving a table needs `tables.update` on the table and
@@ -4,8 +4,10 @@ MetaTables separates **application administration** from **access to namespaces
4
4
  and tables**. Organization admins configure the application and hold every action.
5
5
  Everyone else gets access through **roles** granted on a namespace or a table:
6
6
  `metadata_viewer`, `data_viewer`, `data_writer`, `editor` and `owner`. Any person can
7
- create a namespace or a table and owns what they create. Nobody needs to become an
8
- Organization admin to deploy an application or maintain its tables.
7
+ create a namespace or a table and owns what they create. A deployed migration Job
8
+ creates its application's namespace on its first run, and the people who manage the
9
+ Job manage that namespace's access. Nobody needs to become an Organization admin to
10
+ deploy an application or maintain its tables.
9
11
 
10
12
  The API enforces this model in both local and hosted runtimes. The Admin UI and
11
13
  Python client use the same access endpoints. [ADR 0024](../adr/api/0024-namespace-and-table-access-roles.md)
@@ -92,7 +94,8 @@ These are browser routes. Resource API URLs remain unchanged and enforce their
92
94
  own permissions: DataSource mutations and validation, runtime configuration and
93
95
  selection, system migrations, local database destruction, external imports and
94
96
  global Security operations require admin admission. Granting roles on a namespace or
95
- table is available to its owners.
97
+ table is available to its owners, and on a namespace also to the managers of the
98
+ workload that created it.
96
99
 
97
100
  Every operation is enforced by the API, including requests from the Python client.
98
101
  The UI shows the API's effective permissions. Hidden buttons are a presentation
@@ -13,10 +13,16 @@ principals can be owners. `created_by_user_uid` records who created a table and
13
13
  grants nothing. Organization admins hold every action on every object, so a
14
14
  namespace or table never ends up without someone who can manage it.
15
15
 
16
- Workload Users never create namespaces, never create tables outside a namespace and
17
- are never granted `owner`. A deployed Job, release or Agent creates its tables in a
18
- namespace where it holds `editor`, usually through a Team. See
19
- [Namespaces and applications](#namespaces-and-applications).
16
+ Registering a table into a namespace that does not exist creates it. A person who does
17
+ so owns it. A workload User gets `editor` instead, and the namespace records it as its
18
+ **creating workload**: the people who manage that Job, release or Agent in the platform
19
+ manage the namespace's access. They can see the namespace and its bindings and grant
20
+ or revoke any role on it, `owner` included, but get no access to its tables until they
21
+ grant themselves a role.
22
+
23
+ Workload Users never create tables outside a namespace, never grant roles and are never
24
+ granted `owner`. An existing namespace needs `editor` from its owners, its creating
25
+ workload's managers or a Team. See [Namespaces and applications](#namespaces-and-applications).
20
26
 
21
27
  ## Roles and bindings
22
28
 
@@ -154,9 +160,9 @@ see.
154
160
  What MetaTables enforces:
155
161
 
156
162
  - **Creating a table in a namespace** needs `tables.create` on it (`editor` or
157
- `owner`). A missing namespace is refused with `namespace_not_found`; a namespace
158
- without that action with `namespace_access_required`, naming the caller, the action
159
- and, when visible, the namespace's owners.
163
+ `owner`). A missing namespace is created by the registration. An existing one
164
+ without that action is refused with `namespace_access_required`, naming the caller,
165
+ the action and, when visible, the namespace's owners.
160
166
  - **Reading or writing a table** needs `tables.get_data` or `tables.update_data`
161
167
  through a role on the table or its namespace. The API checks it, and the database
162
168
  enforces it through the caller's own role
@@ -169,16 +175,14 @@ tables without a namespace.
169
175
 
170
176
  ### Recommended: one namespace per application
171
177
 
172
- 1. Before the first push, a person creates the application's namespace, for example
173
- `crm`, and becomes its owner.
174
- 2. Pushing the workflow file creates the workload Users. The owner grants `editor` to
175
- the migration Job's workload User and `data_writer` to the workload Users that only
176
- read and write rows, or grants these roles to a Team they belong to that contains
177
- those workloads.
178
- 3. The migration Job creates and migrates the application's tables in `crm`. If its
179
- first run came before step 2, re-run it.
178
+ 1. Pushing the workflow file creates the workload Users.
179
+ 2. The first deployment's migration Job registers its tables in `crm`, which creates
180
+ the namespace and gives the Job `editor`.
181
+ 3. A person who manages the Job grants `data_writer` to the workload Users that only
182
+ read and write rows, and `owner` to themselves or to a Team they belong to. They can
183
+ instead grant these roles to a Team that contains the workloads.
180
184
 
181
- This needs no Organization admin. A Team is optional: it saves granting again when a
185
+ This needs no Organization admin and no namespace created by hand. A Team is optional: it saves granting again when a
182
186
  workload User changes. Teams are Organization-wide and a workload reaches only its
183
187
  own Environment's MetaTables, so one Team can hold the application's roles in every
184
188
  Environment's catalog. Another application gets read access through one `data_viewer`
@@ -189,6 +193,8 @@ binding on the namespace; revoking it removes access to every table at once. See
189
193
 
190
194
  Every namespace and table has an **Access** panel. It lists each binding with its
191
195
  role, its texts, its source (direct, Team, namespace, admin), who granted it and when.
196
+ A namespace's panel also names its creating workload; if you manage it, your access
197
+ shows the source `manager`.
192
198
  Owners grant, change and revoke roles there; granting shows the role's texts before it
193
199
  is confirmed. **Explain** shows why a chosen User can or cannot do an action, and
194
200
  **access history** shows past changes. Buttons follow the caller's allowed actions
@@ -220,8 +226,8 @@ and review intervening changes.
220
226
  | --- | --- |
221
227
  | `GET /access/roles/` | Any caller |
222
228
  | `POST /namespaces/` | Any person (`namespaces.create`); never a workload |
223
- | `GET /meta-tables/{uid}/access/`, `GET /namespaces/{uid}/access/` | `get_access` on the object |
224
- | `POST /meta-tables/{uid}/access/changes/`, `POST /namespaces/{uid}/access/changes/` | `set_access`, or a workload's manager for that workload; never a workload |
229
+ | `GET /meta-tables/{uid}/access/`, `GET /namespaces/{uid}/access/` | `get_access` on the object, or a manager of the namespace's creating workload |
230
+ | `POST /meta-tables/{uid}/access/changes/`, `POST /namespaces/{uid}/access/changes/` | `set_access`, a manager of the namespace's creating workload, or a workload's manager for that workload; never a workload |
225
231
  | `GET .../access/me/` | Any caller who can see the object |
226
232
  | `GET .../access/explain/?action=...&user_uid=...` | Yourself: anyone who can see the object; another User: `get_access` |
227
233
  | `GET /meta-tables/{uid}/access-history/` | `tables.get_access` |
@@ -23,9 +23,10 @@ Organization admin status comes from the platform through the SDK.
23
23
  | Discover and import external tables and views | No | Yes |
24
24
  | Every action on every namespace and table, data included | No | Yes |
25
25
 
26
- Workload Users are not `member`s: they never create namespaces, never create tables
27
- outside a namespace, and never grant or revoke roles. They use the roles granted to
28
- them or to their Teams.
26
+ Workload Users are not `member`s: they never create tables outside a namespace and
27
+ never grant or revoke roles. A workload creates a namespace only by registering a table
28
+ into a free name, and then holds `editor` on it. They use the roles granted to them or
29
+ to their Teams.
29
30
 
30
31
  Initial runtime setup must check the platform admin fact before the application
31
32
  catalog exists. Configuring a pending database does not make the first caller an
@@ -44,6 +45,11 @@ admin.
44
45
  A namespace role also gives the table role of the same name on every table currently
45
46
  in the namespace, including tables created later.
46
47
 
48
+ The people who manage a namespace's creating workload hold `namespaces.get`,
49
+ `namespaces.get_access` and `namespaces.set_access` on it, with no role. They may grant
50
+ any role there, `owner` included, but they get no table actions and change no
51
+ table-level bindings.
52
+
47
53
  ## Table actions and roles
48
54
 
49
55
  | Action | `metadata_viewer` | `data_viewer` | `data_writer` | `editor` | `owner` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.47.dev76"
7
+ version = "0.1.48.dev77"
8
8
  description = "Main Sequence MetaTables Python client and standalone API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.47.dev76
3
+ Version: 0.1.48.dev77
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