feat: full-text search + complete dpe#3
Merged
Conversation
7006d8a to
cfd89b7
Compare
cfd89b7 to
b715a62
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Two capabilities in one change.
1. Full-text search overhaul (SPA). The bundled SPA's search becomes a real full-text search instead of a name/column-only lookup. A query now indexes the whole searchable surface of every node — name, columns and column descriptions, tags, description, warehouse relation, package, called macros, and the raw + compiled SQL — and each non-name hit carries a match-reason snippet (mkdocs-material style): a labelled chip (
Column,SQL,Tag, …) plus an excerpt with the matched terms highlighted, so you can see why a result is there. Two inline operators (type:<resource_type>andlabel:/name:) narrow without leaving the box, and the dropdown is fully keyboard-operable (↑/↓ rove, Enter follows, Esc closes) and wired as an ARIA combobox/listbox with a live region for screen readers.2. Complete dbt-project-evaluator (DPE) health-rule parity. dbdocs health rules now implement all 29 published DPE rules across the six dimensions:
orphan_modelsrule — it had no DPE counterpart, so itsdocs_urllinked to a dead anchor.downstream_models_dependent_on_source,hard_coded_references(modeling)missing_source_freshness(testing)documentation_coverage(documentation)test_directories(structure)hard_coded_referencesparses each model's raw SQL with sqlglot (ref()/source() jinja rewritten to numbered sentinels; CTEs excluded via scope analysis; fail-soft on unparseable SQL — one model never sinks the pass).base.py(the rule name doesn't always kebab to the DPE heading):too_many_joins,staging_dependent_on_marts_or_intermediate, andstaging_dependent_on_staging..github/workflows/dpe-rules-watch.yml+.github/scripts/check_dpe_rules.py) that scrapes the DPE rules pages, diffs them against the live rule registry, and opens (or updates) a singlefeat:issue when DPE publishes a rule dbdocs doesn't have yet. The watcher is what surfaced the third dead anchor.Type of change
Area
generate/serve/deploy)extract/(nodes / erd / graph / column_lineage / health)site/(data dict / builder / 3-tier SPA / deploy)frontend/(React Flow graph bundle)dbdocs.yml) / packaging / CI / docsHow to test
Checklist
task lintpasses (ruff format --check+ruff check).task testpasses at 100% coverage (331 tests, 100.00% total)..claude/design_patterns.md. Extended the health-rule registry (Always-built Health-Check pattern: one module per dimension,register_rule/docs_url/findingpublic API) and the 3-tierdata→service→uiSPA seam (service.jsDOM-free,ui.jsthe only DOM toucher). No pattern added/removed — the doc describes the rule package generically, so no edit needed.service.js(pure) +ui.js(DOM). Health findings keep the same{rule, node, node_type, message, docs_url}shape.frontend/src/**change; onlyfrontend/test/e2e/spa.spec.tswas touched.dbdocs/site/bundle/**— n/a: no new bundle files (bundle assets edited in place; thedbdocs/site/bundle/**/*glob already covers them). New files are under.github/+tests/, not shipped in the wheel.dbdocs.yml.exampleupdated.dbdocs.yml.example+docs/dbdocs-demo.ymllist all 29 rules + the newdocumentation_coveragethreshold; the search guide (docs/nav/guide/search.md) is wired intomkdocs.yml; README/docs/index.mdfeature line refreshed.Screenshots / notes
frontend/test/e2e/spa.spec.ts, which run in the independent CIe2ejob (outside the coverage gate, since pytest doesn't exercise the SPA JS).