turbine-data 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 (1943) hide show
  1. turbine_data-0.1.0/.claude/hooks/format-after-edit.sh +11 -0
  2. turbine_data-0.1.0/.claude/hooks/pre-commit-lint.sh +47 -0
  3. turbine_data-0.1.0/.claude/settings.json +26 -0
  4. turbine_data-0.1.0/.claude/skills/code-simplification/SKILL.md +304 -0
  5. turbine_data-0.1.0/.claude/skills/docs-todo-next/SKILL.md +153 -0
  6. turbine_data-0.1.0/.git +1 -0
  7. turbine_data-0.1.0/.gitignore +69 -0
  8. turbine_data-0.1.0/.gitlab-ci.yml +36 -0
  9. turbine_data-0.1.0/.pi/skills/docs-todo-next/SKILL.md +153 -0
  10. turbine_data-0.1.0/.pre-commit-config.yaml +29 -0
  11. turbine_data-0.1.0/.streamlit/config.toml +7 -0
  12. turbine_data-0.1.0/CHANGELOG.md +311 -0
  13. turbine_data-0.1.0/CLAUDE.md +145 -0
  14. turbine_data-0.1.0/CONTEXT.md +716 -0
  15. turbine_data-0.1.0/PKG-INFO +214 -0
  16. turbine_data-0.1.0/README.md +71 -0
  17. turbine_data-0.1.0/ai-docs/adr/0001-sla-time-column-not-latency.md +71 -0
  18. turbine_data-0.1.0/ai-docs/adr/0002-auto-bump-contract-version.md +86 -0
  19. turbine_data-0.1.0/ai-docs/adr/0003-insert-snippet-port-method.md +99 -0
  20. turbine_data-0.1.0/ai-docs/adr/0004-in-editor-docs-bar.md +96 -0
  21. turbine_data-0.1.0/ai-docs/adr/0005-threshold-family-taxonomy.md +191 -0
  22. turbine_data-0.1.0/ai-docs/adr/0006-run-age-no-stale-outcome.md +64 -0
  23. turbine_data-0.1.0/ai-docs/adr/0007-metadata-store-local-fallback.md +87 -0
  24. turbine_data-0.1.0/ai-docs/adr/0008-multi-dataset-api-url-shape.md +168 -0
  25. turbine_data-0.1.0/ai-docs/adr/0009-project-initialization-command-and-layout.md +12 -0
  26. turbine_data-0.1.0/ai-docs/adr/0010-custom-check-mode-authoring.md +11 -0
  27. turbine_data-0.1.0/ai-docs/adr/0010-soda-parity-fields-are-turbine-semantics.md +3 -0
  28. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-3.md +297 -0
  29. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-6.md +440 -0
  30. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-7.md +432 -0
  31. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture.md +520 -0
  32. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/.gitignore +1 -0
  33. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/architecture.html +3532 -0
  34. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/class.mmd +82 -0
  35. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/flow.mmd +28 -0
  36. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/sequence.mmd +33 -0
  37. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/class.mmd +80 -0
  38. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/flow.mmd +28 -0
  39. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/sequence.mmd +35 -0
  40. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/class.mmd +47 -0
  41. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/flow.mmd +20 -0
  42. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/sequence.mmd +28 -0
  43. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/class.mmd +74 -0
  44. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/flow.mmd +26 -0
  45. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/sequence.mmd +34 -0
  46. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/class.mmd +72 -0
  47. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/flow.mmd +28 -0
  48. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/sequence.mmd +42 -0
  49. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/001-threshold-family-taxonomy-foundation.md +45 -0
  50. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/002-lsp-surfaces-codelens-hover-code-action.md +71 -0
  51. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/003-picker-shell-failures-allowed-apply-fix.md +109 -0
  52. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/004-floor-family-renderer.md +68 -0
  53. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/005-range-family-renderer.md +46 -0
  54. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/006-lag-family-sla-latency-reading.md +75 -0
  55. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/007-anomaly-family-anomalybandconfig-wiring.md +86 -0
  56. turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/prd.md +421 -0
  57. turbine_data-0.1.0/ai-docs/plans/2026-05-03-custom-check-modes/prd.md +195 -0
  58. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/architecture-004-run-quality-cli-output.md +131 -0
  59. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/architecture.md +133 -0
  60. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/.gitignore +1 -0
  61. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-class.mmd +19 -0
  62. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-flow.mmd +14 -0
  63. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-sequence.mmd +16 -0
  64. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-class.mmd +38 -0
  65. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-flow.mmd +25 -0
  66. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-sequence.mmd +21 -0
  67. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-class.mmd +57 -0
  68. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-flow.mmd +30 -0
  69. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-sequence.mmd +14 -0
  70. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/architecture.html +3444 -0
  71. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/class.mmd +31 -0
  72. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/flow.mmd +10 -0
  73. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/sequence.mmd +14 -0
  74. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/001-build-canonical-turbine-init.md +39 -0
  75. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/002-ship-snowflake-starter-output.md +38 -0
  76. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/003-finish-public-command-surface.md +32 -0
  77. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/004-polish-run-quality-cli-output.md +23 -0
  78. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/005-polish-core-command-human-output.md +24 -0
  79. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/006-update-first-run-cli-docs.md +41 -0
  80. turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/prd.md +137 -0
  81. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/001-persistence-read-side.md +66 -0
  82. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/002-quality-specs-schema-grouping.md +46 -0
  83. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/003-workspace-tree-expansion-behavior.md +63 -0
  84. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/004-focus-based-refresh.md +51 -0
  85. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/005-metadata-store-boundary.md +74 -0
  86. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/006-spec-codelens-to-code-action.md +65 -0
  87. turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/prd.md +434 -0
  88. turbine_data-0.1.0/ai-docs/plans/2026-05-03-reconciliation-checks/prd.md +464 -0
  89. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/architecture.md +113 -0
  90. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/.gitignore +1 -0
  91. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/architecture.html +3505 -0
  92. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/class.mmd +51 -0
  93. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/flow.mmd +37 -0
  94. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/sequence.mmd +28 -0
  95. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/001-python-creation-commands.md +44 -0
  96. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/002-vscode-sidebar-wiring.md +32 -0
  97. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/003-contract-from-datasource-unification.md +40 -0
  98. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/index.md +22 -0
  99. turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/prd.md +85 -0
  100. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/001-percent-metrics-end-to-end.md +35 -0
  101. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/002-missing-regex-end-to-end.md +28 -0
  102. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/003-column-expression-end-to-end.md +34 -0
  103. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/004-unsupported-custom-engines-are-errors.md +26 -0
  104. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/005-check-filter-end-to-end.md +35 -0
  105. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/006-check-time-variable-substitution.md +34 -0
  106. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/007-odcs-sql-query-placeholders.md +28 -0
  107. turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/prd.md +217 -0
  108. turbine_data-0.1.0/ai-docs/plans/column-streaming/architecture.md +72 -0
  109. turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/.gitignore +1 -0
  110. turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/architecture.html +3477 -0
  111. turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/class.mmd +47 -0
  112. turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/flow.mmd +19 -0
  113. turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/sequence.mmd +22 -0
  114. turbine_data-0.1.0/catalog-info.yaml +20 -0
  115. turbine_data-0.1.0/demo/api/__init__.py +0 -0
  116. turbine_data-0.1.0/demo/api/models/READINGS.py +40 -0
  117. turbine_data-0.1.0/demo/api/models/__init__.py +11 -0
  118. turbine_data-0.1.0/demo/api/models/customer.py +37 -0
  119. turbine_data-0.1.0/demo/api/models/daily_aggregate.py +37 -0
  120. turbine_data-0.1.0/demo/api/models/does_not_exist.py +17 -0
  121. turbine_data-0.1.0/demo/api/models/energy_reading.py +42 -0
  122. turbine_data-0.1.0/demo/api/models/example.py +18 -0
  123. turbine_data-0.1.0/demo/api/models/inventory.py +40 -0
  124. turbine_data-0.1.0/demo/api/models/meter.py +36 -0
  125. turbine_data-0.1.0/demo/api/models/order.py +37 -0
  126. turbine_data-0.1.0/demo/api/models/payment.py +40 -0
  127. turbine_data-0.1.0/demo/api/models/product.py +37 -0
  128. turbine_data-0.1.0/demo/api/models/reading.py +43 -0
  129. turbine_data-0.1.0/demo/api/models/sensor.py +32 -0
  130. turbine_data-0.1.0/demo/api/routers/READINGS_router.py +32 -0
  131. turbine_data-0.1.0/demo/api/routers/__init__.py +25 -0
  132. turbine_data-0.1.0/demo/api/routers/customer_router.py +32 -0
  133. turbine_data-0.1.0/demo/api/routers/daily_aggregate_router.py +38 -0
  134. turbine_data-0.1.0/demo/api/routers/does_not_exist_router.py +27 -0
  135. turbine_data-0.1.0/demo/api/routers/energy_reading_router.py +36 -0
  136. turbine_data-0.1.0/demo/api/routers/example_router.py +30 -0
  137. turbine_data-0.1.0/demo/api/routers/inventory_router.py +32 -0
  138. turbine_data-0.1.0/demo/api/routers/meter_router.py +30 -0
  139. turbine_data-0.1.0/demo/api/routers/order_router.py +30 -0
  140. turbine_data-0.1.0/demo/api/routers/payment_router.py +30 -0
  141. turbine_data-0.1.0/demo/api/routers/product_router.py +30 -0
  142. turbine_data-0.1.0/demo/api/routers/reading_router.py +30 -0
  143. turbine_data-0.1.0/demo/api/routers/sensor_router.py +30 -0
  144. turbine_data-0.1.0/demo/checks/amount_range.sql +4 -0
  145. turbine_data-0.1.0/demo/checks/broken_check.py +9 -0
  146. turbine_data-0.1.0/demo/checks/check_range.sql +5 -0
  147. turbine_data-0.1.0/demo/checks/e2e_null_check.py +6 -0
  148. turbine_data-0.1.0/demo/checks/e2e_null_check_sf.py +6 -0
  149. turbine_data-0.1.0/demo/checks/freshness.sql +5 -0
  150. turbine_data-0.1.0/demo/checks/invalid_status.sql +4 -0
  151. turbine_data-0.1.0/demo/checks/invalid_status_sf.sql +4 -0
  152. turbine_data-0.1.0/demo/checks/negative_amount.sql +4 -0
  153. turbine_data-0.1.0/demo/checks/negative_amount_sf.sql +4 -0
  154. turbine_data-0.1.0/demo/checks/negative_energy.sql +4 -0
  155. turbine_data-0.1.0/demo/checks/negative_energy_sf.sql +4 -0
  156. turbine_data-0.1.0/demo/checks/orphaned_meters.sql +5 -0
  157. turbine_data-0.1.0/demo/checks/orphaned_meters_sf.sql +5 -0
  158. turbine_data-0.1.0/demo/checks/polars_null_check.py +8 -0
  159. turbine_data-0.1.0/demo/checks/positive_energy.sql +4 -0
  160. turbine_data-0.1.0/demo/checks/sql/invalid_status.sql +4 -0
  161. turbine_data-0.1.0/demo/checks/sql/negative_amount.sql +4 -0
  162. turbine_data-0.1.0/demo/checks/sql/positive_energy.sql +4 -0
  163. turbine_data-0.1.0/demo/checks/sql/voltage_range.sql +5 -0
  164. turbine_data-0.1.0/demo/checks/status_email_consistency.sql +6 -0
  165. turbine_data-0.1.0/demo/checks/test-2.sql +5 -0
  166. turbine_data-0.1.0/demo/checks/test-name.py +8 -0
  167. turbine_data-0.1.0/demo/checks/validate_amounts.py +8 -0
  168. turbine_data-0.1.0/demo/checks/validate_order_consistency.py +24 -0
  169. turbine_data-0.1.0/demo/checks/validate_orders.py +12 -0
  170. turbine_data-0.1.0/demo/checks/validate_totals.py +8 -0
  171. turbine_data-0.1.0/demo/checks/voltage_range.sql +5 -0
  172. turbine_data-0.1.0/demo/checks/voltage_range_sf.sql +5 -0
  173. turbine_data-0.1.0/demo/contracts/allsoda-test.yml +35 -0
  174. turbine_data-0.1.0/demo/contracts/broken-bad-yaml.yml +14 -0
  175. turbine_data-0.1.0/demo/contracts/broken-missing-schema.yml +7 -0
  176. turbine_data-0.1.0/demo/contracts/crm.yml +50 -0
  177. turbine_data-0.1.0/demo/contracts/customer-base.yml +28 -0
  178. turbine_data-0.1.0/demo/contracts/drift-test.yml +22 -0
  179. turbine_data-0.1.0/demo/contracts/e2e-dsl-test-sf.yml +33 -0
  180. turbine_data-0.1.0/demo/contracts/e2e-dsl-test.yml +33 -0
  181. turbine_data-0.1.0/demo/contracts/e2e-flagging.yml +33 -0
  182. turbine_data-0.1.0/demo/contracts/ecommerce.yml +53 -0
  183. turbine_data-0.1.0/demo/contracts/energy-clean.yml +33 -0
  184. turbine_data-0.1.0/demo/contracts/energy-prices.yml +35 -0
  185. turbine_data-0.1.0/demo/contracts/energy-readings.yml +33 -0
  186. turbine_data-0.1.0/demo/contracts/example-contract.yml +15 -0
  187. turbine_data-0.1.0/demo/contracts/inc-test-sf.yml +30 -0
  188. turbine_data-0.1.0/demo/contracts/inc-test.yml +30 -0
  189. turbine_data-0.1.0/demo/contracts/meter-readings.yml +67 -0
  190. turbine_data-0.1.0/demo/contracts/multi-dup-test-sf.yml +42 -0
  191. turbine_data-0.1.0/demo/contracts/multi-dup-test.yml +42 -0
  192. turbine_data-0.1.0/demo/contracts/no-drift.yml +22 -0
  193. turbine_data-0.1.0/demo/contracts/no-validation-issues.yml +22 -0
  194. turbine_data-0.1.0/demo/contracts/nonexistent-table.yml +11 -0
  195. turbine_data-0.1.0/demo/contracts/odcs-sql-test.yml +71 -0
  196. turbine_data-0.1.0/demo/contracts/py-test.yml +32 -0
  197. turbine_data-0.1.0/demo/contracts/sf-energy-readings.yml +40 -0
  198. turbine_data-0.1.0/demo/contracts/soda-test.yml +32 -0
  199. turbine_data-0.1.0/demo/contracts/validate-test.yml +22 -0
  200. turbine_data-0.1.0/demo/dashboard/__init__.py +0 -0
  201. turbine_data-0.1.0/demo/dashboard/components/__init__.py +0 -0
  202. turbine_data-0.1.0/demo/dashboard/logic/__init__.py +0 -0
  203. turbine_data-0.1.0/demo/dashboard/pages/__init__.py +0 -0
  204. turbine_data-0.1.0/demo/dashboard/pages/alerts.py +71 -0
  205. turbine_data-0.1.0/demo/dashboard/pages/contracts.py +74 -0
  206. turbine_data-0.1.0/demo/dashboard/pages/flagged_rows.py +30 -0
  207. turbine_data-0.1.0/demo/dashboard/pages/overview.py +65 -0
  208. turbine_data-0.1.0/demo/dashboard/pages/quality_matrix.py +72 -0
  209. turbine_data-0.1.0/demo/dashboard/resources/__init__.py +0 -0
  210. turbine_data-0.1.0/demo/datasources/broken-missing-env.yml +8 -0
  211. turbine_data-0.1.0/demo/datasources/broken-unknown-type.yml +6 -0
  212. turbine_data-0.1.0/demo/datasources/default.yml +8 -0
  213. turbine_data-0.1.0/demo/datasources/local.yml +4 -0
  214. turbine_data-0.1.0/demo/datasources/postgres.yml +8 -0
  215. turbine_data-0.1.0/demo/datasources/snowflake-test.yml +10 -0
  216. turbine_data-0.1.0/demo/datasources/snowflake.yml +9 -0
  217. turbine_data-0.1.0/demo/datasources/test-demo.yml +9 -0
  218. turbine_data-0.1.0/demo/datasources/warehouse.yml +8 -0
  219. turbine_data-0.1.0/demo/quality/allsoda-test.yml +37 -0
  220. turbine_data-0.1.0/demo/quality/crm-customers-checks.yml +37 -0
  221. turbine_data-0.1.0/demo/quality/crm-products-checks.yml +47 -0
  222. turbine_data-0.1.0/demo/quality/e2e-aggregates-sf.yml +12 -0
  223. turbine_data-0.1.0/demo/quality/e2e-aggregates.yml +12 -0
  224. turbine_data-0.1.0/demo/quality/e2e-duplicate-sf.yml +11 -0
  225. turbine_data-0.1.0/demo/quality/e2e-duplicate.yml +10 -0
  226. turbine_data-0.1.0/demo/quality/e2e-failed-rows-sf.yml +11 -0
  227. turbine_data-0.1.0/demo/quality/e2e-failed-rows.yml +11 -0
  228. turbine_data-0.1.0/demo/quality/e2e-flagging-test.yml +29 -0
  229. turbine_data-0.1.0/demo/quality/e2e-flatline-sf.yml +12 -0
  230. turbine_data-0.1.0/demo/quality/e2e-flatline.yml +12 -0
  231. turbine_data-0.1.0/demo/quality/e2e-freshness-sf.yml +12 -0
  232. turbine_data-0.1.0/demo/quality/e2e-freshness.yml +12 -0
  233. turbine_data-0.1.0/demo/quality/e2e-inc-missing-sf.yml +14 -0
  234. turbine_data-0.1.0/demo/quality/e2e-inc-missing.yml +14 -0
  235. turbine_data-0.1.0/demo/quality/e2e-missing-sf.yml +11 -0
  236. turbine_data-0.1.0/demo/quality/e2e-missing.yml +11 -0
  237. turbine_data-0.1.0/demo/quality/e2e-multi-check-sf.yml +25 -0
  238. turbine_data-0.1.0/demo/quality/e2e-multi-check.yml +27 -0
  239. turbine_data-0.1.0/demo/quality/e2e-multi-dup-sf.yml +11 -0
  240. turbine_data-0.1.0/demo/quality/e2e-multi-dup.yml +11 -0
  241. turbine_data-0.1.0/demo/quality/e2e-pct-change-sf.yml +14 -0
  242. turbine_data-0.1.0/demo/quality/e2e-pct-change.yml +14 -0
  243. turbine_data-0.1.0/demo/quality/e2e-polars-test.yml +10 -0
  244. turbine_data-0.1.0/demo/quality/e2e-py-bad-function.yml +12 -0
  245. turbine_data-0.1.0/demo/quality/e2e-py-runtime-error.yml +12 -0
  246. turbine_data-0.1.0/demo/quality/e2e-py-walkthrough.yml +22 -0
  247. turbine_data-0.1.0/demo/quality/e2e-python-sf.yml +11 -0
  248. turbine_data-0.1.0/demo/quality/e2e-python.yml +10 -0
  249. turbine_data-0.1.0/demo/quality/e2e-reference-sf.yml +14 -0
  250. turbine_data-0.1.0/demo/quality/e2e-reference.yml +14 -0
  251. turbine_data-0.1.0/demo/quality/e2e-rowcount-sf.yml +10 -0
  252. turbine_data-0.1.0/demo/quality/e2e-rowcount.yml +10 -0
  253. turbine_data-0.1.0/demo/quality/e2e-spike-sf.yml +14 -0
  254. turbine_data-0.1.0/demo/quality/e2e-spike-strict-sf.yml +14 -0
  255. turbine_data-0.1.0/demo/quality/e2e-spike-tolerant-sf.yml +14 -0
  256. turbine_data-0.1.0/demo/quality/e2e-spike.yml +14 -0
  257. turbine_data-0.1.0/demo/quality/e2e-sql-file-sf.yml +11 -0
  258. turbine_data-0.1.0/demo/quality/e2e-sql-file.yml +10 -0
  259. turbine_data-0.1.0/demo/quality/e2e-sql-inline-sf.yml +12 -0
  260. turbine_data-0.1.0/demo/quality/e2e-sql-inline.yml +12 -0
  261. turbine_data-0.1.0/demo/quality/e2e-sql-template-duckdb.yml +36 -0
  262. turbine_data-0.1.0/demo/quality/e2e-sql-template-test-sf.yml +26 -0
  263. turbine_data-0.1.0/demo/quality/e2e-sql-template-test.yml +23 -0
  264. turbine_data-0.1.0/demo/quality/e2e-sql-threshold.yml +28 -0
  265. turbine_data-0.1.0/demo/quality/e2e-typed-python-check.yml +22 -0
  266. turbine_data-0.1.0/demo/quality/e2e-values-in-sf.yml +12 -0
  267. turbine_data-0.1.0/demo/quality/e2e-values-in.yml +12 -0
  268. turbine_data-0.1.0/demo/quality/e2e-zscore-sf.yml +13 -0
  269. turbine_data-0.1.0/demo/quality/e2e-zscore-strict-sf.yml +14 -0
  270. turbine_data-0.1.0/demo/quality/e2e-zscore-tolerant-sf.yml +14 -0
  271. turbine_data-0.1.0/demo/quality/e2e-zscore.yml +13 -0
  272. turbine_data-0.1.0/demo/quality/ecommerce-orders-checks.yml +47 -0
  273. turbine_data-0.1.0/demo/quality/ecommerce-payments-checks.yml +55 -0
  274. turbine_data-0.1.0/demo/quality/energy-sql-checks.yml +24 -0
  275. turbine_data-0.1.0/demo/quality/energy-window-checks.yml +25 -0
  276. turbine_data-0.1.0/demo/quality/inc-test.yml +11 -0
  277. turbine_data-0.1.0/demo/quality/orders-quality.yml +24 -0
  278. turbine_data-0.1.0/demo/quality/py-test.yml +10 -0
  279. turbine_data-0.1.0/demo/quality/sf-e2e-flagging.yml +20 -0
  280. turbine_data-0.1.0/demo/quality/sf-e2e-typed-python-check.yml +20 -0
  281. turbine_data-0.1.0/demo/quality/sf-energy-quality.yml +55 -0
  282. turbine_data-0.1.0/demo/quality/soda-test.yml +20 -0
  283. turbine_data-0.1.0/demo/seed_snowflake.py +205 -0
  284. turbine_data-0.1.0/demo/setup_dashboard_demo.py +271 -0
  285. turbine_data-0.1.0/demo/setup_demo.py +102 -0
  286. turbine_data-0.1.0/demo/test-scaffold/contracts/example.yml +18 -0
  287. turbine_data-0.1.0/demo/test-scaffold/datasources/local.yml +4 -0
  288. turbine_data-0.1.0/demo/tune_check_streamlit.py +868 -0
  289. turbine_data-0.1.0/demos/component_showcase.py +242 -0
  290. turbine_data-0.1.0/docs/dev/docs/architecture/adapters.md +56 -0
  291. turbine_data-0.1.0/docs/dev/docs/architecture/application.md +11 -0
  292. turbine_data-0.1.0/docs/dev/docs/architecture/check-pipeline-v2.drawio +255 -0
  293. turbine_data-0.1.0/docs/dev/docs/architecture/check-pipeline.drawio +278 -0
  294. turbine_data-0.1.0/docs/dev/docs/architecture/core.md +92 -0
  295. turbine_data-0.1.0/docs/dev/docs/architecture/deepening-candidates.md +321 -0
  296. turbine_data-0.1.0/docs/dev/docs/architecture/hex-diagram.svg +60 -0
  297. turbine_data-0.1.0/docs/dev/docs/architecture/infra.md +52 -0
  298. turbine_data-0.1.0/docs/dev/docs/architecture/overview.md +160 -0
  299. turbine_data-0.1.0/docs/dev/docs/architecture/presentation.md +49 -0
  300. turbine_data-0.1.0/docs/dev/docs/assets/favicon.svg +3 -0
  301. turbine_data-0.1.0/docs/dev/docs/assets/turbine-logo.svg +3 -0
  302. turbine_data-0.1.0/docs/dev/docs/contributing/adding-a-bounded-context.md +92 -0
  303. turbine_data-0.1.0/docs/dev/docs/contributing/conventions.md +87 -0
  304. turbine_data-0.1.0/docs/dev/docs/contributing/releasing.md +48 -0
  305. turbine_data-0.1.0/docs/dev/docs/decisions/001-hexagonal-architecture.md +17 -0
  306. turbine_data-0.1.0/docs/dev/docs/decisions/002-domain-events-over-hooks.md +17 -0
  307. turbine_data-0.1.0/docs/dev/docs/decisions/003-why-turbine-wraps-soda.md +30 -0
  308. turbine_data-0.1.0/docs/dev/docs/decisions/004-contract-ir.md +34 -0
  309. turbine_data-0.1.0/docs/dev/docs/glossary.md +30 -0
  310. turbine_data-0.1.0/docs/dev/docs/index.md +36 -0
  311. turbine_data-0.1.0/docs/dev/docs/patterns/diagnostics.md +148 -0
  312. turbine_data-0.1.0/docs/dev/docs/patterns/ports-and-adapters.md +107 -0
  313. turbine_data-0.1.0/docs/dev/docs/stylesheets/extra.css +225 -0
  314. turbine_data-0.1.0/docs/dev/docs/walkthroughs/how-contract-parsing-works.md +128 -0
  315. turbine_data-0.1.0/docs/dev/mkdocs.yml +29 -0
  316. turbine_data-0.1.0/docs/mkdocs.base.yml +77 -0
  317. turbine_data-0.1.0/docs/user/docs/assets/favicon.svg +3 -0
  318. turbine_data-0.1.0/docs/user/docs/assets/hero-pipeline.svg +68 -0
  319. turbine_data-0.1.0/docs/user/docs/assets/turbine-check.png +0 -0
  320. turbine_data-0.1.0/docs/user/docs/assets/turbine-logo.svg +3 -0
  321. turbine_data-0.1.0/docs/user/docs/changelog/.authors.yml +5 -0
  322. turbine_data-0.1.0/docs/user/docs/changelog/index.md +7 -0
  323. turbine_data-0.1.0/docs/user/docs/concepts/check-pipeline.md +196 -0
  324. turbine_data-0.1.0/docs/user/docs/concepts/codegen.md +199 -0
  325. turbine_data-0.1.0/docs/user/docs/concepts/contracts.md +259 -0
  326. turbine_data-0.1.0/docs/user/docs/concepts/incremental.md +203 -0
  327. turbine_data-0.1.0/docs/user/docs/concepts/index.md +92 -0
  328. turbine_data-0.1.0/docs/user/docs/concepts/lsp.md +155 -0
  329. turbine_data-0.1.0/docs/user/docs/concepts/metadata-schema.md +253 -0
  330. turbine_data-0.1.0/docs/user/docs/concepts/quality-dimensions.md +95 -0
  331. turbine_data-0.1.0/docs/user/docs/concepts/qualityspec-vs-contract.md +123 -0
  332. turbine_data-0.1.0/docs/user/docs/concepts/row-flagging.md +166 -0
  333. turbine_data-0.1.0/docs/user/docs/concepts/scoring.md +266 -0
  334. turbine_data-0.1.0/docs/user/docs/concepts/telemetry.md +111 -0
  335. turbine_data-0.1.0/docs/user/docs/contributing/architecture/Makefile +23 -0
  336. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/01-presentation-layer.md +33 -0
  337. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/02-orchestration-layer.md +33 -0
  338. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/03-domain-layer.md +36 -0
  339. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/04-config-layer.md +30 -0
  340. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/05-foundation-layer.md +30 -0
  341. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/workspace/01-overview.md +31 -0
  342. turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/workspace/02-layer-rules.md +43 -0
  343. turbine_data-0.1.0/docs/user/docs/contributing/architecture/workspace.dsl +380 -0
  344. turbine_data-0.1.0/docs/user/docs/contributing/index.md +752 -0
  345. turbine_data-0.1.0/docs/user/docs/cookbook/anomaly-detection.md +212 -0
  346. turbine_data-0.1.0/docs/user/docs/cookbook/api-server-setup.md +189 -0
  347. turbine_data-0.1.0/docs/user/docs/cookbook/gitlab-ci.md +126 -0
  348. turbine_data-0.1.0/docs/user/docs/cookbook/index.md +60 -0
  349. turbine_data-0.1.0/docs/user/docs/cookbook/migrate-from-soda.md +127 -0
  350. turbine_data-0.1.0/docs/user/docs/cookbook/multi-database.md +127 -0
  351. turbine_data-0.1.0/docs/user/docs/cookbook/new-data-product.md +155 -0
  352. turbine_data-0.1.0/docs/user/docs/getting-started/core-concepts.md +68 -0
  353. turbine_data-0.1.0/docs/user/docs/getting-started/first-contract.md +179 -0
  354. turbine_data-0.1.0/docs/user/docs/getting-started/index.md +96 -0
  355. turbine_data-0.1.0/docs/user/docs/getting-started/installation.md +120 -0
  356. turbine_data-0.1.0/docs/user/docs/getting-started/next-steps.md +108 -0
  357. turbine_data-0.1.0/docs/user/docs/getting-started/quickstart.md +46 -0
  358. turbine_data-0.1.0/docs/user/docs/guides/api-server.md +223 -0
  359. turbine_data-0.1.0/docs/user/docs/guides/authoring-contracts.md +429 -0
  360. turbine_data-0.1.0/docs/user/docs/guides/checks/custom-checks.md +130 -0
  361. turbine_data-0.1.0/docs/user/docs/guides/checks/group-count.svg +55 -0
  362. turbine_data-0.1.0/docs/user/docs/guides/checks/group-duplicate.svg +232 -0
  363. turbine_data-0.1.0/docs/user/docs/guides/checks/python-flag-groups.svg +140 -0
  364. turbine_data-0.1.0/docs/user/docs/guides/checks/python-lookback.svg +41 -0
  365. turbine_data-0.1.0/docs/user/docs/guides/checks/python-validate.svg +88 -0
  366. turbine_data-0.1.0/docs/user/docs/guides/checks/python.md +250 -0
  367. turbine_data-0.1.0/docs/user/docs/guides/checks/sql-join.svg +88 -0
  368. turbine_data-0.1.0/docs/user/docs/guides/checks/sql-template.svg +71 -0
  369. turbine_data-0.1.0/docs/user/docs/guides/checks/sql.md +241 -0
  370. turbine_data-0.1.0/docs/user/docs/guides/checks/tune-mode.md +131 -0
  371. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-checks.md +550 -0
  372. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-duplicate.svg +58 -0
  373. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-freshness.svg +42 -0
  374. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-invalid.svg +56 -0
  375. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-missing.svg +58 -0
  376. turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-rowcount.svg +46 -0
  377. turbine_data-0.1.0/docs/user/docs/guides/checks/window-check-chart.svg +58 -0
  378. turbine_data-0.1.0/docs/user/docs/guides/checks/window-flatline.svg +58 -0
  379. turbine_data-0.1.0/docs/user/docs/guides/checks/window-pct-change.svg +57 -0
  380. turbine_data-0.1.0/docs/user/docs/guides/checks/window-range.svg +52 -0
  381. turbine_data-0.1.0/docs/user/docs/guides/checks/window-spike.svg +53 -0
  382. turbine_data-0.1.0/docs/user/docs/guides/checks/window-zscore.svg +57 -0
  383. turbine_data-0.1.0/docs/user/docs/guides/checks/window.md +296 -0
  384. turbine_data-0.1.0/docs/user/docs/guides/ci-cd.md +338 -0
  385. turbine_data-0.1.0/docs/user/docs/guides/codegen.md +255 -0
  386. turbine_data-0.1.0/docs/user/docs/guides/contract-versioning.md +185 -0
  387. turbine_data-0.1.0/docs/user/docs/guides/dashboard.md +153 -0
  388. turbine_data-0.1.0/docs/user/docs/guides/datasources.md +283 -0
  389. turbine_data-0.1.0/docs/user/docs/guides/dev-workflow.md +215 -0
  390. turbine_data-0.1.0/docs/user/docs/guides/incremental.md +179 -0
  391. turbine_data-0.1.0/docs/user/docs/guides/index.md +245 -0
  392. turbine_data-0.1.0/docs/user/docs/guides/linting.md +261 -0
  393. turbine_data-0.1.0/docs/user/docs/guides/lsp-clients.md +195 -0
  394. turbine_data-0.1.0/docs/user/docs/guides/onboarding.md +113 -0
  395. turbine_data-0.1.0/docs/user/docs/guides/performance.md +166 -0
  396. turbine_data-0.1.0/docs/user/docs/guides/python-api.md +179 -0
  397. turbine_data-0.1.0/docs/user/docs/guides/quality-specs.md +198 -0
  398. turbine_data-0.1.0/docs/user/docs/guides/row-flagging-bitmask.svg +273 -0
  399. turbine_data-0.1.0/docs/user/docs/guides/row-flagging.md +194 -0
  400. turbine_data-0.1.0/docs/user/docs/guides/scaffolding.md +179 -0
  401. turbine_data-0.1.0/docs/user/docs/guides/schema-validation.md +223 -0
  402. turbine_data-0.1.0/docs/user/docs/guides/scoring-gates.md +163 -0
  403. turbine_data-0.1.0/docs/user/docs/guides/security.md +252 -0
  404. turbine_data-0.1.0/docs/user/docs/guides/sla-properties.md +194 -0
  405. turbine_data-0.1.0/docs/user/docs/guides/telemetry-setup.md +135 -0
  406. turbine_data-0.1.0/docs/user/docs/guides/vscode.md +244 -0
  407. turbine_data-0.1.0/docs/user/docs/guides/workflow-pipeline.svg +57 -0
  408. turbine_data-0.1.0/docs/user/docs/guides/workflow.md +102 -0
  409. turbine_data-0.1.0/docs/user/docs/includes/glossary.md +9 -0
  410. turbine_data-0.1.0/docs/user/docs/index.md +117 -0
  411. turbine_data-0.1.0/docs/user/docs/javascripts/mathjax.js +12 -0
  412. turbine_data-0.1.0/docs/user/docs/javascripts/playground.js +257 -0
  413. turbine_data-0.1.0/docs/user/docs/overrides/partials/announce.html +3 -0
  414. turbine_data-0.1.0/docs/user/docs/overrides/partials/source.html +14 -0
  415. turbine_data-0.1.0/docs/user/docs/playground.md +64 -0
  416. turbine_data-0.1.0/docs/user/docs/reference/api-playground.md +322 -0
  417. turbine_data-0.1.0/docs/user/docs/reference/api.md +202 -0
  418. turbine_data-0.1.0/docs/user/docs/reference/cli.md +57 -0
  419. turbine_data-0.1.0/docs/user/docs/reference/configuration.md +404 -0
  420. turbine_data-0.1.0/docs/user/docs/reference/databases.md +62 -0
  421. turbine_data-0.1.0/docs/user/docs/reference/diagnostic-ids.md +121 -0
  422. turbine_data-0.1.0/docs/user/docs/reference/env-vars.md +190 -0
  423. turbine_data-0.1.0/docs/user/docs/reference/errors.md +323 -0
  424. turbine_data-0.1.0/docs/user/docs/reference/exit-codes.md +134 -0
  425. turbine_data-0.1.0/docs/user/docs/reference/glossary.md +136 -0
  426. turbine_data-0.1.0/docs/user/docs/reference/index.md +53 -0
  427. turbine_data-0.1.0/docs/user/docs/reference/odcs-schema.md +771 -0
  428. turbine_data-0.1.0/docs/user/docs/reference/sla-schema.md +202 -0
  429. turbine_data-0.1.0/docs/user/docs/reference/troubleshooting.md +307 -0
  430. turbine_data-0.1.0/docs/user/docs/stylesheets/extra.css +509 -0
  431. turbine_data-0.1.0/docs/user/guide-audit.md +73 -0
  432. turbine_data-0.1.0/docs/user/main.py +142 -0
  433. turbine_data-0.1.0/docs/user/mkdocs.yml +244 -0
  434. turbine_data-0.1.0/docs-todo.md +137 -0
  435. turbine_data-0.1.0/editors/jetbrains/.gitignore +4 -0
  436. turbine_data-0.1.0/editors/jetbrains/bin/main/META-INF/plugin.xml +22 -0
  437. turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineDocumentMatcher.kt +21 -0
  438. turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineLanguageServer.kt +12 -0
  439. turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineLanguageServerFactory.kt +10 -0
  440. turbine_data-0.1.0/editors/jetbrains/build.gradle.kts +42 -0
  441. turbine_data-0.1.0/editors/jetbrains/gradle/wrapper/gradle-wrapper.jar +0 -0
  442. turbine_data-0.1.0/editors/jetbrains/gradle/wrapper/gradle-wrapper.properties +7 -0
  443. turbine_data-0.1.0/editors/jetbrains/gradle.properties +13 -0
  444. turbine_data-0.1.0/editors/jetbrains/gradlew +248 -0
  445. turbine_data-0.1.0/editors/jetbrains/gradlew.bat +93 -0
  446. turbine_data-0.1.0/editors/jetbrains/settings.gradle.kts +1 -0
  447. turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineDocumentMatcher.kt +21 -0
  448. turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineLanguageServer.kt +12 -0
  449. turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineLanguageServerFactory.kt +10 -0
  450. turbine_data-0.1.0/editors/jetbrains/src/main/resources/META-INF/plugin.xml +22 -0
  451. turbine_data-0.1.0/editors/protocol/README.md +58 -0
  452. turbine_data-0.1.0/editors/protocol/turbine-lsp-extension.schema.json +501 -0
  453. turbine_data-0.1.0/editors/vscode/.gitignore +3 -0
  454. turbine_data-0.1.0/editors/vscode/.vscodeignore +7 -0
  455. turbine_data-0.1.0/editors/vscode/LICENSE +191 -0
  456. turbine_data-0.1.0/editors/vscode/README.md +31 -0
  457. turbine_data-0.1.0/editors/vscode/assets/plotly.min.js +8 -0
  458. turbine_data-0.1.0/editors/vscode/eslint.config.mjs +17 -0
  459. turbine_data-0.1.0/editors/vscode/icon.png +0 -0
  460. turbine_data-0.1.0/editors/vscode/media/tune/panel.css +629 -0
  461. turbine_data-0.1.0/editors/vscode/media/tune/panel.js +1067 -0
  462. turbine_data-0.1.0/editors/vscode/media/walkthrough/01-see-concepts.md +7 -0
  463. turbine_data-0.1.0/editors/vscode/media/walkthrough/02-walk-example.md +11 -0
  464. turbine_data-0.1.0/editors/vscode/media/walkthrough/03-connect-my-data.md +9 -0
  465. turbine_data-0.1.0/editors/vscode/out/anchor-hider.d.ts +13 -0
  466. turbine_data-0.1.0/editors/vscode/out/anchor-hider.js +106 -0
  467. turbine_data-0.1.0/editors/vscode/out/anchor-hider.js.map +1 -0
  468. turbine_data-0.1.0/editors/vscode/out/check-result-range.d.ts +8 -0
  469. turbine_data-0.1.0/editors/vscode/out/check-result-range.js +31 -0
  470. turbine_data-0.1.0/editors/vscode/out/check-result-range.js.map +1 -0
  471. turbine_data-0.1.0/editors/vscode/out/client.d.ts +113 -0
  472. turbine_data-0.1.0/editors/vscode/out/client.js +185 -0
  473. turbine_data-0.1.0/editors/vscode/out/client.js.map +1 -0
  474. turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.d.ts +1 -0
  475. turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.js +14 -0
  476. turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.js.map +1 -0
  477. turbine_data-0.1.0/editors/vscode/out/execution.d.ts +13 -0
  478. turbine_data-0.1.0/editors/vscode/out/execution.js +306 -0
  479. turbine_data-0.1.0/editors/vscode/out/execution.js.map +1 -0
  480. turbine_data-0.1.0/editors/vscode/out/extension.d.ts +3 -0
  481. turbine_data-0.1.0/editors/vscode/out/extension.js +900 -0
  482. turbine_data-0.1.0/editors/vscode/out/extension.js.map +1 -0
  483. turbine_data-0.1.0/editors/vscode/out/ghost-hint.d.ts +3 -0
  484. turbine_data-0.1.0/editors/vscode/out/ghost-hint.js +81 -0
  485. turbine_data-0.1.0/editors/vscode/out/ghost-hint.js.map +1 -0
  486. turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.d.ts +20 -0
  487. turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.js +19 -0
  488. turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.js.map +1 -0
  489. turbine_data-0.1.0/editors/vscode/out/onboarding-html.d.ts +36 -0
  490. turbine_data-0.1.0/editors/vscode/out/onboarding-html.js +422 -0
  491. turbine_data-0.1.0/editors/vscode/out/onboarding-html.js.map +1 -0
  492. turbine_data-0.1.0/editors/vscode/out/onboarding-panel.d.ts +32 -0
  493. turbine_data-0.1.0/editors/vscode/out/onboarding-panel.js +112 -0
  494. turbine_data-0.1.0/editors/vscode/out/onboarding-panel.js.map +1 -0
  495. turbine_data-0.1.0/editors/vscode/out/onboarding-state.d.ts +8 -0
  496. turbine_data-0.1.0/editors/vscode/out/onboarding-state.js +17 -0
  497. turbine_data-0.1.0/editors/vscode/out/onboarding-state.js.map +1 -0
  498. turbine_data-0.1.0/editors/vscode/out/picker-html.d.ts +10 -0
  499. turbine_data-0.1.0/editors/vscode/out/picker-html.js +174 -0
  500. turbine_data-0.1.0/editors/vscode/out/picker-html.js.map +1 -0
  501. turbine_data-0.1.0/editors/vscode/out/progress-cancel.d.ts +11 -0
  502. turbine_data-0.1.0/editors/vscode/out/progress-cancel.js +10 -0
  503. turbine_data-0.1.0/editors/vscode/out/progress-cancel.js.map +1 -0
  504. turbine_data-0.1.0/editors/vscode/out/progress-toast.d.ts +47 -0
  505. turbine_data-0.1.0/editors/vscode/out/progress-toast.js +199 -0
  506. turbine_data-0.1.0/editors/vscode/out/progress-toast.js.map +1 -0
  507. turbine_data-0.1.0/editors/vscode/out/quick-pick.d.ts +9 -0
  508. turbine_data-0.1.0/editors/vscode/out/quick-pick.js +84 -0
  509. turbine_data-0.1.0/editors/vscode/out/quick-pick.js.map +1 -0
  510. turbine_data-0.1.0/editors/vscode/out/run-all.d.ts +13 -0
  511. turbine_data-0.1.0/editors/vscode/out/run-all.js +187 -0
  512. turbine_data-0.1.0/editors/vscode/out/run-all.js.map +1 -0
  513. turbine_data-0.1.0/editors/vscode/out/sandbox.d.ts +16 -0
  514. turbine_data-0.1.0/editors/vscode/out/sandbox.js +155 -0
  515. turbine_data-0.1.0/editors/vscode/out/sandbox.js.map +1 -0
  516. turbine_data-0.1.0/editors/vscode/out/server-commands.d.ts +1 -0
  517. turbine_data-0.1.0/editors/vscode/out/server-commands.js +13 -0
  518. turbine_data-0.1.0/editors/vscode/out/server-commands.js.map +1 -0
  519. turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.d.ts +62 -0
  520. turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.js +238 -0
  521. turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.js.map +1 -0
  522. turbine_data-0.1.0/editors/vscode/out/test/runTest.d.ts +1 -0
  523. turbine_data-0.1.0/editors/vscode/out/test/runTest.js +51 -0
  524. turbine_data-0.1.0/editors/vscode/out/test/runTest.js.map +1 -0
  525. turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.d.ts +1 -0
  526. turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.js +74 -0
  527. turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.js.map +1 -0
  528. turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.d.ts +1 -0
  529. turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.js +50 -0
  530. turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.js.map +1 -0
  531. turbine_data-0.1.0/editors/vscode/out/test/suite/index.d.ts +1 -0
  532. turbine_data-0.1.0/editors/vscode/out/test/suite/index.js +60 -0
  533. turbine_data-0.1.0/editors/vscode/out/test/suite/index.js.map +1 -0
  534. turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.d.ts +1 -0
  535. turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.js +65 -0
  536. turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.js.map +1 -0
  537. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.d.ts +1 -0
  538. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.js +122 -0
  539. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.js.map +1 -0
  540. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.d.ts +1 -0
  541. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.js +101 -0
  542. turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.js.map +1 -0
  543. turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.d.ts +1 -0
  544. turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.js +108 -0
  545. turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.js.map +1 -0
  546. turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.d.ts +1 -0
  547. turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.js +196 -0
  548. turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.js.map +1 -0
  549. turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.d.ts +1 -0
  550. turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.js +328 -0
  551. turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.js.map +1 -0
  552. turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.d.ts +1 -0
  553. turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.js +47 -0
  554. turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.js.map +1 -0
  555. turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.d.ts +1 -0
  556. turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.js +653 -0
  557. turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.js.map +1 -0
  558. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.d.ts +10 -0
  559. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.js +271 -0
  560. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.js.map +1 -0
  561. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.d.ts +1 -0
  562. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.js +350 -0
  563. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.js.map +1 -0
  564. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.d.ts +1 -0
  565. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.js +171 -0
  566. turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.js.map +1 -0
  567. turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.d.ts +1 -0
  568. turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.js +191 -0
  569. turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.js.map +1 -0
  570. turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.d.ts +1 -0
  571. turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.js +976 -0
  572. turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.js.map +1 -0
  573. turbine_data-0.1.0/editors/vscode/out/test-controller.d.ts +9 -0
  574. turbine_data-0.1.0/editors/vscode/out/test-controller.js +227 -0
  575. turbine_data-0.1.0/editors/vscode/out/test-controller.js.map +1 -0
  576. turbine_data-0.1.0/editors/vscode/out/tour-engine.d.ts +55 -0
  577. turbine_data-0.1.0/editors/vscode/out/tour-engine.js +379 -0
  578. turbine_data-0.1.0/editors/vscode/out/tour-engine.js.map +1 -0
  579. turbine_data-0.1.0/editors/vscode/out/tour-state.d.ts +19 -0
  580. turbine_data-0.1.0/editors/vscode/out/tour-state.js +29 -0
  581. turbine_data-0.1.0/editors/vscode/out/tour-state.js.map +1 -0
  582. turbine_data-0.1.0/editors/vscode/out/tree-bridge.d.ts +42 -0
  583. turbine_data-0.1.0/editors/vscode/out/tree-bridge.js +296 -0
  584. turbine_data-0.1.0/editors/vscode/out/tree-bridge.js.map +1 -0
  585. turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.d.ts +24 -0
  586. turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.js +130 -0
  587. turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.js.map +1 -0
  588. turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.d.ts +19 -0
  589. turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.js +115 -0
  590. turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.js.map +1 -0
  591. turbine_data-0.1.0/editors/vscode/out/tune/family/floor.d.ts +19 -0
  592. turbine_data-0.1.0/editors/vscode/out/tune/family/floor.js +160 -0
  593. turbine_data-0.1.0/editors/vscode/out/tune/family/floor.js.map +1 -0
  594. turbine_data-0.1.0/editors/vscode/out/tune/family/lag.d.ts +21 -0
  595. turbine_data-0.1.0/editors/vscode/out/tune/family/lag.js +138 -0
  596. turbine_data-0.1.0/editors/vscode/out/tune/family/lag.js.map +1 -0
  597. turbine_data-0.1.0/editors/vscode/out/tune/family/range.d.ts +38 -0
  598. turbine_data-0.1.0/editors/vscode/out/tune/family/range.js +268 -0
  599. turbine_data-0.1.0/editors/vscode/out/tune/family/range.js.map +1 -0
  600. turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.d.ts +30 -0
  601. turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.js +13 -0
  602. turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.js.map +1 -0
  603. turbine_data-0.1.0/editors/vscode/out/tune/format.d.ts +21 -0
  604. turbine_data-0.1.0/editors/vscode/out/tune/format.js +61 -0
  605. turbine_data-0.1.0/editors/vscode/out/tune/format.js.map +1 -0
  606. turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.d.ts +9 -0
  607. turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.js +57 -0
  608. turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.js.map +1 -0
  609. turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.d.ts +11 -0
  610. turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.js +34 -0
  611. turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.js.map +1 -0
  612. turbine_data-0.1.0/editors/vscode/out/tune/modes/group.d.ts +10 -0
  613. turbine_data-0.1.0/editors/vscode/out/tune/modes/group.js +75 -0
  614. turbine_data-0.1.0/editors/vscode/out/tune/modes/group.js.map +1 -0
  615. turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.d.ts +27 -0
  616. turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.js +16 -0
  617. turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.js.map +1 -0
  618. turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.d.ts +12 -0
  619. turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.js +29 -0
  620. turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.js.map +1 -0
  621. turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.d.ts +14 -0
  622. turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.js +41 -0
  623. turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.js.map +1 -0
  624. turbine_data-0.1.0/editors/vscode/out/tune/panel.d.ts +64 -0
  625. turbine_data-0.1.0/editors/vscode/out/tune/panel.js +339 -0
  626. turbine_data-0.1.0/editors/vscode/out/tune/panel.js.map +1 -0
  627. turbine_data-0.1.0/editors/vscode/out/tune/pickers.d.ts +19 -0
  628. turbine_data-0.1.0/editors/vscode/out/tune/pickers.js +119 -0
  629. turbine_data-0.1.0/editors/vscode/out/tune/pickers.js.map +1 -0
  630. turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.d.ts +15 -0
  631. turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.js +25 -0
  632. turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.js.map +1 -0
  633. turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.d.ts +11 -0
  634. turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.js +36 -0
  635. turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.js.map +1 -0
  636. turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.d.ts +13 -0
  637. turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.js +28 -0
  638. turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.js.map +1 -0
  639. turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.d.ts +101 -0
  640. turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.js +263 -0
  641. turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.js.map +1 -0
  642. turbine_data-0.1.0/editors/vscode/out/tune/template.d.ts +31 -0
  643. turbine_data-0.1.0/editors/vscode/out/tune/template.js +181 -0
  644. turbine_data-0.1.0/editors/vscode/out/tune/template.js.map +1 -0
  645. turbine_data-0.1.0/editors/vscode/out/types.d.ts +446 -0
  646. turbine_data-0.1.0/editors/vscode/out/types.js +9 -0
  647. turbine_data-0.1.0/editors/vscode/out/types.js.map +1 -0
  648. turbine_data-0.1.0/editors/vscode/package-lock.json +6306 -0
  649. turbine_data-0.1.0/editors/vscode/package.json +357 -0
  650. turbine_data-0.1.0/editors/vscode/sandbox-template/checks/amount_positive.sql +6 -0
  651. turbine_data-0.1.0/editors/vscode/sandbox-template/contracts/customers.yml +31 -0
  652. turbine_data-0.1.0/editors/vscode/sandbox-template/contracts/orders.yml +35 -0
  653. turbine_data-0.1.0/editors/vscode/sandbox-template/data/.gitignore +2 -0
  654. turbine_data-0.1.0/editors/vscode/sandbox-template/datasources/local.yml +4 -0
  655. turbine_data-0.1.0/editors/vscode/sandbox-template/pyproject.toml +2 -0
  656. turbine_data-0.1.0/editors/vscode/sandbox-template/quality/orders.yml +29 -0
  657. turbine_data-0.1.0/editors/vscode/src/anchor-hider.ts +79 -0
  658. turbine_data-0.1.0/editors/vscode/src/check-result-range.ts +48 -0
  659. turbine_data-0.1.0/editors/vscode/src/client.ts +273 -0
  660. turbine_data-0.1.0/editors/vscode/src/diagnostic-pull-match.ts +11 -0
  661. turbine_data-0.1.0/editors/vscode/src/execution.ts +369 -0
  662. turbine_data-0.1.0/editors/vscode/src/extension.ts +1089 -0
  663. turbine_data-0.1.0/editors/vscode/src/ghost-hint.ts +48 -0
  664. turbine_data-0.1.0/editors/vscode/src/insert-snippet-request.ts +38 -0
  665. turbine_data-0.1.0/editors/vscode/src/onboarding-html.ts +458 -0
  666. turbine_data-0.1.0/editors/vscode/src/onboarding-panel.ts +95 -0
  667. turbine_data-0.1.0/editors/vscode/src/onboarding-state.ts +18 -0
  668. turbine_data-0.1.0/editors/vscode/src/picker-html.ts +188 -0
  669. turbine_data-0.1.0/editors/vscode/src/progress-cancel.ts +17 -0
  670. turbine_data-0.1.0/editors/vscode/src/progress-toast.ts +213 -0
  671. turbine_data-0.1.0/editors/vscode/src/quick-pick.ts +62 -0
  672. turbine_data-0.1.0/editors/vscode/src/run-all.ts +181 -0
  673. turbine_data-0.1.0/editors/vscode/src/sandbox.ts +137 -0
  674. turbine_data-0.1.0/editors/vscode/src/server-commands.ts +9 -0
  675. turbine_data-0.1.0/editors/vscode/src/sidebar-resource-creation.ts +290 -0
  676. turbine_data-0.1.0/editors/vscode/src/test/runTest.ts +17 -0
  677. turbine_data-0.1.0/editors/vscode/src/test/suite/check-result-range.test.ts +50 -0
  678. turbine_data-0.1.0/editors/vscode/src/test/suite/diagnostic-pull-match.test.ts +17 -0
  679. turbine_data-0.1.0/editors/vscode/src/test/suite/index.ts +24 -0
  680. turbine_data-0.1.0/editors/vscode/src/test/suite/insert-snippet-request.test.ts +37 -0
  681. turbine_data-0.1.0/editors/vscode/src/test/suite/onboarding-panel.test.ts +104 -0
  682. turbine_data-0.1.0/editors/vscode/src/test/suite/onboarding-state.test.ts +83 -0
  683. turbine_data-0.1.0/editors/vscode/src/test/suite/picker-html.test.ts +85 -0
  684. turbine_data-0.1.0/editors/vscode/src/test/suite/progress-toast.test.ts +222 -0
  685. turbine_data-0.1.0/editors/vscode/src/test/suite/sandbox.test.ts +345 -0
  686. turbine_data-0.1.0/editors/vscode/src/test/suite/server-commands.test.ts +14 -0
  687. turbine_data-0.1.0/editors/vscode/src/test/suite/sidebar-resource-creation.test.ts +741 -0
  688. turbine_data-0.1.0/editors/vscode/src/test/suite/tour-engine-e2e.test.ts +292 -0
  689. turbine_data-0.1.0/editors/vscode/src/test/suite/tour-engine.test.ts +387 -0
  690. turbine_data-0.1.0/editors/vscode/src/test/suite/tour-state.test.ts +162 -0
  691. turbine_data-0.1.0/editors/vscode/src/test/suite/tree-bridge.test.ts +185 -0
  692. turbine_data-0.1.0/editors/vscode/src/test/suite/tune-shell.test.ts +1023 -0
  693. turbine_data-0.1.0/editors/vscode/src/test-controller.ts +239 -0
  694. turbine_data-0.1.0/editors/vscode/src/tour-engine.ts +416 -0
  695. turbine_data-0.1.0/editors/vscode/src/tour-state.ts +40 -0
  696. turbine_data-0.1.0/editors/vscode/src/tree-bridge.ts +287 -0
  697. turbine_data-0.1.0/editors/vscode/src/tune/family/anomaly.ts +146 -0
  698. turbine_data-0.1.0/editors/vscode/src/tune/family/failures-allowed.ts +129 -0
  699. turbine_data-0.1.0/editors/vscode/src/tune/family/floor.ts +183 -0
  700. turbine_data-0.1.0/editors/vscode/src/tune/family/lag.ts +162 -0
  701. turbine_data-0.1.0/editors/vscode/src/tune/family/range.ts +316 -0
  702. turbine_data-0.1.0/editors/vscode/src/tune/family/renderer.ts +35 -0
  703. turbine_data-0.1.0/editors/vscode/src/tune/format.ts +60 -0
  704. turbine_data-0.1.0/editors/vscode/src/tune/modes/categorical.ts +62 -0
  705. turbine_data-0.1.0/editors/vscode/src/tune/modes/fallback.ts +35 -0
  706. turbine_data-0.1.0/editors/vscode/src/tune/modes/mode.ts +35 -0
  707. turbine_data-0.1.0/editors/vscode/src/tune/modes/registry.ts +29 -0
  708. turbine_data-0.1.0/editors/vscode/src/tune/modes/shared.ts +42 -0
  709. turbine_data-0.1.0/editors/vscode/src/tune/panel.ts +382 -0
  710. turbine_data-0.1.0/editors/vscode/src/tune/pickers.ts +102 -0
  711. turbine_data-0.1.0/editors/vscode/src/tune/shell/diff-panel.ts +26 -0
  712. turbine_data-0.1.0/editors/vscode/src/tune/shell/family-routing.ts +29 -0
  713. turbine_data-0.1.0/editors/vscode/src/tune/shell/non-canonical-notice.ts +32 -0
  714. turbine_data-0.1.0/editors/vscode/src/tune/shell/quick-picks.ts +293 -0
  715. turbine_data-0.1.0/editors/vscode/src/tune/template.ts +220 -0
  716. turbine_data-0.1.0/editors/vscode/src/types.ts +570 -0
  717. turbine_data-0.1.0/editors/vscode/tsconfig.json +22 -0
  718. turbine_data-0.1.0/onboarding-test/01-foundations/01-why-turbine-exists.md +23 -0
  719. turbine_data-0.1.0/onboarding-test/01-foundations/02-onboarding-sandbox.md +25 -0
  720. turbine_data-0.1.0/onboarding-test/01-foundations/03-project-layout.md +28 -0
  721. turbine_data-0.1.0/onboarding-test/01-foundations/04-datasource.md +26 -0
  722. turbine_data-0.1.0/onboarding-test/01-foundations/05-contract-identity.md +24 -0
  723. turbine_data-0.1.0/onboarding-test/01-foundations/06-dataset.md +26 -0
  724. turbine_data-0.1.0/onboarding-test/01-foundations/07-columns-and-row-identity.md +26 -0
  725. turbine_data-0.1.0/onboarding-test/01-foundations/08-sla-time-column.md +24 -0
  726. turbine_data-0.1.0/onboarding-test/01-foundations/09-run-validate.md +28 -0
  727. turbine_data-0.1.0/onboarding-test/01-foundations/10-lint-vs-drift.md +26 -0
  728. turbine_data-0.1.0/onboarding-test/01-foundations/11-all-contracts-panel.md +27 -0
  729. turbine_data-0.1.0/onboarding-test/01-foundations/12-contract-vs-quality-spec.md +26 -0
  730. turbine_data-0.1.0/onboarding-test/01-foundations/13-contract-versioning.md +26 -0
  731. turbine_data-0.1.0/onboarding-test/01-foundations/14-foundations-recap.md +25 -0
  732. turbine_data-0.1.0/onboarding-test/02-quality-checks/01-where-checks-live.md +26 -0
  733. turbine_data-0.1.0/onboarding-test/02-quality-checks/02-check-anatomy.md +24 -0
  734. turbine_data-0.1.0/onboarding-test/02-quality-checks/03-open-real-add-check-discovery.md +28 -0
  735. turbine_data-0.1.0/onboarding-test/02-quality-checks/04-hover-and-completion-discovery.md +24 -0
  736. turbine_data-0.1.0/onboarding-test/02-quality-checks/05-missing-check.md +24 -0
  737. turbine_data-0.1.0/onboarding-test/02-quality-checks/06-duplicate-check.md +24 -0
  738. turbine_data-0.1.0/onboarding-test/02-quality-checks/07-invalid-check.md +24 -0
  739. turbine_data-0.1.0/onboarding-test/02-quality-checks/08-row-count-check.md +24 -0
  740. turbine_data-0.1.0/onboarding-test/02-quality-checks/09-freshness-check.md +24 -0
  741. turbine_data-0.1.0/onboarding-test/02-quality-checks/10-flatline-window-check.md +24 -0
  742. turbine_data-0.1.0/onboarding-test/02-quality-checks/11-threshold-families.md +26 -0
  743. turbine_data-0.1.0/onboarding-test/02-quality-checks/12-open-pick-threshold.md +28 -0
  744. turbine_data-0.1.0/onboarding-test/02-quality-checks/13-run-one-check.md +28 -0
  745. turbine_data-0.1.0/onboarding-test/02-quality-checks/14-read-outcomes.md +24 -0
  746. turbine_data-0.1.0/onboarding-test/02-quality-checks/15-row-flagging.md +24 -0
  747. turbine_data-0.1.0/onboarding-test/02-quality-checks/16-sql-check.md +30 -0
  748. turbine_data-0.1.0/onboarding-test/02-quality-checks/17-python-check.md +24 -0
  749. turbine_data-0.1.0/onboarding-test/02-quality-checks/18-quality-recap.md +25 -0
  750. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/01-what-contracts-unlock.md +23 -0
  751. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/02-generate-api.md +28 -0
  752. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/03-api-resource-shape.md +24 -0
  753. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/04-start-live-api-server.md +27 -0
  754. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/05-open-data-swagger.md +27 -0
  755. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/06-open-management-swagger.md +27 -0
  756. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/07-seed-run-results.md +28 -0
  757. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/08-open-dashboard.md +27 -0
  758. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/09-read-dashboard-status.md +23 -0
  759. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/10-flagged-rows-in-dashboard.md +23 -0
  760. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/11-next-real-project-step.md +23 -0
  761. turbine_data-0.1.0/onboarding-test/03-ship-and-observe/12-final-handoff-cleanup.md +29 -0
  762. turbine_data-0.1.0/onboarding-test/README.md +58 -0
  763. turbine_data-0.1.0/pyproject.toml +259 -0
  764. turbine_data-0.1.0/renovate.json +4 -0
  765. turbine_data-0.1.0/src/turbine/__init__.py +135 -0
  766. turbine_data-0.1.0/src/turbine/_version.py +24 -0
  767. turbine_data-0.1.0/src/turbine/adapters/__init__.py +0 -0
  768. turbine_data-0.1.0/src/turbine/adapters/analysis/__init__.py +5 -0
  769. turbine_data-0.1.0/src/turbine/adapters/analysis/file_code_writer.py +96 -0
  770. turbine_data-0.1.0/src/turbine/adapters/api/__init__.py +0 -0
  771. turbine_data-0.1.0/src/turbine/adapters/api/dependencies.py +21 -0
  772. turbine_data-0.1.0/src/turbine/adapters/api/models/__init__.py +0 -0
  773. turbine_data-0.1.0/src/turbine/adapters/api/models/abstract_model.py +90 -0
  774. turbine_data-0.1.0/src/turbine/adapters/audit/__init__.py +5 -0
  775. turbine_data-0.1.0/src/turbine/adapters/audit/check_result_repo.py +50 -0
  776. turbine_data-0.1.0/src/turbine/adapters/audit/run_buffer.py +68 -0
  777. turbine_data-0.1.0/src/turbine/adapters/audit/subscribers.py +91 -0
  778. turbine_data-0.1.0/src/turbine/adapters/audit/trail.py +170 -0
  779. turbine_data-0.1.0/src/turbine/adapters/codegen/__init__.py +21 -0
  780. turbine_data-0.1.0/src/turbine/adapters/codegen/api/__init__.py +26 -0
  781. turbine_data-0.1.0/src/turbine/adapters/codegen/api/layout.py +86 -0
  782. turbine_data-0.1.0/src/turbine/adapters/codegen/api/mount.py +412 -0
  783. turbine_data-0.1.0/src/turbine/adapters/codegen/api/naming.py +97 -0
  784. turbine_data-0.1.0/src/turbine/adapters/codegen/api/package_init.py +115 -0
  785. turbine_data-0.1.0/src/turbine/adapters/codegen/api/plan.py +167 -0
  786. turbine_data-0.1.0/src/turbine/adapters/codegen/api/schema_model.py +298 -0
  787. turbine_data-0.1.0/src/turbine/adapters/codegen/api/schema_router.py +618 -0
  788. turbine_data-0.1.0/src/turbine/adapters/codegen/api/slow_count.py +53 -0
  789. turbine_data-0.1.0/src/turbine/adapters/codegen/ast_utils.py +131 -0
  790. turbine_data-0.1.0/src/turbine/adapters/codegen/ci.py +155 -0
  791. turbine_data-0.1.0/src/turbine/adapters/codegen/contract.py +78 -0
  792. turbine_data-0.1.0/src/turbine/adapters/codegen/datasource.py +56 -0
  793. turbine_data-0.1.0/src/turbine/adapters/codegen/formatter.py +67 -0
  794. turbine_data-0.1.0/src/turbine/adapters/codegen/jinja.py +30 -0
  795. turbine_data-0.1.0/src/turbine/adapters/codegen/sweeper.py +43 -0
  796. turbine_data-0.1.0/src/turbine/adapters/codegen/template_loader.py +14 -0
  797. turbine_data-0.1.0/src/turbine/adapters/codegen/templates/check_python.py.jinja +60 -0
  798. turbine_data-0.1.0/src/turbine/adapters/codegen/templates/check_sql.sql.jinja +5 -0
  799. turbine_data-0.1.0/src/turbine/adapters/codegen/writer.py +52 -0
  800. turbine_data-0.1.0/src/turbine/adapters/contract/__init__.py +0 -0
  801. turbine_data-0.1.0/src/turbine/adapters/contract/domain_registry.py +76 -0
  802. turbine_data-0.1.0/src/turbine/adapters/contract/repo_list_lookup.py +28 -0
  803. turbine_data-0.1.0/src/turbine/adapters/dashboard/__init__.py +0 -0
  804. turbine_data-0.1.0/src/turbine/adapters/dashboard/api_dataset.py +194 -0
  805. turbine_data-0.1.0/src/turbine/adapters/dashboard/api_dispatcher.py +115 -0
  806. turbine_data-0.1.0/src/turbine/adapters/dashboard/api_models.py +30 -0
  807. turbine_data-0.1.0/src/turbine/adapters/dashboard/backend_loader.py +34 -0
  808. turbine_data-0.1.0/src/turbine/adapters/dashboard/component_discovery.py +38 -0
  809. turbine_data-0.1.0/src/turbine/adapters/dashboard/config.py +49 -0
  810. turbine_data-0.1.0/src/turbine/adapters/dashboard/discovery_helpers.py +12 -0
  811. turbine_data-0.1.0/src/turbine/adapters/dashboard/page_discovery.py +51 -0
  812. turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/__init__.py +1 -0
  813. turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/dispatcher.py +362 -0
  814. turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/models.py +255 -0
  815. turbine_data-0.1.0/src/turbine/adapters/databases/__init__.py +25 -0
  816. turbine_data-0.1.0/src/turbine/adapters/databases/backend.py +167 -0
  817. turbine_data-0.1.0/src/turbine/adapters/databases/backend_factory.py +66 -0
  818. turbine_data-0.1.0/src/turbine/adapters/databases/connectivity_probe.py +43 -0
  819. turbine_data-0.1.0/src/turbine/adapters/databases/dialects/__init__.py +23 -0
  820. turbine_data-0.1.0/src/turbine/adapters/databases/dialects/duckdb.py +70 -0
  821. turbine_data-0.1.0/src/turbine/adapters/databases/dialects/postgres.py +70 -0
  822. turbine_data-0.1.0/src/turbine/adapters/databases/dialects/snowflake.py +92 -0
  823. turbine_data-0.1.0/src/turbine/adapters/databases/schema_introspector.py +163 -0
  824. turbine_data-0.1.0/src/turbine/adapters/databases/seed_writer.py +110 -0
  825. turbine_data-0.1.0/src/turbine/adapters/databases/sql_helpers.py +23 -0
  826. turbine_data-0.1.0/src/turbine/adapters/databases/sqlglot_support.py +164 -0
  827. turbine_data-0.1.0/src/turbine/adapters/dismissal/__init__.py +5 -0
  828. turbine_data-0.1.0/src/turbine/adapters/dismissal/json_store.py +123 -0
  829. turbine_data-0.1.0/src/turbine/adapters/events/__init__.py +5 -0
  830. turbine_data-0.1.0/src/turbine/adapters/events/registry.py +91 -0
  831. turbine_data-0.1.0/src/turbine/adapters/filesystem/__init__.py +15 -0
  832. turbine_data-0.1.0/src/turbine/adapters/filesystem/check_file_resolver.py +32 -0
  833. turbine_data-0.1.0/src/turbine/adapters/filesystem/contract_repository.py +130 -0
  834. turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_descriptor.py +18 -0
  835. turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_model.py +165 -0
  836. turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_reader.py +41 -0
  837. turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_repository.py +135 -0
  838. turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_schema_catalog.py +15 -0
  839. turbine_data-0.1.0/src/turbine/adapters/filesystem/file_writer.py +27 -0
  840. turbine_data-0.1.0/src/turbine/adapters/filesystem/schemas/datasource.schema.json +165 -0
  841. turbine_data-0.1.0/src/turbine/adapters/git/__init__.py +6 -0
  842. turbine_data-0.1.0/src/turbine/adapters/git/loader.py +55 -0
  843. turbine_data-0.1.0/src/turbine/adapters/git/previous_version.py +76 -0
  844. turbine_data-0.1.0/src/turbine/adapters/indexing/__init__.py +5 -0
  845. turbine_data-0.1.0/src/turbine/adapters/indexing/project_index.py +179 -0
  846. turbine_data-0.1.0/src/turbine/adapters/odcs/__init__.py +7 -0
  847. turbine_data-0.1.0/src/turbine/adapters/odcs/descriptor.py +14 -0
  848. turbine_data-0.1.0/src/turbine/adapters/odcs/implementation_validation.py +137 -0
  849. turbine_data-0.1.0/src/turbine/adapters/odcs/reader.py +1082 -0
  850. turbine_data-0.1.0/src/turbine/adapters/odcs/schema_catalog.py +273 -0
  851. turbine_data-0.1.0/src/turbine/adapters/odcs/schema_extensions.json +206 -0
  852. turbine_data-0.1.0/src/turbine/adapters/odcs/schema_validation.py +85 -0
  853. turbine_data-0.1.0/src/turbine/adapters/odcs/writer.py +82 -0
  854. turbine_data-0.1.0/src/turbine/adapters/onboarding/__init__.py +7 -0
  855. turbine_data-0.1.0/src/turbine/adapters/onboarding/lsp_diagnostic_source.py +29 -0
  856. turbine_data-0.1.0/src/turbine/adapters/onboarding/lsp_introspection_source.py +22 -0
  857. turbine_data-0.1.0/src/turbine/adapters/onboarding/timer_scheduler.py +34 -0
  858. turbine_data-0.1.0/src/turbine/adapters/onboarding/yaml_parser.py +21 -0
  859. turbine_data-0.1.0/src/turbine/adapters/quality/__init__.py +6 -0
  860. turbine_data-0.1.0/src/turbine/adapters/quality/descriptor.py +14 -0
  861. turbine_data-0.1.0/src/turbine/adapters/quality/python/__init__.py +1 -0
  862. turbine_data-0.1.0/src/turbine/adapters/quality/python/data_loader.py +143 -0
  863. turbine_data-0.1.0/src/turbine/adapters/quality/python/requester.py +108 -0
  864. turbine_data-0.1.0/src/turbine/adapters/quality/python/runner.py +399 -0
  865. turbine_data-0.1.0/src/turbine/adapters/quality/reader.py +371 -0
  866. turbine_data-0.1.0/src/turbine/adapters/quality/schema_catalog.py +18 -0
  867. turbine_data-0.1.0/src/turbine/adapters/quality/schema_validation.py +89 -0
  868. turbine_data-0.1.0/src/turbine/adapters/quality/soda/__init__.py +5 -0
  869. turbine_data-0.1.0/src/turbine/adapters/quality/soda/bypass.py +531 -0
  870. turbine_data-0.1.0/src/turbine/adapters/quality/sql/__init__.py +1 -0
  871. turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_dataset_executor.py +351 -0
  872. turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_dataset_writer.py +237 -0
  873. turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_runner.py +397 -0
  874. turbine_data-0.1.0/src/turbine/adapters/quality/sql/check_metadata_writer.py +169 -0
  875. turbine_data-0.1.0/src/turbine/adapters/quality/sql/dialect_capabilities.py +54 -0
  876. turbine_data-0.1.0/src/turbine/adapters/quality/sql/fingerprint.py +79 -0
  877. turbine_data-0.1.0/src/turbine/adapters/quality/sql/predicate_renderer.py +271 -0
  878. turbine_data-0.1.0/src/turbine/adapters/quality/sql/quality_view_writer.py +123 -0
  879. turbine_data-0.1.0/src/turbine/adapters/quality/sql/renderer.py +228 -0
  880. turbine_data-0.1.0/src/turbine/adapters/quality/sql/windowed_renderer.py +124 -0
  881. turbine_data-0.1.0/src/turbine/adapters/schema_validation/__init__.py +17 -0
  882. turbine_data-0.1.0/src/turbine/adapters/schema_validation/descriptor_validator.py +39 -0
  883. turbine_data-0.1.0/src/turbine/adapters/schema_validation/handlers.py +575 -0
  884. turbine_data-0.1.0/src/turbine/adapters/schema_validation/model_parser.py +18 -0
  885. turbine_data-0.1.0/src/turbine/adapters/schema_validation/validator.py +154 -0
  886. turbine_data-0.1.0/src/turbine/adapters/telemetry/__init__.py +47 -0
  887. turbine_data-0.1.0/src/turbine/adapters/telemetry/conventions.py +20 -0
  888. turbine_data-0.1.0/src/turbine/adapters/telemetry/handler.py +116 -0
  889. turbine_data-0.1.0/src/turbine/adapters/telemetry/logfire_tracer.py +173 -0
  890. turbine_data-0.1.0/src/turbine/adapters/telemetry/mapping.py +155 -0
  891. turbine_data-0.1.0/src/turbine/adapters/telemetry/ports.py +102 -0
  892. turbine_data-0.1.0/src/turbine/adapters/telemetry/provider.py +111 -0
  893. turbine_data-0.1.0/src/turbine/adapters/yaml/__init__.py +5 -0
  894. turbine_data-0.1.0/src/turbine/adapters/yaml/treesitter_store.py +873 -0
  895. turbine_data-0.1.0/src/turbine/api/__init__.py +8 -0
  896. turbine_data-0.1.0/src/turbine/api/runtime/__init__.py +200 -0
  897. turbine_data-0.1.0/src/turbine/api/runtime/base.py +315 -0
  898. turbine_data-0.1.0/src/turbine/api/runtime/caching.py +129 -0
  899. turbine_data-0.1.0/src/turbine/api/runtime/errors.py +101 -0
  900. turbine_data-0.1.0/src/turbine/api/runtime/observability.py +262 -0
  901. turbine_data-0.1.0/src/turbine/api/runtime/openapi.py +279 -0
  902. turbine_data-0.1.0/src/turbine/api/runtime/pagination.py +105 -0
  903. turbine_data-0.1.0/src/turbine/api/runtime/query.py +96 -0
  904. turbine_data-0.1.0/src/turbine/api/runtime/rate_limit.py +283 -0
  905. turbine_data-0.1.0/src/turbine/api/runtime/session.py +110 -0
  906. turbine_data-0.1.0/src/turbine/api/runtime/status.py +121 -0
  907. turbine_data-0.1.0/src/turbine/application/__init__.py +0 -0
  908. turbine_data-0.1.0/src/turbine/application/analysis/__init__.py +32 -0
  909. turbine_data-0.1.0/src/turbine/application/analysis/add_check.py +438 -0
  910. turbine_data-0.1.0/src/turbine/application/analysis/check_catalog_service.py +8 -0
  911. turbine_data-0.1.0/src/turbine/application/analysis/code_lens.py +347 -0
  912. turbine_data-0.1.0/src/turbine/application/analysis/command.py +501 -0
  913. turbine_data-0.1.0/src/turbine/application/analysis/completion.py +770 -0
  914. turbine_data-0.1.0/src/turbine/application/analysis/dashboard_data.py +234 -0
  915. turbine_data-0.1.0/src/turbine/application/analysis/datasource_revalidation.py +167 -0
  916. turbine_data-0.1.0/src/turbine/application/analysis/definition.py +91 -0
  917. turbine_data-0.1.0/src/turbine/application/analysis/diagnostics.py +172 -0
  918. turbine_data-0.1.0/src/turbine/application/analysis/dismissal_filter.py +45 -0
  919. turbine_data-0.1.0/src/turbine/application/analysis/document_link.py +344 -0
  920. turbine_data-0.1.0/src/turbine/application/analysis/drift_mapping.py +77 -0
  921. turbine_data-0.1.0/src/turbine/application/analysis/hover.py +139 -0
  922. turbine_data-0.1.0/src/turbine/application/analysis/indexing.py +92 -0
  923. turbine_data-0.1.0/src/turbine/application/analysis/lint.py +317 -0
  924. turbine_data-0.1.0/src/turbine/application/analysis/lsp_client_port.py +137 -0
  925. turbine_data-0.1.0/src/turbine/application/analysis/project_setup.py +109 -0
  926. turbine_data-0.1.0/src/turbine/application/analysis/project_status.py +23 -0
  927. turbine_data-0.1.0/src/turbine/application/analysis/rename.py +176 -0
  928. turbine_data-0.1.0/src/turbine/application/analysis/run_check_resolver.py +66 -0
  929. turbine_data-0.1.0/src/turbine/application/analysis/schema_validation.py +351 -0
  930. turbine_data-0.1.0/src/turbine/application/analysis/sidebar_resource_creation.py +470 -0
  931. turbine_data-0.1.0/src/turbine/application/analysis/test_datasource.py +47 -0
  932. turbine_data-0.1.0/src/turbine/application/analysis/threshold_hint.py +220 -0
  933. turbine_data-0.1.0/src/turbine/application/analysis/tour_service.py +188 -0
  934. turbine_data-0.1.0/src/turbine/application/analysis/tune_check.py +922 -0
  935. turbine_data-0.1.0/src/turbine/application/analysis/versioning_surface.py +316 -0
  936. turbine_data-0.1.0/src/turbine/application/codegen/__init__.py +6 -0
  937. turbine_data-0.1.0/src/turbine/application/codegen/plan.py +43 -0
  938. turbine_data-0.1.0/src/turbine/application/codegen/use_case.py +135 -0
  939. turbine_data-0.1.0/src/turbine/application/dashboard/__init__.py +12 -0
  940. turbine_data-0.1.0/src/turbine/application/dashboard/autobind.py +68 -0
  941. turbine_data-0.1.0/src/turbine/application/dashboard/crossfilter.py +90 -0
  942. turbine_data-0.1.0/src/turbine/application/dashboard/page_resolver.py +278 -0
  943. turbine_data-0.1.0/src/turbine/application/dashboard/picker_options.py +40 -0
  944. turbine_data-0.1.0/src/turbine/application/diagnostics.py +63 -0
  945. turbine_data-0.1.0/src/turbine/application/format_registry.py +158 -0
  946. turbine_data-0.1.0/src/turbine/application/implementation_dispatch.py +128 -0
  947. turbine_data-0.1.0/src/turbine/application/lsp/__init__.py +0 -0
  948. turbine_data-0.1.0/src/turbine/application/lsp/formatting_service.py +139 -0
  949. turbine_data-0.1.0/src/turbine/application/operations/__init__.py +35 -0
  950. turbine_data-0.1.0/src/turbine/application/operations/bump_contract.py +115 -0
  951. turbine_data-0.1.0/src/turbine/application/operations/check.py +665 -0
  952. turbine_data-0.1.0/src/turbine/application/operations/check_connectivity.py +42 -0
  953. turbine_data-0.1.0/src/turbine/application/operations/collector.py +315 -0
  954. turbine_data-0.1.0/src/turbine/application/operations/diff_contract.py +104 -0
  955. turbine_data-0.1.0/src/turbine/application/operations/diff_project.py +88 -0
  956. turbine_data-0.1.0/src/turbine/application/operations/flag_coalescer.py +52 -0
  957. turbine_data-0.1.0/src/turbine/application/operations/flag_planner.py +57 -0
  958. turbine_data-0.1.0/src/turbine/application/operations/project_results.py +52 -0
  959. turbine_data-0.1.0/src/turbine/application/operations/project_summary.py +82 -0
  960. turbine_data-0.1.0/src/turbine/application/operations/run_plan.py +55 -0
  961. turbine_data-0.1.0/src/turbine/application/operations/seed.py +32 -0
  962. turbine_data-0.1.0/src/turbine/application/operations/stream_consumer.py +162 -0
  963. turbine_data-0.1.0/src/turbine/application/operations/validate_schema.py +131 -0
  964. turbine_data-0.1.0/src/turbine/application/project_initialization.py +266 -0
  965. turbine_data-0.1.0/src/turbine/application/quality/__init__.py +0 -0
  966. turbine_data-0.1.0/src/turbine/application/quality/queries.py +17 -0
  967. turbine_data-0.1.0/src/turbine/application/quality/schema_runner.py +167 -0
  968. turbine_data-0.1.0/src/turbine/core/__init__.py +0 -0
  969. turbine_data-0.1.0/src/turbine/core/analysis/__init__.py +57 -0
  970. turbine_data-0.1.0/src/turbine/core/analysis/add_check_request.py +29 -0
  971. turbine_data-0.1.0/src/turbine/core/analysis/check_catalog.py +206 -0
  972. turbine_data-0.1.0/src/turbine/core/analysis/check_snippet.py +401 -0
  973. turbine_data-0.1.0/src/turbine/core/analysis/context/__init__.py +19 -0
  974. turbine_data-0.1.0/src/turbine/core/analysis/context/cursor.py +21 -0
  975. turbine_data-0.1.0/src/turbine/core/analysis/context/document.py +51 -0
  976. turbine_data-0.1.0/src/turbine/core/analysis/context/key_context.py +45 -0
  977. turbine_data-0.1.0/src/turbine/core/analysis/context/sql.py +88 -0
  978. turbine_data-0.1.0/src/turbine/core/analysis/context/text.py +52 -0
  979. turbine_data-0.1.0/src/turbine/core/analysis/contract_health.py +146 -0
  980. turbine_data-0.1.0/src/turbine/core/analysis/diagnostic_store.py +74 -0
  981. turbine_data-0.1.0/src/turbine/core/analysis/features/__init__.py +1 -0
  982. turbine_data-0.1.0/src/turbine/core/analysis/features/code_action.py +827 -0
  983. turbine_data-0.1.0/src/turbine/core/analysis/features/code_lens.py +710 -0
  984. turbine_data-0.1.0/src/turbine/core/analysis/features/code_lens_tree.py +407 -0
  985. turbine_data-0.1.0/src/turbine/core/analysis/features/column_refs.py +156 -0
  986. turbine_data-0.1.0/src/turbine/core/analysis/features/completion.py +561 -0
  987. turbine_data-0.1.0/src/turbine/core/analysis/features/definition.py +110 -0
  988. turbine_data-0.1.0/src/turbine/core/analysis/features/document_link.py +39 -0
  989. turbine_data-0.1.0/src/turbine/core/analysis/features/hover.py +214 -0
  990. turbine_data-0.1.0/src/turbine/core/analysis/features/references.py +42 -0
  991. turbine_data-0.1.0/src/turbine/core/analysis/features/rename.py +147 -0
  992. turbine_data-0.1.0/src/turbine/core/analysis/features/semantic_tokens.py +81 -0
  993. turbine_data-0.1.0/src/turbine/core/analysis/features/snippet_builder.py +310 -0
  994. turbine_data-0.1.0/src/turbine/core/analysis/features/symbols.py +86 -0
  995. turbine_data-0.1.0/src/turbine/core/analysis/impact/__init__.py +13 -0
  996. turbine_data-0.1.0/src/turbine/core/analysis/impact/analyzer.py +130 -0
  997. turbine_data-0.1.0/src/turbine/core/analysis/impact/model.py +14 -0
  998. turbine_data-0.1.0/src/turbine/core/analysis/model.py +43 -0
  999. turbine_data-0.1.0/src/turbine/core/analysis/ports.py +213 -0
  1000. turbine_data-0.1.0/src/turbine/core/analysis/protocol.py +739 -0
  1001. turbine_data-0.1.0/src/turbine/core/analysis/quality_leaves.py +125 -0
  1002. turbine_data-0.1.0/src/turbine/core/analysis/quality_source.py +153 -0
  1003. turbine_data-0.1.0/src/turbine/core/analysis/run_rollup.py +149 -0
  1004. turbine_data-0.1.0/src/turbine/core/analysis/schemas/__init__.py +0 -0
  1005. turbine_data-0.1.0/src/turbine/core/analysis/schemas/quality_spec.schema.json +503 -0
  1006. turbine_data-0.1.0/src/turbine/core/analysis/source_spans.py +94 -0
  1007. turbine_data-0.1.0/src/turbine/core/analysis/tokenization/__init__.py +5 -0
  1008. turbine_data-0.1.0/src/turbine/core/analysis/tokenization/sql.py +215 -0
  1009. turbine_data-0.1.0/src/turbine/core/analysis/tree_builder.py +91 -0
  1010. turbine_data-0.1.0/src/turbine/core/analysis/tree_protocol.py +170 -0
  1011. turbine_data-0.1.0/src/turbine/core/analysis/validation_rows.py +141 -0
  1012. turbine_data-0.1.0/src/turbine/core/building_blocks/__init__.py +65 -0
  1013. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/__init__.py +49 -0
  1014. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/builder.py +187 -0
  1015. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/docs_links.py +27 -0
  1016. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/exceptions.py +25 -0
  1017. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/ids.py +111 -0
  1018. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/sink.py +30 -0
  1019. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/source_map.py +39 -0
  1020. turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/types.py +125 -0
  1021. turbine_data-0.1.0/src/turbine/core/building_blocks/events.py +41 -0
  1022. turbine_data-0.1.0/src/turbine/core/building_blocks/file_edits.py +13 -0
  1023. turbine_data-0.1.0/src/turbine/core/building_blocks/schema_constants.py +51 -0
  1024. turbine_data-0.1.0/src/turbine/core/codegen/__init__.py +62 -0
  1025. turbine_data-0.1.0/src/turbine/core/codegen/deduplication.py +30 -0
  1026. turbine_data-0.1.0/src/turbine/core/codegen/model.py +163 -0
  1027. turbine_data-0.1.0/src/turbine/core/codegen/naming.py +40 -0
  1028. turbine_data-0.1.0/src/turbine/core/codegen/plan.py +34 -0
  1029. turbine_data-0.1.0/src/turbine/core/codegen/ports.py +89 -0
  1030. turbine_data-0.1.0/src/turbine/core/codegen/report.py +19 -0
  1031. turbine_data-0.1.0/src/turbine/core/codegen/type_system.py +65 -0
  1032. turbine_data-0.1.0/src/turbine/core/common/__init__.py +214 -0
  1033. turbine_data-0.1.0/src/turbine/core/common/analysis_types.py +48 -0
  1034. turbine_data-0.1.0/src/turbine/core/common/change_types.py +41 -0
  1035. turbine_data-0.1.0/src/turbine/core/common/check_outcome.py +13 -0
  1036. turbine_data-0.1.0/src/turbine/core/common/column_ref_metadata.py +19 -0
  1037. turbine_data-0.1.0/src/turbine/core/common/commands.py +23 -0
  1038. turbine_data-0.1.0/src/turbine/core/common/connection_props.py +127 -0
  1039. turbine_data-0.1.0/src/turbine/core/common/constants.py +36 -0
  1040. turbine_data-0.1.0/src/turbine/core/common/contract_walk.py +78 -0
  1041. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/__init__.py +67 -0
  1042. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/checks.py +440 -0
  1043. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/columns.py +27 -0
  1044. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/spec.py +186 -0
  1045. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/thresholds.py +152 -0
  1046. turbine_data-0.1.0/src/turbine/core/common/dataset_spec/time_column.py +21 -0
  1047. turbine_data-0.1.0/src/turbine/core/common/datasource.py +41 -0
  1048. turbine_data-0.1.0/src/turbine/core/common/datasource_type.py +38 -0
  1049. turbine_data-0.1.0/src/turbine/core/common/datatype_compatibility.py +65 -0
  1050. turbine_data-0.1.0/src/turbine/core/common/duration.py +114 -0
  1051. turbine_data-0.1.0/src/turbine/core/common/error_summary.py +26 -0
  1052. turbine_data-0.1.0/src/turbine/core/common/events.py +59 -0
  1053. turbine_data-0.1.0/src/turbine/core/common/field_doc.py +23 -0
  1054. turbine_data-0.1.0/src/turbine/core/common/file_edits.py +57 -0
  1055. turbine_data-0.1.0/src/turbine/core/common/file_sync.py +28 -0
  1056. turbine_data-0.1.0/src/turbine/core/common/identifiers.py +127 -0
  1057. turbine_data-0.1.0/src/turbine/core/common/introspection_cache.py +61 -0
  1058. turbine_data-0.1.0/src/turbine/core/common/layout.py +27 -0
  1059. turbine_data-0.1.0/src/turbine/core/common/logical_type.py +47 -0
  1060. turbine_data-0.1.0/src/turbine/core/common/matching.py +41 -0
  1061. turbine_data-0.1.0/src/turbine/core/common/parsing.py +27 -0
  1062. turbine_data-0.1.0/src/turbine/core/common/ports.py +307 -0
  1063. turbine_data-0.1.0/src/turbine/core/common/quality_dimension.py +57 -0
  1064. turbine_data-0.1.0/src/turbine/core/common/schema_walker.py +438 -0
  1065. turbine_data-0.1.0/src/turbine/core/common/source.py +29 -0
  1066. turbine_data-0.1.0/src/turbine/core/common/timestamp.py +51 -0
  1067. turbine_data-0.1.0/src/turbine/core/common/validation.py +19 -0
  1068. turbine_data-0.1.0/src/turbine/core/contract/__init__.py +119 -0
  1069. turbine_data-0.1.0/src/turbine/core/contract/api_rules.py +600 -0
  1070. turbine_data-0.1.0/src/turbine/core/contract/diagnostic_collector.py +21 -0
  1071. turbine_data-0.1.0/src/turbine/core/contract/diff.py +66 -0
  1072. turbine_data-0.1.0/src/turbine/core/contract/diff_computer.py +251 -0
  1073. turbine_data-0.1.0/src/turbine/core/contract/dismissal.py +45 -0
  1074. turbine_data-0.1.0/src/turbine/core/contract/errors.py +16 -0
  1075. turbine_data-0.1.0/src/turbine/core/contract/events.py +108 -0
  1076. turbine_data-0.1.0/src/turbine/core/contract/lint_rules.py +1346 -0
  1077. turbine_data-0.1.0/src/turbine/core/contract/ports.py +246 -0
  1078. turbine_data-0.1.0/src/turbine/core/contract/reader.py +194 -0
  1079. turbine_data-0.1.0/src/turbine/core/contract/semver.py +138 -0
  1080. turbine_data-0.1.0/src/turbine/core/dashboard/__init__.py +136 -0
  1081. turbine_data-0.1.0/src/turbine/core/dashboard/backend_mode.py +12 -0
  1082. turbine_data-0.1.0/src/turbine/core/dashboard/chart_data.py +920 -0
  1083. turbine_data-0.1.0/src/turbine/core/dashboard/components/__init__.py +0 -0
  1084. turbine_data-0.1.0/src/turbine/core/dashboard/components/charts.py +923 -0
  1085. turbine_data-0.1.0/src/turbine/core/dashboard/components/data.py +184 -0
  1086. turbine_data-0.1.0/src/turbine/core/dashboard/components/display.py +20 -0
  1087. turbine_data-0.1.0/src/turbine/core/dashboard/components/layout.py +214 -0
  1088. turbine_data-0.1.0/src/turbine/core/dashboard/dashboard_model.py +169 -0
  1089. turbine_data-0.1.0/src/turbine/core/dashboard/dataset.py +145 -0
  1090. turbine_data-0.1.0/src/turbine/core/dashboard/errors.py +7 -0
  1091. turbine_data-0.1.0/src/turbine/core/dashboard/ext.py +78 -0
  1092. turbine_data-0.1.0/src/turbine/core/dashboard/field_ref.py +29 -0
  1093. turbine_data-0.1.0/src/turbine/core/dashboard/filter_translator.py +111 -0
  1094. turbine_data-0.1.0/src/turbine/core/dashboard/health.py +111 -0
  1095. turbine_data-0.1.0/src/turbine/core/dashboard/in_memory_dataset.py +205 -0
  1096. turbine_data-0.1.0/src/turbine/core/dashboard/injection.py +144 -0
  1097. turbine_data-0.1.0/src/turbine/core/dashboard/interactions.py +84 -0
  1098. turbine_data-0.1.0/src/turbine/core/dashboard/keys.py +36 -0
  1099. turbine_data-0.1.0/src/turbine/core/dashboard/models.py +70 -0
  1100. turbine_data-0.1.0/src/turbine/core/dashboard/query.py +174 -0
  1101. turbine_data-0.1.0/src/turbine/core/dashboard/selection_store.py +184 -0
  1102. turbine_data-0.1.0/src/turbine/core/dashboard/table_view.py +35 -0
  1103. turbine_data-0.1.0/src/turbine/core/dashboard/theme.py +55 -0
  1104. turbine_data-0.1.0/src/turbine/core/events.py +65 -0
  1105. turbine_data-0.1.0/src/turbine/core/onboarding/__init__.py +5 -0
  1106. turbine_data-0.1.0/src/turbine/core/onboarding/anchors.py +47 -0
  1107. turbine_data-0.1.0/src/turbine/core/onboarding/events.py +23 -0
  1108. turbine_data-0.1.0/src/turbine/core/onboarding/ports.py +55 -0
  1109. turbine_data-0.1.0/src/turbine/core/onboarding/predicates.py +109 -0
  1110. turbine_data-0.1.0/src/turbine/core/onboarding/skip_edits.py +78 -0
  1111. turbine_data-0.1.0/src/turbine/core/onboarding/step.py +59 -0
  1112. turbine_data-0.1.0/src/turbine/core/onboarding/step_watcher.py +90 -0
  1113. turbine_data-0.1.0/src/turbine/core/onboarding/tours.py +194 -0
  1114. turbine_data-0.1.0/src/turbine/core/quality/__init__.py +100 -0
  1115. turbine_data-0.1.0/src/turbine/core/quality/cancel_event.py +33 -0
  1116. turbine_data-0.1.0/src/turbine/core/quality/check_results.py +335 -0
  1117. turbine_data-0.1.0/src/turbine/core/quality/check_runner.py +37 -0
  1118. turbine_data-0.1.0/src/turbine/core/quality/check_validation.py +205 -0
  1119. turbine_data-0.1.0/src/turbine/core/quality/datasource.py +63 -0
  1120. turbine_data-0.1.0/src/turbine/core/quality/events.py +442 -0
  1121. turbine_data-0.1.0/src/turbine/core/quality/flagging_types.py +122 -0
  1122. turbine_data-0.1.0/src/turbine/core/quality/gate.py +73 -0
  1123. turbine_data-0.1.0/src/turbine/core/quality/incremental.py +52 -0
  1124. turbine_data-0.1.0/src/turbine/core/quality/plan/__init__.py +1 -0
  1125. turbine_data-0.1.0/src/turbine/core/quality/plan/dataset_key.py +22 -0
  1126. turbine_data-0.1.0/src/turbine/core/quality/plan/dataset_plan.py +44 -0
  1127. turbine_data-0.1.0/src/turbine/core/quality/plan/errors.py +37 -0
  1128. turbine_data-0.1.0/src/turbine/core/quality/plan/measurement.py +116 -0
  1129. turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/__init__.py +51 -0
  1130. turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/base.py +51 -0
  1131. turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/concrete.py +112 -0
  1132. turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/factory.py +233 -0
  1133. turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/windowed.py +204 -0
  1134. turbine_data-0.1.0/src/turbine/core/quality/plan/requester.py +58 -0
  1135. turbine_data-0.1.0/src/turbine/core/quality/plan/slots.py +112 -0
  1136. turbine_data-0.1.0/src/turbine/core/quality/planning/__init__.py +38 -0
  1137. turbine_data-0.1.0/src/turbine/core/quality/planning/anomaly_requester.py +98 -0
  1138. turbine_data-0.1.0/src/turbine/core/quality/planning/dispatcher.py +46 -0
  1139. turbine_data-0.1.0/src/turbine/core/quality/planning/filter_resolver.py +145 -0
  1140. turbine_data-0.1.0/src/turbine/core/quality/planning/partition.py +41 -0
  1141. turbine_data-0.1.0/src/turbine/core/quality/planning/planner.py +185 -0
  1142. turbine_data-0.1.0/src/turbine/core/quality/planning/requesters.py +176 -0
  1143. turbine_data-0.1.0/src/turbine/core/quality/ports.py +231 -0
  1144. turbine_data-0.1.0/src/turbine/core/quality/run_context.py +41 -0
  1145. turbine_data-0.1.0/src/turbine/core/quality/spec_models.py +274 -0
  1146. turbine_data-0.1.0/src/turbine/core/quality/targets.py +117 -0
  1147. turbine_data-0.1.0/src/turbine/core/seed/__init__.py +7 -0
  1148. turbine_data-0.1.0/src/turbine/core/seed/ports.py +24 -0
  1149. turbine_data-0.1.0/src/turbine/core/seed/row_generator.py +111 -0
  1150. turbine_data-0.1.0/src/turbine/core/seed/types.py +42 -0
  1151. turbine_data-0.1.0/src/turbine/core/shared/__init__.py +7 -0
  1152. turbine_data-0.1.0/src/turbine/core/shared/filter_expr.py +71 -0
  1153. turbine_data-0.1.0/src/turbine/core/shared/primary_key.py +3 -0
  1154. turbine_data-0.1.0/src/turbine/core/shared/record_batch.py +3 -0
  1155. turbine_data-0.1.0/src/turbine/core/tuning/__init__.py +76 -0
  1156. turbine_data-0.1.0/src/turbine/core/tuning/mode_detection.py +19 -0
  1157. turbine_data-0.1.0/src/turbine/core/tuning/model.py +169 -0
  1158. turbine_data-0.1.0/src/turbine/core/tuning/query_builder.py +263 -0
  1159. turbine_data-0.1.0/src/turbine/core/tuning/registry.py +407 -0
  1160. turbine_data-0.1.0/src/turbine/core/tuning/sla.py +86 -0
  1161. turbine_data-0.1.0/src/turbine/core/tuning/stats.py +95 -0
  1162. turbine_data-0.1.0/src/turbine/core/tuning/verdict.py +251 -0
  1163. turbine_data-0.1.0/src/turbine/core/tuning/yaml_editor.py +350 -0
  1164. turbine_data-0.1.0/src/turbine/core/validation/__init__.py +14 -0
  1165. turbine_data-0.1.0/src/turbine/core/validation/detector.py +71 -0
  1166. turbine_data-0.1.0/src/turbine/core/validation/events.py +42 -0
  1167. turbine_data-0.1.0/src/turbine/core/validation/model.py +164 -0
  1168. turbine_data-0.1.0/src/turbine/core/validation/rules.py +70 -0
  1169. turbine_data-0.1.0/src/turbine/core/validation/validator.py +108 -0
  1170. turbine_data-0.1.0/src/turbine/data/__init__.py +1 -0
  1171. turbine_data-0.1.0/src/turbine/data/enexis_domains.yml +1 -0
  1172. turbine_data-0.1.0/src/turbine/infra/__init__.py +0 -0
  1173. turbine_data-0.1.0/src/turbine/infra/config.py +215 -0
  1174. turbine_data-0.1.0/src/turbine/infra/database/__init__.py +14 -0
  1175. turbine_data-0.1.0/src/turbine/infra/database/engine.py +50 -0
  1176. turbine_data-0.1.0/src/turbine/infra/database/metadata_store.py +130 -0
  1177. turbine_data-0.1.0/src/turbine/infra/database/migrations/__init__.py +0 -0
  1178. turbine_data-0.1.0/src/turbine/infra/database/migrations/env.py +50 -0
  1179. turbine_data-0.1.0/src/turbine/infra/database/migrations/runner.py +52 -0
  1180. turbine_data-0.1.0/src/turbine/infra/database/migrations/script.py.mako +24 -0
  1181. turbine_data-0.1.0/src/turbine/infra/database/migrations/versions/001_initial.py +166 -0
  1182. turbine_data-0.1.0/src/turbine/infra/database/migrations/versions/__init__.py +0 -0
  1183. turbine_data-0.1.0/src/turbine/infra/database/models.py +132 -0
  1184. turbine_data-0.1.0/src/turbine/infra/database/session.py +9 -0
  1185. turbine_data-0.1.0/src/turbine/infra/database/sql_helpers.py +23 -0
  1186. turbine_data-0.1.0/src/turbine/infra/database/types.py +37 -0
  1187. turbine_data-0.1.0/src/turbine/infra/database/url.py +115 -0
  1188. turbine_data-0.1.0/src/turbine/infra/events.py +52 -0
  1189. turbine_data-0.1.0/src/turbine/infra/git.py +39 -0
  1190. turbine_data-0.1.0/src/turbine/infra/logging.py +61 -0
  1191. turbine_data-0.1.0/src/turbine/presentation/__init__.py +0 -0
  1192. turbine_data-0.1.0/src/turbine/presentation/api/__init__.py +0 -0
  1193. turbine_data-0.1.0/src/turbine/presentation/api/app.py +46 -0
  1194. turbine_data-0.1.0/src/turbine/presentation/api/dependencies.py +36 -0
  1195. turbine_data-0.1.0/src/turbine/presentation/api/docs.py +103 -0
  1196. turbine_data-0.1.0/src/turbine/presentation/api/exceptions.py +109 -0
  1197. turbine_data-0.1.0/src/turbine/presentation/api/models.py +331 -0
  1198. turbine_data-0.1.0/src/turbine/presentation/api/router_discovery.py +233 -0
  1199. turbine_data-0.1.0/src/turbine/presentation/api/routers/__init__.py +0 -0
  1200. turbine_data-0.1.0/src/turbine/presentation/api/routers/checks.py +90 -0
  1201. turbine_data-0.1.0/src/turbine/presentation/api/routers/contracts.py +81 -0
  1202. turbine_data-0.1.0/src/turbine/presentation/api/routers/dashboard.py +325 -0
  1203. turbine_data-0.1.0/src/turbine/presentation/api/routers/flagged_rows.py +57 -0
  1204. turbine_data-0.1.0/src/turbine/presentation/api/routers/helpers.py +42 -0
  1205. turbine_data-0.1.0/src/turbine/presentation/api/routers/runs.py +172 -0
  1206. turbine_data-0.1.0/src/turbine/presentation/api/routers/status.py +38 -0
  1207. turbine_data-0.1.0/src/turbine/presentation/api/routers/validate.py +41 -0
  1208. turbine_data-0.1.0/src/turbine/presentation/api/settings.py +12 -0
  1209. turbine_data-0.1.0/src/turbine/presentation/cli/__init__.py +29 -0
  1210. turbine_data-0.1.0/src/turbine/presentation/cli/app.py +85 -0
  1211. turbine_data-0.1.0/src/turbine/presentation/cli/codegen_factory.py +11 -0
  1212. turbine_data-0.1.0/src/turbine/presentation/cli/commands/__init__.py +0 -0
  1213. turbine_data-0.1.0/src/turbine/presentation/cli/commands/add_check_flow.py +220 -0
  1214. turbine_data-0.1.0/src/turbine/presentation/cli/commands/bump.py +161 -0
  1215. turbine_data-0.1.0/src/turbine/presentation/cli/commands/check.py +161 -0
  1216. turbine_data-0.1.0/src/turbine/presentation/cli/commands/check_pipeline.py +283 -0
  1217. turbine_data-0.1.0/src/turbine/presentation/cli/commands/ci.py +297 -0
  1218. turbine_data-0.1.0/src/turbine/presentation/cli/commands/common.py +78 -0
  1219. turbine_data-0.1.0/src/turbine/presentation/cli/commands/dashboard.py +98 -0
  1220. turbine_data-0.1.0/src/turbine/presentation/cli/commands/generate.py +332 -0
  1221. turbine_data-0.1.0/src/turbine/presentation/cli/commands/init.py +138 -0
  1222. turbine_data-0.1.0/src/turbine/presentation/cli/commands/lint.py +68 -0
  1223. turbine_data-0.1.0/src/turbine/presentation/cli/commands/new.py +724 -0
  1224. turbine_data-0.1.0/src/turbine/presentation/cli/commands/seed.py +72 -0
  1225. turbine_data-0.1.0/src/turbine/presentation/cli/commands/serve.py +130 -0
  1226. turbine_data-0.1.0/src/turbine/presentation/cli/commands/status.py +151 -0
  1227. turbine_data-0.1.0/src/turbine/presentation/cli/commands/validate.py +105 -0
  1228. turbine_data-0.1.0/src/turbine/presentation/cli/context.py +127 -0
  1229. turbine_data-0.1.0/src/turbine/presentation/cli/display/__init__.py +38 -0
  1230. turbine_data-0.1.0/src/turbine/presentation/cli/display/check_report.py +495 -0
  1231. turbine_data-0.1.0/src/turbine/presentation/cli/display/diff_report.py +51 -0
  1232. turbine_data-0.1.0/src/turbine/presentation/cli/display/file_resolver.py +44 -0
  1233. turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/__init__.py +15 -0
  1234. turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/concise.py +31 -0
  1235. turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/full.py +147 -0
  1236. turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/json.py +64 -0
  1237. turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/junit.py +141 -0
  1238. turbine_data-0.1.0/src/turbine/presentation/cli/display/human_summary.py +209 -0
  1239. turbine_data-0.1.0/src/turbine/presentation/cli/display/renderer.py +161 -0
  1240. turbine_data-0.1.0/src/turbine/presentation/cli/display/status_table.py +60 -0
  1241. turbine_data-0.1.0/src/turbine/presentation/cli/display/validation.py +104 -0
  1242. turbine_data-0.1.0/src/turbine/presentation/cli/error_handling.py +103 -0
  1243. turbine_data-0.1.0/src/turbine/presentation/cli/exit_status.py +11 -0
  1244. turbine_data-0.1.0/src/turbine/presentation/cli/gate_parsing.py +63 -0
  1245. turbine_data-0.1.0/src/turbine/presentation/cli/picker/__init__.py +6 -0
  1246. turbine_data-0.1.0/src/turbine/presentation/cli/picker/fuzzy.py +66 -0
  1247. turbine_data-0.1.0/src/turbine/presentation/cli/picker/picker.py +124 -0
  1248. turbine_data-0.1.0/src/turbine/presentation/cli/picker/renderer.py +144 -0
  1249. turbine_data-0.1.0/src/turbine/presentation/cli/picker/session.py +128 -0
  1250. turbine_data-0.1.0/src/turbine/presentation/cli/printer.py +65 -0
  1251. turbine_data-0.1.0/src/turbine/presentation/cli/progress.py +320 -0
  1252. turbine_data-0.1.0/src/turbine/presentation/dashboard/__init__.py +0 -0
  1253. turbine_data-0.1.0/src/turbine/presentation/dashboard/app.py +282 -0
  1254. turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_builders.py +260 -0
  1255. turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_pipeline.py +167 -0
  1256. turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_registry.py +61 -0
  1257. turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_spec.py +59 -0
  1258. turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_specs.py +296 -0
  1259. turbine_data-0.1.0/src/turbine/presentation/dashboard/echarts_models.py +1315 -0
  1260. turbine_data-0.1.0/src/turbine/presentation/dashboard/health_badge.py +25 -0
  1261. turbine_data-0.1.0/src/turbine/presentation/dashboard/render_context.py +30 -0
  1262. turbine_data-0.1.0/src/turbine/presentation/dashboard/renderer.py +639 -0
  1263. turbine_data-0.1.0/src/turbine/presentation/dashboard/sidebar.py +102 -0
  1264. turbine_data-0.1.0/src/turbine/presentation/dashboard/state.py +22 -0
  1265. turbine_data-0.1.0/src/turbine/presentation/lsp/__init__.py +1 -0
  1266. turbine_data-0.1.0/src/turbine/presentation/lsp/api/__init__.py +538 -0
  1267. turbine_data-0.1.0/src/turbine/presentation/lsp/api/diagnostic_refresh.py +18 -0
  1268. turbine_data-0.1.0/src/turbine/presentation/lsp/api/diagnostics.py +75 -0
  1269. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/__init__.py +1 -0
  1270. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/cancel.py +31 -0
  1271. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change.py +68 -0
  1272. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_configuration.py +28 -0
  1273. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_watched_files.py +33 -0
  1274. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_workspace.py +43 -0
  1275. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_close.py +28 -0
  1276. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_open.py +37 -0
  1277. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_save.py +29 -0
  1278. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/file_context.py +37 -0
  1279. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/initialized.py +89 -0
  1280. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/telemetry.py +33 -0
  1281. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/work_done_progress_cancel.py +32 -0
  1282. turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/workspace_scan.py +24 -0
  1283. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/__init__.py +1 -0
  1284. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/code_actions.py +322 -0
  1285. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/code_lens.py +42 -0
  1286. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/completion.py +101 -0
  1287. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/dashboard_data.py +84 -0
  1288. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/definition.py +44 -0
  1289. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/diagnostic.py +79 -0
  1290. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/document_link.py +43 -0
  1291. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/document_symbols.py +70 -0
  1292. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/execute_command.py +29 -0
  1293. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/format.py +30 -0
  1294. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/format_range.py +33 -0
  1295. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/hover.py +44 -0
  1296. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/list_checks.py +96 -0
  1297. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/list_datasources.py +46 -0
  1298. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_list.py +24 -0
  1299. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_run.py +216 -0
  1300. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_status.py +24 -0
  1301. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_watch.py +98 -0
  1302. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/project_status.py +24 -0
  1303. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/references.py +86 -0
  1304. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/rename.py +80 -0
  1305. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/run_check.py +382 -0
  1306. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/scaffold_project.py +24 -0
  1307. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/semantic_tokens.py +90 -0
  1308. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/test_datasource.py +42 -0
  1309. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/tree.py +89 -0
  1310. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/tune_check.py +230 -0
  1311. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/validate_schema.py +74 -0
  1312. turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/workspace_symbols.py +42 -0
  1313. turbine_data-0.1.0/src/turbine/presentation/lsp/api/traits.py +186 -0
  1314. turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/__init__.py +1 -0
  1315. turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/datasources.py +100 -0
  1316. turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/registry.py +99 -0
  1317. turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/workspace.py +552 -0
  1318. turbine_data-0.1.0/src/turbine/presentation/lsp/api/work_done_progress.py +296 -0
  1319. turbine_data-0.1.0/src/turbine/presentation/lsp/code_writer.py +78 -0
  1320. turbine_data-0.1.0/src/turbine/presentation/lsp/events.py +60 -0
  1321. turbine_data-0.1.0/src/turbine/presentation/lsp/lsp_port.py +437 -0
  1322. turbine_data-0.1.0/src/turbine/presentation/lsp/main_loop.py +297 -0
  1323. turbine_data-0.1.0/src/turbine/presentation/lsp/mapping.py +206 -0
  1324. turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/__init__.py +5 -0
  1325. turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/changes.py +35 -0
  1326. turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/thread.py +162 -0
  1327. turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/__init__.py +1 -0
  1328. turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/asyncio_pool.py +113 -0
  1329. turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/pool.py +30 -0
  1330. turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/schedule.py +74 -0
  1331. turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/task.py +57 -0
  1332. turbine_data-0.1.0/src/turbine/presentation/lsp/server.py +633 -0
  1333. turbine_data-0.1.0/src/turbine/presentation/lsp/session/__init__.py +1 -0
  1334. turbine_data-0.1.0/src/turbine/presentation/lsp/session/cancellation.py +25 -0
  1335. turbine_data-0.1.0/src/turbine/presentation/lsp/session/capabilities.py +12 -0
  1336. turbine_data-0.1.0/src/turbine/presentation/lsp/session/client.py +209 -0
  1337. turbine_data-0.1.0/src/turbine/presentation/lsp/session/datasource_connections.py +48 -0
  1338. turbine_data-0.1.0/src/turbine/presentation/lsp/session/index.py +23 -0
  1339. turbine_data-0.1.0/src/turbine/presentation/lsp/session/progress_tokens.py +59 -0
  1340. turbine_data-0.1.0/src/turbine/presentation/lsp/session/project_datasource_services.py +152 -0
  1341. turbine_data-0.1.0/src/turbine/presentation/lsp/session/request_queue.py +140 -0
  1342. turbine_data-0.1.0/src/turbine/presentation/lsp/session/services.py +124 -0
  1343. turbine_data-0.1.0/src/turbine/presentation/lsp/session/session.py +267 -0
  1344. turbine_data-0.1.0/src/turbine/presentation/lsp/session/settings.py +11 -0
  1345. turbine_data-0.1.0/src/turbine/presentation/lsp/session/snapshot.py +84 -0
  1346. turbine_data-0.1.0/src/turbine/presentation/lsp/session/tree_notifier.py +28 -0
  1347. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/__init__.py +1 -0
  1348. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/connection.py +58 -0
  1349. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/envelope.py +65 -0
  1350. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/framing.py +52 -0
  1351. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/reader.py +28 -0
  1352. turbine_data-0.1.0/src/turbine/presentation/lsp/transport/writer.py +11 -0
  1353. turbine_data-0.1.0/src/turbine/presentation/quality/__init__.py +1 -0
  1354. turbine_data-0.1.0/src/turbine/presentation/quality/datasource_opener.py +226 -0
  1355. turbine_data-0.1.0/src/turbine/presentation/quality/progress_log.py +207 -0
  1356. turbine_data-0.1.0/src/turbine/templates/__init__.py +0 -0
  1357. turbine_data-0.1.0/src/turbine/templates/dashboard/__init__.py +0 -0
  1358. turbine_data-0.1.0/src/turbine/templates/dashboard/components/__init__.py +0 -0
  1359. turbine_data-0.1.0/src/turbine/templates/dashboard/logic/__init__.py +0 -0
  1360. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/__init__.py +0 -0
  1361. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/alerts.py +71 -0
  1362. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/contracts.py +62 -0
  1363. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/flagged_rows.py +30 -0
  1364. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/overview.py +62 -0
  1365. turbine_data-0.1.0/src/turbine/templates/dashboard/pages/quality_matrix.py +72 -0
  1366. turbine_data-0.1.0/src/turbine/templates/dashboard/resources/__init__.py +0 -0
  1367. turbine_data-0.1.0/tach.toml +251 -0
  1368. turbine_data-0.1.0/tests/__init__.py +0 -0
  1369. turbine_data-0.1.0/tests/adapters/__init__.py +0 -0
  1370. turbine_data-0.1.0/tests/adapters/analysis/__init__.py +0 -0
  1371. turbine_data-0.1.0/tests/adapters/analysis/test_file_code_writer.py +153 -0
  1372. turbine_data-0.1.0/tests/adapters/api/__init__.py +0 -0
  1373. turbine_data-0.1.0/tests/adapters/api/test_abstract_model.py +128 -0
  1374. turbine_data-0.1.0/tests/adapters/audit/__init__.py +0 -0
  1375. turbine_data-0.1.0/tests/adapters/audit/test_check_result_writer.py +99 -0
  1376. turbine_data-0.1.0/tests/adapters/audit/test_database_audit_trail.py +209 -0
  1377. turbine_data-0.1.0/tests/adapters/audit/test_run_buffer.py +126 -0
  1378. turbine_data-0.1.0/tests/adapters/audit/test_subscribers.py +216 -0
  1379. turbine_data-0.1.0/tests/adapters/codegen/__init__.py +0 -0
  1380. turbine_data-0.1.0/tests/adapters/codegen/api/__init__.py +0 -0
  1381. turbine_data-0.1.0/tests/adapters/codegen/api/conftest.py +68 -0
  1382. turbine_data-0.1.0/tests/adapters/codegen/api/test_generated_app.py +1330 -0
  1383. turbine_data-0.1.0/tests/adapters/codegen/api/test_layout.py +73 -0
  1384. turbine_data-0.1.0/tests/adapters/codegen/api/test_mount_renderer.py +132 -0
  1385. turbine_data-0.1.0/tests/adapters/codegen/api/test_plan.py +158 -0
  1386. turbine_data-0.1.0/tests/adapters/codegen/api/test_schema_model.py +138 -0
  1387. turbine_data-0.1.0/tests/adapters/codegen/api/test_schema_router.py +469 -0
  1388. turbine_data-0.1.0/tests/adapters/codegen/api/test_slow_count.py +66 -0
  1389. turbine_data-0.1.0/tests/adapters/codegen/conftest.py +18 -0
  1390. turbine_data-0.1.0/tests/adapters/codegen/test_ast_utils.py +134 -0
  1391. turbine_data-0.1.0/tests/adapters/codegen/test_ci.py +106 -0
  1392. turbine_data-0.1.0/tests/adapters/codegen/test_contract_renderer.py +76 -0
  1393. turbine_data-0.1.0/tests/adapters/codegen/test_datasource_renderer.py +122 -0
  1394. turbine_data-0.1.0/tests/adapters/codegen/test_formatter.py +126 -0
  1395. turbine_data-0.1.0/tests/adapters/codegen/test_jinja_renderers.py +114 -0
  1396. turbine_data-0.1.0/tests/adapters/codegen/test_sweeper.py +138 -0
  1397. turbine_data-0.1.0/tests/adapters/codegen/test_writer.py +107 -0
  1398. turbine_data-0.1.0/tests/adapters/conftest.py +25 -0
  1399. turbine_data-0.1.0/tests/adapters/contract/__init__.py +0 -0
  1400. turbine_data-0.1.0/tests/adapters/contract/test_domain_registry.py +91 -0
  1401. turbine_data-0.1.0/tests/adapters/contract/test_repo_list_lookup.py +74 -0
  1402. turbine_data-0.1.0/tests/adapters/dashboard/__init__.py +0 -0
  1403. turbine_data-0.1.0/tests/adapters/dashboard/test_api_dataset.py +174 -0
  1404. turbine_data-0.1.0/tests/adapters/dashboard/test_api_dataset_aggregations.py +337 -0
  1405. turbine_data-0.1.0/tests/adapters/dashboard/test_api_dispatcher.py +289 -0
  1406. turbine_data-0.1.0/tests/adapters/dashboard/test_backend_loader.py +76 -0
  1407. turbine_data-0.1.0/tests/adapters/dashboard/test_component_discovery.py +105 -0
  1408. turbine_data-0.1.0/tests/adapters/dashboard/test_config.py +36 -0
  1409. turbine_data-0.1.0/tests/adapters/dashboard/test_demo_dispatcher.py +127 -0
  1410. turbine_data-0.1.0/tests/adapters/dashboard/test_demo_models.py +126 -0
  1411. turbine_data-0.1.0/tests/adapters/dashboard/test_page_discovery.py +92 -0
  1412. turbine_data-0.1.0/tests/adapters/databases/__init__.py +0 -0
  1413. turbine_data-0.1.0/tests/adapters/databases/duckdb/__init__.py +0 -0
  1414. turbine_data-0.1.0/tests/adapters/databases/duckdb/test_duckdb.py +20 -0
  1415. turbine_data-0.1.0/tests/adapters/databases/postgres/__init__.py +0 -0
  1416. turbine_data-0.1.0/tests/adapters/databases/postgres/test_postgres.py +50 -0
  1417. turbine_data-0.1.0/tests/adapters/databases/snowflake/__init__.py +0 -0
  1418. turbine_data-0.1.0/tests/adapters/databases/snowflake/test_snowflake.py +109 -0
  1419. turbine_data-0.1.0/tests/adapters/databases/test_backend_factory.py +93 -0
  1420. turbine_data-0.1.0/tests/adapters/databases/test_connectivity_probe.py +59 -0
  1421. turbine_data-0.1.0/tests/adapters/databases/test_schema_introspector.py +398 -0
  1422. turbine_data-0.1.0/tests/adapters/databases/test_seed_writer.py +140 -0
  1423. turbine_data-0.1.0/tests/adapters/databases/test_sqlalchemy_backend.py +190 -0
  1424. turbine_data-0.1.0/tests/adapters/databases/test_sqlglot_support.py +175 -0
  1425. turbine_data-0.1.0/tests/adapters/dismissal/__init__.py +0 -0
  1426. turbine_data-0.1.0/tests/adapters/dismissal/test_json_store.py +115 -0
  1427. turbine_data-0.1.0/tests/adapters/events/__init__.py +0 -0
  1428. turbine_data-0.1.0/tests/adapters/events/fixtures/__init__.py +0 -0
  1429. turbine_data-0.1.0/tests/adapters/events/fixtures/subscribers_one.py +25 -0
  1430. turbine_data-0.1.0/tests/adapters/events/test_registry.py +92 -0
  1431. turbine_data-0.1.0/tests/adapters/filesystem/__init__.py +0 -0
  1432. turbine_data-0.1.0/tests/adapters/filesystem/test_contract_repository.py +173 -0
  1433. turbine_data-0.1.0/tests/adapters/filesystem/test_datasource_repository.py +360 -0
  1434. turbine_data-0.1.0/tests/adapters/git/__init__.py +0 -0
  1435. turbine_data-0.1.0/tests/adapters/git/test_git_loader.py +56 -0
  1436. turbine_data-0.1.0/tests/adapters/git/test_previous_version.py +126 -0
  1437. turbine_data-0.1.0/tests/adapters/indexing/__init__.py +0 -0
  1438. turbine_data-0.1.0/tests/adapters/indexing/test_project_index.py +187 -0
  1439. turbine_data-0.1.0/tests/adapters/odcs/__init__.py +0 -0
  1440. turbine_data-0.1.0/tests/adapters/odcs/conftest.py +13 -0
  1441. turbine_data-0.1.0/tests/adapters/odcs/test_column_source_ranges.py +56 -0
  1442. turbine_data-0.1.0/tests/adapters/odcs/test_odcs_roundtrip.py +55 -0
  1443. turbine_data-0.1.0/tests/adapters/odcs/test_reader.py +1422 -0
  1444. turbine_data-0.1.0/tests/adapters/odcs/test_schema_catalog.py +168 -0
  1445. turbine_data-0.1.0/tests/adapters/odcs/test_schema_validation.py +219 -0
  1446. turbine_data-0.1.0/tests/adapters/odcs/test_schema_walker.py +210 -0
  1447. turbine_data-0.1.0/tests/adapters/odcs/test_writer.py +165 -0
  1448. turbine_data-0.1.0/tests/adapters/onboarding/__init__.py +0 -0
  1449. turbine_data-0.1.0/tests/adapters/onboarding/test_timer_scheduler.py +45 -0
  1450. turbine_data-0.1.0/tests/adapters/quality/__init__.py +0 -0
  1451. turbine_data-0.1.0/tests/adapters/quality/python/__init__.py +0 -0
  1452. turbine_data-0.1.0/tests/adapters/quality/python/test_data_loader.py +161 -0
  1453. turbine_data-0.1.0/tests/adapters/quality/python/test_runner.py +115 -0
  1454. turbine_data-0.1.0/tests/adapters/quality/soda/__init__.py +1 -0
  1455. turbine_data-0.1.0/tests/adapters/quality/soda/test_bypass.py +164 -0
  1456. turbine_data-0.1.0/tests/adapters/quality/soda/test_serialization.py +235 -0
  1457. turbine_data-0.1.0/tests/adapters/quality/sql/__init__.py +0 -0
  1458. turbine_data-0.1.0/tests/adapters/quality/sql/test_batched_dataset_executor.py +445 -0
  1459. turbine_data-0.1.0/tests/adapters/quality/sql/test_batched_dataset_writer.py +201 -0
  1460. turbine_data-0.1.0/tests/adapters/quality/sql/test_check_metadata_writer.py +258 -0
  1461. turbine_data-0.1.0/tests/adapters/quality/sql/test_dialect_capabilities.py +77 -0
  1462. turbine_data-0.1.0/tests/adapters/quality/sql/test_fingerprint.py +163 -0
  1463. turbine_data-0.1.0/tests/adapters/quality/sql/test_predicate_renderer.py +181 -0
  1464. turbine_data-0.1.0/tests/adapters/quality/sql/test_quality_view_writer.py +272 -0
  1465. turbine_data-0.1.0/tests/adapters/quality/sql/test_renderer.py +278 -0
  1466. turbine_data-0.1.0/tests/adapters/quality/sql/test_windowed_executor.py +122 -0
  1467. turbine_data-0.1.0/tests/adapters/quality/sql/test_windowed_renderer.py +66 -0
  1468. turbine_data-0.1.0/tests/adapters/quality/test_datasource_opener.py +206 -0
  1469. turbine_data-0.1.0/tests/adapters/quality/test_models.py +129 -0
  1470. turbine_data-0.1.0/tests/adapters/quality/test_reader.py +568 -0
  1471. turbine_data-0.1.0/tests/adapters/schema_validation/__init__.py +0 -0
  1472. turbine_data-0.1.0/tests/adapters/schema_validation/test_descriptor_validator.py +100 -0
  1473. turbine_data-0.1.0/tests/adapters/schema_validation/test_factory.py +47 -0
  1474. turbine_data-0.1.0/tests/adapters/schema_validation/test_handlers.py +656 -0
  1475. turbine_data-0.1.0/tests/adapters/schema_validation/test_registry.py +107 -0
  1476. turbine_data-0.1.0/tests/adapters/schema_validation/test_schema_composition_dedup.py +156 -0
  1477. turbine_data-0.1.0/tests/adapters/telemetry/__init__.py +0 -0
  1478. turbine_data-0.1.0/tests/adapters/telemetry/conftest.py +47 -0
  1479. turbine_data-0.1.0/tests/adapters/telemetry/test_handler.py +67 -0
  1480. turbine_data-0.1.0/tests/adapters/telemetry/test_integration.py +480 -0
  1481. turbine_data-0.1.0/tests/adapters/telemetry/test_logfire_tracer.py +122 -0
  1482. turbine_data-0.1.0/tests/adapters/telemetry/test_provider.py +137 -0
  1483. turbine_data-0.1.0/tests/adapters/telemetry/test_span_capture.py +71 -0
  1484. turbine_data-0.1.0/tests/adapters/yaml/__init__.py +0 -0
  1485. turbine_data-0.1.0/tests/adapters/yaml/test_parser.py +156 -0
  1486. turbine_data-0.1.0/tests/adapters/yaml/test_treesitter_store.py +530 -0
  1487. turbine_data-0.1.0/tests/api/__init__.py +0 -0
  1488. turbine_data-0.1.0/tests/api/runtime/__init__.py +0 -0
  1489. turbine_data-0.1.0/tests/api/runtime/test_base.py +202 -0
  1490. turbine_data-0.1.0/tests/api/runtime/test_caching.py +133 -0
  1491. turbine_data-0.1.0/tests/api/runtime/test_errors.py +107 -0
  1492. turbine_data-0.1.0/tests/api/runtime/test_observability.py +98 -0
  1493. turbine_data-0.1.0/tests/api/runtime/test_openapi.py +143 -0
  1494. turbine_data-0.1.0/tests/api/runtime/test_pagination.py +70 -0
  1495. turbine_data-0.1.0/tests/api/runtime/test_public_api.py +27 -0
  1496. turbine_data-0.1.0/tests/api/runtime/test_query.py +69 -0
  1497. turbine_data-0.1.0/tests/api/runtime/test_rate_limit.py +150 -0
  1498. turbine_data-0.1.0/tests/api/runtime/test_session.py +126 -0
  1499. turbine_data-0.1.0/tests/api/runtime/test_status.py +50 -0
  1500. turbine_data-0.1.0/tests/application/__init__.py +0 -0
  1501. turbine_data-0.1.0/tests/application/analysis/__init__.py +0 -0
  1502. turbine_data-0.1.0/tests/application/analysis/conftest.py +69 -0
  1503. turbine_data-0.1.0/tests/application/analysis/test_add_check_use_case.py +602 -0
  1504. turbine_data-0.1.0/tests/application/analysis/test_check_catalog_service.py +43 -0
  1505. turbine_data-0.1.0/tests/application/analysis/test_code_lens.py +1051 -0
  1506. turbine_data-0.1.0/tests/application/analysis/test_column_description_required_rule.py +188 -0
  1507. turbine_data-0.1.0/tests/application/analysis/test_command.py +940 -0
  1508. turbine_data-0.1.0/tests/application/analysis/test_completion.py +740 -0
  1509. turbine_data-0.1.0/tests/application/analysis/test_dashboard_data.py +306 -0
  1510. turbine_data-0.1.0/tests/application/analysis/test_datasource_revalidation.py +239 -0
  1511. turbine_data-0.1.0/tests/application/analysis/test_diagnostics.py +313 -0
  1512. turbine_data-0.1.0/tests/application/analysis/test_dismissal_filter.py +97 -0
  1513. turbine_data-0.1.0/tests/application/analysis/test_document_link.py +591 -0
  1514. turbine_data-0.1.0/tests/application/analysis/test_domain_completion.py +71 -0
  1515. turbine_data-0.1.0/tests/application/analysis/test_hover.py +226 -0
  1516. turbine_data-0.1.0/tests/application/analysis/test_lint.py +459 -0
  1517. turbine_data-0.1.0/tests/application/analysis/test_primary_key_present_on_schema_rule.py +191 -0
  1518. turbine_data-0.1.0/tests/application/analysis/test_project_datasource_services_open.py +152 -0
  1519. turbine_data-0.1.0/tests/application/analysis/test_project_setup.py +223 -0
  1520. turbine_data-0.1.0/tests/application/analysis/test_project_status.py +53 -0
  1521. turbine_data-0.1.0/tests/application/analysis/test_resource_name_derived_rule.py +96 -0
  1522. turbine_data-0.1.0/tests/application/analysis/test_run_check_resolver.py +124 -0
  1523. turbine_data-0.1.0/tests/application/analysis/test_schema_validation.py +516 -0
  1524. turbine_data-0.1.0/tests/application/analysis/test_sidebar_resource_creation.py +857 -0
  1525. turbine_data-0.1.0/tests/application/analysis/test_test_datasource.py +176 -0
  1526. turbine_data-0.1.0/tests/application/analysis/test_threshold_hint.py +234 -0
  1527. turbine_data-0.1.0/tests/application/analysis/test_tour_service.py +426 -0
  1528. turbine_data-0.1.0/tests/application/analysis/test_tune_check.py +1736 -0
  1529. turbine_data-0.1.0/tests/application/analysis/test_versioning_surface.py +226 -0
  1530. turbine_data-0.1.0/tests/application/codegen/__init__.py +0 -0
  1531. turbine_data-0.1.0/tests/application/codegen/test_plan.py +151 -0
  1532. turbine_data-0.1.0/tests/application/codegen/test_use_case.py +282 -0
  1533. turbine_data-0.1.0/tests/application/conftest.py +11 -0
  1534. turbine_data-0.1.0/tests/application/dashboard/__init__.py +0 -0
  1535. turbine_data-0.1.0/tests/application/dashboard/test_autobind.py +92 -0
  1536. turbine_data-0.1.0/tests/application/dashboard/test_crossfilter.py +158 -0
  1537. turbine_data-0.1.0/tests/application/dashboard/test_dataset_map.py +106 -0
  1538. turbine_data-0.1.0/tests/application/dashboard/test_page_resolver.py +498 -0
  1539. turbine_data-0.1.0/tests/application/lsp/__init__.py +0 -0
  1540. turbine_data-0.1.0/tests/application/lsp/test_formatting_service.py +132 -0
  1541. turbine_data-0.1.0/tests/application/operations/__init__.py +0 -0
  1542. turbine_data-0.1.0/tests/application/operations/conftest.py +24 -0
  1543. turbine_data-0.1.0/tests/application/operations/test_bump_contract.py +183 -0
  1544. turbine_data-0.1.0/tests/application/operations/test_check.py +963 -0
  1545. turbine_data-0.1.0/tests/application/operations/test_check_connectivity.py +122 -0
  1546. turbine_data-0.1.0/tests/application/operations/test_collector.py +384 -0
  1547. turbine_data-0.1.0/tests/application/operations/test_diff_contract.py +146 -0
  1548. turbine_data-0.1.0/tests/application/operations/test_diff_project.py +115 -0
  1549. turbine_data-0.1.0/tests/application/operations/test_flag_coalescer.py +111 -0
  1550. turbine_data-0.1.0/tests/application/operations/test_flag_planner.py +135 -0
  1551. turbine_data-0.1.0/tests/application/operations/test_project_summary.py +222 -0
  1552. turbine_data-0.1.0/tests/application/operations/test_run_plan.py +98 -0
  1553. turbine_data-0.1.0/tests/application/operations/test_seed.py +152 -0
  1554. turbine_data-0.1.0/tests/application/operations/test_stream_consumer.py +320 -0
  1555. turbine_data-0.1.0/tests/application/operations/test_stream_events.py +291 -0
  1556. turbine_data-0.1.0/tests/application/operations/test_stream_unknown_type.py +53 -0
  1557. turbine_data-0.1.0/tests/application/operations/test_validate_schema.py +246 -0
  1558. turbine_data-0.1.0/tests/application/quality/__init__.py +0 -0
  1559. turbine_data-0.1.0/tests/application/quality/planning/__init__.py +0 -0
  1560. turbine_data-0.1.0/tests/application/quality/planning/conftest.py +101 -0
  1561. turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_incremental_lookback.py +156 -0
  1562. turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_plan_grouping.py +73 -0
  1563. turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_requester.py +114 -0
  1564. turbine_data-0.1.0/tests/application/quality/planning/test_dispatcher.py +77 -0
  1565. turbine_data-0.1.0/tests/application/quality/planning/test_filter_resolver.py +99 -0
  1566. turbine_data-0.1.0/tests/application/quality/planning/test_partition.py +44 -0
  1567. turbine_data-0.1.0/tests/application/quality/planning/test_planner.py +149 -0
  1568. turbine_data-0.1.0/tests/application/quality/planning/test_python_requester.py +133 -0
  1569. turbine_data-0.1.0/tests/application/quality/planning/test_requesters_interpret.py +190 -0
  1570. turbine_data-0.1.0/tests/application/quality/planning/test_time_column_resolution.py +88 -0
  1571. turbine_data-0.1.0/tests/application/quality/test_queries.py +40 -0
  1572. turbine_data-0.1.0/tests/application/quality/test_schema_runner.py +201 -0
  1573. turbine_data-0.1.0/tests/application/test_event_publishing_sink.py +53 -0
  1574. turbine_data-0.1.0/tests/application/test_format_registry.py +61 -0
  1575. turbine_data-0.1.0/tests/application/test_project_initialization.py +125 -0
  1576. turbine_data-0.1.0/tests/benchmarks/BENCHMARK.md +46 -0
  1577. turbine_data-0.1.0/tests/benchmarks/DELETION_MANIFEST.md +49 -0
  1578. turbine_data-0.1.0/tests/benchmarks/__init__.py +0 -0
  1579. turbine_data-0.1.0/tests/benchmarks/representative_contract.yml +118 -0
  1580. turbine_data-0.1.0/tests/benchmarks/test_roundtrip.py +152 -0
  1581. turbine_data-0.1.0/tests/conftest.py +70 -0
  1582. turbine_data-0.1.0/tests/core/__init__.py +0 -0
  1583. turbine_data-0.1.0/tests/core/analysis/__init__.py +0 -0
  1584. turbine_data-0.1.0/tests/core/analysis/context/__init__.py +0 -0
  1585. turbine_data-0.1.0/tests/core/analysis/context/test_cursor_context.py +106 -0
  1586. turbine_data-0.1.0/tests/core/analysis/context/test_sql_context.py +78 -0
  1587. turbine_data-0.1.0/tests/core/analysis/context/test_text_utils.py +77 -0
  1588. turbine_data-0.1.0/tests/core/analysis/features/__init__.py +0 -0
  1589. turbine_data-0.1.0/tests/core/analysis/features/test_code_action_generators.py +456 -0
  1590. turbine_data-0.1.0/tests/core/analysis/features/test_code_lens_tree.py +229 -0
  1591. turbine_data-0.1.0/tests/core/analysis/features/test_column_refs.py +267 -0
  1592. turbine_data-0.1.0/tests/core/analysis/features/test_completion_sql.py +68 -0
  1593. turbine_data-0.1.0/tests/core/analysis/features/test_drift_code_actions.py +108 -0
  1594. turbine_data-0.1.0/tests/core/analysis/features/test_generate_data_contract.py +164 -0
  1595. turbine_data-0.1.0/tests/core/analysis/features/test_snippet_builder.py +150 -0
  1596. turbine_data-0.1.0/tests/core/analysis/features/test_workspace_symbols.py +83 -0
  1597. turbine_data-0.1.0/tests/core/analysis/impact/__init__.py +0 -0
  1598. turbine_data-0.1.0/tests/core/analysis/impact/test_impact.py +239 -0
  1599. turbine_data-0.1.0/tests/core/analysis/test_check_catalog.py +133 -0
  1600. turbine_data-0.1.0/tests/core/analysis/test_check_snippet.py +514 -0
  1601. turbine_data-0.1.0/tests/core/analysis/test_contract_health.py +222 -0
  1602. turbine_data-0.1.0/tests/core/analysis/test_diagnostic_store.py +67 -0
  1603. turbine_data-0.1.0/tests/core/analysis/test_quality_leaves.py +357 -0
  1604. turbine_data-0.1.0/tests/core/analysis/test_quality_source.py +242 -0
  1605. turbine_data-0.1.0/tests/core/analysis/test_run_rollup.py +210 -0
  1606. turbine_data-0.1.0/tests/core/analysis/test_run_step_result.py +83 -0
  1607. turbine_data-0.1.0/tests/core/analysis/test_source_spans.py +106 -0
  1608. turbine_data-0.1.0/tests/core/analysis/test_tree_protocol.py +25 -0
  1609. turbine_data-0.1.0/tests/core/analysis/test_validation_rows.py +241 -0
  1610. turbine_data-0.1.0/tests/core/analysis/tokenization/__init__.py +0 -0
  1611. turbine_data-0.1.0/tests/core/analysis/tokenization/test_sql_tokenizer.py +131 -0
  1612. turbine_data-0.1.0/tests/core/building_blocks/__init__.py +0 -0
  1613. turbine_data-0.1.0/tests/core/building_blocks/diagnostics/__init__.py +0 -0
  1614. turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_builder.py +278 -0
  1615. turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_docs_links.py +12 -0
  1616. turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_exceptions.py +54 -0
  1617. turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_sink.py +58 -0
  1618. turbine_data-0.1.0/tests/core/codegen/__init__.py +0 -0
  1619. turbine_data-0.1.0/tests/core/codegen/test_naming.py +55 -0
  1620. turbine_data-0.1.0/tests/core/codegen/test_type_system.py +103 -0
  1621. turbine_data-0.1.0/tests/core/common/__init__.py +0 -0
  1622. turbine_data-0.1.0/tests/core/common/test_classify_execution_route.py +67 -0
  1623. turbine_data-0.1.0/tests/core/common/test_classify_metric_type.py +58 -0
  1624. turbine_data-0.1.0/tests/core/common/test_contract_metadata.py +71 -0
  1625. turbine_data-0.1.0/tests/core/common/test_duration.py +123 -0
  1626. turbine_data-0.1.0/tests/core/common/test_enum_parsing.py +39 -0
  1627. turbine_data-0.1.0/tests/core/common/test_file_edits.py +51 -0
  1628. turbine_data-0.1.0/tests/core/common/test_identifiers.py +106 -0
  1629. turbine_data-0.1.0/tests/core/common/test_introspection_cache.py +59 -0
  1630. turbine_data-0.1.0/tests/core/common/test_ir.py +67 -0
  1631. turbine_data-0.1.0/tests/core/common/test_matching.py +21 -0
  1632. turbine_data-0.1.0/tests/core/common/test_schema_walker_coverage.py +301 -0
  1633. turbine_data-0.1.0/tests/core/common/test_sla.py +23 -0
  1634. turbine_data-0.1.0/tests/core/common/test_thresholds.py +166 -0
  1635. turbine_data-0.1.0/tests/core/common/test_timestamp.py +72 -0
  1636. turbine_data-0.1.0/tests/core/conftest.py +166 -0
  1637. turbine_data-0.1.0/tests/core/contract/__init__.py +0 -0
  1638. turbine_data-0.1.0/tests/core/contract/test_anomaly_time_column_rule.py +100 -0
  1639. turbine_data-0.1.0/tests/core/contract/test_api_rules.py +576 -0
  1640. turbine_data-0.1.0/tests/core/contract/test_api_runtime_metadata.py +278 -0
  1641. turbine_data-0.1.0/tests/core/contract/test_check_dimension_required.py +101 -0
  1642. turbine_data-0.1.0/tests/core/contract/test_check_threshold_required.py +151 -0
  1643. turbine_data-0.1.0/tests/core/contract/test_column_description_required_rule.py +112 -0
  1644. turbine_data-0.1.0/tests/core/contract/test_datasource_events.py +31 -0
  1645. turbine_data-0.1.0/tests/core/contract/test_diff_computer.py +209 -0
  1646. turbine_data-0.1.0/tests/core/contract/test_dismissal.py +62 -0
  1647. turbine_data-0.1.0/tests/core/contract/test_domain_not_in_allowed_list_rule.py +94 -0
  1648. turbine_data-0.1.0/tests/core/contract/test_errors.py +42 -0
  1649. turbine_data-0.1.0/tests/core/contract/test_missing_owner_rule.py +68 -0
  1650. turbine_data-0.1.0/tests/core/contract/test_odcs_name_rules.py +100 -0
  1651. turbine_data-0.1.0/tests/core/contract/test_primary_key_present_on_schema_rule.py +128 -0
  1652. turbine_data-0.1.0/tests/core/contract/test_reader.py +125 -0
  1653. turbine_data-0.1.0/tests/core/contract/test_reader_metric_type.py +66 -0
  1654. turbine_data-0.1.0/tests/core/contract/test_required_false_primary_key_rule.py +144 -0
  1655. turbine_data-0.1.0/tests/core/contract/test_resource_name_derived_rule.py +157 -0
  1656. turbine_data-0.1.0/tests/core/contract/test_semver.py +173 -0
  1657. turbine_data-0.1.0/tests/core/contract/test_sla_rules.py +302 -0
  1658. turbine_data-0.1.0/tests/core/contract/test_target_rules.py +350 -0
  1659. turbine_data-0.1.0/tests/core/contract/test_tune_check_datatype_compatibility.py +104 -0
  1660. turbine_data-0.1.0/tests/core/contract/test_validator.py +324 -0
  1661. turbine_data-0.1.0/tests/core/contract/test_window_lint_rules.py +171 -0
  1662. turbine_data-0.1.0/tests/core/dashboard/__init__.py +0 -0
  1663. turbine_data-0.1.0/tests/core/dashboard/conftest.py +56 -0
  1664. turbine_data-0.1.0/tests/core/dashboard/test_backend_mode.py +27 -0
  1665. turbine_data-0.1.0/tests/core/dashboard/test_chart_data.py +1128 -0
  1666. turbine_data-0.1.0/tests/core/dashboard/test_charts.py +670 -0
  1667. turbine_data-0.1.0/tests/core/dashboard/test_components_healthy_field.py +80 -0
  1668. turbine_data-0.1.0/tests/core/dashboard/test_dashboard_model.py +174 -0
  1669. turbine_data-0.1.0/tests/core/dashboard/test_data.py +212 -0
  1670. turbine_data-0.1.0/tests/core/dashboard/test_dataset.py +126 -0
  1671. turbine_data-0.1.0/tests/core/dashboard/test_dataset_api.py +421 -0
  1672. turbine_data-0.1.0/tests/core/dashboard/test_field_ref.py +49 -0
  1673. turbine_data-0.1.0/tests/core/dashboard/test_filter_translator.py +135 -0
  1674. turbine_data-0.1.0/tests/core/dashboard/test_health.py +98 -0
  1675. turbine_data-0.1.0/tests/core/dashboard/test_injection.py +228 -0
  1676. turbine_data-0.1.0/tests/core/dashboard/test_interactions.py +103 -0
  1677. turbine_data-0.1.0/tests/core/dashboard/test_keys.py +56 -0
  1678. turbine_data-0.1.0/tests/core/dashboard/test_layout.py +237 -0
  1679. turbine_data-0.1.0/tests/core/dashboard/test_models.py +115 -0
  1680. turbine_data-0.1.0/tests/core/dashboard/test_query.py +375 -0
  1681. turbine_data-0.1.0/tests/core/dashboard/test_selection_store.py +288 -0
  1682. turbine_data-0.1.0/tests/core/dashboard/test_table_view.py +60 -0
  1683. turbine_data-0.1.0/tests/core/onboarding/__init__.py +0 -0
  1684. turbine_data-0.1.0/tests/core/onboarding/conftest.py +17 -0
  1685. turbine_data-0.1.0/tests/core/onboarding/test_anchors.py +79 -0
  1686. turbine_data-0.1.0/tests/core/onboarding/test_predicates.py +189 -0
  1687. turbine_data-0.1.0/tests/core/onboarding/test_skip_edits.py +174 -0
  1688. turbine_data-0.1.0/tests/core/onboarding/test_step_watcher.py +182 -0
  1689. turbine_data-0.1.0/tests/core/onboarding/test_tours.py +49 -0
  1690. turbine_data-0.1.0/tests/core/quality/__init__.py +0 -0
  1691. turbine_data-0.1.0/tests/core/quality/plan/__init__.py +0 -0
  1692. turbine_data-0.1.0/tests/core/quality/plan/predicates/__init__.py +0 -0
  1693. turbine_data-0.1.0/tests/core/quality/plan/predicates/test_predicates.py +113 -0
  1694. turbine_data-0.1.0/tests/core/quality/plan/predicates/test_windowed_predicates.py +189 -0
  1695. turbine_data-0.1.0/tests/core/quality/plan/test_anomaly_predicate_factory.py +96 -0
  1696. turbine_data-0.1.0/tests/core/quality/plan/test_dataset_plan.py +71 -0
  1697. turbine_data-0.1.0/tests/core/quality/plan/test_errors.py +47 -0
  1698. turbine_data-0.1.0/tests/core/quality/plan/test_factory_hard_fail.py +97 -0
  1699. turbine_data-0.1.0/tests/core/quality/plan/test_measurement.py +105 -0
  1700. turbine_data-0.1.0/tests/core/quality/plan/test_slots.py +71 -0
  1701. turbine_data-0.1.0/tests/core/quality/test_cancel_event.py +24 -0
  1702. turbine_data-0.1.0/tests/core/quality/test_check_results.py +304 -0
  1703. turbine_data-0.1.0/tests/core/quality/test_check_validation.py +218 -0
  1704. turbine_data-0.1.0/tests/core/quality/test_flagging_types.py +84 -0
  1705. turbine_data-0.1.0/tests/core/quality/test_gate.py +134 -0
  1706. turbine_data-0.1.0/tests/core/quality/test_incremental.py +172 -0
  1707. turbine_data-0.1.0/tests/core/quality/test_ports.py +55 -0
  1708. turbine_data-0.1.0/tests/core/quality/test_python_threshold.py +78 -0
  1709. turbine_data-0.1.0/tests/core/quality/test_run_context.py +54 -0
  1710. turbine_data-0.1.0/tests/core/quality/test_scoring.py +108 -0
  1711. turbine_data-0.1.0/tests/core/quality/test_targets.py +199 -0
  1712. turbine_data-0.1.0/tests/core/seed/__init__.py +0 -0
  1713. turbine_data-0.1.0/tests/core/seed/test_row_generator.py +115 -0
  1714. turbine_data-0.1.0/tests/core/seed/test_types.py +36 -0
  1715. turbine_data-0.1.0/tests/core/shared/__init__.py +0 -0
  1716. turbine_data-0.1.0/tests/core/shared/test_filter_expr.py +59 -0
  1717. turbine_data-0.1.0/tests/core/tuning/__init__.py +0 -0
  1718. turbine_data-0.1.0/tests/core/tuning/test_mode_detection.py +48 -0
  1719. turbine_data-0.1.0/tests/core/tuning/test_model.py +57 -0
  1720. turbine_data-0.1.0/tests/core/tuning/test_must_be_hints.py +96 -0
  1721. turbine_data-0.1.0/tests/core/tuning/test_query_builder.py +230 -0
  1722. turbine_data-0.1.0/tests/core/tuning/test_registry_coverage.py +58 -0
  1723. turbine_data-0.1.0/tests/core/tuning/test_sla.py +197 -0
  1724. turbine_data-0.1.0/tests/core/tuning/test_stats.py +158 -0
  1725. turbine_data-0.1.0/tests/core/tuning/test_verdict.py +316 -0
  1726. turbine_data-0.1.0/tests/core/tuning/test_yaml_editor.py +738 -0
  1727. turbine_data-0.1.0/tests/core/validation/__init__.py +0 -0
  1728. turbine_data-0.1.0/tests/core/validation/test_detector.py +172 -0
  1729. turbine_data-0.1.0/tests/core/validation/test_model.py +151 -0
  1730. turbine_data-0.1.0/tests/core/validation/test_rules.py +88 -0
  1731. turbine_data-0.1.0/tests/core/validation/test_validator.py +230 -0
  1732. turbine_data-0.1.0/tests/e2e/__init__.py +1 -0
  1733. turbine_data-0.1.0/tests/e2e/test_sql_template_params_e2e.py +283 -0
  1734. turbine_data-0.1.0/tests/e2e-project/contracts/orders-rowcount.yml +42 -0
  1735. turbine_data-0.1.0/tests/e2e-project/contracts/orders.yml +107 -0
  1736. turbine_data-0.1.0/tests/e2e-project/datasources/e2e-test.yml +4 -0
  1737. turbine_data-0.1.0/tests/e2e-project/datasources/postgres.yml +8 -0
  1738. turbine_data-0.1.0/tests/e2e-project/pyproject.toml +7 -0
  1739. turbine_data-0.1.0/tests/e2e-project/seed.sql +67 -0
  1740. turbine_data-0.1.0/tests/e2e-project/uv.lock +8 -0
  1741. turbine_data-0.1.0/tests/fakes/__init__.py +1 -0
  1742. turbine_data-0.1.0/tests/fakes/dismissal_store.py +35 -0
  1743. turbine_data-0.1.0/tests/fakes/domain_registry.py +13 -0
  1744. turbine_data-0.1.0/tests/fixtures/contracts/contract-matching.yml +19 -0
  1745. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-drift.yml +19 -0
  1746. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-incremental.yml +18 -0
  1747. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-multiple-schemas.yml +22 -0
  1748. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-sla.yml +25 -0
  1749. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-unique.yml +17 -0
  1750. turbine_data-0.1.0/tests/fixtures/contracts/contract-with-validity.yml +30 -0
  1751. turbine_data-0.1.0/tests/fixtures/contracts/duplicate-columns-contract.yml +15 -0
  1752. turbine_data-0.1.0/tests/fixtures/contracts/minimal-contract.yml +20 -0
  1753. turbine_data-0.1.0/tests/fixtures/contracts/missing-schema-contract.yml +6 -0
  1754. turbine_data-0.1.0/tests/fixtures/contracts/no-pk-contract.yml +13 -0
  1755. turbine_data-0.1.0/tests/fixtures/contracts/second-contract.yml +12 -0
  1756. turbine_data-0.1.0/tests/fixtures/contracts/valid-contract.yml +24 -0
  1757. turbine_data-0.1.0/tests/fixtures/quality-specs/minimal-quality-spec.yml +22 -0
  1758. turbine_data-0.1.0/tests/frozen_attr.py +6 -0
  1759. turbine_data-0.1.0/tests/infra/__init__.py +0 -0
  1760. turbine_data-0.1.0/tests/infra/database/__init__.py +0 -0
  1761. turbine_data-0.1.0/tests/infra/database/test_check_result_repo.py +114 -0
  1762. turbine_data-0.1.0/tests/infra/database/test_engine.py +144 -0
  1763. turbine_data-0.1.0/tests/infra/database/test_metadata_store.py +289 -0
  1764. turbine_data-0.1.0/tests/infra/database/test_migrations.py +138 -0
  1765. turbine_data-0.1.0/tests/infra/test_config.py +272 -0
  1766. turbine_data-0.1.0/tests/infra/test_events.py +100 -0
  1767. turbine_data-0.1.0/tests/infra/test_git.py +54 -0
  1768. turbine_data-0.1.0/tests/infra/test_logging.py +127 -0
  1769. turbine_data-0.1.0/tests/integration/__init__.py +0 -0
  1770. turbine_data-0.1.0/tests/integration/conftest.py +14 -0
  1771. turbine_data-0.1.0/tests/integration/test_onboarding_core_concepts_e2e.py +241 -0
  1772. turbine_data-0.1.0/tests/integration/test_validate_e2e.py +226 -0
  1773. turbine_data-0.1.0/tests/presentation/__init__.py +0 -0
  1774. turbine_data-0.1.0/tests/presentation/api/__init__.py +0 -0
  1775. turbine_data-0.1.0/tests/presentation/api/conftest.py +25 -0
  1776. turbine_data-0.1.0/tests/presentation/api/test_app.py +44 -0
  1777. turbine_data-0.1.0/tests/presentation/api/test_check_dtos.py +197 -0
  1778. turbine_data-0.1.0/tests/presentation/api/test_checks.py +205 -0
  1779. turbine_data-0.1.0/tests/presentation/api/test_contracts.py +141 -0
  1780. turbine_data-0.1.0/tests/presentation/api/test_dashboard.py +144 -0
  1781. turbine_data-0.1.0/tests/presentation/api/test_docs.py +85 -0
  1782. turbine_data-0.1.0/tests/presentation/api/test_flagged_rows.py +56 -0
  1783. turbine_data-0.1.0/tests/presentation/api/test_router_discovery.py +172 -0
  1784. turbine_data-0.1.0/tests/presentation/api/test_runs.py +178 -0
  1785. turbine_data-0.1.0/tests/presentation/api/test_status.py +59 -0
  1786. turbine_data-0.1.0/tests/presentation/api/test_validate.py +85 -0
  1787. turbine_data-0.1.0/tests/presentation/cli/__init__.py +0 -0
  1788. turbine_data-0.1.0/tests/presentation/cli/cli_subprocess.py +19 -0
  1789. turbine_data-0.1.0/tests/presentation/cli/commands/__init__.py +0 -0
  1790. turbine_data-0.1.0/tests/presentation/cli/commands/test_add_check_flow.py +353 -0
  1791. turbine_data-0.1.0/tests/presentation/cli/commands/test_bump.py +325 -0
  1792. turbine_data-0.1.0/tests/presentation/cli/commands/test_check.py +18 -0
  1793. turbine_data-0.1.0/tests/presentation/cli/commands/test_check_pipeline.py +223 -0
  1794. turbine_data-0.1.0/tests/presentation/cli/commands/test_ci.py +101 -0
  1795. turbine_data-0.1.0/tests/presentation/cli/commands/test_common.py +49 -0
  1796. turbine_data-0.1.0/tests/presentation/cli/commands/test_dashboard.py +157 -0
  1797. turbine_data-0.1.0/tests/presentation/cli/commands/test_generate.py +364 -0
  1798. turbine_data-0.1.0/tests/presentation/cli/commands/test_init.py +164 -0
  1799. turbine_data-0.1.0/tests/presentation/cli/commands/test_lint.py +115 -0
  1800. turbine_data-0.1.0/tests/presentation/cli/commands/test_new.py +475 -0
  1801. turbine_data-0.1.0/tests/presentation/cli/commands/test_status_command.py +99 -0
  1802. turbine_data-0.1.0/tests/presentation/cli/commands/test_validate.py +80 -0
  1803. turbine_data-0.1.0/tests/presentation/cli/conftest.py +63 -0
  1804. turbine_data-0.1.0/tests/presentation/cli/display/__init__.py +0 -0
  1805. turbine_data-0.1.0/tests/presentation/cli/display/conftest.py +47 -0
  1806. turbine_data-0.1.0/tests/presentation/cli/display/test_check_report.py +392 -0
  1807. turbine_data-0.1.0/tests/presentation/cli/display/test_check_report_json.py +248 -0
  1808. turbine_data-0.1.0/tests/presentation/cli/display/test_check_report_junit.py +191 -0
  1809. turbine_data-0.1.0/tests/presentation/cli/display/test_formats.py +182 -0
  1810. turbine_data-0.1.0/tests/presentation/cli/display/test_human_summary.py +111 -0
  1811. turbine_data-0.1.0/tests/presentation/cli/display/test_multi_contract_report.py +161 -0
  1812. turbine_data-0.1.0/tests/presentation/cli/display/test_renderer.py +128 -0
  1813. turbine_data-0.1.0/tests/presentation/cli/display/test_status_table.py +99 -0
  1814. turbine_data-0.1.0/tests/presentation/cli/display/test_validation.py +291 -0
  1815. turbine_data-0.1.0/tests/presentation/cli/picker/__init__.py +0 -0
  1816. turbine_data-0.1.0/tests/presentation/cli/picker/test_fuzzy.py +148 -0
  1817. turbine_data-0.1.0/tests/presentation/cli/picker/test_picker.py +78 -0
  1818. turbine_data-0.1.0/tests/presentation/cli/picker/test_renderer.py +145 -0
  1819. turbine_data-0.1.0/tests/presentation/cli/picker/test_session.py +161 -0
  1820. turbine_data-0.1.0/tests/presentation/cli/test_app.py +16 -0
  1821. turbine_data-0.1.0/tests/presentation/cli/test_context.py +83 -0
  1822. turbine_data-0.1.0/tests/presentation/cli/test_error_handling.py +139 -0
  1823. turbine_data-0.1.0/tests/presentation/cli/test_gate_parsing.py +79 -0
  1824. turbine_data-0.1.0/tests/presentation/cli/test_printer.py +84 -0
  1825. turbine_data-0.1.0/tests/presentation/cli/test_progress.py +471 -0
  1826. turbine_data-0.1.0/tests/presentation/dashboard/__init__.py +0 -0
  1827. turbine_data-0.1.0/tests/presentation/dashboard/conftest.py +37 -0
  1828. turbine_data-0.1.0/tests/presentation/dashboard/test_app.py +230 -0
  1829. turbine_data-0.1.0/tests/presentation/dashboard/test_auto_empty_render.py +193 -0
  1830. turbine_data-0.1.0/tests/presentation/dashboard/test_chart_builders.py +222 -0
  1831. turbine_data-0.1.0/tests/presentation/dashboard/test_chart_fieldref.py +147 -0
  1832. turbine_data-0.1.0/tests/presentation/dashboard/test_chart_pipeline.py +275 -0
  1833. turbine_data-0.1.0/tests/presentation/dashboard/test_chart_registry.py +64 -0
  1834. turbine_data-0.1.0/tests/presentation/dashboard/test_chart_spec.py +54 -0
  1835. turbine_data-0.1.0/tests/presentation/dashboard/test_component_extension.py +123 -0
  1836. turbine_data-0.1.0/tests/presentation/dashboard/test_composite_renderer.py +142 -0
  1837. turbine_data-0.1.0/tests/presentation/dashboard/test_db_isolation.py +42 -0
  1838. turbine_data-0.1.0/tests/presentation/dashboard/test_drawer_render.py +168 -0
  1839. turbine_data-0.1.0/tests/presentation/dashboard/test_echarts_models.py +1028 -0
  1840. turbine_data-0.1.0/tests/presentation/dashboard/test_ext_api.py +40 -0
  1841. turbine_data-0.1.0/tests/presentation/dashboard/test_health_badge.py +31 -0
  1842. turbine_data-0.1.0/tests/presentation/dashboard/test_interactions_render.py +88 -0
  1843. turbine_data-0.1.0/tests/presentation/dashboard/test_layout_components.py +115 -0
  1844. turbine_data-0.1.0/tests/presentation/dashboard/test_registry_completeness.py +59 -0
  1845. turbine_data-0.1.0/tests/presentation/dashboard/test_render_context.py +46 -0
  1846. turbine_data-0.1.0/tests/presentation/dashboard/test_renderer.py +663 -0
  1847. turbine_data-0.1.0/tests/presentation/dashboard/test_renderer_health.py +162 -0
  1848. turbine_data-0.1.0/tests/presentation/dashboard/test_row_normalization.py +200 -0
  1849. turbine_data-0.1.0/tests/presentation/dashboard/test_sidebar.py +46 -0
  1850. turbine_data-0.1.0/tests/presentation/dashboard/test_state.py +41 -0
  1851. turbine_data-0.1.0/tests/presentation/dashboard/test_user_folder_discovery.py +95 -0
  1852. turbine_data-0.1.0/tests/presentation/lsp/__init__.py +0 -0
  1853. turbine_data-0.1.0/tests/presentation/lsp/api/__init__.py +0 -0
  1854. turbine_data-0.1.0/tests/presentation/lsp/api/trees/__init__.py +0 -0
  1855. turbine_data-0.1.0/tests/presentation/lsp/api/trees/test_workspace_tree_builder.py +663 -0
  1856. turbine_data-0.1.0/tests/presentation/lsp/conftest.py +32 -0
  1857. turbine_data-0.1.0/tests/presentation/lsp/mapping/__init__.py +0 -0
  1858. turbine_data-0.1.0/tests/presentation/lsp/mapping/test_check_result.py +249 -0
  1859. turbine_data-0.1.0/tests/presentation/lsp/mapping/test_from_lsp.py +187 -0
  1860. turbine_data-0.1.0/tests/presentation/lsp/mapping/test_to_lsp.py +430 -0
  1861. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/__init__.py +0 -0
  1862. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/conftest.py +283 -0
  1863. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_async_request_cancellation.py +160 -0
  1864. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_async_traits.py +51 -0
  1865. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_asyncio_pool.py +128 -0
  1866. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_cancel_handler.py +60 -0
  1867. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_cancellation.py +41 -0
  1868. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_check_use_case_factory.py +117 -0
  1869. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_client.py +218 -0
  1870. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_code_actions.py +334 -0
  1871. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_code_lens.py +59 -0
  1872. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_completion.py +140 -0
  1873. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dashboard_data.py +266 -0
  1874. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_definition.py +56 -0
  1875. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_diagnostic.py +214 -0
  1876. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_configuration_handler.py +34 -0
  1877. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_versioning.py +65 -0
  1878. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_watched_files_handler.py +50 -0
  1879. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_workspace_handler.py +66 -0
  1880. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_save_handler.py +48 -0
  1881. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dismiss_code_action.py +187 -0
  1882. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dispatch.py +368 -0
  1883. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_document_link.py +56 -0
  1884. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_document_symbols.py +77 -0
  1885. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_domain_registry.py +104 -0
  1886. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_execute_command.py +261 -0
  1887. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format.py +65 -0
  1888. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format_in_memory.py +215 -0
  1889. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format_range.py +78 -0
  1890. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_hover.py +111 -0
  1891. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_index_rebuilder.py +301 -0
  1892. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_initialized_handler.py +82 -0
  1893. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_lifecycle_in_memory.py +365 -0
  1894. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_list_datasources.py +134 -0
  1895. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_main_loop.py +179 -0
  1896. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_no_typechecking.py +68 -0
  1897. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_list.py +83 -0
  1898. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_run.py +476 -0
  1899. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_status.py +91 -0
  1900. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_watch.py +248 -0
  1901. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_pending_changes.py +28 -0
  1902. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_performance_regression.py +338 -0
  1903. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_project_status.py +76 -0
  1904. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_references.py +117 -0
  1905. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_rename.py +108 -0
  1906. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_request_cancellation.py +228 -0
  1907. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_request_queue.py +184 -0
  1908. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_run_check.py +1215 -0
  1909. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_run_check_target.py +154 -0
  1910. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_scaffold_project.py +87 -0
  1911. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_scheduler.py +129 -0
  1912. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_semantic_tokens.py +131 -0
  1913. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_session.py +414 -0
  1914. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_test_datasource.py +243 -0
  1915. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_transport.py +40 -0
  1916. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_tree_handlers.py +176 -0
  1917. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_tune_check.py +496 -0
  1918. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_validate_schema.py +410 -0
  1919. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_work_done_progress.py +737 -0
  1920. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_work_done_progress_cancel_handler.py +81 -0
  1921. turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_workspace_symbols.py +61 -0
  1922. turbine_data-0.1.0/tests/presentation/lsp/session/__init__.py +0 -0
  1923. turbine_data-0.1.0/tests/presentation/lsp/session/test_datasource_connections.py +50 -0
  1924. turbine_data-0.1.0/tests/presentation/lsp/session/test_progress_tokens.py +63 -0
  1925. turbine_data-0.1.0/tests/presentation/lsp/session/test_tree_notifier.py +65 -0
  1926. turbine_data-0.1.0/tests/presentation/lsp/test_code_writer.py +153 -0
  1927. turbine_data-0.1.0/tests/presentation/lsp/test_datasources_tree_builder.py +144 -0
  1928. turbine_data-0.1.0/tests/presentation/lsp/test_domain_registry_wiring.py +109 -0
  1929. turbine_data-0.1.0/tests/presentation/lsp/test_extension_protocol_schema.py +19 -0
  1930. turbine_data-0.1.0/tests/presentation/lsp/test_list_checks.py +106 -0
  1931. turbine_data-0.1.0/tests/presentation/lsp/test_server_wiring.py +54 -0
  1932. turbine_data-0.1.0/tests/presentation/lsp/test_tree_registry.py +205 -0
  1933. turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_builder.py +321 -0
  1934. turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_children.py +315 -0
  1935. turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_helpers.py +105 -0
  1936. turbine_data-0.1.0/tests/presentation/quality/__init__.py +1 -0
  1937. turbine_data-0.1.0/tests/presentation/quality/test_progress_log.py +202 -0
  1938. turbine_data-0.1.0/tests/templates/__init__.py +0 -0
  1939. turbine_data-0.1.0/tests/templates/dashboard/__init__.py +0 -0
  1940. turbine_data-0.1.0/tests/templates/dashboard/pages/__init__.py +0 -0
  1941. turbine_data-0.1.0/tests/templates/dashboard/pages/test_quality_matrix.py +167 -0
  1942. turbine_data-0.1.0/todo.md +158 -0
  1943. turbine_data-0.1.0/uv.lock +3418 -0
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ # Runs ruff format on .py files after Edit/Write tool calls
3
+
4
+ INPUT=$(cat)
5
+ FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path')
6
+
7
+ if [[ -n "$FILE_PATH" && "$FILE_PATH" == *.py ]]; then
8
+ uv run ruff format "$FILE_PATH" 2>/dev/null
9
+ fi
10
+
11
+ exit 0
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+ # Full quality gate before git commit:
3
+ # ruff check --fix, ruff format, ty check, complexipy, tach check
4
+
5
+ INPUT=$(cat)
6
+ COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
7
+
8
+ if echo "$COMMAND" | grep -q "git commit"; then
9
+ CWD=$(echo "$INPUT" | jq -r '.cwd')
10
+ cd "$CWD"
11
+
12
+ # Lint + format
13
+ uv run ruff check --fix . 2>&1
14
+ RUFF_EXIT=$?
15
+ uv run ruff format . 2>/dev/null
16
+
17
+ if [ $RUFF_EXIT -ne 0 ]; then
18
+ echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"ruff check --fix found unfixable lint errors. Fix them before committing."}}'
19
+ exit 0
20
+ fi
21
+
22
+ # Type check
23
+ uv run ty check 2>&1
24
+ TY_EXIT=$?
25
+ if [ $TY_EXIT -ne 0 ]; then
26
+ echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"ty check found type errors. Fix them before committing."}}'
27
+ exit 0
28
+ fi
29
+
30
+ # Complexity check
31
+ uv run complexipy src/ -mx 10 2>&1
32
+ COMPLEX_EXIT=$?
33
+ if [ $COMPLEX_EXIT -ne 0 ]; then
34
+ echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"complexipy found functions exceeding complexity threshold. Simplify before committing."}}'
35
+ exit 0
36
+ fi
37
+
38
+ # Boundary check
39
+ uv run tach check 2>&1
40
+ TACH_EXIT=$?
41
+ if [ $TACH_EXIT -ne 0 ]; then
42
+ echo '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"tach check found module boundary violations. Fix imports before committing."}}'
43
+ exit 0
44
+ fi
45
+ fi
46
+
47
+ exit 0
@@ -0,0 +1,26 @@
1
+ {
2
+ "hooks": {
3
+ "PreToolUse": [
4
+ {
5
+ "matcher": "Bash",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": ".claude/hooks/pre-commit-lint.sh"
10
+ }
11
+ ]
12
+ }
13
+ ],
14
+ "PostToolUse": [
15
+ {
16
+ "matcher": "Edit|Write",
17
+ "hooks": [
18
+ {
19
+ "type": "command",
20
+ "command": ".claude/hooks/format-after-edit.sh"
21
+ }
22
+ ]
23
+ }
24
+ ]
25
+ }
26
+ }
@@ -0,0 +1,304 @@
1
+ ---
2
+ name: code-simplification
3
+ description: Use after implementing features, before claiming a phase is complete, when reviewing AI-generated code, or when code feels overly complex — detects duplication, dead code, over-engineering, and AI-specific bloat patterns
4
+ ---
5
+
6
+ <!-- TOKEN BUDGET: 370 lines / ~1110 tokens -->
7
+
8
+ # Code Simplification
9
+
10
+ ## Overview
11
+
12
+ AI-generated code accumulates complexity. Each task is implemented in isolation by a fresh agent that can't see the full picture. After multiple tasks, duplication creeps in, abstractions multiply, and dead code lingers.
13
+
14
+ **Core principle:** The simplest code that works correctly is the best code. Complexity is a cost, not a feature.
15
+
16
+ **This skill applies after implementation, not during.** Don't prematurely optimize — but don't ship bloat either.
17
+
18
+ ## When to Use
19
+
20
+ **Always:**
21
+ - After all tasks in a phase are complete (before shipping)
22
+ - When reviewing code generated by multiple builder agents
23
+ - When a file has been touched by 3+ different tasks
24
+ - When you notice patterns repeating across files
25
+ - Before claiming a phase is production-ready
26
+
27
+ **The simplifier agent references this skill for systematic cross-task analysis.**
28
+
29
+ ## Duplication Detection
30
+
31
+ ### What to Look For
32
+
33
+ **Exact duplicates:** Identical code blocks in different files or functions.
34
+ ```
35
+ # RED FLAG: Same logic in two places
36
+ def validate_user_email(email):
37
+ if not email or "@" not in email:
38
+ raise ValueError("Invalid email")
39
+
40
+ def validate_contact_email(email):
41
+ if not email or "@" not in email:
42
+ raise ValueError("Invalid email")
43
+ ```
44
+
45
+ **Near duplicates:** Same structure, different details.
46
+ ```
47
+ # RED FLAG: Parallel structure, only names differ
48
+ def create_user(data):
49
+ validate(data)
50
+ user = User(**data)
51
+ db.add(user)
52
+ db.commit()
53
+ return user
54
+
55
+ def create_project(data):
56
+ validate(data)
57
+ project = Project(**data)
58
+ db.add(project)
59
+ db.commit()
60
+ return project
61
+ ```
62
+
63
+ **Parallel hierarchies:** When adding a new type requires changes in multiple places.
64
+
65
+ **Copy-paste config:** Same configuration blocks repeated in Docker, Terraform, or CI files.
66
+
67
+ ### The Rule of Three
68
+
69
+ - **2 occurrences:** Note it, but don't extract yet.
70
+ - **3 occurrences:** Extract. The pattern is real.
71
+ - **1 abstraction serving 1 caller:** Inline it. The abstraction has no value.
72
+
73
+ ## Complexity Reduction
74
+
75
+ ### Techniques
76
+
77
+ **Extract method:** When a function does too many things.
78
+ ```
79
+ # BEFORE: One function doing everything
80
+ def process_order(order):
81
+ # validate (10 lines)
82
+ # calculate totals (15 lines)
83
+ # apply discounts (12 lines)
84
+ # save to database (8 lines)
85
+ # send notification (6 lines)
86
+
87
+ # AFTER: Clear responsibilities
88
+ def process_order(order):
89
+ validate_order(order)
90
+ totals = calculate_totals(order)
91
+ totals = apply_discounts(totals, order.customer)
92
+ save_order(order, totals)
93
+ notify_order_placed(order)
94
+ ```
95
+
96
+ **Early returns / guard clauses:** Eliminate deep nesting.
97
+ ```
98
+ # BEFORE: Nested conditionals
99
+ def get_discount(user):
100
+ if user:
101
+ if user.is_premium:
102
+ if user.years > 5:
103
+ return 0.20
104
+ else:
105
+ return 0.10
106
+ else:
107
+ return 0.0
108
+ else:
109
+ return 0.0
110
+
111
+ # AFTER: Guard clauses
112
+ def get_discount(user):
113
+ if not user or not user.is_premium:
114
+ return 0.0
115
+ if user.years > 5:
116
+ return 0.20
117
+ return 0.10
118
+ ```
119
+
120
+ **Replace conditionals with polymorphism:** When type-checking drives behavior.
121
+
122
+ **Simplify boolean expressions:** Collapse nested boolean logic.
123
+
124
+ ### Complexity Thresholds
125
+
126
+ | Metric | Acceptable | Review | Refactor |
127
+ |--------|-----------|--------|----------|
128
+ | Function length | < 20 lines | 20-40 lines | > 40 lines |
129
+ | Nesting depth | ≤ 2 levels | 3 levels | > 3 levels |
130
+ | Parameters | ≤ 3 | 4-5 | > 5 |
131
+ | Cyclomatic complexity | ≤ 5 | 6-10 | > 10 |
132
+
133
+ ## Dead Code Identification
134
+
135
+ ### What Counts as Dead Code
136
+
137
+ - **Unused imports** — imported but never referenced
138
+ - **Unused variables** — assigned but never read
139
+ - **Unreachable branches** — conditions that can never be true
140
+ - **Commented-out code** — if it's needed, it's in git history
141
+ - **Unused functions/methods** — defined but never called
142
+ - **Vestigial parameters** — accepted but never used
143
+ - **Feature flags for shipped features** — the flag is always on
144
+
145
+ ## Over-Engineering Indicators
146
+
147
+ ### Premature Abstraction
148
+
149
+ ```
150
+ # OVER-ENGINEERED: Abstract factory for one implementation
151
+ class NotificationFactory:
152
+ @staticmethod
153
+ def create(type):
154
+ if type == "email":
155
+ return EmailNotifier()
156
+ raise ValueError(f"Unknown: {type}")
157
+
158
+ # SIMPLE: Just use the thing directly
159
+ notifier = EmailNotifier()
160
+ ```
161
+
162
+ **Rule:** If there's only one implementation, don't create an abstraction. Add it when the second implementation arrives.
163
+
164
+ ### Unnecessary Indirection
165
+
166
+ ```
167
+ # OVER-ENGINEERED: Service wrapping a service
168
+ class UserService:
169
+ def get_user(self, id):
170
+ return self.repository.get_user(id) # Just passes through
171
+
172
+ # SIMPLE: Use the repository directly where needed
173
+ user = repository.get_user(id)
174
+ ```
175
+
176
+ ### Configuration for One Value
177
+
178
+ ```
179
+ # OVER-ENGINEERED
180
+ MAX_RETRIES = config.get("max_retries", 3)
181
+
182
+ # SIMPLE (if this is the only place retries happen)
183
+ MAX_RETRIES = 3
184
+ ```
185
+
186
+ **Rule:** Make it configurable when a second consumer needs a different value, not before.
187
+
188
+ ## AI-Specific Anti-Patterns
189
+
190
+ AI code generators commonly produce these patterns. Watch for them:
191
+
192
+ ### Verbose Error Handling
193
+ ```
194
+ # AI BLOAT: Every function has identical error handling
195
+ def get_user(id):
196
+ try:
197
+ user = db.query(User).get(id)
198
+ if user is None:
199
+ raise ValueError(f"User {id} not found")
200
+ return user
201
+ except ValueError:
202
+ raise
203
+ except Exception as e:
204
+ logger.error(f"Error getting user: {e}")
205
+ raise RuntimeError(f"Failed to get user {id}") from e
206
+
207
+ # SIMPLER: Let exceptions propagate naturally
208
+ def get_user(id):
209
+ user = db.query(User).get(id)
210
+ if user is None:
211
+ raise ValueError(f"User {id} not found")
212
+ return user
213
+ ```
214
+
215
+ ### Redundant Type Checks
216
+ ```
217
+ # AI BLOAT: Checking types that can't be wrong
218
+ def process(items: list[str]) -> None:
219
+ if not isinstance(items, list):
220
+ raise TypeError("Expected list")
221
+ for item in items:
222
+ if not isinstance(item, str):
223
+ raise TypeError("Expected str")
224
+ # actual logic...
225
+
226
+ # SIMPLER: Trust the type system
227
+ def process(items: list[str]) -> None:
228
+ for item in items:
229
+ # actual logic...
230
+ ```
231
+
232
+ ### Over-Defensive Coding
233
+ ```
234
+ # AI BLOAT: Null checks where nulls can't happen
235
+ user = get_authenticated_user() # Already validated by middleware
236
+ if user is not None and user.id is not None: # Impossible to be None
237
+ process(user)
238
+
239
+ # SIMPLER: Trust your system boundaries
240
+ user = get_authenticated_user()
241
+ process(user)
242
+ ```
243
+
244
+ ### Unnecessary Wrapper Functions
245
+ ```
246
+ # AI BLOAT: Wrapping standard library
247
+ def read_json_file(path):
248
+ with open(path) as f:
249
+ return json.load(f)
250
+
251
+ # Used exactly once — just inline it
252
+ with open(config_path) as f:
253
+ config = json.load(f)
254
+ ```
255
+
256
+ ## Simplification Process
257
+
258
+ When reviewing code for simplification:
259
+
260
+ 1. **Identify scope:** What files changed in this phase? (Use git diff)
261
+ 2. **Scan for duplication:** Look for similar patterns across files
262
+ 3. **Check complexity:** Flag functions exceeding thresholds
263
+ 4. **Find dead code:** Look for unused definitions
264
+ 5. **Spot over-engineering:** Look for abstractions with single implementations
265
+ 6. **Check AI patterns:** Apply the AI anti-pattern checklist
266
+ 7. **Prioritize findings:**
267
+ - **High:** Clear duplication (3+), dead code, obvious bloat
268
+ - **Medium:** Complexity reduction, near-duplicates
269
+ - **Low:** Style consistency, minor simplifications
270
+
271
+ ## Red Flags — STOP and Simplify
272
+
273
+ - Same logic in 3+ places
274
+ - Function > 40 lines
275
+ - Nesting > 3 levels
276
+ - Abstract class with one concrete implementation
277
+ - Wrapper that just delegates
278
+ - Config for a value used in one place
279
+ - Try/except that re-raises the same exception
280
+ - Type check for a statically typed parameter
281
+ - Null check after a function that can't return null
282
+ - Commented-out code blocks
283
+
284
+ ## Common Rationalizations
285
+
286
+ | Excuse | Reality |
287
+ |--------|---------|
288
+ | "We might need it later" | YAGNI. Add it when you need it. |
289
+ | "It's more extensible" | Extensibility without use cases is waste. |
290
+ | "The abstraction makes it cleaner" | One caller = inline is cleaner. |
291
+ | "Deleting code feels risky" | Git remembers. Dead code is maintenance cost. |
292
+ | "It's just a few extra lines" | Lines compound. 10 files × 5 extra lines = 50 lines of noise. |
293
+ | "The AI generated it, it must be right" | AI optimizes for completeness, not simplicity. |
294
+ | "Refactoring might break things" | Tests exist. If they don't, add them first. |
295
+
296
+ ## Integration
297
+
298
+ **Referenced by:**
299
+ - **shipyard:simplifier** — Uses this skill as the analysis framework for cross-task simplification
300
+ - **shipyard:reviewer** — Code quality review (Stage 2) checks for complexity
301
+
302
+ **Pairs with:**
303
+ - **shipyard:shipyard-tdd** — Tests make simplification safe
304
+ - **shipyard:shipyard-verification** — Simplification claims need evidence
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: docs-todo-next
3
+ description: Process the next unchecked item from docs-todo.md at the repo root. Picks one item, verifies what the code actually does (not what the doc claims), drafts the new or updated page in the established voice, dispatches a reviewer to check the draft against code reality, then ticks the box. Use this whenever the user says "do the next docs todo", "next docs item", "update the docs to match reality", "advance docs-todo", or asks you to walk through docs-todo.md one item at a time. Trigger on any phrasing that asks for forward progress on the docs-todo list, even when the user does not name the file.
4
+ ---
5
+
6
+ # docs-todo-next
7
+
8
+ A loop that turns one line of `docs-todo.md` into a documentation page that matches the code, reviewed and ticked.
9
+
10
+ ## When this skill runs
11
+
12
+ The user wants to advance the docs todo list one item. The list lives at `docs-todo.md` in the repo root. Every entry is one of three kinds, and the workflow branches accordingly:
13
+
14
+ - **New page**: write the file and wire it into `docs/user/mkdocs.yml`.
15
+ - **Update**: open the existing page, find what is wrong against the code, rewrite the wrong parts.
16
+ - **Delete**: remove the file, remove its nav entry, remove redirects pointing at it.
17
+
18
+ ## Step-by-step
19
+
20
+ ### 1. Pick the next item
21
+
22
+ Read `/Users/yassin/Documents/projects/turbine-lsp/docs-todo.md`. Find the first `- [ ]` line, top to bottom. The "Missing sections to add" and "Sections to remove" blocks come before page-by-page review, which matches the user's preferred working order.
23
+
24
+ If every box is ticked, say so and stop.
25
+
26
+ Capture the audit hints from the parenthetical (for example `(NEEDS UPDATE: failed_rows/values_in missing from CHECK_CATALOG)`). Treat those hints as **leads to verify**, not as truth. The audit was a snapshot. The code is the source of truth.
27
+
28
+ ### 2. Read the existing doc, if any
29
+
30
+ For an update or a delete, read the current file end to end. For a new page, skim the neighbouring pages it will sit beside in the nav so the new page lands in the same voice and depth.
31
+
32
+ ### 3. Verify what the code actually does
33
+
34
+ Do not trust the doc. Do not trust the audit hint. Read the code.
35
+
36
+ For a typical page, that means:
37
+
38
+ - Use `grep -rn` on `src/turbine/` for every CLI flag, YAML field, class name, function name, and rule name the doc currently mentions or the new doc will mention.
39
+ - Read the relevant module top to bottom. Skimming misses the things that change between versions.
40
+ - Pay attention to:
41
+ - Default values (the doc often lags behind the actual default).
42
+ - Optional vs required (Pydantic models say so; trust the model).
43
+ - Status enum values (e.g. `retired` vs `removed`, `active` vs `published`).
44
+ - Lint rule names and severities (look in `core/contract/lint_rules.py`).
45
+ - DSL field names: camelCase vs snake_case drift is common.
46
+ - Whether claimed features actually exist. If the doc says "the owner is notified", grep for `notify`/`notification` and confirm. If nothing is wired up, the doc is selling a feature that does not exist; cut the claim.
47
+
48
+ If the code has moved on but the audit hint still points at the old file, follow imports and call sites to find where the logic lives now.
49
+
50
+ When in doubt about a feature's true behaviour, dispatch the `code-explorer` subagent with a tight question. Example: "Trace what happens when `turbine ci check` loads a QualitySpec whose target contract is retired. I need exact severity, exact diagnostic id, and the file:line where it's emitted."
51
+
52
+ ### 4. Draft the page
53
+
54
+ Use the `writing-clearly-and-concisely` skill's principles. The voice this project has settled on is:
55
+
56
+ - **Lead with the answer.** First paragraph is the one-line distinction or the punchline. A reader who quits after one paragraph should still know the headline.
57
+ - **Comparison table near the top.** When the page contrasts two things, put the table within the first screen so skimmers find it.
58
+ - **Plain language over jargon.** Internal terms like "linter", "telemetry source label", "cross-contract rule", "DSL" are fine inside the implementation, but in user docs prefer "validation", "shows up in dashboards as", "rules that check the relationship", "the YAML format". Keep domain terms (contract, schema, primary key, dimension); drop tool internals.
59
+ - **Hide the implementation; show the experience.** The reader is here to *use* the feature, not to learn how it's built. Do not name the JSON schema, the Pydantic model, the parser, the StrEnum, the specific lint rule code, the diagnostic id, the sentinel value, or the file:line that enforces something. Collapse all of that into what the user *sees*: "validation catches it", "the contract fails to load", "the CLI prints an error". Lint rule names are OK to mention once if the reader needs to grep for the diagnostic in their output, but never as a list of mechanisms ("the JSON schema enforces X, the lint rule does Y, the parser does Z"). Three sentences of plumbing become one sentence of behaviour.
60
+ - **Two-tier layout for technical content.** When a page has unavoidable depth (full column tables, every field of a config struct, every status enum, dialect quirks, migration mechanics), do not dump it inline. The top of the page must read end-to-end for someone who is *not* implementing against it: prose, a diagram, and a one-line-each summary table. Push the column-by-column breakdowns and the "if you are debugging the writer" notes into mkdocs material collapsibles using `??? note "Section name"`. A reader who only wants the mental model can skim past; a reader who needs the rows can expand them. Use this layout especially on Concepts pages, where the audience is mixed.
61
+ - **Diagrams over wall-of-prose for relationships.** Whenever a page describes objects that point at each other (database tables with FKs, components that exchange messages, lifecycle states), draw the picture. The docs site renders d2 — use ` ```d2 ` blocks with the project's `{{ d2_classes }}` macro and `{{ d2_edge }}` for arrows so the diagram inherits the dark-mode theme already configured in `mkdocs.yml` (`d2.dark_theme: -1`). For schema diagrams, use d2's `sql_table` shape (see `concepts/row-flagging.md` for an example). Do not reach for mermaid; the rest of the docs site is d2 and a stray mermaid block stands out. Mermaid is only acceptable if d2 genuinely cannot express what you need.
62
+ - **Concrete examples in YAML block style.** Never inline flow style (`{key: value, key: value}`). Always indented blocks.
63
+ - **No em-dashes.** Use commas, periods, or colons. The repo convention is strict.
64
+ - **No agreement theater, no puffery.** No "groundbreaking", "seamless", "powerful", "the whole point", "stands as a testament". Say what the thing does and stop.
65
+ - **Explain, don't sell.** If a sentence reads like marketing, cut it. If a sentence motivates a feature with pain ("Tired of brittle SQL tests?"), cut it.
66
+ - **Reflect reality, even when it contradicts the existing doc.** If the existing page claims notifications, gates, or scoring behaviour the code does not implement, do not perpetuate it. Document the actual behaviour, and if the gap matters, mention it briefly without dressing it up.
67
+ - **Short topic sentences. Short paragraphs. Lists when items are parallel.** Avoid the rule of three for its own sake.
68
+ - **Active voice. Positive form. Definite, specific words.** Strunk's basics; the writing-clearly skill has the long version.
69
+
70
+ Page skeleton that has been working:
71
+
72
+ 1. One-paragraph lead with the answer.
73
+ 2. "At a glance" table (only if the page is comparative or has a fixed set of slots).
74
+ 3. A diagram, if the page describes things that relate to each other (tables with FKs, lifecycle states, components calling each other). Use d2 with `{{ d2_classes }}`.
75
+ 4. The next thing the reader will want, usually "When to use which" or "What it looks like".
76
+ 5. Mechanics last: lint differences, runtime behaviour, edge cases. If any single section turns into a wide column table or a list of dialect quirks, push it into a `??? note "..."` collapsible so it does not break the reading flow above.
77
+ 6. "See also" cards block at the bottom, linking to neighbours.
78
+
79
+ If the page exists already, prefer rewriting wrong sections in place over a top-down rewrite. The audit may have flagged three lines; a full rewrite throws away accurate prose.
80
+
81
+ ### 5. Wire up the nav (new page) or remove it (delete)
82
+
83
+ For a **new page**, edit `docs/user/mkdocs.yml` and add the entry under the right section. The order in the nav usually matches the doc's intended position in a learning sequence; ask if unsure.
84
+
85
+ For a **delete**, remove the nav entry, remove any redirects in `mkdocs.yml`'s `redirect_maps` pointing at the deleted file, and check there are no internal links to it (`grep -rn 'reference/comparison'` or similar). Fix or drop any orphaned links.
86
+
87
+ ### 6. Dispatch the reviewer
88
+
89
+ Spawn a subagent to verify the draft against the code. Use the `general-purpose` agent (the `spec-reviewer` agent is for code-vs-spec compliance, not docs-vs-code; this is the closest fit for verification work).
90
+
91
+ Reviewer prompt template:
92
+
93
+ ```
94
+ Verify that the documentation page at <path> accurately describes the
95
+ behaviour of <feature> in this codebase.
96
+
97
+ What I changed/wrote: <one-paragraph summary>.
98
+
99
+ Read the page, then read the actual implementation in <list of files
100
+ you checked in step 3>. For every factual claim in the page (CLI flags,
101
+ YAML field names, default values, error severities, runtime behaviour,
102
+ lint rule names), confirm it against the code or flag it as wrong.
103
+
104
+ Also flag:
105
+ - Claims of features that do not exist in code.
106
+ - Stale terminology (renamed enums, fields, modules).
107
+ - YAML examples that would not parse against the current Pydantic models.
108
+
109
+ Report findings as a numbered list. For each finding give: the line in
110
+ the doc, what it claims, what the code actually does, and the file:line
111
+ that proves it. Do not rewrite the doc; just report. Under 400 words.
112
+ ```
113
+
114
+ ### 7. Apply the fixes
115
+
116
+ Read the reviewer's findings. For each one:
117
+
118
+ - If the finding is correct, fix the doc.
119
+ - If the finding is wrong (rare, but happens when the reviewer reads stale code in another worktree), say so and move on.
120
+
121
+ Do **not** silently accept findings without checking. Reviewers occasionally over-correct.
122
+
123
+ ### 8. Tick the box
124
+
125
+ Edit `docs-todo.md`. Change the `- [ ]` for this item to `- [x]`. Do not change other lines.
126
+
127
+ ### 9. Report back
128
+
129
+ Tell the user:
130
+
131
+ - Which item you took.
132
+ - Whether it was a new page, update, or delete.
133
+ - The 2–4 most material reality-vs-doc gaps you closed (skip trivial typos).
134
+ - The path of the file you wrote, so they can open it.
135
+ - That the box is ticked.
136
+
137
+ Stop there. Do not auto-advance to the next item; the user decides when to run again.
138
+
139
+ ## Things that have tripped this workflow before
140
+
141
+ - **Following audit hints blindly.** The audit was made on a date; some hints are no longer accurate. Always re-verify.
142
+ - **Carrying over salesy phrasing from the old doc.** If the previous page said "ensures rock-solid quality across your entire data platform", do not preserve that voice for continuity. Rewrite it plain.
143
+ - **Adding em-dashes back in.** They sneak in via copy-paste from the old doc. Grep the final file for `—` and remove every one before committing.
144
+ - **Restating schema in QualitySpec docs (or similar).** Specs inherit from the contract; do not re-document the schema in two places.
145
+ - **Listing internal mechanisms when one user-facing sentence will do.** A draft that reads "the JSON schema enforces the enum, the `check-dimension-required` lint rule errors out when missing, and the `--min-score` parser rejects unknown names" leaks three implementation details the reader does not care about. Replace with "validation catches it" or "the contract fails to load". The reader wants to know what they will experience, not which layer caught them. Same for sentinel keys, parser fallbacks, and "shouted about it" asides about lint behaviour — they're plumbing, not user surface.
146
+ - **Dumping every column inline.** A schema page with five tables, each with eight to ten columns, becomes a wall of grids that drowns the prose. Lead with the mental model (what each table is *for*, in one line) and a diagram, then collapse the per-column tables into `??? note "<table name>"` blocks. A reader who only needs the diagram never has to scroll past the schema; a reader who needs the columns expands them. This applies whenever a page would otherwise carry more than one wide reference table.
147
+ - **Editing the changelog.** This skill does not touch `CHANGELOG.md`. If the user wants a changelog line, that is a separate ask.
148
+
149
+ ## What this skill does not do
150
+
151
+ - It does not commit or push. The user runs `/commit` when they're ready.
152
+ - It does not run the docs build. If the user wants a preview, they run `mkdocs serve --livereload` themselves.
153
+ - It does not advance to the next item automatically.
@@ -0,0 +1 @@
1
+ gitdir: /Users/yassin/Documents/projects/turbine/.git/worktrees/turbine-lsp
@@ -0,0 +1,69 @@
1
+ # Turbine metadata
2
+ .turbine/
3
+
4
+ # Intentionally broken example files (for manual error testing)
5
+ example_errors/
6
+
7
+ # Environment variables
8
+ .env
9
+
10
+ # Python
11
+ __pycache__/
12
+ *.py[cod]
13
+ *$py.class
14
+ .pytest_cache/
15
+ .complexipy_cache/
16
+ *.egg-info/
17
+ dist/
18
+ build/
19
+ _version.py
20
+
21
+ # DuckDB
22
+ *.duckdb
23
+ *.duckdb.wal
24
+
25
+ # Node
26
+ node_modules/
27
+ *.vsix
28
+
29
+ # IDE
30
+ .idea/
31
+ .vscode/
32
+ *.swp
33
+ *.swo
34
+
35
+ # Gradle / JetBrains plugins
36
+ .gradle/
37
+ .intellijPlatform/
38
+ example/datasources/datasource_snowflake.yml
39
+ .coverage
40
+
41
+ # Claude Code
42
+ .claude/settings.local.json
43
+ .claude/worktrees/
44
+ .audit-workspace/
45
+ claude-docs/
46
+ **/.DS_Store
47
+ .cache
48
+ site
49
+ .playwright-mcp
50
+
51
+ # Architecture site generated output
52
+ docs/contributing/architecture/build/
53
+
54
+ # E2E test output
55
+ e2e-output/
56
+ hidden
57
+ ab_presentation
58
+ tach_module_graph.dot
59
+ TODO.md
60
+ .strikt_cache
61
+ .understand-anything
62
+ demo/keys/snowflake_key.pem
63
+ _legacy/
64
+ slides
65
+ refactor-paths.md
66
+ plan.md
67
+ meeting-context.md
68
+ parity-todo.md
69
+ .preview-cache
@@ -0,0 +1,36 @@
1
+ include:
2
+ - project: 1000009-python-platform/applications/pipelines/uv
3
+ file: python-3.12.yml
4
+ inputs:
5
+ renovate-repositories: "1000078-app-keten-shared/applications/turbine-container"
6
+
7
+ publish-pypi:
8
+ stage: build
9
+ image: $CI_REGISTRY/1000009-python-platform/applications/containers/python_ci:1.0.22-3.12
10
+ tags:
11
+ - linux
12
+ needs: []
13
+ script:
14
+ - uv build
15
+ - uv publish --token "$PYPI_TOKEN"
16
+ rules:
17
+ - if: $CI_COMMIT_TAG
18
+
19
+ publish-vscode-marketplace:
20
+ stage: build
21
+ image: node:22-bookworm
22
+ tags:
23
+ - linux
24
+ needs: []
25
+ script:
26
+ - cd editors/vscode
27
+ - npm ci
28
+ - npm run package
29
+ - npm run publish:marketplace -- -p "$VSCE_PAT"
30
+ artifacts:
31
+ when: always
32
+ paths:
33
+ - editors/vscode/*.vsix
34
+ expire_in: 1 week
35
+ rules:
36
+ - if: $CI_COMMIT_TAG