diff --git a/.trellis/tasks/07-28-all-account-login-readiness/implement.md b/.trellis/tasks/07-28-all-account-login-readiness/implement.md index 4a884863..66244cd5 100644 --- a/.trellis/tasks/07-28-all-account-login-readiness/implement.md +++ b/.trellis/tasks/07-28-all-account-login-readiness/implement.md @@ -15,10 +15,10 @@ - [x] 执行已批准的管理员 break-glass:精确定位唯一 active 管理员,设置受控一次性密码,清除锁定、撤销旧会话、递增 token version、失效旧验证码并写脱敏审计。 - [x] 独立只读复核通过:必须首次改密、锁定清零、活动会话与活动验证码均为 0,审计存在;公网 `/ready` 返回 200。 - [x] 用户以一次性密码登录并完成强制改密;只读核对首次改密标记已清除、当前仅 1 个活动会话、改密与 break-glass 审计均存在。 -- [ ] 新版部署后用户从企微工作台重新进入,由 userid/唯一企业邮箱自动补 binding 并直接登录,不输入 OA 密码。 +- [x] 新版部署后用户从企微工作台重新进入,由 userid/唯一企业邮箱自动补 binding 并直接登录,不输入 OA 密码。 - [x] 首次复测仍显示 unbound;只读诊断确认管理员尚无 binding,近 30 分钟没有来自企微 WebView 的成功或失败密码登录,也没有 bind 审计,说明尚未提交页面下方的账号密码表单。 -- [ ] 用户再次从企微工作台进入,确认直接到 OA 且不再出现 unbound。 -- [ ] 只读核对管理员新增密码成功、binding 和企微登录审计,输出仅限布尔值。 +- [x] 用户再次从企微工作台进入,确认直接到 OA 且不再出现 unbound。 +- [x] 只读核对管理员新增密码成功、binding 和企微登录审计,输出仅限布尔值。 ## 3. Remaining Active Accounts @@ -31,6 +31,9 @@ - [ ] 聚合复核 active 总数、密码登录覆盖、企微 binding 覆盖、企微成功登录覆盖和锁定数;不得输出人员明细。 - [ ] 验证无 binding conflict、无角色变化、无企微通讯录写入、无异常会话残留。 +- [x] 只读确认唯一 active `manager` 与 `wangshunli` 目标账户,排除自环/环路后原子更新 `direct_manager_id`、写脱敏审计,并复核组织链;不改角色、邮箱、密码、binding 或企微通讯录。 +- [x] 只读解析手工企微通讯录导出并与生产 OA 对账:6 个 userid/binding 和 6 个企业邮箱全部精确一致,缺失、重复、冲突、未匹配和需修改数均为 0。 +- [ ] `wangshunli` 当前没有正式业务审批角色;若要使 `manager` 本人报销可由其审批,需另行批准补齐规约预期的 `ceo` 角色,并在写入后进行权限模型只读复核。 - [x] 更新现有管理员手册/试运行 checklist:active 账号启用必须包含安全凭据交付、首次改密、密码登录和企微本人免登。 - [x] 运行认证聚焦测试、前端 typecheck/build、Trellis task/governance、敏感扫描、文档审计和 `git diff --check`;生产部署后的公网 smoke test 仍待独立批准后执行。 @@ -42,7 +45,7 @@ - [x] 保持已有 binding 快路径不变,避免每次登录都调用通讯录详情接口;密码登录不再消费 pending bind 建立企微映射。 - [x] 修正 unbound 页面文案:不再把账号密码作为首次企微绑定说明,显示稳定的映射缺失/冲突处理指引。 - [x] 增加后端路由与服务测试、前端文案/交互测试;覆盖首次免密自动绑定、已有 binding、负向矩阵和审计脱敏。 -- [ ] 生成生产存量 dry-run 脱敏汇总;部署和 apply 回填分别取得明确批准后执行。 +- [x] 生成生产存量 dry-run 脱敏汇总;部署和 apply 回填分别取得明确批准后执行。 ## 5. Stop Conditions diff --git a/.trellis/tasks/07-28-all-account-login-readiness/prd.md b/.trellis/tasks/07-28-all-account-login-readiness/prd.md index abde24e2..b4013f84 100644 --- a/.trellis/tasks/07-28-all-account-login-readiness/prd.md +++ b/.trellis/tasks/07-28-all-account-login-readiness/prd.md @@ -46,6 +46,7 @@ - 密码重置必须使用现有审计接口或经单独批准的受控 break-glass 路径;生成的一次性密码仅在受控现场显示一次,首次登录立即改密。 - 任何 binding 修正必须先证明目标 OA 员工和企微 userid 唯一对应;不得按姓名模糊匹配,不得修改企业微信通讯录成员。 - 生产 binding、密码、账户状态或认证配置写入前另行给出精确变更清单并取得批准。 +- 经用户明确批准,将当前唯一 active `manager` 账户的 OA 直属主管指定为 `wangshunli`;仅更新 `Employee.direct_manager_id` 并写脱敏审计,不修改双方角色、邮箱、密码、binding 或企微通讯录。 ## Decision: Credential Recovery @@ -66,13 +67,14 @@ ## Acceptance Criteria (Evolving) - [x] 管理员本人能使用一次性凭据完成首次改密,且凭据未进入聊天、任务材料、日志或仓库。 -- [ ] 管理员本人能从企业微信工作台直接进入 OA,不再出现未绑定提示。 +- [x] 管理员本人能从企业微信工作台直接进入 OA,不再出现未绑定提示。 - [x] 一个“无 binding、企微企业邮箱唯一匹配 active OA 账户”的合成场景能在不输入 OA 密码的情况下自动建立 binding、写审计并直接登录。 - [x] 企业邮箱缺失、无匹配、inactive、userid/binding 冲突等负向场景全部失败关闭,且不创建账户、不改角色、不按姓名绑定。 - [ ] 所有 active 账户均有一次实际账号密码登录验收或等价的安全凭据交付与首次改密证据。 - [ ] 所有属于当前企业微信通讯录的 active 账户均有唯一 binding,并完成本人企微真机登录验收。 - [ ] 不存在 active 账户同时缺少可交付密码回退和可用企微 binding。 - [ ] 所有重置、绑定、解锁、会话撤销均有 OA 审计且未扩角色、未修改企业微信通讯录。 +- [x] 当前唯一 active `manager` 的直属主管唯一解析为 active `wangshunli`,不存在自环或主管链环路,并有脱敏审计。 - [ ] 自动化、Trellis、敏感扫描、生产 `/ready` 和关联认证 smoke 通过后才通知员工测试。 ## Definition of Done @@ -97,7 +99,7 @@ - 不启用自助 OAuth onboarding,不重构认证架构,不放宽登录、绑定或账户管理权限。 - 本轮不修改“邮箱验证码登录后首次改密仍要求旧密码”的认证流程。 - 不启用会自动创建 OA 员工的通用企微 OAuth self-provisioning;本轮普通登录只允许匹配并绑定既有 active OA 账户。 -- 不顺带导入剩余通讯录成员、修改角色、主管或业务审批规则。 +- 不顺带导入剩余通讯录成员、修改角色或业务审批规则;主管字段仅包含用户本轮明确批准的单条 `manager -> wangshunli` OA 关系。 ## Technical Notes