Skip to content

Conversation

@dlouseiro
Copy link
Contributor

@dlouseiro dlouseiro commented Jul 14, 2025

User description

The purpose of this PR is to ensure run_results_v6 is compatible with version 1.10 of dbt, resolving this issue.

Even though the support for dbt 1.10 was added to the manifest here, it was not done for the run_results.

Implementation details:

  • Include v1.10 compatible version of the JSON schema in dbt_artifacts_parser/resources/run-results/run-results_v6.json
  • Include missing field (metadata.invocation_started_at) and missing enum value for status (no-op) in dbt_artifacts_parser/parsers/run_results/run_results_v6.py

PR Type

Enhancement


Description

  • Add dbt v1.10 compatibility to run_results_v6 parser

  • Include missing invocation_started_at metadata field

  • Add no-op status enum value

  • Update version to 0.9.1


Changes diagram

flowchart LR
  A["dbt v1.9 run_results"] --> B["Add missing fields"]
  B --> C["Update JSON schema"]
  C --> D["dbt v1.10 compatible run_results"]
Loading

Changes walkthrough 📝

Relevant files
Configuration changes
__init__.py
Version bump to 0.9.1                                                                       

dbt_artifacts_parser/init.py

  • Bump version from 0.9.0 to 0.9.1
+1/-1     
Enhancement
run_results_v6.py
Add dbt v1.10 fields and enums                                                     

dbt_artifacts_parser/parsers/run_results/run_results_v6.py

  • Update default dbt_version from 1.9.0b2 to 1.10.0b3
  • Add invocation_started_at field to Metadata class
  • Add no_op enum value to Status class
  • +3/-1     
    run-results_v6.json
    Update JSON schema for dbt v1.10                                                 

    dbt_artifacts_parser/resources/run-results/run-results_v6.json

  • Update default dbt_version from 1.9.0b2 to 1.10.0a1
  • Add invocation_started_at field to metadata schema
  • Add no-op value to status enum in schema
  • +13/-2   

    Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • @dlouseiro dlouseiro requested a review from yu-iskw as a code owner July 14, 2025 11:52
    @coderabbitai
    Copy link

    coderabbitai bot commented Jul 14, 2025

    Walkthrough

    Updates the run results v6 parser: adds Metadata.invocation_started_at (optional), changes default Metadata.dbt_version to "1.10.0a1", and extends Status enum with no_op = "no-op". Also bumps package version to "0.10.1". No control-flow changes.

    Changes

    Cohort / File(s) Summary
    Run results v6 schema adjustments
    dbt_artifacts_parser/parsers/run_results/run_results_v6.py
    Added field invocation_started_at: Optional[str]; updated default dbt_version to "1.10.0a1"; added Status enum member no_op = "no-op".
    Package version bump
    dbt_artifacts_parser/__init__.py
    Updated __version__ from "0.10.0" to "0.10.1".

    Estimated code review effort

    🎯 2 (Simple) | ⏱️ ~10 minutes

    Possibly related PRs

    • Set __version__ to 0.8.0rc1 #128 — Also changes __version__ in dbt_artifacts_parser/__init__.py, indicating related version bump activity.
    • Support dbt 1.8 #75 — Touches run_results_v6.py classes (Metadata/Status), directly related to the same symbols updated here.
    • Bump up to 0.8.3 #156 — Another PR updating __version__ in the initializer, code-level overlap with this bump.

    Poem

    I twitch my whiskers at version one-oh-one,
    A tiny hop—new enums greet the sun.
    Invocation times now softly gleam,
    dbt whispers, “alpha dreams.”
    I stamp my paw, the parse is neat—
    carrots cached, artifacts complete. 🥕✨

    Pre-merge checks and finishing touches

    ✅ Passed checks (3 passed)
    Check name Status Explanation
    Title Check ✅ Passed The title succinctly summarizes the core change by stating that dbt v1.10 compatibility is being added to the run_results parser, directly reflecting the main purpose of the pull request in a concise and clear manner.
    Description Check ✅ Passed The description clearly outlines the PR’s objectives and details the specific changes—schema updates, new metadata field, enum value addition, and version bump—that directly correspond to the code modifications, and it references the relevant issue being addressed.
    Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
    ✨ Finishing touches
    • 📝 Generate docstrings
    🧪 Generate unit tests (beta)
    • Create PR with unit tests
    • Post copyable unit tests in a comment

    📜 Recent review details

    Configuration used: CodeRabbit UI

    Review profile: CHILL

    Plan: Pro

    📥 Commits

    Reviewing files that changed from the base of the PR and between 4bb2e79 and b684b77.

    📒 Files selected for processing (2)
    • dbt_artifacts_parser/__init__.py (1 hunks)
    • dbt_artifacts_parser/parsers/run_results/run_results_v6.py (2 hunks)
    ✅ Files skipped from review due to trivial changes (1)
    • dbt_artifacts_parser/init.py
    🔇 Additional comments (3)
    dbt_artifacts_parser/parsers/run_results/run_results_v6.py (3)

    19-19: Verify the dbt version choice: alpha vs beta.

    The PR objectives document mentions updating to "1.10.0b3" (beta), but the implementation uses "1.10.0a1" (alpha). Alpha versions typically precede beta releases and may be less stable.

    Please confirm whether "1.10.0a1" is the correct target version for dbt v1.10 compatibility.


    22-22: LGTM!

    The invocation_started_at field correctly follows the existing pattern for optional timestamp fields in the Metadata class and maintains backward compatibility.


    31-31: LGTM!

    The no_op status value is correctly added to the Status enum, extending it to support dbt v1.10's new "no-op" status without breaking backward compatibility.


    Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

    ❤️ Share

    Comment @coderabbitai help to get the list of available commands and usage tips.

    @qodo-merge-pro
    Copy link

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    🎫 Ticket compliance analysis ✅

    160 - Fully compliant

    Compliant requirements:

    • Fix incompatibility with dbt 1.10 in run_results_v6
    • Add missing metadata.invocation_started_at property
    • Add missing no-op status enum value

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Version Mismatch

    The default dbt_version in the Python code is set to '1.10.0b3' while the JSON schema uses '1.10.0a1'. This inconsistency could cause confusion and potential issues.

    dbt_version: Optional[str] = '1.10.0b3'
    generated_at: Optional[str] = None

    @qodo-merge-pro
    Copy link

    qodo-merge-pro bot commented Jul 14, 2025

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Fix version mismatch between files
    Suggestion Impact:The commit directly implemented the suggested change, updating the default dbt_version from '1.10.0b3' to '1.10.0a1' to resolve the version mismatch

    code diff:

    -    dbt_version: Optional[str] = '1.10.0b3'
    +    dbt_version: Optional[str] = '1.10.0a1'

    The default dbt_version should match the JSON schema default value. The Python
    code uses '1.10.0b3' while the JSON schema uses '1.10.0a1', creating
    inconsistency.

    dbt_artifacts_parser/parsers/run_results/run_results_v6.py [19]

    -dbt_version: Optional[str] = '1.10.0b3'
    +dbt_version: Optional[str] = '1.10.0a1'

    [Suggestion processed]

    Suggestion importance[1-10]: 7

    __

    Why: The suggestion correctly identifies an inconsistency for the default dbt_version between the Python model (1.10.0b3) and the JSON schema (1.10.0a1), which could lead to unexpected behavior.

    Medium
    • Update

    @dlouseiro dlouseiro changed the title Add compatibility with dbt v1.10 in run_results Add compatibility with dbt v1.10 in run_results, catalog and sources Jul 14, 2025
    @dlouseiro dlouseiro force-pushed the dlouseiro/add-support-for-dbt-1.10-in-run-results branch from fee37fd to afa58db Compare August 14, 2025 12:55
    @dlouseiro
    Copy link
    Contributor Author

    Hey @yu-iskw , sorry for bothering you, but would be great to have some feedback on this PR and ideally have it merged/deployed as we're currently blocked to upgrade some of our processes to dbt 1.10.

    Thank you!

    Copy link

    @coderabbitai coderabbitai bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Actionable comments posted: 1

    🧹 Nitpick comments (4)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (3)

    741-743: Prefer typed enum default over string.

    Use UpdatesOn.any to avoid string coercion and improve type clarity.

     class BuildAfter(BaseParserModel):
    @@
    -    updates_on: Optional[UpdatesOn] = 'any'
    +    updates_on: Optional[UpdatesOn] = UpdatesOn.any

    2620-2626: Repeat: prefer enum default over string in BuildAfter1.

     class BuildAfter1(BaseParserModel):
    @@
    -    updates_on: Optional[UpdatesOn] = 'any'
    +    updates_on: Optional[UpdatesOn] = UpdatesOn.any

    30-34: Remove patch-specific dbt_version default; prefer None for artifact value

    Verified: many generated parser modules set hardcoded, per-version dbt_version values (manifest_v12.py: dbt_version='1.10.8', manifest_v11.py:'1.8.0a1', manifest_v9.py:'1.5.0b5', run_results_v6.py:'1.10.0a1', sources_v3.py:'1.10.0a1', catalog_v1.py:'1.10.0a1', etc.). These are patch-specific and will drift — set dbt_version: Optional[str] = None (or omit the default) in manifest_v12.py (and align other generated parsers) so the artifact-provided value is used.

    dbt_artifacts_parser/parsers/sources/sources_v2.py (1)

    20-20: Prefer default None for generated_at to avoid a misleading static timestamp.

    A concrete default like '2021-09-24T13:29:14.312598Z' can mask missing data. Using None better reflects optionality.

    Proposed change:

    -    generated_at: Optional[AwareDatetime] = '2021-09-24T13:29:14.312598Z'
    +    generated_at: Optional[AwareDatetime] = None

    Please double‑check downstream code doesn’t rely on the existing non‑None default.

    📜 Review details

    Configuration used: CodeRabbit UI

    Review profile: CHILL

    Plan: Pro

    📥 Commits

    Reviewing files that changed from the base of the PR and between afa58db and d24fec6.

    ⛔ Files ignored due to path filters (1)
    • dbt_artifacts_parser/resources/manifest/manifest_v12.json is excluded by !**/*.json
    📒 Files selected for processing (3)
    • dbt_artifacts_parser/parsers/manifest/manifest_v12.py (12 hunks)
    • dbt_artifacts_parser/parsers/run_results/run_results_v5.py (2 hunks)
    • dbt_artifacts_parser/parsers/sources/sources_v2.py (4 hunks)
    🧰 Additional context used
    🧬 Code graph analysis (2)
    dbt_artifacts_parser/parsers/run_results/run_results_v5.py (2)
    dbt_artifacts_parser/parsers/base.py (1)
    • BaseParserModel (23-26)
    dbt_artifacts_parser/parsers/run_results/run_results_v4.py (1)
    • BaseArtifactMetadata (15-23)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (1)
    dbt_artifacts_parser/parsers/base.py (1)
    • BaseParserModel (23-26)
    🔇 Additional comments (18)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (12)

    732-735: UpdatesOn enum addition — LGTM.


    750-751: Required build_after: verify backward compatibility with existing v12 manifests.

    Making build_after mandatory inside Freshness can reject older manifests lacking it. If this is intentional for dbt ≥1.10 only, all good; otherwise consider keeping it optional.


    1459-1466: Freshness1 shape for sources — LGTM.


    1546-1553: Freshness2 variant — LGTM.


    1562-1567: Source config fields added — LGTM; thanks for covering gaps.

    Matches the intent to add loaded_at_* and metadata fields.

    Please confirm that the same fields exist in the sources artifact parser to keep parity.


    1589-1590: Sources.freshness reference — LGTM.


    2629-2633: Freshness3 with required build_after — LGTM (see earlier BC note).

    Ensure manifests produced by your targeted dbt versions include build_after when this Freshness variant is present.


    2668-2669: Config33.freshness wiring — LGTM.


    3313-3320: Freshness4 variant — LGTM.


    3390-3396: Freshness5 variant — LGTM.


    3405-3410: Disabled source config: added freshness + loaded_at_ + meta/tags — LGTM.*


    3432-3433: Disabled8.freshness reference — LGTM.

    dbt_artifacts_parser/parsers/sources/sources_v2.py (4)

    64-65: LGTM: TimingInfo now uses timezone‑aware datetimes.

    Consistent with the rest of the artifact changes; no issues spotted.


    82-83: Confirm requiredness of max_loaded_at/snapshotted_at across supported dbt versions.

    Marking these as required AwareDatetime fields is likely correct for non‑runtime‑error results, but please verify no valid outputs omit them (e.g., edge cases on empty sources in older dbt versions). If any such cases exist, consider making them Optional.

    Option if needed:

    -    max_loaded_at: AwareDatetime
    -    snapshotted_at: AwareDatetime
    +    max_loaded_at: Optional[AwareDatetime]
    +    snapshotted_at: Optional[AwareDatetime]

    9-9: Good move — timezone-aware datetimes; ensure Pydantic v2 is pinned

    Scan of dependency files found no pydantic entry (only requirements.setup.txt was listed). Add an explicit Pydantic >=2.0 constraint (e.g. pydantic>=2.0,<3.0) in pyproject.toml / requirements.txt so AwareDatetime is available.


    14-23: No change required — do not add invocation_started_at to sources v2 metadata. dbt 1.10 sources (freshness) v2 schema lists dbt_schema_version, dbt_version, generated_at, invocation_id, and env; it does not include metadata.invocation_started_at, so keep FreshnessMetadata unchanged.

    dbt_artifacts_parser/parsers/run_results/run_results_v5.py (2)

    72-80: LGTM: Clear top-level artifact model.

    Nice encapsulation of the run_results payload with extra='forbid'. Fields match expected v5 shape.


    9-9: Confirm Pydantic v2 usage (RootModel imported)

    dbt_artifacts_parser/parsers/run_results/run_results_v5.py imports RootModel (v2-only). Repo uses ConfigDict widely and the generator targets pydantic_v2; no @validator/BaseSettings (v1-only) usages were found. No explicit pydantic>=2 pin found in pyproject.toml / requirements* — add/verify pydantic>=2 in dependency files and CI.

    Comment on lines 82 to 83
    class RunResultsV5(RootModel[RunResultsArtifact]):
    root: RunResultsArtifact
    Copy link

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    ⚠️ Potential issue

    🧩 Analysis chain

    RootModel switch is a breaking API change; add back-compat shims.

    Consumers that previously did RunResultsV5(metadata=..., results=...) or accessed rr.results will break (now rr.root.results). Provide a before-model validator and proxy properties to preserve the old construction and attribute access.

    Apply this diff to add back-compat:

    -class RunResultsV5(RootModel[RunResultsArtifact]):
    -    root: RunResultsArtifact
    +class RunResultsV5(RootModel[RunResultsArtifact]):
    +    root: RunResultsArtifact
    +
    +    # Back-compat: allow constructing with flattened kwargs/dicts
    +    @model_validator(mode='before')
    +    @classmethod
    +    def _coerce_root(cls, v):
    +        if isinstance(v, dict) and 'root' not in v and any(
    +            k in v for k in ('metadata', 'results', 'elapsed_time', 'args')
    +        ):
    +            return RunResultsArtifact(**v)
    +        return v
    +
    +    # Back-compat: expose top-level fields as properties
    +    @property
    +    def metadata(self) -> BaseArtifactMetadata:
    +        return self.root.metadata
    +
    +    @property
    +    def results(self) -> List[RunResultOutput]:
    +        return self.root.results
    +
    +    @property
    +    def elapsed_time(self) -> float:
    +        return self.root.elapsed_time
    +
    +    @property
    +    def args(self) -> Optional[Dict[str, Any]]:
    +        return self.root.args

    Additionally, import model_validator:

    -from pydantic import ConfigDict, RootModel
    +from pydantic import ConfigDict, RootModel, model_validator

    Verification (grep for potential breakages):


    🏁 Script executed:

    #!/bin/bash
    # Direct instantiation call sites that may pass flattened kwargs
    rg -n -C2 '\bRunResultsV5\s*\(' --type py
    # Usages expecting attribute access without .root
    rg -n -C2 '\.results\b|\.metadata\b|\.elapsed_time\b|\.args\b' --type py | rg -n -C0 'RunResultsV5' -B3 -A0

    Length of output: 1239


    RootModel switch is a breaking API change; add back-compat shims.

    dbt_artifacts_parser/parser.py constructs RunResultsV5(**run_results) at dbt_artifacts_parser/parser.py:250 and :291 — this will break consumers and the parser. Apply the back-compat validator + proxy properties and import change shown below.

    -from pydantic import ConfigDict, RootModel
    +from pydantic import ConfigDict, RootModel, model_validator
    -class RunResultsV5(RootModel[RunResultsArtifact]):
    -    root: RunResultsArtifact
    +class RunResultsV5(RootModel[RunResultsArtifact]):
    +    root: RunResultsArtifact
    +
    +    # Back-compat: allow constructing with flattened kwargs/dicts
    +    @model_validator(mode='before')
    +    @classmethod
    +    def _coerce_root(cls, v):
    +        if isinstance(v, dict) and 'root' not in v and any(
    +            k in v for k in ('metadata', 'results', 'elapsed_time', 'args')
    +        ):
    +            return RunResultsArtifact(**v)
    +        return v
    +
    +    # Back-compat: expose top-level fields as properties
    +    @property
    +    def metadata(self) -> BaseArtifactMetadata:
    +        return self.root.metadata
    +
    +    @property
    +    def results(self) -> List[RunResultOutput]:
    +        return self.root.results
    +
    +    @property
    +    def elapsed_time(self) -> float:
    +        return self.root.elapsed_time
    +
    +    @property
    +    def args(self) -> Optional[Dict[str, Any]]:
    +        return self.root.args

    Committable suggestion skipped: line range outside the PR's diff.

    🤖 Prompt for AI Agents
    In dbt_artifacts_parser/parsers/run_results/run_results_v5.py around lines
    82-83, the change to inherit RootModel and require a top-level "root" field
    breaks existing callers that construct RunResultsV5(**run_results). Restore
    backward compatibility by adding a pre root_validator that detects when input is
    already the artifact dict and wraps it into {"root": input}, add proxy
    properties (or __getattr__) on RunResultsV5 to forward attribute access to
    self.root for the original top-level fields, and ensure any external imports
    still reference this class (adjust import aliases if needed) so existing
    parser.py calls at lines ~250 and ~291 continue to work without changes.
    

    @dlouseiro dlouseiro force-pushed the dlouseiro/add-support-for-dbt-1.10-in-run-results branch from d24fec6 to 856281a Compare September 23, 2025 11:09
    Copy link

    @coderabbitai coderabbitai bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Actionable comments posted: 0

    🧹 Nitpick comments (1)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (1)

    743-743: Nit: prefer enum member as default over raw string

    Using the enum member is a bit clearer and type-safe (mypy-friendly). If this file is code‑generated, consider adjusting the generator; otherwise:

    -    updates_on: Optional[UpdatesOn] = 'any'
    +    updates_on: Optional[UpdatesOn] = UpdatesOn.any

    Also applies to: 2625-2625

    📜 Review details

    Configuration used: CodeRabbit UI

    Review profile: CHILL

    Plan: Pro

    📥 Commits

    Reviewing files that changed from the base of the PR and between d24fec6 and 856281a.

    ⛔ Files ignored due to path filters (4)
    • dbt_artifacts_parser/resources/catalog/catalog_v1.json is excluded by !**/*.json
    • dbt_artifacts_parser/resources/manifest/manifest_v12.json is excluded by !**/*.json
    • dbt_artifacts_parser/resources/run-results/run-results_v6.json is excluded by !**/*.json
    • dbt_artifacts_parser/resources/sources/sources_v3.json is excluded by !**/*.json
    📒 Files selected for processing (7)
    • dbt_artifacts_parser/__init__.py (1 hunks)
    • dbt_artifacts_parser/parsers/catalog/catalog_v1.py (1 hunks)
    • dbt_artifacts_parser/parsers/manifest/manifest_v12.py (12 hunks)
    • dbt_artifacts_parser/parsers/run_results/run_results_v5.py (2 hunks)
    • dbt_artifacts_parser/parsers/run_results/run_results_v6.py (2 hunks)
    • dbt_artifacts_parser/parsers/sources/sources_v2.py (4 hunks)
    • dbt_artifacts_parser/parsers/sources/sources_v3.py (1 hunks)
    🚧 Files skipped from review as they are similar to previous changes (5)
    • dbt_artifacts_parser/init.py
    • dbt_artifacts_parser/parsers/catalog/catalog_v1.py
    • dbt_artifacts_parser/parsers/run_results/run_results_v5.py
    • dbt_artifacts_parser/parsers/sources/sources_v3.py
    • dbt_artifacts_parser/parsers/run_results/run_results_v6.py
    🧰 Additional context used
    🧬 Code graph analysis (1)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (1)
    dbt_artifacts_parser/parsers/base.py (1)
    • BaseParserModel (23-26)
    🔇 Additional comments (11)
    dbt_artifacts_parser/parsers/sources/sources_v2.py (4)

    20-20: LGTM switching to AwareDatetime; keep default string only if schema mandates it.

    If not mandated by the JSON schema, consider defaulting to None to avoid a fixed timestamp default.


    64-65: LGTM: timing fields now timezone‑aware.

    This aligns with dbt’s ISO8601 “Z” timestamps.


    9-9: Require Pydantic v2 for AwareDatetime/ConfigDict
    AwareDatetime and ConfigDict are Pydantic v2-only — ensure project manifests and CI specify pydantic>=2.0 (check pyproject.toml / setup.cfg / requirements*.txt / poetry.lock and CI config).


    82-83: Timezone-awareness enforced for required fields — fixtures OK

    Scanned JSON artifacts for snapshotted_at / max_loaded_at / started_at / completed_at / generated_at — no timezone-less datetimes found; fixtures appear timezone-aware.

    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (7)

    732-735: New UpdatesOn enum — LGTM

    Matches upstream values ('all' | 'any').


    741-743: build_after made required — verify back-compat expectations

    BuildAfter.count/period and Freshness.build_after are now required. If manifest_v12 artifacts from 1.9 could omit these, this is a breaking parse change. If v12 in dbt 1.10 guarantees presence, this is fine. Please confirm intended compatibility surface.

    Also applies to: 750-750


    1562-1566: Source config enrichment — LGTM

    Adding freshness, loaded_at_field, loaded_at_query, meta, tags to Config20 aligns with dbt 1.10 and PR goals.


    1589-1589: Sources.freshness binding — LGTM; check consistency across disabled variants

    This switches to Freshness1 for Sources. Ensure Disabled8 uses the corresponding Freshness4 variant (it does below) so representations stay consistent.


    2620-2625: Model freshness variants required — verify intent

    BuildAfter1/Freshness3 are also now required in model config variants; consistent with the earlier change. Confirm this mirrors the dbt 1.10 manifest v12 schema to avoid rejecting older artifacts inadvertently.

    Also applies to: 2629-2633, 2668-2668


    3313-3320: Approve: source freshness variants + loaded_at_ fields verified*

    Freshness4/Freshness5 and loaded_at_field/loaded_at_query are defined and propagated into Sources, Config44, and Disabled8.


    30-33: Scope check + version default alignment

    manifest_v12 sets dbt_version = '1.10.8' while related parsers use '1.10.0a1' — confirm this bump is intentional and either align defaults across parsers or document the divergence.

    • dbt_artifacts_parser/parsers/manifest/manifest_v12.py: dbt_version = '1.10.8'
    • dbt_artifacts_parser/parsers/run_results/run_results_v6.py: dbt_version = '1.10.0a1'
    • dbt_artifacts_parser/parsers/catalog/catalog_v1.py: dbt_version = '1.10.0a1'
    • dbt_artifacts_parser/parsers/sources/sources_v3.py: dbt_version = '1.10.0a1'

    @dlouseiro dlouseiro force-pushed the dlouseiro/add-support-for-dbt-1.10-in-run-results branch from 856281a to 65865c8 Compare September 25, 2025 08:49
    @dlouseiro dlouseiro changed the title Add compatibility with dbt v1.10 in run_results, catalog and sources Add compatibility with dbt v1.10 in run_results Sep 25, 2025
    @dlouseiro dlouseiro force-pushed the dlouseiro/add-support-for-dbt-1.10-in-run-results branch from 701349e to 4bb2e79 Compare October 15, 2025 12:03
    Copy link

    @coderabbitai coderabbitai bot left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Actionable comments posted: 2

    📜 Review details

    Configuration used: CodeRabbit UI

    Review profile: CHILL

    Plan: Pro

    📥 Commits

    Reviewing files that changed from the base of the PR and between 701349e and 4bb2e79.

    ⛔ Files ignored due to path filters (2)
    • dbt_artifacts_parser/resources/manifest/manifest_v12.json is excluded by !**/*.json
    • dbt_artifacts_parser/resources/run-results/run-results_v6.json is excluded by !**/*.json
    📒 Files selected for processing (2)
    • dbt_artifacts_parser/parsers/manifest/manifest_v12.py (13 hunks)
    • dbt_artifacts_parser/parsers/run_results/run_results_v6.py (1 hunks)
    🧰 Additional context used
    🧬 Code graph analysis (1)
    dbt_artifacts_parser/parsers/manifest/manifest_v12.py (1)
    dbt_artifacts_parser/parsers/base.py (1)
    • BaseParserModel (23-26)
    🔇 Additional comments (1)
    dbt_artifacts_parser/parsers/run_results/run_results_v6.py (1)

    22-22: LGTM: added invocation_started_at

    Field addition is correct and optional; compatible with v1.10.

    @matthieucan
    Copy link

    @yu-iskw Hi! I'm also impacted by this issue, and confirm this PR fixes it. Any way to get it merged? Let me know if I can help.

    Copy link
    Owner

    @yu-iskw yu-iskw left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    LGTM

    Sorry for the delay of my reply. Thank you for your contribution!

    @yu-iskw yu-iskw merged commit 128c0b9 into yu-iskw:main Oct 23, 2025
    7 checks passed
    @coderabbitai coderabbitai bot mentioned this pull request Oct 23, 2025
    @yu-iskw
    Copy link
    Owner

    yu-iskw commented Oct 23, 2025

    0.11.0 is out.

    https://pypi.org/project/dbt-artifacts-parser/0.11.0/

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

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    3 participants