# 跃职：旧稿留存，不等于申请时版本封存

核查日期：2026-09-12。这是页面截图之后追加的独立接口核查，没有改动先前的原图或源产品。

## 这次实际做了什么

Coding Agent 在新建的隔离 SQLite 中，使用真实应用接口和合成资料，检查修改、读取历史、重新保存旧稿以及更换关联材料的行为。两条申请始终保持“待投递”，未登录生产账号、向招聘平台提交或调用外部模型。

历史核查包含 8 次初始化请求、26 次核查请求和 22 项观察断言。断言符合实际行为，也包含对现有缺口的确认，**不代表产品没有缺陷**。选定 13 个关键源文件的前后哈希一致；不是完整发布版本审计。

## 已验证的能力

- 定制简历的 V1 正文与 HTML 快照保留；编辑后新增 V2，版本对比能够识别新增内容。
- 读取 V1 正文，再经内容更新接口保存，生成 V3。V1、V2 不被抹去。
- 当前稿可以重新采用旧版正文；保存接口去除首尾空白并重新渲染 HTML。本样例原文 274 字符，重新保存后 273 字符，去除首尾空白后内容一致，字节哈希不同。**不是一键恢复整个旧状态。**

## 仍缺什么

同一申请的面试准备上下文跟着当前正文变化，而不是始终读取最初关联时的版本。关联模型只保存简历 ID，没有绑定版本号或正文快照。

对“换稿”分别核对了两条路径，不能把请求或响应里的 ID 当作已经完成的关联：

| 路径 | 实际观察 |
| --- | --- |
| 对已有申请调用 `prepare-batch`，请求另一份简历 | 响应带请求的简历 ID，但 `linked=false`；重新读取申请，仍是原先的关联。没有发生换绑。 |
| 普通简历已关联的申请，继续批量定制 | 同一申请确实改为关联新定制稿；旧稿仍能读取，时间线保留前后简历 ID，但没有具体版本或正文快照。 |

普通简历与定制简历不能混为一谈：本次普通 `/generate` 生成的简历没有版本记录，调用定制编辑接口返回预期的 404。

因此，当前能证明“旧定制稿可查、可重新保存”，还不能证明“每次申请当时使用的完整材料已封存”。下一步应设计明确的版本绑定和换稿留痕，再补修改、换绑、旧申请回查的验收。这是建议，尚未实现。

## 时间问题：已复现，未修复

独立的固定时间夹具确认，练习开始/结束时间缺少时区，时间线包含 UTC 时区。把源 Vue 格式化函数放到 Node / Intl 中执行：同一结束时刻，上海显示为 14:09 / 22:09，纽约为 14:09 / 10:09，印度为 14:09 / 19:39；UTC 下恰好一致。

这说明不能用“统一加 8 小时”修复。拟定方案是只规范练习历史接口的 UTC 时间输出，保留缺失值和开始/结束的真实间隔，不改变提醒输入或数据库。该方案尚未应用到源产品，没有把预期修复结果写成既成事实。

6 组序列化输入中，2 组无时区时间存在歧义；另外 2 组已有正负偏移，表示的瞬间正确，只是未满足拟定的统一 UTC 格式。Node / Intl 是代码级检查，不是四地浏览器实测。

## 核对材料

- [历史接口观察记录](history-probe.json)：包含真实响应状态、正文哈希、换稿前后 ID 与断言。
- [时间接口与序列化记录](time-probe.json)：固定合成时间，不代表实际完成面试。
- [四时区格式化记录](time-format-probe.json)：源页面格式化函数的 Node / Intl 结果。
- [材料清单与源码指纹](manifest.json)：各记录哈希、核查范围与选定源文件指纹。

本轮未验证已投递状态、浏览器中的历史恢复入口、外部状态回写、生产数据库或真实用户效果。应用层网络拦截用于隔离已知测试路径，不是操作系统级网络沙箱。主要核查与脚本实现由 Coding Agent 完成，不据此反推个人独立编码贡献。
