Этап 4 / Волна 10: корректировка settlement-кейса — доменная фиксация синтеза, честное покрытие, удержание фокуса / Этап 4 / Волна 11: бизнес-якоря, доменное заземление и устранение утечки дебага
This commit is contained in:
@@ -68,10 +68,10 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
});
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.reply_type).toBe("factual_with_explanation");
|
||||
expect(String(response.body.assistant_reply)).toContain("Answer summary:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Direct answer:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Mechanism block:");
|
||||
expect(["factual_with_explanation", "partial_coverage"]).toContain(response.body.reply_type);
|
||||
expect(String(response.body.assistant_reply)).toContain("Коротко:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Что сломано:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Ограничения:");
|
||||
|
||||
const structure = response.body.debug?.answer_structure_v11;
|
||||
expect(structure?.mechanism_block).toBeTruthy();
|
||||
@@ -98,8 +98,8 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(response.body.reply_type).toBe("partial_coverage");
|
||||
expect(String(response.body.assistant_reply)).toContain("Uncertainty block:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Next step block:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Ограничения:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Что проверить первым:");
|
||||
|
||||
const structure = response.body.debug?.answer_structure_v11;
|
||||
expect(typeof structure?.answer_summary).toBe("string");
|
||||
@@ -136,7 +136,8 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
/period|account|document|counterparty|период|счет|документ|контрагент|пер|РґРѕРєСѓРј/i.test(String(item))
|
||||
)
|
||||
).toBe(true);
|
||||
expect(String(response.body.assistant_reply)).toContain("clarify:");
|
||||
expect(String(response.body.assistant_reply)).toContain("Что проверить первым:");
|
||||
expect(String(response.body.assistant_reply)).toMatch(/уточните|период|счет|документ|контрагент/i);
|
||||
});
|
||||
|
||||
it("does not fabricate mechanism when mechanism_note is unresolved", () => {
|
||||
@@ -253,7 +254,8 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
expect(output.answer_structure_v11?.mechanism_block?.status).toBe("unresolved");
|
||||
expect(output.answer_structure_v11?.mechanism_block?.mechanism_notes).toEqual([]);
|
||||
expect(output.answer_structure_v11?.mechanism_block?.limitation_reason_codes).toContain("missing_mechanism");
|
||||
expect(output.assistant_reply).toContain("mechanism_note is intentionally omitted");
|
||||
expect(output.assistant_reply).toContain("Ограничения:");
|
||||
expect(output.assistant_reply).not.toMatch(/mechanism_note|source_ref|canonical_ref|route|profile/i);
|
||||
});
|
||||
|
||||
it("preserves legacy reply path when policy flag is OFF", async () => {
|
||||
@@ -271,7 +273,7 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
});
|
||||
|
||||
expect(legacy.status).toBe(200);
|
||||
expect(String(legacy.body.assistant_reply)).not.toContain("Answer summary:");
|
||||
expect(String(legacy.body.assistant_reply)).not.toContain("Что сломано:");
|
||||
|
||||
const appPolicy = await createAppWithFlags({
|
||||
answerPolicy: "1",
|
||||
@@ -287,7 +289,7 @@ describe.sequential("assistant answer policy v1.1", () => {
|
||||
});
|
||||
|
||||
expect(policy.status).toBe(200);
|
||||
expect(String(policy.body.assistant_reply)).toContain("Answer summary:");
|
||||
expect(String(policy.body.assistant_reply)).toContain("Что сломано:");
|
||||
expect(String(policy.body.assistant_reply)).not.toBe(String(legacy.body.assistant_reply));
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user