Phase 1
MOSS v2 验收报告
MOSS v2 验收报告
结论:通过 验收日期:2026-07-24 对应标准:09-v2-acceptance-standard.md
1. 基本信息
| 字段 | 内容 |
|---|---|
| 分支 | feat/moss-v2-plan |
| 基础实现 commit | 5ebc166 |
| 最终源码 | 本报告所在 commit;可用 git rev-parse HEAD 定位 |
| Node | v24.14.0 |
| 平台 | macOS / Darwin arm64 |
| 时区 | America/Los_Angeles |
| schema | PRAGMA user_version = 2 |
| 受控输入 | 996 条 X Bookmarks |
实施前工作区没有唯一的存量 data/moss.sqlite 可直接迁移,因此没有对个人唯一数据库执行破坏性验收。真实迁移使用从同一批 996 条受控输入构造的旧 schema 副本连续演练三次;Feedback ID、外键、时间和审计回填使用独立旧库 fixture 验证。
浏览器截图包含个人书签正文,只在本地验收任务中查看,不提交到仓库。报告保留不含正文、cookie、token 或密钥的数量与结果。
2. 自动化证据
测试
npm test结果:22 项通过,0 失败,0 跳过。覆盖:
- 996 条 Markdown 解析与严格 X 日期。
- URL v1 规范化和跨来源身份隔离。
- 空库、NULL URL、JSON 边界和高版本 fail-closed。
- 旧库字段、Feedback、Audit Event 迁移与三次重复启动。
- 非法日期和迁移审计中途失败的整体回滚。
- 导入、Feedback、Signal Run 与 Audit Event 的事务一致性。
- 连续 Feedback 历史与“最新事件作为当前值”。
- Signal 缓存、Import/Feedback 自动失效、强制刷新与最后稳定批次。
- 规则评估失败和发布失败。
- 五条规则的上下边界。
- Feedback 与 Signals Route Handler 契约。
- SQLite 在线备份完整性。
可复现迁移与性能验收
npm run verify:v22026-07-24 结果:
| 指标 | 结果 | 标准 |
|---|---|---|
| 996 条旧库迁移,3 次 | 11.78 / 11.28 / 10.64 ms | 每次 < 60 s |
| 迁移字段抽样 | 每次 20 条,全部一致 | 不少于 20 条 |
| Category + Author 查询 p95 | 0.010 ms | < 200 ms |
| Feedback Route Handler p95 | 0.147 ms | < 500 ms |
| Today 缓存命中 p95 | 0.085 ms | 不新增 run |
| Calibration 生产 SSR p95(预热 3 次,采样 10 次) | 393.28 ms | < 2 s |
| integrity | ok |
ok |
| foreign key failures | 0 | 0 |
查询计划分别命中:
content_items_x_category_idx
content_items_x_author_idx生产构建
npm run build结果:TypeScript、路由收集和生产构建通过;四个工作台路由和两个 Route Handler 均在构建清单中,无重复根路由。
3. HTTP 验收
在隔离数据库导入 996 条内容后启动 loopback 生产服务:
307 /
200 /today
200 /knowledge
200 /governance
200 /calibration
405 GET /api/feedback
405 GET /api/signals/refresh
400 malformed POST /api/feedback
404 missing content POST /api/feedback连续 20 次真实 HTTP Feedback:
| 指标 | 结果 |
|---|---|
| 成功请求 | 20 / 20 |
| median | 1.15 ms |
| p95 | 2.52 ms |
| max | 31.12 ms |
| Feedback Events | 20 |
| Feedback Audit Events | 20 |
SQLITE_BUSY / 丢失 |
0 |
服务只监听 127.0.0.1,仓库没有反向代理、隧道或公网监听配置。
4. 浏览器与响应式验收
浏览器逐页检查以下 20 个组合:
1440 × 900 × 4 routes
1280 × 800 × 4 routes
1024 × 768 × 4 routes
768 × 1024 × 4 routes
390 × 844 × 4 routes结果:
- 每页恰有一个 main、Sidebar 和 Inspector DOM,不存在嵌套外壳。
- 20 个组合均无页面级横向溢出。
- 1440、1280、1024 显示桌面 Inspector。
- 768 隐藏 Inspector,但“打开上下文面板”可用。
- 390 隐藏 Sidebar,显示可打开/关闭的移动主导航和 Inspector 入口。
- 主导航可由键盘 Escape 关闭,焦点恢复到触发按钮;点击链接后 Sheet 自动关闭。
/重定向/today;前进、后退后 pathname 与导航高亮一致。- Calibration 移动 Inspector 可打开,Escape 关闭并恢复焦点。
- 所有普通链接补有统一
:focus-visible样式;核心导航和 Feedback 不依赖鼠标。
浅色与深色关键文本对比度抽查:
| 主题 | 最低抽查值 | 标准 |
|---|---|---|
| 浅色 | 5.35:1 | 普通文字 ≥ 4.5:1 |
| 深色 | 7.72:1 | 普通文字 ≥ 4.5:1 |
浏览器和服务端未出现应用运行时 error。开发服务曾在生产构建覆盖 .next 后出现一次缺失 chunk;停止并干净重启开发服务后消失,属于运行手册已记录的“不要并行 dev/build”约束,生产构建与干净启动未复现。
5. 关键交互验收
Feedback → Today → Governance
- 在 Calibration 第一条内容提交“值得关注”。
- 卡片立即显示最新值,刷新后仍一致。
- SQLite 新增 1 个 Feedback Event 和 1 个 Feedback Audit Event。
- 打开 Today 后输入版本从
2:0变为2:1。 - 旧 Signal Run 变为 superseded,新 run 成为唯一 active。
- 强制刷新发布第三个 run;随后普通刷新不新增 run。
- Governance 可读取对应 Feedback 和 Signal Run Audit Event。
刷新按钮成功显示“已发布 20 条信号”。客户端对 5xx 与网络失败均保留现有信号并显示错误文案;服务端发布失败回滚由自动化故障注入验证。
空数据库
使用独立 schema v2 空库在 390 × 844 检查四个路由:
- Today 显示
npm run import:content指引。 - Knowledge 显示真实零值与导入指引。
- Governance 显示无 Audit Event 空态。
- Calibration 显示“尚未导入内容”与导入指引。
- 四页均无横向溢出、404 或 500。
- 空库
integrity_check = ok、外键错误 0、Signal Run 0。
6. 恢复验收
自动化使用 better-sqlite3 backup() 生成一致性快照,并在只读恢复副本上验证:
| 对象 | 恢复结果 |
|---|---|
| Content Item | 1 |
| Feedback Event | 1 |
| active Signal Run | 1 |
| Audit Event | 3 |
| integrity | ok |
| foreign key failures | 0 |
运行手册同时给出 SQLite .backup、隔离恢复演练和实际恢复步骤。故障注入均使用临时副本,未覆盖有效数据库。
7. 最终数据对账
本地运行数据库在手工验收前后:
| 指标 | 验收前 | 验收后 | 解释 |
|---|---|---|---|
| Content Items | 996 | 996 | 无差异 |
(source, source_id) 唯一身份 |
996 | 996 | 无碰撞 |
| Feedback Events | 0 | 1 | 手工验收新增 1 |
| Import Runs | 2 | 2 | 无差异 |
| Signal Runs | 1 | 3 | Feedback 自动失效 + 强制刷新 |
| active Signal Run | 1 | 1 | 始终唯一 |
| Audit Events | 3 | 6 | Feedback 1 + Signal Run 2 |
| 孤儿 Feedback | 0 | 0 | 无差异 |
| 孤儿 Signal | 0 | 0 | 无差异 |
| integrity | ok |
ok |
无差异 |
8. 验收项汇总
| 类别 | 通过 | 失败 | 未执行 |
|---|---|---|---|
| 构建与静态检查 | 5 | 0 | 0 |
| 迁移 | 9 | 0 | 0 |
| 身份与导入 | 10 | 0 | 0 |
| Feedback | 7 | 0 | 0 |
| Signals | 9 | 0 | 0 |
| API | 8 | 0 | 0 |
| 查询 | 8 | 0 | 0 |
| 路由与共享壳 | 7 | 0 | 0 |
| Today | 8 | 0 | 0 |
| Knowledge | 7 | 0 | 0 |
| Governance | 8 | 0 | 0 |
| Calibration | 8 | 0 | 0 |
| 响应式与可访问性 | 8 | 0 | 0 |
| Recovery | 3 | 0 | 0 |
| Performance | 5 | 0 | 0 |
最终无 Blocker、Major 或未登记 Minor。MOSS v2 按本轮边界验收通过。