Record goal and plan for the admin user create contract fix
Why: UI account creation returns 400 (unknown field name) after the backend contract change; task card records root cause, scope and units. Evidence: precheck receipt /tmp/precheck-fix-admin-user-contract-20261016a.json (SELF). Impact: task card only; no product code. Refs: backend 8dfc223, b9c0a34
This commit is contained in:
@@ -7,17 +7,19 @@
|
||||
- 权威仓:ssh://git@git-ssh.u1680832.nyat.app:31411/weichen/Agent-System-Dev.git;目标分支:main;R0(initial_base_sha)= 9edb011e63ab9bf104360379e52c30075bd2f344
|
||||
- 工作区:/home/weichen/projects/Agent-System-Dev-wt-fix-admin-user-create-contract(worktree);分支:fix/admin-user-create-contract
|
||||
|
||||
- 授权与交付终点:<本次允许的动作与终点;未授权事项写明>
|
||||
- 授权与交付终点:修复管理员建号页 400(`json: unknown field "name"`)。终点为:frontend 仓契约迁移 PR 合入 → Dev 仓 bump frontend pin 合入 → 共享 dev 重新部署后 UI 建号链路实测可用。部署共享 dev 属已批准验证路径;不授权改后端契约、不做恢复 proposal 完整迁移(独立增量)。
|
||||
- 交付模式:goal-first(目标、范围和交付终点一次确认;范围内连续推进)
|
||||
- 实施执行:agent-per-unit(配置:AGENT-EXECUTION.md)
|
||||
- 合入执行:agent(已授权交付范围内,Review 通过、冲突解决且当前 HEAD 的 CI 通过后合入)
|
||||
- 人工决策点:仅限目标/范围/验收变更、重大取舍、高后果操作或无法自动判定的业务验收
|
||||
- 当前阶段:需求拆解;当前增量:I1(待定义)
|
||||
- 当前阶段:实施与自检;当前增量:I1(frontend 最小止血单元)
|
||||
- 流程依据:仓库根目录 policy/delivery.md(归档后仍按仓库根目录定位)
|
||||
|
||||
## 目标与非目标
|
||||
|
||||
<预期结果、受影响入口/模块/契约;明确不做什么。>
|
||||
- 背景:backend `8dfc223`(2026-10-14)将 `POST /api/admin/users` 契约从 `{owner,name,password,isAdmin}` 改为 `{owner,profile:{name,phone,email,staffNo,department,notes}}` 且 `decodeStrictJSON` 拒绝未知字段;`POST /api/admin/users/{owner}/login-keys` 被替换为 410 `RECOVERY_CONTRACT_REPLACED`。frontend pin(3bbb918)未跟进,共享 dev(backend 7aa6243 + frontend 3bbb918)上 UI 建号必 400,签发登录 Key 按钮 410。
|
||||
- 目标(I1 最小止血):UsersPanel/api.ts 按新契约迁移——`createAdminUser` 发 `{owner, profile:{name}}`;移除初始密码输入、随机密码按钮与管理员勾选;建号成功提示改为待初始化 + CLI 发放激活 Key 指引;隐藏"生成登录 Key"入口(其 POST 已 410),随之清理仅由该入口使用的死代码;保持 knip/tsconfig/vitest/build 全绿;不新增裸色值/私有动效(DESIGN.md)。
|
||||
- 非目标:后端契约与恢复 proposal 前端完整迁移(独立增量);e2e UI 建号场景(另有在途 fix-e2e-seed-credential-contract 适配 e2e 种子,避免碰撞,记为后续);`GET/DELETE login-keys` 端点本身仍可用,保留 api 定义。
|
||||
|
||||
## Agent 实施收据
|
||||
|
||||
@@ -29,32 +31,34 @@
|
||||
|
||||
## 关联方向与规划
|
||||
|
||||
- 适用状态:待核对(无适用规划时说明原因)
|
||||
- 主记录路径/版本:待核对(路径按仓库根目录定位,归档后不变;只引用唯一正文)
|
||||
- 对应里程碑:待核对
|
||||
- 适用状态:部分适用——本缺陷源自 IAM/账号管控线(backend 8dfc223 契约重设计)的 frontend 跟进缺口;该线主记录在 RDM 仓 requirements+U0 及 IAM U4 台账,本任务不修改其规划正文,只做交付层跟进。
|
||||
- 主记录路径/版本:RDM 仓 requirements(唯一正文);frontend 完整迁移(recovery-proposals 视图)为其后续增量。
|
||||
- 对应里程碑:账号管控交付层可用性修复。
|
||||
|
||||
## 需求分析
|
||||
|
||||
| ID | 描述 | 项目符合度及依据 | 优先级 | 验收条件 | 依赖 | 结论 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 | 待填写 | 待评估 | 待定 | 待定义 | 待确认 | 待评审 |
|
||||
| R1 | UI 建号请求符合新后端契约(`{owner, profile:{name}}`),不再 400 | 符合:backend accounts.go:321 `createAdminUser` + `decodeStrictJSON`;frontend api.ts:87 现状不符 | P0 | 对 backend 7aa6243 实测 POST /api/admin/users 返回 200 且账号创建成功 | backend pin 不变 | 纳入本增量 |
|
||||
| R2 | UI 不再暴露已失效入口:初始密码/管理员勾选/签发登录 Key 按钮 | 符合:HTTP 建号不能设密码/授权限(store/account_model.go CreatePendingAccount);issue 端点 410 | P0 | 界面无密码框、管理员勾选与"生成登录 Key"入口;残留死代码清理,lint/knip 干净 | R1 | 纳入本增量 |
|
||||
| R3 | 建号后用户可拿到初始凭证并完成登录 | 符合:新契约由本地 CLI `user initialize-account` 发激活 Key,frontend 已有兑换入口 | P0 | 共享 dev 部署后实测:CLI 建号发 Key → 用户兑换设密 → 登录成功 | R1、部署 | 纳入本增量(部署验收) |
|
||||
|
||||
## 方案与计划
|
||||
|
||||
- 方案引用:待填写(含对象版本)
|
||||
- 实施计划引用:待填写(含增量与需求 ID)
|
||||
- 测试计划引用:待填写(含需求 ID 与验收条件)
|
||||
- 方案引用:本会话定位报告(2026-10-16,用户已批准)——推荐方案:仅迁移 frontend,不在后端加兼容层(避免削弱 `8dfc223` 的"HTTP 不能设密码/授权限"边界)。
|
||||
- 实施计划引用:I1 = U1(frontend 契约迁移单元,改动面:`src/api.ts`、`src/components/adminSections.tsx`,允许清理 `src/passwords.ts` 仅当其因此完全无引用);随后 host 集成:frontend PR → Dev pin bump → 部署。
|
||||
- 测试计划引用:R1/R2 → worker 克隆内 `npm run build`(tsc)+ `npm test`(vitest)+ `npx knip`;host 权威验证 → Dev 仓 `make test`(组合 CI 同套件)+ 部署后真实 UI 链路(R3)。
|
||||
|
||||
## 阶段记录
|
||||
|
||||
| 阶段 | 对象版本 | 状态 | 决策/执行者 | 时间 | 依据 |
|
||||
|---|---|---|---|---|---|
|
||||
| 需求拆解 | 待定 | 待执行 | — | — | — |
|
||||
| 需求评估 | 待定 | 待执行 | — | — | — |
|
||||
| 需求表确认 | 待定 | 待执行 | — | — | — |
|
||||
| 方案设计 | 待定 | 待执行 | — | — | — |
|
||||
| 实施计划 | 待定 | 待执行 | — | — | — |
|
||||
| 实施与自检 | 待定 | 待执行 | — | — | — |
|
||||
| 需求拆解 | Dev 9edb011 + backend ab12fea + frontend 3bbb918 | 完成 | host 主模型 | 2026-10-16 | 本会话定位报告(console 400/410 + 源码对拍) |
|
||||
| 需求评估 | 同上 | 完成 | host 主模型 | 2026-10-16 | 根因=跨仓契约断裂;CI 未覆盖 UI 建号路径 |
|
||||
| 需求表确认 | 同上 | 完成 | host 主模型 | 2026-10-16 | R1–R3 见上表 |
|
||||
| 方案设计 | 同上 | 完成 | 用户批准 | 2026-10-16 | 仅迁 frontend,不加后端兼容层 |
|
||||
| 实施计划 | 同上 | 完成 | host 主模型 | 2026-10-16 | I1 单元包见收据 |
|
||||
| 实施与自检 | 待定 | 进行中 | worker(agent-per-unit) | — | — |
|
||||
| 正式测试与验收 | 待定 | 待执行 | — | — | — |
|
||||
| 代码 Review | 待定 | 待执行 | — | — | — |
|
||||
| 合入 | 待定 | 待执行 | — | — | — |
|
||||
@@ -64,7 +68,7 @@
|
||||
|
||||
| 增量/试验 | 假设 | 范围 | 判断和停止条件 | 授权/决策依据 | 结果 | 变更影响 | 需重审补测 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 待定义 | — | — | — | 待核对 | NOT_RUN | 待评估 | 待评估 |
|
||||
| I1 | frontend 侧迁移即可恢复 UI 建号,无需后端改动 | frontend src/api.ts、adminSections.tsx(及因此无引用的 passwords.ts) | 建号 POST 200、build/vitest/knip 绿;否则回 host 评估 | 用户批准方案 2026-10-16 | NOT_RUN | 待评估 | 待评估 |
|
||||
|
||||
## 同步记录
|
||||
|
||||
|
||||
Reference in New Issue
Block a user