mainsequence-metatable 0.1.16.dev28__tar.gz → 0.1.17__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 (539) hide show
  1. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.agents/skills/client/metatables-meta-tables/SKILL.md +8 -0
  2. {mainsequence_metatable-0.1.16.dev28/src/mainsequence_metatable.egg-info → mainsequence_metatable-0.1.17}/PKG-INFO +1 -1
  3. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0007-database-enforced-table-access.md +13 -3
  4. mainsequence_metatable-0.1.17/docs/adr/api/0016-impact-preflight.md +109 -0
  5. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/index.md +1 -0
  6. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/openapi.json +180 -0
  7. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/reference.md +2 -0
  8. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/reference/capabilities.md +2 -0
  9. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/reference/python.md +4 -0
  10. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/security/index.md +3 -1
  11. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/mkdocs.yml +1 -0
  12. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/pyproject.toml +1 -1
  13. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17/src/mainsequence_metatable.egg-info}/PKG-INFO +1 -1
  14. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/mainsequence_metatable.egg-info/SOURCES.txt +4 -0
  15. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/__init__.py +4 -0
  16. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_cascade.py +33 -26
  17. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/access.py +74 -0
  18. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/hosted_access.py +17 -17
  19. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/postgresql_access.py +33 -8
  20. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/sqlite_access.py +25 -8
  21. mainsequence_metatable-0.1.17/src/metatables/api/backend/migrations/versions/0010_cascade_targets.py +20 -0
  22. mainsequence_metatable-0.1.17/src/metatables/api/backend/persistence/impact.py +420 -0
  23. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/models.py +3 -0
  24. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/models.py +113 -0
  25. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_runtime_bootstrap.py +8 -8
  26. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/catalog/test_migration.py +2 -2
  27. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/capabilities.json +36 -0
  28. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/client_signatures.json +4 -0
  29. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_catalog_contract.py +1 -1
  30. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_sql_security.py +41 -4
  31. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_remaining_client_routes.py +55 -0
  32. mainsequence_metatable-0.1.17/tests/permissions/test_cascade_writes.py +49 -0
  33. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/uv.lock +1 -1
  34. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.agents/skills/client/metatables-local-development/SKILL.md +0 -0
  35. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.agents/skills/client/metatables-migrations/SKILL.md +0 -0
  36. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +0 -0
  37. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.agents/skills/client/metatables-upgrade-legacy-app/SKILL.md +0 -0
  38. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/.mainsequence/workflows/metatables-api.yaml +0 -0
  39. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/LICENSE +0 -0
  40. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/MANIFEST.in +0 -0
  41. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/README.md +0 -0
  42. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/alembic.ini +0 -0
  43. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/api/metatables/main.py +0 -0
  44. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/compose.database-tests.yml +0 -0
  45. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +0 -0
  46. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0002-application-administration-and-table-ownership.md +0 -0
  47. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0004-approved-application-migrations.md +0 -0
  48. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0005-run-logs-and-local-file-capture.md +0 -0
  49. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0006-historical-run-graphs.md +0 -0
  50. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0007-database-roles-and-privileges.svg +0 -0
  51. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0007-query-enforcement-path.svg +0 -0
  52. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0008-mysql-mssql-table-workflows.md +0 -0
  53. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0009-shared-credential-store.md +0 -0
  54. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0010-import-external-tables-and-views.md +0 -0
  55. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md +0 -0
  56. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0013-application-owned-migrations.md +0 -0
  57. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md +0 -0
  58. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/api/0015-timescale-compression-and-retention-policies.md +0 -0
  59. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/client/0003-api-endpoint-resolution.md +0 -0
  60. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/adr/client/0011-cli-local-development-with-managed-admin.md +0 -0
  61. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/authentication-and-errors.md +0 -0
  62. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/data-sources.md +0 -0
  63. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/overview.md +0 -0
  64. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/tables-and-migrations.md +0 -0
  65. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/api/time-index-and-updates.md +0 -0
  66. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/assets/branding/metatables.svg +0 -0
  67. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/assets/diagrams/local-client-experience.svg +0 -0
  68. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/bounded-transfers.md +0 -0
  69. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/build-an-updater.md +0 -0
  70. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/define-and-migrate-tables.md +0 -0
  71. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/deploy-application-migrations.md +0 -0
  72. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/installation-and-connection.md +0 -0
  73. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/local-storage.md +0 -0
  74. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/query-and-mutate.md +0 -0
  75. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/quickstart.md +0 -0
  76. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/read-existing-time-index-tables.md +0 -0
  77. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/register-existing-tables.md +0 -0
  78. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/tutorial.md +0 -0
  79. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/client/upgrade-legacy-app.md +0 -0
  80. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/architecture.md +0 -0
  81. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/data-sources.md +0 -0
  82. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/identity-and-scope.md +0 -0
  83. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/permissions-namespaces-labels.md +0 -0
  84. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/runs-and-execution-graphs.md +0 -0
  85. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/table-contracts-and-lifecycle.md +0 -0
  86. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/concepts/time-index-tables-and-updates.md +0 -0
  87. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/contributing/architecture-and-boundaries.md +0 -0
  88. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/contributing/database-backends.md +0 -0
  89. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/contributing/documentation.md +0 -0
  90. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/contributing/releasing.md +0 -0
  91. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/contributing/testing.md +0 -0
  92. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/README.md +0 -0
  93. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/__init__.py +0 -0
  94. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/bounded_reader.py +0 -0
  95. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/data_sources/README.md +0 -0
  96. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/data_sources/mssql.json +0 -0
  97. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/data_sources/mysql.json +0 -0
  98. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/data_sources/postgresql.json +0 -0
  99. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/data_sources/register.py +0 -0
  100. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/external_table.py +0 -0
  101. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/README.md +0 -0
  102. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/__init__.py +0 -0
  103. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/__main__.py +0 -0
  104. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/migrations/__init__.py +0 -0
  105. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/migrations/env.py +0 -0
  106. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/migrations/script.py.mako +0 -0
  107. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  108. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/local_app/tables.py +0 -0
  109. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/query.py +0 -0
  110. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/quickstart.py +0 -0
  111. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/reader.py +0 -0
  112. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/scripts/__init__.py +0 -0
  113. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/scripts/setup_metatables.py +0 -0
  114. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tables.py +0 -0
  115. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/README.md +0 -0
  116. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/__init__.py +0 -0
  117. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/__main__.py +0 -0
  118. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/data/README.md +0 -0
  119. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  120. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/frames.py +0 -0
  121. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/__init__.py +0 -0
  122. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/env.py +0 -0
  123. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/registry.py +0 -0
  124. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/script.py.mako +0 -0
  125. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  126. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  127. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  128. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  129. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/operations.py +0 -0
  130. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/tables.py +0 -0
  131. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/tutorial/updaters.py +0 -0
  132. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/examples/updater.py +0 -0
  133. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/index.md +0 -0
  134. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/catalog-migrations.md +0 -0
  135. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/configuration.md +0 -0
  136. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/hosted-runtime.md +0 -0
  137. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/local-runtime.md +0 -0
  138. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/recovery-and-observability.md +0 -0
  139. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/run-history.md +0 -0
  140. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/operations/run-logs.md +0 -0
  141. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/reference/cli.md +0 -0
  142. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/security/ownership-and-sharing.md +0 -0
  143. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/docs/security/permissions.md +0 -0
  144. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/__init__.py +0 -0
  145. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/build_reference.py +0 -0
  146. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_boundaries.py +0 -0
  147. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_client_api_coverage.py +0 -0
  148. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_distribution_sources.py +0 -0
  149. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_docs.py +0 -0
  150. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_examples_debug.py +0 -0
  151. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/check_project.py +0 -0
  152. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/dev_release_version.py +0 -0
  153. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/test_databases.py +0 -0
  154. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/scripts/test_postgresql.py +0 -0
  155. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/setup.cfg +0 -0
  156. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/mainsequence_metatable.egg-info/dependency_links.txt +0 -0
  157. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/mainsequence_metatable.egg-info/entry_points.txt +0 -0
  158. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/mainsequence_metatable.egg-info/requires.txt +0 -0
  159. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/mainsequence_metatable.egg-info/top_level.txt +0 -0
  160. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/_admin_source.json +0 -0
  161. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/_build.py +0 -0
  162. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/_skill_bundle.py +0 -0
  163. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/__init__.py +0 -0
  164. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/__init__.py +0 -0
  165. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/auth/__init__.py +0 -0
  166. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/auth/boundary.py +0 -0
  167. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/auth/caller_assertions.py +0 -0
  168. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/auth/local_actor.py +0 -0
  169. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/bootstrap.py +0 -0
  170. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/configuration.py +0 -0
  171. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/credential_admin.py +0 -0
  172. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/development.py +0 -0
  173. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/development_client.py +0 -0
  174. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/error_logging.py +0 -0
  175. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/main.py +0 -0
  176. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/platform_cache.py +0 -0
  177. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/__init__.py +0 -0
  178. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/column_search.py +0 -0
  179. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/contract_validation.py +0 -0
  180. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/data_sources.py +0 -0
  181. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/managed_finalize.py +0 -0
  182. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/migration_connection.py +0 -0
  183. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/namespaces.py +0 -0
  184. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/run_logs.py +0 -0
  185. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/runtime_context.py +0 -0
  186. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/schema_graph.py +0 -0
  187. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/security.py +0 -0
  188. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_crud.py +0 -0
  189. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_delete.py +0 -0
  190. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_filter.py +0 -0
  191. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_import.py +0 -0
  192. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_introspection.py +0 -0
  193. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_patch.py +0 -0
  194. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_registration.py +0 -0
  195. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_response.py +0 -0
  196. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_search_document.py +0 -0
  197. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_sql.py +0 -0
  198. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/table_update_pipeline.py +0 -0
  199. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/time_index_delete.py +0 -0
  200. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/time_index_reads.py +0 -0
  201. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/time_index_stats.py +0 -0
  202. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/timescale_policies.py +0 -0
  203. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_batch.py +0 -0
  204. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_chunk_insert.py +0 -0
  205. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_constants.py +0 -0
  206. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_crud.py +0 -0
  207. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_details.py +0 -0
  208. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_graph.py +0 -0
  209. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_index_statistics.py +0 -0
  210. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_registration.py +0 -0
  211. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_runs.py +0 -0
  212. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/routes/update_statistics.py +0 -0
  213. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/runtime.py +0 -0
  214. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/runtime_control.py +0 -0
  215. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/runtime_database.py +0 -0
  216. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/source_passwords.py +0 -0
  217. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/app/transfer.py +0 -0
  218. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/__init__.py +0 -0
  219. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/__init__.py +0 -0
  220. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/__init__.py +0 -0
  221. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/__init__.py +0 -0
  222. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/postgresql.py +0 -0
  223. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/runtime.py +0 -0
  224. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/temporal.py +0 -0
  225. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/timescaledb.py +0 -0
  226. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/maintenance/validation.py +0 -0
  227. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_cascade_delete.py +0 -0
  228. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_connection.py +0 -0
  229. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_introspection.py +0 -0
  230. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_table_delete.py +0 -0
  231. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_tables.py +0 -0
  232. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_time_index.py +0 -0
  233. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_delete.py +0 -0
  234. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_queries.py +0 -0
  235. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_stats.py +0 -0
  236. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/postgresql_time_index_write.py +0 -0
  237. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/source_validation.py +0 -0
  238. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/sqlite_connection.py +0 -0
  239. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/sqlite_introspection.py +0 -0
  240. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/adapters/table_cursor.py +0 -0
  241. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/catalog.py +0 -0
  242. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/catalog_ddl.py +0 -0
  243. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/catalog_types.py +0 -0
  244. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/contracts.py +0 -0
  245. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/hosted.py +0 -0
  246. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/migration_connection.py +0 -0
  247. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/native.py +0 -0
  248. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/operations.py +0 -0
  249. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/pages.py +0 -0
  250. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/registry.py +0 -0
  251. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/relation_tables.py +0 -0
  252. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/relational.py +0 -0
  253. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/restricted_sql.py +0 -0
  254. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/streaming.py +0 -0
  255. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/backends/timescale.py +0 -0
  256. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/contracts/__init__.py +0 -0
  257. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/contracts/relation_import.py +0 -0
  258. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/contracts/storage_layouts.py +0 -0
  259. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/contracts/table_contracts.py +0 -0
  260. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/contracts/values.py +0 -0
  261. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/__init__.py +0 -0
  262. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/catalog_rules.py +0 -0
  263. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/data_source_rules.py +0 -0
  264. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/index_statistics.py +0 -0
  265. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/label_rules.py +0 -0
  266. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/permission_rules.py +0 -0
  267. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/domain/update_constants.py +0 -0
  268. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/__init__.py +0 -0
  269. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/catalog_data_sources.py +0 -0
  270. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/credential_keys.py +0 -0
  271. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/credential_store.py +0 -0
  272. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/data_source_provider.py +0 -0
  273. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/local_credentials.py +0 -0
  274. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/local_workspace.py +0 -0
  275. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/platform_principals.py +0 -0
  276. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/run_logs.py +0 -0
  277. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/runtime_binding.py +0 -0
  278. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/runtime_data_sources.py +0 -0
  279. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/integrations/source_validation.py +0 -0
  280. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/__init__.py +0 -0
  281. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/env.py +0 -0
  282. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/script.py.mako +0 -0
  283. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0001_initial.py +0 -0
  284. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0002_security_model.py +0 -0
  285. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0003_run_log_capture.py +0 -0
  286. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0004_historical_run_graphs.py +0 -0
  287. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0005_database_access.py +0 -0
  288. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0006_local_credentials.py +0 -0
  289. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0007_external_relation_names.py +0 -0
  290. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0008_upload_receipts.py +0 -0
  291. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/0009_timescale_policies.py +0 -0
  292. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/migrations/versions/__init__.py +0 -0
  293. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/__init__.py +0 -0
  294. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/bootstrap_migrations.py +0 -0
  295. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/catalog_schema.py +0 -0
  296. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/create_table.py +0 -0
  297. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/finalize_managed.py +0 -0
  298. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/import_relations.py +0 -0
  299. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/introspect_table.py +0 -0
  300. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/read_time_index.py +0 -0
  301. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/register_catalog.py +0 -0
  302. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/operations/search_documents.py +0 -0
  303. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/__init__.py +0 -0
  304. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/cascade.py +0 -0
  305. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/catalog.py +0 -0
  306. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/database.py +0 -0
  307. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/grants.py +0 -0
  308. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/labels.py +0 -0
  309. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/locking.py +0 -0
  310. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/physical_operations.py +0 -0
  311. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/projections.py +0 -0
  312. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/run_graphs.py +0 -0
  313. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/schema_graph.py +0 -0
  314. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/sqlite_types.py +0 -0
  315. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/table_body_filter.py +0 -0
  316. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/table_queries.py +0 -0
  317. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/table_response.py +0 -0
  318. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/update_graph.py +0 -0
  319. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/update_pipeline.py +0 -0
  320. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/updates.py +0 -0
  321. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/persistence/upload_receipts.py +0 -0
  322. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/backend/presentation/data_source_summary.py +0 -0
  323. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/metatables/__init__.py +0 -0
  324. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/metatables/configuration.yaml +0 -0
  325. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/api/metatables/main.py +0 -0
  326. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/__init__.py +0 -0
  327. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/admin_install.py +0 -0
  328. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/app.py +0 -0
  329. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/filters.py +0 -0
  330. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/local.py +0 -0
  331. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/migrations.py +0 -0
  332. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/project.py +0 -0
  333. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/cli/skills.py +0 -0
  334. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/compiled_sql/__init__.py +0 -0
  335. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/compiled_sql/mssql.py +0 -0
  336. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/compiled_sql/v1.py +0 -0
  337. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/dtype_codec.py +0 -0
  338. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/endpoint.py +0 -0
  339. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/README.md +0 -0
  340. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/__init__.py +0 -0
  341. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/bounded_reader.py +0 -0
  342. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/data_sources/README.md +0 -0
  343. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/data_sources/mssql.json +0 -0
  344. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/data_sources/mysql.json +0 -0
  345. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/data_sources/postgresql.json +0 -0
  346. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/data_sources/register.py +0 -0
  347. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/external_table.py +0 -0
  348. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/README.md +0 -0
  349. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/__init__.py +0 -0
  350. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/__main__.py +0 -0
  351. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/migrations/__init__.py +0 -0
  352. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/migrations/env.py +0 -0
  353. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/migrations/script.py.mako +0 -0
  354. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/migrations/versions/metatables_local_example/0001.py +0 -0
  355. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/local_app/tables.py +0 -0
  356. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/query.py +0 -0
  357. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/quickstart.py +0 -0
  358. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/reader.py +0 -0
  359. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/scripts/__init__.py +0 -0
  360. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/scripts/setup_metatables.py +0 -0
  361. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tables.py +0 -0
  362. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/README.md +0 -0
  363. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/__init__.py +0 -0
  364. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/__main__.py +0 -0
  365. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/data/README.md +0 -0
  366. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +0 -0
  367. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/frames.py +0 -0
  368. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/__init__.py +0 -0
  369. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/env.py +0 -0
  370. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/registry.py +0 -0
  371. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/script.py.mako +0 -0
  372. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/versions/__init__.py +0 -0
  373. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +0 -0
  374. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/0002_create_rolling_volatility.py +0 -0
  375. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  376. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/operations.py +0 -0
  377. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/tables.py +0 -0
  378. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/tutorial/updaters.py +0 -0
  379. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/examples/updater.py +0 -0
  380. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/future_registry.py +0 -0
  381. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/hashing.py +0 -0
  382. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/instrumentation.py +0 -0
  383. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/local_connection.py +0 -0
  384. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/local_files.py +0 -0
  385. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/local_run_logs.py +0 -0
  386. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/log_contract.py +0 -0
  387. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/__init__.py +0 -0
  388. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/alembic.py +0 -0
  389. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/connection.py +0 -0
  390. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/env.py +0 -0
  391. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/provider.py +0 -0
  392. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/registry.py +0 -0
  393. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/runner.py +0 -0
  394. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/scaffold.py +0 -0
  395. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/sqlite.py +0 -0
  396. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/templates/__init__.py +0 -0
  397. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/templates/env.py.mako +0 -0
  398. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/templates/script.py.mako +0 -0
  399. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/migrations/tls.py +0 -0
  400. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/pydantic_metadata.py +0 -0
  401. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/run_logging.py +0 -0
  402. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/runtime.py +0 -0
  403. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/runtime_context.py +0 -0
  404. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/runtime_contract.py +0 -0
  405. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/schema_names.py +0 -0
  406. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/sdk_compat.py +0 -0
  407. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/sqlalchemy_contracts.py +0 -0
  408. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/storage_layout_contract.py +0 -0
  409. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/time_index_table_refs.py +0 -0
  410. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/transfer.py +0 -0
  411. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/transfer_contract.py +0 -0
  412. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/transport.py +0 -0
  413. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/update_configuration_contract.py +0 -0
  414. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/__init__.py +0 -0
  415. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/configuration.py +0 -0
  416. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/dependencies.py +0 -0
  417. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/managers.py +0 -0
  418. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/namespacing.py +0 -0
  419. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/runner.py +0 -0
  420. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/updaters.py +0 -0
  421. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/updaters/utils.py +0 -0
  422. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/src/metatables/upload.py +0 -0
  423. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_bootstrap_failure_cause.py +0 -0
  424. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_caller_assertions.py +0 -0
  425. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_data_source_identity.py +0 -0
  426. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_development_client.py +0 -0
  427. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_hosted_environment_target.py +0 -0
  428. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_local_mode.py +0 -0
  429. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_platform_fact_cache.py +0 -0
  430. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_runtime_database.py +0 -0
  431. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_runtime_scaffold.py +0 -0
  432. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_runtime_selection.py +0 -0
  433. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_runtime_storage_binding.py +0 -0
  434. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/auth/test_source_passwords.py +0 -0
  435. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/catalog/test_catalog_foundation.py +0 -0
  436. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/catalog/test_contract_projection.py +0 -0
  437. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/catalog/test_database_config.py +0 -0
  438. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/catalog/test_index_statistics.py +0 -0
  439. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/conftest.py +0 -0
  440. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/database_operations.json +0 -0
  441. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_bounded_transfer.py +0 -0
  442. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_compiler_runtime_source.py +0 -0
  443. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_relation_batching.py +0 -0
  444. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_relation_import.py +0 -0
  445. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_storage_layouts.py +0 -0
  446. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/contracts/test_table_contracts.py +0 -0
  447. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/Dockerfile +0 -0
  448. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/Dockerfile.dockerignore +0 -0
  449. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/__init__.py +0 -0
  450. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/conftest.py +0 -0
  451. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/provider/__init__.py +0 -0
  452. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/provider/env.py +0 -0
  453. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/provider/versions/0001_measurement.py +0 -0
  454. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_api_contract.py +0 -0
  455. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_application_migration.py +0 -0
  456. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_bootstrap_recovery.py +0 -0
  457. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_credential_catalog.py +0 -0
  458. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_physical_contract.py +0 -0
  459. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_relation_import.py +0 -0
  460. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_runtime_bootstrap.py +0 -0
  461. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_backend/test_update_client.py +0 -0
  462. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_operations/test_physical_operations.py +0 -0
  463. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_operations/test_postgresql_operations.py +0 -0
  464. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/database_operations/test_runtime_and_temporal.py +0 -0
  465. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/documentation/test_project_checks.py +0 -0
  466. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_admin_installation.py +0 -0
  467. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_api_endpoint.py +0 -0
  468. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_application_owned_migrations.py +0 -0
  469. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_catalog_outage.py +0 -0
  470. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_api_contract.py +0 -0
  471. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_api_coverage.py +0 -0
  472. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_migration_scaffold.py +0 -0
  473. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_migration_tls.py +0 -0
  474. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_package.py +0 -0
  475. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_signatures.py +0 -0
  476. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_client_value_behaviors.py +0 -0
  477. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_data_source_registry.py +0 -0
  478. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_local_actor_client_api.py +0 -0
  479. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_local_cli_workflow.py +0 -0
  480. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_local_client_selection.py +0 -0
  481. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_managed_finalize_client_api.py +0 -0
  482. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_namespaces_admin_http.py +0 -0
  483. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_public_imports.py +0 -0
  484. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_run_graphs.py +0 -0
  485. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_run_logs.py +0 -0
  486. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_runtime_transition.py +0 -0
  487. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_runtime_upgrade.py +0 -0
  488. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_sdk_local_startup.py +0 -0
  489. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_sqlite_runtime.py +0 -0
  490. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_delete_client_api.py +0 -0
  491. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_filter_client_api.py +0 -0
  492. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_introspection_client_api.py +0 -0
  493. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_patch_client_api.py +0 -0
  494. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_search_document_api.py +0 -0
  495. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_stats_api.py +0 -0
  496. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_update_pipeline.py +0 -0
  497. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_table_updates_http.py +0 -0
  498. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_time_index_delete_client_api.py +0 -0
  499. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_time_index_reads_client_api.py +0 -0
  500. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_timescale_policies_client_api.py +0 -0
  501. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_update_batch_client_api.py +0 -0
  502. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_update_chunk_insert_client_api.py +0 -0
  503. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_update_dependency_priority_client_api.py +0 -0
  504. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_update_index_statistics_client_api.py +0 -0
  505. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/e2e/test_update_registration_client_api.py +0 -0
  506. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/examples/test_documented_examples.py +0 -0
  507. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/examples/test_postgresql_examples.py +0 -0
  508. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/examples/test_setup_launch.py +0 -0
  509. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/examples/test_tutorial.py +0 -0
  510. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_credential_store.py +0 -0
  511. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_data_source_rules.py +0 -0
  512. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_local_data_sources.py +0 -0
  513. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_local_run_logs.py +0 -0
  514. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_postgresql_connection.py +0 -0
  515. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_postgresql_sql.py +0 -0
  516. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_postgresql_tables.py +0 -0
  517. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_postgresql_time_index_queries.py +0 -0
  518. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_source_validation.py +0 -0
  519. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/integrations/test_sqlite_operations.py +0 -0
  520. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/labels/test_labels.py +0 -0
  521. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_create_table_operation.py +0 -0
  522. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_create_table_postgres.py +0 -0
  523. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_physical_operation_journal.py +0 -0
  524. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_register_catalog.py +0 -0
  525. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_search_documents.py +0 -0
  526. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/operations/test_timescale_policies.py +0 -0
  527. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/packaging/test_client_skills.py +0 -0
  528. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/packaging/test_dev_release_version.py +0 -0
  529. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/packaging/test_distribution_sources.py +0 -0
  530. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/packaging/test_editable_build.py +0 -0
  531. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/packaging/test_installed_distribution.py +0 -0
  532. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_governed_sql_scope.py +0 -0
  533. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_local_actor_membership.py +0 -0
  534. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_migration_boundary.py +0 -0
  535. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_namespace_grants.py +0 -0
  536. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_security_api.py +0 -0
  537. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_table_body_filter.py +0 -0
  538. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_table_grants.py +0 -0
  539. {mainsequence_metatable-0.1.16.dev28 → mainsequence_metatable-0.1.17}/tests/permissions/test_table_queries.py +0 -0
@@ -138,6 +138,14 @@ A null cutoff requires a scope. Do not replace that workflow with ad hoc SQL.
138
138
  Deletion/cascade requires edit access, relevant protection checks, and explicit
139
139
  cascade intent; it is not an administrator-role bypass or migration repair.
140
140
 
141
+ Before a destructive action, or to show impact in an application UI, call
142
+ `table.get_impact(action=...)` with `delete_rows`, `update_keys` or `drop_table`.
143
+ The API returns whether the caller may run it, every blocker, and a graph of
144
+ affected tables, foreign-key effects and reading updates; render that result
145
+ rather than re-deriving foreign-key or permission rules in the client. Cascading
146
+ foreign keys are allowed, but write on a table requires write on every table its
147
+ cascades modify; a cascade into an unregistered table makes the parent read-only.
148
+
141
149
  On a TimescaleDB DataSource, time-index tables are hypertables. Their compression
142
150
  and retention policies are set only through `TimeIndexMetaTable.set_timescale_policies`
143
151
  (Writer) and read with `get_timescale_policies`. Do not add policies to table
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mainsequence-metatable
3
- Version: 0.1.16.dev28
3
+ Version: 0.1.17
4
4
  Summary: Main Sequence MetaTables Python client and standalone API
5
5
  Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
6
  License-Expression: MIT
@@ -14,6 +14,15 @@
14
14
  > `metatables` schema and tables in the DataSource's default schema; it need not
15
15
  > own the database.
16
16
 
17
+ > Amendment (2026-10-03): Cascading foreign keys are allowed. The database runs
18
+ > `CASCADE`, `SET NULL` and `SET DEFAULT` actions as the table owner, so a role
19
+ > keeps write on a table only while every login reaching it can also write each
20
+ > table those actions modify, following chains of cascades. A cascade into an
21
+ > unregistered table leaves the parent read-only. Registration and reconciliation
22
+ > record each table's cascade targets; nothing inspects submitted queries. This
23
+ > replaces the rule that foreign keys must use `restrict` or `no action`, which the
24
+ > implementation applied on every engine, not only where the explorer is enabled.
25
+
17
26
 
18
27
  Date: 2026-09-29
19
28
 
@@ -193,8 +202,8 @@ client.
193
202
  - Any role can see the names, columns and row counts of every table in PostgreSQL's
194
203
  system catalogs, but not their data. MetaTables accepts this where the explorer
195
204
  is enabled. Role names are opaque, because table permissions are visible too.
196
- - PostgreSQL runs foreign-key cascades as the table owner. Where the explorer is
197
- enabled, foreign keys must use `restrict` or `no action`.
205
+ - Databases run foreign-key cascades as the table owner. Write on a table
206
+ requires write on every table its cascades modify (amendment 2026-10-03).
198
207
  - Heavy queries still consume resources. Per-role connection limits, time limits
199
208
  and, optionally, a read replica bound them.
200
209
 
@@ -274,7 +283,8 @@ and [MySQL implicit commits](https://dev.mysql.com/doc/refman/8.4/en/implicit-co
274
283
  - The DataSource login needs `CREATEROLE` and the right to create the `metatables`
275
284
  schema; it does not need to own the database.
276
285
  - Physical table names become visible to explorer users.
277
- - Cascading foreign keys are unavailable where the explorer is enabled.
286
+ - Cascading foreign keys narrow write access to callers who can write the whole
287
+ cascade; a cascade into an unregistered table makes its parent read-only.
278
288
  - Team membership reaches the database at the pace of the existing one-hour
279
289
  platform-fact cache.
280
290
 
@@ -0,0 +1,109 @@
1
+ # ADR 0016: Impact pre-flight for cascades and deletes
2
+
3
+ Date: 2026-10-03
4
+
5
+ Status: Accepted.
6
+
7
+ Implementation status: implemented. Tests cover the planner through the Python
8
+ client against an isolated catalog and the SQLite engine. PostgreSQL,
9
+ TimescaleDB, MySQL and SQL Server cascade-target queries have not yet been run
10
+ against their containers.
11
+
12
+ Owner: MetaTables API. The Python client exposes the result; consuming projects
13
+ own their UIs.
14
+
15
+ Related decisions: [ADR 0001](0001-unified-api-storage-and-local-sqlite.md) (the SDK
16
+ makes no access decisions of its own), [ADR 0002](0002-application-administration-and-table-ownership.md)
17
+ (cascades need access to every affected table) and [ADR 0007](0007-database-enforced-table-access.md)
18
+ (amended 2026-10-03: write requires write on every cascade target).
19
+
20
+ ## Context
21
+
22
+ Cascading foreign keys are now allowed. A caller keeps write on a table only while
23
+ they can write every table its `CASCADE`, `SET NULL` and `SET DEFAULT` actions
24
+ modify. A project that builds its own UI needs to show, before acting, which
25
+ tables a delete or key update reaches, what happens to each, and why a write is
26
+ or is not available. Before this decision, a caller could only try the action
27
+ and read the error.
28
+
29
+ ## Decision
30
+
31
+ The API answers one question: *what would this action do, and may I do it?* The
32
+ API computes the answer from the catalog and the recorded cascade targets. The
33
+ client returns it unchanged.
34
+
35
+ ```
36
+ GET /meta-tables/{uid}/impact/?action=delete_rows|update_keys|drop_table
37
+ GET /time-index-meta-tables/{uid}/impact/?action=...
38
+ ```
39
+
40
+ `drop_table` also accepts the `delete-with-cascade` options. The client method is
41
+ `MetaTable.get_impact(action=...) -> MetaTableImpact`, inherited by
42
+ `TimeIndexMetaTable`.
43
+
44
+ ```python
45
+ impact = table.get_impact(action="delete_rows")
46
+ if not impact.allowed:
47
+ for blocker in impact.blockers:
48
+ print(blocker.code, blocker.node, blocker.message)
49
+ ```
50
+
51
+ The response is a graph rooted at the table:
52
+
53
+ - **Nodes**:
54
+ - `meta_table` nodes carry the uid, identifier, namespace and physical name.
55
+ - `relation` nodes are unregistered physical tables, identified by physical
56
+ name only.
57
+ - `update` nodes are updates that read an affected table.
58
+ - `hidden` nodes are tables the caller cannot view. They are opaque: an effect
59
+ with no names.
60
+
61
+ Each node lists its `effects` (`drop`, `delete`, `update`, `input_changed`) and
62
+ the caller's `can_write`. For row actions, `can_write` is the database
63
+ privilege after cascade narrowing, computed by the same function the
64
+ reconciler uses. For `drop_table`, it is the edit grant the drop requires.
65
+ - **Edges**: each edge points from the dependent to what it depends on, as in
66
+ the schema graph. Edges are classified by effect: `cascade_delete`,
67
+ `cascade_update`, `set_null`, `set_default`, `restrict` (fails while
68
+ referencing rows exist), `drop`, and `reads`.
69
+ - **Verdict**: `allowed` and every blocker, each with a code and the node it
70
+ concerns:
71
+ - `cascade_target_unregistered`
72
+ - `cascade_target_not_writable`
73
+ - `table_not_writable`
74
+ - `writes_unsupported`
75
+ - `data_source_read_only`
76
+ - `retained_referencing_table`
77
+ - `alembic_protection`
78
+ - `deletion_protected`
79
+
80
+ `delete-with-cascade` runs the same planner (`persistence/impact.py`) and refuses
81
+ with its first blocker's status and message, so a preview and the confirmed
82
+ delete cannot disagree. Recorded cascade targets now carry each foreign key's
83
+ `on_delete` and `on_update` action and are recorded for every table, so read-only
84
+ callers see the same graph.
85
+
86
+ The pre-flight is advisory. The database and the confirmed actions still enforce
87
+ every rule at execution time.
88
+
89
+ ## Remaining gaps
90
+
91
+ | Need | Today |
92
+ | --- | --- |
93
+ | `on_update` in the catalog | `MetaTableForeignKey` and contracts carry only `on_delete`; contracts reject `set default`. Row-action edges use the physical actions, which are complete. |
94
+ | Effective write in table responses | `permissions.write` reflects catalog grants and can say yes when cascade narrowing says no. Callers should use the pre-flight. |
95
+ | Plain delete | `DELETE /meta-tables/{uid}/` still answers 409 without listing references. |
96
+ | Contract changes | No `change_contract` action; a PATCH that would invalidate an incoming key fails with a text message. |
97
+ | Schema and update graphs | `get_schema_graph` returns an untyped dict; `update-graph` has no client method. |
98
+ | Views | No view-to-table dependency tracking; views stay read-only registrations. |
99
+ | Admin visibility | `GET /security/database-permissions/` does not show cascade targets. |
100
+
101
+ ## Consequences
102
+
103
+ - Consuming projects can render cascade and impact views without reimplementing
104
+ permission or foreign-key rules, and their UIs stay correct when those rules
105
+ change.
106
+ - One planner serves both the preview and the confirmed delete.
107
+ - Opaque nodes reveal that hidden tables are affected, but not which ones.
108
+ - Reconciliation now inspects foreign keys for every registered table, not only
109
+ writable ones.
@@ -36,3 +36,4 @@ decisions belong in the SDK repository and are linked as dependencies.
36
36
  | [0013: Application-owned migrations](api/0013-application-owned-migrations.md) | Accepted and implemented | Application-side Alembic, environment database authority, API catalog integration and separate system migrations. |
37
37
  | [0014: System migrations in the deployment workflow](api/0014-main-sequence-release-jobs-and-production-migrations.md) | Accepted; implemented on development; hosted verification pending | A Main Sequence Job verifies, migrates and registers the declared runtime database from the candidate image before each API rollout, including the first. |
38
38
  | [0015: TimescaleDB compression and retention policies](api/0015-timescale-compression-and-retention-policies.md) | Accepted; implemented on branch; TimescaleDB verification pending | Time-index tables on TimescaleDB become hypertables; Writers set compression and retention through the API/Admin; Timescale keeps the jobs, and the Admin shows their status. |
39
+ | [0016: Impact pre-flight for cascades and deletes](api/0016-impact-preflight.md) | Accepted; implemented; container engine verification pending | `get_impact` returns what a row delete, key update or table drop reaches, every blocker and the caller's effective write, from the planner the confirmed delete runs; projects render it in their own UIs. |
@@ -6001,6 +6001,96 @@
6001
6001
  ]
6002
6002
  }
6003
6003
  },
6004
+ "/meta-tables/{table_uid}/impact/": {
6005
+ "get": {
6006
+ "description": "Read-only pre-flight; the confirmed delete runs the same planner (ADR 0016).",
6007
+ "operationId": "get_impact_meta_tables__table_uid__impact__get",
6008
+ "parameters": [
6009
+ {
6010
+ "in": "path",
6011
+ "name": "table_uid",
6012
+ "required": true,
6013
+ "schema": {
6014
+ "format": "uuid",
6015
+ "title": "Table Uid",
6016
+ "type": "string"
6017
+ }
6018
+ },
6019
+ {
6020
+ "in": "query",
6021
+ "name": "action",
6022
+ "required": true,
6023
+ "schema": {
6024
+ "enum": [
6025
+ "delete_rows",
6026
+ "update_keys",
6027
+ "drop_table"
6028
+ ],
6029
+ "title": "Action",
6030
+ "type": "string"
6031
+ }
6032
+ },
6033
+ {
6034
+ "in": "query",
6035
+ "name": "delete_referencing_meta_tables",
6036
+ "required": false,
6037
+ "schema": {
6038
+ "default": true,
6039
+ "title": "Delete Referencing Meta Tables",
6040
+ "type": "boolean"
6041
+ }
6042
+ },
6043
+ {
6044
+ "in": "query",
6045
+ "name": "delete_referencing_time_index_meta_tables",
6046
+ "required": false,
6047
+ "schema": {
6048
+ "default": true,
6049
+ "title": "Delete Referencing Time Index Meta Tables",
6050
+ "type": "boolean"
6051
+ }
6052
+ },
6053
+ {
6054
+ "in": "query",
6055
+ "name": "override_schema_management_protection",
6056
+ "required": false,
6057
+ "schema": {
6058
+ "default": false,
6059
+ "title": "Override Schema Management Protection",
6060
+ "type": "boolean"
6061
+ }
6062
+ }
6063
+ ],
6064
+ "responses": {
6065
+ "200": {
6066
+ "content": {
6067
+ "application/json": {
6068
+ "schema": {
6069
+ "additionalProperties": true,
6070
+ "title": "Response Get Impact Meta Tables Table Uid Impact Get",
6071
+ "type": "object"
6072
+ }
6073
+ }
6074
+ },
6075
+ "description": "Successful Response"
6076
+ },
6077
+ "422": {
6078
+ "content": {
6079
+ "application/json": {
6080
+ "schema": {
6081
+ "$ref": "#/components/schemas/HTTPValidationError"
6082
+ }
6083
+ }
6084
+ },
6085
+ "description": "Validation Error"
6086
+ }
6087
+ },
6088
+ "summary": "Get Impact",
6089
+ "tags": [
6090
+ "MetaTables"
6091
+ ]
6092
+ }
6093
+ },
6004
6094
  "/meta-tables/{table_uid}/introspect/": {
6005
6095
  "post": {
6006
6096
  "operationId": "introspect_meta_table_meta_tables__table_uid__introspect__post",
@@ -8978,6 +9068,96 @@
8978
9068
  ]
8979
9069
  }
8980
9070
  },
9071
+ "/time-index-meta-tables/{table_uid}/impact/": {
9072
+ "get": {
9073
+ "description": "Read-only pre-flight; the confirmed delete runs the same planner (ADR 0016).",
9074
+ "operationId": "time_index_get_impact_time_index_meta_tables__table_uid__impact__get",
9075
+ "parameters": [
9076
+ {
9077
+ "in": "path",
9078
+ "name": "table_uid",
9079
+ "required": true,
9080
+ "schema": {
9081
+ "format": "uuid",
9082
+ "title": "Table Uid",
9083
+ "type": "string"
9084
+ }
9085
+ },
9086
+ {
9087
+ "in": "query",
9088
+ "name": "action",
9089
+ "required": true,
9090
+ "schema": {
9091
+ "enum": [
9092
+ "delete_rows",
9093
+ "update_keys",
9094
+ "drop_table"
9095
+ ],
9096
+ "title": "Action",
9097
+ "type": "string"
9098
+ }
9099
+ },
9100
+ {
9101
+ "in": "query",
9102
+ "name": "delete_referencing_meta_tables",
9103
+ "required": false,
9104
+ "schema": {
9105
+ "default": true,
9106
+ "title": "Delete Referencing Meta Tables",
9107
+ "type": "boolean"
9108
+ }
9109
+ },
9110
+ {
9111
+ "in": "query",
9112
+ "name": "delete_referencing_time_index_meta_tables",
9113
+ "required": false,
9114
+ "schema": {
9115
+ "default": true,
9116
+ "title": "Delete Referencing Time Index Meta Tables",
9117
+ "type": "boolean"
9118
+ }
9119
+ },
9120
+ {
9121
+ "in": "query",
9122
+ "name": "override_schema_management_protection",
9123
+ "required": false,
9124
+ "schema": {
9125
+ "default": false,
9126
+ "title": "Override Schema Management Protection",
9127
+ "type": "boolean"
9128
+ }
9129
+ }
9130
+ ],
9131
+ "responses": {
9132
+ "200": {
9133
+ "content": {
9134
+ "application/json": {
9135
+ "schema": {
9136
+ "additionalProperties": true,
9137
+ "title": "Response Time Index Get Impact Time Index Meta Tables Table Uid Impact Get",
9138
+ "type": "object"
9139
+ }
9140
+ }
9141
+ },
9142
+ "description": "Successful Response"
9143
+ },
9144
+ "422": {
9145
+ "content": {
9146
+ "application/json": {
9147
+ "schema": {
9148
+ "$ref": "#/components/schemas/HTTPValidationError"
9149
+ }
9150
+ }
9151
+ },
9152
+ "description": "Validation Error"
9153
+ }
9154
+ },
9155
+ "summary": "Time Index Get Impact",
9156
+ "tags": [
9157
+ "TimeIndexMetaTables"
9158
+ ]
9159
+ }
9160
+ },
8981
9161
  "/time-index-meta-tables/{table_uid}/introspect/": {
8982
9162
  "post": {
8983
9163
  "operationId": "time_index_introspect_meta_table_time_index_meta_tables__table_uid__introspect__post",
@@ -31,6 +31,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
31
31
  | GET | `/meta-tables/{table_uid}/` | Retrieve Table | 200 |
32
32
  | PATCH | `/meta-tables/{table_uid}/` | Patch Meta Table | 200 |
33
33
  | POST | `/meta-tables/{table_uid}/delete-with-cascade/` | Delete With Cascade | 200 |
34
+ | GET | `/meta-tables/{table_uid}/impact/` | Get Impact | 200 |
34
35
  | POST | `/meta-tables/{table_uid}/introspect/` | Introspect Meta Table | 200 |
35
36
  | POST | `/meta-tables/{table_uid}/migration-connection/` | Migration Connection | 200 |
36
37
  | POST | `/meta-tables/{table_uid}/read/` | Read Rows | 200 |
@@ -89,6 +90,7 @@ These methods and paths are mounted by the current application. See the [OpenAPI
89
90
  | POST | `/time-index-meta-tables/{table_uid}/get-data-between-dates-from-remote/` | Get Data Between Dates From Remote | 200 |
90
91
  | POST | `/time-index-meta-tables/{table_uid}/get-last-observation/` | Get Last Observation | 200 |
91
92
  | GET | `/time-index-meta-tables/{table_uid}/get-stats/` | Get Time Index Stats | 200 |
93
+ | GET | `/time-index-meta-tables/{table_uid}/impact/` | Time Index Get Impact | 200 |
92
94
  | POST | `/time-index-meta-tables/{table_uid}/introspect/` | Time Index Introspect Meta Table | 200 |
93
95
  | POST | `/time-index-meta-tables/{table_uid}/migration-connection/` | Time Index Migration Connection | 200 |
94
96
  | GET | `/time-index-meta-tables/{table_uid}/schema-graph` | Time Index Get Schema Graph | 200 |
@@ -60,6 +60,7 @@ This inventory records the support status of public resource methods and CLI com
60
60
  | `MetaTable.get_effective_access` | tested | `GET /meta-tables/{uid}/effective-access/` | Reader/Writer sharing through the application security API; changes require Writer or application admin, with revision conflict checks. Tests: `tests/permissions/test_security_api.py::test_public_client_access_roundtrip` |
61
61
  | `MetaTable.get_object_url` | internal | | Transport, serialization, or model lifecycle helper; not a separate API operation. |
62
62
  | `MetaTable.get_or_none` | implemented | `GET /meta-tables/{table_uid}/` | Generic resource operation with a mounted API route. Check route constraints; method-specific evidence is not claimed. |
63
+ | `MetaTable.get_impact` | tested | `GET /meta-tables/{table_uid}/impact/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_impact_preflight_matches_cascade_rules` |
63
64
  | `MetaTable.get_schema_graph` | tested | `GET /meta-tables/{table_uid}/schema-graph` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_local_actor_client_api.py::test_client_detail_validation_uses_platform_membership_and_revocation` |
64
65
  | `MetaTable.import_from_data_source` | tested | `POST /meta-tables/import-from-data-source/` | Import creates relational external registrations (preview by default); bounded reads enforce existing MetaTable grants and never accept SQL. Inherited methods use the shared MetaTable endpoint. Tests: `tests/database_backend/test_relation_import.py::test_python_client_import_read_and_writer_refresh` |
65
66
  | `MetaTable.introspect` | tested | `POST /meta-tables/{table_uid}/introspect/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_introspection_client_api.py::test_client_introspection_checks_grant_and_persists_snapshot` |
@@ -147,6 +148,7 @@ This inventory records the support status of public resource methods and CLI com
147
148
  | `TimeIndexMetaTable.get_object_url` | internal | | Transport, serialization, or model lifecycle helper; not a separate API operation. |
148
149
  | `TimeIndexMetaTable.get_or_create` | tested | `POST /time-index-meta-tables/get-or-create/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_registration_bulk_and_time_index_get_or_create` |
149
150
  | `TimeIndexMetaTable.get_or_none` | implemented | `GET /time-index-meta-tables/{table_uid}/` | Generic resource operation with a mounted API route. Check route constraints; method-specific evidence is not claimed. |
151
+ | `TimeIndexMetaTable.get_impact` | tested | `GET /time-index-meta-tables/{table_uid}/impact/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_remaining_client_routes.py::test_public_impact_preflight_matches_cascade_rules` |
150
152
  | `TimeIndexMetaTable.get_schema_graph` | tested | `GET /time-index-meta-tables/{table_uid}/schema-graph` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_local_actor_client_api.py::test_client_detail_validation_uses_platform_membership_and_revocation` |
151
153
  | `TimeIndexMetaTable.import_from_data_source` | tested | `POST /meta-tables/import-from-data-source/` | Import creates relational external registrations (preview by default); bounded reads enforce existing MetaTable grants and never accept SQL. Inherited methods use the shared MetaTable endpoint. Tests: `tests/database_backend/test_relation_import.py::test_python_client_import_read_and_writer_refresh` |
152
154
  | `TimeIndexMetaTable.introspect` | tested | `POST /time-index-meta-tables/{table_uid}/introspect/` | Client/API behavior covered with isolated catalog and adapters; live storage checks are separate. Tests: `tests/e2e/test_table_introspection_client_api.py::test_client_introspection_checks_grant_and_persists_snapshot` |
@@ -43,6 +43,10 @@ Import application APIs from `metatables`. This list is generated from `metatabl
43
43
  | `MetaTableCompiledSQLVersion` | `typing` | constant |
44
44
  | `MetaTableContract` | `metatables.models` | class |
45
45
  | `MetaTableForeignKeyPayload` | `metatables.models` | class |
46
+ | `MetaTableImpact` | `metatables.models` | class |
47
+ | `MetaTableImpactBlocker` | `metatables.models` | class |
48
+ | `MetaTableImpactEdge` | `metatables.models` | class |
49
+ | `MetaTableImpactNode` | `metatables.models` | class |
46
50
  | `MetaTableIndexPayload` | `metatables.models` | class |
47
51
  | `MetaTableManagementMode` | `typing` | constant |
48
52
  | `MetaTableMigrationConnection` | `metatables.models` | class |
@@ -128,7 +128,9 @@ statement classification or function allowlist. The database enforces access in
128
128
  joins, CTEs, subqueries and permitted invoker routines. Database permissions are
129
129
  established during setup and schema changes. Catalog tables remain inaccessible,
130
130
  views cannot be registered, elevated routines cannot confer owner access, and
131
- triggered writes and cascading foreign keys are restricted by the engine's policy.
131
+ triggered writes are restricted by the engine's policy. A table with cascading
132
+ foreign keys is writable only by callers who can write every table the cascade
133
+ modifies.
132
134
 
133
135
  PostgreSQL stores the catalog in `metatables` and owns managed tables through a
134
136
  non-login owner role. User, Team and namespace grants become database privileges
@@ -82,3 +82,4 @@ nav:
82
82
  - "0013: Application-owned migrations": adr/api/0013-application-owned-migrations.md
83
83
  - "0014: System migrations in the deployment workflow": adr/api/0014-main-sequence-release-jobs-and-production-migrations.md
84
84
  - "0015: TimescaleDB compression and retention policies": adr/api/0015-timescale-compression-and-retention-policies.md
85
+ - "0016: Impact pre-flight": adr/api/0016-impact-preflight.md
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mainsequence-metatable"
7
- version = "0.1.16.dev28"
7
+ version = "0.1.17"
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.16.dev28
3
+ Version: 0.1.17
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
@@ -30,6 +30,7 @@ docs/adr/api/0012-bounded-data-transfer-and-safe-retries.md
30
30
  docs/adr/api/0013-application-owned-migrations.md
31
31
  docs/adr/api/0014-main-sequence-release-jobs-and-production-migrations.md
32
32
  docs/adr/api/0015-timescale-compression-and-retention-policies.md
33
+ docs/adr/api/0016-impact-preflight.md
33
34
  docs/adr/client/0003-api-endpoint-resolution.md
34
35
  docs/adr/client/0011-cli-local-development-with-managed-admin.md
35
36
  docs/api/authentication-and-errors.md
@@ -299,6 +300,7 @@ src/metatables/api/backend/migrations/versions/0006_local_credentials.py
299
300
  src/metatables/api/backend/migrations/versions/0007_external_relation_names.py
300
301
  src/metatables/api/backend/migrations/versions/0008_upload_receipts.py
301
302
  src/metatables/api/backend/migrations/versions/0009_timescale_policies.py
303
+ src/metatables/api/backend/migrations/versions/0010_cascade_targets.py
302
304
  src/metatables/api/backend/migrations/versions/__init__.py
303
305
  src/metatables/api/backend/operations/__init__.py
304
306
  src/metatables/api/backend/operations/bootstrap_migrations.py
@@ -315,6 +317,7 @@ src/metatables/api/backend/persistence/cascade.py
315
317
  src/metatables/api/backend/persistence/catalog.py
316
318
  src/metatables/api/backend/persistence/database.py
317
319
  src/metatables/api/backend/persistence/grants.py
320
+ src/metatables/api/backend/persistence/impact.py
318
321
  src/metatables/api/backend/persistence/labels.py
319
322
  src/metatables/api/backend/persistence/locking.py
320
323
  src/metatables/api/backend/persistence/models.py
@@ -523,6 +526,7 @@ tests/packaging/test_dev_release_version.py
523
526
  tests/packaging/test_distribution_sources.py
524
527
  tests/packaging/test_editable_build.py
525
528
  tests/packaging/test_installed_distribution.py
529
+ tests/permissions/test_cascade_writes.py
526
530
  tests/permissions/test_governed_sql_scope.py
527
531
  tests/permissions/test_local_actor_membership.py
528
532
  tests/permissions/test_migration_boundary.py
@@ -140,6 +140,10 @@ _CLIENT_EXPORTS = (
140
140
  'MetaTableCascadeDeleteResponse',
141
141
  'MetaTableCascadeDeletedTimeIndexMetaTable',
142
142
  'MetaTableCascadeDeletedMetaTable',
143
+ 'MetaTableImpact',
144
+ 'MetaTableImpactBlocker',
145
+ 'MetaTableImpactEdge',
146
+ 'MetaTableImpactNode',
143
147
  'MetaTableMigrationConnection',
144
148
  'MetaTableMigrationConnectionRequest',
145
149
  'MetaTableColumnContract',
@@ -1,9 +1,9 @@
1
- """Confirmed dependency deletion; every affected object needs a local edit grant."""
1
+ """Confirmed dependency deletion and its impact pre-flight; every affected object needs a local edit grant."""
2
2
  from collections import defaultdict
3
3
  from typing import Literal
4
4
  from uuid import UUID
5
5
 
6
- from fastapi import APIRouter, Depends, HTTPException
6
+ from fastapi import APIRouter, Depends, HTTPException, Query
7
7
  from pydantic import BaseModel
8
8
  from sqlalchemy import delete, select
9
9
  from sqlalchemy.exc import SQLAlchemyError
@@ -18,10 +18,12 @@ from metatables.api.backend.backends.operations import (
18
18
  PhysicalTableDeleteOutcomeUnknown,
19
19
  drop_tables,
20
20
  )
21
+ from metatables.api.backend.domain.catalog_rules import CatalogInvariantError
21
22
  from metatables.api.backend.domain.data_source_rules import DataSourceAdmissionError
22
23
  from metatables.api.backend.domain.permission_rules import TrustedActorFacts
23
24
  from metatables.api.backend.integrations.runtime_data_sources import DataSourceIntegrationError
24
25
  from metatables.api.backend.persistence.grants import GrantRepository
26
+ from metatables.api.backend.persistence.impact import DropOptions, ImpactPlanner
25
27
  from metatables.api.backend.persistence.locking import lock_catalog
26
28
  from metatables.api.backend.persistence.models import (
27
29
  MetaTable,
@@ -41,32 +43,37 @@ def cascade_deleter():
41
43
  return drop_tables
42
44
 
43
45
  def _plan(session, actor, root_uid, payload):
44
- planned = {root_uid}
45
- while True:
46
- related = set(session.scalars(select(MetaTableForeignKey.source_table_uid).where(
47
- MetaTableForeignKey.target_table_uid.in_(planned))))
48
- related.update(session.scalars(select(MetaTable.uid).where(
49
- MetaTable.alembic_version_meta_table_uid.in_(planned))))
50
- remaining = related - planned
51
- if not remaining:
52
- break
53
- planned.update(remaining)
54
- rows = tuple(session.scalars(select(MetaTable).where(MetaTable.uid.in_(planned)).with_for_update()))
55
- if len(rows) != len(planned):
56
- raise HTTPException(404, 'MetaTable not found.')
57
- for row in rows:
58
- if (not GrantRepository(session).may_access_table(table_uid=row.uid, actor=actor, edit=True)):
59
- raise HTTPException(404, 'An affected MetaTable was not found.')
60
- if row.uid != root_uid and not (payload.delete_referencing_time_index_meta_tables if row.kind == 'time_index'
61
- else payload.delete_referencing_meta_tables):
62
- raise HTTPException(409, 'Deletion is blocked by a retained referencing table.')
63
- alembic = row.schema_management_mode == 'alembic_managed'
64
- if alembic and not payload.override_schema_management_protection:
65
- raise HTTPException(409, 'Alembic protection requires explicit override.')
66
- if (row.protect_from_deletion and not alembic):
67
- raise HTTPException(409, 'An affected MetaTable is protected from deletion.')
46
+ rows, blockers = ImpactPlanner(session, actor).drop_closure(root_uid, _options(payload), lock=True)
47
+ if blockers:
48
+ raise HTTPException(blockers[0].status, blockers[0].message)
68
49
  return rows
69
50
 
51
+
52
+ def _options(payload):
53
+ return DropOptions(
54
+ delete_referencing_meta_tables=payload.delete_referencing_meta_tables,
55
+ delete_referencing_time_index_meta_tables=payload.delete_referencing_time_index_meta_tables,
56
+ override_schema_management_protection=payload.override_schema_management_protection,
57
+ )
58
+
59
+
60
+ @router.get('/{table_uid}/impact/')
61
+ def get_impact(table_uid: UUID, action: Literal['delete_rows', 'update_keys', 'drop_table'] = Query(...),
62
+ delete_referencing_meta_tables: bool = True,
63
+ delete_referencing_time_index_meta_tables: bool = True,
64
+ override_schema_management_protection: bool = False,
65
+ actor: TrustedActorFacts = Depends(trusted_actor_facts),
66
+ session: Session = Depends(catalog_session)) -> dict:
67
+ """Read-only pre-flight; the confirmed delete runs the same planner (ADR 0016)."""
68
+ options = DropOptions(delete_referencing_meta_tables, delete_referencing_time_index_meta_tables,
69
+ override_schema_management_protection)
70
+ try:
71
+ return ImpactPlanner(session, actor).plan(table_uid, action, options)
72
+ except CatalogInvariantError as exc:
73
+ if 'does not exist' in str(exc):
74
+ raise HTTPException(404, 'MetaTable not found.') from exc
75
+ raise HTTPException(422, str(exc)) from exc
76
+
70
77
  @router.post('/{table_uid}/delete-with-cascade/')
71
78
  def delete_with_cascade(table_uid: UUID, payload: CascadeRequest,
72
79
  actor: TrustedActorFacts = Depends(trusted_actor_facts),