Skip to content

静态博客与提示词管理后台重构交接清单 ​

更新:2026-09-24(收尾会话)。工作分支:codex/blog-backend-admin。工作树:/Users/chris/.codex/worktrees/blog-backend-admin/coding-blog。当前 HEAD:以 git log -1 为准(本文档随每次收尾更新)。

先读这两份文件 ​

  1. 已确认的设计:需求与边界的准绳。
  2. 14 项实施计划:逐项文件、测试和验收步骤。

目标:公开博客继续只从 VitePress Markdown、JSON 和静态资源构建,不从 MySQL 实时读取文章。后台只保留单管理员认证和私有的“提示词 + 一张生成图片”管理;元数据在 MySQL(coding_blog_qa),图片在 MinIO 私有桶 prompt-results。管理前端为 React。不要恢复 CMS、发布快照、数据库导出或后台部署/回滚链路。

状态:Task 1–14 全部完成,收尾复审已完成 ​

计划项状态与证据
Task 1–3 静态内容源 / 单管理员 / 删旧 CMS已提交并通过规格与质量复审(f34c18f、524b0ec、1bbe440、c21ea8e、0c1e75a)。
Task 4–7 持久化 / 图片校验与 MinIO / 服务层 / API已提交(935c093、20d30fb、33a8991、5ccacb9、b0e901f、409def8、ddb79fa)并复审。后端 mvn clean test 113/113。
Task 8 本地编排已提交 2c7ffe7;私有桶初始化与编排契约测试通过。
Task 9–12 React 壳 / 列表 / 上传 / 详情删除已提交 427d5ac、e8a774d、64e2e20、85c82b6、8b6b9f2、6afb26c、209ad2c。独立规格与质量复审已补做(2026-09-24),发现的问题已在 cac81c7 修复,详见下节。
Task 13 文档清理已提交 475a125。
Task 14 隔离 QA 验收已完成:coding_blog_qa 重建、私有桶就绪、smoke 冒烟(登录/CSRF/CRUD/签名预览/幂等删除/改密)、1440/768/375px 真实浏览器验收通过;docs/public 静态提示词档案经 git diff 确认未改动。

2026-09-24 收尾会话做了什么 ​

  1. 独立复审(规格 + 质量两个只读代理) 覆盖 64e2e20、85c82b6、8b6b9f2、6afb26c、209ad2c。结论:无 P0;规格复审 3 项 P1、质量复审 4 项 P2 及若干次要项。
  2. 按测试先行修复并提交 cac81c7(fix: apply prompt pages review hardening):
    • P1 列表卡片新增常驻删除入口(复用删除弹窗),删除当前页最后一条时页码自动回退;
    • P1 移动端(<768px)antd 按钮/输入/下拉与分页选择器最小高度 44px;
    • P1 过渡动画收敛为仅 transform(新增 CSS 契约测试锁定“仅 transform/opacity”与 reduced-motion 规则);
    • P2 ImagePicker 过期 onload 回调不再覆盖新图尺寸;列表快照补 size、卸载与刷新时保存、挂载惰性恢复消除恢复期双请求;删除弹窗重开清除旧错误;新增 api/prompts 契约测试(multipart 字段名/信封解包/分页参数),并移除手写 multipart Content-Type;
    • 次要项:复制失败给出原因与恢复办法并清理定时器、非法文件后重置 input 值、错误摘要改为按钮跳转聚焦字段且不再抢输入焦点、图片错误移到选择器旁、antd 6 弃用 API(Alert message→title、Modal maskClosable→mask)、as never 改联合类型、删除死代码、散落色值全部令牌化、aria-label 按码点截断、上传成功改 replace 导航。
    • 验证:前端 Vitest 60/60(8 文件)、生产构建(tsc + vite)零类型错误。
  3. 2026-09-24 补充修复 171dc97(fix: apply deferred admin review findings):登录页挂载后焦点移到标题(规格 §10.2,登录页在主布局之外)、应用级 ErrorBoundary 防整体白屏(含刷新操作,不泄露堆栈)、parseEnvelope 对 2xx 响应做信封运行时校验(网关返回 HTML 等非法结构时抛业务错误而非静默放行)。验证:Vitest 70/70(10 文件)、生产构建零类型错误。至此两份复审的发现已全部处置完毕(除“后端字段错误映射到控件”受后端契约限制不可实现,维持顶部错误摘要)。
  4. QA 验收数据清理:核对容器名严格为 /blog-qa-mysql-20260922、schema 仅为 coding_blog_qa 后,DELETE FROM coding_blog_qa.prompt_record(22 → 0);admin_user(1 条 QA 引导管理员)保留。注意:QA MinIO 桶中对应 22 张图片对象未清理(本次授权范围仅限该 MySQL 库),为无害遗留。
  5. 真实浏览器回归(2026-09-24 第二轮):重新引导 QA 管理员 qabrowser 后,在 QA 栈(后端 18080、前端 dev 5174)上以真实浏览器验证:登录跳转、列表卡片(描述性 aria-label 按码点截断、图片懒加载、元数据)、列表卡片常驻删除入口、删除弹窗(取消为初始焦点、Escape 关闭且焦点精确恢复到触发按钮)、确认删除后列表刷新回到空态、详情页完整元数据与复制提示词反馈、curl 会话验证登录/CSRF/multipart 创建/15 分钟签名 URL。375px 视口:网格单列 343px、scrollWidth-clientWidth=0(零横向溢出)、删除入口可见、按钮/输入为 44px 最小高度。375×1300 全页截图与 DOM 坐标逐项吻合(注意:IAB 在 667px 高小视口下截图管线会出现内容纵向重复的合成伪影,DOM 与几何校验证明页面本身单实例无重复,勿被该伪影误导)。两轮测试记录均经 API 删除流程清理,QA 库 prompt_record 归零。

尚待完成 / 需要用户决定 ​

  1. 根 README.md 与 .gitignore 的未提交修改 已解决(2026-09-24 用户确认):用户选择“丢弃,恢复已提交版本”。两个文件已 git restore 到 HEAD(README 回到准确的静态博客 + React 后台描述,.gitignore 恢复 VitePress 专用忽略清单);用户修改前的版本已备份到仓库外 ../user-pre-refactor-backup-20260924/(相对本工作树)。
  2. admin-frontend/.env.production 已解决(2026-09-24):文件仅含旧原型占位符 VITE_API_BASE_URL=https://your-domain.com,会被 vite 打进生产包导致 API 指向占位域名,与规格“同源 /api”相悖。已备份到 ../user-pre-refactor-backup-20260924/admin-frontend.env.production 后删除;重新构建确认产物不再含占位域名。部署到自有域名时如需覆盖 API 地址,应在构建时以环境变量注入,勿恢复该占位文件。
  3. 最终验证快照(2026-09-24,HEAD 43518da):后端 mvn clean test 113/113;前端 Vitest 70/70、生产构建零类型错误且产物不含占位域名;根 Node 测试 29/31(2 个失败为重构前既有 SkillsMP 快照计数漂移,证据 actual 1056 / expected 1055,与本次无关);git status 全净。
  4. prefers-reduced-motion 真实浏览器实测受工具限制未完成:IAB 浏览器面不提供 emulateMedia,macOS 系统级“减弱动态效果”默认关闭且不应替用户切换。已有 CSS 契约测试锁定规则;如需真机验证,可在系统开启减弱动态效果后复查。
  5. MinIO QA 桶(blog-qa-minio-20260922)遗留 22 个孤儿对象(本轮两次 API 删除测试对象已正确清理),可在下次 QA 重建时一并处理。
  6. QA 管理员已按规格 §12 引导流程重建:用户名 qabrowser(仅隔离 QA 库,localhost 绑定)。

工作树与安全边界 ​

  • 当前工作树 git status 全净(README/.gitignore 已按用户决定恢复,占位 env 已清理)。每项提交前检查 git status --short、git diff --cached --stat 与 git diff --cached --check,只暂存本任务文件。
  • 根 Node 测试的 2 项 SkillsMP 快照失败为既有问题;不要悄悄算作通过,也不要无授权顺手修改。
  • 原静态提示词图鉴 docs/public/gpt-image-prompts.json 及图片仍是公开静态页面的一部分,不得迁入新后台或覆盖。
  • 后端约定见 backend/AGENTS.md:Java 17、Spring Boot 4.1.1、MyBatis SQL 仅 XML、Flyway、中文 Javadoc。
  • 不复制真实 application-local 配置到仓库或镜像;保留 Maven 与 Docker 排除规则。
  • 不合并主分支、不建 PR、不删除生产数据/卷/桶;隔离 QA 库 coding_blog_qa 与 QA 容器除外(也须先核对目标)。

Last updated:

最后更新2026-09-24
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题