mainsequence-metatable 0.1.0__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 (468) hide show
  1. mainsequence_metatable-0.1.0/.agents/skills/client/metatables-meta-tables/SKILL.md +106 -0
  2. mainsequence_metatable-0.1.0/.agents/skills/client/metatables-migrations/SKILL.md +132 -0
  3. mainsequence_metatable-0.1.0/.agents/skills/client/metatables-time-index-table-updates/SKILL.md +103 -0
  4. mainsequence_metatable-0.1.0/.mainsequence/workflows/metatables-api.yaml +10 -0
  5. mainsequence_metatable-0.1.0/LICENSE +21 -0
  6. mainsequence_metatable-0.1.0/MANIFEST.in +9 -0
  7. mainsequence_metatable-0.1.0/PKG-INFO +137 -0
  8. mainsequence_metatable-0.1.0/README.md +83 -0
  9. mainsequence_metatable-0.1.0/alembic.ini +3 -0
  10. mainsequence_metatable-0.1.0/api/__init__.py +3 -0
  11. mainsequence_metatable-0.1.0/api/app/__init__.py +0 -0
  12. mainsequence_metatable-0.1.0/api/app/auth/__init__.py +1 -0
  13. mainsequence_metatable-0.1.0/api/app/auth/boundary.py +104 -0
  14. mainsequence_metatable-0.1.0/api/app/auth/caller_assertions.py +39 -0
  15. mainsequence_metatable-0.1.0/api/app/auth/local_actor.py +55 -0
  16. mainsequence_metatable-0.1.0/api/app/bootstrap.py +607 -0
  17. mainsequence_metatable-0.1.0/api/app/configuration.py +37 -0
  18. mainsequence_metatable-0.1.0/api/app/credential_admin.py +107 -0
  19. mainsequence_metatable-0.1.0/api/app/development.py +175 -0
  20. mainsequence_metatable-0.1.0/api/app/development_client.py +59 -0
  21. mainsequence_metatable-0.1.0/api/app/main.py +201 -0
  22. mainsequence_metatable-0.1.0/api/app/platform_cache.py +61 -0
  23. mainsequence_metatable-0.1.0/api/app/routes/__init__.py +0 -0
  24. mainsequence_metatable-0.1.0/api/app/routes/application_migrations.py +170 -0
  25. mainsequence_metatable-0.1.0/api/app/routes/column_search.py +64 -0
  26. mainsequence_metatable-0.1.0/api/app/routes/contract_validation.py +84 -0
  27. mainsequence_metatable-0.1.0/api/app/routes/data_sources.py +428 -0
  28. mainsequence_metatable-0.1.0/api/app/routes/managed_finalize.py +244 -0
  29. mainsequence_metatable-0.1.0/api/app/routes/migration_connection.py +41 -0
  30. mainsequence_metatable-0.1.0/api/app/routes/namespaces.py +119 -0
  31. mainsequence_metatable-0.1.0/api/app/routes/run_logs.py +78 -0
  32. mainsequence_metatable-0.1.0/api/app/routes/runtime_context.py +122 -0
  33. mainsequence_metatable-0.1.0/api/app/routes/schema_graph.py +37 -0
  34. mainsequence_metatable-0.1.0/api/app/routes/security.py +267 -0
  35. mainsequence_metatable-0.1.0/api/app/routes/table_cascade.py +155 -0
  36. mainsequence_metatable-0.1.0/api/app/routes/table_crud.py +45 -0
  37. mainsequence_metatable-0.1.0/api/app/routes/table_delete.py +161 -0
  38. mainsequence_metatable-0.1.0/api/app/routes/table_filter.py +38 -0
  39. mainsequence_metatable-0.1.0/api/app/routes/table_import.py +66 -0
  40. mainsequence_metatable-0.1.0/api/app/routes/table_introspection.py +85 -0
  41. mainsequence_metatable-0.1.0/api/app/routes/table_patch.py +155 -0
  42. mainsequence_metatable-0.1.0/api/app/routes/table_registration.py +216 -0
  43. mainsequence_metatable-0.1.0/api/app/routes/table_response.py +29 -0
  44. mainsequence_metatable-0.1.0/api/app/routes/table_search_document.py +54 -0
  45. mainsequence_metatable-0.1.0/api/app/routes/table_sql.py +167 -0
  46. mainsequence_metatable-0.1.0/api/app/routes/table_update_pipeline.py +31 -0
  47. mainsequence_metatable-0.1.0/api/app/routes/time_index_delete.py +136 -0
  48. mainsequence_metatable-0.1.0/api/app/routes/time_index_reads.py +183 -0
  49. mainsequence_metatable-0.1.0/api/app/routes/time_index_stats.py +51 -0
  50. mainsequence_metatable-0.1.0/api/app/routes/update_batch.py +173 -0
  51. mainsequence_metatable-0.1.0/api/app/routes/update_chunk_insert.py +147 -0
  52. mainsequence_metatable-0.1.0/api/app/routes/update_constants.py +19 -0
  53. mainsequence_metatable-0.1.0/api/app/routes/update_crud.py +280 -0
  54. mainsequence_metatable-0.1.0/api/app/routes/update_details.py +141 -0
  55. mainsequence_metatable-0.1.0/api/app/routes/update_graph.py +120 -0
  56. mainsequence_metatable-0.1.0/api/app/routes/update_index_statistics.py +107 -0
  57. mainsequence_metatable-0.1.0/api/app/routes/update_registration.py +92 -0
  58. mainsequence_metatable-0.1.0/api/app/routes/update_runs.py +303 -0
  59. mainsequence_metatable-0.1.0/api/app/routes/update_statistics.py +77 -0
  60. mainsequence_metatable-0.1.0/api/app/runtime.py +317 -0
  61. mainsequence_metatable-0.1.0/api/app/runtime_control.py +154 -0
  62. mainsequence_metatable-0.1.0/api/app/source_passwords.py +43 -0
  63. mainsequence_metatable-0.1.0/api/app/source_registrations.py +216 -0
  64. mainsequence_metatable-0.1.0/api/backend/__init__.py +1 -0
  65. mainsequence_metatable-0.1.0/api/backend/backends/__init__.py +1 -0
  66. mainsequence_metatable-0.1.0/api/backend/backends/access.py +363 -0
  67. mainsequence_metatable-0.1.0/api/backend/backends/adapters/__init__.py +1 -0
  68. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/__init__.py +6 -0
  69. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/postgresql.py +2788 -0
  70. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/runtime.py +256 -0
  71. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/temporal.py +333 -0
  72. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/timescaledb.py +657 -0
  73. mainsequence_metatable-0.1.0/api/backend/backends/adapters/maintenance/validation.py +10 -0
  74. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_cascade_delete.py +39 -0
  75. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_connection.py +103 -0
  76. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_introspection.py +128 -0
  77. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_table_delete.py +42 -0
  78. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_tables.py +245 -0
  79. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index.py +141 -0
  80. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_delete.py +140 -0
  81. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_queries.py +281 -0
  82. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_stats.py +89 -0
  83. mainsequence_metatable-0.1.0/api/backend/backends/adapters/postgresql_time_index_write.py +185 -0
  84. mainsequence_metatable-0.1.0/api/backend/backends/adapters/source_validation.py +80 -0
  85. mainsequence_metatable-0.1.0/api/backend/backends/adapters/sqlite_connection.py +324 -0
  86. mainsequence_metatable-0.1.0/api/backend/backends/adapters/sqlite_introspection.py +135 -0
  87. mainsequence_metatable-0.1.0/api/backend/backends/adapters/table_cursor.py +14 -0
  88. mainsequence_metatable-0.1.0/api/backend/backends/catalog.py +288 -0
  89. mainsequence_metatable-0.1.0/api/backend/backends/catalog_ddl.py +126 -0
  90. mainsequence_metatable-0.1.0/api/backend/backends/catalog_types.py +32 -0
  91. mainsequence_metatable-0.1.0/api/backend/backends/contracts.py +322 -0
  92. mainsequence_metatable-0.1.0/api/backend/backends/hosted.py +495 -0
  93. mainsequence_metatable-0.1.0/api/backend/backends/hosted_access.py +378 -0
  94. mainsequence_metatable-0.1.0/api/backend/backends/native.py +105 -0
  95. mainsequence_metatable-0.1.0/api/backend/backends/operations.py +247 -0
  96. mainsequence_metatable-0.1.0/api/backend/backends/postgresql_access.py +302 -0
  97. mainsequence_metatable-0.1.0/api/backend/backends/registry.py +114 -0
  98. mainsequence_metatable-0.1.0/api/backend/backends/relation_tables.py +676 -0
  99. mainsequence_metatable-0.1.0/api/backend/backends/relational.py +804 -0
  100. mainsequence_metatable-0.1.0/api/backend/backends/restricted_sql.py +181 -0
  101. mainsequence_metatable-0.1.0/api/backend/backends/sqlite_access.py +129 -0
  102. mainsequence_metatable-0.1.0/api/backend/contracts/__init__.py +1 -0
  103. mainsequence_metatable-0.1.0/api/backend/contracts/relation_import.py +82 -0
  104. mainsequence_metatable-0.1.0/api/backend/contracts/storage_layouts.py +287 -0
  105. mainsequence_metatable-0.1.0/api/backend/contracts/table_contracts.py +361 -0
  106. mainsequence_metatable-0.1.0/api/backend/contracts/values.py +77 -0
  107. mainsequence_metatable-0.1.0/api/backend/domain/__init__.py +1 -0
  108. mainsequence_metatable-0.1.0/api/backend/domain/catalog_rules.py +161 -0
  109. mainsequence_metatable-0.1.0/api/backend/domain/data_source_rules.py +32 -0
  110. mainsequence_metatable-0.1.0/api/backend/domain/index_statistics.py +121 -0
  111. mainsequence_metatable-0.1.0/api/backend/domain/label_rules.py +32 -0
  112. mainsequence_metatable-0.1.0/api/backend/domain/permission_rules.py +18 -0
  113. mainsequence_metatable-0.1.0/api/backend/domain/update_constants.py +32 -0
  114. mainsequence_metatable-0.1.0/api/backend/integrations/__init__.py +1 -0
  115. mainsequence_metatable-0.1.0/api/backend/integrations/catalog_data_sources.py +166 -0
  116. mainsequence_metatable-0.1.0/api/backend/integrations/credential_keys.py +172 -0
  117. mainsequence_metatable-0.1.0/api/backend/integrations/credential_store.py +115 -0
  118. mainsequence_metatable-0.1.0/api/backend/integrations/data_source_provider.py +46 -0
  119. mainsequence_metatable-0.1.0/api/backend/integrations/local_credentials.py +192 -0
  120. mainsequence_metatable-0.1.0/api/backend/integrations/local_workspace.py +178 -0
  121. mainsequence_metatable-0.1.0/api/backend/integrations/platform_principals.py +32 -0
  122. mainsequence_metatable-0.1.0/api/backend/integrations/run_logs.py +271 -0
  123. mainsequence_metatable-0.1.0/api/backend/integrations/runtime_binding.py +65 -0
  124. mainsequence_metatable-0.1.0/api/backend/integrations/runtime_data_sources.py +81 -0
  125. mainsequence_metatable-0.1.0/api/backend/integrations/source_validation.py +6 -0
  126. mainsequence_metatable-0.1.0/api/backend/migrations/__init__.py +1 -0
  127. mainsequence_metatable-0.1.0/api/backend/migrations/env.py +55 -0
  128. mainsequence_metatable-0.1.0/api/backend/migrations/script.py.mako +25 -0
  129. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0001_initial.py +522 -0
  130. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0002_security_model.py +73 -0
  131. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0003_run_log_capture.py +17 -0
  132. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0004_historical_run_graphs.py +33 -0
  133. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0005_database_access.py +40 -0
  134. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0006_local_credentials.py +36 -0
  135. mainsequence_metatable-0.1.0/api/backend/migrations/versions/0007_external_relation_names.py +34 -0
  136. mainsequence_metatable-0.1.0/api/backend/migrations/versions/__init__.py +1 -0
  137. mainsequence_metatable-0.1.0/api/backend/operations/__init__.py +0 -0
  138. mainsequence_metatable-0.1.0/api/backend/operations/bootstrap_migrations.py +275 -0
  139. mainsequence_metatable-0.1.0/api/backend/operations/catalog_schema.py +56 -0
  140. mainsequence_metatable-0.1.0/api/backend/operations/create_table.py +170 -0
  141. mainsequence_metatable-0.1.0/api/backend/operations/finalize_managed.py +108 -0
  142. mainsequence_metatable-0.1.0/api/backend/operations/import_relations.py +407 -0
  143. mainsequence_metatable-0.1.0/api/backend/operations/introspect_table.py +88 -0
  144. mainsequence_metatable-0.1.0/api/backend/operations/read_time_index.py +75 -0
  145. mainsequence_metatable-0.1.0/api/backend/operations/register_catalog.py +211 -0
  146. mainsequence_metatable-0.1.0/api/backend/operations/search_documents.py +65 -0
  147. mainsequence_metatable-0.1.0/api/backend/persistence/__init__.py +1 -0
  148. mainsequence_metatable-0.1.0/api/backend/persistence/cascade.py +40 -0
  149. mainsequence_metatable-0.1.0/api/backend/persistence/catalog.py +176 -0
  150. mainsequence_metatable-0.1.0/api/backend/persistence/database.py +59 -0
  151. mainsequence_metatable-0.1.0/api/backend/persistence/grants.py +146 -0
  152. mainsequence_metatable-0.1.0/api/backend/persistence/labels.py +171 -0
  153. mainsequence_metatable-0.1.0/api/backend/persistence/locking.py +8 -0
  154. mainsequence_metatable-0.1.0/api/backend/persistence/models.py +593 -0
  155. mainsequence_metatable-0.1.0/api/backend/persistence/physical_operations.py +150 -0
  156. mainsequence_metatable-0.1.0/api/backend/persistence/projections.py +146 -0
  157. mainsequence_metatable-0.1.0/api/backend/persistence/run_graphs.py +287 -0
  158. mainsequence_metatable-0.1.0/api/backend/persistence/schema_graph.py +136 -0
  159. mainsequence_metatable-0.1.0/api/backend/persistence/sqlite_types.py +25 -0
  160. mainsequence_metatable-0.1.0/api/backend/persistence/table_body_filter.py +297 -0
  161. mainsequence_metatable-0.1.0/api/backend/persistence/table_queries.py +92 -0
  162. mainsequence_metatable-0.1.0/api/backend/persistence/table_response.py +209 -0
  163. mainsequence_metatable-0.1.0/api/backend/persistence/update_graph.py +106 -0
  164. mainsequence_metatable-0.1.0/api/backend/persistence/update_pipeline.py +139 -0
  165. mainsequence_metatable-0.1.0/api/backend/persistence/updates.py +314 -0
  166. mainsequence_metatable-0.1.0/api/backend/presentation/data_source_summary.py +99 -0
  167. mainsequence_metatable-0.1.0/api/metatables/__init__.py +1 -0
  168. mainsequence_metatable-0.1.0/api/metatables/configuration.yaml +3 -0
  169. mainsequence_metatable-0.1.0/api/metatables/main.py +8 -0
  170. mainsequence_metatable-0.1.0/compose.database-tests.yml +75 -0
  171. mainsequence_metatable-0.1.0/docs/adr/api/0001-unified-api-storage-and-local-sqlite.md +634 -0
  172. mainsequence_metatable-0.1.0/docs/adr/api/0002-application-administration-and-table-ownership.md +366 -0
  173. mainsequence_metatable-0.1.0/docs/adr/api/0004-approved-application-migrations.md +57 -0
  174. mainsequence_metatable-0.1.0/docs/adr/api/0005-run-logs-and-local-file-capture.md +237 -0
  175. mainsequence_metatable-0.1.0/docs/adr/api/0006-historical-run-graphs.md +288 -0
  176. mainsequence_metatable-0.1.0/docs/adr/api/0007-database-enforced-table-access.md +275 -0
  177. mainsequence_metatable-0.1.0/docs/adr/api/0007-database-roles-and-privileges.svg +120 -0
  178. mainsequence_metatable-0.1.0/docs/adr/api/0007-query-enforcement-path.svg +76 -0
  179. mainsequence_metatable-0.1.0/docs/adr/api/0008-mysql-mssql-table-workflows.md +418 -0
  180. mainsequence_metatable-0.1.0/docs/adr/api/0009-shared-credential-store.md +189 -0
  181. mainsequence_metatable-0.1.0/docs/adr/api/0010-import-external-tables-and-views.md +567 -0
  182. mainsequence_metatable-0.1.0/docs/adr/client/0003-api-endpoint-resolution.md +236 -0
  183. mainsequence_metatable-0.1.0/docs/adr/index.md +33 -0
  184. mainsequence_metatable-0.1.0/docs/api/authentication-and-errors.md +71 -0
  185. mainsequence_metatable-0.1.0/docs/api/data-sources.md +197 -0
  186. mainsequence_metatable-0.1.0/docs/api/openapi.json +9302 -0
  187. mainsequence_metatable-0.1.0/docs/api/overview.md +64 -0
  188. mainsequence_metatable-0.1.0/docs/api/reference.md +115 -0
  189. mainsequence_metatable-0.1.0/docs/api/tables-and-migrations.md +142 -0
  190. mainsequence_metatable-0.1.0/docs/api/time-index-and-updates.md +98 -0
  191. mainsequence_metatable-0.1.0/docs/assets/branding/metatables.svg +20 -0
  192. mainsequence_metatable-0.1.0/docs/client/build-an-updater.md +54 -0
  193. mainsequence_metatable-0.1.0/docs/client/define-and-migrate-tables.md +80 -0
  194. mainsequence_metatable-0.1.0/docs/client/installation-and-connection.md +127 -0
  195. mainsequence_metatable-0.1.0/docs/client/local-storage.md +15 -0
  196. mainsequence_metatable-0.1.0/docs/client/query-and-mutate.md +78 -0
  197. mainsequence_metatable-0.1.0/docs/client/quickstart.md +33 -0
  198. mainsequence_metatable-0.1.0/docs/client/read-existing-time-index-tables.md +32 -0
  199. mainsequence_metatable-0.1.0/docs/client/register-existing-tables.md +93 -0
  200. mainsequence_metatable-0.1.0/docs/client/tutorial.md +185 -0
  201. mainsequence_metatable-0.1.0/docs/concepts/architecture.md +90 -0
  202. mainsequence_metatable-0.1.0/docs/concepts/data-sources.md +162 -0
  203. mainsequence_metatable-0.1.0/docs/concepts/identity-and-scope.md +53 -0
  204. mainsequence_metatable-0.1.0/docs/concepts/permissions-namespaces-labels.md +37 -0
  205. mainsequence_metatable-0.1.0/docs/concepts/runs-and-execution-graphs.md +115 -0
  206. mainsequence_metatable-0.1.0/docs/concepts/table-contracts-and-lifecycle.md +58 -0
  207. mainsequence_metatable-0.1.0/docs/concepts/time-index-tables-and-updates.md +60 -0
  208. mainsequence_metatable-0.1.0/docs/contributing/architecture-and-boundaries.md +49 -0
  209. mainsequence_metatable-0.1.0/docs/contributing/database-backends.md +77 -0
  210. mainsequence_metatable-0.1.0/docs/contributing/documentation.md +75 -0
  211. mainsequence_metatable-0.1.0/docs/contributing/releasing.md +148 -0
  212. mainsequence_metatable-0.1.0/docs/contributing/testing.md +115 -0
  213. mainsequence_metatable-0.1.0/docs/examples/README.md +28 -0
  214. mainsequence_metatable-0.1.0/docs/examples/__init__.py +1 -0
  215. mainsequence_metatable-0.1.0/docs/examples/data_sources/README.md +27 -0
  216. mainsequence_metatable-0.1.0/docs/examples/data_sources/mssql.json +16 -0
  217. mainsequence_metatable-0.1.0/docs/examples/data_sources/mysql.json +16 -0
  218. mainsequence_metatable-0.1.0/docs/examples/data_sources/postgresql.json +15 -0
  219. mainsequence_metatable-0.1.0/docs/examples/data_sources/register.py +23 -0
  220. mainsequence_metatable-0.1.0/docs/examples/external_table.py +20 -0
  221. mainsequence_metatable-0.1.0/docs/examples/query.py +19 -0
  222. mainsequence_metatable-0.1.0/docs/examples/quickstart.py +17 -0
  223. mainsequence_metatable-0.1.0/docs/examples/reader.py +12 -0
  224. mainsequence_metatable-0.1.0/docs/examples/scripts/__init__.py +1 -0
  225. mainsequence_metatable-0.1.0/docs/examples/scripts/setup_metatables.py +42 -0
  226. mainsequence_metatable-0.1.0/docs/examples/tables.py +49 -0
  227. mainsequence_metatable-0.1.0/docs/examples/tutorial/README.md +82 -0
  228. mainsequence_metatable-0.1.0/docs/examples/tutorial/__init__.py +1 -0
  229. mainsequence_metatable-0.1.0/docs/examples/tutorial/__main__.py +76 -0
  230. mainsequence_metatable-0.1.0/docs/examples/tutorial/data/README.md +13 -0
  231. mainsequence_metatable-0.1.0/docs/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +70 -0
  232. mainsequence_metatable-0.1.0/docs/examples/tutorial/frames.py +48 -0
  233. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/__init__.py +29 -0
  234. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/env.py +6 -0
  235. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/registry.py +9 -0
  236. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/script.py.mako +28 -0
  237. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/__init__.py +0 -0
  238. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +81 -0
  239. mainsequence_metatable-0.1.0/docs/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  240. mainsequence_metatable-0.1.0/docs/examples/tutorial/operations.py +67 -0
  241. mainsequence_metatable-0.1.0/docs/examples/tutorial/tables.py +114 -0
  242. mainsequence_metatable-0.1.0/docs/examples/tutorial/updaters.py +95 -0
  243. mainsequence_metatable-0.1.0/docs/examples/updater.py +42 -0
  244. mainsequence_metatable-0.1.0/docs/index.md +62 -0
  245. mainsequence_metatable-0.1.0/docs/operations/catalog-migrations.md +146 -0
  246. mainsequence_metatable-0.1.0/docs/operations/configuration.md +58 -0
  247. mainsequence_metatable-0.1.0/docs/operations/hosted-runtime.md +96 -0
  248. mainsequence_metatable-0.1.0/docs/operations/local-runtime.md +152 -0
  249. mainsequence_metatable-0.1.0/docs/operations/recovery-and-observability.md +60 -0
  250. mainsequence_metatable-0.1.0/docs/operations/run-history.md +128 -0
  251. mainsequence_metatable-0.1.0/docs/operations/run-logs.md +128 -0
  252. mainsequence_metatable-0.1.0/docs/reference/capabilities.md +298 -0
  253. mainsequence_metatable-0.1.0/docs/reference/cli.md +31 -0
  254. mainsequence_metatable-0.1.0/docs/reference/python.md +111 -0
  255. mainsequence_metatable-0.1.0/docs/security/index.md +172 -0
  256. mainsequence_metatable-0.1.0/docs/security/ownership-and-sharing.md +145 -0
  257. mainsequence_metatable-0.1.0/docs/security/permissions.md +105 -0
  258. mainsequence_metatable-0.1.0/examples/README.md +26 -0
  259. mainsequence_metatable-0.1.0/examples/__init__.py +1 -0
  260. mainsequence_metatable-0.1.0/examples/data_sources/README.md +25 -0
  261. mainsequence_metatable-0.1.0/examples/data_sources/mssql.json +16 -0
  262. mainsequence_metatable-0.1.0/examples/data_sources/mysql.json +16 -0
  263. mainsequence_metatable-0.1.0/examples/data_sources/postgresql.json +15 -0
  264. mainsequence_metatable-0.1.0/examples/data_sources/register.py +23 -0
  265. mainsequence_metatable-0.1.0/examples/external_table.py +20 -0
  266. mainsequence_metatable-0.1.0/examples/query.py +19 -0
  267. mainsequence_metatable-0.1.0/examples/quickstart.py +17 -0
  268. mainsequence_metatable-0.1.0/examples/reader.py +12 -0
  269. mainsequence_metatable-0.1.0/examples/scripts/__init__.py +1 -0
  270. mainsequence_metatable-0.1.0/examples/scripts/setup_metatables.py +42 -0
  271. mainsequence_metatable-0.1.0/examples/tables.py +49 -0
  272. mainsequence_metatable-0.1.0/examples/tutorial/README.md +80 -0
  273. mainsequence_metatable-0.1.0/examples/tutorial/__init__.py +1 -0
  274. mainsequence_metatable-0.1.0/examples/tutorial/__main__.py +76 -0
  275. mainsequence_metatable-0.1.0/examples/tutorial/data/README.md +11 -0
  276. mainsequence_metatable-0.1.0/examples/tutorial/data/yahoo_spy_qqq_iwm_2026-06-15_2026-07-17.csv +70 -0
  277. mainsequence_metatable-0.1.0/examples/tutorial/frames.py +48 -0
  278. mainsequence_metatable-0.1.0/examples/tutorial/migrations/__init__.py +29 -0
  279. mainsequence_metatable-0.1.0/examples/tutorial/migrations/env.py +6 -0
  280. mainsequence_metatable-0.1.0/examples/tutorial/migrations/registry.py +9 -0
  281. mainsequence_metatable-0.1.0/examples/tutorial/migrations/script.py.mako +28 -0
  282. mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/__init__.py +0 -0
  283. mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/metatables_market_tutorial/0001_create_market_tutorial_tables.py +81 -0
  284. mainsequence_metatable-0.1.0/examples/tutorial/migrations/versions/metatables_market_tutorial/__init__.py +0 -0
  285. mainsequence_metatable-0.1.0/examples/tutorial/operations.py +67 -0
  286. mainsequence_metatable-0.1.0/examples/tutorial/tables.py +114 -0
  287. mainsequence_metatable-0.1.0/examples/tutorial/updaters.py +95 -0
  288. mainsequence_metatable-0.1.0/examples/updater.py +42 -0
  289. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/PKG-INFO +137 -0
  290. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/SOURCES.txt +466 -0
  291. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/dependency_links.txt +1 -0
  292. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/entry_points.txt +2 -0
  293. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/requires.txt +40 -0
  294. mainsequence_metatable-0.1.0/mainsequence_metatable.egg-info/top_level.txt +3 -0
  295. mainsequence_metatable-0.1.0/mkdocs.yml +75 -0
  296. mainsequence_metatable-0.1.0/pyproject.toml +130 -0
  297. mainsequence_metatable-0.1.0/scripts/__init__.py +0 -0
  298. mainsequence_metatable-0.1.0/scripts/build_package.py +30 -0
  299. mainsequence_metatable-0.1.0/scripts/build_reference.py +112 -0
  300. mainsequence_metatable-0.1.0/scripts/check_boundaries.py +132 -0
  301. mainsequence_metatable-0.1.0/scripts/check_client_api_coverage.py +108 -0
  302. mainsequence_metatable-0.1.0/scripts/check_distribution_sources.py +180 -0
  303. mainsequence_metatable-0.1.0/scripts/check_docs.py +47 -0
  304. mainsequence_metatable-0.1.0/scripts/check_examples_debug.py +164 -0
  305. mainsequence_metatable-0.1.0/scripts/check_project.py +22 -0
  306. mainsequence_metatable-0.1.0/scripts/dev_release_version.py +132 -0
  307. mainsequence_metatable-0.1.0/scripts/test_databases.py +136 -0
  308. mainsequence_metatable-0.1.0/scripts/test_postgresql.py +61 -0
  309. mainsequence_metatable-0.1.0/setup.cfg +4 -0
  310. mainsequence_metatable-0.1.0/src/metatables/__init__.py +202 -0
  311. mainsequence_metatable-0.1.0/src/metatables/_skill_bundle.py +49 -0
  312. mainsequence_metatable-0.1.0/src/metatables/cli/__init__.py +1 -0
  313. mainsequence_metatable-0.1.0/src/metatables/cli/app.py +444 -0
  314. mainsequence_metatable-0.1.0/src/metatables/cli/filters.py +144 -0
  315. mainsequence_metatable-0.1.0/src/metatables/cli/migrations.py +906 -0
  316. mainsequence_metatable-0.1.0/src/metatables/cli/skills.py +90 -0
  317. mainsequence_metatable-0.1.0/src/metatables/compiled_sql/__init__.py +5 -0
  318. mainsequence_metatable-0.1.0/src/metatables/compiled_sql/mssql.py +35 -0
  319. mainsequence_metatable-0.1.0/src/metatables/compiled_sql/v1.py +219 -0
  320. mainsequence_metatable-0.1.0/src/metatables/dtype_codec.py +460 -0
  321. mainsequence_metatable-0.1.0/src/metatables/endpoint.py +243 -0
  322. mainsequence_metatable-0.1.0/src/metatables/future_registry.py +28 -0
  323. mainsequence_metatable-0.1.0/src/metatables/hashing.py +173 -0
  324. mainsequence_metatable-0.1.0/src/metatables/instrumentation.py +5 -0
  325. mainsequence_metatable-0.1.0/src/metatables/local_run_logs.py +280 -0
  326. mainsequence_metatable-0.1.0/src/metatables/log_contract.py +112 -0
  327. mainsequence_metatable-0.1.0/src/metatables/migrations/__init__.py +1670 -0
  328. mainsequence_metatable-0.1.0/src/metatables/migrations/alembic.py +167 -0
  329. mainsequence_metatable-0.1.0/src/metatables/migrations/env.py +141 -0
  330. mainsequence_metatable-0.1.0/src/metatables/migrations/provider.py +25 -0
  331. mainsequence_metatable-0.1.0/src/metatables/migrations/registry.py +75 -0
  332. mainsequence_metatable-0.1.0/src/metatables/migrations/scaffold.py +221 -0
  333. mainsequence_metatable-0.1.0/src/metatables/migrations/templates/__init__.py +1 -0
  334. mainsequence_metatable-0.1.0/src/metatables/migrations/templates/env.py.mako +8 -0
  335. mainsequence_metatable-0.1.0/src/metatables/migrations/templates/script.py.mako +28 -0
  336. mainsequence_metatable-0.1.0/src/metatables/migrations/tls.py +23 -0
  337. mainsequence_metatable-0.1.0/src/metatables/models.py +4804 -0
  338. mainsequence_metatable-0.1.0/src/metatables/pydantic_metadata.py +99 -0
  339. mainsequence_metatable-0.1.0/src/metatables/run_logging.py +172 -0
  340. mainsequence_metatable-0.1.0/src/metatables/runtime_context.py +65 -0
  341. mainsequence_metatable-0.1.0/src/metatables/runtime_contract.py +61 -0
  342. mainsequence_metatable-0.1.0/src/metatables/schema_names.py +304 -0
  343. mainsequence_metatable-0.1.0/src/metatables/sdk_compat.py +34 -0
  344. mainsequence_metatable-0.1.0/src/metatables/sqlalchemy_contracts.py +1771 -0
  345. mainsequence_metatable-0.1.0/src/metatables/time_index_table_refs.py +290 -0
  346. mainsequence_metatable-0.1.0/src/metatables/transport.py +73 -0
  347. mainsequence_metatable-0.1.0/src/metatables/update_configuration_contract.py +79 -0
  348. mainsequence_metatable-0.1.0/src/metatables/updaters/__init__.py +27 -0
  349. mainsequence_metatable-0.1.0/src/metatables/updaters/configuration.py +546 -0
  350. mainsequence_metatable-0.1.0/src/metatables/updaters/dependencies.py +9 -0
  351. mainsequence_metatable-0.1.0/src/metatables/updaters/managers.py +813 -0
  352. mainsequence_metatable-0.1.0/src/metatables/updaters/namespacing.py +52 -0
  353. mainsequence_metatable-0.1.0/src/metatables/updaters/runner.py +919 -0
  354. mainsequence_metatable-0.1.0/src/metatables/updaters/updaters.py +792 -0
  355. mainsequence_metatable-0.1.0/src/metatables/updaters/utils.py +23 -0
  356. mainsequence_metatable-0.1.0/tests/auth/test_caller_assertions.py +60 -0
  357. mainsequence_metatable-0.1.0/tests/auth/test_data_source_identity.py +85 -0
  358. mainsequence_metatable-0.1.0/tests/auth/test_development_client.py +59 -0
  359. mainsequence_metatable-0.1.0/tests/auth/test_hosted_environment_target.py +77 -0
  360. mainsequence_metatable-0.1.0/tests/auth/test_local_mode.py +459 -0
  361. mainsequence_metatable-0.1.0/tests/auth/test_platform_fact_cache.py +183 -0
  362. mainsequence_metatable-0.1.0/tests/auth/test_runtime_bootstrap.py +557 -0
  363. mainsequence_metatable-0.1.0/tests/auth/test_runtime_scaffold.py +131 -0
  364. mainsequence_metatable-0.1.0/tests/auth/test_runtime_selection.py +315 -0
  365. mainsequence_metatable-0.1.0/tests/auth/test_runtime_storage_binding.py +301 -0
  366. mainsequence_metatable-0.1.0/tests/auth/test_source_passwords.py +36 -0
  367. mainsequence_metatable-0.1.0/tests/catalog/test_catalog_foundation.py +418 -0
  368. mainsequence_metatable-0.1.0/tests/catalog/test_contract_projection.py +148 -0
  369. mainsequence_metatable-0.1.0/tests/catalog/test_database_config.py +23 -0
  370. mainsequence_metatable-0.1.0/tests/catalog/test_index_statistics.py +55 -0
  371. mainsequence_metatable-0.1.0/tests/catalog/test_migration.py +331 -0
  372. mainsequence_metatable-0.1.0/tests/conftest.py +40 -0
  373. mainsequence_metatable-0.1.0/tests/contracts/capabilities.json +3230 -0
  374. mainsequence_metatable-0.1.0/tests/contracts/client_signatures.json +324 -0
  375. mainsequence_metatable-0.1.0/tests/contracts/database_operations.json +141 -0
  376. mainsequence_metatable-0.1.0/tests/contracts/test_relation_import.py +45 -0
  377. mainsequence_metatable-0.1.0/tests/contracts/test_storage_layouts.py +77 -0
  378. mainsequence_metatable-0.1.0/tests/contracts/test_table_contracts.py +124 -0
  379. mainsequence_metatable-0.1.0/tests/database_backend/Dockerfile +20 -0
  380. mainsequence_metatable-0.1.0/tests/database_backend/Dockerfile.dockerignore +17 -0
  381. mainsequence_metatable-0.1.0/tests/database_backend/__init__.py +1 -0
  382. mainsequence_metatable-0.1.0/tests/database_backend/conftest.py +236 -0
  383. mainsequence_metatable-0.1.0/tests/database_backend/provider/__init__.py +37 -0
  384. mainsequence_metatable-0.1.0/tests/database_backend/provider/env.py +4 -0
  385. mainsequence_metatable-0.1.0/tests/database_backend/provider/versions/0001_measurement.py +19 -0
  386. mainsequence_metatable-0.1.0/tests/database_backend/test_api_contract.py +169 -0
  387. mainsequence_metatable-0.1.0/tests/database_backend/test_application_migration.py +36 -0
  388. mainsequence_metatable-0.1.0/tests/database_backend/test_bootstrap_recovery.py +151 -0
  389. mainsequence_metatable-0.1.0/tests/database_backend/test_catalog_contract.py +199 -0
  390. mainsequence_metatable-0.1.0/tests/database_backend/test_credential_catalog.py +33 -0
  391. mainsequence_metatable-0.1.0/tests/database_backend/test_physical_contract.py +266 -0
  392. mainsequence_metatable-0.1.0/tests/database_backend/test_relation_import.py +390 -0
  393. mainsequence_metatable-0.1.0/tests/database_backend/test_runtime_bootstrap.py +146 -0
  394. mainsequence_metatable-0.1.0/tests/database_backend/test_sql_security.py +553 -0
  395. mainsequence_metatable-0.1.0/tests/database_backend/test_update_client.py +109 -0
  396. mainsequence_metatable-0.1.0/tests/database_operations/test_physical_operations.py +77 -0
  397. mainsequence_metatable-0.1.0/tests/database_operations/test_postgresql_operations.py +352 -0
  398. mainsequence_metatable-0.1.0/tests/database_operations/test_runtime_and_temporal.py +239 -0
  399. mainsequence_metatable-0.1.0/tests/documentation/test_project_checks.py +83 -0
  400. mainsequence_metatable-0.1.0/tests/e2e/test_api_endpoint.py +320 -0
  401. mainsequence_metatable-0.1.0/tests/e2e/test_catalog_outage.py +54 -0
  402. mainsequence_metatable-0.1.0/tests/e2e/test_client_api_contract.py +264 -0
  403. mainsequence_metatable-0.1.0/tests/e2e/test_client_api_coverage.py +8 -0
  404. mainsequence_metatable-0.1.0/tests/e2e/test_client_migration_scaffold.py +64 -0
  405. mainsequence_metatable-0.1.0/tests/e2e/test_client_migration_tls.py +30 -0
  406. mainsequence_metatable-0.1.0/tests/e2e/test_client_package.py +141 -0
  407. mainsequence_metatable-0.1.0/tests/e2e/test_client_signatures.py +36 -0
  408. mainsequence_metatable-0.1.0/tests/e2e/test_client_value_behaviors.py +46 -0
  409. mainsequence_metatable-0.1.0/tests/e2e/test_data_source_registry.py +408 -0
  410. mainsequence_metatable-0.1.0/tests/e2e/test_local_actor_client_api.py +155 -0
  411. mainsequence_metatable-0.1.0/tests/e2e/test_managed_finalize_client_api.py +248 -0
  412. mainsequence_metatable-0.1.0/tests/e2e/test_namespaces_admin_http.py +149 -0
  413. mainsequence_metatable-0.1.0/tests/e2e/test_public_imports.py +15 -0
  414. mainsequence_metatable-0.1.0/tests/e2e/test_remaining_client_routes.py +322 -0
  415. mainsequence_metatable-0.1.0/tests/e2e/test_run_graphs.py +246 -0
  416. mainsequence_metatable-0.1.0/tests/e2e/test_run_logs.py +353 -0
  417. mainsequence_metatable-0.1.0/tests/e2e/test_runtime_transition.py +177 -0
  418. mainsequence_metatable-0.1.0/tests/e2e/test_sdk_local_startup.py +130 -0
  419. mainsequence_metatable-0.1.0/tests/e2e/test_sqlite_runtime.py +506 -0
  420. mainsequence_metatable-0.1.0/tests/e2e/test_table_delete_client_api.py +222 -0
  421. mainsequence_metatable-0.1.0/tests/e2e/test_table_filter_client_api.py +135 -0
  422. mainsequence_metatable-0.1.0/tests/e2e/test_table_introspection_client_api.py +137 -0
  423. mainsequence_metatable-0.1.0/tests/e2e/test_table_patch_client_api.py +132 -0
  424. mainsequence_metatable-0.1.0/tests/e2e/test_table_search_document_api.py +141 -0
  425. mainsequence_metatable-0.1.0/tests/e2e/test_table_stats_api.py +135 -0
  426. mainsequence_metatable-0.1.0/tests/e2e/test_table_update_pipeline.py +136 -0
  427. mainsequence_metatable-0.1.0/tests/e2e/test_table_updates_http.py +183 -0
  428. mainsequence_metatable-0.1.0/tests/e2e/test_time_index_delete_client_api.py +136 -0
  429. mainsequence_metatable-0.1.0/tests/e2e/test_time_index_reads_client_api.py +152 -0
  430. mainsequence_metatable-0.1.0/tests/e2e/test_update_batch_client_api.py +122 -0
  431. mainsequence_metatable-0.1.0/tests/e2e/test_update_chunk_insert_client_api.py +129 -0
  432. mainsequence_metatable-0.1.0/tests/e2e/test_update_dependency_priority_client_api.py +383 -0
  433. mainsequence_metatable-0.1.0/tests/e2e/test_update_index_statistics_client_api.py +128 -0
  434. mainsequence_metatable-0.1.0/tests/e2e/test_update_registration_client_api.py +119 -0
  435. mainsequence_metatable-0.1.0/tests/examples/test_documented_examples.py +60 -0
  436. mainsequence_metatable-0.1.0/tests/examples/test_postgresql_examples.py +46 -0
  437. mainsequence_metatable-0.1.0/tests/examples/test_setup_launch.py +45 -0
  438. mainsequence_metatable-0.1.0/tests/examples/test_tutorial.py +226 -0
  439. mainsequence_metatable-0.1.0/tests/integrations/test_credential_store.py +234 -0
  440. mainsequence_metatable-0.1.0/tests/integrations/test_data_source_rules.py +44 -0
  441. mainsequence_metatable-0.1.0/tests/integrations/test_local_data_sources.py +94 -0
  442. mainsequence_metatable-0.1.0/tests/integrations/test_local_run_logs.py +178 -0
  443. mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_connection.py +99 -0
  444. mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_sql.py +19 -0
  445. mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_tables.py +228 -0
  446. mainsequence_metatable-0.1.0/tests/integrations/test_postgresql_time_index_queries.py +184 -0
  447. mainsequence_metatable-0.1.0/tests/integrations/test_source_validation.py +91 -0
  448. mainsequence_metatable-0.1.0/tests/integrations/test_sqlite_operations.py +264 -0
  449. mainsequence_metatable-0.1.0/tests/labels/test_labels.py +125 -0
  450. mainsequence_metatable-0.1.0/tests/operations/test_create_table_operation.py +184 -0
  451. mainsequence_metatable-0.1.0/tests/operations/test_create_table_postgres.py +147 -0
  452. mainsequence_metatable-0.1.0/tests/operations/test_physical_operation_journal.py +126 -0
  453. mainsequence_metatable-0.1.0/tests/operations/test_register_catalog.py +105 -0
  454. mainsequence_metatable-0.1.0/tests/operations/test_search_documents.py +30 -0
  455. mainsequence_metatable-0.1.0/tests/packaging/test_client_skills.py +121 -0
  456. mainsequence_metatable-0.1.0/tests/packaging/test_dev_release_version.py +104 -0
  457. mainsequence_metatable-0.1.0/tests/packaging/test_distribution_sources.py +131 -0
  458. mainsequence_metatable-0.1.0/tests/packaging/test_editable_build.py +55 -0
  459. mainsequence_metatable-0.1.0/tests/packaging/test_installed_distribution.py +122 -0
  460. mainsequence_metatable-0.1.0/tests/permissions/test_governed_sql_scope.py +22 -0
  461. mainsequence_metatable-0.1.0/tests/permissions/test_local_actor_membership.py +48 -0
  462. mainsequence_metatable-0.1.0/tests/permissions/test_migration_boundary.py +19 -0
  463. mainsequence_metatable-0.1.0/tests/permissions/test_namespace_grants.py +142 -0
  464. mainsequence_metatable-0.1.0/tests/permissions/test_security_api.py +253 -0
  465. mainsequence_metatable-0.1.0/tests/permissions/test_table_body_filter.py +97 -0
  466. mainsequence_metatable-0.1.0/tests/permissions/test_table_grants.py +230 -0
  467. mainsequence_metatable-0.1.0/tests/permissions/test_table_queries.py +95 -0
  468. mainsequence_metatable-0.1.0/uv.lock +1883 -0
@@ -0,0 +1,106 @@
1
+ ---
2
+ name: metatables-meta-tables
3
+ description: "Author and query application tables through the installed MetaTables Python client. Covers SQLAlchemy contracts, external registration and governed SQL in consuming applications. Excludes client-library implementation, API/server changes and repository tooling."
4
+ ---
5
+
6
+ # MetaTables client contracts and queries
7
+
8
+ ## Client scope
9
+
10
+ Apply this skill to applications that consume the installed `metatables` Python
11
+ client. It covers application-facing models and workflows. Client-library
12
+ implementation, this repository's development/release tooling, and API internals
13
+ have separate ownership.
14
+
15
+ In a copied skill, resolve the `docs/` and `examples/` paths below relative to
16
+ this skill's `references/` directory. The client CLI bundles the matching version's
17
+ guides and examples there, including their linked documents. In the MetaTables
18
+ source checkout, read the same paths from the repository root.
19
+
20
+ Use the installed `metatables` client. The API catalog resource, the client
21
+ resource model, and a SQLAlchemy authoring class have different responsibilities.
22
+ Read `docs/concepts/architecture.md` and
23
+ `docs/concepts/table-contracts-and-lifecycle.md` before choosing a workflow.
24
+
25
+ For actual endpoint support, consult `docs/reference/capabilities.md`. Do not
26
+ infer API support from the presence of an inherited client method. Platform
27
+ identity and Git source facts use SDK imports. Table operations use the client's automatic hosted discovery or an explicit
28
+ `METATABLES_API_URL`; the API selects the effective DataSource. See
29
+ `docs/client/installation-and-connection.md`. Local development runs the same API
30
+ with SQLite behind it; ordinary clients never open local table files. Local
31
+ workspaces use one SQLite database for system and user tables per checkout/branch.
32
+ Settings explicitly initializes or selects the runtime DataSource in both modes;
33
+ startup never runs Alembic. See `docs/operations/catalog-migrations.md`.
34
+
35
+ ## Authoring decisions
36
+
37
+ Establish row meaning, ownership, DataSource, physical schema/name, namespace,
38
+ logical identifier, time grain if any, and foreign-key targets from the task and
39
+ existing models. Clarify only unresolved choices that materially change the
40
+ contract. Preserve the user's existing authorization and scope.
41
+
42
+ - Managed application tables use `PlatformManagedMetaTable` or
43
+ `PlatformTimeIndexMetaTable` and the migration-provider workflow. Use the
44
+ [migrations skill](../metatables-migrations/SKILL.md) for creation and
45
+ evolution.
46
+ - Existing externally owned tables use `register_external_sqlalchemy_model` with
47
+ their actual physical binding. Registration does not create the physical table;
48
+ see `docs/client/register-existing-tables.md` and `examples/external_table.py`.
49
+ - `backend_managed` is a separate low-level API provisioning intent. Do not use it
50
+ as a substitute for ordinary managed application-table migrations.
51
+
52
+ A UID is catalog identity. An optional identifier is unique in the connected catalog.
53
+ A physical binding is DataSource + schema + table name. A catalog
54
+ namespace groups resources and grants; it is not a SQL schema. Contract hashes
55
+ are fingerprints, not table identity. See `docs/concepts/identity-and-scope.md`.
56
+
57
+ ## SQLAlchemy contract rules
58
+
59
+ Use `examples/tables.py` as the tested pattern. Declare an explicit
60
+ application-prefixed physical name with `schema_table_name(app, concept)`, a
61
+ stable logical identifier, and an intention-rich `__metatable_description__`.
62
+ Give columns useful `info={"label": ..., "description": ...}` metadata. Explain
63
+ row grain and downstream meaning rather than repeating types.
64
+
65
+ Keep foreign keys and indexes in SQLAlchemy metadata. Reference explicit physical
66
+ names using `ForeignKey`/`ForeignKeyConstraint`; do not ask users to hand-author
67
+ catalog target UIDs. Alembic renders physical DDL; catalog finalization introspects
68
+ it. The client column contract does not itself serialize all FK/index metadata.
69
+
70
+ For a `PlatformTimeIndexMetaTable`, declare time first in `__index_names__`, the
71
+ full observation grain, and a timezone-aware time column. Prefer `time_index` as
72
+ the time name for updater compatibility. The mixin automatically creates the
73
+ unique index for the full grain; add only additional lookup indexes. Declare
74
+ `__cadence__` when the stable observation interval is known.
75
+
76
+ Physical names remain stable across schema changes. Evolve through new Alembic
77
+ revisions; do not recompute identity from columns or rewrite applied history.
78
+
79
+ ## Queries and mutations
80
+
81
+ Read `docs/client/query-and-mutate.md` and `examples/query.py`. Use
82
+ `compile_sqlalchemy_statement` with bound parameters and explicit catalog table
83
+ scope/access. Resolve registered physical names instead of guessing them from
84
+ identifiers. Use the documented expression subset and scopes for actual read/write targets.
85
+ Arbitrary DDL, system relations, multiple statements and indirect view/trigger
86
+ writes are unsupported by the governed SQL API.
87
+
88
+ Column search is supported. Description search, search-index refresh, and
89
+ legacy convenience sharing/label actions are not supported API workflows.
90
+ Use `get_access`, `set_access` and `revoke_access` for supported Reader/Writer
91
+ sharing. Labels can be changed through the documented table PATCH path. Authorization is
92
+ owned by the API catalog; see `docs/concepts/permissions-namespaces-labels.md`.
93
+
94
+ Updater output rollback uses `TimeIndexMetaTable.delete_after_date` with an
95
+ inclusive time cutoff and explicit dimension/coordinate scope when appropriate.
96
+ A null cutoff requires a scope. Do not replace that workflow with ad hoc SQL.
97
+ Deletion/cascade requires edit access, relevant protection checks, and explicit
98
+ cascade intent; it is not an administrator-role bypass or migration repair.
99
+
100
+ ## Validation
101
+
102
+ Check authored models, normalization, physical naming, FK targets, and time grain
103
+ against the actual workflow. Run relevant behavior tests and the example tests.
104
+ State whether validation used local contracts, a disposable database, or a
105
+ configured service. Never claim an end-to-end deployment result from an import
106
+ check. Preserve published contracts unless the task authorizes their evolution.
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: metatables-migrations
3
+ description: "Create and evolve managed application tables through Alembic migration providers with the installed MetaTables Python client. Covers provider scope, scaffolding, offline revisions, approved API-side execution, and reservation or finalization failures. Excludes API catalog migrations, client-library implementation, API/server changes and repository tooling."
4
+ ---
5
+
6
+ # MetaTables client application migrations
7
+
8
+ ## Client scope
9
+
10
+ Apply this skill to applications that consume the installed `metatables` Python
11
+ client. It covers application-facing models and workflows. Client-library
12
+ implementation, this repository's development/release tooling, and API internals
13
+ have separate ownership.
14
+
15
+ In a copied skill, resolve the `docs/` and `examples/` paths below relative to
16
+ this skill's `references/` directory. The client CLI bundles the matching version's
17
+ guides and examples there, including their linked documents. In the MetaTables
18
+ source checkout, read the same paths from the repository root.
19
+
20
+ Read `docs/client/define-and-migrate-tables.md`,
21
+ `docs/concepts/table-contracts-and-lifecycle.md`, and the tested
22
+ `examples/tables.py`. Managed authoring is migration-first: define SQLAlchemy
23
+ models, select a provider, author a revision, then let the API apply it and
24
+ finalize the catalog bindings. Use the
25
+ [table skill](../metatables-meta-tables/SKILL.md) for contract design.
26
+
27
+ Check `docs/reference/capabilities.md` and `metatables migrations --help` before
28
+ promising a command. The API's own catalog migrations are a separate history that
29
+ an admin runs from Settings; see `docs/operations/catalog-migrations.md`. They
30
+ are not application-provider revisions.
31
+
32
+ ## Source and runtime context
33
+
34
+ - The API selects its active runtime DataSource. Do not accept a caller-supplied
35
+ DataSource, database URL, revision path, or branch override.
36
+ - Git source facts come from the current checkout through the SDK. Do not ask the
37
+ user to choose a branch or environment for a migration.
38
+ - An explicit `METATABLES_API_URL` selects an API endpoint, not a branch or a
39
+ storage binding. See `docs/client/installation-and-connection.md`.
40
+ - Provider aliases are API deployment configuration, not Python import paths
41
+ supplied by a request.
42
+
43
+ ## Author the migration
44
+
45
+ 1. Define the SQLAlchemy models with stable, application-prefixed physical names.
46
+ 2. Identify one provider module, migration namespace, target `MetaData`, model
47
+ registry, and prefixed Alembic version-table binding.
48
+ 3. Keep provider scope explicit. Do not scan all imported models or installed
49
+ packages.
50
+ 4. Scaffold only when the application has no provider yet:
51
+
52
+ ```bash
53
+ metatables migrations scaffold \
54
+ --package ledger \
55
+ --module ledger.migrations \
56
+ --namespace ledger \
57
+ --base ledger.tables:Base \
58
+ --metadata ledger.tables:Base.metadata
59
+ ```
60
+
61
+ 5. Edit the generated `registry.py` so it returns exactly the models owned by
62
+ that migration stream. Scaffolding alone selects no models and creates no
63
+ tables.
64
+ 6. Create and review an offline Alembic revision:
65
+
66
+ ```bash
67
+ metatables migrations revision \
68
+ --provider ledger.migrations:migration \
69
+ --no-autogenerate \
70
+ --message "create ledger"
71
+ ```
72
+
73
+ Use `--source-root` and `--code-repository-root` when the application does not
74
+ use the default `src/` layout. Keep applied revisions immutable; add a new
75
+ revision for every later schema change.
76
+
77
+ ## Execute through the approved runtime
78
+
79
+ Client-side `current`, `upgrade`, `downgrade`, direct migration connections, and
80
+ database autogeneration are unsupported. `--sqlalchemy-url` does not bypass that
81
+ boundary.
82
+
83
+ The API applies a provider through `POST /application-migrations/upgrade/`, which
84
+ accepts only an alias listed in its `application_migration_providers`. The
85
+ deployment must already install the reviewed provider code. The API reserves the
86
+ provider's catalog rows, runs Alembic to the provider head, and finalizes the
87
+ physical bindings. The caller needs Writer access to every existing provider
88
+ table and cannot upload revisions, choose a database or target revision, or
89
+ downgrade. See `docs/api/tables-and-migrations.md`.
90
+
91
+ Use the application's tested setup entry point when one exists;
92
+ `examples/scripts/setup_metatables.py` and `docs/client/tutorial.md` show the
93
+ pattern. Do not replace it with direct model registration or an undocumented
94
+ request body.
95
+
96
+ ## Lifecycle invariants
97
+
98
+ - Provider tables and the Alembic registry are `platform_managed` +
99
+ `alembic_managed`.
100
+ - Reservation precedes physical migration; reconciliation moves catalog rows
101
+ from `reserved` to `active`.
102
+ - The registry is the provider root and has no parent. Provider tables bind to
103
+ that registry.
104
+ - Physical identity is DataSource UID + physical schema + physical table name.
105
+ A logical identifier or contract hash does not replace it. See
106
+ `docs/concepts/identity-and-scope.md`.
107
+ - Repeated setup reuses compatible bindings and applied revision history.
108
+ - `.register()` is lifecycle plumbing, not the ordinary way to create an
109
+ application table. External registration cannot stand in for a managed
110
+ migration registry.
111
+
112
+ ## Failure handling
113
+
114
+ Read `docs/operations/recovery-and-observability.md`.
115
+
116
+ - If provider loading fails, verify the import path, model registry, metadata,
117
+ version-table binding, and installed `metatables` version.
118
+ - If reservation fails, compare provider scope and physical identities before
119
+ changing code. Do not create a second catalog row for the same table.
120
+ - If Alembic succeeds but finalization fails, physical DDL may already be
121
+ committed. Inspect every per-table result and the actual schema before
122
+ retrying.
123
+ - Treat an uncertain journal outcome as reconciliation work. Do not blindly
124
+ retry, stamp, downgrade, cascade-delete, or register around it.
125
+ - Destructive catalog deletion is not migration recovery and never bypasses
126
+ schema-management protection.
127
+
128
+ ## Validation
129
+
130
+ Verify provider scope, revision content, the approved-provider configuration,
131
+ repeat execution, and final active bindings. Report separately what was checked
132
+ offline and what was exercised against a configured API.
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: metatables-time-index-table-updates
3
+ description: "Build or review TimeIndexTableUpdater producers, configuration hashing, dependencies, incremental frames and table readers in applications using the MetaTables Python client. Excludes client-library implementation, API routes, scheduling and runtime administration."
4
+ ---
5
+
6
+ # MetaTables client time-index producers
7
+
8
+ ## Client scope
9
+
10
+ Apply this skill to applications that consume the installed `metatables` Python
11
+ client. It covers application-facing models and workflows. Client-library
12
+ implementation, this repository's development/release tooling, and API internals
13
+ have separate ownership.
14
+
15
+ In a copied skill, resolve the `docs/` and `examples/` paths below relative to
16
+ this skill's `references/` directory. The client CLI bundles the matching version's
17
+ guides and examples there, including their linked documents. In the MetaTables
18
+ source checkout, read the same paths from the repository root.
19
+
20
+ Read `docs/client/build-an-updater.md`,
21
+ `docs/concepts/time-index-tables-and-updates.md`, and the tested
22
+ `examples/updater.py`. Use `docs/client/read-existing-time-index-tables.md` and
23
+ `examples/reader.py` for consumers that only need existing output.
24
+
25
+ The storage contract is a `PlatformTimeIndexMetaTable` SQLAlchemy class. The
26
+ producer is a `TimeIndexTableUpdater`; the API record is `TimeIndexTableUpdate`.
27
+ Use the [table skill](../metatables-meta-tables/SKILL.md) for storage design and the
28
+ [migrations skill](../metatables-migrations/SKILL.md) for table evolution. API
29
+ route behavior is documented in `docs/api/time-index-and-updates.md` and supported
30
+ capabilities in `docs/reference/capabilities.md`.
31
+
32
+ ## Establish the contract
33
+
34
+ Infer dataset meaning, time grain, identity dimensions, output columns, upstream
35
+ choices, first-run/backfill bounds, and whether identity must be preserved from
36
+ the task and existing code. Clarify only unresolved choices that change the
37
+ published contract. Keep storage description, namespace, identifier, cadence,
38
+ columns, and FK/index metadata on the authoring model, not the updater config.
39
+ Use intention-rich table and column descriptions; see `examples/tables.py`.
40
+
41
+ Migrate and bind the output class before constructing the producer. Pass explicit
42
+ `config` and `output_table`; do not create/register tables inside `update()`.
43
+ The optional `hash_namespace` separates producer identities, **not output tables**.
44
+ A test namespace alone does not protect shared physical rows. Use a disposable
45
+ output binding or explicitly authorized row scope for mutation tests.
46
+
47
+ ## Configuration and dependencies
48
+
49
+ Use `TimeIndexTableUpdateConfig` with described `Field` values and realistic
50
+ examples where useful. Fields affect `update_hash` by default. Values that change
51
+ output, source selection, dependencies, or producer scope must stay hashed.
52
+ Keep implementation constants in `ClassVar` or runtime configuration. For a
53
+ strictly descriptive Pydantic field, the supported exclusion is
54
+ `json_schema_extra={"hash_excluded": True}`; do not invent alternate markers.
55
+
56
+ The client owns configuration version 2 serialization/validation. A configured
57
+ upstream authoring class hashes by its bound table UID and must already be bound.
58
+ `output_table` is a constructor contract, not an ordinary config field. Removed
59
+ configuration forms and `test_node` are unsupported; use explicit namespaces.
60
+
61
+ Declare a deterministic `dependencies()` mapping. Executable dependencies are
62
+ other updater instances; read-only dependencies are `TimeIndexTableRef` objects.
63
+ References contribute lineage and reads without executing a producer. Do not
64
+ construct a changing dependency graph inside `update()`.
65
+
66
+ ## Incremental output
67
+
68
+ Use `UpdateStatistics` to determine the next interval, including a first-run
69
+ fallback. Return rows matching the bound storage contract and avoid full-history
70
+ writes unless the task explicitly needs them.
71
+
72
+ Every non-empty frame must put `time_index` first and use exactly
73
+ `datetime64[ns, UTC]` for that index level. Construct it explicitly with
74
+ `pd.DatetimeIndex(..., dtype="datetime64[ns, UTC]")`; timestamp normalization alone
75
+ can retain microsecond precision. For a MultiIndex, declare all dimension levels
76
+ in storage-grain order and keep payload columns separate.
77
+
78
+ The time-index mixin creates the unique index for the complete observation grain.
79
+ Do not duplicate it manually. Additional indexes and foreign keys belong in
80
+ SQLAlchemy/Alembic metadata and should use application-prefixed physical names.
81
+ Changing a table contract requires a new migration, not an updater config field.
82
+
83
+ ## Tail repair
84
+
85
+ Use the documented `TimeIndexMetaTable.delete_after_date` workflow for updater
86
+ output rollback. The cutoff is inclusive. Supply `dimension_filters` to select
87
+ value sets or `index_coordinates` to select exact streams. A null cutoff requires
88
+ one of those scopes and deletes all rows only in that scope. An unscoped null
89
+ cutoff must fail. Do not replace this workflow with direct connections, SQL,
90
+ truncation, or private endpoints.
91
+
92
+ The API route is `/time-index-meta-tables/{uid}/delete-after-date/`; deployment
93
+ prefixes belong in `METATABLES_API_URL`. See `docs/client/query-and-mutate.md`.
94
+
95
+ ## Review and verification
96
+
97
+ Check hashing effects, deterministic dependencies, incremental bounds, configured
98
+ output identity, time dtype, dimension order, columns, and tail-delete scope.
99
+ Use the relevant updater tests and executable example tests. Report what was
100
+ actually exercised: pure frame logic, disposable storage, or a configured API.
101
+ Do not claim a scheduling/release workflow from producer tests. If a published
102
+ contract decision remains unknown, resolve that decision while continuing any
103
+ independent authorized work.
@@ -0,0 +1,10 @@
1
+ api_version: "2.3.0"
2
+ name: metatables-api
3
+ resources:
4
+ - key: metatables-api
5
+ kind: fastapi
6
+ spec:
7
+ source_path: api/metatables/main.py
8
+ automatic_deployment: true
9
+ min_scale: 1
10
+ revision_retention_count: 3
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MainSequence GmbH
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,9 @@
1
+ include alembic.ini mkdocs.yml uv.lock compose.database-tests.yml
2
+ include .mainsequence/workflows/metatables-api.yaml
3
+ include api/metatables/configuration.yaml
4
+ recursive-include docs *.md *.json *.py *.csv *.mako *.svg
5
+ recursive-include examples *.md *.json *.py *.csv *.mako
6
+ recursive-include scripts *.py
7
+ recursive-include tests *.py *.json Dockerfile Dockerfile.dockerignore
8
+ graft .agents/skills/client
9
+ global-exclude __pycache__ *.py[cod]
@@ -0,0 +1,137 @@
1
+ Metadata-Version: 2.4
2
+ Name: mainsequence-metatable
3
+ Version: 0.1.0
4
+ Summary: Main Sequence MetaTables Python client and standalone API
5
+ Author-email: Main Sequence GmbH <dev@main-sequence.io>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/mainsequence-projects/MetaTables
8
+ Project-URL: Issues, https://github.com/mainsequence-projects/MetaTables/issues
9
+ Project-URL: Documentation, https://potential-doodle-wn39mnm.pages.github.io/
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3 :: Only
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Operating System :: OS Independent
14
+ Requires-Python: >=3.13
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: mainsequence[server]<9,>=8.1.25
18
+ Requires-Dist: alembic<2,>=1.18
19
+ Requires-Dist: cachetools
20
+ Requires-Dist: cryptography<51,>=46
21
+ Requires-Dist: fastapi<1,>=0.110
22
+ Requires-Dist: httpx<1,>=0.28
23
+ Requires-Dist: keyring<26,>=25
24
+ Requires-Dist: numpy
25
+ Requires-Dist: opentelemetry-api
26
+ Requires-Dist: opentelemetry-exporter-otlp
27
+ Requires-Dist: opentelemetry-sdk
28
+ Requires-Dist: pandas
29
+ Requires-Dist: psutil
30
+ Requires-Dist: psycopg2-binary<3,>=2.9
31
+ Requires-Dist: pyodbc<6,>=5
32
+ Requires-Dist: pydantic<3,>=2.11
33
+ Requires-Dist: pyyaml
34
+ Requires-Dist: requests>=2.33.0
35
+ Requires-Dist: sqlalchemy<3,>=2
36
+ Requires-Dist: psycopg[binary]<4,>=3.2
37
+ Requires-Dist: structlog
38
+ Requires-Dist: tqdm<5,>=4.66
39
+ Requires-Dist: typer<1,>=0.12
40
+ Requires-Dist: urllib3>=2.7.0
41
+ Requires-Dist: uvicorn==0.52.4
42
+ Provides-Extra: dev
43
+ Requires-Dist: pytest<10,>=8; extra == "dev"
44
+ Requires-Dist: ruff>=0.14; extra == "dev"
45
+ Requires-Dist: build<2,>=1; extra == "dev"
46
+ Requires-Dist: packaging>=24.2; extra == "dev"
47
+ Requires-Dist: twine<7,>=6; extra == "dev"
48
+ Provides-Extra: docs
49
+ Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
50
+ Provides-Extra: mysql
51
+ Requires-Dist: PyMySQL[rsa]<1.2,>=1.1.1; extra == "mysql"
52
+ Provides-Extra: mssql
53
+ Dynamic: license-file
54
+
55
+ <p align="center">
56
+ <img src="docs/assets/branding/metatables.svg" alt="MetaTables logo" width="80" height="80" />
57
+ </p>
58
+ <p align="center">
59
+ <picture>
60
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/branding/mainsequence-dark.png" />
61
+ <source media="(prefers-color-scheme: light)" srcset="docs/assets/branding/mainsequence-light.png" />
62
+ <img src="docs/assets/branding/mainsequence-light.png" alt="Main Sequence logo" width="280" />
63
+ </picture>
64
+ </p>
65
+
66
+ # MetaTables
67
+
68
+ MetaTables is a Python client and API for describing, registering, querying, and
69
+ updating database tables through a governed catalog.
70
+
71
+ Its PyPI distribution is `mainsequence-metatable`; imports and the command are
72
+ named `metatables`. See [publishing](docs/contributing/releasing.md) for the
73
+ release process and the current published SDK prerequisite.
74
+
75
+ The **Python client** provides SQLAlchemy table definitions, application-table
76
+ migrations, query objects, time-index readers and update processes,
77
+ and the `metatables` command. The **MetaTables API** stores table identities,
78
+ contracts, permissions, and update history, and executes authorized operations on
79
+ physical databases.
80
+
81
+ A catalog record describes a table; the table's rows live in its DataSource.
82
+ The Main Sequence SDK supplies platform authentication, identity, repository
83
+ context, and platform Secrets. MetaTables owns its table behavior and storage
84
+ adapters. Local development runs the same API with one SQLite database for system metadata and table rows. Initialize it explicitly
85
+ through Settings; startup never runs Alembic.
86
+
87
+ ## Start here
88
+
89
+ - [Install and connect](docs/client/installation-and-connection.md), including the current local SDK prerequisite.
90
+ - [Understand the concepts](docs/concepts/architecture.md) and [identity and scope](docs/concepts/identity-and-scope.md).
91
+ - [Understand the security model](docs/security/index.md): administration, Reader/Writer table ownership, sharing, and implementation status.
92
+ - [Follow the market-data tutorial](docs/client/tutorial.md) with its complete examples folder.
93
+ - [Define and migrate managed tables](docs/client/define-and-migrate-tables.md).
94
+ - [Register existing tables](docs/client/register-existing-tables.md).
95
+ - [Manage DataSources](docs/concepts/data-sources.md): PostgreSQL, MySQL and MSSQL configuration, driver setup, examples and current operation limits.
96
+ - [Build an updater](docs/client/build-an-updater.md) or [read an existing time-index table](docs/client/read-existing-time-index-tables.md).
97
+ - [Run the API locally](docs/operations/local-runtime.md) or [operate a hosted API](docs/operations/hosted-runtime.md).
98
+
99
+ The [documentation index](docs/index.md) separates client, API, operations, and
100
+ contributor guides. The [capability reference](docs/reference/capabilities.md)
101
+ records implemented and unavailable operations, including inherited methods and
102
+ CLI commands. Runnable guide assets live in [examples](examples/README.md).
103
+
104
+ ## Client skills
105
+
106
+ Copy the installed client's skills into a consuming application explicitly:
107
+
108
+ ```bash
109
+ metatables copy-metatables-skills --path /path/to/application
110
+ ```
111
+
112
+ The command uses the Main Sequence SDK helper, writes to
113
+ `.agents/skills/metatables/`, and records the client version. It works without
114
+ login or an API. Use `--dry-run` to preview the copy, or put global `--json` before
115
+ the command for structured output. See [installation](docs/client/installation-and-connection.md#copy-client-skills-into-an-application)
116
+ for refresh behavior and the bundled references.
117
+
118
+ ## Development
119
+
120
+ Python 3.13 or newer is required. After installing the compatible local SDK:
121
+
122
+ ```bash
123
+ python -m pip install -e '.[dev,docs]'
124
+ python -m metatables.sdk_compat
125
+ python -m pytest -q
126
+ python -m scripts.check_project
127
+ mkdocs build --strict
128
+ ```
129
+
130
+ Physical PostgreSQL checks use explicitly configured disposable databases;
131
+ see [testing](docs/contributing/testing.md). No separate frontend is needed to
132
+ use the Python client or run the API.
133
+
134
+ ## License
135
+
136
+ MetaTables is licensed under the MIT License. See [LICENSE](LICENSE) for the
137
+ complete terms.
@@ -0,0 +1,83 @@
1
+ <p align="center">
2
+ <img src="docs/assets/branding/metatables.svg" alt="MetaTables logo" width="80" height="80" />
3
+ </p>
4
+ <p align="center">
5
+ <picture>
6
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/branding/mainsequence-dark.png" />
7
+ <source media="(prefers-color-scheme: light)" srcset="docs/assets/branding/mainsequence-light.png" />
8
+ <img src="docs/assets/branding/mainsequence-light.png" alt="Main Sequence logo" width="280" />
9
+ </picture>
10
+ </p>
11
+
12
+ # MetaTables
13
+
14
+ MetaTables is a Python client and API for describing, registering, querying, and
15
+ updating database tables through a governed catalog.
16
+
17
+ Its PyPI distribution is `mainsequence-metatable`; imports and the command are
18
+ named `metatables`. See [publishing](docs/contributing/releasing.md) for the
19
+ release process and the current published SDK prerequisite.
20
+
21
+ The **Python client** provides SQLAlchemy table definitions, application-table
22
+ migrations, query objects, time-index readers and update processes,
23
+ and the `metatables` command. The **MetaTables API** stores table identities,
24
+ contracts, permissions, and update history, and executes authorized operations on
25
+ physical databases.
26
+
27
+ A catalog record describes a table; the table's rows live in its DataSource.
28
+ The Main Sequence SDK supplies platform authentication, identity, repository
29
+ context, and platform Secrets. MetaTables owns its table behavior and storage
30
+ adapters. Local development runs the same API with one SQLite database for system metadata and table rows. Initialize it explicitly
31
+ through Settings; startup never runs Alembic.
32
+
33
+ ## Start here
34
+
35
+ - [Install and connect](docs/client/installation-and-connection.md), including the current local SDK prerequisite.
36
+ - [Understand the concepts](docs/concepts/architecture.md) and [identity and scope](docs/concepts/identity-and-scope.md).
37
+ - [Understand the security model](docs/security/index.md): administration, Reader/Writer table ownership, sharing, and implementation status.
38
+ - [Follow the market-data tutorial](docs/client/tutorial.md) with its complete examples folder.
39
+ - [Define and migrate managed tables](docs/client/define-and-migrate-tables.md).
40
+ - [Register existing tables](docs/client/register-existing-tables.md).
41
+ - [Manage DataSources](docs/concepts/data-sources.md): PostgreSQL, MySQL and MSSQL configuration, driver setup, examples and current operation limits.
42
+ - [Build an updater](docs/client/build-an-updater.md) or [read an existing time-index table](docs/client/read-existing-time-index-tables.md).
43
+ - [Run the API locally](docs/operations/local-runtime.md) or [operate a hosted API](docs/operations/hosted-runtime.md).
44
+
45
+ The [documentation index](docs/index.md) separates client, API, operations, and
46
+ contributor guides. The [capability reference](docs/reference/capabilities.md)
47
+ records implemented and unavailable operations, including inherited methods and
48
+ CLI commands. Runnable guide assets live in [examples](examples/README.md).
49
+
50
+ ## Client skills
51
+
52
+ Copy the installed client's skills into a consuming application explicitly:
53
+
54
+ ```bash
55
+ metatables copy-metatables-skills --path /path/to/application
56
+ ```
57
+
58
+ The command uses the Main Sequence SDK helper, writes to
59
+ `.agents/skills/metatables/`, and records the client version. It works without
60
+ login or an API. Use `--dry-run` to preview the copy, or put global `--json` before
61
+ the command for structured output. See [installation](docs/client/installation-and-connection.md#copy-client-skills-into-an-application)
62
+ for refresh behavior and the bundled references.
63
+
64
+ ## Development
65
+
66
+ Python 3.13 or newer is required. After installing the compatible local SDK:
67
+
68
+ ```bash
69
+ python -m pip install -e '.[dev,docs]'
70
+ python -m metatables.sdk_compat
71
+ python -m pytest -q
72
+ python -m scripts.check_project
73
+ mkdocs build --strict
74
+ ```
75
+
76
+ Physical PostgreSQL checks use explicitly configured disposable databases;
77
+ see [testing](docs/contributing/testing.md). No separate frontend is needed to
78
+ use the Python client or run the API.
79
+
80
+ ## License
81
+
82
+ MetaTables is licensed under the MIT License. See [LICENSE](LICENSE) for the
83
+ complete terms.
@@ -0,0 +1,3 @@
1
+ [alembic]
2
+ script_location = api/backend/migrations
3
+
@@ -0,0 +1,3 @@
1
+ from metatables.sdk_compat import require_sdk_capabilities
2
+
3
+ require_sdk_capabilities(server=True)
File without changes
@@ -0,0 +1 @@
1
+ """Inbound FastAPI caller authentication."""