# 会话回落失败定性:执行计划 ## Phase A:原样复现与逐条账本 - [x] 记录 HEAD、工作区、Node/Playwright 版本、runner base origin 与 worker/retry 参数;不输出 secret 或完整连接信息。 - [x] 原样运行两份目标 spec(单 worker、无 retry),逐条对账历史 8 条。 - [x] 选择最短 global-search witness 与一个 R103 witness,必要时 `--repeat-each` 验证稳定性和顺序依赖。— Vite dev 历史 8 标题重复三次为 24/24;production preview 聚焦 R103 再次失败并保留 trace。 - [x] 在修改任何 fixture 前冻结基线结论与失败阶段。— 见 `research/execution-evidence.md`。 ## Phase B:三面证据与分类检查点 - [x] 以 test-side 安全 ledger 记录 cookie 名称/存在性、login/refresh/me 计数与状态、pathname 转移。— trace 白名单账本证明 hint 存在并触发 refresh,未记录值/header/body。 - [x] 做单变量控制;不得改业务断言、导航次数或认证产品代码。— session hint 已由 trace 反证,改用 production build 唯一新增变量 Service Worker;仅设置 `serviceWorkers: "block"` 后历史 8 条为 8/8 PASS。 - [x] 运行已有前端 bootstrap refresh 对照和后端 refresh rotation focused tests。— 前端 1/1、后端 route 30/30 PASS。 - [x] 如仍不能排除真实集成问题,先确认 loopback/local-regression target,再运行最小真实本地 session 完整导航 witness。— 仓库现成 `auth-security-local` 强制 loopback/临时库,真实 PostgreSQL/HTTP 认证回归 9/9 PASS,refresh/reset race 通过,临时库已清理;前端完整导航由独立 bootstrap Playwright 覆盖。 - [x] 按 PRD R3 写出 FIXTURE / PRODUCT / MIXED / INCONCLUSIVE-PAUSED 唯一分类、支持证据和反证。— 分类检查点为 `FIXTURE`,见执行证据。 ## Phase C:分类后的分叉 - [x] FIXTURE:先写分类检查点;可选实施最小 test-only 修复并复跑 8 条,测试变绿仅作支持证据,不替代分类。— 检查点已先写入,再将两处 context 设置认定为永久 test-only 修复。 - [ ] PRODUCT/MIXED:停止,不修改认证产品代码;提出独立认证缺陷 task、风险和 reviewer 要求。 - [ ] INCONCLUSIVE/PAUSED:记录缺失证据和恢复条件,不把未复现写成 PASS。 - [x] 所有分支均保留“不得以删除断言作为默认修法”,核对目标测试数和关键完整导航没有减少。— 两份 spec 仍为 15 tests;历史 8 标题及导航未删减,retry 仍为 0。 ## Phase D:验证与收口 - [x] 若有 test code diff:`cd client && npm run typecheck`。— PASS。 - [x] 两份目标 spec 和相关 auth 对照按最终分类复跑;不使用 retry 掩盖结果。— production-built preview 两份目标 15/15,前端 bootstrap 1/1,后端 route 30/30,真实本地 PostgreSQL/HTTP 9/9;均零 retry。 - [x] task/process/governance/sensitive/`git diff --check`。— 全部 PASS;敏感扫描 0 finding。 - [x] 评估是否需要更新前端/认证 spec;仅沉淀经实验确认的稳定合同。— 已在前端 spec 增加 production PWA build 下 route mock 必须阻断 Service Worker 的可执行合同、反例与测试要求。 - [x] 中文 commit 引用 `08-10-session-fallback-failure-classification`;不推送、不部署。— 用户已确认 commit 计划。 ## Risky Files / Stop Points - `client/tests/e2e/r103-cross-page-ui-consistency.spec.ts`、`global-search.spec.ts`:可以加安全 ledger/fixture 控制,但禁止删除业务断言或完整导航。 - `client/src/auth/AuthContext.tsx`、`client/src/auth/authService.ts`、`client/src/api/http.ts`、`server/src/routes/auth.js`:本任务中只读;一旦需要修改即按 PRODUCT/MIXED 停止。 - Vite proxy/config:只读核对;若发现 Host/Origin 漂移,不在本任务顺手修。 - 本地真实 session witness:必须先通过 loopback/local-regression target gate;门禁失败即停止。 ## Expected Evidence - 历史 8 条逐项映射表。 - 至少一个失败的安全 request/cookie/navigation ledger。 - session-hint 单变量控制结果。 - 前端 bootstrap、后端 rotation、必要时真实本地集成对照。 - 唯一分类与后续分叉,不以“8 条是否全绿”代替。