АРЧ АП11 - Архитектура после регресса: Архитектура: сохранить свежую дату при inventory root restore и очистить data-scope ответы от грязных лейблов
This commit is contained in:
+33
@@ -145,6 +145,39 @@ Still open after this pass:
|
||||
- mixed continuity is now strong enough for the current phase7 gate, but it still needs broader saved-session proof before domain expansion can be treated as low-risk;
|
||||
- the next architecture pass should move from one repaired mixed replay to a wider saved-session set and multi-domain acceptance pack;
|
||||
- remaining work should focus on keeping the unified continuity authority stable under new real user paths, not on wording-only polish or isolated route greens.
|
||||
- company authority is still not proactive enough at root inventory entry in multi-company sessions without an already grounded active organization;
|
||||
- the next stabilization slice should prefer system-level company authority handling over repeated local clarification templates when the session has enough business context.
|
||||
|
||||
Completed in the current follow-up pass:
|
||||
|
||||
- direct company activity-age wording like `а по Альтернативе Плюс сколько лет активности в базе 1С?` is now protected by a unicode-safe exact signal instead of depending on mojibake-sensitive legacy lifecycle phrases;
|
||||
- capability meta answers now explain supported business groups through human examples instead of leaking internal operation ids like `vat_period_snapshot`, `inventory_on_hand_as_of_date`, `explain_boundary`, or `suggest_safe_next_step`;
|
||||
- the next proof target after unit/build checks is the live phase5 replay, because it exercises both the restored activity-age path and the capability-meta interrupt in one shared session.
|
||||
|
||||
Latest live replay evidence after that proof run:
|
||||
|
||||
- the capability meta interrupt is now business-first and no longer leaks internal operation ids in the top block;
|
||||
- the same replay exposed a stricter continuity defect that the top-level review initially missed: organization identity can drift in session state as a damaged live label like `ООО \\Альтернати"а Плюс\\`;
|
||||
- when that happens, the runtime keeps both `organization` and a stale `counterparty` anchor, does not emit `counterparty_cleared_for_selected_organization_activity`, and falls into `counterparty_anchor_not_matched_in_materialized_rows`;
|
||||
- this is a system-level organization-identity robustness gap between data-scope probing, continuity memory, and exact-route truth gating, not a wording-only prompt defect;
|
||||
- the current stabilization slice therefore includes hardening organization identity matching itself and rerunning the same live pack until step-level human answers and review verdicts align.
|
||||
|
||||
Latest phase8 runtime authority evidence after the manual mixed replay hardening:
|
||||
|
||||
- live replay `address_truth_harness_phase8_manual_runtime_authority_mix_live_20260417_rerun1` proved that the activity-age route was restored, but also exposed a hidden false-green: `step_11_inventory_same_date_after_receivables` silently reused stale inventory-root date `2021-03-31` instead of the freshest receivables date `2020-03-31`;
|
||||
- the first fix in `assistantService` was not sufficient on its own, because `decomposeStage` still rebuilt `inventory_root` follow-up context by overwriting `previous_filters` from `root_filters` wholesale;
|
||||
- the architectural correction was to preserve `root` authority for organization / warehouse while preserving the freshest temporal scope (`as_of_date`, `period_from`, `period_to`) from the immediately previous grounded step;
|
||||
- this was locked by direct regressions in `assistantTransitionPolicy.test.ts` and `addressInventoryRootFrameRegression.test.ts`, plus a live rerun against the same manual replay spec;
|
||||
- live replay `address_truth_harness_phase8_manual_runtime_authority_mix_live_20260417_rerun4` is now accepted end-to-end with `14/14` steps green, including:
|
||||
- `step_07_capability_meta` with business-first human wording;
|
||||
- `step_11_inventory_same_date_after_receivables` on the correct date `31.03.2020`;
|
||||
- `step_14_company_activity_age` with restored factual lifecycle answer;
|
||||
- cleaned user-facing company labels in the data-scope meta reply (`ООО Альтернатива Плюс`, `ООО Лайсвуд`, `РАЙМ`) instead of damaged raw probe labels.
|
||||
|
||||
Still open after the accepted phase8 replay:
|
||||
|
||||
- proactive organization authority at the very beginning of a new multi-company bookkeeping session is still weaker than the target product feel; the current system now clarifies honestly and cleanly, but it does not yet always pre-offer company selection early in the conversational flow;
|
||||
- some user-facing inventory/counterparty labels inside business answers still deserve final presentation cleanup, but these are now post-stabilization quality refinements rather than continuity-authority blockers.
|
||||
|
||||
## Ready Signal
|
||||
|
||||
|
||||
+35
@@ -79,6 +79,24 @@
|
||||
{
|
||||
"step_id": "step_09_company_activity_age",
|
||||
"title": "Organization age should be answered through reachable activity evidence or honest boundedness",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"factual_with_explanation",
|
||||
"partial_coverage"
|
||||
],
|
||||
"expected_intents": [
|
||||
"counterparty_activity_lifecycle"
|
||||
],
|
||||
"expected_recipe": "address_counterparty_activity_lifecycle_v1",
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)по активности",
|
||||
"(?i)первая подтвержденная активность|не удается точно определить"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)не найден контрагент",
|
||||
"(?i)уточните точное наименование организации"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"question": "а по Альтернативе Плюс сколько лет активности в базе 1С?",
|
||||
"semantic_tags": [
|
||||
"organization_activity_age",
|
||||
@@ -88,6 +106,23 @@
|
||||
{
|
||||
"step_id": "step_10_capability_meta_interrupt",
|
||||
"title": "Capability meta interrupt does not destroy prior context",
|
||||
"allowed_reply_types": [
|
||||
"factual_with_explanation",
|
||||
"factual"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)1СЃ",
|
||||
"(?i)ндс|контрагент|остатк|склад"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)vat_period_snapshot",
|
||||
"(?i)inventory_on_hand_as_of_date",
|
||||
"(?i)explain_boundary",
|
||||
"(?i)suggest_safe_next_step",
|
||||
"(?i)read_only",
|
||||
"(?i)mcp"
|
||||
],
|
||||
"criticality": "warning",
|
||||
"question": "что ты умеешь?",
|
||||
"semantic_tags": [
|
||||
"meta_capability"
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
{
|
||||
"schema_version": "domain_truth_harness_spec_v1",
|
||||
"scenario_id": "address_truth_harness_phase8_manual_runtime_authority_mix",
|
||||
"domain": "address_phase8_manual_runtime_authority_mix",
|
||||
"title": "Phase 8 manual runtime authority replay for company continuity, activity age, and human meta answers",
|
||||
"description": "Mixed AGENT replay based on the latest manual session. The pack validates company authority, counterparty -> inventory transition behavior, selected-object continuity, organization activity age, capability meta cleanliness, same-date cross-domain pivot, and account 60 tails in one live session.",
|
||||
"bindings": {},
|
||||
"steps": [
|
||||
{
|
||||
"step_id": "step_01_smalltalk",
|
||||
"title": "Casual opening stays human",
|
||||
"question": "привет, как дела?",
|
||||
"required_answer_patterns_any": [
|
||||
"(?i)привет|дела|помочь|норм"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)tool_gate_reason",
|
||||
"(?i)address_mode",
|
||||
"(?i)living_reason",
|
||||
"(?i)snapshot_items"
|
||||
],
|
||||
"criticality": "info",
|
||||
"semantic_tags": [
|
||||
"meta_smalltalk"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_02_data_scope_meta",
|
||||
"title": "Data-scope meta stays deterministic and non-technical",
|
||||
"question": "по какой компании мы сейчас работаем?",
|
||||
"required_answer_patterns_any": [
|
||||
"(?i)компан|организац|контур",
|
||||
"(?i)работ"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)tool_gate_reason",
|
||||
"(?i)hard_meta_mode",
|
||||
"(?i)living_reason",
|
||||
"(?i)mcp",
|
||||
"(?i)read_only"
|
||||
],
|
||||
"criticality": "warning",
|
||||
"semantic_tags": [
|
||||
"meta_scope"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_03_counterparty_documents",
|
||||
"title": "Counterparty documents use the legal name contour",
|
||||
"question": "покажи все документы по чепурнову",
|
||||
"allowed_reply_types": [
|
||||
"factual"
|
||||
],
|
||||
"expected_intents": [
|
||||
"list_documents_by_counterparty"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)чепурнов",
|
||||
"(?i)документ|отгруз|оплат|счет|акт"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"counterparty_documents"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_04_counterparty_shipments",
|
||||
"title": "Counterparty shipment fallback stays human and business-useful",
|
||||
"question": "что нам отгружал чепурнов, какой товар или услугу?",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"partial_coverage"
|
||||
],
|
||||
"expected_intents": [
|
||||
"list_documents_by_counterparty"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)чепурнов",
|
||||
"(?i)товар|услуг|отгруз|документ|оплат"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)^сейчас не дам прямой адресный ответ",
|
||||
"(?i)^в текущем адресном контуре этот запрос лучше не закрывать"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"counterparty_shipment_fallback"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_05_inventory_root_after_counterparty",
|
||||
"title": "Inventory root after counterparty branch remains human and non-technical",
|
||||
"question": "какие остатки на складе на март 2021",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"clarification_required",
|
||||
"partial_coverage"
|
||||
],
|
||||
"required_answer_patterns_any": [
|
||||
"(?i)март 2021|31\\.03\\.2021|организац|компан"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)tool_gate_reason",
|
||||
"(?i)address_mode",
|
||||
"(?i)mcp",
|
||||
"(?i)read_only",
|
||||
"(?i)snapshot_items"
|
||||
],
|
||||
"criticality": "warning",
|
||||
"semantic_tags": [
|
||||
"inventory_root",
|
||||
"company_authority_probe"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_06_selected_item_supplier",
|
||||
"title": "Selected-object supplier follow-up stays action-first",
|
||||
"question": "По выбранному объекту \"Столешница 600*3050*26 альмандин\": кто нам это поставил?",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"clarification_required"
|
||||
],
|
||||
"expected_intents": [
|
||||
"inventory_purchase_provenance_for_item"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)столешница 600\\*3050\\*26 альмандин",
|
||||
"(?i)поставщик|поставил|куплен|союз|торговый дом|уточните организац"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)^сейчас не дам прямой адресный ответ"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"selected_object",
|
||||
"selected_object_supplier"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_07_capability_meta",
|
||||
"title": "Capability meta answer is business-first and free from technical garbage",
|
||||
"question": "что ты умеешь?",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"factual_with_explanation"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)могу|умею",
|
||||
"(?i)документ|остатк|контрагент|ндс|склад|долг"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)vat_period_snapshot",
|
||||
"(?i)inventory_on_hand_as_of_date",
|
||||
"(?i)explain_boundary",
|
||||
"(?i)suggest_safe_next_step",
|
||||
"(?i)read_only",
|
||||
"(?i)mcp",
|
||||
"(?i)snapshot_items",
|
||||
"(?i)assessed state",
|
||||
"(?i)open item"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"meta_capability"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_08_selected_item_documents",
|
||||
"title": "Selected-object documents stay in the same contour after meta interrupt",
|
||||
"question": "По выбранному объекту \"Столешница 600*3050*26 альмандин\": покажи документы по этой позиции",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"clarification_required"
|
||||
],
|
||||
"expected_intents": [
|
||||
"inventory_purchase_documents_for_item"
|
||||
],
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)столешница 600\\*3050\\*26 альмандин|по этой позиции",
|
||||
"(?i)документ|уточните организац"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"selected_object",
|
||||
"selected_object_documents"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_09_memory_recap",
|
||||
"title": "Memory recap does not invent grounded facts",
|
||||
"question": "а ты помнишь, что мы по этой позиции уже выяснили?",
|
||||
"required_answer_patterns_any": [
|
||||
"(?i)помню|по позиции|столешница"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)^сейчас не дам прямой адресный ответ"
|
||||
],
|
||||
"criticality": "warning",
|
||||
"semantic_tags": [
|
||||
"meta_memory"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_10_receivables_march_2020",
|
||||
"title": "Receivables root establishes March 2020 carryover",
|
||||
"question": "кто нам должен на март 2020",
|
||||
"allowed_reply_types": [
|
||||
"factual"
|
||||
],
|
||||
"expected_intents": [
|
||||
"receivables_confirmed_as_of_date"
|
||||
],
|
||||
"required_filters": {
|
||||
"as_of_date": "2020-03-31",
|
||||
"period_from": "2020-03-01",
|
||||
"period_to": "2020-03-31"
|
||||
},
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)дебитор",
|
||||
"31\\.03\\.2020"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"settlements_receivables"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_11_inventory_same_date_after_receivables",
|
||||
"title": "Inventory same-date pivot reuses March 2020 without re-clarification",
|
||||
"question": "остатки по складу на эту же дату",
|
||||
"allowed_reply_types": [
|
||||
"factual"
|
||||
],
|
||||
"expected_intents": [
|
||||
"inventory_on_hand_as_of_date"
|
||||
],
|
||||
"required_filters": {
|
||||
"as_of_date": "{{step_10_receivables_march_2020.filters.as_of_date}}",
|
||||
"period_from": "{{step_10_receivables_march_2020.filters.period_from}}",
|
||||
"period_to": "{{step_10_receivables_march_2020.filters.period_to}}"
|
||||
},
|
||||
"required_direct_answer_patterns_all": [
|
||||
"(?i)на складе",
|
||||
"31\\.03\\.2020"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)уточните организац",
|
||||
"(?i)по какой компании"
|
||||
],
|
||||
"required_filter_within_previous_step_period": {
|
||||
"as_of_date": "step_10_receivables_march_2020"
|
||||
},
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"inventory_root",
|
||||
"same_date_pivot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_12_historical_inventory_capability",
|
||||
"title": "Historical inventory capability follow-up stays human",
|
||||
"question": "а исторические остатки ты можешь дать?",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"factual_with_explanation"
|
||||
],
|
||||
"required_answer_patterns_any": [
|
||||
"(?i)историческ|история",
|
||||
"(?i)могу|умею"
|
||||
],
|
||||
"forbidden_answer_patterns": [
|
||||
"(?i)tool_gate_reason",
|
||||
"(?i)hard_meta_mode",
|
||||
"(?i)mcp",
|
||||
"(?i)read_only"
|
||||
],
|
||||
"criticality": "warning",
|
||||
"semantic_tags": [
|
||||
"meta_historical_capability",
|
||||
"inventory_root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_13_open_items_account_60",
|
||||
"title": "Account 60 tails stay exact after the mixed session",
|
||||
"question": "хвосты покажи по счету 60 на август 2022",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"factual_with_explanation"
|
||||
],
|
||||
"expected_intents": [
|
||||
"open_items_by_counterparty_or_contract"
|
||||
],
|
||||
"required_filters": {
|
||||
"account": "60",
|
||||
"period_from": "2022-08-01",
|
||||
"period_to": "2022-08-31",
|
||||
"as_of_date": "2022-08-31"
|
||||
},
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)счету 60|счёту 60",
|
||||
"(?i)хвост"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"settlements_account_60"
|
||||
]
|
||||
},
|
||||
{
|
||||
"step_id": "step_14_company_activity_age",
|
||||
"title": "Organization activity age is answered through activity evidence or honest boundedness",
|
||||
"question": "а по Альтернативе Плюс сколько лет активности в базе 1С?",
|
||||
"allowed_reply_types": [
|
||||
"factual",
|
||||
"factual_with_explanation",
|
||||
"partial_coverage"
|
||||
],
|
||||
"expected_intents": [
|
||||
"counterparty_activity_lifecycle"
|
||||
],
|
||||
"expected_recipe": "address_counterparty_activity_lifecycle_v1",
|
||||
"required_direct_answer_patterns_any": [
|
||||
"(?i)активност",
|
||||
"(?i)первая подтвержденная|не удается точно определить|лет"
|
||||
],
|
||||
"forbidden_direct_answer_patterns": [
|
||||
"(?i)не найден контрагент",
|
||||
"(?i)уточните точное наименование организации"
|
||||
],
|
||||
"criticality": "critical",
|
||||
"semantic_tags": [
|
||||
"organization_activity_age",
|
||||
"company_selected"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user