# 拾时补充闭环稳定性验证

日期：2026-10-09。应用沿用 `0.7.3-dev`（versionCode 14），本轮为工作区修复，不新增 Git 提交、标签或 GitHub Release。代码、规范、合成样例与测试记录随下一次重要迭代统一管理。

## 复现与修复

用户样例为“转专业课程成绩截图备份，截止明晚20:00前”。粘贴内容需要消息日期；明确回答后应安排消息次日20:00截止、19:00提醒。

初始6条正反回归中4条失败：旧问题中提及的日期进入了补充日期解析；更正答案后新旧值累积产生冲突；模型再次返回unknown/旧问题不能被本地复核；旧问题中的“待定”污染原通知的可靠性检查。修复后6条均通过，真实日期星期冲突和无效回答继续阻止创建提醒。

| 问题 | 修复结果 |
|---|---|
| 日期、年份答案与问题混读 | 独立读取回答；保留多行，不把旧问题视为事实 |
| 更正同一字段后旧值冲突 | 消息日期/年份采用最新回答并替换旧记录 |
| 已明确补充仍重复提问 | 本地重核已回答字段，可靠且有明确原文节点语义时恢复；仍无法得到可靠结果则保存答案并提供重试，不循环问同一道题 |
| 修正结果未保存，启动时再次变回旧歧义 | 持久化本地复核后的候选 |
| 中文“下周一三点”不能解析 | 星期部分与中文钟点分开识别；结合消息日期与早晚回答 |
| 补充早晚丢失分钟或误用于其他钟点 | 保留原分钟；明确钟点答案必须匹配原钟点与分钟 |
| 不确定回答被当成确认 | “可能、不确定、大概”等不能成为确定时间依据 |
| 事项修改后旧补充通知仍能提交 | 通知绑定事项内容指纹，过期动作不覆盖新事项 |
| 通知跨午夜后的今天/昨天偏移 | 按用户回答时的本地日期生成明确消息日期 |
| 页面补充后系统拒绝后台任务 | 保存答案并进入可重试状态，不停留在无人处理的pending_ai |
| 设置页版本文字过时 | 从已安装包读取实际版本 |

## 覆盖范围

Android 单测与 Robolectric 功能测试覆盖：本地简单创建、开始提前30分钟、截止提前1小时、重复点击与重建、无时间待办、内容要点、消息日期/年份/早晚补充、旧问题污染、修改答案、分钟、午夜、星期冲突、多事项选择、通知回答与防过期覆盖、失败重试与任务恢复、笔记无提醒、系统分享、权限关闭与恢复、提醒发送/延后/整件完成、长按批量完成/恢复/删除，以及旧模型响应不能覆盖已编辑或删除事项。

服务自动化覆盖：结构与连续证据、截断响应、修复重试、503等瞬时错误退避、鉴权/额度错误分类、输入约束、规则完整追加和数据升级。

新增开发集 `evaluation/clarification-stability-cases.json`：12条文字、4张合成图片；覆盖本次通知初次解析及补充今天/昨天、旧问题内日期、早晚与半小时、消息日期加早晚两个答案、年份、无效回答、跨午夜、24:00、无时间、真实星期冲突、图片日期分隔线、相邻无关消息和报名窗口。

真实模型直连16/16、腾讯云公网16/16通过。直连模型输出最初进入Android时为15/16通过，进一步发现并修正“下周一三点”问题后16/16通过。公网16个响应也进入实际Android候选校验与提醒规划，逐条核对状态、提醒数量和时刻，不以HTTP成功或JSON正确替代最终结果。

原始模型响应留在Git忽略的 `.local/model-results/`，管线结果在 `.local/clarification-direct-pipeline.json` 和 `.local/clarification-cloud-pipeline.json`。未上传私人截图。

## 最终验证与交付

| 检查 | 结果 |
|---|---|
| APK构建 | 通过，应用版本仍为0.7.3-dev / 14 |
| Android自动化 | 152项通过，0失败、0跳过；其中1项逐条验证16个公网模型响应 |
| Android Lint | 通过，No issues found |
| 服务自动化 | 17项通过 |
| 真实模型直连 | 12文字+4图片，共16/16 |
| 腾讯云公网 | 12文字+4图片，共16/16；均一次传输完成 |
| 本地最终提醒校验 | 直连16/16，公网16/16 |
| 云端健康 / 未授权 | 200且status=ok / 401 |

APK：`app/build/outputs/apk/debug/app-debug.apk`，1,123,698字节；SHA256：`9cbc60b50a7d04df345fb0bf263d75b602a21f888d866a87ca3e2b5784c7fb43`。沿用本机调试签名，覆盖安装，不卸载原应用。

修复部署记录为腾讯云 `shishi-parser-020`，保留019用于回滚。这是云服务修复构建记录，不是新的产品Git版本。现有环境变量未变，minNum=0/maxNum=1，无新增常驻服务或后台轮询。

## 复验方法

```powershell
node --test server/*.test.mjs
node --env-file=.local/model.env --env-file=.local/tencent-cloud.env server/eval-understanding.mjs --transport cloud --suite evaluation/clarification-stability-cases.json --pipeline-output .local/clarification-cloud-pipeline.json
$env:SHISHI_QA_PIPELINE = 'E:\project\.local\clarification-cloud-pipeline.json'
& ./scripts/build.ps1
```

`LiveAdoptionTest`不设置管线文件时跳过；本轮明确设置该文件运行，不能把跳过当成验证通过。

## 边界

本轮合成样例是开发回归，不是独立保留集准确率，也不证明所有通知均可识别。Robolectric功能运行使用SDK 34；本轮没有连接Android 16真机，不宣称已覆盖所有厂商、休眠与弱网状态。语音转写、重复系列调度及自动关联历史事项的改期/取消仍是计划中的能力，本轮未实现或宣称通过。

覆盖安装应保留原有数据与智能识别配置。对既有失败事项可打开并选择“重新整理”，已有补充答案随请求继续使用；无需重复创建同一事项。若内容本身存在星期冲突、暂定或缺少必要时刻，则仍需补充，不能为了消除问询而猜测。
