# 申请简历封存：本地实施与验收

日期：2026-09-13。**已在本地实现并验证，未部署、未迁移真实数据库。**

## 修复了什么

将可编辑草稿、已确认简历和用户记录投递时采用的简历分开。确认材料不标记已投递；换稿追加确认记录；单次用户投递记录固定引用当时采用稿。来源简历之后修改，不会改写封存内容。旧申请没有记录当时材料时明确显示未知，不根据今天的稿件补造历史。

技术实现、回归测试与本轮验收由 Coding Agent 完成，不作为网站作者独立编写数据架构或真实投递效果的证明。

## 实际浏览器过程

使用全新隔离 SQLite、合成账号和合成岗位。API只预置资料、初始简历与待投递申请，没有预置材料确认或投递绑定。

随后在真实源产品页面完成：确认第一稿 → 编辑源简历形成第二稿 → 回查第一稿仍不变 → 填写换稿说明并确认第二稿 → 记录合成已投递状态、采用第二稿 → 再编辑成第三稿 → 整页刷新。刷新后仍能找到第一稿，投递采用稿仍为第二稿，当前草稿则是第三稿。

“已投递”是这次隔离验收中的本地合成标记，**没有操作招聘平台或提交真实资料**；产品本身记录的是用户自报，不是平台已接收文件的回执。

- [桌面材料状态原图](./desktop-summary.jpg)
- [手机材料状态原图](./mobile-summary.jpg)
- [手机采用稿与键盘焦点原图](./mobile-adopted-copy.jpg)
- [浏览器操作后的业务 API 回读](./after-ui-readback.json)：7 项检查通过，确认稿与使用指向可读取；该 JSON 本身不能单独证明浏览器操作。

三张图均为直接保存的原始 JPEG，未重绘或编辑。与 9 月 12 日旧演示截图分组，不冒充同一次流程。

## 修复前基线与自动检查

[修复前探针](./before-fix-probe.json) 在两个旧入口标记本地已投递后编辑源稿，都观察到申请上下文跟随新稿。18 条观察前置检查通过，4 条目标契约只有 1 条符合：其中两条未通过证明上下文漂移，另一条是新请求键重复操作增加事件的产品规则讨论，不能当作网络重试失效。探针没有调用真实招聘平台。

[回归汇总](./regression-summary.json)：96 项相关后端测试通过，包含 26 项材料专项（其中 6 项新增迁移测试）；源前端 47 个测试文件、207 项通过。计数有包含关系，不相加。后端为隔离 SQLite，不是 PostgreSQL 或所有后端测试。源前端声明的 oxlint 未安装，本轮未执行该 lint；不将组件编译和单测称为 lint 通过。

真实页面在 1440×960、1024×768、390×844 下检查无横向溢出。业务回读完成之后，发现既有模态焦点约束未包含原生 summary，补了三个 tabindex 属性。随后复验 Enter 展开、Tab 进入采用稿正文，手机焦点可见；[独立键盘复验](./keyboard-verification.json) 保留此处前后指纹，不冒充从第一次业务验收到最后每个文件都没变。

## 没有覆盖的范围

- 只做简历内容封存与单次用户记录绑定，不含求职信、附件原文件或二次补投。
- 保存正文和内部 HTML 不等于保留旧 PDF/DOCX 的原二进制与版式。
- 未验证 PostgreSQL 实例、完整历史迁移链、生产部署、外部模型质量或真实用户效果。
- 隔离采用应用层连接/子进程保护，不是完整 OS 沙箱。没有公开数据库、密码或认证信息。
- 原有 3D、作品集按钮样式、九张旧案例图片未修改；这些证据不会替代旧记录。
