{
  "generatedAt": "2026-08-19T11:53:54.007Z",
  "baseURL": "http://127.0.0.1:5174/",
  "total": 30,
  "passed": 30,
  "failed": 0,
  "results": [
    {
      "suite": "current-flow-audit.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"首页计划决策只保留真实入口，不展示局部假状态\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"首页只保留一套 Agent 快捷问题与对话输入\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"今日补给是首页子页，底栏仍保持首页选中\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练页只保留周期、计划实际与周课表\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"周课表到计划详情、设备确认再回首页形成闭环\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"我的页面使用跑步和健康平台语言\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "mini-program-redesign.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"底部只保留训练、居中首页、我的\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"首页只呈现恢复决策、训练摘要和补给摘要\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"独立营养入口收敛为今日训练补给\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练页仅保留周期计划、执行对比和回传后分析\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练后反馈采用完成祝贺到 AI 建议的对话流\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "plan-agent-handoff.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"PLAN-04 替代顺延跳转首页并由 Agent 接管\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"首页对话生成草案并同步至训练界面\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"TRAIN-READY 确认后返回首页并留下同步回执\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"PLAN-05 旧表单入口统一重定向首页 Agent\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "meeting-second-batch.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"设备页优先健康平台并折叠厂商直连\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"档案使用固定训练目标并收集频次和具体可训练日期\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"固定目标进入 Agent 计划生成上下文\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练后复盘按祝贺、数据对比、AI 建议推进\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "meeting-completion-audit.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"首页是唯一工作台并集中当日决策、恢复、补给和 AI\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练页按四阶段展示周期且不暴露二期整体分析\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"记录页优先历史实绩与单次分析\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"日常饮水、餐次和食谱旧入口统一回首页 AI\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"健康平台、可训练日期与训练后对话均进入一期\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"演示目录只保留八个一期闭环\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "cycle-agent-summary.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"默认周期生成训练机能 Agent 总结\",\n      \"pass\": true,\n      \"text\": \"CPT\\nAI 教练解读训练机能\\n结合最近 30 天变化，判断下一步怎么练\\n随数据更新\\n当前判断 OBSERVATION\\n机能整体稳定，仍需结合连续趋势判断\\n\\n我看了最近 30 天的 8 个有效节点：静息心率有所上升，HRV 保持改善。结合当前目标“半马完赛”与主观疲劳 6/20，下一次质量课先收一点总量，再看看身体恢复得怎么样。\\n\\n关键变化 KEY SHIFTS\\n01\\n静息心率 50 → 51 bpm（+1）\\n02\\nHRV 32 → 34 ms（+2）\\n03\\n当前阈值配速 4′05″/km\\n执行建议\\nNEXT ACTION\\n\\n下一次质量课优先按当前配速区间执行；若热身后体感明显偏重，再下调一个区间。\\n\\n基于最近 30 天机能趋势与当前配速区间动态生成\",\n      \"version\": \"cycle-function-30d-pace-08/14-51-34-今天 08:32\"\n    },\n    {\n      \"name\": \"切换周期后总结自动重算\",\n      \"pass\": true,\n      \"text\": \"CPT\\nAI 教练解读训练机能\\n结合最近 14 天变化，判断下一步怎么练\\n随数据更新\\n当前判断 OBSERVATION\\n恢复基础正在改善，当前训练区间可继续执行\\n\\n我看了最近 14 天的 5 个有效节点：静息心率下降或持平，HRV 保持改善。结合当前目标“半马完赛”与主观疲劳 6/20，目前没有需要主动降级计划的信号，可以稳稳继续。\\n\\n关键变化 KEY SHIFTS\\n01\\n静息心率 52 → 51 bpm（-1）\\n02\\nHRV 32 → 34 ms（+2）\\n03\\n当前阈值配速 4′05″/km\\n执行建议\\nNEXT ACTION\\n\\n下一次质量课优先按当前配速区间执行；若热身后体感明显偏重，再下调一个区间。\\n\\n基于最近 14 天机能趋势与当前配速区间动态生成\",\n      \"version\": \"cycle-function-14d-pace-08/14-51-34-今天 08:32\"\n    },\n    {\n      \"name\": \"切换训练区间后建议同步变化\",\n      \"pass\": true,\n      \"text\": \"CPT\\nAI 教练解读训练机能\\n结合最近 14 天变化，判断下一步怎么练\\n随数据更新\\n当前判断 OBSERVATION\\n恢复基础正在改善，当前训练区间可继续执行\\n\\n我看了最近 14 天的 5 个有效节点：静息心率下降或持平，HRV 保持改善。结合当前目标“半马完赛”与主观疲劳 6/20，目前没有需要主动降级计划的信号，可以稳稳继续。\\n\\n关键变化 KEY SHIFTS\\n01\\n静息心率 52 → 51 bpm（-1）\\n02\\nHRV 32 → 34 ms（+2）\\n03\\n当前阈值心率 169 bpm\\n执行建议\\nNEXT ACTION\\n\\n下一次质量课优先用心率区间控强度，避免在心率持续越区时继续追配速。\\n\\n基于最近 14 天机能趋势与当前心率区间动态生成\",\n      \"version\": \"cycle-function-14d-heart-08/14-51-34-今天 08:32\"\n    },\n    {\n      \"name\": \"身体状态入口、体成分指标与双视角切换已移除\",\n      \"pass\": true,\n      \"hasBodyButton\": false,\n      \"hasBodyMetrics\": false,\n      \"domainTabs\": 0\n    },\n    {\n      \"name\": \"总结卡片无横向溢出且状态稳定\",\n      \"pass\": true,\n      \"width\": 350,\n      \"scrollWidth\": 350,\n      \"status\": \"ready\"\n    },\n    {\n      \"name\": \"状态趋势采用连续报告布局而非卡片堆叠\",\n      \"pass\": true,\n      \"genericCards\": 0,\n      \"metricRadius\": \"0px\",\n      \"chartShadow\": \"none\",\n      \"zoneRadius\": \"0px\"\n    },\n    {\n      \"name\": \"训练机能指标在手机端使用 2×2 布局\",\n      \"pass\": true,\n      \"columns\": 2,\n      \"width\": 390,\n      \"scrollWidth\": 390,\n      \"cardWidths\": [\n        175,\n        175,\n        175,\n        175\n      ]\n    },\n    {\n      \"name\": \"跑量对比移除圆点图标并使用钢蓝与橙色双角色\",\n      \"pass\": true,\n      \"lineLayers\": 0,\n      \"circles\": 0,\n      \"svgFills\": [\n        \"#7193ad\",\n        \"#7193ad\",\n        \"#7193ad\",\n        \"#7193ad\",\n        \"#e47d27\"\n      ],\n      \"planLegend\": \"rgb(113, 147, 173)\",\n      \"actualLegend\": \"rgb(228, 125, 39)\"\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true,\n      \"consoleErrors\": []\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "cycle-zone-alignment.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"alignment\": {\n    \"pace\": {\n      \"intervalHeaderRight\": 311,\n      \"useHeaderRight\": 367,\n      \"intervalRights\": [\n        311,\n        311,\n        311,\n        311,\n        311\n      ],\n      \"useRights\": [\n        367,\n        367,\n        367,\n        367,\n        367\n      ],\n      \"intervalMaxDeviation\": 0,\n      \"useMaxDeviation\": 0,\n      \"tableOverflow\": 0\n    },\n    \"heart\": {\n      \"intervalHeaderRight\": 311,\n      \"useHeaderRight\": 367,\n      \"intervalRights\": [\n        311,\n        311,\n        311,\n        311,\n        311\n      ],\n      \"useRights\": [\n        367,\n        367,\n        367,\n        367,\n        367\n      ],\n      \"intervalMaxDeviation\": 0,\n      \"useMaxDeviation\": 0,\n      \"tableOverflow\": 0\n    }\n  },\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "visual-redesign-audit.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"桌面保留原型导航，手机只展示产品本体\",\n      \"pass\": true,\n      \"desktop\": {\n        \"stageClass\": \"prototype-stage is-app-preview\",\n        \"dockDisplay\": \"flex\",\n        \"noteDisplay\": \"block\",\n        \"titleWidth\": 310,\n        \"horizontalOverflow\": false\n      },\n      \"mobile\": {\n        \"stageClass\": \"prototype-stage is-app-preview\",\n        \"dockDisplay\": \"none\",\n        \"noteDisplay\": \"none\",\n        \"titleWidth\": 310,\n        \"horizontalOverflow\": false\n      }\n    },\n    {\n      \"name\": \"主标题保持横向层级且页面无横向溢出\",\n      \"pass\": true,\n      \"desktop\": {\n        \"stageClass\": \"prototype-stage is-app-preview\",\n        \"dockDisplay\": \"flex\",\n        \"noteDisplay\": \"block\",\n        \"titleWidth\": 310,\n        \"horizontalOverflow\": false\n      },\n      \"mobile\": {\n        \"stageClass\": \"prototype-stage is-app-preview\",\n        \"dockDisplay\": \"none\",\n        \"noteDisplay\": \"none\",\n        \"titleWidth\": 310,\n        \"horizontalOverflow\": false\n      }\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true,\n      \"consoleErrors\": []\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "visual-completion-gate.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"generatedAt\": \"2026-08-19T11:51:55.665Z\",\n  \"checks\": [\n    {\n      \"name\": \"HOME-01 手机端布局与文字完整性\",\n      \"pass\": true,\n      \"geometry\": {\n        \"width\": 390,\n        \"scrollWidth\": 390,\n        \"titleSize\": 23,\n        \"clippedControls\": [],\n        \"brokenParagraphs\": []\n      }\n    },\n    {\n      \"name\": \"TRAIN-HUB 手机端布局与文字完整性\",\n      \"pass\": true,\n      \"geometry\": {\n        \"width\": 390,\n        \"scrollWidth\": 390,\n        \"titleSize\": 23,\n        \"clippedControls\": [],\n        \"brokenParagraphs\": []\n      }\n    },\n    {\n      \"name\": \"NUT-01 手机端布局与文字完整性\",\n      \"pass\": true,\n      \"geometry\": {\n        \"width\": 390,\n        \"scrollWidth\": 390,\n        \"titleSize\": 23,\n        \"clippedControls\": [],\n        \"brokenParagraphs\": []\n      }\n    },\n    {\n      \"name\": \"PROFILE-01 手机端布局与文字完整性\",\n      \"pass\": true,\n      \"geometry\": {\n        \"width\": 390,\n        \"scrollWidth\": 390,\n        \"titleSize\": 23,\n        \"clippedControls\": [],\n        \"brokenParagraphs\": []\n      }\n    },\n    {\n      \"name\": \"四个一级页面无控制台错误\",\n      \"pass\": true,\n      \"consoleErrors\": []\n    }\n  ],\n  \"screenshots\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\artifacts\\\\visual-completion-gate\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "nutrition-plan-mini-scope.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"reminderButtonCount\": 0,\n  \"duringButtonCount\": 0,\n  \"hint\": \"本页只用于查看方案与替换补给品；训练后的实际完成情况请在今日训练补给页或首页 AI 对话中反馈。\",\n  \"layout\": {\n    \"width\": 390,\n    \"scrollWidth\": 390,\n    \"bottomActionCount\": 0,\n    \"aiSummaryCount\": 1,\n    \"clippedControls\": []\n  },\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "plan-frequency-consistency.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"results\": [\n    {\n      \"frequency\": 1,\n      \"trainingDays\": [\n        0\n      ],\n      \"generated\": 8,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 1,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 2,\n      \"trainingDays\": [\n        0,\n        2\n      ],\n      \"generated\": 16,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 2,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 3,\n      \"trainingDays\": [\n        0,\n        2,\n        5\n      ],\n      \"generated\": 24,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 3,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 4,\n      \"trainingDays\": [\n        0,\n        1,\n        2,\n        5\n      ],\n      \"generated\": 32,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 4,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 5,\n      \"trainingDays\": [\n        0,\n        1,\n        2,\n        3,\n        5\n      ],\n      \"generated\": 40,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 5,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 6,\n      \"trainingDays\": [\n        0,\n        1,\n        2,\n        3,\n        4,\n        5\n      ],\n      \"generated\": 48,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 6,\n      \"pass\": true\n    },\n    {\n      \"frequency\": 7,\n      \"trainingDays\": [\n        0,\n        1,\n        2,\n        3,\n        4,\n        5,\n        6\n      ],\n      \"generated\": 56,\n      \"totalWeeks\": 8,\n      \"weeklyCount\": 7,\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "training-history.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"记录页优先展示月统计和历史列表，月历按需展开\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"历史训练可从月份列表进入当日详情和训练分析\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"跨月浏览保留记录且不会伪造原计划\",\n      \"pass\": true\n    }\n  ],\n  \"screenshots\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\training-history-2026-08-12\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "device-record-sync.mjs",
      "pass": true,
      "code": 0,
      "stdout": "PASS 设备连接后同步当天记录并显示\nPASS 设备实绩关联原计划且不覆盖计划\nPASS 重复同步保持幂等\nDONE 3/3\n",
      "stderr": ""
    },
    {
      "suite": "device-authorization-dialog.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"optionalSync\": \"DEV-01 → PLAN-02\",\n  \"providers\": [\n    \"华为健康\",\n    \"Apple Health\",\n    \"小米运动健康\"\n  ],\n  \"geometry\": {\n    \"width\": 390,\n    \"scrollWidth\": 390\n  },\n  \"consoleErrors\": [],\n  \"screenshots\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\artifacts\\\\device-authorization\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "history-agent.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"首页已取消补给提醒话术和两个关联跳转\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"快捷问题由 Agent 结合最新状态生成并回答\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"重置前警告不可恢复，取消保留历史\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"确认后历史和首页旧对话永久清空且刷新后保持\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "home-conversation-layout.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"连续追问保持用户问题与 Agent 回答的稳定顺序\",\n      \"pass\": true,\n      \"turns\": 6,\n      \"answers\": 3,\n      \"answerBubbles\": 0,\n      \"sourceFooters\": 3,\n      \"order\": [\n        \"我我 · 09:20为什么今天安排轻\",\n        \"CPT 回答09:20昨夜睡眠 7.\",\n        \"我我 · 09:22那配速要怎么控制\",\n        \"CPT 回答09:22前 2 公里保\",\n        \"我我 · 09:24训练前还要补什么\",\n        \"CPT 回答09:24训练前 30 \"\n      ]\n    },\n    {\n      \"name\": \"Agent 长回答采用统一中文 UI 字体与可读正文层级\",\n      \"pass\": true,\n      \"answerGeometry\": [\n        {\n          \"width\": 314,\n          \"scrollWidth\": 314,\n          \"radius\": \"0px\",\n          \"fontSize\": 13,\n          \"lineHeight\": 22.36,\n          \"fontFamily\": \"\\\"Noto Sans SC\\\", \\\"Microsoft YaHei UI\\\", \\\"Microsoft YaHei\\\", \\\"PingFang SC\\\", system-ui, sans-serif\",\n          \"fontWeight\": 450\n        },\n        {\n          \"width\": 314,\n          \"scrollWidth\": 314,\n          \"radius\": \"0px\",\n          \"fontSize\": 13,\n          \"lineHeight\": 22.36,\n          \"fontFamily\": \"\\\"Noto Sans SC\\\", \\\"Microsoft YaHei UI\\\", \\\"Microsoft YaHei\\\", \\\"PingFang SC\\\", system-ui, sans-serif\",\n          \"fontWeight\": 450\n        },\n        {\n          \"width\": 314,\n          \"scrollWidth\": 314,\n          \"radius\": \"0px\",\n          \"fontSize\": 13,\n          \"lineHeight\": 22.36,\n          \"fontFamily\": \"\\\"Noto Sans SC\\\", \\\"Microsoft YaHei UI\\\", \\\"Microsoft YaHei\\\", \\\"PingFang SC\\\", system-ui, sans-serif\",\n          \"fontWeight\": 450\n        }\n      ]\n    },\n    {\n      \"name\": \"用户短问题保持紧凑微信式气泡且字号一致\",\n      \"pass\": true,\n      \"userGeometry\": [\n        {\n          \"width\": 167,\n          \"maxWidth\": \"min(82%, 264px)\",\n          \"fontSize\": 13,\n          \"text\": \"为什么今天安排轻松跑？\"\n        },\n        {\n          \"width\": 141,\n          \"maxWidth\": \"min(82%, 264px)\",\n          \"fontSize\": 13,\n          \"text\": \"那配速要怎么控制？\"\n        },\n        {\n          \"width\": 141,\n          \"maxWidth\": \"min(82%, 264px)\",\n          \"fontSize\": 13,\n          \"text\": \"训练前还要补什么？\"\n        }\n      ]\n    },\n    {\n      \"name\": \"手机端连续对话无横向溢出\",\n      \"pass\": true,\n      \"width\": 390,\n      \"scrollWidth\": 390\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true,\n      \"consoleErrors\": []\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "home-history-reset.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"labels\": [\n    \"为什么这样安排？\",\n    \"今天怎么补给？\",\n    \"恢复状态怎么看？\"\n  ],\n  \"ids\": [\n    \"basis\",\n    \"fuel\",\n    \"recovery-status\"\n  ],\n  \"resetState\": {\n    \"conversationCount\": 0,\n    \"archiveCount\": 0,\n    \"suggestionStatus\": \"ready\",\n    \"updatedAt\": \"19:52\"\n  },\n  \"errors\": [],\n  \"screenshot\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\artifacts\\\\home-history-reset.png\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "ai02-home-handoff.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"passed\": true,\n  \"checks\": [\n    \"AI-02 详细总结结构化写入首页会话\",\n    \"交接后跳转 HOME-01\",\n    \"首页保留输入框供用户继续追问\"\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "training-performance-home-card.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"geometry\": {\n    \"width\": 306,\n    \"scrollWidth\": 304,\n    \"overflowing\": []\n  },\n  \"bubbleText\": \"再告诉我一点这次的体感，我会把恢复、补给和下一次训练一起调得更贴合你。\",\n  \"errors\": [],\n  \"screenshot\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\artifacts\\\\training-performance-home-card.png\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "record-detail-evaluation.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"readingOrder\": {\n    \"metricsBeforeEvaluation\": true,\n    \"evaluationBeforeDetails\": true\n  },\n  \"geometry\": {\n    \"width\": 350,\n    \"scrollWidth\": 350,\n    \"pageWidth\": 390,\n    \"pageScrollWidth\": 390\n  },\n  \"screenshot\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\artifacts\\\\record-detail-evaluation.png\",\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "record-function-indicators.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"RECORD-03 覆盖本次路线、核心结果、质量指标、趋势、区间、分段和海拔\",\n      \"pass\": true,\n      \"detail\": {\n        \"route\": 1,\n        \"core\": 3,\n        \"quality\": 8,\n        \"loadRange\": 1,\n        \"charts\": 3,\n        \"zones\": 2,\n        \"splitColumns\": 5,\n        \"summaryModules\": 1,\n        \"summaryStatus\": \"locked\",\n        \"summaryProgressStartsAtZero\": true,\n        \"generatedReports\": 0,\n        \"width\": 390,\n        \"scrollWidth\": 390\n      }\n    },\n    {\n      \"name\": \"反馈未完成时 RECORD-03 展示待解锁总结模块但不提前生成结论\",\n      \"pass\": true,\n      \"detail\": {\n        \"route\": 1,\n        \"core\": 3,\n        \"quality\": 8,\n        \"loadRange\": 1,\n        \"charts\": 3,\n        \"zones\": 2,\n        \"splitColumns\": 5,\n        \"summaryModules\": 1,\n        \"summaryStatus\": \"locked\",\n        \"summaryProgressStartsAtZero\": true,\n        \"generatedReports\": 0,\n        \"width\": 390,\n        \"scrollWidth\": 390\n      }\n    },\n    {\n      \"name\": \"RECORD-03 无横向溢出\",\n      \"pass\": true,\n      \"detail\": {\n        \"route\": 1,\n        \"core\": 3,\n        \"quality\": 8,\n        \"loadRange\": 1,\n        \"charts\": 3,\n        \"zones\": 2,\n        \"splitColumns\": 5,\n        \"summaryModules\": 1,\n        \"summaryStatus\": \"locked\",\n        \"summaryProgressStartsAtZero\": true,\n        \"generatedReports\": 0,\n        \"width\": 390,\n        \"scrollWidth\": 390\n      }\n    },\n    {\n      \"name\": \"TRAIN-HUB 以长期口径展示完整指标对比\",\n      \"pass\": true,\n      \"detail\": {\n        \"comparisons\": 9,\n        \"metricTabs\": 9,\n        \"zoneBars\": 4,\n        \"text\": \"训练状态追踪训练机能趋势最近 30 天，自动对照此前 30 天机能数据已同步14 天30 天60 天90 天静息心率RHR49bpm-2 较此前 30 天心率变异性HRV32ms+4 较此前 30 天阈值配速THRESHOLD PACE4′05″/km快 7秒 较此前 30 天阈值心率THRESHOLD HR169bpm-2 较此前 30 天CPTAI 教练解读训练机能结合最近 30 天变化，判断下一步怎么练正在更新AI 教练正在梳理这 30 天的训练机能变化…静息心率趋势观察恢复基础是否保持稳定51 bpm06/2607/0307/1007/1707/2407/3108/0708/144749515354HRV 趋势优先观察个人区间内的连续变化34 ms06/2607/0307/1007/1707/2407/3108/0708/142830323436周期训练表现最近 30 天 vs 此前 30 天同口径对比从训练总量、训练刺激、跑步效率与恢复负担四个维度，查看本周期变化。训练执行训练总量与 VDOT最近 30 天累计距离76.5 km+8.7 km · 较此前运动时长6.9 h+21 min · 较此前当前 VDOT45.0+1.6 · 较此前距离时长VDOT06/2607/0307/1007/1707/2407/3108/145.38.311.313.5训练刺激负荷、负荷比与恢复最近 30 天累计训练负荷621+61 · 较此前平均负荷比0.98+0.05 · 较此前平均恢复时间17 h0 h缩短 · 较此前负荷负荷比恢复06/2607/0307/1007/1707/2407/3108/146672788488跑步效率步频与步长最近 30 天平均步频181 spm+2 spm · 较此前平均步长0.98 m+0.02 m · 较此前步频步长06/2607/0307/1007/1707/2407/3108/14177179181183185路线负荷累计爬升最近 30 天累计爬升676 m+57 m · 较此前爬升06/2607/0307/1007/1707/2407/3108/1463738393102强度结构区间占比对比最近 vs 此前配速区间最近周期此前周期Z1Z2Z3Z4Z5心率区间最近周期此前周期Z1Z2Z3Z4Z5训练区间由当前阈值自动换算配速心率Zone名称区间用途recovery恢复跑≥ 5′41″恢复easy轻松跑4′52″–5′41″轻松marathon马拉松配速4′13″–4′52″稳态threshold阈值跑3′58″–4′13″质量interval间歇跑3′41″–3′58″高强度训练机能数据来自已连接的健康平台与训练设备 · 最后同步 今天 07:10\"\n      }\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true,\n      \"detail\": []\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "post-training-analysis-unlock.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"设备记录回传后首页出现训练感受与补给执行双项提示\",\n      \"pass\": true,\n      \"steps\": 2,\n      \"status\": \"待补充反馈\",\n      \"progress\": \"width: 0%;\",\n      \"text\": \" 发现设备训练记录待补充反馈8.08 km距离5′49″/km平均配速139 bpm平均心率客观数据已经保存。再补齐下面两项，我会在首页和训练记录中生成完整分析。训练感受告诉我身体的感受补给执行直接在对话里反馈当前训练记录页只展示设备数据，完整分析将在 2/2 后出现。\"\n    },\n    {\n      \"name\": \"两项反馈未完成时 RECORD-03 只展示训练数据\",\n      \"pass\": true,\n      \"metrics\": 3,\n      \"charts\": 3,\n      \"sessionMetrics\": 8,\n      \"summaryModules\": 1,\n      \"summaryStatus\": \"locked\",\n      \"generatedReports\": 0\n    },\n    {\n      \"name\": \"只完成补给反馈时完整分析仍保持锁定\",\n      \"pass\": true,\n      \"status\": {\n        \"training\": false,\n        \"nutrition\": true,\n        \"analysisReady\": false,\n        \"detectedAt\": \"2026-08-19T11:53:10.867Z\"\n      },\n      \"hasAnalysis\": false\n    },\n    {\n      \"name\": \"两项补齐后首页展示含依据与下一步建议的完整分析\",\n      \"pass\": true,\n      \"evidence\": 3,\n      \"hasNextAction\": true,\n      \"hasFunctionSummary\": true,\n      \"reportText\": \"距离8.08 km平均配速5′49″/km平均心率139 bpm训练负荷57 load平均步频183 spm本次 VDOT42本次机能情况刺激有效，整体在个人可承受区间平均步频 183 spm、步长 0.94 m；预计恢复 11 小时。 配速与心率后程保持稳定，训练刺激已被完整记录。计划执行有氧基础 · 轻松跑5 / 5 项达标计划执行稳定，关键目标已达成本次完成 8.08 km，对应计划 8.00 km；配速与计划目标基本一致，补给节点已按计划完成。 主观反馈为 RPE 13/20、口渴 5/10、酸痛轻微、胃肠舒适。关键依据计划 plan-tempo-w1 · V3设备活动 device-高驰-plan-tempo-w1 · 高驰 Pace 3补给节点 4/4下一步建议下一次继续保持当前训练结构，训练强度由最新恢复与设备数据动态确认。\",\n      \"text\": \" POST-RUN REPORT本次训练表现已完成距离8.08 km平均配速5′49″/km平均心率139 bpm训练负荷57 load平均步频183 spm本次 VDOT42本次机能情况刺激有效，整体在个人可承受区间平均步频 183 spm、步长 0.94 m；预计恢复 11 小时。 配速与心率后程保持稳定，训练刺激已被完整记录。计划执行有氧基础 · 轻松跑5 / 5 项达标计划执行稳定，关键目标已达成本次完成 8.08 km，对应计划 8.00 km；配速与计划目标基本一致，补给节点已按计划完成。 主观反馈为 RPE 13/20、口渴 5/10、酸痛轻微、胃肠舒适。关键依据计划 plan-tempo-w1 · V3设备活动 device-高驰-plan-tempo-w1 · 高驰 Pace 3补给节点 4/4下一步建议下一次继续保持当前训练结构，训练强度由最新恢复与设备数据动态确认。查看完整分析 \"\n    },\n    {\n      \"name\": \"两项补齐后 RECORD-03 同步展示全面训练分析\",\n      \"pass\": true,\n      \"status\": \"ready\",\n      \"evidence\": 3,\n      \"hasNextAction\": true,\n      \"metrics\": 6,\n      \"reportText\": \"距离8.08 km平均配速5′49″/km平均心率139 bpm训练负荷57 load平均步频183 spm本次 VDOT42本次机能情况刺激有效，整体在个人可承受区间平均步频 183 spm、步长 0.94 m；预计恢复 11 小时。 配速与心率后程保持稳定，训练刺激已被完整记录。计划执行有氧基础 · 轻松跑5 / 5 项达标计划执行稳定，关键目标已达成本次完成 8.08 km，对应计划 8.00 km；配速与计划目标基本一致，补给节点已按计划完成。 主观反馈为 RPE 13/20、口渴 5/10、酸痛轻微、胃肠舒适。关键依据计划 plan-tempo-w1 · V3设备活动 device-高驰-plan-tempo-w1 · 高驰 Pace 3补给节点 4/4下一步建议下一次继续保持当前训练结构，训练强度由最新恢复与设备数据动态确认。\"\n    },\n    {\n      \"name\": \"训练感受与补给反馈支持任意顺序完成\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"浏览器控制台无错误\",\n      \"pass\": true,\n      \"consoleErrors\": []\n    }\n  ],\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "functional-closure.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"个人卡进入账号安全，手机号服务完成绑定并持久化\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"版本检查与协议文档形成真实页面闭环\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"开发者反馈通过服务层提交并返回\",\n      \"pass\": true\n    }\n  ],\n  \"errors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "ia-dedup.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"首页承接当日决策与 AI 调整，不重复训练执行\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"训练页只展示周期、周课表和历史分析\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"营养没有独立底栏，仅作为首页今日训练补给\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"我的页档案和权限入口各自唯一\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"桌面直访保留左侧功能 Demo 与右侧当前路由\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-entry.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"目标与训练设置只同步展示且不可跳转\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"跑步习惯保留两项摘要并可进入完整档案\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-summary-priority.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"跑步习惯摘要只保留周均跑量和每周训练天数\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"补给习惯摘要只保留出汗程度和每小时碳水\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"PROFILE-01 浏览器控制台无错误\",\n      \"pass\": true\n    }\n  ],\n  \"summaries\": {\n    \"running\": \"近阶段周均 32 km · 每周 3 天可训练\",\n    \"fueling\": \"出汗明显 · 每小时碳水 30–60 g/h\"\n  },\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-gender.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"checks\": [\n    {\n      \"name\": \"ONB-02 性别为原生单选组并可保存\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"性别进入 Agent 计划生成依据\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"我的页面账号摘要显示性别且跑步习惯不重复\",\n      \"pass\": true\n    }\n  ]\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-question-expansion.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"results\": [\n    {\n      \"name\": \"旧饮食偏好字段被迁移移除，新增档案字段自动补齐\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"ONB-02 展示 T1/T3/T4/T6/T7，T7 按选择展开部位追问\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"ONB-03 删除饮食偏好并展示 N2/N5/F1/F2/F3/F4/F5/F10/F14\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"营养档案可保存并进入设备连接页\",\n      \"pass\": true\n    },\n    {\n      \"name\": \"新增训练字段进入 Agent 计划生成依据\",\n      \"pass\": true\n    }\n  ],\n  \"screenshots\": \"D:\\\\muscle and saitlite 文献\\\\康比特\\\\AI营养师协作项目\\\\projects\\\\running-ai-assistant\\\\prototypes\\\\原型小程序端\\\\qa\\\\profile-question-expansion\"\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-account-flow.mjs",
      "pass": true,
      "code": 0,
      "stdout": "{\n  \"ok\": true,\n  \"accountVisible\": true,\n  \"phoneVisible\": true,\n  \"duplicateEntriesRemoved\": true,\n  \"consoleErrors\": []\n}\n",
      "stderr": ""
    },
    {
      "suite": "profile-latest.mjs",
      "pass": true,
      "code": 0,
      "stdout": "",
      "stderr": ""
    }
  ]
}