文件
hyb-oa/.trellis/tasks/archive/2026-10/09-07-e2e-auth-preconditions/implement.md
T
wangsli和Claude Opus 5.5 314274b5a9 归档登录前置条件任务:已完成范围收口,后续阶段取消(09-07-e2e-auth-preconditions)
- 已完成:立项与认证状态合同、阶段 0 取证(用户独立复核批准,AC1)、在线对照
- 阶段 1 迁移、回归、矩阵验证与独立复核未获批未执行,按取消记录,AC2–AC6 不补勾
- 环境启动合同与登录后线上冒烟由发布门禁任务跟进

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 10:47:32 +08:00

9.8 KiB
原始文件 Blame 文件历史

E2E 认证前置统一 — 执行与批准清单

当前状态

  • 2026-10-11:已完成范围收口,后续阶段取消(未获批、未执行,不计通过);详见 prd 顶部收口记录。登录后线上冒烟与环境合同由发布门禁任务跟进。以下为历史状态。
  • in_progress / inline。创建轮使用 task.py create --no-start;用户随后明确批准阶段 0,已 task start 切换到本任务,不授予阶段 1 批量修改权限。
  • 门禁任务获准 21 文件逐字节未动;HEAD=66f25b1,本地 origin/main=492920c。新任务独立、非子任务,未转移合同阶段 B 的业务验收责任。
  • 创建轮只读已有 single trace;随后在阶段 0 授权内实际执行一次原合同用例的观测实验,结果 timedOut,未改真实源码。新现场条件与旧 trace 严格分开,见 design.md §1/§3.1。
  • 两个 manifest 保持为空,符合 inline 合同;受影响规约按步骤读取指定章节,不将超出注入上限的大文件登记成可完整自动注入的上下文。未来若切 sub-agent,必须另行准备真实、适量的上下文,空清单不兼容该模式。

规划检查

  • 记录独立立项、认证状态合同及 24/23/80 的口径边界。
  • 核实请求、fulfill 与 /me 顺序,不预设 cookie 污染。
  • PRD、设计、执行清单分开;PRD 按最终结构收敛,无 TBD 或重复开放的已答事实。
  • 运行上下文、治理、敏感内容及新增文件 whitespace 检查,核对旧 21 文件摘要未变。
  • 用户批准阶段 0,已 task start;仅执行该阶段。

阶段 0(已批准,2026-09-07)

  • 读取任务及受影响规约,冻结候选、原回执及原件摘要。
  • 按 design.md §3 核验或重建独占本地前提,留资源归属,不接生产、live 或真实身份。
  • 一次单条、1 worker、零重试、trace=on,保持原断言;观测副本差异和实际命令单列,真实候选不动。
  • 记录 cookie、online、离线快照和调用入口及缺项;不倒填历史、不自动追加实验。
  • 静态追踪 helper/TEST_IDS/route,交场景分类及拟写入清单,不开始迁移。
  • 准备 AC1/AC2、清理结果及阶段 1 方案交审;不是独立复核通过。文件外 80 条不逐项展开独立问题。

后续阶段(尚未批准)

  • 清单和 helper 接口获批后,补状态合同回归并最小迁移。
  • 保留业务断言及正确样本,记录是否越过认证前置;不修旧“更多”或产品权限缺口。
  • 按固定矩阵验证,完整/中断/未运行状态及候选绑定分列,不重试至绿或冒充整套。
  • 对剩余失败单独归类;新增红项不自动修。
  • 主会话检查后提交独立复核,不自行签独立通过。
  • 提交、push、归档、部署和 R1 启用均等待各自授权。

规划验证记录

以下是创建轮历史记录,当轮不运行产品测试、构建、数据库或浏览器;不用于描述随后已获批的阶段 0 实验。

  • python3 .trellis/scripts/task.py validate .trellis/tasks/09-07-e2e-auth-preconditions:两个 inline manifest 均 0 entries,通过。
  • node scripts/qa/check-trellis-governance.mjs --json:PASS,0 errors / 0 warnings。
  • node scripts/qa/check-sensitive-content.mjs --json:PASS,0 findings。
  • git diff --check 及六个新增任务文件分别执行 git diff --no-index --check:均通过;旧获准 21 文件逐项 SHA-256 一致。
  • 首轮规划校验的 Scope/Test Plan 缺项已补齐;超出注入上限的整份模块文档没有继续登记在 inline 清单中。首轮日志保留于 artifacts/qa-flow/e2e-auth-preconditions/planning-20260907-01/,复验位于 validated/,最终交审快照与回执位于 final/;不覆盖旧门禁回执。
  • 以上仅主会话文档验证,不是阶段 0 已执行、实施获批或独立复核通过。

阶段 0 运行记录

已收到阶段 0 的明确批准。仅在独占实验副本内为 AuthContext 添加安全观测,真实测试及应用源码保持不变;使用本地隔离库和无外网命名空间,不运行全套,不实施迁移。

证据目录后缀 实际浏览器用例 结果与限制
phase0-20260907-01 0 缺 QA_DIAGNOSTIC_PWA_ROOT,Playwright 前准备失败;观测副本构建及 AST 校验保留
phase0-20260907-02 0 锚定标题没有匹配 qualified title,No tests found;原始错误保留,不算浏览器重试
phase0-20260907-03 1 先 --list 确认一条原用例,再 workers=1 / retries=0 / trace=on;1 timedOut,仍在登录前置
  • 源码绑定:HEAD=66f25b1、local origin/main=492920c,观测前 sourceDigest=b7c8edbe8c3c4005e8dead6cc57aa50a8722bf515f6663e4be8a013aa728cd5a。两次后续准备核对源摘要及构建文件摘要后复用观测构建,不重做产品构建、不覆盖 client/dist。
  • 观测结果:首次 sessionHint=false / online=false / offlineSnapshotAvailable=false,入口 bootstrap-primary-refresh → runRefresh;实际网络 refresh 一次,login 零次。没有将本轮浏览器状态倒填旧 trace,也没有把重复函数日志算作网络重试。
  • 原始用例耗时 216617ms、retry 0,错误仍为 login-identifier 的 locator.fill;该耗时不是普通 full-local 成本、不是通过证据。
  • 依赖盘点:65 个非 manual spec,33 文件有直接 refresh 路由;30 个表单矛盾文件 + 1 访客提示矛盾文件。31 个现有 spec + 2 个新增 helper/合同 spec 是阶段 1 提案,不是写入授权。另两项恢复建模缺口分开延后,原 80 条文件外失败不重新计数。
  • 回执位于 artifacts/qa-flow/e2e-auth-preconditions/phase0-20260907-03/。原始报告、trace、observation-result.json、static-census.json 各自保留;收尾 source/resource 核验见 closeout-receipt-v2.json。首版核验因误设“每次都有独立剩余库计数文件”失败,保留 closeout-receipt.json,不补造 02 的计数。
  • 清理边界:3 个本轮容器及 3 个临时副本已定点确认不存在;01/03 的原计数为 0,02 原 cleanupExit=0 而无单独计数文件。检查没有修改资源或触碰生产。

阶段 0 交审检查

  • 再核对原 21 文件、1052 份运行来源文件及 HEAD/origin 引用未变;closeout-receipt-v2.json 的 valid=true。
  • 上下文(两个 inline manifest 均 0 entries)、治理(0 errors / 0 warnings)、敏感内容(0 findings)、tracked/new-task whitespace 检查完成。仅主会话检查,不代替独立复核。
  • 用户独立复核并批准阶段 0;不等于批准阶段 1 的 31+2 清单和接口。

阶段 0 已独立复核通过,阶段 1 暂缓;后续在线对照另行交审。没有提交、push、归档或部署。场景 8、经理缺口和 R1 均继续挂起。

文档检查原件位于 phase0-20260907-03/review/。首轮 whitespace shell 把 git diff --no-index 的“存在文件差异”退出 1 当作格式失败,实际诊断为空;whitespace-v2.json 保留逐文件退出码及空诊断,未为消除该状态改动内容。最终交审使用相对 planning-20260907-01/final/ 六文件快照的增量;回执不得把旧门禁 21 文件或临时观测副本算作本次新增实现。

在线对照(已批准,2026-09-07)

  • 冻结阶段 0 回执、原 21 文件和来源快照;在独占命名空间内准备原生 online=true 前提,记录外层包装差异。
  • 完成空白页在线与 context 隔离前置检查;实际均符合预期,不伪改 navigator。
  • 一次原合同单条、零重试、trace=on:认证及合同前置通过;旧“更多”点击超时,整条非 PASS。
  • 校验实际 trace 的 online、hint、调用入口及请求顺序,核验资源清理及来源不变,准备交审。
  • 用户认可本次在线结果,下一步先审环境启动合同;原 31+2 迁移不作为默认建议,不自动执行。

仅此在线实验获批;阶段 1 暂缓,场景 8、经理缺口和 R1 不变,无生产、提交、push、归档或部署授权。

在线运行回执

最新后续状态:环境合同规划归 release-gate-integrity 的 R2/R6、设计 §10;本轮仅修改两个任务的规划/事实文档和追加撤销资格侧记,不实现、不重跑、不修合同、不改产品或测试源。207 原浏览器清单从真实红项、工作量和 R1 等决策输入中撤销,raw JSON/trace/包装脚本不删除、不覆盖,其他原始证据按自己的范围保留。认证任务保持 in_progress,仅等待后续任务处置,不自行提交、归档或宣称阶段 1 完成。

  • 实际命令沿用原选择器:npm run test:e2e:full -- tests/e2e/payment-reviewer-permissions.spec.ts --grep '合同只读人员看不到新增编辑续约和归档动作' --workers=1 --trace=on --retries=0 --reporter=list,json,html。先 --list 确认一条,没有额外业务重跑。
  • 实际首个 bootstrap:online=true / sessionHint=false / offlineSnapshotAvailable=false,命中 guest-ready;登录前 refresh=0、login=1。登录后 full navigation 的 refresh 成功是保留的正常恢复路径。
  • 387/388/389/390/396 的合同前置断言通过;397“更多”超时。1 timedOut / retry 0 / 214570ms;下游续约和归档未覆盖,不冒充整条通过或 R1 成本。
  • 来源、观测构建和原 21 文件逐项未变;本轮容器及临时目录均确认已清理,原独占库剩余计数 0。详见 online-20260907-01/closeout-receipt.json,valid=true。
  • 运行脚本、原始报告、trace、前置探针与派生结果各自保存,未覆盖阶段 0 原件。原 static-census.json 的“矛盾”标签保留为历史静态分类,不再当作已证明需修改的缺陷。
  • 本次只更新当前任务事实和忽略目录证据,不改受冻结规约或任何产品/测试源码;执行端撤回默认迁移 31 文件的建议,等待用户决定环境合同优先的后续范围。