1 line
54 KiB
JSON
1 line
54 KiB
JSON
{"numTotalTestSuites":88,"numPassedTestSuites":88,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":147,"numPassedTests":147,"numFailedTests":0,"numPendingTests":0,"numTodoTests":0,"snapshot":{"added":0,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0,"didUpdate":false},"startTime":1774652486164,"success":true,"testResults":[{"assertionResults":[{"ancestorTitles":["assistant answer encoding sanitizer"],"fullName":"assistant answer encoding sanitizer removes mojibake fragments from user-facing explainable answers","status":"passed","title":"removes mojibake fragments from user-facing explainable answers","duration":12.26509999999999,"failureMessages":[],"meta":{}}],"startTime":1774652486934,"endTime":1774652486946.2651,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantAnswerEncodingSanitizer.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant answer leakage guard"],"fullName":"assistant answer leakage guard removes raw technical refs from assistant reply but keeps structured refs in answer structure","status":"passed","title":"removes raw technical refs from assistant reply but keeps structured refs in answer structure","duration":13.0582,"failureMessages":[],"meta":{}}],"startTime":1774652486908,"endTime":1774652486921.058,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantAnswerLeakageGuard.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant answer policy v1.1"],"fullName":"assistant answer policy v1.1 keeps focused grounded answer direct and useful","status":"passed","title":"keeps focused grounded answer direct and useful","duration":562.7248,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant answer policy v1.1"],"fullName":"assistant answer policy v1.1 renders broad partial answer with explicit limitations and concrete next steps","status":"passed","title":"renders broad partial answer with explicit limitations and concrete next steps","duration":128.11429999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant answer policy v1.1"],"fullName":"assistant answer policy v1.1 uses domain-specific clarification prompts when support is insufficient","status":"passed","title":"uses domain-specific clarification prompts when support is insufficient","duration":79.08349999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant answer policy v1.1"],"fullName":"assistant answer policy v1.1 does not fabricate mechanism when mechanism_note is unresolved","status":"passed","title":"does not fabricate mechanism when mechanism_note is unresolved","duration":2.5605000000000473,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant answer policy v1.1"],"fullName":"assistant answer policy v1.1 preserves legacy reply path when policy flag is OFF","status":"passed","title":"preserves legacy reply path when policy flag is OFF","duration":251.18210000000022,"failureMessages":[],"meta":{}}],"startTime":1774652486587,"endTime":1774652487611.1821,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantAnswerPolicyV11.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant broad guard"],"fullName":"assistant broad guard keeps focused queries from degrading under broad guard","status":"passed","title":"keeps focused queries from degrading under broad guard","duration":591.3073999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant broad guard"],"fullName":"assistant broad guard degrades broad ranking output to partial instead of deceptively strong factual","status":"passed","title":"degrades broad ranking output to partial instead of deceptively strong factual","duration":111.84260000000006,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant broad guard"],"fullName":"assistant broad guard returns clarification when broad query has insufficient support","status":"passed","title":"returns clarification when broad query has insufficient support","duration":89.89010000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant broad guard"],"fullName":"assistant broad guard supports legacy behavior when broad guard flags are OFF","status":"passed","title":"supports legacy behavior when broad guard flags are OFF","duration":98.7373,"failureMessages":[],"meta":{}}],"startTime":1774652486537,"endTime":1774652487428.7373,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantBroadGuard.test.ts"},{"assertionResults":[{"ancestorTitles":["stage1 contract scaffolding"],"fullName":"stage1 contract scaffolding provides rubric v0.1 for accountant-facing metrics","status":"passed","title":"provides rubric v0.1 for accountant-facing metrics","duration":1.3726000000000056,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage1 contract scaffolding"],"fullName":"stage1 contract scaffolding updates investigation_state with bounded fields","status":"passed","title":"updates investigation_state with bounded fields","duration":1.5340999999999667,"failureMessages":[],"meta":{}}],"startTime":1774652487277,"endTime":1774652487280.5342,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantContracts.test.ts"},{"assertionResults":[{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage captures neighbor branch lifting when linked branch is outside primary 97 scope","status":"passed","title":"captures neighbor branch lifting when linked branch is outside primary 97 scope","duration":84.14479999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage surfaces cross-branch inconsistency as graph-critical conflict signal","status":"passed","title":"surfaces cross-branch inconsistency as graph-critical conflict signal","duration":24.666399999999953,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage keeps terminal gap explicit instead of collapsing it into generic anomaly","status":"passed","title":"keeps terminal gap explicit instead of collapsing it into generic anomaly","duration":8.911800000000028,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage shows ranking shift between graph OFF and graph ON for graph-critical contour","status":"passed","title":"shows ranking shift between graph OFF and graph ON for graph-critical contour","duration":32.792700000000025,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage confirms multi-hop traversal is used for chain reasoning","status":"passed","title":"confirms multi-hop traversal is used for chain reasoning","duration":5.273700000000019,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 graph critical supplemental coverage"],"fullName":"stage4 graph critical supplemental coverage keeps domain separation across deferred, fixed asset, vat, period close, bank and customer settlement","status":"passed","title":"keeps domain separation across deferred, fixed asset, vat, period close, bank and customer settlement","duration":47.81030000000004,"failureMessages":[],"meta":{}}],"startTime":1774652486473,"endTime":1774652486676.8103,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantDataLayerGraphCriticalCoverage.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant data layer graph traversal integration"],"fullName":"assistant data layer graph traversal integration applies typed graph traversal for 97 lifecycle query when graph runtime is enabled","status":"passed","title":"applies typed graph traversal for 97 lifecycle query when graph runtime is enabled","duration":34.802899999999994,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant data layer graph traversal integration"],"fullName":"assistant data layer graph traversal integration maps VAT and period close prompts to graph target domains without changing prompt set","status":"passed","title":"maps VAT and period close prompts to graph target domains without changing prompt set","duration":8.480500000000006,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant data layer graph traversal integration"],"fullName":"assistant data layer graph traversal integration keeps graph traversal disabled when feature flag is off","status":"passed","title":"keeps graph traversal disabled when feature flag is off","duration":12.209900000000005,"failureMessages":[],"meta":{}}],"startTime":1774652486786,"endTime":1774652486841.21,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantDataLayerGraphTraversal.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API processes message and returns assistant response with debug payload","status":"passed","title":"processes message and returns assistant response with debug payload","duration":195.6789,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API keeps session-scoped history and returns it via session endpoint","status":"passed","title":"keeps session-scoped history and returns it via session endpoint","duration":115.92849999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API executes factual retrieval for routed fragments","status":"passed","title":"executes factual retrieval for routed fragments","duration":167.39819999999986,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API keeps in-domain translit queries in scope and routed","status":"passed","title":"keeps in-domain translit queries in scope and routed","duration":54.19879999999989,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API avoids false route mismatch when supported evidence exists for bounded answer","status":"passed","title":"avoids false route mismatch when supported evidence exists for bounded answer","duration":53.21679999999992,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API returns bounded answer when critical domain token has weak grounding","status":"passed","title":"returns bounded answer when critical domain token has weak grounding","duration":54.458900000000085,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API applies semantic narrowing profile for hybrid retrieval without GUID","status":"passed","title":"applies semantic narrowing profile for hybrid retrieval without GUID","duration":90.29279999999994,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant mode API"],"fullName":"assistant mode API writes one persistent JSON log file per session","status":"passed","title":"writes one persistent JSON log file per session","duration":103.89419999999996,"failureMessages":[],"meta":{}}],"startTime":1774652486948,"endTime":1774652487783.8943,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantEndpoint.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness runs assistant_stage1 harness and returns raw metrics + rubric bands","status":"passed","title":"runs assistant_stage1 harness and returns raw metrics + rubric bands","duration":885.3427000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness loads canonical suite metadata and keeps it stable","status":"passed","title":"loads canonical suite metadata and keeps it stable","duration":260.5757000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness handles follow-up cases as dedicated subset","status":"passed","title":"handles follow-up cases as dedicated subset","duration":126.08390000000009,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness builds comparison artifact from baseline and current runs","status":"passed","title":"builds comparison artifact from baseline and current runs","duration":449.7983999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness keeps legacy eval path unchanged by default","status":"passed","title":"keeps legacy eval path unchanged by default","duration":36.359300000000076,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 1 eval harness"],"fullName":"assistant Stage 1 eval harness respects accountant eval feature flag OFF/ON","status":"passed","title":"respects accountant eval feature flag OFF/ON","duration":246.14280000000008,"failureMessages":[],"meta":{}}],"startTime":1774652486532,"endTime":1774652488536.1428,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantEvalHarness.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding applies investigation_state binding in follow-up flow when flags are ON","status":"passed","title":"applies investigation_state binding in follow-up flow when flags are ON","duration":659.0858000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding does not apply follow-up binding when binding flag is OFF","status":"passed","title":"does not apply follow-up binding when binding flag is OFF","duration":201.41239999999993,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding keeps legacy-like behavior when investigation state flag is OFF","status":"passed","title":"keeps legacy-like behavior when investigation state flag is OFF","duration":65.57259999999997,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding applies problem continuity hints only when continuity flag is ON and follow-up has no strong new anchors","status":"passed","title":"applies problem continuity hints only when continuity flag is ON and follow-up has no strong new anchors","duration":192.89660000000003,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding does not apply follow-up continuity when user gives strong new anchors","status":"passed","title":"does not apply follow-up continuity when user gives strong new anchors","duration":134.2473,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant follow-up state binding"],"fullName":"assistant follow-up state binding keeps UTF-8 follow-up period refinement in-scope with soft continuity hints","status":"passed","title":"keeps UTF-8 follow-up period refinement in-scope with soft continuity hints","duration":176.2645,"failureMessages":[],"meta":{}}],"startTime":1774652486532,"endTime":1774652487961.2644,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantFollowupStateBinding.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant graph-backed answer mode v1"],"fullName":"assistant graph-backed answer mode v1 renders user-facing causal graph explanation without internal graph labels","status":"passed","title":"renders user-facing causal graph explanation without internal graph labels","duration":15.003800000000012,"failureMessages":[],"meta":{}}],"startTime":1774652486883,"endTime":1774652486898.004,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantGraphBackedAnswerV1.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant lifecycle-aware answer mode v1"],"fullName":"assistant lifecycle-aware answer mode v1 promotes stage3 lifecycle mode when lifecycle answer flag is enabled","status":"passed","title":"promotes stage3 lifecycle mode when lifecycle answer flag is enabled","duration":16.175999999999988,"failureMessages":[],"meta":{}}],"startTime":1774652486867,"endTime":1774652486883.176,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantLifecycleAwareAnswerV1.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant MCP runtime bridge"],"fullName":"assistant MCP runtime bridge does not call MCP when runtime flag is disabled","status":"passed","title":"does not call MCP when runtime flag is disabled","duration":79.74589999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant MCP runtime bridge"],"fullName":"assistant MCP runtime bridge uses MCP live probe for hybrid route when runtime flag is enabled","status":"passed","title":"uses MCP live probe for hybrid route when runtime flag is enabled","duration":32.16730000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant MCP runtime bridge"],"fullName":"assistant MCP runtime bridge keeps snapshot fallback when MCP responds with error","status":"passed","title":"keeps snapshot fallback when MCP responds with error","duration":9.313499999999976,"failureMessages":[],"meta":{}}],"startTime":1774652486473,"endTime":1774652486594.3135,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantMcpRuntimeBridge.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant P0 eval harness (Wave 7)"],"fullName":"assistant P0 eval harness (Wave 7) runs assistant_p0 eval and returns formal product metrics + verdict","status":"passed","title":"runs assistant_p0 eval and returns formal product metrics + verdict","duration":1841.5140000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant P0 eval harness (Wave 7)"],"fullName":"assistant P0 eval harness (Wave 7) loads formal P0 corpus split for 3 domains","status":"passed","title":"loads formal P0 corpus split for 3 domains","duration":143.95929999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant P0 eval harness (Wave 7)"],"fullName":"assistant P0 eval harness (Wave 7) supports Wave 9 expanded corpus classes and follow-up context metrics","status":"passed","title":"supports Wave 9 expanded corpus classes and follow-up context metrics","duration":162.94399999999996,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant P0 eval harness (Wave 7)"],"fullName":"assistant P0 eval harness (Wave 7) builds before/after comparison and returns formal verdict delta","status":"passed","title":"builds before/after comparison and returns formal verdict delta","duration":649.6428000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant P0 eval harness (Wave 7)"],"fullName":"assistant P0 eval harness (Wave 7) respects P0 eval feature gate via Stage2 eval flag OFF/ON","status":"passed","title":"respects P0 eval feature gate via Stage2 eval flag OFF/ON","duration":107.76459999999997,"failureMessages":[],"meta":{}}],"startTime":1774652486536,"endTime":1774652489441.7646,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantP0EvalHarness.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 uses problem-centric answer mode on problem-heavy case when flag is ON","status":"passed","title":"uses problem-centric answer mode on problem-heavy case when flag is ON","duration":16.973399999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 falls back to Stage 1 path for the same case when problem-centric flag is OFF","status":"passed","title":"falls back to Stage 1 path for the same case when problem-centric flag is OFF","duration":3.136299999999977,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 keeps focused grounded case on Stage 1 path even when problem-centric flag is ON","status":"passed","title":"keeps focused grounded case on Stage 1 path even when problem-centric flag is ON","duration":1.6912000000000091,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 enables problem-centric mode on mixed focused case when weak mechanism signals are present","status":"passed","title":"enables problem-centric mode on mixed focused case when weak mechanism signals are present","duration":2.4491000000000156,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 does not expose raw technical refs in primary problem-centric text","status":"passed","title":"does not expose raw technical refs in primary problem-centric text","duration":2.0848000000000013,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-centric answer mode v1"],"fullName":"assistant problem-centric answer mode v1 produces limited answer for weak problem units without false overclaim","status":"passed","title":"produces limited answer for weak problem units without false overclaim","duration":2.5681000000000154,"failureMessages":[],"meta":{}}],"startTime":1774652486869,"endTime":1774652486897.568,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantProblemCentricAnswerV1.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant problem-unit continuity state"],"fullName":"assistant problem-unit continuity state stores bounded problem_unit_state in investigation snapshot and session state","status":"passed","title":"stores bounded problem_unit_state in investigation snapshot and session state","duration":781.3456000000001,"failureMessages":[],"meta":{}}],"startTime":1774652486547,"endTime":1774652487328.3457,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantProblemUnitContinuityState.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant problem-unit runtime rollout"],"fullName":"assistant problem-unit runtime rollout emits problem-unit layer on problem-heavy scenarios when flag is ON","status":"passed","title":"emits problem-unit layer on problem-heavy scenarios when flag is ON","duration":815.7427,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant problem-unit runtime rollout"],"fullName":"assistant problem-unit runtime rollout does not emit problem-unit layer when flag is OFF","status":"passed","title":"does not emit problem-unit layer when flag is OFF","duration":128.4306999999999,"failureMessages":[],"meta":{}}],"startTime":1774652486537,"endTime":1774652487481.4307,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantProblemUnitRuntimeRollout.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant stage2 duplicate collapse probe suite"],"fullName":"assistant stage2 duplicate collapse probe suite loads supplemental probe suite and confirms duplicate collapse signal","status":"passed","title":"loads supplemental probe suite and confirms duplicate collapse signal","duration":4.73720000000003,"failureMessages":[],"meta":{}}],"startTime":1774652487189,"endTime":1774652487193.7373,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage2DuplicateCollapseProbe.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness runs assistant_stage2 harness and returns Stage 2 raw metrics + rubric bands","status":"passed","title":"runs assistant_stage2 harness and returns Stage 2 raw metrics + rubric bands","duration":915.4535999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness loads Stage 2 canonical suite metadata and keeps it stable","status":"passed","title":"loads Stage 2 canonical suite metadata and keeps it stable","duration":312.0499000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness handles follow-up subset and keeps subset denominator explicit","status":"passed","title":"handles follow-up subset and keeps subset denominator explicit","duration":134.1667,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness builds Stage 2 comparison artifact from baseline and current runs","status":"passed","title":"builds Stage 2 comparison artifact from baseline and current runs","duration":537.1872000000001,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness keeps legacy eval path unchanged by default","status":"passed","title":"keeps legacy eval path unchanged by default","duration":37.59450000000015,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant Stage 2 eval harness"],"fullName":"assistant Stage 2 eval harness respects Stage 2 eval feature flag OFF/ON","status":"passed","title":"respects Stage 2 eval feature flag OFF/ON","duration":304.7075,"failureMessages":[],"meta":{}}],"startTime":1774652486537,"endTime":1774652488777.7075,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage2EvalHarness.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant stage3 lifecycle acceptance probe suite"],"fullName":"assistant stage3 lifecycle acceptance probe suite runs stage3 lifecycle probe prompts with separate acceptance checks","status":"passed","title":"runs stage3 lifecycle probe prompts with separate acceptance checks","duration":998.6623999999999,"failureMessages":[],"meta":{}}],"startTime":1774652486537,"endTime":1774652487535.6624,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage3LifecycleAcceptanceProbe.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant stage3 lifecycle prompt suite separation"],"fullName":"assistant stage3 lifecycle prompt suite separation keeps stage2 canonical prompts as regression and stage3 prompts as separate lifecycle probe","status":"passed","title":"keeps stage2 canonical prompts as regression and stage3 prompts as separate lifecycle probe","duration":1.8225999999999942,"failureMessages":[],"meta":{}}],"startTime":1774652487172,"endTime":1774652487173.8225,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage3LifecyclePromptSuite.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant stage4 lifecycle 97 user-facing"],"fullName":"assistant stage4 lifecycle 97 user-facing keeps lifecycle answer human and scoped without technical leakage","status":"passed","title":"keeps lifecycle answer human and scoped without technical leakage","duration":16.113100000000003,"failureMessages":[],"meta":{}}],"startTime":1774652486884,"endTime":1774652486900.113,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage4Lifecycle97UserFacing.test.ts"},{"assertionResults":[{"ancestorTitles":["stage4 wave4 user-facing answer patch"],"fullName":"stage4 wave4 user-facing answer patch renders problem-first causal answer and hides internal debug fragments","status":"passed","title":"renders problem-first causal answer and hides internal debug fragments","duration":9.543099999999981,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 wave4 user-facing answer patch"],"fullName":"stage4 wave4 user-facing answer patch marks weak single-signal contour as potentially noisy","status":"passed","title":"marks weak single-signal contour as potentially noisy","duration":0.6803999999999917,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4 wave4 user-facing answer patch"],"fullName":"stage4 wave4 user-facing answer patch changes top-level answer when graph causal signals are present","status":"passed","title":"changes top-level answer when graph causal signals are present","duration":1.3524000000000171,"failureMessages":[],"meta":{}}],"startTime":1774652486883,"endTime":1774652486895.3523,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantStage4Wave4UserFacing.test.ts"},{"assertionResults":[{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression multi_fragment_settlement_60_62_should_not_fall_into_deferred_expense","status":"passed","title":"multi_fragment_settlement_60_62_should_not_fall_into_deferred_expense","duration":17.87340000000006,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression settlement_question_must_not_promote_vat_or_period_close_as_primary_domain_without_handoff","status":"passed","title":"settlement_question_must_not_promote_vat_or_period_close_as_primary_domain_without_handoff","duration":3.879599999999982,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression retrieval_empty_requirement_must_not_be_marked_covered","status":"passed","title":"retrieval_empty_requirement_must_not_be_marked_covered","duration":1.2817000000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression retrieval_ok_without_evidence_or_problem_units_must_not_be_marked_covered","status":"passed","title":"retrieval_ok_without_evidence_or_problem_units_must_not_be_marked_covered","duration":0.3184999999999718,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression partial_coverage_answer_must_separate_confirmed_and_unconfirmed_requirements","status":"passed","title":"partial_coverage_answer_must_separate_confirmed_and_unconfirmed_requirements","duration":3.156500000000051,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression settlement_domain_answer_must_suggest_settlement_checks_not_period_only","status":"passed","title":"settlement_domain_answer_must_suggest_settlement_checks_not_period_only","duration":2.942199999999957,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression user_facing_answer_must_not_leak_internal_debug_for_partial_coverage_case","status":"passed","title":"user_facing_answer_must_not_leak_internal_debug_for_partial_coverage_case","duration":3.03550000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression settlement_broad_query_with_explicit_month_must_not_claim_period_missing","status":"passed","title":"settlement_broad_query_with_explicit_month_must_not_claim_period_missing","duration":2.277500000000032,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression settlement_answer_must_not_be_grounded_by_vat_or_deferred_expense_primary_evidence","status":"passed","title":"settlement_answer_must_not_be_grounded_by_vat_or_deferred_expense_primary_evidence","duration":3.1800000000000637,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression user_facing_answer_must_not_include_debug_payload_json_marker","status":"passed","title":"user_facing_answer_must_not_include_debug_payload_json_marker","duration":2.911399999999958,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave10 settlement corrective regression"],"fullName":"wave10 settlement corrective regression followup_on_same_settlement_case_must_bind_to_active_focus","status":"passed","title":"followup_on_same_settlement_case_must_bind_to_active_focus","duration":431.1107999999999,"failureMessages":[],"meta":{}}],"startTime":1774652486705,"endTime":1774652487177.1108,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantWave10SettlementCorrectiveRegression.test.ts"},{"assertionResults":[{"ancestorTitles":["wave11 data-layer recovery"],"fullName":"wave11 data-layer recovery settlement_object_trace_with_number_date_amount_must_not_require_guid_by_default","status":"passed","title":"settlement_object_trace_with_number_date_amount_must_not_require_guid_by_default","duration":75.83230000000003,"failureMessages":[],"meta":{}},{"ancestorTitles":["wave11 data-layer recovery"],"fullName":"wave11 data-layer recovery broad_settlement_query_must_not_drop_all_retrieval_due_to_strict_purity_if_in_scope","status":"passed","title":"broad_settlement_query_must_not_drop_all_retrieval_due_to_strict_purity_if_in_scope","duration":31.003600000000006,"failureMessages":[],"meta":{}}],"startTime":1774652486480,"endTime":1774652486587.0037,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantWave11DataLayerRecovery.test.ts"},{"assertionResults":[{"ancestorTitles":["wave11 subject token pollution cleanup"],"fullName":"wave11 subject token pollution cleanup settlement_query_subject_tokens_must_not_include_spurious_accounts_from_dates","status":"passed","title":"settlement_query_subject_tokens_must_not_include_spurious_accounts_from_dates","duration":2.8507000000000176,"failureMessages":[],"meta":{}}],"startTime":1774652487476,"endTime":1774652487478.8506,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantWave11SubjectTokenPollution.test.ts"},{"assertionResults":[{"ancestorTitles":["stage4 wave5 P0 domain purity + route discipline regression"],"fullName":"stage4 wave5 P0 domain purity + route discipline regression keeps top-3 domain-pure and reroutes symptom/lifecycle intents away from canonical path","status":"passed","title":"keeps top-3 domain-pure and reroutes symptom/lifecycle intents away from canonical path","duration":59.863200000000006,"failureMessages":[],"meta":{}}],"startTime":1774652486582,"endTime":1774652486641.8633,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantWave5P0DomainPurityRegression.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract enforces leakage guard in direct user-facing answer","status":"passed","title":"enforces leakage guard in direct user-facing answer","duration":16.357200000000006,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract keeps narrative mechanism-first and avoids entity-list direct answer","status":"passed","title":"keeps narrative mechanism-first and avoids entity-list direct answer","duration":2.9617999999999824,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract does not expose route/profile explanation in user-facing text","status":"passed","title":"does not expose route/profile explanation in user-facing text","duration":2.0209000000000117,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract collapses duplicate problem lines for the same mechanism","status":"passed","title":"collapses duplicate problem lines for the same mechanism","duration":2.715599999999995,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract shows explicit limitation when period is missing","status":"passed","title":"shows explicit limitation when period is missing","duration":1.7039000000000044,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant wave6 problem-first answer contract"],"fullName":"assistant wave6 problem-first answer contract returns short accountant-readable answers for P0 domains without technical dump","status":"passed","title":"returns short accountant-readable answers for P0 domains without technical dump","duration":4.9587999999999965,"failureMessages":[],"meta":{}}],"startTime":1774652486831,"endTime":1774652486861.9587,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/assistantWave6ProblemFirstAnswerContract.test.ts"},{"assertionResults":[{"ancestorTitles":["POST /api/eval/run"],"fullName":"POST /api/eval/run runs v2 eval using inline rawQuestions batch","status":"passed","title":"runs v2 eval using inline rawQuestions batch","duration":87.84749999999997,"failureMessages":[],"meta":{}}],"startTime":1774652486945,"endTime":1774652487032.8474,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/evalEndpoint.test.ts"},{"assertionResults":[{"ancestorTitles":["investigation_state flow scaffolding"],"fullName":"investigation_state flow scaffolding keeps bounded investigation_state across follow-up turns","status":"passed","title":"keeps bounded investigation_state across follow-up turns","duration":390.42430000000013,"failureMessages":[],"meta":{}}],"startTime":1774652486945,"endTime":1774652487335.4243,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/investigationStateFlow.test.ts"},{"assertionResults":[{"ancestorTitles":["stage3 lifecycle registry and resolver wave2"],"fullName":"stage3 lifecycle registry and resolver wave2 exposes all lifecycle domains in the registry","status":"passed","title":"exposes all lifecycle domains in the registry","duration":1.5211999999999932,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage3 lifecycle registry and resolver wave2"],"fullName":"stage3 lifecycle registry and resolver wave2 infers lifecycle domain for all covered stage3 domains","status":"passed","title":"infers lifecycle domain for all covered stage3 domains","duration":2.0655999999999892,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage3 lifecycle registry and resolver wave2"],"fullName":"stage3 lifecycle registry and resolver wave2 normalizes unknown explicit states against registry and records limitations","status":"passed","title":"normalizes unknown explicit states against registry and records limitations","duration":0.7147999999999968,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage3 lifecycle registry and resolver wave2"],"fullName":"stage3 lifecycle registry and resolver wave2 infers missing transition from registry transition path","status":"passed","title":"infers missing transition from registry transition path","duration":0.2985999999999933,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage3 lifecycle registry and resolver wave2"],"fullName":"stage3 lifecycle registry and resolver wave2 builds previous state chain from registry model","status":"passed","title":"builds previous state chain from registry model","duration":0.24279999999998836,"failureMessages":[],"meta":{}}],"startTime":1774652487232,"endTime":1774652487236.2986,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/lifecycleRegistryResolverWave2.test.ts"},{"assertionResults":[{"ancestorTitles":["lifecycle runtime stage3"],"fullName":"lifecycle runtime stage3 resolves stale missing transition for bank settlement chains","status":"passed","title":"resolves stale missing transition for bank settlement chains","duration":2.1748000000000047,"failureMessages":[],"meta":{}},{"ancestorTitles":["lifecycle runtime stage3"],"fullName":"lifecycle runtime stage3 classifies cross-branch conflicts for VAT flow","status":"passed","title":"classifies cross-branch conflicts for VAT flow","duration":1.7521000000000129,"failureMessages":[],"meta":{}},{"ancestorTitles":["lifecycle runtime stage3"],"fullName":"lifecycle runtime stage3 sorts lifecycle-ranked units by lifecycle severity and ranking score","status":"passed","title":"sorts lifecycle-ranked units by lifecycle severity and ranking score","duration":0.6454999999999984,"failureMessages":[],"meta":{}}],"startTime":1774652487358,"endTime":1774652487362.6455,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/lifecycleRuntime.test.ts"},{"assertionResults":[{"ancestorTitles":["stage3 lifecycle probe semantics"],"fullName":"stage3 lifecycle probe semantics validates lifecycle acceptance targets on synthetic runtime inputs","status":"passed","title":"validates lifecycle acceptance targets on synthetic runtime inputs","duration":4.357000000000028,"failureMessages":[],"meta":{}}],"startTime":1774652487183,"endTime":1774652487187.357,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/lifecycleStage3AcceptanceProbeSemantics.test.ts"},{"assertionResults":[{"ancestorTitles":["POST /api/normalize"],"fullName":"POST /api/normalize returns normalized v1 payload in mock mode","status":"passed","title":"returns normalized v1 payload in mock mode","duration":74.83170000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["POST /api/normalize"],"fullName":"POST /api/normalize returns normalized v2 payload in mock mode","status":"passed","title":"returns normalized v2 payload in mock mode","duration":59.00800000000004,"failureMessages":[],"meta":{}},{"ancestorTitles":["POST /api/normalize"],"fullName":"POST /api/normalize returns normalized v2.0.1 payload in mock mode with execution_readiness","status":"passed","title":"returns normalized v2.0.1 payload in mock mode with execution_readiness","duration":32.00909999999999,"failureMessages":[],"meta":{}},{"ancestorTitles":["POST /api/normalize"],"fullName":"POST /api/normalize returns normalized v2.0.2 payload in mock mode with route_status and no_route_reason","status":"passed","title":"returns normalized v2.0.2 payload in mock mode with route_status and no_route_reason","duration":29.473899999999958,"failureMessages":[],"meta":{}}],"startTime":1774652486947,"endTime":1774652487142.4739,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/normalizeEndpoint.test.ts"},{"assertionResults":[{"ancestorTitles":["problemUnitAssembler scaffold"],"fullName":"problemUnitAssembler scaffold groups candidate evidence by route/source/pattern signature","status":"passed","title":"groups candidate evidence by route/source/pattern signature","duration":1.637200000000007,"failureMessages":[],"meta":{}},{"ancestorTitles":["problemUnitAssembler scaffold"],"fullName":"problemUnitAssembler scaffold detects baseline problem unit type from anomaly hints","status":"passed","title":"detects baseline problem unit type from anomaly hints","duration":0.3188000000000102,"failureMessages":[],"meta":{}},{"ancestorTitles":["problemUnitAssembler scaffold"],"fullName":"problemUnitAssembler scaffold collapses duplicate problem units by signature","status":"passed","title":"collapses duplicate problem units by signature","duration":0.5862999999999943,"failureMessages":[],"meta":{}},{"ancestorTitles":["problemUnitAssembler scaffold"],"fullName":"problemUnitAssembler scaffold assembles problem units and summary with bounded scaffold fields","status":"passed","title":"assembles problem units and summary with bounded scaffold fields","duration":2.7333999999999605,"failureMessages":[],"meta":{}}],"startTime":1774652487187,"endTime":1774652487191.7334,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/problemUnitAssembler.test.ts"},{"assertionResults":[{"ancestorTitles":["promptBuilder"],"fullName":"promptBuilder loads default prompts","status":"passed","title":"loads default prompts","duration":2.3063000000000216,"failureMessages":[],"meta":{}},{"ancestorTitles":["promptBuilder"],"fullName":"promptBuilder exposes v1, v1.1, v1.1.1, v1.1.2, v1.1.2.1, v2, v2.0.1 and v2.0.2 builtin presets","status":"passed","title":"exposes v1, v1.1, v1.1.1, v1.1.2, v1.1.2.1, v2, v2.0.1 and v2.0.2 builtin presets","duration":2.163699999999949,"failureMessages":[],"meta":{}},{"ancestorTitles":["promptBuilder"],"fullName":"promptBuilder merges user prompt values","status":"passed","title":"merges user prompt values","duration":0.49380000000002156,"failureMessages":[],"meta":{}}],"startTime":1774652487235,"endTime":1774652487240.494,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/promptBuilder.test.ts"},{"assertionResults":[{"ancestorTitles":["retrieval dual payload compatibility for graph runtime"],"fullName":"retrieval dual payload compatibility for graph runtime keeps stage2 payload when graph runtime flag is OFF","status":"passed","title":"keeps stage2 payload when graph runtime flag is OFF","duration":178.86560000000003,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval dual payload compatibility for graph runtime"],"fullName":"retrieval dual payload compatibility for graph runtime adds graph runtime payload when graph runtime flag is ON","status":"passed","title":"adds graph runtime payload when graph runtime flag is ON","duration":20.500699999999995,"failureMessages":[],"meta":{}}],"startTime":1774652486456,"endTime":1774652486655.5007,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/retrievalGraphRuntimeDualPayload.test.ts"},{"assertionResults":[{"ancestorTitles":["retrieval lifecycle runtime rollout"],"fullName":"retrieval lifecycle runtime rollout keeps Stage 2 payload when lifecycle runtime flag is OFF","status":"passed","title":"keeps Stage 2 payload when lifecycle runtime flag is OFF","duration":175.95340000000002,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval lifecycle runtime rollout"],"fullName":"retrieval lifecycle runtime rollout adds lifecycle fields to problem units when lifecycle runtime flag is ON","status":"passed","title":"adds lifecycle fields to problem units when lifecycle runtime flag is ON","duration":12.218000000000018,"failureMessages":[],"meta":{}}],"startTime":1774652486464,"endTime":1774652486652.218,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/retrievalLifecycleRuntimeRollout.test.ts"},{"assertionResults":[{"ancestorTitles":["retrieval dual payload compatibility for problem units"],"fullName":"retrieval dual payload compatibility for problem units keeps legacy payload intact when FEATURE_ASSISTANT_PROBLEM_UNITS_V1 is OFF","status":"passed","title":"keeps legacy payload intact when FEATURE_ASSISTANT_PROBLEM_UNITS_V1 is OFF","duration":164.11739999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval dual payload compatibility for problem units"],"fullName":"retrieval dual payload compatibility for problem units adds Stage 2 dual payload fields when FEATURE_ASSISTANT_PROBLEM_UNITS_V1 is ON","status":"passed","title":"adds Stage 2 dual payload fields when FEATURE_ASSISTANT_PROBLEM_UNITS_V1 is ON","duration":28.009299999999996,"failureMessages":[],"meta":{}}],"startTime":1774652486468,"endTime":1774652486660.0093,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/retrievalProblemUnitDualPayload.test.ts"},{"assertionResults":[{"ancestorTitles":["retrieval evidence enrichment"],"fullName":"retrieval evidence enrichment builds deterministic canonical source_ref from pointer/source","status":"passed","title":"builds deterministic canonical source_ref from pointer/source","duration":193.6012,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval evidence enrichment"],"fullName":"retrieval evidence enrichment uses honest weak-evidence fallback when mechanism is not reliable","status":"passed","title":"uses honest weak-evidence fallback when mechanism is not reliable","duration":11.340000000000032,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval evidence enrichment"],"fullName":"retrieval evidence enrichment maps explicit limitation to reason-coded structure","status":"passed","title":"maps explicit limitation to reason-coded structure","duration":13.944999999999993,"failureMessages":[],"meta":{}},{"ancestorTitles":["retrieval evidence enrichment"],"fullName":"retrieval evidence enrichment keeps legacy inferred mechanism when enrichment flag is OFF","status":"passed","title":"keeps legacy inferred mechanism when enrichment flag is OFF","duration":18.886499999999955,"failureMessages":[],"meta":{}}],"startTime":1774652486456,"endTime":1774652486693.8865,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/retrievalResultEvidenceEnrichment.test.ts"},{"assertionResults":[{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter builds v1 route hint summary","status":"passed","title":"builds v1 route hint summary","duration":1.2256000000000142,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter builds v2 deterministic route simulation","status":"passed","title":"builds v2 deterministic route simulation","duration":0.9957999999999743,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter builds router input contract for v1","status":"passed","title":"builds router input contract for v1","duration":0.16020000000000323,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter keeps v2.0.1 soft assumptions executable in deterministic routing","status":"passed","title":"keeps v2.0.1 soft assumptions executable in deterministic routing","duration":0.5690999999999917,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter uses explicit v2.0.2 route_status/no_route_reason contract","status":"passed","title":"uses explicit v2.0.2 route_status/no_route_reason contract","duration":0.3269999999999982,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter promotes lifecycle chain intent to hybrid route even without multi-entity flag","status":"passed","title":"promotes lifecycle chain intent to hybrid route even without multi-entity flag","duration":0.13949999999999818,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter promotes mixed-ambiguity symptom fragment to hybrid when domain anchors are present","status":"passed","title":"promotes mixed-ambiguity symptom fragment to hybrid when domain anchors are present","duration":0.4222000000000037,"failureMessages":[],"meta":{}},{"ancestorTitles":["routeHintAdapter"],"fullName":"routeHintAdapter keeps canonical path only for factual fragments without symptom/lifecycle markers","status":"passed","title":"keeps canonical path only for factual fragments without symptom/lifecycle markers","duration":0.41320000000001755,"failureMessages":[],"meta":{}}],"startTime":1774652487200,"endTime":1774652487204.422,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/routeHintAdapter.test.ts"},{"assertionResults":[{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator passes valid normalized payload","status":"passed","title":"passes valid normalized payload","duration":28.760199999999998,"failureMessages":[],"meta":{}},{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator fails invalid payload","status":"passed","title":"fails invalid payload","duration":0.23149999999998272,"failureMessages":[],"meta":{}},{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator passes valid normalized v2 payload","status":"passed","title":"passes valid normalized v2 payload","duration":28.457100000000025,"failureMessages":[],"meta":{}},{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator fails invalid v2 payload","status":"passed","title":"fails invalid v2 payload","duration":0.24759999999997717,"failureMessages":[],"meta":{}},{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator passes valid normalized v2.0.1 payload","status":"passed","title":"passes valid normalized v2.0.1 payload","duration":21.3836,"failureMessages":[],"meta":{}},{"ancestorTitles":["schemaValidator"],"fullName":"schemaValidator passes valid normalized v2.0.2 payload","status":"passed","title":"passes valid normalized v2.0.2 payload","duration":18.062999999999988,"failureMessages":[],"meta":{}}],"startTime":1774652486547,"endTime":1774652486644.063,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/schemaValidator.test.ts"},{"assertionResults":[{"ancestorTitles":["assistant session backward compatibility"],"fullName":"assistant session backward compatibility lazy-upgrades legacy session objects without investigation_state","status":"passed","title":"lazy-upgrades legacy session objects without investigation_state","duration":1.5845999999999663,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant session backward compatibility"],"fullName":"assistant session backward compatibility normalizes malformed legacy sessions with missing items array","status":"passed","title":"normalizes malformed legacy sessions with missing items array","duration":0.23860000000001946,"failureMessages":[],"meta":{}},{"ancestorTitles":["assistant session backward compatibility"],"fullName":"assistant session backward compatibility preserves optional stage2 problem_unit_state in session clone flow","status":"passed","title":"preserves optional stage2 problem_unit_state in session clone flow","duration":0.6096000000000004,"failureMessages":[],"meta":{}}],"startTime":1774652487418,"endTime":1774652487420.6096,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/sessionBackwardCompat.test.ts"},{"assertionResults":[{"ancestorTitles":["stage4GraphRuntime"],"fullName":"stage4GraphRuntime builds graph bindings for deferred expense lifecycle with missing transition","status":"passed","title":"builds graph bindings for deferred expense lifecycle with missing transition","duration":7.018300000000011,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4GraphRuntime"],"fullName":"stage4GraphRuntime marks cross-branch conflicts for vat graph branches","status":"passed","title":"marks cross-branch conflicts for vat graph branches","duration":0.8183999999999969,"failureMessages":[],"meta":{}},{"ancestorTitles":["stage4GraphRuntime"],"fullName":"stage4GraphRuntime infers 97 domain mapping when lifecycle domain is absent","status":"passed","title":"infers 97 domain mapping when lifecycle domain is absent","duration":0.23920000000001096,"failureMessages":[],"meta":{}}],"startTime":1774652487071,"endTime":1774652487079.2393,"status":"passed","message":"","name":"X:/1C/NDC_1C/llm_normalizer/backend/tests/stage4GraphRuntime.test.ts"}]} |