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.
- turbine_data-0.1.0/.claude/hooks/format-after-edit.sh +11 -0
- turbine_data-0.1.0/.claude/hooks/pre-commit-lint.sh +47 -0
- turbine_data-0.1.0/.claude/settings.json +26 -0
- turbine_data-0.1.0/.claude/skills/code-simplification/SKILL.md +304 -0
- turbine_data-0.1.0/.claude/skills/docs-todo-next/SKILL.md +153 -0
- turbine_data-0.1.0/.git +1 -0
- turbine_data-0.1.0/.gitignore +69 -0
- turbine_data-0.1.0/.gitlab-ci.yml +36 -0
- turbine_data-0.1.0/.pi/skills/docs-todo-next/SKILL.md +153 -0
- turbine_data-0.1.0/.pre-commit-config.yaml +29 -0
- turbine_data-0.1.0/.streamlit/config.toml +7 -0
- turbine_data-0.1.0/CHANGELOG.md +311 -0
- turbine_data-0.1.0/CLAUDE.md +145 -0
- turbine_data-0.1.0/CONTEXT.md +716 -0
- turbine_data-0.1.0/PKG-INFO +214 -0
- turbine_data-0.1.0/README.md +71 -0
- turbine_data-0.1.0/ai-docs/adr/0001-sla-time-column-not-latency.md +71 -0
- turbine_data-0.1.0/ai-docs/adr/0002-auto-bump-contract-version.md +86 -0
- turbine_data-0.1.0/ai-docs/adr/0003-insert-snippet-port-method.md +99 -0
- turbine_data-0.1.0/ai-docs/adr/0004-in-editor-docs-bar.md +96 -0
- turbine_data-0.1.0/ai-docs/adr/0005-threshold-family-taxonomy.md +191 -0
- turbine_data-0.1.0/ai-docs/adr/0006-run-age-no-stale-outcome.md +64 -0
- turbine_data-0.1.0/ai-docs/adr/0007-metadata-store-local-fallback.md +87 -0
- turbine_data-0.1.0/ai-docs/adr/0008-multi-dataset-api-url-shape.md +168 -0
- turbine_data-0.1.0/ai-docs/adr/0009-project-initialization-command-and-layout.md +12 -0
- turbine_data-0.1.0/ai-docs/adr/0010-custom-check-mode-authoring.md +11 -0
- turbine_data-0.1.0/ai-docs/adr/0010-soda-parity-fields-are-turbine-semantics.md +3 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-3.md +297 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-6.md +440 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture-slice-7.md +432 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/architecture.md +520 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/.gitignore +1 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/architecture.html +3532 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/class.mmd +82 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/flow.mmd +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/sequence.mmd +33 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/class.mmd +80 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/flow.mmd +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-3/sequence.mmd +35 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/class.mmd +47 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/flow.mmd +20 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-4/sequence.mmd +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/class.mmd +74 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/flow.mmd +26 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-6/sequence.mmd +34 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/class.mmd +72 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/flow.mmd +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/diagrams/slice-7/sequence.mmd +42 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/001-threshold-family-taxonomy-foundation.md +45 -0
- 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
- 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
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/004-floor-family-renderer.md +68 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/005-range-family-renderer.md +46 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/006-lag-family-sla-latency-reading.md +75 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/issues/007-anomaly-family-anomalybandconfig-wiring.md +86 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-configure-thresholds-intuitively/prd.md +421 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-custom-check-modes/prd.md +195 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/architecture-004-run-quality-cli-output.md +131 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/architecture.md +133 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/.gitignore +1 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-class.mmd +19 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-flow.mmd +14 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/002-snowflake-starter-sequence.mmd +16 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-class.mmd +38 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-flow.mmd +25 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/004-run-quality-sequence.mmd +21 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-class.mmd +57 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-flow.mmd +30 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/005-core-cli-sequence.mmd +14 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/architecture.html +3444 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/class.mmd +31 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/flow.mmd +10 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/diagrams/sequence.mmd +14 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/001-build-canonical-turbine-init.md +39 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/002-ship-snowflake-starter-output.md +38 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/issues/003-finish-public-command-surface.md +32 -0
- 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
- 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
- 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
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-first-run-polished-cli/prd.md +137 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/001-persistence-read-side.md +66 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/002-quality-specs-schema-grouping.md +46 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/003-workspace-tree-expansion-behavior.md +63 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/004-focus-based-refresh.md +51 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/005-metadata-store-boundary.md +74 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/issues/006-spec-codelens-to-code-action.md +65 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-quality-results-everywhere/prd.md +434 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-reconciliation-checks/prd.md +464 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/architecture.md +113 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/.gitignore +1 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/architecture.html +3505 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/class.mmd +51 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/flow.mmd +37 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/diagrams/sequence.mmd +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/001-python-creation-commands.md +44 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/002-vscode-sidebar-wiring.md +32 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/003-contract-from-datasource-unification.md +40 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/issues/index.md +22 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-sidebar-resource-creation/prd.md +85 -0
- 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
- 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
- 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
- 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
- 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
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/006-check-time-variable-substitution.md +34 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/issues/007-odcs-sql-query-placeholders.md +28 -0
- turbine_data-0.1.0/ai-docs/plans/2026-05-03-soda-parity-core-semantics/prd.md +217 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/architecture.md +72 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/.gitignore +1 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/architecture.html +3477 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/class.mmd +47 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/flow.mmd +19 -0
- turbine_data-0.1.0/ai-docs/plans/column-streaming/diagrams/sequence.mmd +22 -0
- turbine_data-0.1.0/catalog-info.yaml +20 -0
- turbine_data-0.1.0/demo/api/__init__.py +0 -0
- turbine_data-0.1.0/demo/api/models/READINGS.py +40 -0
- turbine_data-0.1.0/demo/api/models/__init__.py +11 -0
- turbine_data-0.1.0/demo/api/models/customer.py +37 -0
- turbine_data-0.1.0/demo/api/models/daily_aggregate.py +37 -0
- turbine_data-0.1.0/demo/api/models/does_not_exist.py +17 -0
- turbine_data-0.1.0/demo/api/models/energy_reading.py +42 -0
- turbine_data-0.1.0/demo/api/models/example.py +18 -0
- turbine_data-0.1.0/demo/api/models/inventory.py +40 -0
- turbine_data-0.1.0/demo/api/models/meter.py +36 -0
- turbine_data-0.1.0/demo/api/models/order.py +37 -0
- turbine_data-0.1.0/demo/api/models/payment.py +40 -0
- turbine_data-0.1.0/demo/api/models/product.py +37 -0
- turbine_data-0.1.0/demo/api/models/reading.py +43 -0
- turbine_data-0.1.0/demo/api/models/sensor.py +32 -0
- turbine_data-0.1.0/demo/api/routers/READINGS_router.py +32 -0
- turbine_data-0.1.0/demo/api/routers/__init__.py +25 -0
- turbine_data-0.1.0/demo/api/routers/customer_router.py +32 -0
- turbine_data-0.1.0/demo/api/routers/daily_aggregate_router.py +38 -0
- turbine_data-0.1.0/demo/api/routers/does_not_exist_router.py +27 -0
- turbine_data-0.1.0/demo/api/routers/energy_reading_router.py +36 -0
- turbine_data-0.1.0/demo/api/routers/example_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/inventory_router.py +32 -0
- turbine_data-0.1.0/demo/api/routers/meter_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/order_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/payment_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/product_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/reading_router.py +30 -0
- turbine_data-0.1.0/demo/api/routers/sensor_router.py +30 -0
- turbine_data-0.1.0/demo/checks/amount_range.sql +4 -0
- turbine_data-0.1.0/demo/checks/broken_check.py +9 -0
- turbine_data-0.1.0/demo/checks/check_range.sql +5 -0
- turbine_data-0.1.0/demo/checks/e2e_null_check.py +6 -0
- turbine_data-0.1.0/demo/checks/e2e_null_check_sf.py +6 -0
- turbine_data-0.1.0/demo/checks/freshness.sql +5 -0
- turbine_data-0.1.0/demo/checks/invalid_status.sql +4 -0
- turbine_data-0.1.0/demo/checks/invalid_status_sf.sql +4 -0
- turbine_data-0.1.0/demo/checks/negative_amount.sql +4 -0
- turbine_data-0.1.0/demo/checks/negative_amount_sf.sql +4 -0
- turbine_data-0.1.0/demo/checks/negative_energy.sql +4 -0
- turbine_data-0.1.0/demo/checks/negative_energy_sf.sql +4 -0
- turbine_data-0.1.0/demo/checks/orphaned_meters.sql +5 -0
- turbine_data-0.1.0/demo/checks/orphaned_meters_sf.sql +5 -0
- turbine_data-0.1.0/demo/checks/polars_null_check.py +8 -0
- turbine_data-0.1.0/demo/checks/positive_energy.sql +4 -0
- turbine_data-0.1.0/demo/checks/sql/invalid_status.sql +4 -0
- turbine_data-0.1.0/demo/checks/sql/negative_amount.sql +4 -0
- turbine_data-0.1.0/demo/checks/sql/positive_energy.sql +4 -0
- turbine_data-0.1.0/demo/checks/sql/voltage_range.sql +5 -0
- turbine_data-0.1.0/demo/checks/status_email_consistency.sql +6 -0
- turbine_data-0.1.0/demo/checks/test-2.sql +5 -0
- turbine_data-0.1.0/demo/checks/test-name.py +8 -0
- turbine_data-0.1.0/demo/checks/validate_amounts.py +8 -0
- turbine_data-0.1.0/demo/checks/validate_order_consistency.py +24 -0
- turbine_data-0.1.0/demo/checks/validate_orders.py +12 -0
- turbine_data-0.1.0/demo/checks/validate_totals.py +8 -0
- turbine_data-0.1.0/demo/checks/voltage_range.sql +5 -0
- turbine_data-0.1.0/demo/checks/voltage_range_sf.sql +5 -0
- turbine_data-0.1.0/demo/contracts/allsoda-test.yml +35 -0
- turbine_data-0.1.0/demo/contracts/broken-bad-yaml.yml +14 -0
- turbine_data-0.1.0/demo/contracts/broken-missing-schema.yml +7 -0
- turbine_data-0.1.0/demo/contracts/crm.yml +50 -0
- turbine_data-0.1.0/demo/contracts/customer-base.yml +28 -0
- turbine_data-0.1.0/demo/contracts/drift-test.yml +22 -0
- turbine_data-0.1.0/demo/contracts/e2e-dsl-test-sf.yml +33 -0
- turbine_data-0.1.0/demo/contracts/e2e-dsl-test.yml +33 -0
- turbine_data-0.1.0/demo/contracts/e2e-flagging.yml +33 -0
- turbine_data-0.1.0/demo/contracts/ecommerce.yml +53 -0
- turbine_data-0.1.0/demo/contracts/energy-clean.yml +33 -0
- turbine_data-0.1.0/demo/contracts/energy-prices.yml +35 -0
- turbine_data-0.1.0/demo/contracts/energy-readings.yml +33 -0
- turbine_data-0.1.0/demo/contracts/example-contract.yml +15 -0
- turbine_data-0.1.0/demo/contracts/inc-test-sf.yml +30 -0
- turbine_data-0.1.0/demo/contracts/inc-test.yml +30 -0
- turbine_data-0.1.0/demo/contracts/meter-readings.yml +67 -0
- turbine_data-0.1.0/demo/contracts/multi-dup-test-sf.yml +42 -0
- turbine_data-0.1.0/demo/contracts/multi-dup-test.yml +42 -0
- turbine_data-0.1.0/demo/contracts/no-drift.yml +22 -0
- turbine_data-0.1.0/demo/contracts/no-validation-issues.yml +22 -0
- turbine_data-0.1.0/demo/contracts/nonexistent-table.yml +11 -0
- turbine_data-0.1.0/demo/contracts/odcs-sql-test.yml +71 -0
- turbine_data-0.1.0/demo/contracts/py-test.yml +32 -0
- turbine_data-0.1.0/demo/contracts/sf-energy-readings.yml +40 -0
- turbine_data-0.1.0/demo/contracts/soda-test.yml +32 -0
- turbine_data-0.1.0/demo/contracts/validate-test.yml +22 -0
- turbine_data-0.1.0/demo/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/demo/dashboard/components/__init__.py +0 -0
- turbine_data-0.1.0/demo/dashboard/logic/__init__.py +0 -0
- turbine_data-0.1.0/demo/dashboard/pages/__init__.py +0 -0
- turbine_data-0.1.0/demo/dashboard/pages/alerts.py +71 -0
- turbine_data-0.1.0/demo/dashboard/pages/contracts.py +74 -0
- turbine_data-0.1.0/demo/dashboard/pages/flagged_rows.py +30 -0
- turbine_data-0.1.0/demo/dashboard/pages/overview.py +65 -0
- turbine_data-0.1.0/demo/dashboard/pages/quality_matrix.py +72 -0
- turbine_data-0.1.0/demo/dashboard/resources/__init__.py +0 -0
- turbine_data-0.1.0/demo/datasources/broken-missing-env.yml +8 -0
- turbine_data-0.1.0/demo/datasources/broken-unknown-type.yml +6 -0
- turbine_data-0.1.0/demo/datasources/default.yml +8 -0
- turbine_data-0.1.0/demo/datasources/local.yml +4 -0
- turbine_data-0.1.0/demo/datasources/postgres.yml +8 -0
- turbine_data-0.1.0/demo/datasources/snowflake-test.yml +10 -0
- turbine_data-0.1.0/demo/datasources/snowflake.yml +9 -0
- turbine_data-0.1.0/demo/datasources/test-demo.yml +9 -0
- turbine_data-0.1.0/demo/datasources/warehouse.yml +8 -0
- turbine_data-0.1.0/demo/quality/allsoda-test.yml +37 -0
- turbine_data-0.1.0/demo/quality/crm-customers-checks.yml +37 -0
- turbine_data-0.1.0/demo/quality/crm-products-checks.yml +47 -0
- turbine_data-0.1.0/demo/quality/e2e-aggregates-sf.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-aggregates.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-duplicate-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-duplicate.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-failed-rows-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-failed-rows.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-flagging-test.yml +29 -0
- turbine_data-0.1.0/demo/quality/e2e-flatline-sf.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-flatline.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-freshness-sf.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-freshness.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-inc-missing-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-inc-missing.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-missing-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-missing.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-multi-check-sf.yml +25 -0
- turbine_data-0.1.0/demo/quality/e2e-multi-check.yml +27 -0
- turbine_data-0.1.0/demo/quality/e2e-multi-dup-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-multi-dup.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-pct-change-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-pct-change.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-polars-test.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-py-bad-function.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-py-runtime-error.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-py-walkthrough.yml +22 -0
- turbine_data-0.1.0/demo/quality/e2e-python-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-python.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-reference-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-reference.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-rowcount-sf.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-rowcount.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-spike-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-spike-strict-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-spike-tolerant-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-spike.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-file-sf.yml +11 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-file.yml +10 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-inline-sf.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-inline.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-template-duckdb.yml +36 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-template-test-sf.yml +26 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-template-test.yml +23 -0
- turbine_data-0.1.0/demo/quality/e2e-sql-threshold.yml +28 -0
- turbine_data-0.1.0/demo/quality/e2e-typed-python-check.yml +22 -0
- turbine_data-0.1.0/demo/quality/e2e-values-in-sf.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-values-in.yml +12 -0
- turbine_data-0.1.0/demo/quality/e2e-zscore-sf.yml +13 -0
- turbine_data-0.1.0/demo/quality/e2e-zscore-strict-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-zscore-tolerant-sf.yml +14 -0
- turbine_data-0.1.0/demo/quality/e2e-zscore.yml +13 -0
- turbine_data-0.1.0/demo/quality/ecommerce-orders-checks.yml +47 -0
- turbine_data-0.1.0/demo/quality/ecommerce-payments-checks.yml +55 -0
- turbine_data-0.1.0/demo/quality/energy-sql-checks.yml +24 -0
- turbine_data-0.1.0/demo/quality/energy-window-checks.yml +25 -0
- turbine_data-0.1.0/demo/quality/inc-test.yml +11 -0
- turbine_data-0.1.0/demo/quality/orders-quality.yml +24 -0
- turbine_data-0.1.0/demo/quality/py-test.yml +10 -0
- turbine_data-0.1.0/demo/quality/sf-e2e-flagging.yml +20 -0
- turbine_data-0.1.0/demo/quality/sf-e2e-typed-python-check.yml +20 -0
- turbine_data-0.1.0/demo/quality/sf-energy-quality.yml +55 -0
- turbine_data-0.1.0/demo/quality/soda-test.yml +20 -0
- turbine_data-0.1.0/demo/seed_snowflake.py +205 -0
- turbine_data-0.1.0/demo/setup_dashboard_demo.py +271 -0
- turbine_data-0.1.0/demo/setup_demo.py +102 -0
- turbine_data-0.1.0/demo/test-scaffold/contracts/example.yml +18 -0
- turbine_data-0.1.0/demo/test-scaffold/datasources/local.yml +4 -0
- turbine_data-0.1.0/demo/tune_check_streamlit.py +868 -0
- turbine_data-0.1.0/demos/component_showcase.py +242 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/adapters.md +56 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/application.md +11 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/check-pipeline-v2.drawio +255 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/check-pipeline.drawio +278 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/core.md +92 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/deepening-candidates.md +321 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/hex-diagram.svg +60 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/infra.md +52 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/overview.md +160 -0
- turbine_data-0.1.0/docs/dev/docs/architecture/presentation.md +49 -0
- turbine_data-0.1.0/docs/dev/docs/assets/favicon.svg +3 -0
- turbine_data-0.1.0/docs/dev/docs/assets/turbine-logo.svg +3 -0
- turbine_data-0.1.0/docs/dev/docs/contributing/adding-a-bounded-context.md +92 -0
- turbine_data-0.1.0/docs/dev/docs/contributing/conventions.md +87 -0
- turbine_data-0.1.0/docs/dev/docs/contributing/releasing.md +48 -0
- turbine_data-0.1.0/docs/dev/docs/decisions/001-hexagonal-architecture.md +17 -0
- turbine_data-0.1.0/docs/dev/docs/decisions/002-domain-events-over-hooks.md +17 -0
- turbine_data-0.1.0/docs/dev/docs/decisions/003-why-turbine-wraps-soda.md +30 -0
- turbine_data-0.1.0/docs/dev/docs/decisions/004-contract-ir.md +34 -0
- turbine_data-0.1.0/docs/dev/docs/glossary.md +30 -0
- turbine_data-0.1.0/docs/dev/docs/index.md +36 -0
- turbine_data-0.1.0/docs/dev/docs/patterns/diagnostics.md +148 -0
- turbine_data-0.1.0/docs/dev/docs/patterns/ports-and-adapters.md +107 -0
- turbine_data-0.1.0/docs/dev/docs/stylesheets/extra.css +225 -0
- turbine_data-0.1.0/docs/dev/docs/walkthroughs/how-contract-parsing-works.md +128 -0
- turbine_data-0.1.0/docs/dev/mkdocs.yml +29 -0
- turbine_data-0.1.0/docs/mkdocs.base.yml +77 -0
- turbine_data-0.1.0/docs/user/docs/assets/favicon.svg +3 -0
- turbine_data-0.1.0/docs/user/docs/assets/hero-pipeline.svg +68 -0
- turbine_data-0.1.0/docs/user/docs/assets/turbine-check.png +0 -0
- turbine_data-0.1.0/docs/user/docs/assets/turbine-logo.svg +3 -0
- turbine_data-0.1.0/docs/user/docs/changelog/.authors.yml +5 -0
- turbine_data-0.1.0/docs/user/docs/changelog/index.md +7 -0
- turbine_data-0.1.0/docs/user/docs/concepts/check-pipeline.md +196 -0
- turbine_data-0.1.0/docs/user/docs/concepts/codegen.md +199 -0
- turbine_data-0.1.0/docs/user/docs/concepts/contracts.md +259 -0
- turbine_data-0.1.0/docs/user/docs/concepts/incremental.md +203 -0
- turbine_data-0.1.0/docs/user/docs/concepts/index.md +92 -0
- turbine_data-0.1.0/docs/user/docs/concepts/lsp.md +155 -0
- turbine_data-0.1.0/docs/user/docs/concepts/metadata-schema.md +253 -0
- turbine_data-0.1.0/docs/user/docs/concepts/quality-dimensions.md +95 -0
- turbine_data-0.1.0/docs/user/docs/concepts/qualityspec-vs-contract.md +123 -0
- turbine_data-0.1.0/docs/user/docs/concepts/row-flagging.md +166 -0
- turbine_data-0.1.0/docs/user/docs/concepts/scoring.md +266 -0
- turbine_data-0.1.0/docs/user/docs/concepts/telemetry.md +111 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/Makefile +23 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/01-presentation-layer.md +33 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/02-orchestration-layer.md +33 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/03-domain-layer.md +36 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/04-config-layer.md +30 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/edc/05-foundation-layer.md +30 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/workspace/01-overview.md +31 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/docs/workspace/02-layer-rules.md +43 -0
- turbine_data-0.1.0/docs/user/docs/contributing/architecture/workspace.dsl +380 -0
- turbine_data-0.1.0/docs/user/docs/contributing/index.md +752 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/anomaly-detection.md +212 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/api-server-setup.md +189 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/gitlab-ci.md +126 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/index.md +60 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/migrate-from-soda.md +127 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/multi-database.md +127 -0
- turbine_data-0.1.0/docs/user/docs/cookbook/new-data-product.md +155 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/core-concepts.md +68 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/first-contract.md +179 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/index.md +96 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/installation.md +120 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/next-steps.md +108 -0
- turbine_data-0.1.0/docs/user/docs/getting-started/quickstart.md +46 -0
- turbine_data-0.1.0/docs/user/docs/guides/api-server.md +223 -0
- turbine_data-0.1.0/docs/user/docs/guides/authoring-contracts.md +429 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/custom-checks.md +130 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/group-count.svg +55 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/group-duplicate.svg +232 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/python-flag-groups.svg +140 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/python-lookback.svg +41 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/python-validate.svg +88 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/python.md +250 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/sql-join.svg +88 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/sql-template.svg +71 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/sql.md +241 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/tune-mode.md +131 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-checks.md +550 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-duplicate.svg +58 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-freshness.svg +42 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-invalid.svg +56 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-missing.svg +58 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/turbine-rowcount.svg +46 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-check-chart.svg +58 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-flatline.svg +58 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-pct-change.svg +57 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-range.svg +52 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-spike.svg +53 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window-zscore.svg +57 -0
- turbine_data-0.1.0/docs/user/docs/guides/checks/window.md +296 -0
- turbine_data-0.1.0/docs/user/docs/guides/ci-cd.md +338 -0
- turbine_data-0.1.0/docs/user/docs/guides/codegen.md +255 -0
- turbine_data-0.1.0/docs/user/docs/guides/contract-versioning.md +185 -0
- turbine_data-0.1.0/docs/user/docs/guides/dashboard.md +153 -0
- turbine_data-0.1.0/docs/user/docs/guides/datasources.md +283 -0
- turbine_data-0.1.0/docs/user/docs/guides/dev-workflow.md +215 -0
- turbine_data-0.1.0/docs/user/docs/guides/incremental.md +179 -0
- turbine_data-0.1.0/docs/user/docs/guides/index.md +245 -0
- turbine_data-0.1.0/docs/user/docs/guides/linting.md +261 -0
- turbine_data-0.1.0/docs/user/docs/guides/lsp-clients.md +195 -0
- turbine_data-0.1.0/docs/user/docs/guides/onboarding.md +113 -0
- turbine_data-0.1.0/docs/user/docs/guides/performance.md +166 -0
- turbine_data-0.1.0/docs/user/docs/guides/python-api.md +179 -0
- turbine_data-0.1.0/docs/user/docs/guides/quality-specs.md +198 -0
- turbine_data-0.1.0/docs/user/docs/guides/row-flagging-bitmask.svg +273 -0
- turbine_data-0.1.0/docs/user/docs/guides/row-flagging.md +194 -0
- turbine_data-0.1.0/docs/user/docs/guides/scaffolding.md +179 -0
- turbine_data-0.1.0/docs/user/docs/guides/schema-validation.md +223 -0
- turbine_data-0.1.0/docs/user/docs/guides/scoring-gates.md +163 -0
- turbine_data-0.1.0/docs/user/docs/guides/security.md +252 -0
- turbine_data-0.1.0/docs/user/docs/guides/sla-properties.md +194 -0
- turbine_data-0.1.0/docs/user/docs/guides/telemetry-setup.md +135 -0
- turbine_data-0.1.0/docs/user/docs/guides/vscode.md +244 -0
- turbine_data-0.1.0/docs/user/docs/guides/workflow-pipeline.svg +57 -0
- turbine_data-0.1.0/docs/user/docs/guides/workflow.md +102 -0
- turbine_data-0.1.0/docs/user/docs/includes/glossary.md +9 -0
- turbine_data-0.1.0/docs/user/docs/index.md +117 -0
- turbine_data-0.1.0/docs/user/docs/javascripts/mathjax.js +12 -0
- turbine_data-0.1.0/docs/user/docs/javascripts/playground.js +257 -0
- turbine_data-0.1.0/docs/user/docs/overrides/partials/announce.html +3 -0
- turbine_data-0.1.0/docs/user/docs/overrides/partials/source.html +14 -0
- turbine_data-0.1.0/docs/user/docs/playground.md +64 -0
- turbine_data-0.1.0/docs/user/docs/reference/api-playground.md +322 -0
- turbine_data-0.1.0/docs/user/docs/reference/api.md +202 -0
- turbine_data-0.1.0/docs/user/docs/reference/cli.md +57 -0
- turbine_data-0.1.0/docs/user/docs/reference/configuration.md +404 -0
- turbine_data-0.1.0/docs/user/docs/reference/databases.md +62 -0
- turbine_data-0.1.0/docs/user/docs/reference/diagnostic-ids.md +121 -0
- turbine_data-0.1.0/docs/user/docs/reference/env-vars.md +190 -0
- turbine_data-0.1.0/docs/user/docs/reference/errors.md +323 -0
- turbine_data-0.1.0/docs/user/docs/reference/exit-codes.md +134 -0
- turbine_data-0.1.0/docs/user/docs/reference/glossary.md +136 -0
- turbine_data-0.1.0/docs/user/docs/reference/index.md +53 -0
- turbine_data-0.1.0/docs/user/docs/reference/odcs-schema.md +771 -0
- turbine_data-0.1.0/docs/user/docs/reference/sla-schema.md +202 -0
- turbine_data-0.1.0/docs/user/docs/reference/troubleshooting.md +307 -0
- turbine_data-0.1.0/docs/user/docs/stylesheets/extra.css +509 -0
- turbine_data-0.1.0/docs/user/guide-audit.md +73 -0
- turbine_data-0.1.0/docs/user/main.py +142 -0
- turbine_data-0.1.0/docs/user/mkdocs.yml +244 -0
- turbine_data-0.1.0/docs-todo.md +137 -0
- turbine_data-0.1.0/editors/jetbrains/.gitignore +4 -0
- turbine_data-0.1.0/editors/jetbrains/bin/main/META-INF/plugin.xml +22 -0
- turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineDocumentMatcher.kt +21 -0
- turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineLanguageServer.kt +12 -0
- turbine_data-0.1.0/editors/jetbrains/bin/main/com/turbine/lsp4ij/TurbineLanguageServerFactory.kt +10 -0
- turbine_data-0.1.0/editors/jetbrains/build.gradle.kts +42 -0
- turbine_data-0.1.0/editors/jetbrains/gradle/wrapper/gradle-wrapper.jar +0 -0
- turbine_data-0.1.0/editors/jetbrains/gradle/wrapper/gradle-wrapper.properties +7 -0
- turbine_data-0.1.0/editors/jetbrains/gradle.properties +13 -0
- turbine_data-0.1.0/editors/jetbrains/gradlew +248 -0
- turbine_data-0.1.0/editors/jetbrains/gradlew.bat +93 -0
- turbine_data-0.1.0/editors/jetbrains/settings.gradle.kts +1 -0
- turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineDocumentMatcher.kt +21 -0
- turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineLanguageServer.kt +12 -0
- turbine_data-0.1.0/editors/jetbrains/src/main/kotlin/com/turbine/lsp4ij/TurbineLanguageServerFactory.kt +10 -0
- turbine_data-0.1.0/editors/jetbrains/src/main/resources/META-INF/plugin.xml +22 -0
- turbine_data-0.1.0/editors/protocol/README.md +58 -0
- turbine_data-0.1.0/editors/protocol/turbine-lsp-extension.schema.json +501 -0
- turbine_data-0.1.0/editors/vscode/.gitignore +3 -0
- turbine_data-0.1.0/editors/vscode/.vscodeignore +7 -0
- turbine_data-0.1.0/editors/vscode/LICENSE +191 -0
- turbine_data-0.1.0/editors/vscode/README.md +31 -0
- turbine_data-0.1.0/editors/vscode/assets/plotly.min.js +8 -0
- turbine_data-0.1.0/editors/vscode/eslint.config.mjs +17 -0
- turbine_data-0.1.0/editors/vscode/icon.png +0 -0
- turbine_data-0.1.0/editors/vscode/media/tune/panel.css +629 -0
- turbine_data-0.1.0/editors/vscode/media/tune/panel.js +1067 -0
- turbine_data-0.1.0/editors/vscode/media/walkthrough/01-see-concepts.md +7 -0
- turbine_data-0.1.0/editors/vscode/media/walkthrough/02-walk-example.md +11 -0
- turbine_data-0.1.0/editors/vscode/media/walkthrough/03-connect-my-data.md +9 -0
- turbine_data-0.1.0/editors/vscode/out/anchor-hider.d.ts +13 -0
- turbine_data-0.1.0/editors/vscode/out/anchor-hider.js +106 -0
- turbine_data-0.1.0/editors/vscode/out/anchor-hider.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/check-result-range.d.ts +8 -0
- turbine_data-0.1.0/editors/vscode/out/check-result-range.js +31 -0
- turbine_data-0.1.0/editors/vscode/out/check-result-range.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/client.d.ts +113 -0
- turbine_data-0.1.0/editors/vscode/out/client.js +185 -0
- turbine_data-0.1.0/editors/vscode/out/client.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.js +14 -0
- turbine_data-0.1.0/editors/vscode/out/diagnostic-pull-match.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/execution.d.ts +13 -0
- turbine_data-0.1.0/editors/vscode/out/execution.js +306 -0
- turbine_data-0.1.0/editors/vscode/out/execution.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/extension.d.ts +3 -0
- turbine_data-0.1.0/editors/vscode/out/extension.js +900 -0
- turbine_data-0.1.0/editors/vscode/out/extension.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/ghost-hint.d.ts +3 -0
- turbine_data-0.1.0/editors/vscode/out/ghost-hint.js +81 -0
- turbine_data-0.1.0/editors/vscode/out/ghost-hint.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.d.ts +20 -0
- turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.js +19 -0
- turbine_data-0.1.0/editors/vscode/out/insert-snippet-request.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-html.d.ts +36 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-html.js +422 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-html.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-panel.d.ts +32 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-panel.js +112 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-panel.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-state.d.ts +8 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-state.js +17 -0
- turbine_data-0.1.0/editors/vscode/out/onboarding-state.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/picker-html.d.ts +10 -0
- turbine_data-0.1.0/editors/vscode/out/picker-html.js +174 -0
- turbine_data-0.1.0/editors/vscode/out/picker-html.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/progress-cancel.d.ts +11 -0
- turbine_data-0.1.0/editors/vscode/out/progress-cancel.js +10 -0
- turbine_data-0.1.0/editors/vscode/out/progress-cancel.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/progress-toast.d.ts +47 -0
- turbine_data-0.1.0/editors/vscode/out/progress-toast.js +199 -0
- turbine_data-0.1.0/editors/vscode/out/progress-toast.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/quick-pick.d.ts +9 -0
- turbine_data-0.1.0/editors/vscode/out/quick-pick.js +84 -0
- turbine_data-0.1.0/editors/vscode/out/quick-pick.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/run-all.d.ts +13 -0
- turbine_data-0.1.0/editors/vscode/out/run-all.js +187 -0
- turbine_data-0.1.0/editors/vscode/out/run-all.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/sandbox.d.ts +16 -0
- turbine_data-0.1.0/editors/vscode/out/sandbox.js +155 -0
- turbine_data-0.1.0/editors/vscode/out/sandbox.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/server-commands.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/server-commands.js +13 -0
- turbine_data-0.1.0/editors/vscode/out/server-commands.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.d.ts +62 -0
- turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.js +238 -0
- turbine_data-0.1.0/editors/vscode/out/sidebar-resource-creation.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/runTest.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/runTest.js +51 -0
- turbine_data-0.1.0/editors/vscode/out/test/runTest.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.js +74 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/check-result-range.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.js +50 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/diagnostic-pull-match.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/index.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/index.js +60 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/index.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.js +65 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/insert-snippet-request.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.js +122 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-panel.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.js +101 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/onboarding-state.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.js +108 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/picker-html.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.js +196 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/progress-toast.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.js +328 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sandbox.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.js +47 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/server-commands.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.js +653 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/sidebar-resource-creation.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.d.ts +10 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.js +271 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine-e2e.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.js +350 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-engine.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.js +171 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tour-state.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.js +191 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tree-bridge.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.d.ts +1 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.js +976 -0
- turbine_data-0.1.0/editors/vscode/out/test/suite/tune-shell.test.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/test-controller.d.ts +9 -0
- turbine_data-0.1.0/editors/vscode/out/test-controller.js +227 -0
- turbine_data-0.1.0/editors/vscode/out/test-controller.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tour-engine.d.ts +55 -0
- turbine_data-0.1.0/editors/vscode/out/tour-engine.js +379 -0
- turbine_data-0.1.0/editors/vscode/out/tour-engine.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tour-state.d.ts +19 -0
- turbine_data-0.1.0/editors/vscode/out/tour-state.js +29 -0
- turbine_data-0.1.0/editors/vscode/out/tour-state.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tree-bridge.d.ts +42 -0
- turbine_data-0.1.0/editors/vscode/out/tree-bridge.js +296 -0
- turbine_data-0.1.0/editors/vscode/out/tree-bridge.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.d.ts +24 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.js +130 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/anomaly.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.d.ts +19 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.js +115 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/failures-allowed.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/floor.d.ts +19 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/floor.js +160 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/floor.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/lag.d.ts +21 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/lag.js +138 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/lag.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/range.d.ts +38 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/range.js +268 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/range.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.d.ts +30 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.js +13 -0
- turbine_data-0.1.0/editors/vscode/out/tune/family/renderer.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/format.d.ts +21 -0
- turbine_data-0.1.0/editors/vscode/out/tune/format.js +61 -0
- turbine_data-0.1.0/editors/vscode/out/tune/format.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.d.ts +9 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.js +57 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/categorical.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.d.ts +11 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.js +34 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/fallback.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/group.d.ts +10 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/group.js +75 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/group.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.d.ts +27 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.js +16 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/mode.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.d.ts +12 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.js +29 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/registry.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.d.ts +14 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.js +41 -0
- turbine_data-0.1.0/editors/vscode/out/tune/modes/shared.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/panel.d.ts +64 -0
- turbine_data-0.1.0/editors/vscode/out/tune/panel.js +339 -0
- turbine_data-0.1.0/editors/vscode/out/tune/panel.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/pickers.d.ts +19 -0
- turbine_data-0.1.0/editors/vscode/out/tune/pickers.js +119 -0
- turbine_data-0.1.0/editors/vscode/out/tune/pickers.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.d.ts +15 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.js +25 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/diff-panel.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.d.ts +11 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.js +36 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/family-routing.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.d.ts +13 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.js +28 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/non-canonical-notice.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.d.ts +101 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.js +263 -0
- turbine_data-0.1.0/editors/vscode/out/tune/shell/quick-picks.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/tune/template.d.ts +31 -0
- turbine_data-0.1.0/editors/vscode/out/tune/template.js +181 -0
- turbine_data-0.1.0/editors/vscode/out/tune/template.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/out/types.d.ts +446 -0
- turbine_data-0.1.0/editors/vscode/out/types.js +9 -0
- turbine_data-0.1.0/editors/vscode/out/types.js.map +1 -0
- turbine_data-0.1.0/editors/vscode/package-lock.json +6306 -0
- turbine_data-0.1.0/editors/vscode/package.json +357 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/checks/amount_positive.sql +6 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/contracts/customers.yml +31 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/contracts/orders.yml +35 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/data/.gitignore +2 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/datasources/local.yml +4 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/pyproject.toml +2 -0
- turbine_data-0.1.0/editors/vscode/sandbox-template/quality/orders.yml +29 -0
- turbine_data-0.1.0/editors/vscode/src/anchor-hider.ts +79 -0
- turbine_data-0.1.0/editors/vscode/src/check-result-range.ts +48 -0
- turbine_data-0.1.0/editors/vscode/src/client.ts +273 -0
- turbine_data-0.1.0/editors/vscode/src/diagnostic-pull-match.ts +11 -0
- turbine_data-0.1.0/editors/vscode/src/execution.ts +369 -0
- turbine_data-0.1.0/editors/vscode/src/extension.ts +1089 -0
- turbine_data-0.1.0/editors/vscode/src/ghost-hint.ts +48 -0
- turbine_data-0.1.0/editors/vscode/src/insert-snippet-request.ts +38 -0
- turbine_data-0.1.0/editors/vscode/src/onboarding-html.ts +458 -0
- turbine_data-0.1.0/editors/vscode/src/onboarding-panel.ts +95 -0
- turbine_data-0.1.0/editors/vscode/src/onboarding-state.ts +18 -0
- turbine_data-0.1.0/editors/vscode/src/picker-html.ts +188 -0
- turbine_data-0.1.0/editors/vscode/src/progress-cancel.ts +17 -0
- turbine_data-0.1.0/editors/vscode/src/progress-toast.ts +213 -0
- turbine_data-0.1.0/editors/vscode/src/quick-pick.ts +62 -0
- turbine_data-0.1.0/editors/vscode/src/run-all.ts +181 -0
- turbine_data-0.1.0/editors/vscode/src/sandbox.ts +137 -0
- turbine_data-0.1.0/editors/vscode/src/server-commands.ts +9 -0
- turbine_data-0.1.0/editors/vscode/src/sidebar-resource-creation.ts +290 -0
- turbine_data-0.1.0/editors/vscode/src/test/runTest.ts +17 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/check-result-range.test.ts +50 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/diagnostic-pull-match.test.ts +17 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/index.ts +24 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/insert-snippet-request.test.ts +37 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/onboarding-panel.test.ts +104 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/onboarding-state.test.ts +83 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/picker-html.test.ts +85 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/progress-toast.test.ts +222 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/sandbox.test.ts +345 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/server-commands.test.ts +14 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/sidebar-resource-creation.test.ts +741 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/tour-engine-e2e.test.ts +292 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/tour-engine.test.ts +387 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/tour-state.test.ts +162 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/tree-bridge.test.ts +185 -0
- turbine_data-0.1.0/editors/vscode/src/test/suite/tune-shell.test.ts +1023 -0
- turbine_data-0.1.0/editors/vscode/src/test-controller.ts +239 -0
- turbine_data-0.1.0/editors/vscode/src/tour-engine.ts +416 -0
- turbine_data-0.1.0/editors/vscode/src/tour-state.ts +40 -0
- turbine_data-0.1.0/editors/vscode/src/tree-bridge.ts +287 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/anomaly.ts +146 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/failures-allowed.ts +129 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/floor.ts +183 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/lag.ts +162 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/range.ts +316 -0
- turbine_data-0.1.0/editors/vscode/src/tune/family/renderer.ts +35 -0
- turbine_data-0.1.0/editors/vscode/src/tune/format.ts +60 -0
- turbine_data-0.1.0/editors/vscode/src/tune/modes/categorical.ts +62 -0
- turbine_data-0.1.0/editors/vscode/src/tune/modes/fallback.ts +35 -0
- turbine_data-0.1.0/editors/vscode/src/tune/modes/mode.ts +35 -0
- turbine_data-0.1.0/editors/vscode/src/tune/modes/registry.ts +29 -0
- turbine_data-0.1.0/editors/vscode/src/tune/modes/shared.ts +42 -0
- turbine_data-0.1.0/editors/vscode/src/tune/panel.ts +382 -0
- turbine_data-0.1.0/editors/vscode/src/tune/pickers.ts +102 -0
- turbine_data-0.1.0/editors/vscode/src/tune/shell/diff-panel.ts +26 -0
- turbine_data-0.1.0/editors/vscode/src/tune/shell/family-routing.ts +29 -0
- turbine_data-0.1.0/editors/vscode/src/tune/shell/non-canonical-notice.ts +32 -0
- turbine_data-0.1.0/editors/vscode/src/tune/shell/quick-picks.ts +293 -0
- turbine_data-0.1.0/editors/vscode/src/tune/template.ts +220 -0
- turbine_data-0.1.0/editors/vscode/src/types.ts +570 -0
- turbine_data-0.1.0/editors/vscode/tsconfig.json +22 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/01-why-turbine-exists.md +23 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/02-onboarding-sandbox.md +25 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/03-project-layout.md +28 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/04-datasource.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/05-contract-identity.md +24 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/06-dataset.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/07-columns-and-row-identity.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/08-sla-time-column.md +24 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/09-run-validate.md +28 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/10-lint-vs-drift.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/11-all-contracts-panel.md +27 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/12-contract-vs-quality-spec.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/13-contract-versioning.md +26 -0
- turbine_data-0.1.0/onboarding-test/01-foundations/14-foundations-recap.md +25 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/01-where-checks-live.md +26 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/02-check-anatomy.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/03-open-real-add-check-discovery.md +28 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/04-hover-and-completion-discovery.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/05-missing-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/06-duplicate-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/07-invalid-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/08-row-count-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/09-freshness-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/10-flatline-window-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/11-threshold-families.md +26 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/12-open-pick-threshold.md +28 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/13-run-one-check.md +28 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/14-read-outcomes.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/15-row-flagging.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/16-sql-check.md +30 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/17-python-check.md +24 -0
- turbine_data-0.1.0/onboarding-test/02-quality-checks/18-quality-recap.md +25 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/01-what-contracts-unlock.md +23 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/02-generate-api.md +28 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/03-api-resource-shape.md +24 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/04-start-live-api-server.md +27 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/05-open-data-swagger.md +27 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/06-open-management-swagger.md +27 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/07-seed-run-results.md +28 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/08-open-dashboard.md +27 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/09-read-dashboard-status.md +23 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/10-flagged-rows-in-dashboard.md +23 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/11-next-real-project-step.md +23 -0
- turbine_data-0.1.0/onboarding-test/03-ship-and-observe/12-final-handoff-cleanup.md +29 -0
- turbine_data-0.1.0/onboarding-test/README.md +58 -0
- turbine_data-0.1.0/pyproject.toml +259 -0
- turbine_data-0.1.0/renovate.json +4 -0
- turbine_data-0.1.0/src/turbine/__init__.py +135 -0
- turbine_data-0.1.0/src/turbine/_version.py +24 -0
- turbine_data-0.1.0/src/turbine/adapters/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/adapters/analysis/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/analysis/file_code_writer.py +96 -0
- turbine_data-0.1.0/src/turbine/adapters/api/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/adapters/api/dependencies.py +21 -0
- turbine_data-0.1.0/src/turbine/adapters/api/models/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/adapters/api/models/abstract_model.py +90 -0
- turbine_data-0.1.0/src/turbine/adapters/audit/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/audit/check_result_repo.py +50 -0
- turbine_data-0.1.0/src/turbine/adapters/audit/run_buffer.py +68 -0
- turbine_data-0.1.0/src/turbine/adapters/audit/subscribers.py +91 -0
- turbine_data-0.1.0/src/turbine/adapters/audit/trail.py +170 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/__init__.py +21 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/__init__.py +26 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/layout.py +86 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/mount.py +412 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/naming.py +97 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/package_init.py +115 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/plan.py +167 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/schema_model.py +298 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/schema_router.py +618 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/api/slow_count.py +53 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/ast_utils.py +131 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/ci.py +155 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/contract.py +78 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/datasource.py +56 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/formatter.py +67 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/jinja.py +30 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/sweeper.py +43 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/template_loader.py +14 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/templates/check_python.py.jinja +60 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/templates/check_sql.sql.jinja +5 -0
- turbine_data-0.1.0/src/turbine/adapters/codegen/writer.py +52 -0
- turbine_data-0.1.0/src/turbine/adapters/contract/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/adapters/contract/domain_registry.py +76 -0
- turbine_data-0.1.0/src/turbine/adapters/contract/repo_list_lookup.py +28 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/api_dataset.py +194 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/api_dispatcher.py +115 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/api_models.py +30 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/backend_loader.py +34 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/component_discovery.py +38 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/config.py +49 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/discovery_helpers.py +12 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard/page_discovery.py +51 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/dispatcher.py +362 -0
- turbine_data-0.1.0/src/turbine/adapters/dashboard_demo/models.py +255 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/__init__.py +25 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/backend.py +167 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/backend_factory.py +66 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/connectivity_probe.py +43 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/dialects/__init__.py +23 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/dialects/duckdb.py +70 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/dialects/postgres.py +70 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/dialects/snowflake.py +92 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/schema_introspector.py +163 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/seed_writer.py +110 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/sql_helpers.py +23 -0
- turbine_data-0.1.0/src/turbine/adapters/databases/sqlglot_support.py +164 -0
- turbine_data-0.1.0/src/turbine/adapters/dismissal/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/dismissal/json_store.py +123 -0
- turbine_data-0.1.0/src/turbine/adapters/events/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/events/registry.py +91 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/__init__.py +15 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/check_file_resolver.py +32 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/contract_repository.py +130 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_descriptor.py +18 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_model.py +165 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_reader.py +41 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_repository.py +135 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/datasource_schema_catalog.py +15 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/file_writer.py +27 -0
- turbine_data-0.1.0/src/turbine/adapters/filesystem/schemas/datasource.schema.json +165 -0
- turbine_data-0.1.0/src/turbine/adapters/git/__init__.py +6 -0
- turbine_data-0.1.0/src/turbine/adapters/git/loader.py +55 -0
- turbine_data-0.1.0/src/turbine/adapters/git/previous_version.py +76 -0
- turbine_data-0.1.0/src/turbine/adapters/indexing/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/indexing/project_index.py +179 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/__init__.py +7 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/descriptor.py +14 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/implementation_validation.py +137 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/reader.py +1082 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/schema_catalog.py +273 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/schema_extensions.json +206 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/schema_validation.py +85 -0
- turbine_data-0.1.0/src/turbine/adapters/odcs/writer.py +82 -0
- turbine_data-0.1.0/src/turbine/adapters/onboarding/__init__.py +7 -0
- turbine_data-0.1.0/src/turbine/adapters/onboarding/lsp_diagnostic_source.py +29 -0
- turbine_data-0.1.0/src/turbine/adapters/onboarding/lsp_introspection_source.py +22 -0
- turbine_data-0.1.0/src/turbine/adapters/onboarding/timer_scheduler.py +34 -0
- turbine_data-0.1.0/src/turbine/adapters/onboarding/yaml_parser.py +21 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/__init__.py +6 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/descriptor.py +14 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/python/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/python/data_loader.py +143 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/python/requester.py +108 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/python/runner.py +399 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/reader.py +371 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/schema_catalog.py +18 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/schema_validation.py +89 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/soda/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/soda/bypass.py +531 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_dataset_executor.py +351 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_dataset_writer.py +237 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/batched_runner.py +397 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/check_metadata_writer.py +169 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/dialect_capabilities.py +54 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/fingerprint.py +79 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/predicate_renderer.py +271 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/quality_view_writer.py +123 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/renderer.py +228 -0
- turbine_data-0.1.0/src/turbine/adapters/quality/sql/windowed_renderer.py +124 -0
- turbine_data-0.1.0/src/turbine/adapters/schema_validation/__init__.py +17 -0
- turbine_data-0.1.0/src/turbine/adapters/schema_validation/descriptor_validator.py +39 -0
- turbine_data-0.1.0/src/turbine/adapters/schema_validation/handlers.py +575 -0
- turbine_data-0.1.0/src/turbine/adapters/schema_validation/model_parser.py +18 -0
- turbine_data-0.1.0/src/turbine/adapters/schema_validation/validator.py +154 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/__init__.py +47 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/conventions.py +20 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/handler.py +116 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/logfire_tracer.py +173 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/mapping.py +155 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/ports.py +102 -0
- turbine_data-0.1.0/src/turbine/adapters/telemetry/provider.py +111 -0
- turbine_data-0.1.0/src/turbine/adapters/yaml/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/adapters/yaml/treesitter_store.py +873 -0
- turbine_data-0.1.0/src/turbine/api/__init__.py +8 -0
- turbine_data-0.1.0/src/turbine/api/runtime/__init__.py +200 -0
- turbine_data-0.1.0/src/turbine/api/runtime/base.py +315 -0
- turbine_data-0.1.0/src/turbine/api/runtime/caching.py +129 -0
- turbine_data-0.1.0/src/turbine/api/runtime/errors.py +101 -0
- turbine_data-0.1.0/src/turbine/api/runtime/observability.py +262 -0
- turbine_data-0.1.0/src/turbine/api/runtime/openapi.py +279 -0
- turbine_data-0.1.0/src/turbine/api/runtime/pagination.py +105 -0
- turbine_data-0.1.0/src/turbine/api/runtime/query.py +96 -0
- turbine_data-0.1.0/src/turbine/api/runtime/rate_limit.py +283 -0
- turbine_data-0.1.0/src/turbine/api/runtime/session.py +110 -0
- turbine_data-0.1.0/src/turbine/api/runtime/status.py +121 -0
- turbine_data-0.1.0/src/turbine/application/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/application/analysis/__init__.py +32 -0
- turbine_data-0.1.0/src/turbine/application/analysis/add_check.py +438 -0
- turbine_data-0.1.0/src/turbine/application/analysis/check_catalog_service.py +8 -0
- turbine_data-0.1.0/src/turbine/application/analysis/code_lens.py +347 -0
- turbine_data-0.1.0/src/turbine/application/analysis/command.py +501 -0
- turbine_data-0.1.0/src/turbine/application/analysis/completion.py +770 -0
- turbine_data-0.1.0/src/turbine/application/analysis/dashboard_data.py +234 -0
- turbine_data-0.1.0/src/turbine/application/analysis/datasource_revalidation.py +167 -0
- turbine_data-0.1.0/src/turbine/application/analysis/definition.py +91 -0
- turbine_data-0.1.0/src/turbine/application/analysis/diagnostics.py +172 -0
- turbine_data-0.1.0/src/turbine/application/analysis/dismissal_filter.py +45 -0
- turbine_data-0.1.0/src/turbine/application/analysis/document_link.py +344 -0
- turbine_data-0.1.0/src/turbine/application/analysis/drift_mapping.py +77 -0
- turbine_data-0.1.0/src/turbine/application/analysis/hover.py +139 -0
- turbine_data-0.1.0/src/turbine/application/analysis/indexing.py +92 -0
- turbine_data-0.1.0/src/turbine/application/analysis/lint.py +317 -0
- turbine_data-0.1.0/src/turbine/application/analysis/lsp_client_port.py +137 -0
- turbine_data-0.1.0/src/turbine/application/analysis/project_setup.py +109 -0
- turbine_data-0.1.0/src/turbine/application/analysis/project_status.py +23 -0
- turbine_data-0.1.0/src/turbine/application/analysis/rename.py +176 -0
- turbine_data-0.1.0/src/turbine/application/analysis/run_check_resolver.py +66 -0
- turbine_data-0.1.0/src/turbine/application/analysis/schema_validation.py +351 -0
- turbine_data-0.1.0/src/turbine/application/analysis/sidebar_resource_creation.py +470 -0
- turbine_data-0.1.0/src/turbine/application/analysis/test_datasource.py +47 -0
- turbine_data-0.1.0/src/turbine/application/analysis/threshold_hint.py +220 -0
- turbine_data-0.1.0/src/turbine/application/analysis/tour_service.py +188 -0
- turbine_data-0.1.0/src/turbine/application/analysis/tune_check.py +922 -0
- turbine_data-0.1.0/src/turbine/application/analysis/versioning_surface.py +316 -0
- turbine_data-0.1.0/src/turbine/application/codegen/__init__.py +6 -0
- turbine_data-0.1.0/src/turbine/application/codegen/plan.py +43 -0
- turbine_data-0.1.0/src/turbine/application/codegen/use_case.py +135 -0
- turbine_data-0.1.0/src/turbine/application/dashboard/__init__.py +12 -0
- turbine_data-0.1.0/src/turbine/application/dashboard/autobind.py +68 -0
- turbine_data-0.1.0/src/turbine/application/dashboard/crossfilter.py +90 -0
- turbine_data-0.1.0/src/turbine/application/dashboard/page_resolver.py +278 -0
- turbine_data-0.1.0/src/turbine/application/dashboard/picker_options.py +40 -0
- turbine_data-0.1.0/src/turbine/application/diagnostics.py +63 -0
- turbine_data-0.1.0/src/turbine/application/format_registry.py +158 -0
- turbine_data-0.1.0/src/turbine/application/implementation_dispatch.py +128 -0
- turbine_data-0.1.0/src/turbine/application/lsp/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/application/lsp/formatting_service.py +139 -0
- turbine_data-0.1.0/src/turbine/application/operations/__init__.py +35 -0
- turbine_data-0.1.0/src/turbine/application/operations/bump_contract.py +115 -0
- turbine_data-0.1.0/src/turbine/application/operations/check.py +665 -0
- turbine_data-0.1.0/src/turbine/application/operations/check_connectivity.py +42 -0
- turbine_data-0.1.0/src/turbine/application/operations/collector.py +315 -0
- turbine_data-0.1.0/src/turbine/application/operations/diff_contract.py +104 -0
- turbine_data-0.1.0/src/turbine/application/operations/diff_project.py +88 -0
- turbine_data-0.1.0/src/turbine/application/operations/flag_coalescer.py +52 -0
- turbine_data-0.1.0/src/turbine/application/operations/flag_planner.py +57 -0
- turbine_data-0.1.0/src/turbine/application/operations/project_results.py +52 -0
- turbine_data-0.1.0/src/turbine/application/operations/project_summary.py +82 -0
- turbine_data-0.1.0/src/turbine/application/operations/run_plan.py +55 -0
- turbine_data-0.1.0/src/turbine/application/operations/seed.py +32 -0
- turbine_data-0.1.0/src/turbine/application/operations/stream_consumer.py +162 -0
- turbine_data-0.1.0/src/turbine/application/operations/validate_schema.py +131 -0
- turbine_data-0.1.0/src/turbine/application/project_initialization.py +266 -0
- turbine_data-0.1.0/src/turbine/application/quality/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/application/quality/queries.py +17 -0
- turbine_data-0.1.0/src/turbine/application/quality/schema_runner.py +167 -0
- turbine_data-0.1.0/src/turbine/core/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/core/analysis/__init__.py +57 -0
- turbine_data-0.1.0/src/turbine/core/analysis/add_check_request.py +29 -0
- turbine_data-0.1.0/src/turbine/core/analysis/check_catalog.py +206 -0
- turbine_data-0.1.0/src/turbine/core/analysis/check_snippet.py +401 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/__init__.py +19 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/cursor.py +21 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/document.py +51 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/key_context.py +45 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/sql.py +88 -0
- turbine_data-0.1.0/src/turbine/core/analysis/context/text.py +52 -0
- turbine_data-0.1.0/src/turbine/core/analysis/contract_health.py +146 -0
- turbine_data-0.1.0/src/turbine/core/analysis/diagnostic_store.py +74 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/code_action.py +827 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/code_lens.py +710 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/code_lens_tree.py +407 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/column_refs.py +156 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/completion.py +561 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/definition.py +110 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/document_link.py +39 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/hover.py +214 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/references.py +42 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/rename.py +147 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/semantic_tokens.py +81 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/snippet_builder.py +310 -0
- turbine_data-0.1.0/src/turbine/core/analysis/features/symbols.py +86 -0
- turbine_data-0.1.0/src/turbine/core/analysis/impact/__init__.py +13 -0
- turbine_data-0.1.0/src/turbine/core/analysis/impact/analyzer.py +130 -0
- turbine_data-0.1.0/src/turbine/core/analysis/impact/model.py +14 -0
- turbine_data-0.1.0/src/turbine/core/analysis/model.py +43 -0
- turbine_data-0.1.0/src/turbine/core/analysis/ports.py +213 -0
- turbine_data-0.1.0/src/turbine/core/analysis/protocol.py +739 -0
- turbine_data-0.1.0/src/turbine/core/analysis/quality_leaves.py +125 -0
- turbine_data-0.1.0/src/turbine/core/analysis/quality_source.py +153 -0
- turbine_data-0.1.0/src/turbine/core/analysis/run_rollup.py +149 -0
- turbine_data-0.1.0/src/turbine/core/analysis/schemas/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/core/analysis/schemas/quality_spec.schema.json +503 -0
- turbine_data-0.1.0/src/turbine/core/analysis/source_spans.py +94 -0
- turbine_data-0.1.0/src/turbine/core/analysis/tokenization/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/core/analysis/tokenization/sql.py +215 -0
- turbine_data-0.1.0/src/turbine/core/analysis/tree_builder.py +91 -0
- turbine_data-0.1.0/src/turbine/core/analysis/tree_protocol.py +170 -0
- turbine_data-0.1.0/src/turbine/core/analysis/validation_rows.py +141 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/__init__.py +65 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/__init__.py +49 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/builder.py +187 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/docs_links.py +27 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/exceptions.py +25 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/ids.py +111 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/sink.py +30 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/source_map.py +39 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/diagnostics/types.py +125 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/events.py +41 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/file_edits.py +13 -0
- turbine_data-0.1.0/src/turbine/core/building_blocks/schema_constants.py +51 -0
- turbine_data-0.1.0/src/turbine/core/codegen/__init__.py +62 -0
- turbine_data-0.1.0/src/turbine/core/codegen/deduplication.py +30 -0
- turbine_data-0.1.0/src/turbine/core/codegen/model.py +163 -0
- turbine_data-0.1.0/src/turbine/core/codegen/naming.py +40 -0
- turbine_data-0.1.0/src/turbine/core/codegen/plan.py +34 -0
- turbine_data-0.1.0/src/turbine/core/codegen/ports.py +89 -0
- turbine_data-0.1.0/src/turbine/core/codegen/report.py +19 -0
- turbine_data-0.1.0/src/turbine/core/codegen/type_system.py +65 -0
- turbine_data-0.1.0/src/turbine/core/common/__init__.py +214 -0
- turbine_data-0.1.0/src/turbine/core/common/analysis_types.py +48 -0
- turbine_data-0.1.0/src/turbine/core/common/change_types.py +41 -0
- turbine_data-0.1.0/src/turbine/core/common/check_outcome.py +13 -0
- turbine_data-0.1.0/src/turbine/core/common/column_ref_metadata.py +19 -0
- turbine_data-0.1.0/src/turbine/core/common/commands.py +23 -0
- turbine_data-0.1.0/src/turbine/core/common/connection_props.py +127 -0
- turbine_data-0.1.0/src/turbine/core/common/constants.py +36 -0
- turbine_data-0.1.0/src/turbine/core/common/contract_walk.py +78 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/__init__.py +67 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/checks.py +440 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/columns.py +27 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/spec.py +186 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/thresholds.py +152 -0
- turbine_data-0.1.0/src/turbine/core/common/dataset_spec/time_column.py +21 -0
- turbine_data-0.1.0/src/turbine/core/common/datasource.py +41 -0
- turbine_data-0.1.0/src/turbine/core/common/datasource_type.py +38 -0
- turbine_data-0.1.0/src/turbine/core/common/datatype_compatibility.py +65 -0
- turbine_data-0.1.0/src/turbine/core/common/duration.py +114 -0
- turbine_data-0.1.0/src/turbine/core/common/error_summary.py +26 -0
- turbine_data-0.1.0/src/turbine/core/common/events.py +59 -0
- turbine_data-0.1.0/src/turbine/core/common/field_doc.py +23 -0
- turbine_data-0.1.0/src/turbine/core/common/file_edits.py +57 -0
- turbine_data-0.1.0/src/turbine/core/common/file_sync.py +28 -0
- turbine_data-0.1.0/src/turbine/core/common/identifiers.py +127 -0
- turbine_data-0.1.0/src/turbine/core/common/introspection_cache.py +61 -0
- turbine_data-0.1.0/src/turbine/core/common/layout.py +27 -0
- turbine_data-0.1.0/src/turbine/core/common/logical_type.py +47 -0
- turbine_data-0.1.0/src/turbine/core/common/matching.py +41 -0
- turbine_data-0.1.0/src/turbine/core/common/parsing.py +27 -0
- turbine_data-0.1.0/src/turbine/core/common/ports.py +307 -0
- turbine_data-0.1.0/src/turbine/core/common/quality_dimension.py +57 -0
- turbine_data-0.1.0/src/turbine/core/common/schema_walker.py +438 -0
- turbine_data-0.1.0/src/turbine/core/common/source.py +29 -0
- turbine_data-0.1.0/src/turbine/core/common/timestamp.py +51 -0
- turbine_data-0.1.0/src/turbine/core/common/validation.py +19 -0
- turbine_data-0.1.0/src/turbine/core/contract/__init__.py +119 -0
- turbine_data-0.1.0/src/turbine/core/contract/api_rules.py +600 -0
- turbine_data-0.1.0/src/turbine/core/contract/diagnostic_collector.py +21 -0
- turbine_data-0.1.0/src/turbine/core/contract/diff.py +66 -0
- turbine_data-0.1.0/src/turbine/core/contract/diff_computer.py +251 -0
- turbine_data-0.1.0/src/turbine/core/contract/dismissal.py +45 -0
- turbine_data-0.1.0/src/turbine/core/contract/errors.py +16 -0
- turbine_data-0.1.0/src/turbine/core/contract/events.py +108 -0
- turbine_data-0.1.0/src/turbine/core/contract/lint_rules.py +1346 -0
- turbine_data-0.1.0/src/turbine/core/contract/ports.py +246 -0
- turbine_data-0.1.0/src/turbine/core/contract/reader.py +194 -0
- turbine_data-0.1.0/src/turbine/core/contract/semver.py +138 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/__init__.py +136 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/backend_mode.py +12 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/chart_data.py +920 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/components/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/components/charts.py +923 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/components/data.py +184 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/components/display.py +20 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/components/layout.py +214 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/dashboard_model.py +169 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/dataset.py +145 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/errors.py +7 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/ext.py +78 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/field_ref.py +29 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/filter_translator.py +111 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/health.py +111 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/in_memory_dataset.py +205 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/injection.py +144 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/interactions.py +84 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/keys.py +36 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/models.py +70 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/query.py +174 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/selection_store.py +184 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/table_view.py +35 -0
- turbine_data-0.1.0/src/turbine/core/dashboard/theme.py +55 -0
- turbine_data-0.1.0/src/turbine/core/events.py +65 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/anchors.py +47 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/events.py +23 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/ports.py +55 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/predicates.py +109 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/skip_edits.py +78 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/step.py +59 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/step_watcher.py +90 -0
- turbine_data-0.1.0/src/turbine/core/onboarding/tours.py +194 -0
- turbine_data-0.1.0/src/turbine/core/quality/__init__.py +100 -0
- turbine_data-0.1.0/src/turbine/core/quality/cancel_event.py +33 -0
- turbine_data-0.1.0/src/turbine/core/quality/check_results.py +335 -0
- turbine_data-0.1.0/src/turbine/core/quality/check_runner.py +37 -0
- turbine_data-0.1.0/src/turbine/core/quality/check_validation.py +205 -0
- turbine_data-0.1.0/src/turbine/core/quality/datasource.py +63 -0
- turbine_data-0.1.0/src/turbine/core/quality/events.py +442 -0
- turbine_data-0.1.0/src/turbine/core/quality/flagging_types.py +122 -0
- turbine_data-0.1.0/src/turbine/core/quality/gate.py +73 -0
- turbine_data-0.1.0/src/turbine/core/quality/incremental.py +52 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/dataset_key.py +22 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/dataset_plan.py +44 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/errors.py +37 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/measurement.py +116 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/__init__.py +51 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/base.py +51 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/concrete.py +112 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/factory.py +233 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/predicates/windowed.py +204 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/requester.py +58 -0
- turbine_data-0.1.0/src/turbine/core/quality/plan/slots.py +112 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/__init__.py +38 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/anomaly_requester.py +98 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/dispatcher.py +46 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/filter_resolver.py +145 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/partition.py +41 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/planner.py +185 -0
- turbine_data-0.1.0/src/turbine/core/quality/planning/requesters.py +176 -0
- turbine_data-0.1.0/src/turbine/core/quality/ports.py +231 -0
- turbine_data-0.1.0/src/turbine/core/quality/run_context.py +41 -0
- turbine_data-0.1.0/src/turbine/core/quality/spec_models.py +274 -0
- turbine_data-0.1.0/src/turbine/core/quality/targets.py +117 -0
- turbine_data-0.1.0/src/turbine/core/seed/__init__.py +7 -0
- turbine_data-0.1.0/src/turbine/core/seed/ports.py +24 -0
- turbine_data-0.1.0/src/turbine/core/seed/row_generator.py +111 -0
- turbine_data-0.1.0/src/turbine/core/seed/types.py +42 -0
- turbine_data-0.1.0/src/turbine/core/shared/__init__.py +7 -0
- turbine_data-0.1.0/src/turbine/core/shared/filter_expr.py +71 -0
- turbine_data-0.1.0/src/turbine/core/shared/primary_key.py +3 -0
- turbine_data-0.1.0/src/turbine/core/shared/record_batch.py +3 -0
- turbine_data-0.1.0/src/turbine/core/tuning/__init__.py +76 -0
- turbine_data-0.1.0/src/turbine/core/tuning/mode_detection.py +19 -0
- turbine_data-0.1.0/src/turbine/core/tuning/model.py +169 -0
- turbine_data-0.1.0/src/turbine/core/tuning/query_builder.py +263 -0
- turbine_data-0.1.0/src/turbine/core/tuning/registry.py +407 -0
- turbine_data-0.1.0/src/turbine/core/tuning/sla.py +86 -0
- turbine_data-0.1.0/src/turbine/core/tuning/stats.py +95 -0
- turbine_data-0.1.0/src/turbine/core/tuning/verdict.py +251 -0
- turbine_data-0.1.0/src/turbine/core/tuning/yaml_editor.py +350 -0
- turbine_data-0.1.0/src/turbine/core/validation/__init__.py +14 -0
- turbine_data-0.1.0/src/turbine/core/validation/detector.py +71 -0
- turbine_data-0.1.0/src/turbine/core/validation/events.py +42 -0
- turbine_data-0.1.0/src/turbine/core/validation/model.py +164 -0
- turbine_data-0.1.0/src/turbine/core/validation/rules.py +70 -0
- turbine_data-0.1.0/src/turbine/core/validation/validator.py +108 -0
- turbine_data-0.1.0/src/turbine/data/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/data/enexis_domains.yml +1 -0
- turbine_data-0.1.0/src/turbine/infra/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/infra/config.py +215 -0
- turbine_data-0.1.0/src/turbine/infra/database/__init__.py +14 -0
- turbine_data-0.1.0/src/turbine/infra/database/engine.py +50 -0
- turbine_data-0.1.0/src/turbine/infra/database/metadata_store.py +130 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/env.py +50 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/runner.py +52 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/script.py.mako +24 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/versions/001_initial.py +166 -0
- turbine_data-0.1.0/src/turbine/infra/database/migrations/versions/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/infra/database/models.py +132 -0
- turbine_data-0.1.0/src/turbine/infra/database/session.py +9 -0
- turbine_data-0.1.0/src/turbine/infra/database/sql_helpers.py +23 -0
- turbine_data-0.1.0/src/turbine/infra/database/types.py +37 -0
- turbine_data-0.1.0/src/turbine/infra/database/url.py +115 -0
- turbine_data-0.1.0/src/turbine/infra/events.py +52 -0
- turbine_data-0.1.0/src/turbine/infra/git.py +39 -0
- turbine_data-0.1.0/src/turbine/infra/logging.py +61 -0
- turbine_data-0.1.0/src/turbine/presentation/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/presentation/api/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/presentation/api/app.py +46 -0
- turbine_data-0.1.0/src/turbine/presentation/api/dependencies.py +36 -0
- turbine_data-0.1.0/src/turbine/presentation/api/docs.py +103 -0
- turbine_data-0.1.0/src/turbine/presentation/api/exceptions.py +109 -0
- turbine_data-0.1.0/src/turbine/presentation/api/models.py +331 -0
- turbine_data-0.1.0/src/turbine/presentation/api/router_discovery.py +233 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/checks.py +90 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/contracts.py +81 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/dashboard.py +325 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/flagged_rows.py +57 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/helpers.py +42 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/runs.py +172 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/status.py +38 -0
- turbine_data-0.1.0/src/turbine/presentation/api/routers/validate.py +41 -0
- turbine_data-0.1.0/src/turbine/presentation/api/settings.py +12 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/__init__.py +29 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/app.py +85 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/codegen_factory.py +11 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/add_check_flow.py +220 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/bump.py +161 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/check.py +161 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/check_pipeline.py +283 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/ci.py +297 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/common.py +78 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/dashboard.py +98 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/generate.py +332 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/init.py +138 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/lint.py +68 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/new.py +724 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/seed.py +72 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/serve.py +130 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/status.py +151 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/commands/validate.py +105 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/context.py +127 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/__init__.py +38 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/check_report.py +495 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/diff_report.py +51 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/file_resolver.py +44 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/__init__.py +15 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/concise.py +31 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/full.py +147 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/json.py +64 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/formats/junit.py +141 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/human_summary.py +209 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/renderer.py +161 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/status_table.py +60 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/display/validation.py +104 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/error_handling.py +103 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/exit_status.py +11 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/gate_parsing.py +63 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/picker/__init__.py +6 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/picker/fuzzy.py +66 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/picker/picker.py +124 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/picker/renderer.py +144 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/picker/session.py +128 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/printer.py +65 -0
- turbine_data-0.1.0/src/turbine/presentation/cli/progress.py +320 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/app.py +282 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_builders.py +260 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_pipeline.py +167 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_registry.py +61 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_spec.py +59 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/chart_specs.py +296 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/echarts_models.py +1315 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/health_badge.py +25 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/render_context.py +30 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/renderer.py +639 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/sidebar.py +102 -0
- turbine_data-0.1.0/src/turbine/presentation/dashboard/state.py +22 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/__init__.py +538 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/diagnostic_refresh.py +18 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/diagnostics.py +75 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/cancel.py +31 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change.py +68 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_configuration.py +28 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_watched_files.py +33 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_change_workspace.py +43 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_close.py +28 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_open.py +37 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/did_save.py +29 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/file_context.py +37 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/initialized.py +89 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/telemetry.py +33 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/work_done_progress_cancel.py +32 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/notifications/workspace_scan.py +24 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/code_actions.py +322 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/code_lens.py +42 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/completion.py +101 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/dashboard_data.py +84 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/definition.py +44 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/diagnostic.py +79 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/document_link.py +43 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/document_symbols.py +70 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/execute_command.py +29 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/format.py +30 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/format_range.py +33 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/hover.py +44 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/list_checks.py +96 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/list_datasources.py +46 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_list.py +24 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_run.py +216 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_status.py +24 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/onboarding_watch.py +98 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/project_status.py +24 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/references.py +86 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/rename.py +80 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/run_check.py +382 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/scaffold_project.py +24 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/semantic_tokens.py +90 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/test_datasource.py +42 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/tree.py +89 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/tune_check.py +230 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/validate_schema.py +74 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/requests/workspace_symbols.py +42 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/traits.py +186 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/datasources.py +100 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/registry.py +99 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/trees/workspace.py +552 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/api/work_done_progress.py +296 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/code_writer.py +78 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/events.py +60 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/lsp_port.py +437 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/main_loop.py +297 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/mapping.py +206 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/__init__.py +5 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/changes.py +35 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/rebuilder/thread.py +162 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/asyncio_pool.py +113 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/pool.py +30 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/schedule.py +74 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/scheduler/task.py +57 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/server.py +633 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/cancellation.py +25 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/capabilities.py +12 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/client.py +209 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/datasource_connections.py +48 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/index.py +23 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/progress_tokens.py +59 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/project_datasource_services.py +152 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/request_queue.py +140 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/services.py +124 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/session.py +267 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/settings.py +11 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/snapshot.py +84 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/session/tree_notifier.py +28 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/connection.py +58 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/envelope.py +65 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/framing.py +52 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/reader.py +28 -0
- turbine_data-0.1.0/src/turbine/presentation/lsp/transport/writer.py +11 -0
- turbine_data-0.1.0/src/turbine/presentation/quality/__init__.py +1 -0
- turbine_data-0.1.0/src/turbine/presentation/quality/datasource_opener.py +226 -0
- turbine_data-0.1.0/src/turbine/presentation/quality/progress_log.py +207 -0
- turbine_data-0.1.0/src/turbine/templates/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/components/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/logic/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/__init__.py +0 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/alerts.py +71 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/contracts.py +62 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/flagged_rows.py +30 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/overview.py +62 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/pages/quality_matrix.py +72 -0
- turbine_data-0.1.0/src/turbine/templates/dashboard/resources/__init__.py +0 -0
- turbine_data-0.1.0/tach.toml +251 -0
- turbine_data-0.1.0/tests/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/analysis/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/analysis/test_file_code_writer.py +153 -0
- turbine_data-0.1.0/tests/adapters/api/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/api/test_abstract_model.py +128 -0
- turbine_data-0.1.0/tests/adapters/audit/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/audit/test_check_result_writer.py +99 -0
- turbine_data-0.1.0/tests/adapters/audit/test_database_audit_trail.py +209 -0
- turbine_data-0.1.0/tests/adapters/audit/test_run_buffer.py +126 -0
- turbine_data-0.1.0/tests/adapters/audit/test_subscribers.py +216 -0
- turbine_data-0.1.0/tests/adapters/codegen/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/conftest.py +68 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_generated_app.py +1330 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_layout.py +73 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_mount_renderer.py +132 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_plan.py +158 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_schema_model.py +138 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_schema_router.py +469 -0
- turbine_data-0.1.0/tests/adapters/codegen/api/test_slow_count.py +66 -0
- turbine_data-0.1.0/tests/adapters/codegen/conftest.py +18 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_ast_utils.py +134 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_ci.py +106 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_contract_renderer.py +76 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_datasource_renderer.py +122 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_formatter.py +126 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_jinja_renderers.py +114 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_sweeper.py +138 -0
- turbine_data-0.1.0/tests/adapters/codegen/test_writer.py +107 -0
- turbine_data-0.1.0/tests/adapters/conftest.py +25 -0
- turbine_data-0.1.0/tests/adapters/contract/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/contract/test_domain_registry.py +91 -0
- turbine_data-0.1.0/tests/adapters/contract/test_repo_list_lookup.py +74 -0
- turbine_data-0.1.0/tests/adapters/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_api_dataset.py +174 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_api_dataset_aggregations.py +337 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_api_dispatcher.py +289 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_backend_loader.py +76 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_component_discovery.py +105 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_config.py +36 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_demo_dispatcher.py +127 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_demo_models.py +126 -0
- turbine_data-0.1.0/tests/adapters/dashboard/test_page_discovery.py +92 -0
- turbine_data-0.1.0/tests/adapters/databases/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/databases/duckdb/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/databases/duckdb/test_duckdb.py +20 -0
- turbine_data-0.1.0/tests/adapters/databases/postgres/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/databases/postgres/test_postgres.py +50 -0
- turbine_data-0.1.0/tests/adapters/databases/snowflake/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/databases/snowflake/test_snowflake.py +109 -0
- turbine_data-0.1.0/tests/adapters/databases/test_backend_factory.py +93 -0
- turbine_data-0.1.0/tests/adapters/databases/test_connectivity_probe.py +59 -0
- turbine_data-0.1.0/tests/adapters/databases/test_schema_introspector.py +398 -0
- turbine_data-0.1.0/tests/adapters/databases/test_seed_writer.py +140 -0
- turbine_data-0.1.0/tests/adapters/databases/test_sqlalchemy_backend.py +190 -0
- turbine_data-0.1.0/tests/adapters/databases/test_sqlglot_support.py +175 -0
- turbine_data-0.1.0/tests/adapters/dismissal/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/dismissal/test_json_store.py +115 -0
- turbine_data-0.1.0/tests/adapters/events/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/events/fixtures/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/events/fixtures/subscribers_one.py +25 -0
- turbine_data-0.1.0/tests/adapters/events/test_registry.py +92 -0
- turbine_data-0.1.0/tests/adapters/filesystem/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/filesystem/test_contract_repository.py +173 -0
- turbine_data-0.1.0/tests/adapters/filesystem/test_datasource_repository.py +360 -0
- turbine_data-0.1.0/tests/adapters/git/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/git/test_git_loader.py +56 -0
- turbine_data-0.1.0/tests/adapters/git/test_previous_version.py +126 -0
- turbine_data-0.1.0/tests/adapters/indexing/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/indexing/test_project_index.py +187 -0
- turbine_data-0.1.0/tests/adapters/odcs/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/odcs/conftest.py +13 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_column_source_ranges.py +56 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_odcs_roundtrip.py +55 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_reader.py +1422 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_schema_catalog.py +168 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_schema_validation.py +219 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_schema_walker.py +210 -0
- turbine_data-0.1.0/tests/adapters/odcs/test_writer.py +165 -0
- turbine_data-0.1.0/tests/adapters/onboarding/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/onboarding/test_timer_scheduler.py +45 -0
- turbine_data-0.1.0/tests/adapters/quality/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/quality/python/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/quality/python/test_data_loader.py +161 -0
- turbine_data-0.1.0/tests/adapters/quality/python/test_runner.py +115 -0
- turbine_data-0.1.0/tests/adapters/quality/soda/__init__.py +1 -0
- turbine_data-0.1.0/tests/adapters/quality/soda/test_bypass.py +164 -0
- turbine_data-0.1.0/tests/adapters/quality/soda/test_serialization.py +235 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_batched_dataset_executor.py +445 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_batched_dataset_writer.py +201 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_check_metadata_writer.py +258 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_dialect_capabilities.py +77 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_fingerprint.py +163 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_predicate_renderer.py +181 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_quality_view_writer.py +272 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_renderer.py +278 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_windowed_executor.py +122 -0
- turbine_data-0.1.0/tests/adapters/quality/sql/test_windowed_renderer.py +66 -0
- turbine_data-0.1.0/tests/adapters/quality/test_datasource_opener.py +206 -0
- turbine_data-0.1.0/tests/adapters/quality/test_models.py +129 -0
- turbine_data-0.1.0/tests/adapters/quality/test_reader.py +568 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/test_descriptor_validator.py +100 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/test_factory.py +47 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/test_handlers.py +656 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/test_registry.py +107 -0
- turbine_data-0.1.0/tests/adapters/schema_validation/test_schema_composition_dedup.py +156 -0
- turbine_data-0.1.0/tests/adapters/telemetry/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/telemetry/conftest.py +47 -0
- turbine_data-0.1.0/tests/adapters/telemetry/test_handler.py +67 -0
- turbine_data-0.1.0/tests/adapters/telemetry/test_integration.py +480 -0
- turbine_data-0.1.0/tests/adapters/telemetry/test_logfire_tracer.py +122 -0
- turbine_data-0.1.0/tests/adapters/telemetry/test_provider.py +137 -0
- turbine_data-0.1.0/tests/adapters/telemetry/test_span_capture.py +71 -0
- turbine_data-0.1.0/tests/adapters/yaml/__init__.py +0 -0
- turbine_data-0.1.0/tests/adapters/yaml/test_parser.py +156 -0
- turbine_data-0.1.0/tests/adapters/yaml/test_treesitter_store.py +530 -0
- turbine_data-0.1.0/tests/api/__init__.py +0 -0
- turbine_data-0.1.0/tests/api/runtime/__init__.py +0 -0
- turbine_data-0.1.0/tests/api/runtime/test_base.py +202 -0
- turbine_data-0.1.0/tests/api/runtime/test_caching.py +133 -0
- turbine_data-0.1.0/tests/api/runtime/test_errors.py +107 -0
- turbine_data-0.1.0/tests/api/runtime/test_observability.py +98 -0
- turbine_data-0.1.0/tests/api/runtime/test_openapi.py +143 -0
- turbine_data-0.1.0/tests/api/runtime/test_pagination.py +70 -0
- turbine_data-0.1.0/tests/api/runtime/test_public_api.py +27 -0
- turbine_data-0.1.0/tests/api/runtime/test_query.py +69 -0
- turbine_data-0.1.0/tests/api/runtime/test_rate_limit.py +150 -0
- turbine_data-0.1.0/tests/api/runtime/test_session.py +126 -0
- turbine_data-0.1.0/tests/api/runtime/test_status.py +50 -0
- turbine_data-0.1.0/tests/application/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/analysis/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/analysis/conftest.py +69 -0
- turbine_data-0.1.0/tests/application/analysis/test_add_check_use_case.py +602 -0
- turbine_data-0.1.0/tests/application/analysis/test_check_catalog_service.py +43 -0
- turbine_data-0.1.0/tests/application/analysis/test_code_lens.py +1051 -0
- turbine_data-0.1.0/tests/application/analysis/test_column_description_required_rule.py +188 -0
- turbine_data-0.1.0/tests/application/analysis/test_command.py +940 -0
- turbine_data-0.1.0/tests/application/analysis/test_completion.py +740 -0
- turbine_data-0.1.0/tests/application/analysis/test_dashboard_data.py +306 -0
- turbine_data-0.1.0/tests/application/analysis/test_datasource_revalidation.py +239 -0
- turbine_data-0.1.0/tests/application/analysis/test_diagnostics.py +313 -0
- turbine_data-0.1.0/tests/application/analysis/test_dismissal_filter.py +97 -0
- turbine_data-0.1.0/tests/application/analysis/test_document_link.py +591 -0
- turbine_data-0.1.0/tests/application/analysis/test_domain_completion.py +71 -0
- turbine_data-0.1.0/tests/application/analysis/test_hover.py +226 -0
- turbine_data-0.1.0/tests/application/analysis/test_lint.py +459 -0
- turbine_data-0.1.0/tests/application/analysis/test_primary_key_present_on_schema_rule.py +191 -0
- turbine_data-0.1.0/tests/application/analysis/test_project_datasource_services_open.py +152 -0
- turbine_data-0.1.0/tests/application/analysis/test_project_setup.py +223 -0
- turbine_data-0.1.0/tests/application/analysis/test_project_status.py +53 -0
- turbine_data-0.1.0/tests/application/analysis/test_resource_name_derived_rule.py +96 -0
- turbine_data-0.1.0/tests/application/analysis/test_run_check_resolver.py +124 -0
- turbine_data-0.1.0/tests/application/analysis/test_schema_validation.py +516 -0
- turbine_data-0.1.0/tests/application/analysis/test_sidebar_resource_creation.py +857 -0
- turbine_data-0.1.0/tests/application/analysis/test_test_datasource.py +176 -0
- turbine_data-0.1.0/tests/application/analysis/test_threshold_hint.py +234 -0
- turbine_data-0.1.0/tests/application/analysis/test_tour_service.py +426 -0
- turbine_data-0.1.0/tests/application/analysis/test_tune_check.py +1736 -0
- turbine_data-0.1.0/tests/application/analysis/test_versioning_surface.py +226 -0
- turbine_data-0.1.0/tests/application/codegen/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/codegen/test_plan.py +151 -0
- turbine_data-0.1.0/tests/application/codegen/test_use_case.py +282 -0
- turbine_data-0.1.0/tests/application/conftest.py +11 -0
- turbine_data-0.1.0/tests/application/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/dashboard/test_autobind.py +92 -0
- turbine_data-0.1.0/tests/application/dashboard/test_crossfilter.py +158 -0
- turbine_data-0.1.0/tests/application/dashboard/test_dataset_map.py +106 -0
- turbine_data-0.1.0/tests/application/dashboard/test_page_resolver.py +498 -0
- turbine_data-0.1.0/tests/application/lsp/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/lsp/test_formatting_service.py +132 -0
- turbine_data-0.1.0/tests/application/operations/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/operations/conftest.py +24 -0
- turbine_data-0.1.0/tests/application/operations/test_bump_contract.py +183 -0
- turbine_data-0.1.0/tests/application/operations/test_check.py +963 -0
- turbine_data-0.1.0/tests/application/operations/test_check_connectivity.py +122 -0
- turbine_data-0.1.0/tests/application/operations/test_collector.py +384 -0
- turbine_data-0.1.0/tests/application/operations/test_diff_contract.py +146 -0
- turbine_data-0.1.0/tests/application/operations/test_diff_project.py +115 -0
- turbine_data-0.1.0/tests/application/operations/test_flag_coalescer.py +111 -0
- turbine_data-0.1.0/tests/application/operations/test_flag_planner.py +135 -0
- turbine_data-0.1.0/tests/application/operations/test_project_summary.py +222 -0
- turbine_data-0.1.0/tests/application/operations/test_run_plan.py +98 -0
- turbine_data-0.1.0/tests/application/operations/test_seed.py +152 -0
- turbine_data-0.1.0/tests/application/operations/test_stream_consumer.py +320 -0
- turbine_data-0.1.0/tests/application/operations/test_stream_events.py +291 -0
- turbine_data-0.1.0/tests/application/operations/test_stream_unknown_type.py +53 -0
- turbine_data-0.1.0/tests/application/operations/test_validate_schema.py +246 -0
- turbine_data-0.1.0/tests/application/quality/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/quality/planning/__init__.py +0 -0
- turbine_data-0.1.0/tests/application/quality/planning/conftest.py +101 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_incremental_lookback.py +156 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_plan_grouping.py +73 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_anomaly_requester.py +114 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_dispatcher.py +77 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_filter_resolver.py +99 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_partition.py +44 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_planner.py +149 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_python_requester.py +133 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_requesters_interpret.py +190 -0
- turbine_data-0.1.0/tests/application/quality/planning/test_time_column_resolution.py +88 -0
- turbine_data-0.1.0/tests/application/quality/test_queries.py +40 -0
- turbine_data-0.1.0/tests/application/quality/test_schema_runner.py +201 -0
- turbine_data-0.1.0/tests/application/test_event_publishing_sink.py +53 -0
- turbine_data-0.1.0/tests/application/test_format_registry.py +61 -0
- turbine_data-0.1.0/tests/application/test_project_initialization.py +125 -0
- turbine_data-0.1.0/tests/benchmarks/BENCHMARK.md +46 -0
- turbine_data-0.1.0/tests/benchmarks/DELETION_MANIFEST.md +49 -0
- turbine_data-0.1.0/tests/benchmarks/__init__.py +0 -0
- turbine_data-0.1.0/tests/benchmarks/representative_contract.yml +118 -0
- turbine_data-0.1.0/tests/benchmarks/test_roundtrip.py +152 -0
- turbine_data-0.1.0/tests/conftest.py +70 -0
- turbine_data-0.1.0/tests/core/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/context/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/context/test_cursor_context.py +106 -0
- turbine_data-0.1.0/tests/core/analysis/context/test_sql_context.py +78 -0
- turbine_data-0.1.0/tests/core/analysis/context/test_text_utils.py +77 -0
- turbine_data-0.1.0/tests/core/analysis/features/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_code_action_generators.py +456 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_code_lens_tree.py +229 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_column_refs.py +267 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_completion_sql.py +68 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_drift_code_actions.py +108 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_generate_data_contract.py +164 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_snippet_builder.py +150 -0
- turbine_data-0.1.0/tests/core/analysis/features/test_workspace_symbols.py +83 -0
- turbine_data-0.1.0/tests/core/analysis/impact/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/impact/test_impact.py +239 -0
- turbine_data-0.1.0/tests/core/analysis/test_check_catalog.py +133 -0
- turbine_data-0.1.0/tests/core/analysis/test_check_snippet.py +514 -0
- turbine_data-0.1.0/tests/core/analysis/test_contract_health.py +222 -0
- turbine_data-0.1.0/tests/core/analysis/test_diagnostic_store.py +67 -0
- turbine_data-0.1.0/tests/core/analysis/test_quality_leaves.py +357 -0
- turbine_data-0.1.0/tests/core/analysis/test_quality_source.py +242 -0
- turbine_data-0.1.0/tests/core/analysis/test_run_rollup.py +210 -0
- turbine_data-0.1.0/tests/core/analysis/test_run_step_result.py +83 -0
- turbine_data-0.1.0/tests/core/analysis/test_source_spans.py +106 -0
- turbine_data-0.1.0/tests/core/analysis/test_tree_protocol.py +25 -0
- turbine_data-0.1.0/tests/core/analysis/test_validation_rows.py +241 -0
- turbine_data-0.1.0/tests/core/analysis/tokenization/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/analysis/tokenization/test_sql_tokenizer.py +131 -0
- turbine_data-0.1.0/tests/core/building_blocks/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/building_blocks/diagnostics/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_builder.py +278 -0
- turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_docs_links.py +12 -0
- turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_exceptions.py +54 -0
- turbine_data-0.1.0/tests/core/building_blocks/diagnostics/test_sink.py +58 -0
- turbine_data-0.1.0/tests/core/codegen/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/codegen/test_naming.py +55 -0
- turbine_data-0.1.0/tests/core/codegen/test_type_system.py +103 -0
- turbine_data-0.1.0/tests/core/common/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/common/test_classify_execution_route.py +67 -0
- turbine_data-0.1.0/tests/core/common/test_classify_metric_type.py +58 -0
- turbine_data-0.1.0/tests/core/common/test_contract_metadata.py +71 -0
- turbine_data-0.1.0/tests/core/common/test_duration.py +123 -0
- turbine_data-0.1.0/tests/core/common/test_enum_parsing.py +39 -0
- turbine_data-0.1.0/tests/core/common/test_file_edits.py +51 -0
- turbine_data-0.1.0/tests/core/common/test_identifiers.py +106 -0
- turbine_data-0.1.0/tests/core/common/test_introspection_cache.py +59 -0
- turbine_data-0.1.0/tests/core/common/test_ir.py +67 -0
- turbine_data-0.1.0/tests/core/common/test_matching.py +21 -0
- turbine_data-0.1.0/tests/core/common/test_schema_walker_coverage.py +301 -0
- turbine_data-0.1.0/tests/core/common/test_sla.py +23 -0
- turbine_data-0.1.0/tests/core/common/test_thresholds.py +166 -0
- turbine_data-0.1.0/tests/core/common/test_timestamp.py +72 -0
- turbine_data-0.1.0/tests/core/conftest.py +166 -0
- turbine_data-0.1.0/tests/core/contract/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/contract/test_anomaly_time_column_rule.py +100 -0
- turbine_data-0.1.0/tests/core/contract/test_api_rules.py +576 -0
- turbine_data-0.1.0/tests/core/contract/test_api_runtime_metadata.py +278 -0
- turbine_data-0.1.0/tests/core/contract/test_check_dimension_required.py +101 -0
- turbine_data-0.1.0/tests/core/contract/test_check_threshold_required.py +151 -0
- turbine_data-0.1.0/tests/core/contract/test_column_description_required_rule.py +112 -0
- turbine_data-0.1.0/tests/core/contract/test_datasource_events.py +31 -0
- turbine_data-0.1.0/tests/core/contract/test_diff_computer.py +209 -0
- turbine_data-0.1.0/tests/core/contract/test_dismissal.py +62 -0
- turbine_data-0.1.0/tests/core/contract/test_domain_not_in_allowed_list_rule.py +94 -0
- turbine_data-0.1.0/tests/core/contract/test_errors.py +42 -0
- turbine_data-0.1.0/tests/core/contract/test_missing_owner_rule.py +68 -0
- turbine_data-0.1.0/tests/core/contract/test_odcs_name_rules.py +100 -0
- turbine_data-0.1.0/tests/core/contract/test_primary_key_present_on_schema_rule.py +128 -0
- turbine_data-0.1.0/tests/core/contract/test_reader.py +125 -0
- turbine_data-0.1.0/tests/core/contract/test_reader_metric_type.py +66 -0
- turbine_data-0.1.0/tests/core/contract/test_required_false_primary_key_rule.py +144 -0
- turbine_data-0.1.0/tests/core/contract/test_resource_name_derived_rule.py +157 -0
- turbine_data-0.1.0/tests/core/contract/test_semver.py +173 -0
- turbine_data-0.1.0/tests/core/contract/test_sla_rules.py +302 -0
- turbine_data-0.1.0/tests/core/contract/test_target_rules.py +350 -0
- turbine_data-0.1.0/tests/core/contract/test_tune_check_datatype_compatibility.py +104 -0
- turbine_data-0.1.0/tests/core/contract/test_validator.py +324 -0
- turbine_data-0.1.0/tests/core/contract/test_window_lint_rules.py +171 -0
- turbine_data-0.1.0/tests/core/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/dashboard/conftest.py +56 -0
- turbine_data-0.1.0/tests/core/dashboard/test_backend_mode.py +27 -0
- turbine_data-0.1.0/tests/core/dashboard/test_chart_data.py +1128 -0
- turbine_data-0.1.0/tests/core/dashboard/test_charts.py +670 -0
- turbine_data-0.1.0/tests/core/dashboard/test_components_healthy_field.py +80 -0
- turbine_data-0.1.0/tests/core/dashboard/test_dashboard_model.py +174 -0
- turbine_data-0.1.0/tests/core/dashboard/test_data.py +212 -0
- turbine_data-0.1.0/tests/core/dashboard/test_dataset.py +126 -0
- turbine_data-0.1.0/tests/core/dashboard/test_dataset_api.py +421 -0
- turbine_data-0.1.0/tests/core/dashboard/test_field_ref.py +49 -0
- turbine_data-0.1.0/tests/core/dashboard/test_filter_translator.py +135 -0
- turbine_data-0.1.0/tests/core/dashboard/test_health.py +98 -0
- turbine_data-0.1.0/tests/core/dashboard/test_injection.py +228 -0
- turbine_data-0.1.0/tests/core/dashboard/test_interactions.py +103 -0
- turbine_data-0.1.0/tests/core/dashboard/test_keys.py +56 -0
- turbine_data-0.1.0/tests/core/dashboard/test_layout.py +237 -0
- turbine_data-0.1.0/tests/core/dashboard/test_models.py +115 -0
- turbine_data-0.1.0/tests/core/dashboard/test_query.py +375 -0
- turbine_data-0.1.0/tests/core/dashboard/test_selection_store.py +288 -0
- turbine_data-0.1.0/tests/core/dashboard/test_table_view.py +60 -0
- turbine_data-0.1.0/tests/core/onboarding/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/onboarding/conftest.py +17 -0
- turbine_data-0.1.0/tests/core/onboarding/test_anchors.py +79 -0
- turbine_data-0.1.0/tests/core/onboarding/test_predicates.py +189 -0
- turbine_data-0.1.0/tests/core/onboarding/test_skip_edits.py +174 -0
- turbine_data-0.1.0/tests/core/onboarding/test_step_watcher.py +182 -0
- turbine_data-0.1.0/tests/core/onboarding/test_tours.py +49 -0
- turbine_data-0.1.0/tests/core/quality/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/quality/plan/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/quality/plan/predicates/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/quality/plan/predicates/test_predicates.py +113 -0
- turbine_data-0.1.0/tests/core/quality/plan/predicates/test_windowed_predicates.py +189 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_anomaly_predicate_factory.py +96 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_dataset_plan.py +71 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_errors.py +47 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_factory_hard_fail.py +97 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_measurement.py +105 -0
- turbine_data-0.1.0/tests/core/quality/plan/test_slots.py +71 -0
- turbine_data-0.1.0/tests/core/quality/test_cancel_event.py +24 -0
- turbine_data-0.1.0/tests/core/quality/test_check_results.py +304 -0
- turbine_data-0.1.0/tests/core/quality/test_check_validation.py +218 -0
- turbine_data-0.1.0/tests/core/quality/test_flagging_types.py +84 -0
- turbine_data-0.1.0/tests/core/quality/test_gate.py +134 -0
- turbine_data-0.1.0/tests/core/quality/test_incremental.py +172 -0
- turbine_data-0.1.0/tests/core/quality/test_ports.py +55 -0
- turbine_data-0.1.0/tests/core/quality/test_python_threshold.py +78 -0
- turbine_data-0.1.0/tests/core/quality/test_run_context.py +54 -0
- turbine_data-0.1.0/tests/core/quality/test_scoring.py +108 -0
- turbine_data-0.1.0/tests/core/quality/test_targets.py +199 -0
- turbine_data-0.1.0/tests/core/seed/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/seed/test_row_generator.py +115 -0
- turbine_data-0.1.0/tests/core/seed/test_types.py +36 -0
- turbine_data-0.1.0/tests/core/shared/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/shared/test_filter_expr.py +59 -0
- turbine_data-0.1.0/tests/core/tuning/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/tuning/test_mode_detection.py +48 -0
- turbine_data-0.1.0/tests/core/tuning/test_model.py +57 -0
- turbine_data-0.1.0/tests/core/tuning/test_must_be_hints.py +96 -0
- turbine_data-0.1.0/tests/core/tuning/test_query_builder.py +230 -0
- turbine_data-0.1.0/tests/core/tuning/test_registry_coverage.py +58 -0
- turbine_data-0.1.0/tests/core/tuning/test_sla.py +197 -0
- turbine_data-0.1.0/tests/core/tuning/test_stats.py +158 -0
- turbine_data-0.1.0/tests/core/tuning/test_verdict.py +316 -0
- turbine_data-0.1.0/tests/core/tuning/test_yaml_editor.py +738 -0
- turbine_data-0.1.0/tests/core/validation/__init__.py +0 -0
- turbine_data-0.1.0/tests/core/validation/test_detector.py +172 -0
- turbine_data-0.1.0/tests/core/validation/test_model.py +151 -0
- turbine_data-0.1.0/tests/core/validation/test_rules.py +88 -0
- turbine_data-0.1.0/tests/core/validation/test_validator.py +230 -0
- turbine_data-0.1.0/tests/e2e/__init__.py +1 -0
- turbine_data-0.1.0/tests/e2e/test_sql_template_params_e2e.py +283 -0
- turbine_data-0.1.0/tests/e2e-project/contracts/orders-rowcount.yml +42 -0
- turbine_data-0.1.0/tests/e2e-project/contracts/orders.yml +107 -0
- turbine_data-0.1.0/tests/e2e-project/datasources/e2e-test.yml +4 -0
- turbine_data-0.1.0/tests/e2e-project/datasources/postgres.yml +8 -0
- turbine_data-0.1.0/tests/e2e-project/pyproject.toml +7 -0
- turbine_data-0.1.0/tests/e2e-project/seed.sql +67 -0
- turbine_data-0.1.0/tests/e2e-project/uv.lock +8 -0
- turbine_data-0.1.0/tests/fakes/__init__.py +1 -0
- turbine_data-0.1.0/tests/fakes/dismissal_store.py +35 -0
- turbine_data-0.1.0/tests/fakes/domain_registry.py +13 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-matching.yml +19 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-drift.yml +19 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-incremental.yml +18 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-multiple-schemas.yml +22 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-sla.yml +25 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-unique.yml +17 -0
- turbine_data-0.1.0/tests/fixtures/contracts/contract-with-validity.yml +30 -0
- turbine_data-0.1.0/tests/fixtures/contracts/duplicate-columns-contract.yml +15 -0
- turbine_data-0.1.0/tests/fixtures/contracts/minimal-contract.yml +20 -0
- turbine_data-0.1.0/tests/fixtures/contracts/missing-schema-contract.yml +6 -0
- turbine_data-0.1.0/tests/fixtures/contracts/no-pk-contract.yml +13 -0
- turbine_data-0.1.0/tests/fixtures/contracts/second-contract.yml +12 -0
- turbine_data-0.1.0/tests/fixtures/contracts/valid-contract.yml +24 -0
- turbine_data-0.1.0/tests/fixtures/quality-specs/minimal-quality-spec.yml +22 -0
- turbine_data-0.1.0/tests/frozen_attr.py +6 -0
- turbine_data-0.1.0/tests/infra/__init__.py +0 -0
- turbine_data-0.1.0/tests/infra/database/__init__.py +0 -0
- turbine_data-0.1.0/tests/infra/database/test_check_result_repo.py +114 -0
- turbine_data-0.1.0/tests/infra/database/test_engine.py +144 -0
- turbine_data-0.1.0/tests/infra/database/test_metadata_store.py +289 -0
- turbine_data-0.1.0/tests/infra/database/test_migrations.py +138 -0
- turbine_data-0.1.0/tests/infra/test_config.py +272 -0
- turbine_data-0.1.0/tests/infra/test_events.py +100 -0
- turbine_data-0.1.0/tests/infra/test_git.py +54 -0
- turbine_data-0.1.0/tests/infra/test_logging.py +127 -0
- turbine_data-0.1.0/tests/integration/__init__.py +0 -0
- turbine_data-0.1.0/tests/integration/conftest.py +14 -0
- turbine_data-0.1.0/tests/integration/test_onboarding_core_concepts_e2e.py +241 -0
- turbine_data-0.1.0/tests/integration/test_validate_e2e.py +226 -0
- turbine_data-0.1.0/tests/presentation/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/api/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/api/conftest.py +25 -0
- turbine_data-0.1.0/tests/presentation/api/test_app.py +44 -0
- turbine_data-0.1.0/tests/presentation/api/test_check_dtos.py +197 -0
- turbine_data-0.1.0/tests/presentation/api/test_checks.py +205 -0
- turbine_data-0.1.0/tests/presentation/api/test_contracts.py +141 -0
- turbine_data-0.1.0/tests/presentation/api/test_dashboard.py +144 -0
- turbine_data-0.1.0/tests/presentation/api/test_docs.py +85 -0
- turbine_data-0.1.0/tests/presentation/api/test_flagged_rows.py +56 -0
- turbine_data-0.1.0/tests/presentation/api/test_router_discovery.py +172 -0
- turbine_data-0.1.0/tests/presentation/api/test_runs.py +178 -0
- turbine_data-0.1.0/tests/presentation/api/test_status.py +59 -0
- turbine_data-0.1.0/tests/presentation/api/test_validate.py +85 -0
- turbine_data-0.1.0/tests/presentation/cli/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/cli/cli_subprocess.py +19 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_add_check_flow.py +353 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_bump.py +325 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_check.py +18 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_check_pipeline.py +223 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_ci.py +101 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_common.py +49 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_dashboard.py +157 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_generate.py +364 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_init.py +164 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_lint.py +115 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_new.py +475 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_status_command.py +99 -0
- turbine_data-0.1.0/tests/presentation/cli/commands/test_validate.py +80 -0
- turbine_data-0.1.0/tests/presentation/cli/conftest.py +63 -0
- turbine_data-0.1.0/tests/presentation/cli/display/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/cli/display/conftest.py +47 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_check_report.py +392 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_check_report_json.py +248 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_check_report_junit.py +191 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_formats.py +182 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_human_summary.py +111 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_multi_contract_report.py +161 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_renderer.py +128 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_status_table.py +99 -0
- turbine_data-0.1.0/tests/presentation/cli/display/test_validation.py +291 -0
- turbine_data-0.1.0/tests/presentation/cli/picker/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/cli/picker/test_fuzzy.py +148 -0
- turbine_data-0.1.0/tests/presentation/cli/picker/test_picker.py +78 -0
- turbine_data-0.1.0/tests/presentation/cli/picker/test_renderer.py +145 -0
- turbine_data-0.1.0/tests/presentation/cli/picker/test_session.py +161 -0
- turbine_data-0.1.0/tests/presentation/cli/test_app.py +16 -0
- turbine_data-0.1.0/tests/presentation/cli/test_context.py +83 -0
- turbine_data-0.1.0/tests/presentation/cli/test_error_handling.py +139 -0
- turbine_data-0.1.0/tests/presentation/cli/test_gate_parsing.py +79 -0
- turbine_data-0.1.0/tests/presentation/cli/test_printer.py +84 -0
- turbine_data-0.1.0/tests/presentation/cli/test_progress.py +471 -0
- turbine_data-0.1.0/tests/presentation/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/dashboard/conftest.py +37 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_app.py +230 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_auto_empty_render.py +193 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_chart_builders.py +222 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_chart_fieldref.py +147 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_chart_pipeline.py +275 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_chart_registry.py +64 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_chart_spec.py +54 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_component_extension.py +123 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_composite_renderer.py +142 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_db_isolation.py +42 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_drawer_render.py +168 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_echarts_models.py +1028 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_ext_api.py +40 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_health_badge.py +31 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_interactions_render.py +88 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_layout_components.py +115 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_registry_completeness.py +59 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_render_context.py +46 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_renderer.py +663 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_renderer_health.py +162 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_row_normalization.py +200 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_sidebar.py +46 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_state.py +41 -0
- turbine_data-0.1.0/tests/presentation/dashboard/test_user_folder_discovery.py +95 -0
- turbine_data-0.1.0/tests/presentation/lsp/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/api/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/api/trees/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/api/trees/test_workspace_tree_builder.py +663 -0
- turbine_data-0.1.0/tests/presentation/lsp/conftest.py +32 -0
- turbine_data-0.1.0/tests/presentation/lsp/mapping/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/mapping/test_check_result.py +249 -0
- turbine_data-0.1.0/tests/presentation/lsp/mapping/test_from_lsp.py +187 -0
- turbine_data-0.1.0/tests/presentation/lsp/mapping/test_to_lsp.py +430 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/conftest.py +283 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_async_request_cancellation.py +160 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_async_traits.py +51 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_asyncio_pool.py +128 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_cancel_handler.py +60 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_cancellation.py +41 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_check_use_case_factory.py +117 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_client.py +218 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_code_actions.py +334 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_code_lens.py +59 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_completion.py +140 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dashboard_data.py +266 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_definition.py +56 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_diagnostic.py +214 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_configuration_handler.py +34 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_versioning.py +65 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_watched_files_handler.py +50 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_change_workspace_handler.py +66 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_did_save_handler.py +48 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dismiss_code_action.py +187 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_dispatch.py +368 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_document_link.py +56 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_document_symbols.py +77 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_domain_registry.py +104 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_execute_command.py +261 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format.py +65 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format_in_memory.py +215 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_format_range.py +78 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_hover.py +111 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_index_rebuilder.py +301 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_initialized_handler.py +82 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_lifecycle_in_memory.py +365 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_list_datasources.py +134 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_main_loop.py +179 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_no_typechecking.py +68 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_list.py +83 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_run.py +476 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_status.py +91 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_onboarding_watch.py +248 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_pending_changes.py +28 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_performance_regression.py +338 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_project_status.py +76 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_references.py +117 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_rename.py +108 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_request_cancellation.py +228 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_request_queue.py +184 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_run_check.py +1215 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_run_check_target.py +154 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_scaffold_project.py +87 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_scheduler.py +129 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_semantic_tokens.py +131 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_session.py +414 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_test_datasource.py +243 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_transport.py +40 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_tree_handlers.py +176 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_tune_check.py +496 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_validate_schema.py +410 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_work_done_progress.py +737 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_work_done_progress_cancel_handler.py +81 -0
- turbine_data-0.1.0/tests/presentation/lsp/ruff_shape/test_workspace_symbols.py +61 -0
- turbine_data-0.1.0/tests/presentation/lsp/session/__init__.py +0 -0
- turbine_data-0.1.0/tests/presentation/lsp/session/test_datasource_connections.py +50 -0
- turbine_data-0.1.0/tests/presentation/lsp/session/test_progress_tokens.py +63 -0
- turbine_data-0.1.0/tests/presentation/lsp/session/test_tree_notifier.py +65 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_code_writer.py +153 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_datasources_tree_builder.py +144 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_domain_registry_wiring.py +109 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_extension_protocol_schema.py +19 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_list_checks.py +106 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_server_wiring.py +54 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_tree_registry.py +205 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_builder.py +321 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_children.py +315 -0
- turbine_data-0.1.0/tests/presentation/lsp/test_workspace_tree_helpers.py +105 -0
- turbine_data-0.1.0/tests/presentation/quality/__init__.py +1 -0
- turbine_data-0.1.0/tests/presentation/quality/test_progress_log.py +202 -0
- turbine_data-0.1.0/tests/templates/__init__.py +0 -0
- turbine_data-0.1.0/tests/templates/dashboard/__init__.py +0 -0
- turbine_data-0.1.0/tests/templates/dashboard/pages/__init__.py +0 -0
- turbine_data-0.1.0/tests/templates/dashboard/pages/test_quality_matrix.py +167 -0
- turbine_data-0.1.0/todo.md +158 -0
- 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.
|
turbine_data-0.1.0/.git
ADDED
|
@@ -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
|