5.4 KiB
5.4 KiB
生产登录态只读验收:执行计划与证据
当前状态: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。