Skip to content

dbt_pr_review always runs in lint-only mode even when manifest and warehouse are available #894

Open

Description

@lgwacker

The dbt_pr_review tool consistently reports "⚙️ Lint-only run — no dbt manifest/warehouse was available" even when:

  1. target/manifest.json exists and is fresh
  2. Snowflake warehouse connections are configured and testable via warehouse_test
  3. The .altimate/review.yml points to the correct manifest

This prevents the full-tier review (lineage blast radius, query equivalence, PII classification) from running.

Environment

  • Project: dbt_data_platform (Snowflake)
  • dbt version: 1.11.11
  • altimate-code: dbt-pr-review skill
  • manifest: target/manifest.json (1.9MB, generated 2026-06-05)
  • Warehouse connections: snowflake_prod (ANALYTICS), snowflake_raw (RAW), snowflake_raw_treated (RAW_TREATED)
  • .altimate/review.yml:
    mode: comment
    severityThreshold: suggestion
    manifestPath: target/manifest.json
    dialect: snowflake
    reviewers: []
    exclude:
      - models/legacy/**
    rubric:
      blockOn: [lineage_breakage, contract_violation, pii_exposure, semantic_change]
      warningPatternThreshold: 3
      thresholds:
        warehouseCostMinRows: 1000000

Steps to reproduce

  1. Compile dbt: dbt compile → target/manifest.json created
  2. Verify warehouse: warehouse_test → snowflake_prod connected successfully
  3. Run review: dbt_pr_review({ base: "origin/main", head: "HEAD", manifest_path: "target/manifest.json" })
  4. Result: "Lint-only run — no dbt manifest/warehouse was available"

What I tried

  • Added warehouse: snowflake_prod to .altimate/review.yml — no effect
  • Ran dbt_pr_review with explicit manifest_path — same result
  • Verified underlying tools work independently:
    • impact_analysis ✅ (uses manifest only)
    • dbt_lineage ✅ (uses manifest only)
    • lineage_check ✅ (with schema_context provided)
    • altimate_core_equivalence ✅ (with schema_context provided)
    • warehouse_test ✅ (all 3 connections pass)

Root cause analysis
The dbt_pr_review tool is a composite that internally calls altimate_core_equivalence and lineage_check. These tools require schema in a specific format (schema_context or schema_path with a tables field), but:

  • dbt_pr_review has no schema_context / schema_path / warehouse parameter
  • The dbt manifest (target/manifest.json) has a different structure (nodes → columns) than what altimate_core_* expects (tables → columns)
  • dbt_pr_review cannot bridge the manifest schema or warehouse schema to its underlying tools

Suggested fix
Add one of these options to dbt_pr_review:

  1. A warehouse parameter to auto-resolve schema from the warehouse
  2. A schema_context / schema_path parameter to pass schema directly
  3. Auto-parse manifest.json schema into the format altimate_core_* expects

Metadata

Field Value
CLI Version 0.8.3
Platform linux
Architecture x64
OS Release 6.6.87.2-microsoft-standard-WSL2
Category bug
Working Directory dbt
Session ID ses_167d1ccdaffee0VmYToIOlBCG0

Activity

  1. SudSampath commented on Oct 20, 2026

    @SudSampath

    Reproduced on 0.12.7 with the public demo repo, so it's quick to check (needs dbt-duckdb):

    git clone https://github.com/AltimateAI/dbt-pr-review-demo && cd dbt-pr-review-demo
    git checkout demo/new-pii-exposure
    DBT_PROFILES_DIR=. dbt seed && DBT_PROFILES_DIR=. dbt compile
    altimate review --base origin/main --head HEAD --manifest target/manifest.json
    

    The report contradicts itself. It opens with "Lint-only run — no dbt manifest/warehouse was available", but it also says "Tier: full", the footer shows manifest db38ff8d3e, and the manifest-backed PII check fired (Critical: exposes Email column email, 95%).

    In this run the manifest was used. The banner comes from the one _unverified_ finding ("refactor could not be proven equivalent"): orchestrate.ts sets degraded = runDegraded || findings.some((f) => f.degraded), and format.ts shows the lint-only banner whenever summary.degraded is true. Same cause as item 2 in #1240.

    Possibly separate, same run: a fct_customer_orders: validate warning says Column 'order_date' not found. order_date exists in stg_orders and in the warehouse; the demo's schema.yml just doesn't declare it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions