# v0.8.0-dev执行更新（2026-10-12）

现行规则：information-understanding-and-reminder-spec-v0.6.md，规则库0.6.0。简单确认先由本地完成，图片和复杂通知仍走后台模型。协议2支持reminder和原文提前量，协议1兼容旧格式。以下验证数字保留为历史版本记录，本轮验证见local-parser-validation-2026-10-12.md。

# 结构化理解链路与规范落实

需求来源：PRD第4、5节，即已整合的《拾时信息理解与提醒规范v0.2》。本文件记录实现状态，不替代或缩减PRD。

规范的当前实现映射见 `information-understanding-and-reminder-spec-v0.6.md`。运行时由 `understanding-rules.json` 提供编号产品规则，由服务完整追加到系统提示词；提示词文件主要维护输出合同和易错边界。本地通过ReminderSemantics、TemporalContextResolver和ReminderPlanner执行相同语义，不在运行时读取Markdown。

2026-10-09补充闭环修复：独立读取最新回答，排除旧问题中的日期/待定措辞；保存本地复核后的候选。完整日期/年份/早晚补充后，模型仍返回旧歧义时本地重新核对；时间与明确原文语义均可靠才恢复节点，否则保留答案进入可重试失败，避免再次发出同一道问题。补充分钟、中文星期加钟点、旧通知防覆盖和页面任务登记失败也加入回归。新增12条文字与4张合成图片，并把真实模型响应送入实际Android校验和提醒规划；详情见 `stability-validation-2026-10-09.md`。本轮保留工作区，不创建新的Git版本。

截至2026-10-09，可执行开发集包含56个文本与11个合成图片场景，新增成绩截图通知及消息日期补充、带时段的24小时钟点。文字集56/56、图片集11/11通过开发回归；结果仅保存在Git忽略目录，不能当作真实总体准确率或独立保留集验收。

## 本轮实现

简单文字 → 本地提取结构化候选；复杂文字/图片 → 用户配置并同意的服务 → DeepSeek → 结构化候选 → 服务端格式/原文依据检查。两条路径在Android汇合，共用原文依据校验、时间解析和提醒规划后保存并登记系统通知。图片使用原图的压缩副本直接发送视觉模型，没有OCR前置步骤。

主要文件：
- `server/understanding-prompt.md`：模型理解指令，保留条件、否定、时间精度、主体和必要歧义。
- `server/server.mjs`：无状态模型网关；供应商密钥只在服务端。限制输入大小、并发和超时并鉴权，对上游瞬时故障做有界重试，不记录输入或密钥。
- `Understanding.kt`：纯Kotlin候选结构与本地校验，模型不能直接给系统登记时间戳。
- LocalParser.kt：短文本优先本地处理明确提醒、默认事项策略、原文提前量与相对时长。已知单字段缺失本地生成选项，补充后先本地校验，复杂文本才请求模型。
- `ModelWorkflow.kt`：持久化结果，过期响应不能覆盖用户的编辑/完成/手动提醒；多事项等待选择。
- `ReminderPlanner.kt`：根据已经校验的开放、开始、截止和结束节点生成本地提醒记录；不让模型直接调度系统通知。
- `ModelClient.kt`：复用同一原始提交请求；对连接尚未获得HTTP响应以及CloudBase入口直接返回的瞬时429/502/503/504做最多三次退避重试，有限超时；仅允许HTTPS，debug版本额外允许127.0.0.1。

原始输入、提交时间、输入时区、候选、提醒计划与补充记录分开保存，重试不把相对日期参照改成重试日期。旧数据缺乏输入时区时不自动解释直接相对日期。SQLite从1升级到4，保留原文、标题、完成和提醒状态，并兼容旧版单次提醒。

必要确认由独立页面和处理状态通知承接。常见早晚、消息日期、年份和报名类别优先提供选项；通知栏显示最多两个快捷答案，“其他”进入应用补充。回答以补充记录保存，不写回原文。重新解析时按“用户补充信息、原始内容”构造模型输入，仍沿用首次`submittedAt`和时区，并执行相同的服务端依据检查与Android本地时间校验。复杂内容和本地仍无法理解的补充重解析由Android `JobScheduler` 在有网络时执行，应用不需要保持前台，也没有常驻服务。SQLite升级至版本4保存补充记录，兼容旧数据。

v0.7.3把展示问题与原始问题键分开。`ConfirmationFlow.prompt`把旧诊断映射为短问题，`context`只显示原文时间；通知不再拼接整段行动。选择仍通过原问题键保存回答，再执行相同后台重解析，已有必要确认事项也能使用新文案。

规则库`IU-07`约束简短行动和独立细则，`UN-05`约束清楚的短问题。`ContentPoints`统一提供列表、详情和提醒的阅读投影，旧长行动可按标点分行，保留括号与条件句；不改变事实、时间或状态。图片请求始终作为来源不确定的`share`输入，避免应用内上传被误标成用户直接说的相对时间。

文字模型请求使用`thinking=enabled`、`reasoning_effort=low`，图片使用`high`。禁用思考的关键集仅9/13通过；低强度图片试验仍出现噪声与日期冲突回归，未采用。图片转写先确定相关消息与日期分隔线，再从同一转写逐字复制依据，视觉折行可先还原为同一句；保留严格连续匹配。日期先选最近年份再核对星期，不按星期反推更远年份。

Android 12及以上优先申请加急联网解析；配额不足、拒绝或异常时回退原有持久化任务。两条路径都使用同一事项ID，已有任务不替换。该措施减少系统排队机会，不能保证在所有厂商或省电模式下立刻运行，也没有增加常驻进程。

## 本轮边界（未完成项）

- 自动安排已支持明确提醒指令、时间锚定且含义单一的简单直接输入，以及模型识别并通过校验的开放、开始、截止、结束和窗口多节点。当前试用策略为开放时、开始前30分钟、截止前1小时一次，结束不默认提醒；可手动覆盖为单次提醒。
- 重复和部分可靠/部分待定节点尚未完整接入，不能伪装成需用户补充的事实缺失。
- 相对时间来源缺失、日期星期冲突、预计等进入待补充；选项式一次确认、通知栏回答和补充后后台重新解析已经实现，仍需真机覆盖图片、多个问题、二次补充和系统回收后的恢复。
- 截图中的日期上下文会交给模型，但本地尚不能组合跨片段的日期依据；不会仅凭模型换算结果自动安排。
- 模型证据在文本中做连续匹配；图片依据仅能对照模型转写，不能证明转写完全正确。模型遗漏/改写仍需样本评估，不能声称准确率。
- 多事项选择、升级保留数据、后台解析和通知快捷回答尚待真机验证；没有连接设备时不能以构建成功替代验收。

## 开发联调

1. Node 24运行服务。供应商密钥和随机服务令牌填写在`.local/model.env`（Git忽略），参考`server/.env.example`。
2. 运行`./scripts/start-model-service.ps1`。若网络需代理，可由当前终端设置`NODE_USE_ENV_PROXY=1`和`HTTPS_PROXY`；不要将机器代理地址提交为产品默认配置。
3. USB调试授权后执行`.tools/android-sdk/platform-tools/adb.exe reverse tcp:8787 tcp:8787`。
4. App设置→模型服务：地址`http://127.0.0.1:8787`，填写本机`SHISHI_ACCESS_TOKEN`，阅读说明后同意保存。这里不是DeepSeek密钥。
5. 提交复杂文字或图片；已有待解析内容可点击“继续智能解析”。关闭服务时保留原文，显示失败并可手动重试。

本机联调仍可使用。2026-09-30起也可在App设置中主动选择腾讯云测试地址、填写对应服务访问令牌并同意保存；此后手机断开USB或电脑关闭仍可请求模型。已安排的本地通知始终不依赖电脑或云端。

腾讯云当前仅作为MVP测试服务：默认测试域名、最小副本0、最大副本1及单一共享令牌。供应商密钥不在APK或Git中。正式试用前仍需完成已备案自定义域名、每用户鉴权、令牌轮换、配额/费用记录和完整隐私说明。

## 验证

2026-10-09 v0.7.3修复：`明晚20:00`、`下午15:00`可复核，`上午15:00`保留冲突。补充消息日期2026年10月9日后，成绩截图通知识别为10月10日20:00截止、19:00提醒。121项Android测试及Lint通过，新增短问题/原问题键兼容、通知选项实际广播与重新排队、内容分行及条件保留、带时段24小时钟点与补充后的提醒规划检查；底栏默认内边距和字体上下留白已移除，文字在避让手势的按钮区域内居中。网关17项协议/鉴权/升级测试通过。真实模型文字56/56通过；图片试验阶段11个场景重复两次为21/22，漏掉一处星期冲突后加强先选年再核对星期规则，最终图片回归11/11通过。修正旧评测中无消息日期图片仍要求deadline、有冲突图片仅接受start而不接受unknown的标注矛盾；这些修正不放宽歧义检查。本轮未做Android 16真机验证。

本轮腾讯云`019`完成灰度发布，健康/鉴权及关键文字图片集8/8通过。三条文字的单次旧版/新版耗时分别为4.6/8.1、1.9/1.9、1.9/1.3秒，不能证明总体模型时延改善；系统排队、图片与弱网仍需真机分段计时，原环境变量与0–1副本配置保持。

2026-10-09修复记录：移除本地“含提醒我则在事项时刻通知”的特例，本地与模型候选共用`TemporalContextResolver`、`UnderstandingValidator`和`ReminderPlanner`。本地结果保存结构化原文时间，页面与通知使用规划器给出的同一条提醒；输入时刻和时区在提交开始固定，避免解析与持久化跨日使用不同参照。新增用户原句、是否含“提醒我”的一致性、两条路径的相同事实、开始不足30分钟、报名/自定义提前量分流，以及实际Activity持久化和系统登记回归；114项Android测试与Lint通过。导航安全区由底栏承接，连续分发系统Insets不重复增加间距。云端提示词与部署未变更；本轮未进行Android 16真机验证。

2026-10-08修复记录：联网任务补齐`ACCESS_NETWORK_STATE`，任务恢复保留已有系统任务；`needs_time`在入队前转为`pending_ai`。提交防连点并保留已保存的ID，调度失败不新增事项。简单明确时刻的直接输入可本地创建提醒，结果页显示实际登记状态。新增7项Robolectric API 34运行模拟，使用实际Activity、SQLite、JobScheduler与AlarmManager接口检查连点、重建、无时间待办、歧义流转、失败重试、恢复和通知完成；109项Android测试与Lint通过，没有连接Android 16真机。模型提示词与云端部署未变更。

`node --test server/*.test.mjs`验证协议、鉴权、图片请求、截断返回、瞬时上游故障和升级SQL；`scripts/build.ps1`验证Android构建/单测/Lint。`server/eval-understanding.mjs`可按文本/图片、直连/腾讯云和重复次数运行脱敏开发集，原始模型结果只写入`.local/model-results`。

`node --env-file=.local/model.env server/smoke.mjs`会真实调用DeepSeek，仅发送脚本内脱敏通知，结果写入Git忽略的`.local/model-results`。`--image`使用本机合成图片`.local/vision-fixture.png`，不自动读取用户相册或历史截图。

2026-09-29真实测试：报名窗口、粘贴“明天”、无时间条件待办及合成图片四例均返回通过结构检查的结果。第二轮分别约10.1秒、3.2秒、1.8秒、7.4秒，仅为少量开发样本；报名链接/负责人缺失曾引起过度确认，修订提示词后这四例未再出现该问题。不据此声明泛化准确率或最终时延指标。

2026-09-30腾讯云测试：`GET /health`返回`ok`，不带令牌的`POST /understand`返回401；携带轮换后令牌的脱敏会议通知返回一个候选和一个时间节点，合成通知图返回“读书会报名”、一个候选和两个时间节点。该测试证明公网文字/视觉链路和鉴权可用，不替代手机端、冷启动、真实图片大小和并发验证。

2026-10-06腾讯云部署记录`014`的首次连续公网评测出现1次尚未获得HTTP响应的连接失败，随后4次成功；据此将Android重试范围补充到这种入口前故障。更新后评测器按客户端策略运行，连续5次文字解析5/5通过，图片相对日期、改期与取消3/3通过且均为一次传输成功。最终超时边界修复以部署记录`015`承载100%流量，健康、文字和改期图片复测通过。该结果覆盖本次观测窗口，不等于长期可用性承诺，后续仍需手机冷启动和弱网验证。

同日将补充重解析规则部署到腾讯云并自动切换全部流量；缺失年份、补充消息日期和修正模糊午夜三例公网回归3/3通过，均在一次传输内完成。该结果验证当前测试服务已经理解新版客户端的组合输入格式，不替代真机页面和通知到达验证。

2026-10-07将早晚时段与补充重解析规则部署并自动切换全部流量。17条公网关键回归17/17通过，覆盖明确晚间、中文钟点、上午/下午/凌晨/中午、无时段1至12点、带冒号时刻、21点、九点半、回答“晚上9点”后的重解析，以及粘贴相对日期缺消息日期；每例均在一次传输内完成。手机端仍需验证页面呈现和实际提醒到达时间。

官方接口依据：[视觉输入](https://api-docs.deepseek.com/guides/vision/)、[JSON输出](https://api-docs.deepseek.com/guides/json_mode/)。本轮以实际调用验证配置模型`deepseek-flash`。

提速配置依据：[DeepSeek对话接口](https://api-docs.deepseek.com/api/create-chat-completion/)；系统任务依据：[Android JobInfo.Builder](https://developer.android.com/reference/android/app/job/JobInfo.Builder)。模型调用耗时仍会因上游负载、修复重试、网络和云端冷启动波动，小样本不能证明整体时延分位数。
