ARCH: связать phase18 capabilities с runtime contracts

This commit is contained in:
2026-04-20 07:45:57 +03:00
parent 43d50e21cc
commit 399e29f4a4
9 changed files with 191 additions and 0 deletions
@@ -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: {