{"record":{"id":"ead95b91734e03e9","repo":"HKUDS/Vibe-Trading","slug":"diff-artifacts-cannot-diff-a-baseline-model-name","errorCode":null,"errorMessage":"diff_artifacts: cannot diff a {baseline.model_name!r} artifact against a {updated.model_name!r} artifact -- they have no comparable field paths","messagePattern":"diff_artifacts: cannot diff a (.+?) artifact against a (.+?) artifact -- they have no comparable field paths","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"agent/src/quantlib/valuation/artifact.py","lineNumber":980,"sourceCode":"\n\ndef diff_artifacts(baseline: ModelArtifact, updated: ModelArtifact) -> ArtifactDiff:\n    \"\"\"Diff two artifacts of the same model: which fields changed, by how much.\n\n    Args:\n        baseline: The \"before\" artifact.\n        updated: The \"after\" artifact. Must share ``baseline.model_name``.\n\n    Returns:\n        An :class:`ArtifactDiff` naming every changed/added/removed input and\n        output path.\n\n    Raises:\n        ValueError: If ``baseline.model_name != updated.model_name`` -- the\n            two artifacts would have no comparable field paths.\n    \"\"\"\n    if baseline.model_name != updated.model_name:\n        raise ValueError(\n            f\"diff_artifacts: cannot diff a {baseline.model_name!r} artifact \"\n            f\"against a {updated.model_name!r} artifact -- they have no \"\n            \"comparable field paths\"\n        )\n    changed_inputs, added_inputs, removed_inputs = _diff_leaves(baseline.inputs, updated.inputs)\n    changed_outputs, added_outputs, removed_outputs = _diff_leaves(baseline.outputs, updated.outputs)\n    return ArtifactDiff(\n        model_name=baseline.model_name,\n        baseline_generated_at=baseline.generated_at,\n        updated_generated_at=updated.generated_at,\n        baseline_input_hash=baseline.input_hash,\n        updated_input_hash=updated.input_hash,\n        input_hash_changed=baseline.input_hash != updated.input_hash,\n        baseline_model_version=baseline.model_version,\n        updated_model_version=updated.model_version,\n        model_version_changed=baseline.model_version != updated.model_version,\n        changed_inputs=changed_inputs,\n        added_input_paths=added_inputs,","sourceCodeStart":962,"sourceCodeEnd":998,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/quantlib/valuation/artifact.py#L962-L998","documentation":"diff_artifacts only compares artifacts of the same model_name, because a DCF artifact and a comps artifact share no comparable field paths. Mismatched names raise a ValueError before any leaf diffing.","triggerScenarios":"diff_artifacts(dcf_artifact, comps_artifact); diffing artifacts built by different build_* functions; comparing artifacts whose model_name casing/typo differs (though construction validation usually prevents that).","commonSituations":"UI letting users pick two artifacts of different models; generic 'compare latest two artifacts' logic that grabs across model types.","solutions":["Only diff artifacts with the same model_name.","Branch on model_name and use model-specific reporting.","Add a guard: if a.model_name != b.model_name, skip or report incomparable."],"exampleFix":"# before\ndiff = diff_artifacts(dcf_artifact, comps_artifact)\n# after\nassert a.model_name == b.model_name, \"cannot diff across models\"\ndiff = diff_artifacts(a, b)  # same model_name","handlingStrategy":"validation","validationCode":"if baseline.model_name != updated.model_name:\n    raise ValueError(f\"cannot diff {baseline.model_name} vs {updated.model_name}\")\ndiff_artifacts(baseline, updated)","typeGuard":"def artifacts_comparable(a, b) -> bool:\n    return a.model_name == b.model_name","tryCatchPattern":null,"preventionTips":["Group artifacts by model_name before offering diff operations in UIs.","Store artifacts keyed by model_name so cross-model pairs never meet."],"tags":["python","artifact","diff","validation"],"backgroundTag":"incomparable-artifact-types","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}