mainsequence-metatable 0.1.31.dev60__tar.gz → 0.1.32.dev61__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 (592) hide show
  1. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/PKG-INFO +1 -1
  2. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0013-application-owned-migrations.md +33 -0
  3. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/openapi.json +96 -0
  4. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/deploy-application-migrations.md +6 -0
  5. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/pyproject.toml +1 -1
  6. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/PKG-INFO +1 -1
  7. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/SOURCES.txt +1 -0
  8. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/managed_finalize.py +40 -3
  9. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/access.py +7 -2
  10. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/finalize_managed.py +8 -1
  11. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/__init__.py +49 -0
  12. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/models.py +4 -0
  13. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_application_owned_migrations.py +4 -5
  14. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_managed_finalize_unchanged.py +65 -0
  15. mainsequence_metatable-0.1.32.dev61/tests/e2e/test_migration_metadata_and_downgrade.py +162 -0
  16. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/uv.lock +1 -1
  17. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  18. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  19. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  20. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  21. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  22. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  23. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  24. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/discover-tables/SKILL.md +0 -0
  25. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  26. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  27. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  28. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  29. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  30. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  31. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/.mainsequence/workflows/metatables-api.yaml +0 -0
  32. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/LICENSE +0 -0
  33. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/MANIFEST.in +0 -0
  34. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/README.md +0 -0
  35. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/alembic.ini +0 -0
  36. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/api/metatables/main.py +0 -0
  37. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/compose.database-tests.yml +0 -0
  38. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  39. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  40. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  41. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  42. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  43. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  44. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  45. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  46. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0007-database-enforced-table-access.md +0 -0
  47. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  48. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  49. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  50. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0009-shared-credential-store.md +0 -0
  51. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  52. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  53. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  54. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  55. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0016-impact-preflight.md +0 -0
  56. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  57. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  58. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0018-table-search.md +0 -0
  59. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  60. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  61. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  62. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/adr/index.md +0 -0
  63. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/authentication-and-errors.md +0 -0
  64. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/data-sources.md +0 -0
  65. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/overview.md +0 -0
  66. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/reference.md +0 -0
  67. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/tables-and-migrations.md +0 -0
  68. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/api/time-index-and-updates.md +0 -0
  69. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/assets/branding/metatables.svg +0 -0
  70. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/assets/diagrams/local-client-experience.svg +0 -0
  71. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/assets/diagrams/namespace-access.svg +0 -0
  72. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/bounded-transfers.md +0 -0
  73. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/build-an-updater.md +0 -0
  74. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/define-and-migrate-tables.md +0 -0
  75. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/installation-and-connection.md +0 -0
  76. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/local-storage.md +0 -0
  77. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/query-and-mutate.md +0 -0
  78. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/quickstart.md +0 -0
  79. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/read-existing-time-index-tables.md +0 -0
  80. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/register-existing-tables.md +0 -0
  81. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/tutorial.md +0 -0
  82. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/client/upgrade-legacy-app.md +0 -0
  83. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/architecture.md +0 -0
  84. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/data-sources.md +0 -0
  85. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/identity-and-scope.md +0 -0
  86. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/permissions-namespaces-labels.md +0 -0
  87. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/runs-and-execution-graphs.md +0 -0
  88. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  89. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/concepts/time-index-tables-and-updates.md +0 -0
  90. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/contributing/architecture-and-boundaries.md +0 -0
  91. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/contributing/database-backends.md +0 -0
  92. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/contributing/documentation.md +0 -0
  93. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/contributing/releasing.md +0 -0
  94. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/contributing/testing.md +0 -0
  95. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/README.md +0 -0
  96. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/__init__.py +0 -0
  97. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/bounded_reader.py +0 -0
  98. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/data_sources/README.md +0 -0
  99. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/data_sources/mssql.json +0 -0
  100. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/data_sources/mysql.json +0 -0
  101. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/data_sources/postgresql.json +0 -0
  102. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/data_sources/register.py +0 -0
  103. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/external_table.py +0 -0
  104. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/README.md +0 -0
  105. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/__init__.py +0 -0
  106. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/__main__.py +0 -0
  107. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/migrations/__init__.py +0 -0
  108. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/migrations/env.py +0 -0
  109. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/migrations/script.py.mako +0 -0
  110. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  111. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/local_app/tables.py +0 -0
  112. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/query.py +0 -0
  113. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/quickstart.py +0 -0
  114. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/reader.py +0 -0
  115. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/scripts/__init__.py +0 -0
  116. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/scripts/setup_metatables.py +0 -0
  117. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tables.py +0 -0
  118. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/README.md +0 -0
  119. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/__init__.py +0 -0
  120. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/__main__.py +0 -0
  121. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/data/README.md +0 -0
  122. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  123. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/frames.py +0 -0
  124. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/__init__.py +0 -0
  125. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/env.py +0 -0
  126. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/registry.py +0 -0
  127. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  128. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  129. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  130. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  131. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  132. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/operations.py +0 -0
  133. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/tables.py +0 -0
  134. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/tutorial/updaters.py +0 -0
  135. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/examples/updater.py +0 -0
  136. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/index.md +0 -0
  137. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/catalog-migrations.md +0 -0
  138. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/configuration.md +0 -0
  139. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/hosted-runtime.md +0 -0
  140. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/local-runtime.md +0 -0
  141. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/recovery-and-observability.md +0 -0
  142. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/run-history.md +0 -0
  143. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/operations/run-logs.md +0 -0
  144. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/reference/capabilities.md +0 -0
  145. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/reference/cli.md +0 -0
  146. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/reference/python.md +0 -0
  147. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/security/index.md +0 -0
  148. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/security/ownership-and-sharing.md +0 -0
  149. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/docs/security/permissions.md +0 -0
  150. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/mkdocs.yml +0 -0
  151. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/__init__.py +0 -0
  152. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/build_reference.py +0 -0
  153. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_boundaries.py +0 -0
  154. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_client_api_coverage.py +0 -0
  155. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_distribution_sources.py +0 -0
  156. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_docs.py +0 -0
  157. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_examples_debug.py +0 -0
  158. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/check_project.py +0 -0
  159. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/dev_release_version.py +0 -0
  160. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/test_databases.py +0 -0
  161. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/scripts/test_postgresql.py +0 -0
  162. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/setup.cfg +0 -0
  163. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  164. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  165. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  166. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  167. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/__init__.py +0 -0
  168. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/_admin_source.json +0 -0
  169. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/_build.py +0 -0
  170. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/_skill_bundle.py +0 -0
  171. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/analysis.py +0 -0
  172. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/analyst/__init__.py +0 -0
  173. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/__init__.py +0 -0
  174. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/__init__.py +0 -0
  175. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/auth/__init__.py +0 -0
  176. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/auth/boundary.py +0 -0
  177. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/auth/local_actor.py +0 -0
  178. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/bootstrap.py +0 -0
  179. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/configuration.py +0 -0
  180. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/connection_count.py +0 -0
  181. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/credential_admin.py +0 -0
  182. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/development.py +0 -0
  183. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/development_client.py +0 -0
  184. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/error_logging.py +0 -0
  185. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/main.py +0 -0
  186. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/mcp.py +0 -0
  187. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/platform_cache.py +0 -0
  188. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/__init__.py +0 -0
  189. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/access_map.py +0 -0
  190. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/caller.py +0 -0
  191. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/column_search.py +0 -0
  192. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/contract_validation.py +0 -0
  193. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/data_sources.py +0 -0
  194. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/migration_connection.py +0 -0
  195. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/namespaces.py +0 -0
  196. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/run_logs.py +0 -0
  197. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/runtime_context.py +0 -0
  198. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/schema_graph.py +0 -0
  199. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/security.py +0 -0
  200. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_cascade.py +0 -0
  201. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_crud.py +0 -0
  202. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_delete.py +0 -0
  203. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_filter.py +0 -0
  204. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_import.py +0 -0
  205. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_introspection.py +0 -0
  206. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_patch.py +0 -0
  207. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_registration.py +0 -0
  208. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_response.py +0 -0
  209. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_search.py +0 -0
  210. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_search_document.py +0 -0
  211. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_sql.py +0 -0
  212. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  213. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  214. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  215. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  216. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  217. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_batch.py +0 -0
  218. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  219. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_constants.py +0 -0
  220. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_crud.py +0 -0
  221. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_details.py +0 -0
  222. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_graph.py +0 -0
  223. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  224. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_registration.py +0 -0
  225. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_runs.py +0 -0
  226. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/routes/update_statistics.py +0 -0
  227. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/runtime.py +0 -0
  228. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/runtime_control.py +0 -0
  229. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/runtime_database.py +0 -0
  230. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/source_passwords.py +0 -0
  231. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/app/transfer.py +0 -0
  232. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/__init__.py +0 -0
  233. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/__init__.py +0 -0
  234. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  235. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  236. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  237. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  238. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  239. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  240. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  241. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  242. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  243. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  244. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  245. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  246. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  247. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  248. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  249. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  250. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  251. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  252. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  253. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  254. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  255. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  256. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/catalog.py +0 -0
  257. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  258. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  259. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  260. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/contracts.py +0 -0
  261. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/hosted.py +0 -0
  262. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/hosted_access.py +0 -0
  263. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  264. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/native.py +0 -0
  265. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/operations.py +0 -0
  266. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/pages.py +0 -0
  267. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/postgresql_access.py +0 -0
  268. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/registry.py +0 -0
  269. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  270. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/relational.py +0 -0
  271. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  272. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/sqlite_access.py +0 -0
  273. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/streaming.py +0 -0
  274. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/backends/timescale.py +0 -0
  275. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/contracts/__init__.py +0 -0
  276. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  277. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  278. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  279. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/contracts/values.py +0 -0
  280. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/__init__.py +0 -0
  281. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  282. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  283. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  284. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/label_rules.py +0 -0
  285. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  286. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/domain/update_constants.py +0 -0
  287. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/__init__.py +0 -0
  288. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  289. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  290. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  291. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  292. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  293. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  294. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  295. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  296. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  297. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  298. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  299. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/__init__.py +0 -0
  300. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/env.py +0 -0
  301. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  302. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  303. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  304. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  305. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  306. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  307. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  308. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  309. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  310. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  311. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  312. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  313. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  314. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  315. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/__init__.py +0 -0
  316. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  317. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  318. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  319. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/create_table.py +0 -0
  320. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/import_relations.py +0 -0
  321. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  322. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  323. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  324. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/__init__.py +0 -0
  325. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/cascade.py +0 -0
  326. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/catalog.py +0 -0
  327. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/database.py +0 -0
  328. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/grants.py +0 -0
  329. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/impact.py +0 -0
  330. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/labels.py +0 -0
  331. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/locking.py +0 -0
  332. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/models.py +0 -0
  333. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  334. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/projections.py +0 -0
  335. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  336. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  337. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  338. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  339. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  340. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/table_response.py +0 -0
  341. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  342. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  343. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/updates.py +0 -0
  344. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  345. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  346. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/__init__.py +0 -0
  347. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/documents.py +0 -0
  348. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/embeddings.py +0 -0
  349. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/index.py +0 -0
  350. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/ranking.py +0 -0
  351. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/text.py +0 -0
  352. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/backend/search/worker.py +0 -0
  353. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/metatables/__init__.py +0 -0
  354. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/metatables/configuration.yaml +0 -0
  355. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/metatables/main.py +0 -0
  356. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/api/request_timing.py +0 -0
  357. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/__init__.py +0 -0
  358. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/admin_install.py +0 -0
  359. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/app.py +0 -0
  360. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/filters.py +0 -0
  361. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/local.py +0 -0
  362. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/migrations.py +0 -0
  363. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/project.py +0 -0
  364. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/cli/skills.py +0 -0
  365. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/compiled_sql/__init__.py +0 -0
  366. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/compiled_sql/mssql.py +0 -0
  367. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/compiled_sql/v1.py +0 -0
  368. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/dtype_codec.py +0 -0
  369. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/endpoint.py +0 -0
  370. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/README.md +0 -0
  371. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/__init__.py +0 -0
  372. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/bounded_reader.py +0 -0
  373. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/data_sources/README.md +0 -0
  374. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/data_sources/mssql.json +0 -0
  375. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/data_sources/mysql.json +0 -0
  376. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/data_sources/postgresql.json +0 -0
  377. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/data_sources/register.py +0 -0
  378. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/external_table.py +0 -0
  379. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/README.md +0 -0
  380. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/__init__.py +0 -0
  381. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/__main__.py +0 -0
  382. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  383. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/migrations/env.py +0 -0
  384. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  385. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  386. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/local_app/tables.py +0 -0
  387. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/query.py +0 -0
  388. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/quickstart.py +0 -0
  389. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/reader.py +0 -0
  390. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/scripts/__init__.py +0 -0
  391. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  392. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tables.py +0 -0
  393. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/README.md +0 -0
  394. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/__init__.py +0 -0
  395. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/__main__.py +0 -0
  396. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/data/README.md +0 -0
  397. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  398. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/frames.py +0 -0
  399. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  400. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  401. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  402. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  403. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  404. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  405. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  406. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  407. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/operations.py +0 -0
  408. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/tables.py +0 -0
  409. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/tutorial/updaters.py +0 -0
  410. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/examples/updater.py +0 -0
  411. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/future_registry.py +0 -0
  412. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/hashing.py +0 -0
  413. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/instrumentation.py +0 -0
  414. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/local_connection.py +0 -0
  415. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/local_files.py +0 -0
  416. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/local_run_logs.py +0 -0
  417. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/log_contract.py +0 -0
  418. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/alembic.py +0 -0
  419. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/connection.py +0 -0
  420. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/env.py +0 -0
  421. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/provider.py +0 -0
  422. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/registry.py +0 -0
  423. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/runner.py +0 -0
  424. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/scaffold.py +0 -0
  425. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/sqlite.py +0 -0
  426. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/templates/__init__.py +0 -0
  427. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/templates/env.py.mako +0 -0
  428. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/templates/script.py.mako +0 -0
  429. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/migrations/tls.py +0 -0
  430. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/pydantic_metadata.py +0 -0
  431. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/run_logging.py +0 -0
  432. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/runtime.py +0 -0
  433. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/runtime_context.py +0 -0
  434. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/runtime_contract.py +0 -0
  435. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/schema_names.py +0 -0
  436. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/sdk_compat.py +0 -0
  437. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/sqlalchemy_contracts.py +0 -0
  438. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/storage_layout_contract.py +0 -0
  439. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/time_index_table_refs.py +0 -0
  440. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/transfer.py +0 -0
  441. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/transfer_contract.py +0 -0
  442. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/transport.py +0 -0
  443. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/update_configuration_contract.py +0 -0
  444. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/__init__.py +0 -0
  445. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/configuration.py +0 -0
  446. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/dependencies.py +0 -0
  447. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/managers.py +0 -0
  448. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/namespacing.py +0 -0
  449. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/runner.py +0 -0
  450. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/updaters.py +0 -0
  451. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/updaters/utils.py +0 -0
  452. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/src/metatables/upload.py +0 -0
  453. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/analyst/test_agent_surface.py +0 -0
  454. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/analyst/test_api_search.py +0 -0
  455. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/analyst/test_mcp.py +0 -0
  456. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/analyst/test_tools.py +0 -0
  457. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  458. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_caller_endpoint.py +0 -0
  459. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_data_source_identity.py +0 -0
  460. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_development_client.py +0 -0
  461. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_hosted_agent.py +0 -0
  462. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_hosted_environment_target.py +0 -0
  463. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_local_mode.py +0 -0
  464. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_platform_fact_cache.py +0 -0
  465. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_request_identity.py +0 -0
  466. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_runtime_bootstrap.py +0 -0
  467. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_runtime_database.py +0 -0
  468. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_runtime_scaffold.py +0 -0
  469. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_runtime_selection.py +0 -0
  470. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_runtime_storage_binding.py +0 -0
  471. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/auth/test_source_passwords.py +0 -0
  472. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_catalog_foundation.py +0 -0
  473. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_contract_projection.py +0 -0
  474. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_database_config.py +0 -0
  475. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_index_statistics.py +0 -0
  476. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_migration.py +0 -0
  477. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/catalog/test_schema_validation.py +0 -0
  478. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/conftest.py +0 -0
  479. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/capabilities.json +0 -0
  480. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/client_signatures.json +0 -0
  481. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/database_operations.json +0 -0
  482. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_bounded_transfer.py +0 -0
  483. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_compiler_runtime_source.py +0 -0
  484. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_relation_batching.py +0 -0
  485. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_relation_import.py +0 -0
  486. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_runtime_contract_compat.py +0 -0
  487. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_storage_layouts.py +0 -0
  488. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/contracts/test_table_contracts.py +0 -0
  489. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/Dockerfile +0 -0
  490. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/Dockerfile.dockerignore +0 -0
  491. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/__init__.py +0 -0
  492. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/conftest.py +0 -0
  493. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/provider/__init__.py +0 -0
  494. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/provider/env.py +0 -0
  495. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  496. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_api_contract.py +0 -0
  497. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_application_migration.py +0 -0
  498. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  499. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_catalog_contract.py +0 -0
  500. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_credential_catalog.py +0 -0
  501. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_physical_contract.py +0 -0
  502. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_relation_import.py +0 -0
  503. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  504. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_sql_security.py +0 -0
  505. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_backend/test_update_client.py +0 -0
  506. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_operations/test_physical_operations.py +0 -0
  507. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_operations/test_postgresql_operations.py +0 -0
  508. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  509. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/documentation/test_project_checks.py +0 -0
  510. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_admin_installation.py +0 -0
  511. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_api_endpoint.py +0 -0
  512. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_catalog_outage.py +0 -0
  513. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_api_contract.py +0 -0
  514. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_api_coverage.py +0 -0
  515. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_migration_scaffold.py +0 -0
  516. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_migration_tls.py +0 -0
  517. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_package.py +0 -0
  518. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_signatures.py +0 -0
  519. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_client_value_behaviors.py +0 -0
  520. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_data_source_registry.py +0 -0
  521. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_local_actor_client_api.py +0 -0
  522. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_local_cli_workflow.py +0 -0
  523. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_local_client_selection.py +0 -0
  524. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  525. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_namespaces_admin_http.py +0 -0
  526. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_public_imports.py +0 -0
  527. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_remaining_client_routes.py +0 -0
  528. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_run_graphs.py +0 -0
  529. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_run_logs.py +0 -0
  530. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_runtime_upgrade.py +0 -0
  531. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_sdk_local_startup.py +0 -0
  532. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_sqlite_runtime.py +0 -0
  533. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_delete_client_api.py +0 -0
  534. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_filter_client_api.py +0 -0
  535. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_introspection_client_api.py +0 -0
  536. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_patch_client_api.py +0 -0
  537. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_search_api.py +0 -0
  538. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_search_document_api.py +0 -0
  539. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_search_scale.py +0 -0
  540. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_stats_api.py +0 -0
  541. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_update_pipeline.py +0 -0
  542. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_table_updates_http.py +0 -0
  543. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  544. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  545. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  546. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_update_batch_client_api.py +0 -0
  547. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  548. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  549. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  550. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/e2e/test_update_registration_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/examples/test_documented_examples.py +0 -0
  552. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/examples/test_postgresql_examples.py +0 -0
  553. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/examples/test_setup_launch.py +0 -0
  554. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/examples/test_tutorial.py +0 -0
  555. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_batch_introspection.py +0 -0
  556. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_connection_reuse.py +0 -0
  557. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_credential_store.py +0 -0
  558. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_data_source_rules.py +0 -0
  559. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_local_data_sources.py +0 -0
  560. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_local_run_logs.py +0 -0
  561. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_postgresql_connection.py +0 -0
  562. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_postgresql_sql.py +0 -0
  563. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_postgresql_tables.py +0 -0
  564. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  565. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_request_timing.py +0 -0
  566. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_serving_policy.py +0 -0
  567. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_source_validation.py +0 -0
  568. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/integrations/test_sqlite_operations.py +0 -0
  569. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/labels/test_labels.py +0 -0
  570. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_create_table_operation.py +0 -0
  571. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_create_table_postgres.py +0 -0
  572. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_physical_operation_journal.py +0 -0
  573. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_register_catalog.py +0 -0
  574. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_search_documents.py +0 -0
  575. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/operations/test_timescale_policies.py +0 -0
  576. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/packaging/test_client_skills.py +0 -0
  577. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/packaging/test_dev_release_version.py +0 -0
  578. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/packaging/test_distribution_sources.py +0 -0
  579. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/packaging/test_editable_build.py +0 -0
  580. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/packaging/test_installed_distribution.py +0 -0
  581. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_access_map.py +0 -0
  582. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_deployment_security.py +0 -0
  583. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_governed_sql_scope.py +0 -0
  584. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_incremental_security.py +0 -0
  585. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_local_actor_membership.py +0 -0
  586. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_migration_boundary.py +0 -0
  587. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_namespace_grants.py +0 -0
  588. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_security_api.py +0 -0
  589. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_table_body_filter.py +0 -0
  590. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_table_grants.py +0 -0
  591. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_table_queries.py +0 -0
  592. {mainsequence_metatable-0.1.31.dev60 → mainsequence_metatable-0.1.32.dev61}/tests/permissions/test_workload_principals.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.31.dev60
3
+ Version: 0.1.32.dev61
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
@@ -169,6 +169,39 @@ flowchart TD
169
169
  replaying already-applied DDL. The response contract and client calls stay the
170
170
  same; no consuming-application opt-in is required.
171
171
 
172
+ ### Authored metadata and SQLite policy reflection (2026-10-10 amendment)
173
+
174
+ The public migration runner sends current authored table descriptions, labels and
175
+ column descriptions, labels and logical names in each finalization batch, including
176
+ when Alembic is already at the requested revision. Reusing an existing binding at
177
+ reservation time must not suppress metadata refresh ([#57](https://github.com/mainsequence-projects/MetaTables/issues/57)).
178
+ The runner compares authored values with the fresh reservation lookup and sends
179
+ only changed, non-empty metadata; it never caches equality across deployments.
180
+
181
+ The optional `authored_metadata` map is keyed only by UIDs in that request. The API
182
+ applies it after Writer/provider/source admission and fresh physical inspection,
183
+ inside the table's savepoint. The physical snapshot remains authoritative for
184
+ types, nullability, indexes, keys and binding identity. As with registration,
185
+ empty/absent metadata preserves existing descriptions and labels. Equal metadata
186
+ does not dirty rows or replace label links; the next unchanged upgrade still
187
+ performs no catalog DML. Failed reconciliation rolls back metadata and can retry.
188
+ Older clients may omit the map; clients that send it require an API supporting it.
189
+
190
+ Security dependency reflection uses the backend's physical schema normalization.
191
+ SQLite maps logical provider schemas and physical `main` cascade targets to the
192
+ same physical namespace, rather than querying `PRAGMA public.foreign_key_list`.
193
+ This keeps per-batch checks scoped when a downgrade has dropped tables belonging
194
+ to later batches ([#58](https://github.com/mainsequence-projects/MetaTables/issues/58)).
195
+ The conservative full policy sweep on a genuine reflection failure remains, and
196
+ unexpected missing tables still fail without losing their catalog bindings. Only
197
+ explicitly removed, freshly confirmed absent tables may lose bindings.
198
+
199
+ Regression coverage runs the public client against a real disposable SQLite API:
200
+ metadata changes at an unchanged revision, zero-write reruns, a provider larger
201
+ than a finalization batch with later-batch drops, and a subsequent normal upgrade.
202
+ Route coverage additionally checks physical-shape rejection, Writer admission,
203
+ unrequested metadata UIDs, and failed metadata finalization/retry.
204
+
172
205
  ## MetaTables system migrations
173
206
 
174
207
  Hosted system upgrades also run as a deployment prerequisite Job
@@ -18,6 +18,85 @@
18
18
  "title": "Assignments",
19
19
  "type": "object"
20
20
  },
21
+ "AuthoredColumnMetadata": {
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "description": {
25
+ "anyOf": [
26
+ {
27
+ "type": "string"
28
+ },
29
+ {
30
+ "type": "null"
31
+ }
32
+ ],
33
+ "title": "Description"
34
+ },
35
+ "label": {
36
+ "anyOf": [
37
+ {
38
+ "type": "string"
39
+ },
40
+ {
41
+ "type": "null"
42
+ }
43
+ ],
44
+ "title": "Label"
45
+ },
46
+ "logical_name": {
47
+ "anyOf": [
48
+ {
49
+ "type": "string"
50
+ },
51
+ {
52
+ "type": "null"
53
+ }
54
+ ],
55
+ "title": "Logical Name"
56
+ },
57
+ "name": {
58
+ "title": "Name",
59
+ "type": "string"
60
+ }
61
+ },
62
+ "required": [
63
+ "name"
64
+ ],
65
+ "title": "AuthoredColumnMetadata",
66
+ "type": "object"
67
+ },
68
+ "AuthoredTableMetadata": {
69
+ "additionalProperties": false,
70
+ "properties": {
71
+ "columns": {
72
+ "items": {
73
+ "$ref": "#/components/schemas/AuthoredColumnMetadata"
74
+ },
75
+ "title": "Columns",
76
+ "type": "array"
77
+ },
78
+ "description": {
79
+ "anyOf": [
80
+ {
81
+ "type": "string"
82
+ },
83
+ {
84
+ "type": "null"
85
+ }
86
+ ],
87
+ "title": "Description"
88
+ },
89
+ "labels": {
90
+ "items": {
91
+ "type": "string"
92
+ },
93
+ "title": "Labels",
94
+ "type": "array"
95
+ }
96
+ },
97
+ "title": "AuthoredTableMetadata",
98
+ "type": "object"
99
+ },
21
100
  "BatchDetailsPatch": {
22
101
  "properties": {
23
102
  "update_map": {
@@ -622,6 +701,23 @@
622
701
  ],
623
702
  "title": "Alembic Version Meta Table Uid"
624
703
  },
704
+ "authored_metadata": {
705
+ "anyOf": [
706
+ {
707
+ "additionalProperties": {
708
+ "$ref": "#/components/schemas/AuthoredTableMetadata"
709
+ },
710
+ "propertyNames": {
711
+ "format": "uuid"
712
+ },
713
+ "type": "object"
714
+ },
715
+ {
716
+ "type": "null"
717
+ }
718
+ ],
719
+ "title": "Authored Metadata"
720
+ },
625
721
  "code_repository_context": {
626
722
  "anyOf": [
627
723
  {
@@ -37,6 +37,12 @@ scheduling and workflow coordination.
37
37
  An already-current database still reconciles the provider's catalog contracts.
38
38
  Checks use fresh table inventories and batched physical reflection; an unchanged
39
39
  revision does not skip missing-table checks, permissions or metadata refresh.
40
+ Each finalization batch carries current authored descriptions, labels and column
41
+ descriptions/labels/logical names. Non-empty values refresh existing bindings
42
+ without a new revision; empty or absent values preserve catalog metadata, as in
43
+ registration. Physical shape always comes from fresh database inspection. The
44
+ next equal-valued upgrade skips catalog writes. This metadata payload requires
45
+ the corresponding API update as well as the updated client.
40
46
  PostgreSQL batches metadata queries by schema; other dialects use SQLAlchemy's
41
47
  bulk reflection and its supported fallbacks. Caches do not survive the request.
42
48
  Client improvements require updating the application's installed MetaTables package
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.31.dev60"
7
+ version = "0.1.32.dev61"
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.31.dev60
3
+ Version: 0.1.32.dev61
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
@@ -519,6 +519,7 @@ tests/e2e/test_local_cli_workflow.py
519
519
  tests/e2e/test_local_client_selection.py
520
520
  tests/e2e/test_managed_finalize_client_api.py
521
521
  tests/e2e/test_managed_finalize_unchanged.py
522
+ tests/e2e/test_migration_metadata_and_downgrade.py
522
523
  tests/e2e/test_namespaces_admin_http.py
523
524
  tests/e2e/test_public_imports.py
524
525
  tests/e2e/test_remaining_client_routes.py
@@ -9,7 +9,7 @@ from typing import Any
9
9
  from uuid import UUID
10
10
 
11
11
  from fastapi import APIRouter, Depends, HTTPException, Response
12
- from pydantic import BaseModel, ConfigDict, Field
12
+ from pydantic import BaseModel, ConfigDict, Field, field_validator
13
13
  from sqlalchemy import delete
14
14
  from sqlalchemy.exc import IntegrityError, SQLAlchemyError
15
15
  from sqlalchemy.orm import Session
@@ -31,12 +31,14 @@ from metatables.api.backend.backends.timescale import (
31
31
  from metatables.api.backend.contracts.table_contracts import ContractValidationError
32
32
  from metatables.api.backend.domain.catalog_rules import CatalogInvariantError
33
33
  from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
34
+ from metatables.api.backend.domain.label_rules import LabelInvariantError, normalize_label_name
34
35
  from metatables.api.backend.domain.permission_rules import TrustedActorFacts
35
36
  from metatables.api.backend.integrations.data_source_provider import DataSourceProvider
36
37
  from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
37
38
  from metatables.api.backend.operations.finalize_managed import contract_from_physical_snapshot
38
39
  from metatables.api.backend.operations.register_catalog import time_index_spec_from_contract
39
40
  from metatables.api.backend.persistence.grants import GrantRepository
41
+ from metatables.api.backend.persistence.labels import LabelRepository
40
42
  from metatables.api.backend.persistence.locking import lock_catalog
41
43
  from metatables.api.backend.persistence.models import (
42
44
  MetaTable,
@@ -58,6 +60,28 @@ logger = logging.getLogger(__name__)
58
60
  router = APIRouter(prefix="/meta-tables", tags=["MetaTables"])
59
61
 
60
62
 
63
+ class AuthoredColumnMetadata(BaseModel):
64
+ model_config = ConfigDict(extra="forbid")
65
+
66
+ name: str
67
+ description: str | None = None
68
+ label: str | None = None
69
+ logical_name: str | None = None
70
+
71
+
72
+ class AuthoredTableMetadata(BaseModel):
73
+ model_config = ConfigDict(extra="forbid")
74
+
75
+ description: str | None = None
76
+ labels: list[str] = Field(default_factory=list)
77
+ columns: list[AuthoredColumnMetadata] = Field(default_factory=list)
78
+
79
+ @field_validator("labels")
80
+ @classmethod
81
+ def valid_labels(cls, labels):
82
+ return [normalize_label_name(label) for label in labels if label.strip()]
83
+
84
+
61
85
  class FinalizeManagedRequest(BaseModel):
62
86
  model_config = ConfigDict(extra="forbid")
63
87
 
@@ -71,6 +95,7 @@ class FinalizeManagedRequest(BaseModel):
71
95
  # these may lose their binding when absent; absence alone is never removal.
72
96
  removed_meta_table_uids: list[UUID] = Field(default_factory=list, max_length=200)
73
97
  code_repository_context: dict[str, Any] | None = None
98
+ authored_metadata: dict[UUID, AuthoredTableMetadata] | None = None
74
99
 
75
100
 
76
101
  def physical_hypertable_converter() -> Callable[..., None]:
@@ -134,6 +159,8 @@ def finalize_managed(
134
159
  """Reconcile each requested row and return a per-table result envelope."""
135
160
  started = perf_counter()
136
161
  requested = list(dict.fromkeys(payload.meta_table_uids))
162
+ if set(payload.authored_metadata or {}) - set(requested):
163
+ raise HTTPException(status_code=422, detail="Authored metadata must name requested MetaTables.")
137
164
  removed = set(payload.removed_meta_table_uids)
138
165
  lock_catalog(session)
139
166
  guards = {
@@ -232,8 +259,10 @@ def finalize_managed(
232
259
  continue
233
260
  try:
234
261
  with session.begin_nested():
262
+ authored = (payload.authored_metadata or {}).get(uid)
235
263
  contract = contract_from_physical_snapshot(
236
- session=session, table=table, snapshot=snapshot
264
+ session=session, table=table, snapshot=snapshot,
265
+ authored_metadata=authored.model_dump() if authored else None,
237
266
  )
238
267
  targets = resolved_foreign_key_targets(
239
268
  session, data_source_uid=table.data_source_uid, contract=contract,
@@ -251,6 +280,14 @@ def finalize_managed(
251
280
  "provisioning_status": "active",
252
281
  "protect_from_deletion": True,
253
282
  }
283
+ if authored is not None:
284
+ if authored.description and authored.description.strip():
285
+ updates["description"] = authored.description
286
+ if authored.labels:
287
+ LabelRepository(session).mutate_target(
288
+ kind="meta_table", target_uid=uid, mode="replace",
289
+ names=authored.labels, created_by_user_uid=actor.user_uid,
290
+ )
254
291
  if not same_contract_state(table.table_contract, contract):
255
292
  updates["table_contract"] = contract
256
293
  if not same_contract_state(table.introspection_snapshot, snapshot):
@@ -288,7 +325,7 @@ def finalize_managed(
288
325
  check_table_security_on_commit(session, table)
289
326
  rows.append(_row(table, uid, previous=previous, specialization=specialization,
290
327
  exists=True, finalized=previous != "active"))
291
- except (CatalogInvariantError, ContractValidationError, IntegrityError) as exc:
328
+ except (CatalogInvariantError, ContractValidationError, LabelInvariantError, IntegrityError) as exc:
292
329
  logger.warning("Physical table contract could not be reconciled", exc_info=True)
293
330
  rows.append(_row(
294
331
  table, uid, previous=previous, specialization=specialization, exists=True,
@@ -217,7 +217,11 @@ class DatabaseAccess:
217
217
  }
218
218
 
219
219
  def key(schema, name):
220
- return self.backend.catalog.registration_schema(self.source, schema), name
220
+ # SQLite stores logical provider schemas such as public, but its
221
+ # physical relations and cascade targets all live in main.
222
+ return self.backend.catalog.schema(
223
+ self.backend.catalog.registration_schema(self.source, schema)
224
+ ), name
221
225
 
222
226
  by_name = {key(t.physical_schema, t.physical_table_name): uid for uid, t in tables.items()}
223
227
  names = {key(t.physical_schema, t.physical_table_name) for uid, t in tables.items() if uid in changed}
@@ -235,7 +239,8 @@ class DatabaseAccess:
235
239
  continue
236
240
  try:
237
241
  references = inspector.get_foreign_keys(
238
- table.physical_table_name, schema=table.physical_schema
242
+ table.physical_table_name,
243
+ schema=self.backend.catalog.schema(table.physical_schema),
239
244
  )
240
245
  except Exception:
241
246
  return None
@@ -15,7 +15,8 @@ from metatables.api.backend.persistence.models import MetaTable
15
15
 
16
16
 
17
17
  def contract_from_physical_snapshot(
18
- *, session: Session, table: MetaTable, snapshot: Mapping[str, Any]
18
+ *, session: Session, table: MetaTable, snapshot: Mapping[str, Any],
19
+ authored_metadata: Mapping[str, Any] | None = None,
19
20
  ) -> dict[str, Any]:
20
21
  """Use physical column, index, and FK facts; preserve declared semantic metadata."""
21
22
  schema = str(snapshot.get("schema_name") or table.physical_schema or "").strip()
@@ -38,12 +39,18 @@ def contract_from_physical_snapshot(
38
39
  item.get("name"): item for item in existing.get("columns") or ()
39
40
  if isinstance(item, Mapping)
40
41
  }
42
+ authored_columns = {column["name"]: column for column in
43
+ (authored_metadata or {}).get("columns") or ()}
41
44
  columns = []
42
45
  for index, item in enumerate(snapshot.get("columns") or ()):
43
46
  if not isinstance(item, Mapping) or not item.get("name"):
44
47
  continue
45
48
  column_name = str(item["name"])
46
49
  prior = prior_columns.get(column_name) or {}
50
+ # Match registration semantics: absent/empty metadata preserves the
51
+ # catalog's descriptions. Authored shape never overrides fresh DDL.
52
+ prior = {**prior, **{key: value for key, value in authored_columns.get(column_name, {}).items()
53
+ if key in {"description", "label", "logical_name"} and value}}
47
54
  columns.append({
48
55
  "name": column_name,
49
56
  "logical_name": prior.get("logical_name"),
@@ -622,6 +622,26 @@ class AlembicMetaTableMigration:
622
622
  dict.fromkeys([str(registry_uid), *prepared.meta_table_uids])
623
623
  )
624
624
  removed = set(prepared.removed_meta_table_uids)
625
+ # Existing bindings bypass reservation. Carry their current descriptive
626
+ # metadata to finalization without trusting models for physical shape.
627
+ authored_metadata = {}
628
+ for model in self.metatable_models:
629
+ uid = model.get_meta_table_uid()
630
+ if uid in (None, "") or str(uid) in removed:
631
+ continue
632
+ request = model.build_registration_request(data_source_uid=prepared.data_source_uid)
633
+ contract = _collection_create_table_contract_payload(request.table_contract)
634
+ metadata = {
635
+ "description": request.description,
636
+ "labels": list(request.labels or []),
637
+ "columns": [
638
+ {key: column.get(key) for key in ("name", "description", "label", "logical_name")}
639
+ for column in contract.get("columns") or []
640
+ ],
641
+ }
642
+ changes = _changed_authored_metadata(_bound_meta_table_for_model(model), metadata)
643
+ if changes:
644
+ authored_metadata[str(uid)] = changes
625
645
  response = _finalize_in_batches(
626
646
  finalize_meta_table_uids,
627
647
  lambda batch: MetaTable.finalize_managed(
@@ -633,6 +653,8 @@ class AlembicMetaTableMigration:
633
653
  alembic_version_meta_table_uid=str(registry_uid),
634
654
  alembic_revision=alembic_revision,
635
655
  removed_meta_table_uids=[uid for uid in batch if uid in removed] or None,
656
+ authored_metadata={uid: authored_metadata[uid] for uid in batch
657
+ if uid in authored_metadata} or None,
636
658
  ),
637
659
  timeout=timeout,
638
660
  on_status=on_metatable_finalize_status,
@@ -1062,6 +1084,33 @@ def resolve_alembic_revision_metadata(
1062
1084
  return str(resolved.revision), _normalize_down_revision(resolved.down_revision)
1063
1085
 
1064
1086
 
1087
+ def _changed_authored_metadata(table: MetaTable | None, metadata: dict[str, Any]) -> dict[str, Any]:
1088
+ """Compare with the fresh reservation lookup, never a cached prior deployment.
1089
+
1090
+ Omit equal or empty values so unchanged upgrades need no extra metadata/label
1091
+ reconciliation. Finalization still inspects physical shape and projections.
1092
+ """
1093
+ if table is None:
1094
+ return metadata
1095
+ changes = {}
1096
+ description = metadata.get("description")
1097
+ if description and description.strip() and description != table.description:
1098
+ changes["description"] = description
1099
+ labels = [" ".join(label.split()) for label in metadata.get("labels") or [] if label.strip()]
1100
+ if labels and set(labels) != set(table.labels):
1101
+ changes["labels"] = labels
1102
+ current = {column["name"]: column for column in table.table_contract.get("columns") or []}
1103
+ columns = []
1104
+ for column in metadata.get("columns") or []:
1105
+ fields = {key: value for key, value in column.items()
1106
+ if key != "name" and value and current.get(column["name"], {}).get(key) != value}
1107
+ if fields:
1108
+ columns.append({"name": column["name"], **fields})
1109
+ if columns:
1110
+ changes["columns"] = columns
1111
+ return changes
1112
+
1113
+
1065
1114
  def _collection_create_row_from_registration_request(
1066
1115
  request: Any,
1067
1116
  *,
@@ -934,6 +934,10 @@ class MetaTableMigrationConnection(BasePydanticModel):
934
934
 
935
935
 
936
936
  class ManagedMetaTableFinalizeRequest(BasePydanticModel):
937
+ authored_metadata: dict[str, dict[str, Any]] | None = Field(
938
+ None,
939
+ description="Current authored descriptions, labels and column metadata, keyed by requested UID.",
940
+ )
937
941
  meta_table_uids: list[str] = Field(
938
942
  ...,
939
943
  min_length=1,
@@ -242,9 +242,8 @@ def test_batched_finalization_sends_every_batch_and_merges_the_results(monkeypat
242
242
  def test_current_revision_still_refreshes_physical_shape_and_rejects_missing_tables(
243
243
  api_runtime, providers, caplog
244
244
  ):
245
- from mainsequence.client.exceptions import BadRequestError
246
-
247
245
  from metatables import MetaTable
246
+ from metatables.migrations import AlembicProviderPhysicalStateError
248
247
  from metatables.runtime_context import get_runtime_context
249
248
 
250
249
  migration = providers[0]
@@ -265,9 +264,9 @@ def test_current_revision_still_refreshes_physical_shape_and_rejects_missing_tab
265
264
  assert f"{phase} took" in caplog.text
266
265
  with engine.begin() as connection:
267
266
  connection.exec_driver_sql("DROP TABLE client_ledger_item")
268
- # SQLite's existing permission reconciliation rejects an active binding
269
- # whose table is gone, before finalization can commit its result envelope.
270
- with pytest.raises(BadRequestError, match="ordinary_table_required"):
267
+ # Scoped policy reflection lets the route return the precise missing-table
268
+ # failure without deleting the unexpectedly missing binding.
269
+ with pytest.raises(AlembicProviderPhysicalStateError, match="physical_table_missing"):
271
270
  run_migration(migration)
272
271
  assert MetaTable.get(identifier="client_ledger.item").uid == item.uid
273
272
  finally:
@@ -254,3 +254,68 @@ def test_unchanged_state_still_runs_fresh_checks(finalized, failure):
254
254
  assert finalized.statements == []
255
255
  if failure == "permission":
256
256
  assert [name for _, name in finalized.inspections[-1]] == ["parents"]
257
+
258
+
259
+ def test_authored_metadata_changes_only_semantics_and_converges(finalized):
260
+ uid = finalized.uids[1]
261
+ finalized.payload["authored_metadata"] = {str(uid): {
262
+ "description": "Changed authored table meaning",
263
+ "labels": ["authored"],
264
+ "columns": [{"name": "value", "description": "Changed authored column meaning",
265
+ "label": "Value", "logical_name": "semantic_value"}],
266
+ }}
267
+ response = finalized.finalize()
268
+ assert response.status_code == 200, response.text
269
+ with Session(finalized.engine) as session:
270
+ table = session.get(MetaTable, uid)
271
+ assert table.description == "Changed authored table meaning"
272
+ column = session.scalar(select(MetaTableColumn).where(
273
+ MetaTableColumn.meta_table_uid == uid, MetaTableColumn.name == "value"))
274
+ assert column.description == "Changed authored column meaning"
275
+ assert column.data_type == "integer" and column.nullable
276
+ before = projection_uids(finalized.engine)
277
+ assert finalized.finalize().status_code == 200
278
+ assert finalized.statements == []
279
+ assert projection_uids(finalized.engine) == before
280
+
281
+
282
+ @pytest.mark.parametrize("invalid", ["shape", "unrequested", "denied"])
283
+ def test_authored_metadata_cannot_bypass_shape_or_writer_admission(finalized, invalid):
284
+ uid = finalized.uids[1]
285
+ metadata = {"description": "Must not be applied"}
286
+ if invalid == "shape":
287
+ metadata["columns"] = [{"name": "value", "data_type": "text", "nullable": False}]
288
+ if invalid == "unrequested":
289
+ uid = uuid4()
290
+ if invalid == "denied":
291
+ with Session(finalized.engine) as session:
292
+ GrantRepository(session).revoke_table_grant(
293
+ table_uid=uid, principal_kind="user", principal_uid=finalized.user)
294
+ session.commit()
295
+ finalized.payload["authored_metadata"] = {str(uid): metadata}
296
+ response = finalized.finalize()
297
+ assert response.status_code == (409 if invalid == "denied" else 422)
298
+ assert finalized.statements == []
299
+ with Session(finalized.engine) as session:
300
+ assert session.get(MetaTable, finalized.uids[1]).description != "Must not be applied"
301
+
302
+
303
+ def test_failed_authored_metadata_finalization_rolls_back_and_retries(finalized, monkeypatch):
304
+ uid = finalized.uids[1]
305
+ finalized.payload["authored_metadata"] = {str(uid): {
306
+ "description": "Retry table description", "labels": ["retry"],
307
+ "columns": [{"name": "value", "description": "Retry column description"}],
308
+ }}
309
+ with Session(finalized.engine) as session:
310
+ before = session.get(MetaTable, uid).description
311
+ with monkeypatch.context() as failure:
312
+ failure.setattr(managed_finalize, "materialize_contract_projection",
313
+ lambda *a, **kw: (_ for _ in ()).throw(IntegrityError("insert", {}, Exception())))
314
+ assert finalized.finalize().status_code == 409
315
+ with Session(finalized.engine) as session:
316
+ assert session.get(MetaTable, uid).description == before
317
+ assert finalized.finalize().status_code == 200
318
+ with Session(finalized.engine) as session:
319
+ assert session.get(MetaTable, uid).description == "Retry table description"
320
+ assert finalized.finalize().status_code == 200
321
+ assert finalized.statements == []