记录(08-08-production-authenticated-readiness): 暂停失配凭据登录验收
这个提交包含在:
@@ -1,6 +1,6 @@
|
|||||||
# 生产登录态只读验收:执行计划与证据
|
# 生产登录态只读验收:执行计划与证据
|
||||||
|
|
||||||
> 当前状态:IN PROGRESS。规划已通过用户只读复核并启动;生产只读引导首轮在发布来源门禁处停止,尚未查询生产账号或尝试登录。
|
> 当前状态:IN PROGRESS / LOGIN PAUSED。生产只读基线与账号诊断已完成;admin/employee identifier 均 `matchedBy=none`,因此在登录前停止,登录态 UI 尚未验收。
|
||||||
|
|
||||||
## 1. 规划确认
|
## 1. 规划确认
|
||||||
|
|
||||||
@@ -17,47 +17,49 @@
|
|||||||
- [x] 运行 `task.py start`,当前 task 状态为 `in_progress`。
|
- [x] 运行 `task.py start`,当前 task 状态为 `in_progress`。
|
||||||
- [x] 确认生产只读授权仍有效;本任务没有账号/权限/合同写入授权。
|
- [x] 确认生产只读授权仍有效;本任务没有账号/权限/合同写入授权。
|
||||||
- [x] 确认已部署产品 SHA 基线为 `0224ad8`,不以当前 HEAD 替代。
|
- [x] 确认已部署产品 SHA 基线为 `0224ad8`,不以当前 HEAD 替代。
|
||||||
- [ ] 确认 `command -v npx`;浏览器只能使用单 worker、零 retry。
|
- [x] `command -v npx` 可用;若凭据恢复,浏览器只能使用单 worker、零 retry。
|
||||||
- [ ] 创建本轮独立、gitignored 的 evidence 目录;不得复用历史 PASS。
|
- [x] 生产 preflight 使用两个独立时间戳报告引用;未复用历史 PASS,任务文档只记脱敏摘要。
|
||||||
|
|
||||||
## 3. 执行顺序
|
## 3. 执行顺序
|
||||||
|
|
||||||
### Phase A:生产只读基线
|
### Phase A:生产只读基线
|
||||||
|
|
||||||
- [ ] 复用受控身份引导和 read-only preflight,确认唯一生产目标。
|
- [x] 复用受控身份引导和 read-only preflight,精确身份组与 13/13 聚合体检通过。
|
||||||
- [ ] 人工阅读脱敏后的 migration status:65 条 applied、pending/failed/diverged 均无异常。
|
- [x] migration reconciliation 为 65 条 applied、pending=none,未见 failed/diverged 异常;只读 wrapper 未进入 `deploy.sh`。
|
||||||
- [ ] 核对运行/公网 build SHA 为已部署产品候选。
|
- [x] 公网 build 短标识为 `0224ad83d7f8`,与已部署产品候选匹配;未把当前文档 HEAD 当作产品 SHA。
|
||||||
- [ ] 查询 PRE `terminatedRows`,记录 `rollbackWindow=OPEN|CLOSED` 与时间顺序。
|
- [x] PRE 为 `terminatedRows=0`、`rollbackWindow=OPEN`、`basis=terminated_status_count`。
|
||||||
|
|
||||||
### Phase B:登录前账号诊断
|
### Phase B:登录前账号诊断
|
||||||
|
|
||||||
- [ ] 使用 `BEGIN READ ONLY` 查询 admin;输出仅含 role key、matchedBy、active/archived/locked、failureCount、expectedRoleReady。
|
- [x] 使用同一 `BEGIN READ ONLY` 事务查询 admin/employee;查询合同覆盖 role key、matchedBy、active/archived/locked、failureCount、expectedRoleReady。
|
||||||
- [ ] 使用同一查询合同诊断 employee。
|
- [x] 两个角色均返回 `matchedBy=none`;由于没有匹配到账号,active/archived/locked、failureCount、expectedRoleReady 均记为 `N/A`,不把占位值当作生产账号事实;未输出 identifier、账号、锁定时间或角色明细。
|
||||||
- [ ] 人工确认 identifier 只按 email/phone 登录语义匹配,未把 employee_no 当作可登录身份。
|
- [x] 查询只按 email/phone 精确匹配,未把 employee_no 当作可登录身份。
|
||||||
- [ ] 按 PRD R3 分流;如需密码修改、解锁、激活或角色变更,立即标 `PAUSED` 并停止登录。
|
- [x] 按 PRD R3 分流为仓库外 identifier 过期或不符合现行登录合同;标 `PAUSED`,没有进入密码、解锁、激活或授权写入。
|
||||||
- [ ] 记录本轮到此为止的登录尝试数;预期仍为 0。
|
- [x] 登录尝试数:admin=0、employee=0。
|
||||||
|
|
||||||
|
执行备注:账号诊断前两次远端包装探针分别在脚本解码和 Compose 必填候选标识处未产生约定查询 marker,均不计为查询成功;修正为注入已验证产品候选完整/12 位标识后,唯一有效诊断事务返回 `transaction=read_only`。这些失败均先于数据库事务和登录。
|
||||||
|
|
||||||
### Phase C:有限登录(仅凭据合法恢复后)
|
### Phase C:有限登录(仅凭据合法恢复后)
|
||||||
|
|
||||||
- [ ] 从受控 secret store 在同一进程注入新鲜凭据,不回显、不落盘。
|
- [ ] PAUSED:受控 secret 中现有 identifier 已失配,尚无经账号持有人确认的新鲜凭据。
|
||||||
- [ ] admin 最多一次登录;失败立即停止并复查 failureCount/locked。
|
- [ ] PAUSED:admin 未登录,attempts=0。
|
||||||
- [ ] employee 最多一次登录;失败立即停止并复查 failureCount/locked。
|
- [ ] PAUSED:employee 未登录,attempts=0。
|
||||||
- [ ] 记录每角色 attempts、HTTP 结果、前后失败计数;禁止第二次尝试。
|
- [x] 已记录每角色 attempts=0;没有第二次尝试,也没有增加失败计数。
|
||||||
|
|
||||||
### Phase D:登录态只读验收
|
### Phase D:登录态只读验收
|
||||||
|
|
||||||
- [ ] 管理员打开合同台账与现有合同详情,验证自然中文状态和只读摘要。
|
- [ ] PAUSED:管理员会话未建立,未进入合同台账或详情。
|
||||||
- [ ] 如有 active/expired 样本:监听 terminate POST,验证终止面板、10 字提示、原因不足 10 字、按钮 disabled;不打开确认层,结束时 POST=0。
|
- [ ] PAUSED:未进入终止面板;未填写原因、未打开确认层、terminate POST=0。
|
||||||
- [ ] 员工执行合同权限负向路径;未扩大权限、未删除断言。
|
- [ ] PAUSED:员工会话未建立,未执行权限负向路径;未扩大权限或删除断言。
|
||||||
- [ ] 如有 archived 样本,只读验证字段锁定;无样本记 `PAUSED`。
|
- [ ] PAUSED:未在无登录态情况下探查 archived 样本,未创建数据。
|
||||||
- [ ] 如已有 terminated 样本,只读验证中文标签与终止事实;无样本记 `PAUSED`,不得创建。
|
- [ ] PAUSED:PRE/POST 均证明 terminatedRows=0,因此无现有 terminated 样本可验;未制造样本。
|
||||||
|
|
||||||
### Phase E:窗口复核与收口
|
### Phase E:窗口复核与收口
|
||||||
|
|
||||||
- [ ] 无论前序 PASS/PAUSED,查询 POST `terminatedRows` 和窗口状态。
|
- [x] 前序 PAUSED 后仍查询 POST:`terminatedRows=0`、`rollbackWindow=OPEN`、`basis=terminated_status_count`。
|
||||||
- [ ] 对比 PRE/POST;若 OPEN→CLOSED 且 terminate POST=0,记录真实用户同期使用及只能 roll-forward/hotfix。
|
- [x] PRE/POST 均为 OPEN/0,未发现同期真实用户关闭窗口。
|
||||||
- [ ] 汇总生产账号/权限/合同写入计数;本任务预期均为 0。
|
- [x] 汇总:登录 attempts=0、terminate POST=0、生产账号/权限/合同/schema 写入=0。
|
||||||
- [ ] 启动只读 reviewer,reviewer 不修改代码或生产状态。
|
- [x] 启动只读 reviewer,reviewer 未修改代码或生产状态;首轮 `PASS_WITH_FINDINGS` 的两项证据措辞已修订,最终复查结论 `PASS`。
|
||||||
- [ ] 按实际证据更新 PRD AC;不得把缺失样本或凭据阻塞勾成通过。
|
- [ ] 按实际证据更新 PRD AC;不得把缺失样本或凭据阻塞勾成通过。
|
||||||
|
|
||||||
## 4. 预期证据表
|
## 4. 预期证据表
|
||||||
@@ -78,6 +80,8 @@
|
|||||||
- [x] `node scripts/qa/check-sensitive-content.mjs`:PASS,0 findings。
|
- [x] `node scripts/qa/check-sensitive-content.mjs`:PASS,0 findings。
|
||||||
- [x] `git diff --check`:PASS。
|
- [x] `git diff --check`:PASS。
|
||||||
|
|
||||||
|
执行后复跑同一组门禁仍 PASS;docs registry audit 为 0 errors / 1 个既有“22 个未注册 docs 文件”warning,本任务未新增或修改 `docs/` 文件。
|
||||||
|
|
||||||
## 6. 当前结论
|
## 6. 当前结论
|
||||||
|
|
||||||
规划已收敛并获批启动。首轮生产只读引导完成 13/13 聚合体检后,在本地发布来源校验处 fail-closed;原因是已批准的任务规划尚未形成 clean/published commit。该轮未进入生产 migration status、窗口查询、账号查询或登录。先提交并推送已复核规划,再从完整只读门禁重跑,不使用 override。
|
生产只读基线与账号诊断已执行。首轮来源门禁因规划未形成 clean/published commit 停止;规划提交 `4f3f761` 推送后重跑通过。最终诊断为 admin/employee identifier 均不匹配 email/phone,故按硬门禁停在登录前;PRE/POST 窗口均 OPEN/0,未发生任何登录、终止、账号、权限、合同或 schema 写入。登录态 UI AC 保持 PAUSED,等待账号持有人从合法来源恢复仓库外新鲜凭据;本任务不修改生产账号。
|
||||||
|
|||||||
@@ -74,15 +74,15 @@
|
|||||||
|
|
||||||
## Acceptance Criteria
|
## Acceptance Criteria
|
||||||
|
|
||||||
- [ ] AC1:已确认生产运行/公网 SHA 对应已部署产品候选 `0224ad8`,65 条 migration 仍全部 applied,未触发部署或 schema 写入。
|
- [x] AC1:生产运行/公网 SHA 对应已部署产品候选 `0224ad8`(短标识 `0224ad83d7f8`);65 条 migration 仍全部 applied、pending=none,未触发部署或 schema 写入。
|
||||||
- [ ] AC2:任何登录前已对管理员、员工分别完成只读状态诊断;证据包含 `matchedBy`、active/archived/locked、失败计数和期望角色是否就绪,不含账号或凭据明文。
|
- [x] AC2:任何登录前已对管理员、员工完成同一 `BEGIN READ ONLY` 查询合同;查询设计覆盖 `matchedBy`、active/archived/locked、失败计数和期望角色是否就绪。两个 identifier 实际均 `matchedBy=none`,故账号属性记为 `N/A` 而非生产事实,不含账号或凭据明文。
|
||||||
- [ ] AC3:账号诊断已按 identifier 失配、密码凭据失效、锁定、停用/角色漂移之一形成可解释结论;凡需要修改生产账号状态的分支均 `PAUSED` 并另行批准,没有用重复登录试错推进。
|
- [x] AC3:两个仓库外 identifier 均为 `matchedBy=none`,结论为不符合现行 email/phone 精确登录合同;登录尝试数保持 0,未用旧密码试错,恢复仓库外凭据前保持 `PAUSED`。
|
||||||
- [ ] AC4:仅在合法凭据恢复且所有登录前门禁通过时,管理员、员工各执行不超过一次登录;`workers=1`、`retries=0`,任一失败后复查失败计数/锁定状态且没有第二次尝试。若凭据未恢复,本 AC 保持 `PAUSED`,不得勾选。
|
- [ ] AC4 — PAUSED:管理员、员工合法新鲜凭据尚未恢复;本轮各角色登录尝试均为 0,没有使用旧凭据消耗一次预算。
|
||||||
- [ ] AC5:管理员已只读打开合同详情;对既有 `active/expired` 合同仅验证终止面板、10 字提示和按钮初始禁用,终止原因保持不足 10 字,确认层未打开,终止端点 `POST` 计数为 0。
|
- [ ] AC5 — PAUSED:因登录前 identifier 门禁失败,未建立管理员会话,未进入合同详情或终止面板;终止端点 `POST` 计数为 0,确认层未打开。
|
||||||
- [ ] AC6:员工合同权限负向路径通过,未扩大权限或删除断言;现有 archived/terminated 样本的只读检查按数据实际情况记录 PASS 或 `PAUSED`,未创建数据补齐样本。
|
- [ ] AC6 — PAUSED:因登录前 identifier 门禁失败,未执行员工权限负向或 archived/terminated 样本 UI 检查;未扩大权限、修改断言或制造数据。
|
||||||
- [ ] AC7:验收前后均记录 `terminatedRows` 与 `rollbackWindow=OPEN|CLOSED`;若窗口变化,已明确记录真实用户使用与只能 roll-forward/hotfix 的后果。本任务真实合同终止写入计数为 0。
|
- [x] AC7:验收前后均为 `terminatedRows=0`、`rollbackWindow=OPEN`、`basis=terminated_status_count`;窗口未变化,本任务真实合同终止写入计数为 0。
|
||||||
- [ ] AC8:只读 reviewer 已复核账号诊断、登录尝试计数、终止请求计数、窗口双快照和证据脱敏;task validate、process contract、governance、sensitive scan、diff check 均通过。
|
- [x] AC8:只读 reviewer 最终结论 `PASS`,已复核账号诊断、登录尝试计数、终止请求计数、窗口双快照和证据脱敏;task validate、process contract、governance、sensitive scan、diff check 均通过。
|
||||||
- [ ] AC9:最终结论准确区分“已部署”“登录态验收通过”“可告知用户测试”;任一必需登录态项目仍 `PAUSED` 时,不得告知用户可以测试。
|
- [x] AC9:结论明确为产品已部署、生产基线健康,但登录态验收仍 `PAUSED`;当前不得告知用户可以测试。
|
||||||
|
|
||||||
## Out of Scope
|
## Out of Scope
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,6 @@
|
|||||||
"deploy/trialrun/production-preflight-remote.sh",
|
"deploy/trialrun/production-preflight-remote.sh",
|
||||||
".trellis/spec/hyb-oa/deployment-trialrun.md"
|
".trellis/spec/hyb-oa/deployment-trialrun.md"
|
||||||
],
|
],
|
||||||
"notes": "仅规划,尚未启动实施。前一部署任务已完成 65 条迁移与匿名鉴权,但管理员/员工验收凭据均返回 401;本任务禁止用重复登录试错诊断,禁止修改生产账号或产生真实合同终止写入。",
|
"notes": "生产只读基线通过:公网产品 SHA 匹配已部署候选,65 条 migration applied、pending=none,PRE/POST 均 rollbackWindow=OPEN、terminatedRows=0。管理员与员工仓库外 identifier 在 BEGIN READ ONLY 诊断中均 matchedBy=none,不符合现行 email/phone 登录合同;账号属性记 N/A,登录 attempts=0、terminate POST=0、生产写入=0。只读 reviewer 最终 PASS。登录态 UI 验收保持 PAUSED,等待账号持有人合法恢复新鲜仓库外凭据;不得修改生产账号推进。",
|
||||||
"meta": {}
|
"meta": {}
|
||||||
}
|
}
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户