From 4eea56abac765ce6735860fd4fe0249e19cd281c Mon Sep 17 00:00:00 2001 From: shunli Date: Mon, 10 Aug 2026 22:46:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E6=8E=A5(08-10-production-employee-sm?= =?UTF-8?q?oke-break-glass-reset):=20=E6=81=A2=E5=A4=8D=E5=91=98=E5=B7=A5?= =?UTF-8?q?=E8=B4=9F=E5=90=91=E9=AA=8C=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../08-08-production-authenticated-readiness/implement.md | 8 +++++--- .../tasks/08-08-production-authenticated-readiness/prd.md | 4 ++-- .../implement.md | 4 ++-- .../prd.md | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.trellis/tasks/08-08-production-authenticated-readiness/implement.md b/.trellis/tasks/08-08-production-authenticated-readiness/implement.md index 1d8677be..591b53c0 100644 --- a/.trellis/tasks/08-08-production-authenticated-readiness/implement.md +++ b/.trellis/tasks/08-08-production-authenticated-readiness/implement.md @@ -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:登录态只读验收 diff --git a/.trellis/tasks/08-08-production-authenticated-readiness/prd.md b/.trellis/tasks/08-08-production-authenticated-readiness/prd.md index b4ac5ad3..4d93da09 100644 --- a/.trellis/tasks/08-08-production-authenticated-readiness/prd.md +++ b/.trellis/tasks/08-08-production-authenticated-readiness/prd.md @@ -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`;当前不得告知用户可以测试。 diff --git a/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/implement.md b/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/implement.md index dadb19aa..a9546ef5 100644 --- a/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/implement.md +++ b/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/implement.md @@ -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. 验证命令 diff --git a/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/prd.md b/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/prd.md index 64606890..7ec6a875 100644 --- a/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/prd.md +++ b/.trellis/tasks/08-10-production-employee-smoke-break-glass-reset/prd.md @@ -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