交接(08-10-production-employee-smoke-break-glass-reset): 恢复员工负向验收

这个提交包含在:
2026-08-10 22:46:14 +08:00
父节点 4c2014bf2f
当前提交 4eea56abac
共修改 4 个文件,包含 10 行新增和 8 行删除
@@ -1,6 +1,6 @@
# 生产登录态只读验收:执行计划与证据
> 当前状态:IN PROGRESS / ADMIN LOGIN READY。生产只读基线与扩展账号诊断已完成;管理员认证已由独立任务 `08-09-production-admin-break-glass-reset` 恢复并写入仓库外 secret,员工 identity 仍不唯一且密码匹配数为 0。
> 当前状态:IN PROGRESS / EMPLOYEE LOGIN READY。生产只读基线与扩展账号诊断已完成;管理员认证已由独立任务 `08-09-production-admin-break-glass-reset` 恢复,员工认证已由独立任务 `08-10-production-employee-smoke-break-glass-reset` 恢复并写入仓库外 secret。合同 UI 仍因生产零合同等待事件触发补验。
## 1. 规划确认
@@ -69,10 +69,12 @@
### Phase C:有限登录(仅凭据合法恢复后)
- [x] 管理员凭据来源已切换:来自已归档 `08-09-production-admin-break-glass-reset` 的受控 break-glass 恢复和首次强制改密,不是本任务最初诊断为失效的原始 secret;值不进入任务证据。
- [x] 员工凭据来源已切换:来自 `08-10-production-employee-smoke-break-glass-reset` 的受控 break-glass 恢复和首次强制改密,不是本任务最初诊断为失效的原始 secret;最终 secret 已就绪且值不进入任务证据。
- [x] 08-10 最终交接证明目标仍唯一、`rolesExact=true`,`*`、`project.manage`、`project.view_all`、`system.settings` 四项权限全 false;该结论只解除凭据阻塞,不替代本任务的生产登录态负向验收。
- [x] admin 只执行一次登录、零 retry,HTTP 200 并进入 `/portal`;写后只读复核为 failureCount=0、locked=false、近 15 分钟 login success=1、login failure=0。
- [ ] PAUSED:employee 目标账号已由只读资格合同唯一确定并分类为专用 OA-only smoke 账号,但没有该目标的已确认有效凭据;本任务不重置或修改员工账号,后续生产写入须另设 break-glass task。
- [ ] READY:employee 最终凭据已由 08-10 合法恢复,负向前提仍成立;本任务下一步按单 worker、零 retry执行一次登录和合同权限负向,不扩大权限、不切换管理员身份。
- [x] admin attempts=1;未发生第二次登录。浏览器在合同台账阶段 fail-closed 后关闭,未到达正常 logout;active sessions 从恢复后的 1 变为 2,新增会话留待自然过期,本任务未获直接数据库撤销授权。
- [ ] PAUSED:employee 未登录,attempts=0;目标唯一性阻塞已解除,剩余阻塞仅为有效凭据缺失。
- [ ] READY:employee 尚未在本任务登录,attempts=0;目标唯一性与凭据阻塞均已解除,等待执行本任务既有负向验收步骤。
- [x] 已记录 admin attempts=1、employee attempts=0;没有第二次尝试,管理员失败计数仍为 0 且未锁定。
### Phase D:登录态只读验收
@@ -77,9 +77,9 @@
- [x] AC1:生产运行/公网 SHA 对应已部署产品候选 `0224ad8`(短标识 `0224ad83d7f8`);65 条 migration 仍全部 applied、pending=none,未触发部署或 schema 写入。
- [x] AC2:任何登录前已对管理员、员工完成同一 `BEGIN READ ONLY` 查询合同;查询设计覆盖 `matchedBy`、active/archived/locked、失败计数和期望角色是否就绪。两个 identifier 实际均 `matchedBy=none`,故账号属性记为 `N/A` 而非生产事实,不含账号或凭据明文。
- [x] AC3:两个仓库外 identifier 均不匹配 email/phone/employee_no。只读角色候选与远端内存密码 hash 比对进一步证明:唯一活跃管理员可解析为 email、未锁定、失败计数为 0,但原管理员密码不匹配;员工有 5 个活跃非管理员候选,原员工验收密码对这些候选的匹配数为 0。后续只读资格诊断将员工目标收敛为唯一 1 个:其登录 identifier 已就绪、未锁定、失败计数为 0、无需首次改密、可进入只读合同工作区且不具备合同管理权限;运行容器内既有 smoke 命名判据将其分类为专用 OA-only smoke 账号,未依赖私有 allowlist。本次没有注入或比较密码。登录尝试保持 0,未输出 identifier/hash/角色明细。
- [ ] AC4 — PARTIAL:管理员凭据已由独立 `08-09-production-admin-break-glass-reset` 合法恢复,本轮唯一一次登录 HTTP 200,失败计数为 0 且未锁定;员工目标账号仍不唯一,员工登录 attempts=0。浏览器未重试管理员登录。
- [ ] AC4 — PARTIAL:管理员凭据已由独立 `08-09-production-admin-break-glass-reset` 合法恢复,本轮唯一一次登录 HTTP 200,失败计数为 0 且未锁定;员工凭据已由独立 `08-10-production-employee-smoke-break-glass-reset` 合法恢复,交接时目标唯一、`rolesExact=true`、四项管理权限全 false,但本任务员工登录尚未执行、attempts=0。浏览器未重试管理员登录。
- [ ] AC5 — PAUSED:管理员认证通过,但生产合同总数为 0,无法进入详情或终止面板;终止端点 `POST` 计数为 0、全部合同 mutation 计数为 0,确认层未打开,未制造合同。
- [ ] AC6 — PAUSED:员工负向目标已通过只读资格诊断唯一确定,并确认是专用 OA-only smoke 账号而非真人员工,但没有该目标的已确认有效凭据;原员工验收密码对 5 个候选的既有匹配数为 0,本轮未用登录试探密码,故仍未执行权限负向。若需重置必须另设生产写入 task;archived/terminated 样本数均为 0,无法执行对应 UI 检查;未扩大权限、修改断言或制造数据。
- [ ] AC6 — READY:员工负向目标已通过只读资格诊断唯一确定,并确认是专用 OA-only smoke 账号而非真人员工;最终凭据已由 08-10 break-glass 合法恢复,角色精确与四项权限前提未变。本任务仍需执行一次生产登录态负向;archived/terminated 样本数均为 0,无法执行对应 UI 检查,且不得扩大权限、修改断言或制造数据。
- [x] AC7:初始、登录前停止后、扩展账号诊断后、邮件能力诊断后、管理员验收 PRE/POST、员工资格诊断 PRE/POST 及 smoke 分类后的最终 POST 共九次窗口证据均为 `terminatedRows=0`、`rollbackWindow=OPEN`、`basis=terminated_status_count`;窗口未变化,本任务真实合同终止写入计数为 0。
- [x] AC8:邮件能力与 break-glass 建议审查、浏览器验收收口审查的 findings 均已按证据边界修订,最终只读复查为 `PASS`;task validate、process contract、governance、sensitive scan、docs registry audit 与 diff check 已复跑,docs audit 仅保留既有 22 个未注册文件 warning。
- [x] AC9:结论明确为产品已部署、生产基线健康,但登录态验收仍 `PAUSED`;当前不得告知用户可以测试。
@@ -1,6 +1,6 @@
# 生产员工 Smoke Break-glass 重置:执行计划
> 当前状态:RESET COMPLETE / REVIEW PASS / AWAITING HANDOFF。候选发布、唯一账号写入、一次登录、一次强制改密、最终验证、敏感材料清理和生产只读复核均已完成;员工合同权限负向验收仍归 `08-08-production-authenticated-readiness`。
> 当前状态:RESET COMPLETE / REVIEW PASS / HANDOFF COMPLETE。候选发布、唯一账号写入、一次登录、一次强制改密、最终验证、敏感材料清理和生产只读复核均已完成;员工凭据可用与负向前提未变已交接给 `08-08-production-authenticated-readiness`。
## 1. 规划事实与决策
@@ -81,7 +81,7 @@
- [x] 最终生产 read-only preflight 为 13/13,migration pending=none,rollback window POST=OPEN/0;本任务脚本和浏览器未进入合同或其他业务功能。
- [x] 只读 reviewer 核对运行脚本 SHA、apply 次数、审计 +1、目标限定副作用、写后精确角色/权限、零业务写入和清理证据,结论 PASS;reviewer 未修改代码或生产状态。
- [x] 更新本 task 稳定证据并运行 task/process/governance/sensitive/diff 门禁,全部 PASS、0 findings。
- [ ] 只向 `08-08-production-authenticated-readiness` 交接最终员工凭据可用与负向权限前提未变;回原 task 执行员工合同权限负向。
- [x] 只向 `08-08-production-authenticated-readiness` 交接最终员工凭据可用与负向权限前提未变;交接记录明确凭据来自本 task 的 break-glass 恢复而非原始 secret,未交接任何凭据值。
## 11. 验证命令
@@ -82,7 +82,7 @@
- [x] AC7:apply 后 `--verify` 与独立只读快照均重新证明 `roles == ['employee']`、四项管理权限全 false、目标唯一,且 must-change、locks、session/challenge、token/audit 副作用符合合同;未沿用写前结论。
- [x] AC8:一次登录按预期进入强制改密,一次提交后 `--verify-password-changed` PASS;未主动访问业务功能且非认证 mutation 为 0,`/portal` 自发只读请求独立计数,最终 secret 为 `0600`,临时凭据、浏览器状态和旧 hash 已销毁。
- [x] AC9:生产其他账号、角色/权限、企微绑定、合同、schema 与业务数据写入为 0;任务内无敏感值泄露,执行后只读 reviewer 和 task/process/governance/sensitive/diff 门禁通过。
- [ ] AC10:只向 `08-08-production-authenticated-readiness` 交接最终员工凭据可用与负向前提仍成立;员工合同权限负向仍由该 task 执行,本任务不宣称产品已可告知用户测试。
- [x] AC10:只向 `08-08-production-authenticated-readiness` 交接最终员工凭据可用与负向前提仍成立;员工合同权限负向仍由该 task 执行,本任务不宣称产品已可告知用户测试。
## Out of Scope