update:增加文档模式

This commit is contained in:
dlandy
2026-04-15 13:47:39 +08:00
parent e04405d0bc
commit 8973d46a42
38 changed files with 2193 additions and 83 deletions

View File

@@ -3,42 +3,70 @@
## 基本信息
- **技能**: executing-plans
- **主题**: 用户手册详情页(支持 Markdown
- **开始时间**: 2026-04-11 10:26
- **最后更新**: 2026-04-11 11:28
- **主题**: 网页工具维护版本字段
- **开始时间**: 2026-04-14 18:11
- **最后更新**: 2026-04-15 09:50
## 当前状态
- **阶段**: 阶段 3完成与报告
- **上一步**: 已完成全部 6 个任务,并通过前端测试、客户端构建、服务端单测、服务端 e2e 与服务端构建
- **下一步**: 输出完成报告并结束本轮执行
- **阶段**: 阶段 2执行任务
- **上一步**: 已完成任务 5后台表单、列表和概览已补齐 `versionOverride` / `displayVersion` / `none` 模式 UI 支持,并完成前端回归
- **下一步**: 等待用户验收;如继续扩展,可补管理端更高层级交互测试或继续清理构建体积告警
## 已确认内容
- 2026-04-11 10:26-需求目标是增加一个新的详情页,可显示 Markdown 格式的用户手册
- 2026-04-11 10:26-主站当前没有独立详情页,详情内容以弹窗形式展示
- 2026-04-11 10:26-前端已存在 Markdown 渲染工具,可作为后续方案基础
- 2026-04-11 10:27-详情页主要用户为普通访客
- 2026-04-11 10:31-详情页交互方式为站内路由跳转
- 2026-04-11 10:32-用户手册内容来源先复用现有 `description` 字段承载 Markdown
- 2026-04-11 10:33-旧的详情弹窗将被新详情页替换
- 2026-04-11 10:37-本次实现范围包含详情页空状态、404 状态与返回入口体验
- 2026-04-11 10:39-验收标准为长期可用,要求详情页具备清晰信息结构
- 2026-04-11 10:42-边界情况需覆盖直达路由、空内容、404 及超长 Markdown 阅读体验
- 2026-04-11 10:58-最终方案为基于 `slug` 的详情页路由与详情接口
- 2026-04-11 11:02-规格文档已获批准,开始编写实施计划
- 2026-04-11 11:05-实施计划已保存,包含 6 个按 TDD 拆分的执行任务
- 2026-04-11 11:08-执行前检查发现当前分支为 `master`,按技能规则需用户确认后才能继续
- 2026-04-11 11:09-用户已确认允许在 `master` 分支执行计划,任务 1 开始
- 2026-04-11 11:12-任务 1 完成:前端测试基建建立,`markdown-outline` 工具和测试通过
- 2026-04-11 11:17-任务 2 和任务 3 完成:后端 `slug` 详情服务单测和控制器 e2e 通过
- 2026-04-11 11:28-任务 4、5、6 完成:公开详情页、首页路由跳转、目录阅读体验和后台文案已落地并完成最终验证
- 2026-04-14 18:06-项目为 Vue 3 + NestJS + Prisma 的工具站,工具实体区分 `web``download` 两种访问方式
- 2026-04-14 18:08-下载工具的版本来自 `ToolArtifact.version`,网页工具 `Tool` 本体目前没有独立版本字段
- 2026-04-14 18:10-前台首页和详情页当前都显示“版本”,但仅下载工具会返回 `latestVersion`,网页工具会显示“暂无版本”
- 2026-04-14 18:11-后台新增/编辑工具表单当前没有网页工具版本输入项
- 2026-04-14 18:13-用户确认版本字段采用“后台维护 + 前台展示”方案,需在访客端列表页和详情页展示
- 2026-04-14 18:15-用户选择混合模式:`web` 工具有独立版本字段,`download` 工具默认取 `latestArtifact.version`,并允许单独覆盖展示版本
- 2026-04-14 18:15-访问方式需要新增“无”模式,该模式也要支持维护版本
- 2026-04-14 18:17-关于“无”模式的访客端行为,用户连续回复了 `1``3`,当前需要进一步确认最终选择
- 2026-04-14 18:18-用户最终确认“无”模式采用详情引导:列表页主按钮为“查看详情”,详情页不提供打开/下载按钮
- 2026-04-14 18:20-用户确认版本字段仅用于展示,不参与发布校验,现有发布规则保持不变
- 2026-04-14 18:21-用户确认完成范围为“常规完整”:后台工具列表也显示版本和访问方式 `none`,相关接口统一返回展示版本
- 2026-04-14 18:24-用户选择方案 2使用 `Tool.versionOverride` 存储覆盖版本,由服务端统一计算 `displayVersion`
- 2026-04-14 18:29-规格文档已写入 `design/specs/2026-04-14-tool-display-version-none-mode-design.md`
- 2026-04-14 18:43-实施计划已写入 `design/plans/2026-04-14-tool-display-version-none-mode-plan.md`,按单一子系统拆为 5 个任务
- 2026-04-14 18:49-已切换到 `executing-plans` 技能并完成计划审阅;当前分支为 `master`,按执行规范需用户确认后才能继续执行
- 2026-04-14 19:20-用户确认继续在 `master` 上执行;任务 1 完成`ToolsService` 与公开详情 e2e 已验证 `displayVersion`,本地数据库已手工应用 `version_override`
- 2026-04-14 20:10-任务 2 已完成,后台 DTO、后台工具服务与种子数据已支持 `versionOverride``accessMode=none`,并通过相关 Jest 用例
- 2026-04-14 20:40-任务 3 已完成,`none` 模式 launch 已在服务端返回 `409`,后台概览已补 `noneToolTotal`,相关单测与 e2e 已通过
- 2026-04-15 09:27-任务 4 已完成,公开站首页与详情页已统一展示 `displayVersion``none` 模式按“查看详情/无主按钮”行为闭合,公共前端 Vitest 已通过。
- 2026-04-15 09:49-任务 5 已完成,管理端表单新增展示版本输入,访问方式支持“无”,工具列表新增版本列,概览显示 `none` 模式统计;新增 4 个管理端组件测试并通过,前端构建通过。
## 待处理问题
- [x] 任务 1前端测试基建和 Markdown 目录工具
- [x] 任务 2后端按 `slug` 查询详情的服务层能力
- [x] 任务 3公开详情 `slug` 接口和后端 e2e
- [x] 任务 4公开详情页路由、API 接入和页面状态
- [x] 任务 5首页详情弹窗替换为路由跳转
- [x] 任务 6长文阅读体验、后台提示文案和整体验证。
- [x] 网页工具版本字段的主要使用对象是谁,以及它需要出现在哪些页面或接口里
- [x] 版本字段是否仅适用于 `web` 模式,还是所有工具都应统一维护一个主版本
- [x] 版本字段是否参与发布校验、排序、筛选或审计记录
- [x] “无”访问模式在访客端的按钮、详情页主操作和可见性规则
- [x] 版本字段和“无”模式需要覆盖到哪些后台页面和接口返回
## 执行状态
### 计划信息
- **计划文档**: `design/plans/2026-04-14-tool-display-version-none-mode-plan.md`
- **开始时间**: 2026-04-14 18:49
### 任务进度
| 任务 | 状态 | 完成时间 | 备注 |
|------|------|----------|------|
| 任务1先锁定 Prisma 契约和公开接口版本映射 | 已完成 | 19:20 | `schema-engine` 被沙箱拦截,改为手工 migration SQL + raw SQL 应用列变更 |
| 任务2补齐后台工具服务对 `versionOverride``none` 的支持 | 已完成 | 2026-04-14 20:10 | 后台 DTO/服务/seed 已对齐,并通过 Jest 回归 |
| 任务3封闭 `none` 模式的 launch 语义并补齐概览统计 | 已完成 | 2026-04-14 20:40 | `none` launch 返回 `409`,概览统计补齐,单测与 e2e 已通过 |
| 任务4更新公开站首页与详情页统一消费 `displayVersion` | 已完成 | 2026-04-15 09:27 | 列表/详情统一显示 `displayVersion``none` 模式行为闭合Vitest 通过 |
| 任务5补齐后台表单、列表和概览对新字段的 UI 支持 | 已完成 | 2026-04-15 09:49 | 表单/访问方式/列表/概览已支持 `versionOverride``none`,组件测试与构建通过 |
### 遇到的问题
| 问题 | 解决方案 | 解决时间 |
|------|----------|----------|
| 当前工作分支为 `master`,执行规范要求先确认是否允许直接在主分支改动 | 用户已明确确认继续在 `master` 上执行 | 19:20 |
| `jest` 默认 worker 在沙箱中触发 `spawn EPERM` | 改用 `npx jest --runInBand` 单进程执行测试 | 19:14 |
| `prisma migrate dev``schema-engine` 在沙箱中触发 `spawn EPERM` | 手工创建 migration 文件,并通过 Prisma raw SQL 为本地 SQLite 添加 `version_override` 列 | 19:18 |
| `client` 本地缺少 `vitest` 依赖,`npm run test:run` 无法直接执行 | 在 `client` 目录执行 `npm install --no-save vitest@3.2.4` 后,统一使用 `npx vitest run ...` 执行前端测试 | 2026-04-15 09:00 |
| Element Plus 的 `dialog/table` 在 jsdom 下不稳定渲染测试文本 | 为管理端组件测试增加轻量 stub直接覆盖组件分支逻辑避免把断言绑定到第三方渲染细节 | 2026-04-15 09:46 |