# A03 追加：撤销后的在途个人写入

根代理提出具体时序调查，作者用真实 Better Auth、PostgreSQL 18 和 HTTP 复现了第三个 P2，并完成最小修复。作者回归通过后，根代理另写隔离脚本，完成去除新增检查的对照复现及当前版本的 7 组独立验证。此前批量撤销的子 agent 复审与本次根复验分别记录，不合并为同一验证来源。

## 实际问题与修复

旧实现仅检查账号是否停用。普通 Web 会话已经通过 HTTP 鉴权后，report 等待 owner 行锁；此时官方退出真正删除了该身份会话。释放行锁后，旧 report 仍返回 200，写入 sequence=1、position=18，账号 owner 保持活跃。

只改 `services/platform/src/state.mjs`、`platform.mjs` 和既有 `tests/lifecycle.test.mjs`。HTTP composition 显式传入官方 `get-session` 的 session.id，不读取 body 中的 userId/authSessionId。缺失官方 ID 传 null，不能通过省略该参数走受信导入调用的兼容路径。

四个个人写操作使用同一个事务入口：following/update、playback/begin、playback/report、history/delete。锁序是原有表锁 → E00 owner → 官方身份 session FOR SHARE → consumer_state_owner。身份行必须存在、属于同一 userId，且未过期；失败返回 login_required/401，事务回滚。这个检查使用同一个 connection，没有新增表、身份存储、指纹或协议。

真实官方身份 DELETE 与 FOR SHARE 冲突，必须等待先进入的写事务完成；删除已经完成后，旧写入不可能取得有效身份行。直接导入的受信 State 调用仍可省略 authSessionId，其用途是内部服务组合，不是公共认证入口。

## 作者验证

- 定向 personal-state：9/9，1.662 秒。
- 完整生命周期：22/22，7.664 秒。
- 全平台：133/133，19 顶层组，13.743 秒，包含根代理的双邮箱真实框架测试。
- 三个变更文件语法检查通过。
- 所有测试进程退出码 0；数据库位于 helper-owned RAM 容器，HTTP 使用随机 loopback 端口，没有生产行为或真实邮件。

新用例验证：report 删除后 401/sequence=0/position=0；following、begin、history delete 在相同时序下不写；请求 body 里的另一个有效会话 ID 不能替换旧 Cookie 的身份；鉴权后过期、错 owner、缺失/null ID 拒绝；受信直接域调用兼容。另用实际 pg_stat_activity 验证官方 DELETE 等待会话共享锁，释放写事务后才删除身份行。

旧问题与修复后的定向日志分别保存在工作目录的 `a03-revoked-session-before-fix.log`、`a03-revoked-session-after-fix.log`，没有记录 OTP、Cookie 或会话 token。

## 根代理独立复验

使用新建的 helper-owned PostgreSQL RAM 容器、真实 Better Auth HTTP、随机本地端口与本地捕获的邮件。没有调用作者的生命周期测试模块。根代理保存当前源代码及迁移的工作副本，只在对照副本去除新增身份行检查，保留其余行为。

对照副本中：旧 Cookie 的 report 通过认证、等待 owner 行锁；官方退出删除身份后，旧 report 仍返回 200，sequence=1、position=23。当前副本相同时序返回 401，sequence=0、position=0。

| 独立检查 | 当前结果 |
| --- | --- |
| report、following/update、playback/begin、history/delete 在鉴权后等待、退出再释放锁 | 4 组均返回 401；原位置、会话数量、追剧与历史删除版本不变 |
| 请求 body 提供同用户另一条有效身份会话 | 不能替换 Cookie 捕获的已撤销身份；另一会话仍有效 |
| 鉴权后等待期间身份过期 | 401，原 sequence 不变 |
| 错 owner、缺行、null、空 ID；有效 Cookie 携带他人 body 身份 | 4 种受信参数错误均拒绝；有效 Cookie 仍只写自己的记录 |
| 写事务先取得身份共享锁、随后官方退出 | 实际 pg_stat_activity 确认 DELETE 等锁；原写事务提交后退出才完成，身份行随后为 0 |

独立脚本合计 7 组通过，退出码 0；对照复现退出码 0。证据保存在 `work/account-write-root-review/check.mjs`、`before.log`、`after.log`；输出只记录状态、数量与位置，不输出 OTP、Cookie 或 token。复验后 HTTP、连接池与两个隔离容器均关闭。

## 交接边界

第一段两个批量 P2 和单条故障已有子 agent 独立前后证据；本段第三项已由根代理独立复验关闭。原追加子任务工具退出，没有产生可引用的新独立测试结果；本段通过结论仅采用根实际运行的上述证据。没有增加批准流程、改变框架返回、改动媒体转发、启用账号注销或触及真实 App/媒体证明发行者。
