ARCH: добавить supplier payout pilot MCP discovery

This commit is contained in:
2026-04-20 18:42:58 +03:00
parent 49fd08652c
commit 52da709671
20 changed files with 688 additions and 48 deletions
@@ -1154,6 +1154,64 @@ Module progress:
- Big Block 5 MCP Semantic Data Agent: `97%`.
## Progress Update - 2026-04-20 MCP Discovery Supplier Payout Pilot And Address-Lane Arbitration
The seventeenth implementation slice of Big Block 5 closes the main boundary left by the first value-flow pilot: outgoing supplier payments.
New behavior:
- raw payout/outflow wording such as `мы заплатили`, `заплатили`, `перечислили`, `списание`, `расход`, `поставщик`, `supplier`, `payout`, and `outflow` is recognized as counterparty value-flow discovery;
- the turn input adapter now marks these turns as `asked_action_family=payout` and `unsupported_but_understood_family=counterparty_payouts_or_outflow`;
- the pilot chooses `supplier_payouts_profile` instead of `customer_revenue_and_payments`;
- `derived_value_flow` now includes `value_flow_direction`, so answer composition can distinguish incoming customer revenue from outgoing supplier payout;
- supplier payout evidence gets a separate pilot scope: `counterparty_supplier_payout_query_movements_v1`;
- the answer says `исходящие платежи/списания`, not generic turnover, and bounds the result to found rows and the checked period.
- if the probe row limit is reached, `derived_value_flow.coverage_limited_by_probe_limit=true` and the answer explicitly says that full requested-period coverage is not proven.
The live replay exposed one more architecture gap before the final fix:
- `address_truth_harness_phase19_mcp_discovery_response_gate_live_rerun7` failed on `сколько мы заплатили Группа СВК за 2020 год?`;
- MCP discovery had already produced the correct `counterparty_supplier_payout_query_movements_v1` candidate;
- the visible answer still came from stale `list_documents_by_counterparty` carryover and showed incoming bank receipt documents instead of outgoing payments.
The response policy gate was therefore extended into the address lane.
It may now replace an address-lane answer only when:
- the MCP discovery entry point is `bridge_executed`;
- discovery was attempted;
- `turn_input.should_run_discovery=true`;
- the current reply source is `address_query_runtime_v1`, `address_lane`, or `address_exact`;
- the response candidate passes the same guarded text checks as living-chat and deep gates.
This keeps exact supported routes safe because ordinary exact turns have discovery `skipped_not_applicable` or `should_run_discovery=false`.
Replay result:
- `address_truth_harness_phase19_mcp_discovery_response_gate_live_rerun8` passed 6/6, final status `accepted`;
- `address_truth_harness_phase19_mcp_discovery_response_gate_live_rerun9` passed 6/6 after adding the explicit row-limit coverage warning;
- the supplier payout step now answers through `mcp_discovery_response_candidate_guarded`;
- the answer reports `19 568 878,06 руб.` across `100 из 100` found outgoing payment rows for `Группа СВК` in `2020`;
- first found movement date: `2020-01-09`;
- latest found movement date: `2020-03-16`;
- because the probe reached the row limit, the answer now says that full requested-period coverage is not confirmed;
- the answer explicitly says that full outgoing payments outside the checked period are not confirmed;
- lifecycle, incoming value-flow, supplier payout, and off-domain steps did not leak `query_documents`, `query_movements`, `runtime_`, `planner_`, `catalog_`, `primitive`, or `pilot_` in user-facing text.
Validation:
- `npm test -- assistantMcpDiscoveryTurnInputAdapter.test.ts assistantMcpDiscoveryPilotExecutor.test.ts assistantMcpDiscoveryAnswerAdapter.test.ts assistantMcpDiscoveryResponseCandidate.test.ts assistantMcpDiscoveryResponsePolicy.test.ts assistantMcpDiscoveryRuntimeEntryPoint.test.ts assistantMcpDiscoveryRuntimeBridge.test.ts assistantAddressLaneResponseRuntimeAdapter.test.ts assistantDeepTurnResponseRuntimeAdapter.test.ts` passed 49/49;
- `npm run build` passed;
- `python scripts/domain_truth_harness.py run-live --spec docs/orchestration/address_truth_harness_phase19_mcp_discovery_response_gate.json --output-dir artifacts/domain_runs/address_truth_harness_phase19_mcp_discovery_response_gate_live_rerun9 --timeout-seconds 180` passed 6/6, final status `accepted`.
Known remaining boundary:
- this still does not implement arbitrary cross-register self-navigation by Qwen3. The assistant has two guarded value-flow pilots now: incoming customer revenue and outgoing supplier payouts. Bidirectional netting, multi-axis aggregation, follow-up drilldown over the discovered rows, and richer coverage proofs remain future discovery-layer work.
Module progress:
- Big Block 5 MCP Semantic Data Agent: `98%`.
## Execution Rule
Do not implement this plan as: