视觉按最新原型,业务按已确认PRD。现有代码为满足设计而改造。执行见按设计实施与任务卡;当前代码与验证范围见消费者功能页。
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/媒体证明发行者。