# P2–P4 实施与验收 状态:P1.1至P4已完成并验收。2026-08-31 用户授权连续推进到 P4,未达标就修复,不再逐步确认。 ## 全局约束 - 单机单用户 DSH 插件:Host + Web Client + 常驻 Python Core + 独立 SQLite;不建设独立应用。 - 不扩建防篡改、provider 账本或授权批次。真实模型调用为零,使用 fake provider。 - P2 干净重建,无旧数据迁移;不能静默删除未知数据。保留对外快照结构。 - 不靠每次读写重放历史来维护不变量;证据逐字定位和审核幂等必须保留。 - 按 P2、P3、P4 顺序过关。定向验证先行,最后跑实际受影响范围的集成验收;此前验收不冒充新实现证据。 ## P2:产品数据模型 Core 按 data-model.md 建立 documents/runs/generation_attempts/candidates/candidate_evidence/candidate_reviews/knowledge_points/knowledge_point_evidence/run_events/idempotency_records/schema_meta。 去掉 v8、fixture 课程、import_jobs 投影与单块正文。候选不变,审核决策独立,快照继续显示当前审核文本和状态。保留现有 RPC 参数和模型快照,事件按写事务追加。 验收:新库表集正确;TXT/Markdown → 生成 → 精确定位 → 接受/修改/拒绝 → 知识点闭环;修改前候选不变;Unicode 文档绝对坐标正确;重放审核返回首次结果且不重复写;恢复中断 attempt 与一次重试正确;读快照不重新定位/解析原输出/重放事件;现有 TS 契约与 fake-provider 闭环通过。 ## P3:输入和提取能力 增加有文本层 PDF 的导入与规范化正文,清楚提示扫描件/OCR 不支持、损坏或加密 PDF。长文按标题/段落与上限分块,每块记录文档绝对起点;短文 L1、普通长文 L2、较大结构化材料 L3 的路由必须实际改变提取计划,不只改标签。保持候选提案与审核分离,跨块合并同一知识点的不同精确证据,重复引文通过上下文消歧。 验收:本地生成的多页 PDF(含中文/Unicode)和长文 fixture 走 Host/Core/Client;每条保存证据满足 canonical_text[start:end] == quote;非首块的绝对坐标、多证据顺序和重复引文可见;实际计划覆盖全文,无遗漏尾段;fake provider 验证路由执行、进度、失败及恢复;模型费用为零。 ## P4:交付 提供本地安装包和普通用户可执行的安装、启动、升级、卸载命令及说明;提供 SQLite 一致性备份与离线恢复,恢复前保存现库,拒绝覆盖运行中的 Core。升级先备份,默认卸载保留用户数据。DSH rc.8 独立兼容性演练以真实可取得的包为准,不能仅修改版本文字宣称通过。 验收:隔离临时目录从 tarball 安装并启动 DSH,浏览器使用 fake provider 完成输入到知识点;重启后结果一致;备份→新增数据→恢复后回到备份结果;运行中恢复被拒绝且无数据损坏;升级保留知识点;卸载移除插件配置并保留数据。标准为所有必需检查通过且无未处理功能缺陷。不能取得的外部版本需明确记录阻碍,不伪造通过。 ## 进度 - P1.1:已完成,构建及 134 项定向测试通过(未提交工作区变更)。 - P2:已通过。Python 307 + 边界回归 6;TS 582;新 tarball 实际 DSH 浏览器 `evidence/client/20260831T050008Z` GO,三种审核、2 个知识点及刷新恢复。 - P3:已通过。实际DSH浏览器 `evidence/p3/2026-08-31T05-26-31-713Z` GO;PDF/L2/L3产出2/5/23知识点,逐字证据、尾段、刷新恢复、无效规划与显式重试通过。 - P4:已通过。真实DSH rc.8 `evidence/p4/2026-08-31T05-38-01-206Z` GO;tarball安装、浏览器提取、在线备份、活跃Core拒绝恢复、重启、全部产品表一致恢复、保留恢复前副本、不同版本升级和保留数据卸载通过。 ## 验收中修复的实际问题 - 最大合法正文的审核回执超过旧上限,接受/修改/拒绝被回滚:修正与新输入相配的大小限制,保留完整首次结果重放。 - DSH模型目录对象刷新导致恢复旧run并覆盖新run:分离模型读取与会话恢复生命周期。 - 前端UTF-16切片与Core Unicode字符坐标不一致:统一为字符切片,emoji前后证据可核对。 - 多候选撑出宿主视口、证据定位滚动整个宿主:限制工作区和候选目录滚动范围,只滚动原文区域。 - 长文计划预览暂时失败后无恢复按钮:增加只读重新读取计划,禁止未显示调用上限就重新生成。 P4验收脚本另外修正了telemetry枚举大小写及已有“run不存在”HTTP400契约的错误期望;不是产品缺陷。所有早期NO_GO证据保留,未用旧GO掩盖失败。