From b807762c52d4e014f1913b8646c66f6c04e6b686 Mon Sep 17 00:00:00 2001 From: shunli Date: Mon, 10 Aug 2026 19:31:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=B0=E5=BD=95(08-08-production-authenticat?= =?UTF-8?q?ed-readiness):=20=E6=94=B6=E6=95=9B=E5=91=98=E5=B7=A5=E8=B4=9F?= =?UTF-8?q?=E5=90=91=E9=AA=8C=E6=94=B6=E7=9B=AE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../implement.md | 15 ++++++++++++--- .../prd.md | 6 +++--- .../task.json | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.trellis/tasks/08-08-production-authenticated-readiness/implement.md b/.trellis/tasks/08-08-production-authenticated-readiness/implement.md index 14d53b73..1d8677be 100644 --- a/.trellis/tasks/08-08-production-authenticated-readiness/implement.md +++ b/.trellis/tasks/08-08-production-authenticated-readiness/implement.md @@ -45,6 +45,15 @@ - [x] employee:非管理员 employee 候选 5、passwordMatchCount=0,无法在不猜人的情况下选定验收账号。 - [x] 未把正确管理员 identifier 写入 task、对话或仓库,也未修改仓库外 secret;密码重置/员工账号选择转为独立批准事项。 +员工负向目标资格补充诊断: + +- [x] 重新通过生产 origin 与 systemd contract 身份门禁后,在运行容器内用 `BEGIN READ ONLY` 查询 5 个活跃非管理员候选;事务只读状态为 `on`,未调用登录端点。 +- [x] 5 个候选的登录 identifier 均已就绪、当前锁定数为 0、失败计数均为 0;其中 1 个具备合同管理权限,3 个仍要求首次改密。 +- [x] 以“可进入只读合同工作区、无合同管理权限、无需首次改密、未锁定”为资格合同,恰好 1 个候选通过,员工负向目标已从 5 个收敛为唯一 1 个;未输出 identifier、账号、角色明细或数据库 ID。 +- [x] 使用运行容器内 `repair-oa-only-smoke-accounts.js` 的既有 smoke 安全判据对唯一目标分类:账号自身命名模式命中、私有 smoke allowlist 未命中,结论为专用 OA-only smoke 账号,不是真人员工;未输出命中的原始字段。 +- [x] 本次未注入或比较任何密码,不把此前 `passwordMatchCount=0` 伪装为本轮现场结果;当前事实是目标已唯一,但仍缺少已确认有效的仓库外凭据,employee attempts 继续为 0。 +- [x] 资格诊断 PRE/POST 与 smoke 分类后的最终 POST 均为 `terminatedRows=0`、`rollbackWindow=OPEN`;未产生账号、权限、合同、session、审计或失败计数写入。 + 自助密码重置可用性只读核对: - [x] 运行容器 `EMAIL_ENABLED=false`;公网 `/api/auth/capabilities` 独立返回 `emailDeliveryReady=false`、原因 `email_disabled`。 @@ -61,9 +70,9 @@ - [x] 管理员凭据来源已切换:来自已归档 `08-09-production-admin-break-glass-reset` 的受控 break-glass 恢复和首次强制改密,不是本任务最初诊断为失效的原始 secret;值不进入任务证据。 - [x] admin 只执行一次登录、零 retry,HTTP 200 并进入 `/portal`;写后只读复核为 failureCount=0、locked=false、近 15 分钟 login success=1、login failure=0。 -- [ ] PAUSED:employee 目标账号不唯一,现有验收密码不匹配任何活跃非管理员候选;本轮不选择、重置或修改员工账号。 +- [ ] PAUSED:employee 目标账号已由只读资格合同唯一确定并分类为专用 OA-only smoke 账号,但没有该目标的已确认有效凭据;本任务不重置或修改员工账号,后续生产写入须另设 break-glass task。 - [x] admin attempts=1;未发生第二次登录。浏览器在合同台账阶段 fail-closed 后关闭,未到达正常 logout;active sessions 从恢复后的 1 变为 2,新增会话留待自然过期,本任务未获直接数据库撤销授权。 -- [ ] PAUSED:employee 未登录,attempts=0。 +- [ ] PAUSED:employee 未登录,attempts=0;目标唯一性阻塞已解除,剩余阻塞仅为有效凭据缺失。 - [x] 已记录 admin attempts=1、employee attempts=0;没有第二次尝试,管理员失败计数仍为 0 且未锁定。 ### Phase D:登录态只读验收 @@ -108,4 +117,4 @@ ## 6. 当前结论 -生产只读基线与账号诊断已执行,独立任务 `08-09-production-admin-break-glass-reset` 已恢复管理员认证。管理员本轮唯一一次登录返回 200,失败计数仍为 0 且未锁定;但生产合同总数为 0,无法验证详情、终止入口、归档锁定或已终止标签,未制造样本。仓库事实源不能证明零合同属于预期未启用,后续由负责人确认其运营含义;一旦生产出现首条记录,即触发只读补验。员工目标仍不唯一,负向权限未验证。凭据恢复后的 PRE/POST 与此前四次快照全部 OPEN/0,terminate POST 和合同 mutation 均为 0。当前结论为管理员认证通过、合同 UI 因无数据 `PAUSED`、员工负向 `PAUSED`;仍不得告知用户可以测试合同终止功能。 +生产只读基线与账号诊断已执行,独立任务 `08-09-production-admin-break-glass-reset` 已恢复管理员认证。管理员本轮唯一一次登录返回 200,失败计数仍为 0 且未锁定;但生产合同总数为 0,无法验证详情、终止入口、归档锁定或已终止标签,未制造样本。仓库事实源不能证明零合同属于预期未启用,后续由负责人确认其运营含义;一旦生产出现首条记录,即触发只读补验。员工负向目标已通过资格诊断从 5 个候选收敛为唯一 1 个,并确认是专用 OA-only smoke 账号而非真人员工,但缺少已确认有效凭据,负向权限仍未验证。smoke 分类后的最终 POST 仍为 OPEN/0,本任务累计九次窗口快照全部 OPEN/0,terminate POST 和合同 mutation 均为 0。当前结论为管理员认证通过、合同 UI 因无数据 `PAUSED`、员工负向因凭据缺失 `PAUSED`;仍不得告知用户可以测试合同终止功能。 diff --git a/.trellis/tasks/08-08-production-authenticated-readiness/prd.md b/.trellis/tasks/08-08-production-authenticated-readiness/prd.md index dae34053..b4ac5ad3 100644 --- a/.trellis/tasks/08-08-production-authenticated-readiness/prd.md +++ b/.trellis/tasks/08-08-production-authenticated-readiness/prd.md @@ -76,11 +76,11 @@ - [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。登录尝试保持 0,未输出 identifier/hash。 +- [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。浏览器未重试管理员登录。 - [ ] AC5 — PAUSED:管理员认证通过,但生产合同总数为 0,无法进入详情或终止面板;终止端点 `POST` 计数为 0、全部合同 mutation 计数为 0,确认层未打开,未制造合同。 -- [ ] AC6 — PAUSED:员工目标账号未唯一确定且现有验收密码不匹配活跃候选,未执行权限负向;archived/terminated 样本数均为 0,无法执行对应 UI 检查;未扩大权限、修改断言或制造数据。 -- [x] AC7:初始、登录前停止后、扩展账号诊断后、邮件能力诊断后及管理员验收 PRE/POST 共六次窗口证据均为 `terminatedRows=0`、`rollbackWindow=OPEN`、`basis=terminated_status_count`;窗口未变化,本任务真实合同终止写入计数为 0。 +- [ ] AC6 — PAUSED:员工负向目标已通过只读资格诊断唯一确定,并确认是专用 OA-only smoke 账号而非真人员工,但没有该目标的已确认有效凭据;原员工验收密码对 5 个候选的既有匹配数为 0,本轮未用登录试探密码,故仍未执行权限负向。若需重置必须另设生产写入 task;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-08-production-authenticated-readiness/task.json b/.trellis/tasks/08-08-production-authenticated-readiness/task.json index 1b520690..13d0a4cb 100644 --- a/.trellis/tasks/08-08-production-authenticated-readiness/task.json +++ b/.trellis/tasks/08-08-production-authenticated-readiness/task.json @@ -31,6 +31,6 @@ "deploy/trialrun/production-preflight-remote.sh", ".trellis/spec/hyb-oa/deployment-trialrun.md" ], - "notes": "生产只读基线通过:公网产品 SHA 匹配已部署候选,65 条 migration applied、pending=none,四次窗口均 rollbackWindow=OPEN、terminatedRows=0。唯一活跃管理员 email 可解析、未锁定、failureCount=0,但现有密码不匹配;员工目标账号未唯一确定。生产 EMAIL_ENABLED=false,公网 email delivery 原因为 email_disabled;管理员 password reset 未锁定且请求计数 0,未发送验证码。登录 attempts=0、terminate POST=0、生产写入=0。登录态 UI 验收保持 PAUSED;建议另行批准既有 break-glass 脚本,其 must_change_password、token/session/code/lock/audit 副作用须完整接受。旧 hash 仅可作为短期高敏有限恢复材料,不构成完整回滚。", + "notes": "生产基线健康;管理员凭据已由 08-09 break-glass 恢复且唯一一次登录通过。生产合同总数为 0,合同 UI 与终止入口无法只读验证。员工负向目标已由 5 个候选只读收敛为唯一 1 个,并确认是专用 OA-only smoke 账号,但缺少已确认有效凭据,employee attempts=0;九次 rollback window 均 OPEN/0,terminate POST 与合同 mutation 均为 0。", "meta": {} }