wip(confidence-engine): checkpoint open-question presentation work

This commit is contained in:
2026-10-09 07:46:19 +01:00
parent f74fe6de10
commit 6bc8be6edb
19 changed files with 812 additions and 22 deletions
+30
View File
@@ -55,6 +55,8 @@ function makeAnalysisResult(overrides = {}) {
compatibilityApplied: false,
compatibilityChanges: [],
compatibilityWarnings: [],
presentationValidationStatus: "valid",
presentationValidationIssues: [],
...overrides,
};
}
@@ -399,9 +401,37 @@ describe("lib/graph/orchestrator startCase", () => {
valid: true,
errors: [],
});
expect(result.diagnostics.presentationValidationStatus).toBe("valid");
expect(result.diagnostics.presentationValidationIssues).toEqual([]);
expect(downstreamProvider.generateReconstruction).not.toHaveBeenCalled();
});
it("propagates nonfatal Open Question presentation issues through diagnostics", async () => {
const issue = {
category: "question_indirect_proposition",
path: ["reconstruction", "importantUnknowns", 0, "question"],
unknownId: "unk-1",
message: "The generated Open Question used an indirect uncertainty proposition.",
severity: "nonfatal",
};
mockAnalyseScenario.mockResolvedValue(
makeAnalysisResult({
presentationValidationStatus: "partial",
presentationValidationIssues: [issue],
}),
);
const { startCase } = await import("@/lib/graph/orchestrator.js");
const result = await startCase(
{ scenario: "Scenario text" },
{ reconstructionOnly: true },
);
expect(result.success).toBe(true);
expect(result.diagnostics.presentationValidationStatus).toBe("partial");
expect(result.diagnostics.presentationValidationIssues).toEqual([issue]);
});
it("rejects invalid request input without throwing", async () => {
const { startCase } = await import("@/lib/graph/orchestrator.js");