import { describe, expect, it } from "vitest"; import type { UnifiedRetrievalResult } from "../src/types/assistant"; import { assembleAssistantEvidenceBundle } from "../src/services/assistantEvidenceBundleAssembler"; function buildRetrieval(input?: Partial): UnifiedRetrievalResult { return { fragment_id: "F1", requirement_ids: ["R1"], route: "hybrid_store_plus_live", status: "ok", result_type: "summary", items: [], summary: {}, evidence: [], why_included: [], selection_reason: [], risk_factors: [], business_interpretation: [], confidence: "medium", limitations: [], errors: [], ...input }; } describe("assistant evidence bundle assembler", () => { it("builds evidence contract and retrieval status from the same retrieval set", () => { const assembled = assembleAssistantEvidenceBundle({ retrievalCalls: [{ route: "hybrid_store_plus_live" }, { route: "store_canonical" }], retrievalResults: [ buildRetrieval({ fragment_id: "F1", requirement_ids: ["R1"], route: "hybrid_store_plus_live", status: "ok", evidence: [ { evidence_id: "ev-1", claim_ref: "requirement:R1", source_type: "retrieval_item", source_ref: { schema_version: "evidence_source_ref_v1", namespace: "snapshot_2020", entity: "document", id: "doc-1", period: "2020-07", canonical_ref: "evidence_source_ref_v1|snapshot_2020|document|doc-1|2020-07" }, pointer: { fragment_id: "F1", route: "hybrid_store_plus_live", source: { namespace: "snapshot_2020", entity: "document", id: "doc-1", period: "2020-07" }, locator: { field_path: "amount", item_index: 0 } }, evidence_kind: "mechanism_link", mechanism_note: "signal", confidence: "medium", limitation: null, payload: {} } ] }), buildRetrieval({ fragment_id: "F2", requirement_ids: ["R2"], route: "store_canonical", status: "error", result_type: "list", errors: ["timeout"] }) ] }); expect(assembled.evidenceBundleContractV1.retrieval_calls_total).toBe(2); expect(assembled.evidenceBundleContractV1.retrieval_results_total).toBe(2); expect(assembled.evidenceBundleContractV1.retrieval_status_breakdown.ok).toBe(1); expect(assembled.evidenceBundleContractV1.retrieval_status_breakdown.error).toBe(1); expect(assembled.evidenceBundleContractV1.evidence_total).toBe(1); expect(assembled.evidenceBundleContractV1.source_refs_total).toBe(1); expect(assembled.retrievalStatus).toEqual([ { fragment_id: "F1", requirement_ids: ["R1"], route: "hybrid_store_plus_live", status: "ok", result_type: "summary" }, { fragment_id: "F2", requirement_ids: ["R2"], route: "store_canonical", status: "error", result_type: "list" } ]); }); });