ARCH: добавить supplier payout pilot MCP discovery
This commit is contained in:
+58
@@ -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:
|
||||
|
||||
@@ -111,7 +111,37 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_05_off_domain_living_chat_not_hijacked",
|
||||
"step_id": "step_05_counterparty_supplier_payout_uses_guarded_discovery",
|
||||
"title": "Unsupported-but-understood counterparty payout question uses guarded supplier discovery answer",
|
||||
"question": "сколько мы заплатили Группа СВК за 2020 год?",
|
||||
"required_answer_patterns_all": [
|
||||
"(?i)свк",
|
||||
"(?i)1с|найден|строк|подтвержд",
|
||||
"(?i)исходящ|списан|заплат|плат[её]ж",
|
||||
"(?i)сумм|руб",
|
||||
"(?i)2020|период",
|
||||
"(?i)не подтвержд|проверенн|найденн"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)точный маршрут.*не подключ",
|
||||
"(?i)не буду подставлять",
|
||||
"(?i)query_documents",
|
||||
"(?i)query_movements",
|
||||
"(?i)runtime_",
|
||||
"(?i)planner_",
|
||||
"(?i)catalog_",
|
||||
"(?i)primitive",
|
||||
"(?i)pilot_"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"mcp_discovery_supplier_payout",
|
||||
"counterparty_outgoing_payments",
|
||||
"unsupported_current_turn_meaning_boundary"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_06_off_domain_living_chat_not_hijacked",
|
||||
"title": "Off-domain living chat remains human and is not hijacked by discovery carryover",
|
||||
"question": "а чем капибара отличается от утки?",
|
||||
"required_answer_patterns_any": [
|
||||
|
||||
Reference in New Issue
Block a user