R38: 完成员工管理筛选与部门树试跑

这个提交包含在:
2026-03-28 13:15:32 +08:00
父节点 debef078f6
当前提交 f33431fdb8
共修改 9 个文件,包含 474 行新增和 60 行删除
@@ -2,4 +2,4 @@ ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regr
R37-0,R37治理合同补建与范围冻结,为 AGENTS 多 agent 规则更新补建治理合同并锁定本轮仅做治理文档与提交准备,新 CSV 校验通过 且范围明确为 AGENTS agent modes 固化与提交留痕 不承接业务代码改动,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv,none,DONE,DONE,DONE,issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv,[],"本轮仅治理协作规则与提交流程;不修改 server/src 或 client/src 业务代码。"
R37-1,Agent modes 治理规则固化与 review 修订落地,将 3 常驻加 2 按需模式固化到 AGENTS 并落实 qa 写权限 Test_Method 语义和 backend post-check 三处修订,AGENTS.md 包含 Agent modes 段落 且三处修订与现有 issues/README 和 docs/mcp-tools 边界一致,1) git diff --check 2) 核对 AGENTS.md 中 mode:qa 允许写 issues/*.csv 与 scripts/ 3) 核对回滚说明已移入 Notes 约束 4) 核对 backend post-check 已改为按变更类型执行,manual,DONE,DONE,DONE,AGENTS.md,"[""R37-0""]","若后续证明规则过严或过松,回滚方式为还原本次 Agent modes 段落并保留 CSV 审计记录。"
R37-2,治理变更提交与审计留痕,提交 AGENTS 与治理 CSV 变更并使用中文 commit message 引用本 Issue ID,生成 1 个仅包含治理变更的 commit 且 git log 最新提交可见 Issue ID,"1) git diff --stat 确认仅含 AGENTS.md 与 issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv 2) git commit -m ""R37: 固化 Agent modes 治理规则"" 3) git log -1 --oneline",manual,DONE,DONE,DONE,AGENTS.md|issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv,"[""R37-1""]","commit 仅承载治理变更;若提交前发现额外文件改动则先停止并重新确认范围。"
R37-3,下个真实迭代按新模式试跑并复盘,在后续一个同时涉及 backend frontend qa 的真实迭代中按新 Agent modes 跑一次并记录阻塞点,至少完成 1 次真实试跑 并能说明 handoff QA 回填 reviewer 触发条件是否顺畅,"1) 选择一个同时涉及 server/ 与 client/ 的真实 issue 组 2) 按 Agent modes 执行 3) 在 Notes 或后续治理 issue 中记录问题与修订建议",manual,TODO,TODO,TODO,TBD,"[""R37-2""]","待下个真实迭代落地;若涉及 Prisma 迁移 权限变更 状态机调整,执行 issue 的 Notes 必须包含回滚路径。"
R37-3,下个真实迭代按新模式试跑并复盘,在后续一个同时涉及 backend frontend qa 的真实迭代中按新 Agent modes 跑一次并记录阻塞点,至少完成 1 次真实试跑 并能说明 handoff QA 回填 reviewer 触发条件是否顺畅,"1) 选择一个同时涉及 server/ 与 client/ 的真实 issue 组 2) 按 Agent modes 执行 3) 在 Notes 或后续治理 issue 中记录问题与修订建议",manual,DONE,DONE,DONE,TBD,"[""R37-2""]","已用 R38 员工管理试跑完成一次真实迭代。结论: Files 派工整体清晰 backend 侧唯一摩擦点是 /employees 复用 usersRoutes 需要显式 allowDepartmentFilter;QA 回填顺畅 命令式验证和合同状态映射明确;reviewer 触发条件当前无需细化 本轮未触及权限模型 状态机 workflow 或迁移。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 R37-0 R37治理合同补建与范围冻结 为 AGENTS 多 agent 规则更新补建治理合同并锁定本轮仅做治理文档与提交准备 新 CSV 校验通过 且范围明确为 AGENTS agent modes 固化与提交留痕 不承接业务代码改动 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv none DONE DONE DONE issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv [] 本轮仅治理协作规则与提交流程;不修改 server/src 或 client/src 业务代码。
3 R37-1 Agent modes 治理规则固化与 review 修订落地 将 3 常驻加 2 按需模式固化到 AGENTS 并落实 qa 写权限 Test_Method 语义和 backend post-check 三处修订 AGENTS.md 包含 Agent modes 段落 且三处修订与现有 issues/README 和 docs/mcp-tools 边界一致 1) git diff --check 2) 核对 AGENTS.md 中 mode:qa 允许写 issues/*.csv 与 scripts/ 3) 核对回滚说明已移入 Notes 约束 4) 核对 backend post-check 已改为按变更类型执行 manual DONE DONE DONE AGENTS.md ["R37-0"] 若后续证明规则过严或过松,回滚方式为还原本次 Agent modes 段落并保留 CSV 审计记录。
4 R37-2 治理变更提交与审计留痕 提交 AGENTS 与治理 CSV 变更并使用中文 commit message 引用本 Issue ID 生成 1 个仅包含治理变更的 commit 且 git log 最新提交可见 Issue ID 1) git diff --stat 确认仅含 AGENTS.md 与 issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv 2) git commit -m "R37: 固化 Agent modes 治理规则" 3) git log -1 --oneline manual DONE DONE DONE AGENTS.md|issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv ["R37-1"] commit 仅承载治理变更;若提交前发现额外文件改动则先停止并重新确认范围。
5 R37-3 下个真实迭代按新模式试跑并复盘 在后续一个同时涉及 backend frontend qa 的真实迭代中按新 Agent modes 跑一次并记录阻塞点 至少完成 1 次真实试跑 并能说明 handoff QA 回填 reviewer 触发条件是否顺畅 1) 选择一个同时涉及 server/ 与 client/ 的真实 issue 组 2) 按 Agent modes 执行 3) 在 Notes 或后续治理 issue 中记录问题与修订建议 manual TODO DONE TODO DONE TODO DONE TBD ["R37-2"] 待下个真实迭代落地;若涉及 Prisma 迁移 权限变更 状态机调整,执行 issue 的 Notes 必须包含回滚路径。 已用 R38 员工管理试跑完成一次真实迭代。结论: Files 派工整体清晰 backend 侧唯一摩擦点是 /employees 复用 usersRoutes 需要显式 allowDepartmentFilter;QA 回填顺畅 命令式验证和合同状态映射明确;reviewer 触发条件当前无需细化 本轮未触及权限模型 状态机 workflow 或迁移。
@@ -0,0 +1,5 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
R38-0,R38执行合同建档与范围冻结,为员工管理试跑需求创建独立合同并锁定本轮只做员工筛选 部门树形视图与部门编辑 UI,CSV 校验通过 且明确本轮不承接档案扩展 汇报链接口 导出 考勤与批量操作,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv,none,DONE,DONE,DONE,issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv,[],本轮不处理 /people 路由与 /employees 后端权限口径不一致问题 仅记录不顺手修复
R38-1,员工列表新增部门与账号状态筛选,为人员管理页补齐部门筛选与账号状态筛选并保持现有搜索组合生效,PeoplePage 支持按 departmentId 与 active archived 筛选且与关键字搜索同时生效 后端 /employees 查询兼容旧调用且不扩大 /users 语义,"业务流程: 管理员进入人员管理页 输入关键字 选择某部门 再切换账号状态 确认列表只显示匹配员工 清空筛选后恢复。验证命令: cd server && node --check src/routes/users.js && cd ../client && npm run typecheck && npm run build",manual,DONE,DONE,DONE,server/src/routes/users.js|server/src/routes/employees.js|server/tests/unit/routes/users.list.test.js|client/src/api/employees.ts|client/src/pages/PeoplePage.tsx,"[""R38-0""]","后端仅在 /employees 基座允许 departmentId 生效 不变更 /users 的既有筛选语义。已验证: node --check src/routes/users.js 通过;npm test -- tests/unit/routes/users.list.test.js 3/3 通过;client typecheck/build 通过。"
R38-2,部门树形视图与编辑弹窗,在部门管理页新增树形视图并接通编辑部门 UI 复用现有 departments tree 与 PATCH 接口,DepartmentsPage 同时展示树形视图与列表 未归档部门可通过编辑弹窗更新名称或父级 保存后树与列表同步刷新 归档部门无编辑入口,"业务流程: 管理员进入部门管理页 确认树形结构展示父子关系 打开未归档部门编辑弹窗 修改名称或上级后保存成功 列表与树同时更新 尝试把部门设置为自己的父级时前端展示后端错误。验证命令: cd server && node --check src/routes/departments.js && cd ../client && npm run typecheck && npm run build",manual,DONE,DONE,DONE,client/src/api/departments.ts|client/src/pages/DepartmentsPage.tsx,"[""R38-0""]","编辑弹窗仅包含 name 和 parentId 上级选项只展示未归档部门 且前端排除当前部门自身。已验证: node --check src/routes/departments.js 通过;client typecheck/build 通过;写接口响应在前端 API 层统一解包。"
R38-3,试跑回归与R37-3复盘,按新 Agent modes 完成员工管理试跑验证 状态回填 与 R37-3 复盘记录,单项验证与最小回归通过 R38 状态正确回填 且 R37-3 Notes 同步记录 handoff QA 回填与 reviewer 触发条件结论,"业务流程: 依次验证员工筛选 部门树视图 部门编辑 归档保护与错误提示 记录 backend frontend qa handoff 是否顺畅。验证命令: cd server && node --check src/routes/users.js && node --check src/routes/departments.js && cd ../client && npm run typecheck && npm run build",manual,DONE,DONE,DONE,issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv|issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv|server/src/routes/users.js|client/src/pages/PeoplePage.tsx|client/src/pages/DepartmentsPage.tsx,"[""R38-1"",""R38-2""]","试跑结论: backend Files 边界清晰 server/src/routes/users.js 与 employees.js 的共享/挂载关系是唯一摩擦点 但可控;QA 回填顺畅 当前命令式验证可直接映射到 Review1/Regression;本轮不需启用 reviewer 因为未触及权限模型 状态机 workflow 或迁移。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 R38-0 R38执行合同建档与范围冻结 为员工管理试跑需求创建独立合同并锁定本轮只做员工筛选 部门树形视图与部门编辑 UI CSV 校验通过 且明确本轮不承接档案扩展 汇报链接口 导出 考勤与批量操作 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv none DONE DONE DONE issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv [] 本轮不处理 /people 路由与 /employees 后端权限口径不一致问题 仅记录不顺手修复
3 R38-1 员工列表新增部门与账号状态筛选 为人员管理页补齐部门筛选与账号状态筛选并保持现有搜索组合生效 PeoplePage 支持按 departmentId 与 active archived 筛选且与关键字搜索同时生效 后端 /employees 查询兼容旧调用且不扩大 /users 语义 业务流程: 管理员进入人员管理页 输入关键字 选择某部门 再切换账号状态 确认列表只显示匹配员工 清空筛选后恢复。验证命令: cd server && node --check src/routes/users.js && cd ../client && npm run typecheck && npm run build manual DONE DONE DONE server/src/routes/users.js|server/src/routes/employees.js|server/tests/unit/routes/users.list.test.js|client/src/api/employees.ts|client/src/pages/PeoplePage.tsx ["R38-0"] 后端仅在 /employees 基座允许 departmentId 生效 不变更 /users 的既有筛选语义。已验证: node --check src/routes/users.js 通过;npm test -- tests/unit/routes/users.list.test.js 3/3 通过;client typecheck/build 通过。
4 R38-2 部门树形视图与编辑弹窗 在部门管理页新增树形视图并接通编辑部门 UI 复用现有 departments tree 与 PATCH 接口 DepartmentsPage 同时展示树形视图与列表 未归档部门可通过编辑弹窗更新名称或父级 保存后树与列表同步刷新 归档部门无编辑入口 业务流程: 管理员进入部门管理页 确认树形结构展示父子关系 打开未归档部门编辑弹窗 修改名称或上级后保存成功 列表与树同时更新 尝试把部门设置为自己的父级时前端展示后端错误。验证命令: cd server && node --check src/routes/departments.js && cd ../client && npm run typecheck && npm run build manual DONE DONE DONE client/src/api/departments.ts|client/src/pages/DepartmentsPage.tsx ["R38-0"] 编辑弹窗仅包含 name 和 parentId 上级选项只展示未归档部门 且前端排除当前部门自身。已验证: node --check src/routes/departments.js 通过;client typecheck/build 通过;写接口响应在前端 API 层统一解包。
5 R38-3 试跑回归与R37-3复盘 按新 Agent modes 完成员工管理试跑验证 状态回填 与 R37-3 复盘记录 单项验证与最小回归通过 R38 状态正确回填 且 R37-3 Notes 同步记录 handoff QA 回填与 reviewer 触发条件结论 业务流程: 依次验证员工筛选 部门树视图 部门编辑 归档保护与错误提示 记录 backend frontend qa handoff 是否顺畅。验证命令: cd server && node --check src/routes/users.js && node --check src/routes/departments.js && cd ../client && npm run typecheck && npm run build manual DONE DONE DONE issues/2026-03-28_13-00-03-r38-people-management-filters-department-tree.csv|issues/2026-03-28_12-36-28-r37-agent-modes-governance.csv|server/src/routes/users.js|client/src/pages/PeoplePage.tsx|client/src/pages/DepartmentsPage.tsx ["R38-1","R38-2"] 试跑结论: backend Files 边界清晰 server/src/routes/users.js 与 employees.js 的共享/挂载关系是唯一摩擦点 但可控;QA 回填顺畅 当前命令式验证可直接映射到 Review1/Regression;本轮不需启用 reviewer 因为未触及权限模型 状态机 workflow 或迁移。