ARCH: заземлить metadata surface в следующий MCP lane
This commit is contained in:
@@ -130,11 +130,49 @@ describe("assistant MCP discovery answer adapter", () => {
|
||||
const confirmedText = draft.confirmed_lines.join("\n");
|
||||
|
||||
expect(draft.answer_mode).toBe("confirmed_with_bounded_inference");
|
||||
expect(draft.headline).toContain("метаданным 1С");
|
||||
expect(draft.headline).toContain("заземлена вероятная поверхность");
|
||||
expect(confirmedText).toContain("Подтвержденная metadata-поверхность 1С");
|
||||
expect(confirmedText).toContain("Документ.СчетФактураВыданный");
|
||||
expect(confirmedText).toContain("Выбранное family: Документ");
|
||||
expect(confirmedText).toContain("Дата");
|
||||
expect(draft.inference_lines.join("\n")).toContain("контур документов");
|
||||
expect(draft.next_step_line).toContain("surface «Документ»");
|
||||
expect(draft.must_not_claim).toContain("Do not present metadata surface as confirmed business data rows.");
|
||||
expect(draft.must_not_claim).toContain("Do not present the inferred next checked lane as already executed data retrieval.");
|
||||
});
|
||||
|
||||
it("keeps metadata answer honest when schema surface stays ambiguous", async () => {
|
||||
const planner = planAssistantMcpDiscovery({
|
||||
turnMeaning: {
|
||||
asked_domain_family: "metadata",
|
||||
asked_action_family: "inspect_fields",
|
||||
explicit_entity_candidates: ["НДС"]
|
||||
}
|
||||
});
|
||||
const pilot = await executeAssistantMcpDiscoveryPilot(
|
||||
planner,
|
||||
buildMetadataDeps([
|
||||
{
|
||||
FullName: "Документ.СчетФактураВыданный",
|
||||
MetaType: "Документ",
|
||||
attributes: [{ Name: "Дата" }]
|
||||
},
|
||||
{
|
||||
FullName: "РегистрНакопления.НДСПокупок",
|
||||
MetaType: "РегистрНакопления",
|
||||
resources: [{ Name: "СуммаНДС" }]
|
||||
}
|
||||
])
|
||||
);
|
||||
|
||||
const draft = buildAssistantMcpDiscoveryAnswerDraft(pilot);
|
||||
|
||||
expect(draft.headline).toContain("конкурирующие schema-поверхности");
|
||||
expect(draft.inference_lines.join("\n")).toContain("несколько конкурирующих family");
|
||||
expect(draft.unknown_lines).toContain(
|
||||
"Exact downstream metadata surface remains ambiguous across: Документ, РегистрНакопления"
|
||||
);
|
||||
expect(draft.next_step_line).toContain("Документ, РегистрНакопления");
|
||||
});
|
||||
|
||||
it("turns value-flow evidence into a bounded turnover answer draft", async () => {
|
||||
|
||||
@@ -138,6 +138,12 @@ describe("assistant MCP discovery pilot executor", () => {
|
||||
matched_rows: 2,
|
||||
available_entity_sets: ["Документ"],
|
||||
matched_objects: ["Документ.СчетФактураВыданный", "Документ.СчетФактураПолученный"],
|
||||
selected_entity_set: "Документ",
|
||||
selected_surface_objects: ["Документ.СчетФактураВыданный", "Документ.СчетФактураПолученный"],
|
||||
downstream_route_family: "document_evidence",
|
||||
recommended_next_primitive: "query_documents",
|
||||
ambiguity_detected: false,
|
||||
ambiguity_entity_sets: [],
|
||||
available_fields: ["Дата", "Организация", "Контрагент"],
|
||||
inference_basis: "confirmed_1c_metadata_surface_rows"
|
||||
});
|
||||
@@ -150,6 +156,45 @@ describe("assistant MCP discovery pilot executor", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("keeps metadata grounding ambiguous when several surface families compete", async () => {
|
||||
const planner = planAssistantMcpDiscovery({
|
||||
turnMeaning: {
|
||||
asked_domain_family: "metadata",
|
||||
asked_action_family: "inspect_fields",
|
||||
explicit_entity_candidates: ["НДС"]
|
||||
}
|
||||
});
|
||||
const deps = buildMetadataDeps([
|
||||
{
|
||||
FullName: "Документ.СчетФактураВыданный",
|
||||
MetaType: "Документ",
|
||||
attributes: [{ Name: "Дата" }]
|
||||
},
|
||||
{
|
||||
FullName: "РегистрНакопления.НДСПокупок",
|
||||
MetaType: "РегистрНакопления",
|
||||
resources: [{ Name: "СуммаНДС" }]
|
||||
}
|
||||
]);
|
||||
|
||||
const result = await executeAssistantMcpDiscoveryPilot(planner, deps);
|
||||
|
||||
expect(result.pilot_status).toBe("executed");
|
||||
expect(result.derived_metadata_surface).toMatchObject({
|
||||
metadata_scope: "НДС",
|
||||
available_entity_sets: ["Документ", "РегистрНакопления"],
|
||||
selected_entity_set: null,
|
||||
downstream_route_family: null,
|
||||
recommended_next_primitive: null,
|
||||
ambiguity_detected: true,
|
||||
ambiguity_entity_sets: ["Документ", "РегистрНакопления"]
|
||||
});
|
||||
expect(result.evidence.inferred_facts).toEqual([]);
|
||||
expect(result.evidence.unknown_facts).toContain(
|
||||
"Exact downstream metadata surface remains ambiguous across: Документ, РегистрНакопления"
|
||||
);
|
||||
});
|
||||
|
||||
it("executes value-flow query_movements and derives a guarded turnover sum", async () => {
|
||||
const planner = planAssistantMcpDiscovery({
|
||||
turnMeaning: {
|
||||
|
||||
@@ -223,10 +223,17 @@ describe("assistant MCP discovery response candidate", () => {
|
||||
confirmed_lines: [
|
||||
'Confirmed 1C metadata surface for scope "НДС": 7 rows and 3 matching objects',
|
||||
"Available metadata object sets: accumulation_register, document",
|
||||
"Selected metadata entity set: Документ",
|
||||
"Selected metadata objects: Документ.СчетФактураВыданный",
|
||||
"Available metadata fields/sections: amount, vat_rate, organization"
|
||||
],
|
||||
inference_lines: [],
|
||||
unknown_lines: ['No matching 1C metadata objects were confirmed for scope "Прибыль"'],
|
||||
inference_lines: [
|
||||
"A likely next checked lane may be inferred as document_evidence from the confirmed metadata surface"
|
||||
],
|
||||
unknown_lines: [
|
||||
'No matching 1C metadata objects were confirmed for scope "Прибыль"',
|
||||
"Exact downstream metadata surface remains ambiguous across: Документ, РегистрНакопления"
|
||||
],
|
||||
limitation_lines: ["Detailed metadata fields were not returned by this MCP metadata probe"],
|
||||
next_step_line: null
|
||||
}
|
||||
@@ -236,8 +243,12 @@ describe("assistant MCP discovery response candidate", () => {
|
||||
|
||||
expect(candidate.reply_text).toContain('В 1С подтверждена metadata-поверхность по области "НДС"');
|
||||
expect(candidate.reply_text).toContain("Доступные типы metadata-объектов");
|
||||
expect(candidate.reply_text).toContain("Выбранное семейство metadata-объектов: Документ");
|
||||
expect(candidate.reply_text).toContain("Выбранные metadata-объекты для следующего шага");
|
||||
expect(candidate.reply_text).toContain("Доступные metadata-поля/секции");
|
||||
expect(candidate.reply_text).toContain("контур документов");
|
||||
expect(candidate.reply_text).toContain('В 1С не подтверждены metadata-объекты по области "Прибыль"');
|
||||
expect(candidate.reply_text).toContain("неоднозначна между family");
|
||||
expect(candidate.reply_text).toContain("Эта MCP-проверка metadata не вернула детальный список полей");
|
||||
expect(candidate.reply_text).not.toContain("Confirmed 1C metadata surface");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user