mainsequence-metatable 0.1.36.dev66__tar.gz → 0.1.36.dev67__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 (596) hide show
  1. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.mainsequence/workflows/metatables-api.yaml +27 -0
  2. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/PKG-INFO +1 -1
  3. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0007-database-enforced-table-access.md +6 -0
  4. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +8 -0
  5. mainsequence_metatable-0.1.36.dev67/docs/adr/api/0023-daily-security-check.md +109 -0
  6. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/index.md +1 -0
  7. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/openapi.json +20 -20
  8. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/reference.md +1 -1
  9. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/contributing/releasing.md +10 -0
  10. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/hosted-runtime.md +23 -2
  11. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/recovery-and-observability.md +10 -0
  12. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/reference/capabilities.md +1 -0
  13. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/reference/cli.md +1 -0
  14. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/security/index.md +15 -5
  15. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/security/permissions.md +1 -0
  16. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/mkdocs.yml +1 -0
  17. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/pyproject.toml +1 -1
  18. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/PKG-INFO +1 -1
  19. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/SOURCES.txt +5 -0
  20. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/bootstrap.py +40 -3
  21. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/security.py +29 -19
  22. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/access.py +12 -2
  23. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/contracts.py +2 -1
  24. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/hosted_access.py +1 -1
  25. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/postgresql_access.py +79 -22
  26. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/sqlite_access.py +1 -1
  27. mainsequence_metatable-0.1.36.dev67/src/metatables/api/backend/integrations/security_check_job.py +39 -0
  28. mainsequence_metatable-0.1.36.dev67/src/metatables/api/backend/migrations/versions/0013_security_check.py +19 -0
  29. mainsequence_metatable-0.1.36.dev67/src/metatables/api/backend/operations/security_check.py +51 -0
  30. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/models.py +2 -0
  31. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/app.py +16 -0
  32. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_data_source_identity.py +2 -2
  33. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_runtime_bootstrap.py +8 -8
  34. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_runtime_storage_binding.py +21 -9
  35. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_migration.py +2 -2
  36. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/capabilities.json +11 -0
  37. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_catalog_contract.py +1 -1
  38. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_sql_security.py +32 -15
  39. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_runtime_upgrade.py +7 -5
  40. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_deployment_security.py +108 -53
  41. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_incremental_security.py +1 -0
  42. mainsequence_metatable-0.1.36.dev67/tests/permissions/test_security_check.py +246 -0
  43. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/analyze-with-sql/SKILL.md +0 -0
  44. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  45. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/client/metatables-meta-tables/SKILL.md +0 -0
  46. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  47. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/client/metatables-table-discovery/SKILL.md +0 -0
  48. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  49. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/discover-tables/SKILL.md +0 -0
  50. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/PINNED_FROM.txt +0 -0
  51. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/tau_a2a_runtime_adapter/SKILL.md +0 -0
  52. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/tau_local_development/SKILL.md +0 -0
  53. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/tau_project_customization/SKILL.md +0 -0
  54. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/tau_repository_integration/SKILL.md +0 -0
  55. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/.agents/skills/ms_tau_sdk/tau_security_and_access/SKILL.md +0 -0
  56. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/LICENSE +0 -0
  57. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/MANIFEST.in +0 -0
  58. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/README.md +0 -0
  59. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/alembic.ini +0 -0
  60. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/api/metatables/main.py +0 -0
  61. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/compose.database-tests.yml +0 -0
  62. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/agent/0019-metatables-analyst-agent.md +0 -0
  63. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/agent/0020-analyst-reads-as-its-requester.md +0 -0
  64. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/agent/0021-api-serves-the-analyst-tools-over-mcp.md +0 -0
  65. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  66. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  67. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  68. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  69. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  70. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  71. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  72. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  73. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0009-shared-credential-store.md +0 -0
  74. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  75. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  76. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  77. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  78. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0016-impact-preflight.md +0 -0
  79. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0017-hosted-request-identity.md +0 -0
  80. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0018-search-document-pipeline.svg +0 -0
  81. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0018-table-search.md +0 -0
  82. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/api/0022-concurrent-requests-and-connection-reuse.md +0 -0
  83. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  84. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  85. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/authentication-and-errors.md +0 -0
  86. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/data-sources.md +0 -0
  87. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/overview.md +0 -0
  88. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/tables-and-migrations.md +0 -0
  89. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/api/time-index-and-updates.md +0 -0
  90. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/assets/branding/metatables.svg +0 -0
  91. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/assets/diagrams/local-client-experience.svg +0 -0
  92. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/assets/diagrams/namespace-access.svg +0 -0
  93. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/bounded-transfers.md +0 -0
  94. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/build-an-updater.md +0 -0
  95. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/define-and-migrate-tables.md +0 -0
  96. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/deploy-application-migrations.md +0 -0
  97. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/installation-and-connection.md +0 -0
  98. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/local-storage.md +0 -0
  99. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/query-and-mutate.md +0 -0
  100. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/quickstart.md +0 -0
  101. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/read-existing-time-index-tables.md +0 -0
  102. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/register-existing-tables.md +0 -0
  103. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/tutorial.md +0 -0
  104. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/client/upgrade-legacy-app.md +0 -0
  105. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/architecture.md +0 -0
  106. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/data-sources.md +0 -0
  107. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/identity-and-scope.md +0 -0
  108. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/permissions-namespaces-labels.md +0 -0
  109. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/runs-and-execution-graphs.md +0 -0
  110. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  111. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/concepts/time-index-tables-and-updates.md +0 -0
  112. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/contributing/architecture-and-boundaries.md +0 -0
  113. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/contributing/database-backends.md +0 -0
  114. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/contributing/documentation.md +0 -0
  115. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/contributing/testing.md +0 -0
  116. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/README.md +0 -0
  117. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/__init__.py +0 -0
  118. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/bounded_reader.py +0 -0
  119. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/data_sources/README.md +0 -0
  120. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/data_sources/mssql.json +0 -0
  121. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/data_sources/mysql.json +0 -0
  122. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/data_sources/postgresql.json +0 -0
  123. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/data_sources/register.py +0 -0
  124. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/external_table.py +0 -0
  125. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/README.md +0 -0
  126. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/__init__.py +0 -0
  127. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/__main__.py +0 -0
  128. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/migrations/__init__.py +0 -0
  129. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/migrations/env.py +0 -0
  130. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/migrations/script.py.mako +0 -0
  131. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  132. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/local_app/tables.py +0 -0
  133. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/query.py +0 -0
  134. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/quickstart.py +0 -0
  135. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/reader.py +0 -0
  136. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/scripts/__init__.py +0 -0
  137. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/scripts/setup_metatables.py +0 -0
  138. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tables.py +0 -0
  139. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/README.md +0 -0
  140. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/__init__.py +0 -0
  141. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/__main__.py +0 -0
  142. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/data/README.md +0 -0
  143. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  144. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/frames.py +0 -0
  145. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/__init__.py +0 -0
  146. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/env.py +0 -0
  147. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/registry.py +0 -0
  148. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  149. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  150. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  151. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  152. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  153. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/operations.py +0 -0
  154. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/tables.py +0 -0
  155. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/tutorial/updaters.py +0 -0
  156. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/examples/updater.py +0 -0
  157. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/index.md +0 -0
  158. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/catalog-migrations.md +0 -0
  159. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/configuration.md +0 -0
  160. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/local-runtime.md +0 -0
  161. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/run-history.md +0 -0
  162. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/operations/run-logs.md +0 -0
  163. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/reference/python.md +0 -0
  164. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/docs/security/ownership-and-sharing.md +0 -0
  165. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/__init__.py +0 -0
  166. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/build_reference.py +0 -0
  167. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_boundaries.py +0 -0
  168. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_client_api_coverage.py +0 -0
  169. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_distribution_sources.py +0 -0
  170. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_docs.py +0 -0
  171. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_examples_debug.py +0 -0
  172. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/check_project.py +0 -0
  173. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/dev_release_version.py +0 -0
  174. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/test_databases.py +0 -0
  175. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/scripts/test_postgresql.py +0 -0
  176. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/setup.cfg +0 -0
  177. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  178. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  179. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  180. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  181. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/__init__.py +0 -0
  182. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/_admin_source.json +0 -0
  183. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/_build.py +0 -0
  184. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/_skill_bundle.py +0 -0
  185. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/analysis.py +0 -0
  186. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/analyst/__init__.py +0 -0
  187. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/__init__.py +0 -0
  188. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/__init__.py +0 -0
  189. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/auth/__init__.py +0 -0
  190. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/auth/boundary.py +0 -0
  191. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/auth/local_actor.py +0 -0
  192. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/configuration.py +0 -0
  193. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/connection_count.py +0 -0
  194. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/credential_admin.py +0 -0
  195. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/development.py +0 -0
  196. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/development_client.py +0 -0
  197. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/error_logging.py +0 -0
  198. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/main.py +0 -0
  199. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/mcp.py +0 -0
  200. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/platform_cache.py +0 -0
  201. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/__init__.py +0 -0
  202. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/access_map.py +0 -0
  203. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/caller.py +0 -0
  204. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/column_search.py +0 -0
  205. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/contract_validation.py +0 -0
  206. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/data_sources.py +0 -0
  207. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  208. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/migration_connection.py +0 -0
  209. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/namespaces.py +0 -0
  210. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/run_logs.py +0 -0
  211. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/runtime_context.py +0 -0
  212. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/schema_graph.py +0 -0
  213. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_cascade.py +0 -0
  214. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_crud.py +0 -0
  215. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_delete.py +0 -0
  216. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_filter.py +0 -0
  217. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_import.py +0 -0
  218. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_introspection.py +0 -0
  219. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_patch.py +0 -0
  220. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_registration.py +0 -0
  221. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_response.py +0 -0
  222. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_search.py +0 -0
  223. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_search_document.py +0 -0
  224. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_sql.py +0 -0
  225. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  226. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  227. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  228. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  229. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  230. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_batch.py +0 -0
  231. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  232. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_constants.py +0 -0
  233. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_crud.py +0 -0
  234. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_details.py +0 -0
  235. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_graph.py +0 -0
  236. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  237. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_registration.py +0 -0
  238. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_runs.py +0 -0
  239. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/routes/update_statistics.py +0 -0
  240. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/runtime.py +0 -0
  241. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/runtime_control.py +0 -0
  242. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/runtime_database.py +0 -0
  243. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/source_passwords.py +0 -0
  244. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/app/transfer.py +0 -0
  245. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/__init__.py +0 -0
  246. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/__init__.py +0 -0
  247. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  248. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  249. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  250. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  251. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  252. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  253. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  254. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  255. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  256. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  257. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  258. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  259. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  260. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  261. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  262. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  263. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  264. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  265. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  266. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  267. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  268. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/batch_inspection.py +0 -0
  269. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/catalog.py +0 -0
  270. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  271. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  272. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/connection_pool.py +0 -0
  273. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/hosted.py +0 -0
  274. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  275. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/native.py +0 -0
  276. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/operations.py +0 -0
  277. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/pages.py +0 -0
  278. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/registry.py +0 -0
  279. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  280. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/relational.py +0 -0
  281. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  282. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/streaming.py +0 -0
  283. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/backends/timescale.py +0 -0
  284. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/contracts/__init__.py +0 -0
  285. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  286. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  287. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  288. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/contracts/values.py +0 -0
  289. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/__init__.py +0 -0
  290. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  291. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  292. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  293. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/label_rules.py +0 -0
  294. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  295. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/domain/update_constants.py +0 -0
  296. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/__init__.py +0 -0
  297. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  298. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  299. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  300. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  301. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  302. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  303. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  304. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  305. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  306. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  307. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  308. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/__init__.py +0 -0
  309. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/env.py +0 -0
  310. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  311. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  312. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  313. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  314. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  315. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  316. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  317. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  318. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  319. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  320. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +0 -0
  321. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0011_table_search.py +0 -0
  322. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/0012_table_creator.py +0 -0
  323. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  324. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/__init__.py +0 -0
  325. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  326. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/bootstrap_timing.py +0 -0
  327. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  328. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/create_table.py +0 -0
  329. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  330. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/import_relations.py +0 -0
  331. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  332. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  333. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  334. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/__init__.py +0 -0
  335. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/cascade.py +0 -0
  336. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/catalog.py +0 -0
  337. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/database.py +0 -0
  338. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/grants.py +0 -0
  339. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/impact.py +0 -0
  340. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/labels.py +0 -0
  341. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/locking.py +0 -0
  342. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  343. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/projections.py +0 -0
  344. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  345. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  346. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  347. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  348. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  349. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/table_response.py +0 -0
  350. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  351. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  352. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/updates.py +0 -0
  353. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  354. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  355. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/__init__.py +0 -0
  356. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/documents.py +0 -0
  357. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/embeddings.py +0 -0
  358. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/index.py +0 -0
  359. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/ranking.py +0 -0
  360. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/text.py +0 -0
  361. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/backend/search/worker.py +0 -0
  362. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/metatables/__init__.py +0 -0
  363. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/metatables/configuration.yaml +0 -0
  364. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/metatables/main.py +0 -0
  365. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/api/request_timing.py +0 -0
  366. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/__init__.py +0 -0
  367. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/admin_install.py +0 -0
  368. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/filters.py +0 -0
  369. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/local.py +0 -0
  370. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/migrations.py +0 -0
  371. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/project.py +0 -0
  372. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/cli/skills.py +0 -0
  373. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/compiled_sql/__init__.py +0 -0
  374. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/compiled_sql/mssql.py +0 -0
  375. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/compiled_sql/v1.py +0 -0
  376. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/dtype_codec.py +0 -0
  377. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/endpoint.py +0 -0
  378. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/README.md +0 -0
  379. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/__init__.py +0 -0
  380. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/bounded_reader.py +0 -0
  381. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/data_sources/README.md +0 -0
  382. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/data_sources/mssql.json +0 -0
  383. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/data_sources/mysql.json +0 -0
  384. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/data_sources/postgresql.json +0 -0
  385. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/data_sources/register.py +0 -0
  386. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/external_table.py +0 -0
  387. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/README.md +0 -0
  388. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/__init__.py +0 -0
  389. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/__main__.py +0 -0
  390. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  391. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/migrations/env.py +0 -0
  392. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  393. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  394. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/local_app/tables.py +0 -0
  395. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/query.py +0 -0
  396. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/quickstart.py +0 -0
  397. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/reader.py +0 -0
  398. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/scripts/__init__.py +0 -0
  399. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  400. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tables.py +0 -0
  401. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/README.md +0 -0
  402. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/__init__.py +0 -0
  403. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/__main__.py +0 -0
  404. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/data/README.md +0 -0
  405. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  406. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/frames.py +0 -0
  407. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  408. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  409. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  410. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  411. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  412. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  413. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  414. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  415. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/operations.py +0 -0
  416. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/tables.py +0 -0
  417. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/tutorial/updaters.py +0 -0
  418. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/examples/updater.py +0 -0
  419. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/future_registry.py +0 -0
  420. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/hashing.py +0 -0
  421. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/instrumentation.py +0 -0
  422. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/local_connection.py +0 -0
  423. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/local_files.py +0 -0
  424. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/local_run_logs.py +0 -0
  425. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/log_contract.py +0 -0
  426. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/__init__.py +0 -0
  427. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/alembic.py +0 -0
  428. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/connection.py +0 -0
  429. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/env.py +0 -0
  430. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/provider.py +0 -0
  431. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/registry.py +0 -0
  432. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/runner.py +0 -0
  433. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/scaffold.py +0 -0
  434. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/sqlite.py +0 -0
  435. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/templates/__init__.py +0 -0
  436. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/templates/env.py.mako +0 -0
  437. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/templates/script.py.mako +0 -0
  438. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/migrations/tls.py +0 -0
  439. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/models.py +0 -0
  440. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/pydantic_metadata.py +0 -0
  441. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/run_logging.py +0 -0
  442. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/runtime.py +0 -0
  443. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/runtime_context.py +0 -0
  444. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/runtime_contract.py +0 -0
  445. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/schema_names.py +0 -0
  446. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/sdk_compat.py +0 -0
  447. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/sqlalchemy_contracts.py +0 -0
  448. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/storage_layout_contract.py +0 -0
  449. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/time_index_table_refs.py +0 -0
  450. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/transfer.py +0 -0
  451. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/transfer_contract.py +0 -0
  452. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/transport.py +0 -0
  453. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/update_configuration_contract.py +0 -0
  454. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/__init__.py +0 -0
  455. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/configuration.py +0 -0
  456. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/dependencies.py +0 -0
  457. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/managers.py +0 -0
  458. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/namespacing.py +0 -0
  459. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/runner.py +0 -0
  460. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/updaters.py +0 -0
  461. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/updaters/utils.py +0 -0
  462. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/src/metatables/upload.py +0 -0
  463. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/analyst/test_agent_surface.py +0 -0
  464. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/analyst/test_api_search.py +0 -0
  465. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/analyst/test_mcp.py +0 -0
  466. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/analyst/test_tools.py +0 -0
  467. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  468. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_caller_endpoint.py +0 -0
  469. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_development_client.py +0 -0
  470. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_hosted_agent.py +0 -0
  471. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_hosted_environment_target.py +0 -0
  472. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_local_mode.py +0 -0
  473. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_platform_fact_cache.py +0 -0
  474. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_request_identity.py +0 -0
  475. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_runtime_database.py +0 -0
  476. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_runtime_scaffold.py +0 -0
  477. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_runtime_selection.py +0 -0
  478. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/auth/test_source_passwords.py +0 -0
  479. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_catalog_foundation.py +0 -0
  480. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_contract_projection.py +0 -0
  481. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_database_config.py +0 -0
  482. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_index_statistics.py +0 -0
  483. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/catalog/test_schema_validation.py +0 -0
  484. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/conftest.py +0 -0
  485. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/client_signatures.json +0 -0
  486. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/database_operations.json +0 -0
  487. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_bounded_transfer.py +0 -0
  488. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_compiler_runtime_source.py +0 -0
  489. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_relation_batching.py +0 -0
  490. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_relation_import.py +0 -0
  491. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_runtime_contract_compat.py +0 -0
  492. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_storage_layouts.py +0 -0
  493. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/contracts/test_table_contracts.py +0 -0
  494. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/Dockerfile +0 -0
  495. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/Dockerfile.dockerignore +0 -0
  496. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/__init__.py +0 -0
  497. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/conftest.py +0 -0
  498. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/provider/__init__.py +0 -0
  499. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/provider/env.py +0 -0
  500. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  501. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_api_contract.py +0 -0
  502. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_application_migration.py +0 -0
  503. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  504. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_credential_catalog.py +0 -0
  505. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_physical_contract.py +0 -0
  506. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_relation_import.py +0 -0
  507. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  508. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_backend/test_update_client.py +0 -0
  509. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_operations/test_physical_operations.py +0 -0
  510. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_operations/test_postgresql_operations.py +0 -0
  511. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  512. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/documentation/test_project_checks.py +0 -0
  513. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_admin_installation.py +0 -0
  514. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_api_endpoint.py +0 -0
  515. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_application_owned_migrations.py +0 -0
  516. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_catalog_outage.py +0 -0
  517. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_api_contract.py +0 -0
  518. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_api_coverage.py +0 -0
  519. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_migration_scaffold.py +0 -0
  520. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_migration_tls.py +0 -0
  521. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_package.py +0 -0
  522. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_signatures.py +0 -0
  523. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_client_value_behaviors.py +0 -0
  524. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_data_source_registry.py +0 -0
  525. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_local_actor_client_api.py +0 -0
  526. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_local_cli_workflow.py +0 -0
  527. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_local_client_selection.py +0 -0
  528. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  529. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_managed_finalize_unchanged.py +0 -0
  530. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_migration_metadata_and_downgrade.py +0 -0
  531. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_namespaces_admin_http.py +0 -0
  532. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_public_imports.py +0 -0
  533. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_remaining_client_routes.py +0 -0
  534. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_run_graphs.py +0 -0
  535. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_run_logs.py +0 -0
  536. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_sdk_local_startup.py +0 -0
  537. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_sqlite_runtime.py +0 -0
  538. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_delete_client_api.py +0 -0
  539. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_filter_client_api.py +0 -0
  540. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_introspection_client_api.py +0 -0
  541. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_patch_client_api.py +0 -0
  542. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_search_api.py +0 -0
  543. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_search_document_api.py +0 -0
  544. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_search_scale.py +0 -0
  545. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_stats_api.py +0 -0
  546. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_update_pipeline.py +0 -0
  547. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_table_updates_http.py +0 -0
  548. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  549. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  550. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  551. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_update_batch_client_api.py +0 -0
  552. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  553. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  554. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  555. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/e2e/test_update_registration_client_api.py +0 -0
  556. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/examples/test_documented_examples.py +0 -0
  557. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/examples/test_postgresql_examples.py +0 -0
  558. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/examples/test_setup_launch.py +0 -0
  559. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/examples/test_tutorial.py +0 -0
  560. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_batch_introspection.py +0 -0
  561. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_connection_reuse.py +0 -0
  562. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_credential_store.py +0 -0
  563. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_data_source_rules.py +0 -0
  564. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_local_data_sources.py +0 -0
  565. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_local_run_logs.py +0 -0
  566. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_postgresql_connection.py +0 -0
  567. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_postgresql_sql.py +0 -0
  568. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_postgresql_tables.py +0 -0
  569. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  570. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_request_timing.py +0 -0
  571. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_serving_policy.py +0 -0
  572. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_source_validation.py +0 -0
  573. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/integrations/test_sqlite_operations.py +0 -0
  574. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/labels/test_labels.py +0 -0
  575. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_create_table_operation.py +0 -0
  576. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_create_table_postgres.py +0 -0
  577. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_physical_operation_journal.py +0 -0
  578. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_register_catalog.py +0 -0
  579. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_search_documents.py +0 -0
  580. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/operations/test_timescale_policies.py +0 -0
  581. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/packaging/test_client_skills.py +0 -0
  582. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/packaging/test_dev_release_version.py +0 -0
  583. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/packaging/test_distribution_sources.py +0 -0
  584. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/packaging/test_editable_build.py +0 -0
  585. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/packaging/test_installed_distribution.py +0 -0
  586. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_access_map.py +0 -0
  587. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_governed_sql_scope.py +0 -0
  588. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_local_actor_membership.py +0 -0
  589. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_migration_boundary.py +0 -0
  590. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_namespace_grants.py +0 -0
  591. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_security_api.py +0 -0
  592. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_table_body_filter.py +0 -0
  593. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_table_grants.py +0 -0
  594. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_table_queries.py +0 -0
  595. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/tests/permissions/test_workload_principals.py +0 -0
  596. {mainsequence_metatable-0.1.36.dev66 → mainsequence_metatable-0.1.36.dev67}/uv.lock +0 -0
@@ -32,6 +32,9 @@ resources:
32
32
  resources:
33
33
  - key: metatables-analyst-agent
34
34
  level: view
35
+ # The Admin's "Run security check now" starts the daily check (ADR 0023).
36
+ - key: check-security
37
+ level: edit
35
38
 
36
39
  - key: metatables-analyst-agent
37
40
  kind: harness_agent
@@ -76,6 +79,30 @@ resources:
76
79
  - name: METATABLES_RUNTIME_DATABASE
77
80
  level: view
78
81
 
82
+ # The full database security check, outside the deployment (ADR 0023). Not a
83
+ # workflow step: every push activates its image, and it skips while the
84
+ # database still awaits that image's system migrations.
85
+ - key: check-security
86
+ kind: job
87
+ spec:
88
+ name: MetaTables security check
89
+ execution_path: jobs/check_security.py
90
+ cpu_request: "1"
91
+ memory_request: "1"
92
+ max_runtime_seconds: 1800
93
+ automatic_redeployment:
94
+ enabled: true
95
+ tag_regex: null
96
+ task_schedule:
97
+ schedule:
98
+ type: crontab
99
+ # Daily at 03:00 UTC.
100
+ expression: "0 3 * * *"
101
+ access:
102
+ secrets:
103
+ - name: METATABLES_RUNTIME_DATABASE
104
+ level: view
105
+
79
106
  execution:
80
107
  steps:
81
108
  image:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.36.dev66
3
+ Version: 0.1.36.dev67
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
@@ -74,6 +74,12 @@
74
74
  > login may grant them. Login passwords are set again only on credential
75
75
  > rotation, failed login validation, pending or uninitialized state.
76
76
 
77
+ > Amendment (2026-10-15, [ADR 0023](0023-daily-security-check.md)): The full sweep
78
+ > no longer runs in every deployment's migration Job. It runs as a daily Job, which
79
+ > administrators can also start from the Admin; the admin repair that paused caller
80
+ > SQL is removed. A deployment runs it only on first setup or after system migrations,
81
+ > so grants changed outside MetaTables are repaired within a day.
82
+
77
83
  > Amendment (2026-10-09): [ADR 0022](0022-concurrent-requests-and-connection-reuse.md)
78
84
  > reuses login-role connections within a pod, only by the login role that opened them
79
85
  > and never through `SET ROLE`; no session state carries over from one use to the next.
@@ -37,6 +37,11 @@ Every run executes the same steps:
37
37
  next deployment. The conditional reconciliation amendment below replaces
38
38
  unconditional rebuilding on every deployment.
39
39
 
40
+ [ADR 0023](0023-daily-security-check.md) (2026-10-15) narrows step 4: the Job sets
41
+ up the owner role, sets login passwords again after a rotation and applies pending
42
+ changes. It runs the full security check only on first setup or after system
43
+ migrations; a daily Job runs it otherwise.
44
+
40
45
  The first deployment therefore initializes the database. A missing declaration
41
46
  or Secret, an unreachable database or unmet prerequisites fail the Job and block
42
47
  the rollout. The deployment workflow is the authority, so no admin caller is
@@ -96,6 +101,9 @@ The security-state row stays locked until commit to serialize with catalog
96
101
  changes and caller admission.
97
102
 
98
103
  All registered table policies are freshly checked even on the unchanged path.
104
+ (Superseded by [ADR 0023](0023-daily-security-check.md): an unchanged deployment no
105
+ longer checks table policies, compares grants or probes logins; the daily security
106
+ check does.)
99
107
  Unchanged table owners and `PUBLIC` grants cause no ownership/revoke writes.
100
108
  Policies and grant differences still apply when a trigger or catalog change
101
109
  affects access. Grants changed outside MetaTables are found by the comparison
@@ -0,0 +1,109 @@
1
+ # ADR 0023: A daily security check instead of a sweep in every deployment
2
+
3
+ Status: Accepted.
4
+
5
+ Implementation status: implemented on development. Non-container tests pass; the
6
+ deployment, the first scheduled run and the container suites are pending.
7
+
8
+ Owner: this repository.
9
+
10
+ Related decisions: [ADR 0007](0007-database-enforced-table-access.md) (database roles
11
+ enforce table access), [ADR 0014](0014-main-sequence-release-jobs-and-production-migrations.md)
12
+ (the migration Job of every deployment) and
13
+ [ADR 0013](0013-application-owned-migrations.md) (application migrations).
14
+
15
+ ## Context
16
+
17
+ Every deployment's migration Job ran the full security check. It compared every role,
18
+ membership, grant, table policy and routine MetaTables secures with the catalog's plan,
19
+ opened a fresh connection for every login role, and repaired what differed. It held the
20
+ security-state lock throughout, so callers' SQL waited. In development it took 135 s of
21
+ a 147 s migration step; in one run
22
+ ([MetaTables #66](https://github.com/mainsequence-projects/MetaTables/issues/66)) it
23
+ took 25 minutes, close to the Job's 30-minute limit.
24
+
25
+ Most of that work repairs grants changed outside MetaTables. A deployment neither causes
26
+ them nor repairs them in time: drift made just after a deployment stays until the next
27
+ one, which in production can be weeks away. Drift the check cannot repair blocked the
28
+ release, even a release meant to fix it.
29
+
30
+ ## Decision
31
+
32
+ The full check runs once a day as its own Job, and administrators can run it at any
33
+ time. A deployment does only what the new release needs.
34
+
35
+ ### What a deployment does
36
+
37
+ The migration Job's security step:
38
+
39
+ 1. sets up the owner role `mt_owner`, which normally changes nothing;
40
+ 2. runs the full check on the first setup, and when the system migration heads differ
41
+ from the ones the last full check ran at. System migrations change catalog rows
42
+ without the hooks that keep grants in step. The heads are recorded with the check,
43
+ so nothing depends on a developer bumping a version number;
44
+ 3. sets every login password again when the DataSource password was rotated;
45
+ 4. applies pending changes.
46
+
47
+ Otherwise it sends nothing.
48
+
49
+ ### The daily check
50
+
51
+ - The `check-security` Job of the API workflow (`jobs/check_security.py`, exactly
52
+ `metatables runtime check-security`) runs daily at 03:00 UTC. It is not a workflow
53
+ step; every push activates its image.
54
+ - It holds the bootstrap lock, so it waits for a running migration. It skips while the
55
+ database still awaits its image's system migrations, so a run that lands mid-rollout
56
+ never checks one release's catalog with another's rules. Any other state that is not
57
+ ready fails the run.
58
+ - It repairs whatever differs from the plan: the owner role, routines, table policies,
59
+ roles, memberships and grants, and the passwords of logins that fail a fresh login
60
+ probe. The probe runs before the security-state lock is taken.
61
+ - It never pauses caller SQL. A failed check rolls back what it changed.
62
+ - System migration `0013_security_check` records the last check on the security state:
63
+ what started it (`schedule` or `admin`), its outcome (`running`, `passed`, `repaired`
64
+ or `failed`), its times, and the statements it sent or its error code.
65
+ `GET /security/database-permissions/` returns it as `last_check`.
66
+
67
+ ### Run it now
68
+
69
+ `POST /security/checks/` (administrators only) replaces `POST /security/reconcile/`,
70
+ which paused caller SQL during the repair and had to finish within the 300 s request
71
+ timeout. Hosted starts the Job with `--trigger admin` and answers 202; the API's
72
+ workload may run that Job (`level: edit`), one run at a time. Local runs the check in
73
+ the request. The Admin's Database permissions panel has **Run security check now** and
74
+ shows the last check.
75
+
76
+ ### Access rule changes
77
+
78
+ A release that changes how MetaTables computes access reaches the database at the next
79
+ daily check, or right away when an administrator runs it after deploying. Access rules
80
+ are the plan (`plan()`), the table policy checks, the grant and revoke statements,
81
+ routine securing and the owner role. Pull requests that change them carry the
82
+ `access-rules` label, and release notes list them under "Access rule changes: run the
83
+ security check after deploying". A version constant in the code was rejected: when
84
+ someone forgets to bump it, the deployment skips the check silently.
85
+
86
+ ## Consequences
87
+
88
+ - An unchanged deployment's security step reads the security state and the owner role
89
+ and sends nothing. It no longer grows with tables or users.
90
+ - Grants changed outside MetaTables are repaired within a day, whatever the release
91
+ cadence.
92
+ - Drift the check cannot repair fails the daily Job, not a release.
93
+ - The daily check still makes caller SQL wait while it holds the lock, once a day at
94
+ 03:00 UTC. If that wait matters, the check can compute the differences before taking
95
+ the lock.
96
+ - Application migrations are unchanged: finalization checks only the tables it
97
+ finalizes (ADR 0013). A finalization waits for the daily check only if both run at
98
+ the same time.
99
+
100
+ ## Verification
101
+
102
+ - `tests/permissions/test_deployment_security.py`: an unchanged deployment reads and
103
+ writes nothing; first setup and new system migration heads run the full check once;
104
+ a rotated password sets only passwords; pending changes apply; outside drift waits
105
+ for the check; the check probes logins before the lock and counts its repairs.
106
+ - `tests/permissions/test_security_check.py`: the recorded outcome, the Job's lock and
107
+ skip, and starting the Job or refusing to.
108
+ - `tests/auth/test_runtime_storage_binding.py`: Local runs the check in the request; a
109
+ failure is recorded and never pauses SQL.
@@ -40,6 +40,7 @@ decisions belong in the SDK repository and are linked as dependencies.
40
40
  | [0017: Hosted caller identity through the SDK request identity](api/0017-hosted-request-identity.md) | Accepted; implemented for 0.1.21; hosted rollout verification pending | The hosted API installs the SDK request identity that the platform launcher requires; the SDK verifies each caller assertion once and admission reads `User.get_logged_user()`, including the caller's signed Teams and admin flag. Local keeps its loopback token admission. |
41
41
  | [0018: Table search by meaning and columns](api/0018-table-search.md) | Accepted; implemented; container engine verification pending | One route ranks visible tables by BM25 keywords and a local English embedding model over a per-table document that includes columns, merges the rankings and returns `matched_columns`; the index refreshes on every metadata write. |
42
42
  | [0022: Concurrent requests per pod and reused database connections](api/0022-concurrent-requests-and-connection-reuse.md) | Accepted; implemented on development; deployment and load verification pending | One number per pod sizes its threads, data-request admission, catalog pool and login-role connections; connections are reused only by the role that opened them, and maximum pods × 3T stays within the database's connection limit. |
43
+ | [0023: A daily security check instead of a sweep in every deployment](api/0023-daily-security-check.md) | Accepted; implemented on development; deployment and first scheduled run pending | A deployment sets up only what the new release needs; a daily Job, which administrators can also start, repairs whatever differs from the plan without pausing caller SQL and records its outcome. |
43
44
 
44
45
  ## Agents
45
46
 
@@ -7709,6 +7709,26 @@
7709
7709
  ]
7710
7710
  }
7711
7711
  },
7712
+ "/security/checks/": {
7713
+ "post": {
7714
+ "description": "Run the full security check now; caller SQL keeps running (ADR 0023).\n\nHosted starts the daily check Job and answers 202; its outcome appears in the\npermission state when it finishes. Local runs the check in this request.",
7715
+ "operationId": "run_security_check_now_security_checks__post",
7716
+ "responses": {
7717
+ "200": {
7718
+ "content": {
7719
+ "application/json": {
7720
+ "schema": {}
7721
+ }
7722
+ },
7723
+ "description": "Successful Response"
7724
+ }
7725
+ },
7726
+ "summary": "Run Security Check Now",
7727
+ "tags": [
7728
+ "Security"
7729
+ ]
7730
+ }
7731
+ },
7712
7732
  "/security/database-permissions/": {
7713
7733
  "get": {
7714
7734
  "description": "Read durable permission/admission state without resolving Secrets or repairing grants.",
@@ -7811,26 +7831,6 @@
7811
7831
  ]
7812
7832
  }
7813
7833
  },
7814
- "/security/reconcile/": {
7815
- "post": {
7816
- "description": "Repair native grants; a failed repair leaves SQL admission disabled.",
7817
- "operationId": "reconcile_database_permissions_security_reconcile__post",
7818
- "responses": {
7819
- "200": {
7820
- "content": {
7821
- "application/json": {
7822
- "schema": {}
7823
- }
7824
- },
7825
- "description": "Successful Response"
7826
- }
7827
- },
7828
- "summary": "Reconcile Database Permissions",
7829
- "tags": [
7830
- "Security"
7831
- ]
7832
- }
7833
- },
7834
7834
  "/security/resources/": {
7835
7835
  "get": {
7836
7836
  "operationId": "security_resources_security_resources__get",
@@ -63,10 +63,10 @@ These methods and paths are mounted by the current application. See the [OpenAPI
63
63
  | GET | `/runtime-context/` | Runtime Context | 200 |
64
64
  | POST | `/runtime-migrations/{lease_uid}/release/` | Release Migration | 200 |
65
65
  | GET | `/security/access-history/` | Security History | 200 |
66
+ | POST | `/security/checks/` | Run Security Check Now | 200 |
66
67
  | GET | `/security/database-permissions/` | Database Permission Status | 200 |
67
68
  | POST | `/security/namespaces/` | Create Namespace | 201 |
68
69
  | GET | `/security/principals/` | Principal Search | 200 |
69
- | POST | `/security/reconcile/` | Reconcile Database Permissions | 200 |
70
70
  | GET | `/security/resources/` | Security Resources | 200 |
71
71
  | GET | `/table-update-runs/` | List Runs | 200 |
72
72
  | POST | `/table-update-runs/` | Create Update Run | 201 |
@@ -31,6 +31,16 @@ Development releases are selected explicitly:
31
31
  python -m pip install --pre mainsequence-metatable
32
32
  ```
33
33
 
34
+ ## Access rule changes
35
+
36
+ A deployment does not apply a change to how MetaTables computes access; the daily
37
+ security check, or an administrator running it, does
38
+ ([ADR 0023](../adr/api/0023-daily-security-check.md)). Access rules are `plan()`, the
39
+ table policy checks, the grant and revoke statements, routine securing and the owner
40
+ role in `src/metatables/api/backend/backends/`. Label a pull request that changes them
41
+ `access-rules`. `.github/release.yml` lists such pull requests under "Access rule
42
+ changes: run the security check after deploying" in the generated release notes.
43
+
34
44
  ## Release prerequisites
35
45
 
36
46
  MetaTables and the Main Sequence SDK use the MIT License. Package metadata
@@ -144,8 +144,10 @@ the platform grants it on push. It:
144
144
  database or ownership of the `metatables` schema, and `CREATE` on the default schema;
145
145
  2. applies the system migrations;
146
146
  3. registers the runtime DataSource, or updates its connection if the declaration changed;
147
- 4. reapplies database access setup. Per-User role passwords derive from the login
148
- password, so a rotated password reaches them.
147
+ 4. sets up database access as far as the new release needs: the owner role, login
148
+ passwords again after a rotation (per-User role passwords derive from the login
149
+ password), and pending changes. It runs the full security check only on first setup
150
+ or after system migrations; the daily security check covers the rest.
149
151
 
150
152
  Any failure blocks the rollout. The Job prints `status` (`initialized`, `upgraded`
151
153
  or `up_to_date`), `previous_revisions`, `revisions` and `data_source_uid`. A new
@@ -157,6 +159,25 @@ database server's SQLSTATE and message when the server answered. The
157
159
  log, with passwords, tokens and connection-string credentials redacted. Settings
158
160
  and API errors never carry driver text, which can include hosts and connection strings.
159
161
 
162
+ ## Daily security check
163
+
164
+ The `check-security` Job (`jobs/check_security.py`, exactly
165
+ `metatables runtime check-security`) runs daily at 03:00 UTC
166
+ ([ADR 0023](../adr/api/0023-daily-security-check.md)). It reads `configuration.yaml`
167
+ and the Secret like the migration Job, waits for a running migration, and skips while
168
+ the database still awaits its image's system migrations. It compares everything
169
+ MetaTables secures with the catalog's grants, repairs what differs, and records the
170
+ outcome, which the Admin's Database permissions panel shows. Caller SQL keeps running.
171
+ A failed check fails the Job run, changes nothing, and is recorded with its error code.
172
+
173
+ Run it from the Admin with **Run security check now**:
174
+
175
+ - after deploying a release whose notes list access rule changes;
176
+ - after changing grants, owners or roles directly in the database.
177
+
178
+ The API starts the Job (its workload has `edit` on `check-security`); a second request
179
+ while a run is pending or running is refused.
180
+
160
181
  ## API pods and Settings
161
182
 
162
183
  API pods read the same declaration and Secret at startup and never run DDL. They
@@ -17,6 +17,16 @@ per-table finalization result, physical schema, provider identity, and registry
17
17
  state. Reuse only a compatible registry resolved by physical identity. Preserve
18
18
  Alembic's applied history; write new revisions for further changes.
19
19
 
20
+ ## Failed security check
21
+
22
+ The daily security check ([ADR 0023](../adr/api/0023-daily-security-check.md)) records
23
+ a failure on the Admin's Database permissions panel with an error code, and its Job run
24
+ fails. Nothing it changed is kept, and caller SQL keeps running with the grants it
25
+ found. Read the `check-security` Job run log for the cause, fix it in the database, then
26
+ **Run security check now**. `sql_principal_permission_drift` means a MetaTables role
27
+ owns an object or holds an elevated attribute; reassign that object or remove the
28
+ attribute, because the check never does it.
29
+
20
30
  ## Deletion
21
31
 
22
32
  Ordinary delete requires edit access and respects table and inbound
@@ -310,4 +310,5 @@ This inventory records the support status of public resource methods and CLI com
310
310
  | `runtime status` | tested | visible | Read bootstrap and effective runtime state before or after initialization. |
311
311
  | `runtime initialize` | tested | visible | Explicit Local API system migrations under current admin admission; Hosted answers 409 (the deployment migrates). |
312
312
  | `runtime upgrade` | tested | visible | Deployment gate: verify, migrate and register the runtime database declared in configuration.yaml and its Environment Secret. |
313
+ | `runtime check-security` | tested | visible | The daily security check Job (ADR 0023): compare everything MetaTables secures with the plan, repair what differs and record the outcome; the Admin starts it with --trigger admin. |
313
314
  | `admin repair` | tested | visible | Explicitly stage pinned source/dependencies; refuse replacement while in use. |
@@ -26,6 +26,7 @@ The list below contains visible leaf commands. Hidden aliases and unavailable co
26
26
  | `metatables migrations revision` | --message/-m, --autogenerate, --provider, --rev-id, --head, --timeout, --ttl-seconds, --sqlalchemy-url, --json | Create a normal Alembic revision for the selected provider. |
27
27
  | `metatables migrations scaffold` | --package, --namespace, --metadata, --module, --code-repository-root, --source-root, --base, --models, --alembic-version-name, --alembic-version-identifier, --alembic-version-schema, --alembic-version-table-name, --force, --json | Create a MetaTables migration package skeleton. |
28
28
  | `metatables migrations upgrade` | target_revision, --provider, --timeout, --ttl-seconds, --json | Run the application's Alembic upgrade and finalize its catalog tables. |
29
+ | `metatables runtime check-security` | --trigger | Run the full database security check on the runtime database this deployment declares. |
29
30
  | `metatables runtime initialize` | | Explicitly apply a Local API's system migrations; hosted deployments migrate their declared database. |
30
31
  | `metatables runtime status` | | Read bootstrap state and effective runtime, including before initialization. |
31
32
  | `metatables runtime upgrade` | | Verify, migrate and register the runtime database this deployment declares, before a rollout. |
@@ -148,15 +148,25 @@ grants. MySQL records durable pending work because its permission statements com
148
148
  independently; it admits queries only after reconciliation succeeds.
149
149
 
150
150
  The Admin Security page reads `GET /security/database-permissions/` to show caller
151
- SQL admission, pending synchronization, and policy coverage for active tables.
151
+ SQL admission, pending synchronization, policy coverage for active tables, and the
152
+ last security check.
152
153
  This admin-only read does not repair permissions or resolve credential Secrets.
153
154
  It reports durable catalog state; it does not audit native grants changed outside
154
155
  MetaTables. SQLite uses a connection authorizer rather than database roles.
155
156
 
156
- **Repair database permissions** on the Admin Security page re-establishes native
157
- permissions from catalog grants and rechecks physical safeguards. The corresponding
158
- admin-only endpoint is `POST /security/reconcile/`. Queries pause during repair.
159
- If permission repair fails, caller SQL stays disabled until repair succeeds.
157
+ A security check compares everything MetaTables secures in the database with the
158
+ catalog's grants and repairs what differs, including grants changed directly in the
159
+ database. It runs daily at 03:00 UTC as the `check-security` Job of a hosted API's
160
+ workflow ([ADR 0023](../adr/api/0023-daily-security-check.md)). **Run security check
161
+ now** on the Admin Security page runs it at any time; the admin-only endpoint is
162
+ `POST /security/checks/`. Hosted starts the Job, Local runs the check in the request.
163
+ Queries keep running during a check, and a failed check changes nothing. The page
164
+ shows the last check: what started it, when, and whether it passed, repaired
165
+ something or failed with an error code.
166
+
167
+ Grants changed outside MetaTables are repaired within a day. A release that changes
168
+ how MetaTables computes access reaches the database at the next check; its release
169
+ notes say to run the check after deploying.
160
170
  Client migration finalization refreshes the affected catalog contracts and SQL policies. Grant editing never requires a platform authentication change.
161
171
 
162
172
  The API cancels work at its deadline and bounds fetched rows. PostgreSQL, MySQL
@@ -16,6 +16,7 @@ Organization admin status comes from the platform through the SDK.
16
16
  | Configure, validate, disable, or remove DataSources | No | Yes |
17
17
  | Select the runtime DataSource where supported | No | Yes |
18
18
  | Initialize or upgrade MetaTables system tables in Local Settings (Hosted: the deployment's migration Job) | No | Yes |
19
+ | Run the database security check now (Hosted: it also runs daily) | No | Yes |
19
20
  | Destroy a local runtime database through Settings | No | Yes |
20
21
  | Change application-wide Settings and security policies | No | Yes |
21
22
  | Manage grants across the application and recover orphaned tables | No | Yes |
@@ -86,6 +86,7 @@ nav:
86
86
  - "0017: Hosted request identity": adr/api/0017-hosted-request-identity.md
87
87
  - "0018: Table search": adr/api/0018-table-search.md
88
88
  - "0022: Concurrent requests and connection reuse": adr/api/0022-concurrent-requests-and-connection-reuse.md
89
+ - "0023: Daily security check": adr/api/0023-daily-security-check.md
89
90
  - Agents:
90
91
  - "0019: MetaTables Analyst agent": adr/agent/0019-metatables-analyst-agent.md
91
92
  - "0020: The Analyst reads as its requester": adr/agent/0020-analyst-reads-as-its-requester.md
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.36.dev66"
7
+ version = "0.1.36.dev67"
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.36.dev66
3
+ Version: 0.1.36.dev67
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
@@ -46,6 +46,7 @@ docs/adr/api/0017-hosted-request-identity.md
46
46
  docs/adr/api/0018-search-document-pipeline.svg
47
47
  docs/adr/api/0018-table-search.md
48
48
  docs/adr/api/0022-concurrent-requests-and-connection-reuse.md
49
+ docs/adr/api/0023-daily-security-check.md
49
50
  docs/adr/client/0003-api-endpoint-resolution.md
50
51
  docs/adr/client/0011-cli-local-development-with-managed-admin.md
51
52
  docs/api/authentication-and-errors.md
@@ -312,6 +313,7 @@ src/metatables/api/backend/integrations/platform_principals.py
312
313
  src/metatables/api/backend/integrations/run_logs.py
313
314
  src/metatables/api/backend/integrations/runtime_binding.py
314
315
  src/metatables/api/backend/integrations/runtime_data_sources.py
316
+ src/metatables/api/backend/integrations/security_check_job.py
315
317
  src/metatables/api/backend/integrations/source_validation.py
316
318
  src/metatables/api/backend/migrations/__init__.py
317
319
  src/metatables/api/backend/migrations/env.py
@@ -328,6 +330,7 @@ src/metatables/api/backend/migrations/versions/0009_timescale_policies.py
328
330
  src/metatables/api/backend/migrations/versions/0010_cascade_targets.py
329
331
  src/metatables/api/backend/migrations/versions/0011_table_search.py
330
332
  src/metatables/api/backend/migrations/versions/0012_table_creator.py
333
+ src/metatables/api/backend/migrations/versions/0013_security_check.py
331
334
  src/metatables/api/backend/migrations/versions/__init__.py
332
335
  src/metatables/api/backend/operations/__init__.py
333
336
  src/metatables/api/backend/operations/bootstrap_migrations.py
@@ -339,6 +342,7 @@ src/metatables/api/backend/operations/import_relations.py
339
342
  src/metatables/api/backend/operations/introspect_table.py
340
343
  src/metatables/api/backend/operations/read_time_index.py
341
344
  src/metatables/api/backend/operations/register_catalog.py
345
+ src/metatables/api/backend/operations/security_check.py
342
346
  src/metatables/api/backend/persistence/__init__.py
343
347
  src/metatables/api/backend/persistence/cascade.py
344
348
  src/metatables/api/backend/persistence/catalog.py
@@ -583,6 +587,7 @@ tests/permissions/test_local_actor_membership.py
583
587
  tests/permissions/test_migration_boundary.py
584
588
  tests/permissions/test_namespace_grants.py
585
589
  tests/permissions/test_security_api.py
590
+ tests/permissions/test_security_check.py
586
591
  tests/permissions/test_table_body_filter.py
587
592
  tests/permissions/test_table_grants.py
588
593
  tests/permissions/test_table_queries.py
@@ -445,7 +445,8 @@ class RuntimeBootstrap:
445
445
  from metatables.api.backend.backends.registry import backend_for
446
446
  session.flush()
447
447
  with bootstrap_phase("security_reconciliation"):
448
- backend_for(replace(self.backend.source, uid=row.uid)).access.initialize(session)
448
+ backend_for(replace(self.backend.source, uid=row.uid)).access.initialize(
449
+ session, revisions=self.expected)
449
450
  with bootstrap_phase("credential_store"):
450
451
  credentials = bind_store(self.credential_store, session, user_uid)
451
452
  if hasattr(credentials, "initialize"):
@@ -584,8 +585,9 @@ def deploy_runtime_database(user_uid):
584
585
  """The deployment gate: verify, migrate and register the declared runtime database.
585
586
 
586
587
  The workflow's migration Job runs this from the candidate image before the
587
- API rolls out, every time; any failure blocks the rollout. Access setup is
588
- freshly checked too; drift and rotated credentials are repaired as needed.
588
+ API rolls out, every time; any failure blocks the rollout. It sets up access
589
+ only as far as the new release needs (a rotated password, pending changes, a
590
+ full check after system migrations); outside drift is the daily check's.
589
591
  """
590
592
  from metatables.api.app.configuration import DEPLOYMENT_CONFIGURATION
591
593
  from metatables.api.app.runtime import RuntimeConfig
@@ -605,6 +607,41 @@ def deploy_runtime_database(user_uid):
605
607
  target.close()
606
608
 
607
609
 
610
+ def check_runtime_security(trigger="schedule"):
611
+ """The daily security check Job, which the Admin can also start (ADR 0023).
612
+
613
+ It holds the bootstrap lock, so it waits for a running migration, and skips
614
+ while the declared database still awaits this image's migrations: a run that
615
+ lands mid-rollout never checks one release's catalog with another's rules.
616
+ Any other state that is not ready fails the run.
617
+ """
618
+ from metatables.api.app.configuration import DEPLOYMENT_CONFIGURATION
619
+ from metatables.api.app.runtime import RuntimeConfig
620
+ from metatables.api.backend.backends.registry import backend_for
621
+ from metatables.api.backend.operations.security_check import run_security_check
622
+ target = RuntimeBootstrap(RuntimeConfig(local_mode=False, configuration_path=DEPLOYMENT_CONFIGURATION), None)
623
+ try:
624
+ candidate = target.initial_candidate()
625
+ if candidate is None:
626
+ raise BootstrapError(target.error)
627
+ target.configure(candidate, None, validate_schema=False, inspect_database=False)
628
+ engine = target.open_engine()
629
+ if engine is None:
630
+ return dict(status="skipped", reason="migration_required")
631
+ with target.backend.catalog.bootstrap_lock(engine):
632
+ target.inspect(validate_schema=False)
633
+ if target.status == "migration_required":
634
+ return dict(status="skipped", reason="migration_required")
635
+ if target.status != "ready":
636
+ raise BootstrapError(target.error or f"The runtime database is {target.status}.")
637
+ access = backend_for(replace(target.backend.source, uid=target.uid)).access
638
+ with bootstrap_phase("security_check"), target.factory() as session:
639
+ record = run_security_check(session, access, trigger=trigger, revisions=target.current)
640
+ return dict(status=record["outcome"], statements=record["statements"], revisions=sorted(target.current))
641
+ finally:
642
+ target.close()
643
+
644
+
608
645
  router = APIRouter(prefix="/runtime-bootstrap", tags=["Runtime bootstrap"])
609
646
 
610
647
 
@@ -2,7 +2,7 @@
2
2
  from hashlib import sha256
3
3
  from uuid import UUID
4
4
 
5
- from fastapi import APIRouter, Depends, HTTPException, Query
5
+ from fastapi import APIRouter, Depends, HTTPException, Query, Request, Response
6
6
  from pydantic import BaseModel, ConfigDict, Field
7
7
  from sqlalchemy import select
8
8
  from sqlalchemy.orm import Session
@@ -52,6 +52,7 @@ def database_permission_status(actor=Depends(require_admin_actor), session: Sess
52
52
  return dict(status=status, sql_enabled=ready, synchronization_pending=pending,
53
53
  data_source_uid=str(source.uid), data_source_name=source.display_name, engine=source.class_type,
54
54
  enforcement="sqlite_authorizer" if source.class_type == "sqlite" else "database_roles",
55
+ last_check=state.last_check if state else None,
55
56
  active_tables=len(tables), covered_tables=len(tables) - missing, missing_policies=missing,
56
57
  tables=[dict(uid=str(table.uid), name=table.physical_table_name,
57
58
  schema=policies[table.uid].schema_name if table.uid in policies else table.physical_schema,
@@ -59,28 +60,37 @@ def database_permission_status(actor=Depends(require_admin_actor), session: Sess
59
60
  writes_supported=bool(table.uid in policies and policies[table.uid].writable)) for table in tables])
60
61
 
61
62
 
62
- @router.post("/security/reconcile/")
63
- def reconcile_database_permissions(actor=Depends(require_admin_actor),
64
- session: Session = Depends(catalog_session), sources=Depends(data_source_provider)):
65
- """Repair native grants; a failed repair leaves SQL admission disabled."""
63
+ def security_check_starter():
64
+ """Starts the daily security check Job (ADR 0023); tests replace it."""
65
+ from metatables.api.backend.integrations.security_check_job import start_security_check_job
66
+ return start_security_check_job
67
+
68
+
69
+ @router.post("/security/checks/")
70
+ def run_security_check_now(request: Request, response: Response, actor=Depends(require_admin_actor),
71
+ session: Session = Depends(catalog_session), sources=Depends(data_source_provider),
72
+ start_job=Depends(security_check_starter)):
73
+ """Run the full security check now; caller SQL keeps running (ADR 0023).
74
+
75
+ Hosted starts the daily check Job and answers 202; its outcome appears in the
76
+ permission state when it finishes. Local runs the check in this request.
77
+ """
78
+ from metatables.api.backend.integrations.security_check_job import SecurityCheckUnavailable
79
+ if not request.app.state.runtime.config.local_mode:
80
+ try:
81
+ started = start_job()
82
+ except SecurityCheckUnavailable as exc:
83
+ raise HTTPException(exc.status_code, exc.detail) from exc
84
+ response.status_code = 202
85
+ return {"status": "started", **started}
66
86
  from metatables.api.backend.backends.registry import backend_for
67
- from metatables.api.backend.persistence.models import SQLSecurityState
87
+ from metatables.api.backend.operations.security_check import run_security_check
68
88
  backend = backend_for(sources.get(sources.default_uid()))
69
- lock_catalog(session)
70
- state = session.get(SQLSecurityState, 1)
71
- if state is None:
72
- state = SQLSecurityState(id=1, ready=False, pending=True, manifest={})
73
- session.add(state)
74
- state.ready = False
75
- session.info["sql_security_maintenance"] = True
76
- session.commit()
77
89
  try:
78
- backend.access.initialize(session)
79
- session.commit()
90
+ record = run_security_check(session, backend.access, trigger="admin")
80
91
  except Exception as exc:
81
- session.rollback()
82
- raise HTTPException(503, "Database permission reconciliation failed; caller SQL remains disabled.") from exc
83
- return {"ok": True, "data_source_uid": str(backend.source.uid)}
92
+ raise HTTPException(503, "The security check failed; its error code is in the permission state.") from exc
93
+ return {"status": "finished", "last_check": record}
84
94
 
85
95
 
86
96
  class Principals(BaseModel):