# 验证状态与验收对照 > 面向开发者/维护者的技术文档。测试、E2E 与跨代兼容的完整记录。 ## 验证状态 - **单元/集成测试**:90 个全绿(host + client 双端构建通过;`npm run typecheck` 因 dev 环境双副本 `@deepseek-ai/dsh-session` 有预存依赖类型噪音,构建不受影响——本轮改动后噪音错误较基线净减 5 条,无新增) - **独立实例线上 E2E(Playwright 无头真点 UI)**:按钮渲染→开面板→自定义时间→确认→芯片出现→任务列表可见→**到期真触发(≈计划 75s,实测 72s)→对话出现 `user/message`(source=plugin:later)**;磁盘日志逐条确认 create→owned→dispatch→followup 全持久化、无重复触发。 - **内核代次兼容(2026-09-07 实测)**:`0.1.1-rc.2` 与 `0.1.2-rc.1` 两代均通过 host 入口链接(运行时符号 17/17 存在)、headless 真实启动(停在 `MISSING_CREDENTIAL`,在插件加载之后)与 web 真实启动(`lib/client.js` HTTP 200)。跨代做法有三处: 1. **peer 枚举完整覆盖**:除了 `dsh-schedule / dsh-session / dsh-session-projection`,把宿主直接 import 的 `@deepseek-ai/{cordis,dsh-agent,dsh-commands,dsh-llm,dsh-settings,dsh-tools,schemastery}` 全部列入 peer + dev——`0.1.1-rc.2` 经 `dsh-schedule` 传递提升到顶层 `node_modules/@deepseek-ai/` 时这些包是可达的;`0.1.2-rc.1` 的 hoisting 策略变化把它们留在 `.pnpm/`,**未声明 peer 的会运行时报 `ERR_MODULE_NOT_FOUND`**(已实测 `lib/runtime.js` import `@deepseek-ai/dsh-llm` 在 0.1.2 直接崩)。 2. **设置命名空间**写作 `'dsh-later' as SettingsNamespace`(`settingsNamespace()` helper 在 `0.1.2` 已删除,运行时导入会让整个模块链接失败)。 3. **设置卡片所需的 `SettingsScope`** 在 `src/client/components/SchedulerSettingsCard.tsx` 内本地声明,不从 `@deepseek-ai/dsh-client-runtime/client` 取类型——该包是 `0.1.1` 内核特有,`0.1.2` 已拆走,且同名 `SettingsScope` 在 host(`dsh-settings`)与 client 两侧成员并不相同。peer 为逐代枚举 `^0.1.1-rc.2 || ^0.1.2-rc.1`(node-semver 不把预发布版算进任何范围,除非比较符带同一 `[major.minor.patch]` 元组,故无跨代区间写法):**上游每发布新 rc 代次就要补一个枚举项**。 - **Session API 跨代(user-tools `foldUserState`)**:`0.1.1` 暴露 `session.events` + `session.header.seedLength`;`0.1.2` 改名为 `session.ownEvents()` + `session.inheritedEventCount`(`SessionLogOffset`)。代码走鸭子类型双轨探测,不引入 `any`,cache key 维度同步替换为 `inheritedEventCount`,foldScheduleEvents 第二参数透传 runtime 值。 ## 验收对照(v1.0.0) | 编号 | 场景 | 落地 | |---|---|---| | AC-01 | 输入内容点击 ⏰ | ✅ 线上 E2E 实测:按钮渲染、面板可开 | | AC-02 | 智能时段确认 | ✅ 线上 E2E 实测:自定义时间→确认→芯片显示|任务列表 | | AC-03 | 过去时间拒绝 | 面板校验 + 宿主 `not_future` 兜底 | | AC-04 | 到期注入消息 | ✅ 线上 E2E 实测:到期(≈计划 75s)后对话出现 user/message(source=plugin)| | AC-05 | 关网页重开仍在 | 事件日志持久化 + `userSchedules` 投影冷恢复 | | AC-06 | 草稿变更 | 有意取舍:不静默取消(见 [设计决策 §4](./design-decisions.md)) | | AC-07 | fork 不继承 | `session/end-seed` 重置 | | AC-08 | 100 并发创建 | agent 事务串行化 + 单 session 上限 100 | | AC-20 | 与 dsh-schedule 共存 | `schedule/change` 荷载零改动(严格兼容) |