ARCH: добавить boundary для неподдержанного текущего смысла
This commit is contained in:
@@ -700,4 +700,48 @@ describe("assistantRoutePolicy", () => {
|
||||
"assistant_turn_meaning_v1"
|
||||
);
|
||||
});
|
||||
|
||||
it("routes unsupported-but-understood current meaning to boundary instead of stale address carryover", () => {
|
||||
const policy = buildPolicy({
|
||||
hasDataRetrievalRequestSignal: () => true,
|
||||
hasStrongDataIntentSignal: () => true,
|
||||
resolveAddressToolGateDecision: () => ({
|
||||
runAddressLane: true,
|
||||
decision: "run_address_lane",
|
||||
reason: "followup_context_detected"
|
||||
}),
|
||||
resolveAssistantTurnMeaning: () => ({
|
||||
schema_version: "assistant_turn_meaning_v1",
|
||||
asked_domain_family: "counterparty",
|
||||
asked_action_family: "counterparty_value_or_turnover",
|
||||
explicit_intent_candidate: null,
|
||||
unsupported_but_understood_family: "counterparty_value_or_turnover",
|
||||
stale_replay_forbidden: true,
|
||||
reason_codes: ["counterparty_turnover_current_turn_signal"]
|
||||
})
|
||||
});
|
||||
|
||||
const decision = policy.resolveAssistantOrchestrationDecision({
|
||||
rawUserMessage:
|
||||
"\u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u0431\u044b\u043b \u0441\u0432\u043a",
|
||||
effectiveAddressUserMessage:
|
||||
"\u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u0431\u044b\u043b \u0441\u0432\u043a",
|
||||
followupContext: {
|
||||
previous_intent: "list_documents_by_counterparty",
|
||||
previous_filters: {
|
||||
counterparty: "Previous Counterparty"
|
||||
}
|
||||
},
|
||||
llmPreDecomposeMeta: null,
|
||||
useMock: false
|
||||
});
|
||||
|
||||
expect(decision.runAddressLane).toBe(false);
|
||||
expect(decision.toolGateReason).toBe("unsupported_current_turn_meaning_boundary");
|
||||
expect(decision.livingMode).toBe("chat");
|
||||
expect(decision.orchestrationContract?.unsupported_current_turn_meaning_boundary).toBe(true);
|
||||
expect(decision.orchestrationContract?.unsupported_current_turn_family).toBe(
|
||||
"counterparty_value_or_turnover"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -156,6 +156,23 @@ describe("assistant runtime contract registry", () => {
|
||||
expect(blockedDecision.carryover_eligibility).toBe("none");
|
||||
});
|
||||
|
||||
it("resolves unsupported current-turn meaning boundary as blocked transition", () => {
|
||||
const decision = resolveAssistantRuntimeContractShadow({
|
||||
addressRuntimeMeta: {
|
||||
toolGateReason: "unsupported_current_turn_meaning_boundary",
|
||||
orchestrationContract: {
|
||||
unsupported_current_turn_meaning_boundary: true,
|
||||
unsupported_current_turn_family: "counterparty_value_or_turnover",
|
||||
address_intent: "unknown"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(decision.transition_contract_id).toBe("T10");
|
||||
expect(decision.transition_contract_reason).toEqual(["unsupported_current_turn_meaning_boundary"]);
|
||||
expect(decision.carryover_eligibility).toBe("none");
|
||||
});
|
||||
|
||||
it("classifies temporal limitations as a distinct truth gate status", () => {
|
||||
const decision = resolveAssistantRuntimeContractShadow({
|
||||
addressDebug: {
|
||||
|
||||
Reference in New Issue
Block a user