ARCH: связать phase18 capabilities с runtime contracts
This commit is contained in:
@@ -119,6 +119,20 @@ describe("address capability policy", () => {
|
||||
expect(decision.capability_route_enabled).toBe(true);
|
||||
});
|
||||
|
||||
it("maps counterparty value-flow intents to exact compute capabilities", () => {
|
||||
const revenue = resolveAddressCapabilityRouteDecision("customer_revenue_and_payments");
|
||||
expect(revenue.capability_id).toBe("address_customer_revenue_and_payments");
|
||||
expect(revenue.capability_layer).toBe("compute");
|
||||
expect(revenue.capability_route_mode).toBe("exact");
|
||||
expect(revenue.capability_route_enabled).toBe(true);
|
||||
expect(revenue.capability_route_reason).toBe("counterparty_value_flow_route_enabled");
|
||||
|
||||
const payouts = resolveAddressCapabilityRouteDecision("supplier_payouts_profile");
|
||||
expect(payouts.capability_id).toBe("address_supplier_payouts_profile");
|
||||
expect(payouts.capability_layer).toBe("compute");
|
||||
expect(payouts.capability_route_mode).toBe("exact");
|
||||
});
|
||||
|
||||
it("maps heuristic list intents to heuristic compute route mode", () => {
|
||||
const decision = resolveAddressCapabilityRouteDecision("list_receivables_counterparties");
|
||||
expect(decision.capability_id).toBe("receivables_candidates_list");
|
||||
|
||||
@@ -76,6 +76,35 @@ describe("assistant capability runtime binding adapter", () => {
|
||||
expect(binding.violations).toEqual([]);
|
||||
});
|
||||
|
||||
it("binds counterparty revenue answers to the phase18 exact contract", () => {
|
||||
const binding = resolveAssistantCapabilityRuntimeBinding({
|
||||
addressDebug: {
|
||||
capability_id: "address_customer_revenue_and_payments",
|
||||
detected_intent: "customer_revenue_and_payments",
|
||||
detected_mode: "address_query",
|
||||
capability_layer: "compute",
|
||||
capability_route_mode: "exact",
|
||||
extracted_filters: {
|
||||
counterparty: "Группа СВК",
|
||||
organization: "ООО Альтернатива Плюс"
|
||||
},
|
||||
rows_matched: 16,
|
||||
route_expectation_status: "matched"
|
||||
},
|
||||
groundingStatus: "grounded",
|
||||
replyType: "factual"
|
||||
});
|
||||
|
||||
expect(binding.binding_status).toBe("bound");
|
||||
expect(binding.binding_action).toBe("allow");
|
||||
expect(binding.capability_contract_id).toBe("address_customer_revenue_and_payments");
|
||||
expect(binding.transition_id).toBe("T1");
|
||||
expect(binding.transition_allowed).toBe(true);
|
||||
expect(binding.result_shape).toBe("counterparty_revenue_payment_flow");
|
||||
expect(binding.provided_anchors).toEqual(expect.arrayContaining(["counterparty", "organization"]));
|
||||
expect(binding.violations).toEqual([]);
|
||||
});
|
||||
|
||||
it("blocks selected-object capabilities when required anchors are missing", () => {
|
||||
const binding = resolveAssistantCapabilityRuntimeBinding({
|
||||
addressDebug: {
|
||||
|
||||
@@ -95,6 +95,20 @@ describe("assistant runtime contract registry", () => {
|
||||
expect(contract?.execution_adapter).toBe("AddressQueryService");
|
||||
});
|
||||
|
||||
it("declares counterparty document and value-flow contracts used by semantic dialog authority replay", () => {
|
||||
const documents = getAssistantCapabilityContractByIntent("list_documents_by_counterparty");
|
||||
expect(documents?.capability_id).toBe("documents_drilldown");
|
||||
expect(documents?.supported_transition_classes).toEqual(["T1", "T2", "T6", "T7"]);
|
||||
expect(documents?.result_shape).toBe("counterparty_or_contract_document_list");
|
||||
|
||||
const revenue = getAssistantCapabilityContractByIntent("customer_revenue_and_payments");
|
||||
expect(revenue?.capability_id).toBe("address_customer_revenue_and_payments");
|
||||
expect(revenue?.runtime_lane).toBe("address_exact");
|
||||
expect(revenue?.requires_focus_object).toBe(false);
|
||||
expect(revenue?.supported_transition_classes).toEqual(["T1", "T2", "T6", "T7"]);
|
||||
expect(revenue?.required_scenario_families).toContain("answer_top_block_matches_current_user_intent");
|
||||
});
|
||||
|
||||
it("keeps truth semantics outside answer wording for every pilot inventory capability", () => {
|
||||
for (const contract of listInventoryCapabilityContracts()) {
|
||||
expect(contract.coverage_gate_behavior).toBe("partial_or_blocked_if_evidence_insufficient");
|
||||
@@ -130,6 +144,27 @@ describe("assistant runtime contract registry", () => {
|
||||
expect(decision.carryover_eligibility).toBe("object_only");
|
||||
});
|
||||
|
||||
it("resolves phase18 counterparty revenue shadow as a root exact contract", () => {
|
||||
const decision = resolveAssistantRuntimeContractShadow({
|
||||
addressDebug: {
|
||||
capability_id: "address_customer_revenue_and_payments",
|
||||
detected_intent: "customer_revenue_and_payments",
|
||||
detected_mode: "address_query",
|
||||
capability_layer: "compute",
|
||||
capability_route_mode: "exact",
|
||||
rows_matched: 16,
|
||||
route_expectation_status: "matched"
|
||||
},
|
||||
groundingStatus: "grounded"
|
||||
});
|
||||
|
||||
expect(decision.transition_contract_id).toBe("T1");
|
||||
expect(decision.capability_contract_id).toBe("address_customer_revenue_and_payments");
|
||||
expect(decision.capability_contract_reason).toEqual(["debug_capability_id_matched_contract"]);
|
||||
expect(decision.truth_gate_contract_status).toBe("full_confirmed");
|
||||
expect(decision.carryover_eligibility).toBe("root_only");
|
||||
});
|
||||
|
||||
it("resolves meta follow-up and blocked route expectation in shadow mode", () => {
|
||||
const metaDecision = resolveAssistantRuntimeContractShadow({
|
||||
addressRuntimeMeta: {
|
||||
|
||||
Reference in New Issue
Block a user