文件
hyb-oa/.trellis/tasks/08-08-production-authenticated-readiness/implement.md
T
wangsli 4f3f761d0a
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
规划(08-08-production-authenticated-readiness): 锁定生产登录态只读验收门禁
2026-08-08 22:57:52 +08:00

5.4 KiB
原始文件 Blame 文件历史

生产登录态只读验收:执行计划与证据

当前状态:IN PROGRESS。规划已通过用户只读复核并启动;生产只读引导首轮在发布来源门禁处停止,尚未查询生产账号或尝试登录。

1. 规划确认

  • 前一部署任务证据确认:产品候选 0224ad8,65 条 migration applied,部署结束时 rollbackWindow=OPEN、terminatedRows=0,管理员/员工凭据均 401。
  • auth 路由确认:identifier 仅接受 email/phone;401、403、423 分别覆盖不存在/密码错误、停用、锁定;失败会更新计数和锁定状态。
  • 账号 dry-run helper 确认:可借鉴 BEGIN READ ONLY 与脱敏输出,但 employee_no 匹配宽于真实登录合同,--apply 明确排除。
  • 终止入口确认:仅 active/expired 显示;draft/archived 无法作为 UI 误点的服务端状态机兜底。
  • 安全验收选择:不打开确认层,只检查终止按钮初始禁用,并记录 terminate POST=0。
  • 回滚窗口选择:验收前后双快照,查询失败不得默认 OPEN。

2. 启动门禁(规划批准后)

  • 用户完成规划只读复核并明确批准实施。
  • 运行 task.py start,当前 task 状态为 in_progress。
  • 确认生产只读授权仍有效;本任务没有账号/权限/合同写入授权。
  • 确认已部署产品 SHA 基线为 0224ad8,不以当前 HEAD 替代。
  • 确认 command -v npx;浏览器只能使用单 worker、零 retry。
  • 创建本轮独立、gitignored 的 evidence 目录;不得复用历史 PASS。

3. 执行顺序

Phase A:生产只读基线

  • 复用受控身份引导和 read-only preflight,确认唯一生产目标。
  • 人工阅读脱敏后的 migration status:65 条 applied、pending/failed/diverged 均无异常。
  • 核对运行/公网 build SHA 为已部署产品候选。
  • 查询 PRE terminatedRows,记录 rollbackWindow=OPEN|CLOSED 与时间顺序。

Phase B:登录前账号诊断

  • 使用 BEGIN READ ONLY 查询 admin;输出仅含 role key、matchedBy、active/archived/locked、failureCount、expectedRoleReady。
  • 使用同一查询合同诊断 employee。
  • 人工确认 identifier 只按 email/phone 登录语义匹配,未把 employee_no 当作可登录身份。
  • 按 PRD R3 分流;如需密码修改、解锁、激活或角色变更,立即标 PAUSED 并停止登录。
  • 记录本轮到此为止的登录尝试数;预期仍为 0。

Phase C:有限登录(仅凭据合法恢复后)

  • 从受控 secret store 在同一进程注入新鲜凭据,不回显、不落盘。
  • admin 最多一次登录;失败立即停止并复查 failureCount/locked。
  • employee 最多一次登录;失败立即停止并复查 failureCount/locked。
  • 记录每角色 attempts、HTTP 结果、前后失败计数;禁止第二次尝试。

Phase D:登录态只读验收

  • 管理员打开合同台账与现有合同详情,验证自然中文状态和只读摘要。
  • 如有 active/expired 样本:监听 terminate POST,验证终止面板、10 字提示、原因不足 10 字、按钮 disabled;不打开确认层,结束时 POST=0。
  • 员工执行合同权限负向路径;未扩大权限、未删除断言。
  • 如有 archived 样本,只读验证字段锁定;无样本记 PAUSED。
  • 如已有 terminated 样本,只读验证中文标签与终止事实;无样本记 PAUSED,不得创建。

Phase E:窗口复核与收口

  • 无论前序 PASS/PAUSED,查询 POST terminatedRows 和窗口状态。
  • 对比 PRE/POST;若 OPEN→CLOSED 且 terminate POST=0,记录真实用户同期使用及只能 roll-forward/hotfix。
  • 汇总生产账号/权限/合同写入计数;本任务预期均为 0。
  • 启动只读 reviewer,reviewer 不修改代码或生产状态。
  • 按实际证据更新 PRD AC;不得把缺失样本或凭据阻塞勾成通过。

4. 预期证据表

证据 允许记录 禁止记录
版本/迁移 候选 SHA、applied/pending/异常计数 数据库名、连接串、SSH identity
账号诊断 role key、matchedBy、布尔、失败计数 identifier、邮箱、手机号、员工编号、hash、锁定时间原值
登录 角色、attempts、HTTP 状态 密码、cookie、token、request payload
合同 UI 中文状态、按钮 disabled、POST 计数 合同正文、相对方、金额、终止原因
窗口 PRE/POST count、OPEN/CLOSED、顺序 原始数据库输出或业务行

5. 规划门禁结果

  • python3 ./.trellis/scripts/task.py validate 08-08-production-authenticated-readiness:PASS。
  • node scripts/qa/check-process-contract.mjs --baseline --json:PASS,0 errors / 0 warnings。
  • node scripts/qa/check-trellis-governance.mjs --json:PASS,0 errors / 0 warnings。
  • node scripts/qa/check-sensitive-content.mjs:PASS,0 findings。
  • git diff --check:PASS。

6. 当前结论

规划已收敛并获批启动。首轮生产只读引导完成 13/13 聚合体检后,在本地发布来源校验处 fail-closed;原因是已批准的任务规划尚未形成 clean/published commit。该轮未进入生产 migration status、窗口查询、账号查询或登录。先提交并推送已复核规划,再从完整只读门禁重跑,不使用 override。