# 产物中心实现与验收记录 > 插件:`dsh-artifact-center` / `artifact-center` > 当前候选版本:`0.1.2`(此前`0.1.1`补丁包仍保留,尚未发布) > 更新日期:2026-10-14 ## 结论 P0–P7 主体功能已经实现,但不能把全部冻结验收项标成完成。本轮确认了真实 web Host 启动、列表与 Markdown/Mermaid 预览,并补上扩展名归一化、历史版本标题同步、清理失效记录后的恢复回填、超过100项批量回收站分批和缺失服务诊断等修复。 ## 已发布基线(公开端点核对) 2026-10-14 查询公开 npm registry,`dsh-artifact-center/latest` 为 **0.1.0**。 GitHub 仓库已有 `artifact`、`deepseek-harness`、`dsh-plugin` topic。 目录 PR **https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/7329** 为 open、尚未合并。 这些属于已完成的基线发布,不应重复创建目录 PR。 ## 真实 Host 与浏览器证据 - 隔离 `artifact-dev` profile 启动成功,版本 `0.1.7-rc.2-9d21963`。 - 全局面板能在无活动会话时打开,列出8个工作区。 - 状态接口:处理265/265份会话,145条索引,持久化可用。 - 两份旧会话被宿主迁移器拒绝:历史格式v0的 `message-edit/version` 事件不被识别。插件逐会话记录错误并继续回填,不修改原日志。因此这不是全部历史会话均成功回填。 - 真实 Markdown 文件渲染出标题与正文,没有预览错误。 - Mermaid 测试在真实浏览器中拦截文本响应注入最小测试围栏,确认懒加载后出现SVG。未修改真实文件。 - 搜索空态、清除筛选、收藏分类入口已验证。 - 批量回收站测试在浏览器中模拟101项列表与删除响应,确认请求拆成100+1;没有删除真实文件。 ## 0.1.2 血缘恢复验证 - 新增独立`provenance`权威记录与`active_turns`轮次检查点,存储规格v2兼容v1。现有记录升级时保留。 - `npm run check`通过;`npm test` **24/24通过**,新增覆盖列表缓存清空重建、写入缓存前中断、轮次开始后崩溃重启、已落盘结束轮次恢复并排除后续文件修改、隐藏快照产物恢复用户元数据、旧v1记录迁移。 - 真实Host首次发现表名`activeTurns`不符合后端命名约束而降级。修正为`active_turns`,将表名约束加入测试,再次启动后确认`persistent: true`,267/267会话已处理、146条索引保留;仅余两份原有宿主日志迁移错误。 - 只保证已采集血缘的派生缓存可重建。删除整个存储域、文件在采集前已变化、没有任何路径或检查点的历史产物,不能据此恢复。版本记录仍不保存历史文件字节。 ## 文件格式与界面纠正验证 - 按用户纠正,删除独立“展示文件类型”入口;仅在既有“可读取格式”中直接勾选/取消扩展名,选项来自Host当前`readableExtensions`,并保持原来的紧凑扩展名布局。 - 实际浏览器确认只有一个“可读取格式”标题、没有“展示文件类型”标题;取消`.md`后Markdown行隐藏,页面刷新后仍为未选中;清空后零行、零复选选中,全选后列表恢复。 - 这是列表显隐偏好,保存在浏览器;没有把这一操作伪装成修改Host持久化配置、删除文件或删除血缘。宿主索引范围仍由`readableExtensions`配置决定。 - 标签独立列、集中编辑对话框、大预览和图标工具栏保留。常规语法检查及24项既有回归测试通过;不将这些后端测试宣称为所有UI操作覆盖。 ## 可重复的浏览器回归 - `npm run test:ui`调用`scripts/ui-regression.mjs`,复用隔离Host与已认证的`artifact-p0`浏览器。所有API写请求被Playwright拦截,模拟记录只在脚本内存中存在;不写入真实索引、不调用系统打开或回收站,结束时恢复格式偏好和视口。 - 首次完整运行22/23通过,实际复现“保存标签会重置未保存的备注草稿”。修复客户端effect依赖并补上预览读失败、大文件、失效文件不读取内容等边界后,扩展版29/29通过。 - 通过项包括:标签长度校验、中文输入法Enter不提交、失败保留草稿、重试去重、备注草稿保留;实际更多菜单点击、信息栏默认隐藏、展开/分栏切换和760px窄视口。 - 预览覆盖Markdown+Mermaid、独立Mermaid、CSV的引号/逗号/多行单元格、Unicode TSV、JSON代码、SVG图片尺寸、HTML沙箱及脚本不执行、DOCX原生应用提示、有效WAV元数据、有效PDF响应与iframe。PDF只验证文件响应和原生预览框,不宣称逐页视觉或打印验收;媒体当前只验证WAV,不宣称全部编码格式。 - 万条模拟记录仅渲染20个行节点,切换排序至列表更新的一次本机测量为325ms,滚动到底可访问最后一条。该测量包含模拟JSON与UI更新,不代表真实磁盘回填吞吐或跨设备基准。 - `npm run test:locale`在真实设置页切换英文,确认侧栏标题、扩展名复选与预览工具栏均切换,3/3通过;结束时恢复原语言。浏览器脚本会检查CLI返回的报告,避免CLI错误被零退出码掩盖。 - `npm run test:native-trash`在提升系统权限后,使用唯一新建的随机文件完成真实Finder回收站往返:源文件消失、索引仍可按trashed检索、Finder恢复内容字节一致、validate清除missing/trashed并保留标签/收藏/备注,4/4通过。首次普通工作区权限运行因Finder TCC返回-10004,未把该次失败误报为产品失败。 - Host `Tool.listTools`当前目录可见`artifact_search`注册链路由插件代码接入;本轮未伪造真实LLM调度调用,插件单元测试覆盖工具执行与结构化内容命中。 ## 搜索工作区访问撤销与候选包检查 - 原实现沿用缓存的工作区列表。新增回归实际复现了移除工作区仍能搜索旧记录、改变同一工作区根目录仍能返回旧范围记录,以及多工作区并发刷新混合快照的问题。 - 检索开始刷新当前注册工作区,在内容读取前排除未注册ID及落在新根目录外的记录;刷新先构建局部完整数组再一次发布,避免并发混入。撤销搜索可见性不删除血缘或用户标签/备注;恢复同一ID及根目录后元数据仍在。 - 3项新增回归与原有测试合计27/27通过。这是工具执行函数和索引回归,不冒充真实LLM/Agent调度调用。 - `npm run release:check`核对候选包中的15项运行文件、渲染器、文档和许可证,同时逐字节匹配工作区及当前Git提交;拒绝开发缓存/测试目录进入包。已实际确认旧候选包因`core.js`过期被拒绝。 - 提交并重新打包后,检查生成以提交ID命名的本地完整性收据,含SHA-512、SHA-1及各文件SHA-256;它只证明本地候选包一致,不是npm发布成功收据。 - 本轮只读查询再次确认目录PR #7329仍为open、未合并;没有重复创建或改动已有PR,也未重试需要本机OTP的npm发布。 ## 代码覆盖与尚未验收项 | 阶段 | 实现与验证 | 未闭环部分 | |---|---|---| | P0 技术验证 | 真Host启动、侧栏挂载;认证/同源/路径/Range/CSP集成测试 | desktop宿主验收;所有原生打开方式与系统回收站实测 | | P1 索引 | 历史write/edit/present、快照diff、爆量折叠、游标、校检;0.1.2独立血缘与跨重启轮次恢复 | 无任何历史路径或检查点的文件不能补推;两份宿主旧日志仍拒读 | | P2 面板 | 分类、搜索、虚拟列表、排序、进度;万条模拟记录虚拟化与滚动末尾通过 | 真实海量历史吞吐与深浅主题专项验收 | | P3 预览打开 | Markdown/Mermaid、CSV/TSV、SVG、JSON、HTML沙箱、WAV、PDF框与响应,以及读失败/超限/失效边界通过 | PDF逐页视觉、视频与多编码格式、原生应用与跨平台实测 | | P4 元数据 | 标签校验/输入法/失败保留/重试去重浏览器通过,修复标签更新清空备注草稿 | 收藏、清单下载及真实对话版本导航的综合验收 | | P5 回收站 | 二次确认、macOS真实Finder移入与恢复、批量命令、索引标记与元数据保留 | Linux/Windows系统回收站与跨平台实测 | | P6 Agent工具 | artifact_search注册与结构化检索测试;Host工具目录可见接入链路 | 真实Agent调度中的端到端调用验收 | | P7 发布 | 0.1.0已发布、topic已设置、目录PR已开 | 本轮补丁版本发布收据;目录维护者合并 | ## 需求差异与限制 - `readableExtensions` 是当前实现与README明确的索引白名单,不只是预览能力表。白名单之外的显式交付也不进入索引。此行为比最初FR-A3/A4的“全部路径”范围更窄,需按后续白名单产品决策核对,不应静默移除该能力。 - `enableBetterSidebar` 尚未接入,不能宣称可选增强完成。自带Markdown/Mermaid不依赖它;已查询运行时契约但当前没有可查询的betterSidebar服务。上游公开服务主要是会话侧栏viewer注册,不能直接假设能在无会话全局面板中委托其渲染。 - 不转换Office文件;版本时间线保存产出来源与元数据,不保存旧版文件内容。 - 启动只恢复已有持久化检查点与对应结束事件的轮次;无结束事件的检查点保留等待同轮结束。FR-A9/A10通过独立血缘和检查点覆盖已采集数据的重建与恢复;不声称能从任意磁盘现状恢复全部历史。 ## 本轮补丁验证与发布 - `npm run check` 通过;`npm test` 18/18通过。 - 已生成 `.cache/dsh-artifact-center-0.1.1.tgz`,SHA-1为 `831b406a2987c29301c35742dc4ea4e0fe52c6be`。 - 本机 `npm whoami` 成功,但发布返回 `EOTP`。因此0.1.1尚未发布,等待用户在本机终端完成一次性验证码验证。不要将验证码发送到对话。 - GitHub推送第一次返回 `Empty reply from server`;改用HTTP/1.1并设置30秒低速超时后,仍返回低速超时。公开main仍为 `b838f23`,本轮修复只存在于本地提交中,未宣称已同步。已有topic和目录PR未重复创建。 - 本机命令:`npm_config_cache="$PWD/.cache/npm" npm publish .cache/dsh-artifact-center-0.1.1.tgz --access public --registry=https://registry.npmjs.org`。如交互要求验证码,仅在本机终端完成。 ## 本轮权限问题 Host首次启动被工作区沙箱拒绝写入 `~/.dsh/profiles/artifact-dev/cordis.yml`,授权后启动成功。 浏览器首次测试被拒绝写入 `~/Library/Caches/ms-playwright/daemon`,授权后浏览器与面板均正常。 第一次npm打包命中不可写的用户缓存;采用工作区 `.cache/npm` 后打包预检通过。没有修改用户npm缓存权限。 认证只使用用户本机已有登录态;如需重新登录或OTP,只由用户在本机操作,不索取或输出密钥。