- Feature Flag 变更历史查看与影响范围预览 - Feature Flag 批量操作(启用/禁用/继承) - Cutover 控制台页面增强(摘要卡片、时间线、延迟生效) - 单测覆盖 changelog、batch、权限边界
8 行
8.3 KiB
CSV
8 行
8.3 KiB
CSV
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
|
||
"A1","R54 执行合同建档与范围冻结","创建并校验 R54 Cutover 控制台与特性开关增强执行合同 CSV,冻结范围仅包含 Feature Flag 变更历史/影响预览、批量 override 操作、Cutover 控制台运维体验增强;明确本轮不新增 Prisma 迁移、不修改 evaluateFeatureFlag 核心逻辑、不修改 CutoverScope 模型。","issues/2026-04-07_r54-cutover-feature-flags.csv 列完整、Dependencies 为 JSON 数组字符串、Test_Method 可复现;范围仅覆盖 R54 A1-A6,不混入核心 flag 评估逻辑调整、CutoverScope schema 变更或新增审计模型。","命令:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-04-07_r54-cutover-feature-flags.csv。检查:1) 对照 AGENTS.md 与 issues/README.md 确认 12 列完整;2) A2-A6 依赖链符合 backend/frontend→reviewer→qa 收口;3) 方案明确批量乐观锁采用每项 expectedVersion,Cutover 时间线仅基于当前记录生成。","manual","DONE","DONE","DONE","issues/2026-04-07_r54-cutover-feature-flags.csv","[]","回滚路径:删除本次 CSV 不影响业务。2026-04-07:Issue CSV 已创建并通过 validate_issues_csv.py 校验,范围与依赖已冻结。"
|
||
"A2","Feature Flag 变更历史与影响范围预览","在 featureFlags.js 新增 changelog/impact 端点,并在 FeatureFlagsPage 每行增加变更历史与影响范围弹窗。","GET /api/system/feature-flags/:key/changelog 支持 page/pageSize 分页,返回变更人、时间与 from/to 快照;GET /api/system/feature-flags/:key/impact 返回受影响导航项与后端模块;FeatureFlagsPage 可打开历史时间线与影响范围弹窗,空结果有明确状态。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/featureFlags.js && npm test -- tests/unit/routes/featureFlags.changelog.test.js && cd ../client && npm run typecheck && npm run build。业务:1) 每个 flag 行可查看变更历史;2) impact 弹窗可看到前端导航 label/path/section 与后端模块;3) changelog 空历史返回空列表而非错误。","manual","DONE","DONE","DONE","server/src/routes/featureFlags.js|server/tests/unit/routes/featureFlags.changelog.test.js|client/src/api/featureFlags.ts|client/src/pages/FeatureFlagsPage.tsx","[""A1""]","回滚路径:移除 changelog/impact 端点与对应前端弹窗入口。2026-04-07:changelog/impact 端点与 FeatureFlagsPage 双弹窗已完成,prisma validate、node --check、featureFlags.changelog.test.js、client typecheck/build 通过。"
|
||
"A3","Feature Flag 批量 override 操作","新增批量更新多个 flag overrideMode 的后端事务接口,并在 FeatureFlagsPage 增加多选批量操作模式。","POST /api/system/feature-flags/batch 使用 items[{flagKey,overrideMode,expectedVersion}] 与共享 note,在同一事务内更新多个 flag;任一版本冲突整批回滚且不写 audit;成功时每个 flag 均写独立 FEATURE_FLAG_UPDATED 审计;前端支持多选、全选/取消全选、批量启用/禁用/继承和说明确认弹窗。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/featureFlags.js && npm test -- tests/unit/routes/featureFlags.batch.test.js && cd ../client && npm run typecheck && npm run build。业务:1) 批量模式下可选择多个 flag 并统一切换 override;2) 任一 flag 版本冲突时整批失败;3) 成功后退出多选模式并刷新列表。","manual","DONE","DONE","DONE","server/src/routes/featureFlags.js|server/tests/unit/routes/featureFlags.batch.test.js|client/src/api/featureFlags.ts|client/src/pages/FeatureFlagsPage.tsx","[""A1""]","回滚路径:移除 batch 端点与批量 UI,恢复单条更新模式。2026-04-07:batch 端点与 FeatureFlagsPage 多选批量模式已完成,featureFlags.batch.test.js、client typecheck/build 通过。"
|
||
"A4","Cutover 控制台页面增强","增强现有 CutoverConsolePage,加入摘要卡片、列表/时间线双视图、startsAt 倒计时和统一创建/编辑弹窗,同时保留 dry-run 区域。","/system/cutover 展示启用/禁用/待生效摘要;scope 列表表格展示状态、startsAt、倒计时和操作;时间线视图基于当前 CutoverScope 记录展示创建/计划生效/最近更新节点;创建与编辑均支持 startsAt 日期时间选择;快速切换 enabled 后摘要与列表同步刷新。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && node --check src/routes/cutover.js && cd ../client && npm run typecheck && npm run build。业务:1) 已启用/已禁用/待生效统计正确;2) 列表视图可看到 startsAt 倒计时;3) 时间线视图显示创建、计划生效、最近更新节点;4) 创建与编辑 scope 时可设置 startsAt 且不回归 dry-run 上传。","manual","DONE","DONE","DONE","client/src/pages/CutoverConsolePage.tsx|client/src/api/cutover.ts","[""A1""]","回滚路径:恢复现有切换范围卡片列表与内联创建表单,不改 dry-run API。2026-04-07:CutoverConsolePage 已增强为摘要卡片 + 列表/时间线双视图 + 统一 scope 弹窗,client typecheck/build 通过。"
|
||
"A5","R54 reviewer 权限与事务边界复核","按 reviewer 清单复核 changelog 只读性、impact 映射一致性、batch 事务回滚与审计完整性,以及 Cutover 页面权限边界。","review 结论覆盖:changelog 仅读 audit_logs;impact 映射与 NAVIGATION_REGISTRY 及后端常量一致;batch 在单事务内整批回滚;每个成功变更 flag 都写独立 audit;/system/cutover 与 /api/cutover/* 继续仅收口 system.settings;无 Prisma 迁移、无 evaluateFeatureFlag 行为漂移。","检查:1) 阅读 featureFlags.js 与 FeatureFlagsPage 变更,确认 changelog/impact 无副作用;2) 验证 batch 任一冲突不产生部分更新;3) 核对 audit 写入次数与 extra.from/to;4) 验证 Cutover 页面仍依赖 system.settings 与 cutover_console_v1 闸门。若发现问题,修复后重跑相关测试与构建。","manual","DONE","DONE","DONE","issues/2026-04-07_r54-cutover-feature-flags.csv|server/src/routes/featureFlags.js|client/src/pages/FeatureFlagsPage.tsx|client/src/pages/CutoverConsolePage.tsx","[""A2"",""A3"",""A4""]","回滚路径:若 reviewer 发现权限或事务问题,先下线相关入口,再回退对应代码。2026-04-07:已完成 reviewer 风格自检,确认 changelog 只读 audit_logs、impact 与 NAVIGATION_REGISTRY/后端常量一致、batch 为单事务整批回滚且每个 flag 单独写 audit。"
|
||
"A6","QA、状态回填与提交收口","执行 R54 post-check 与业务回归,回填 CSV 状态并完成提交收口,确保特性开关与 Cutover 运维增强不回归。","后端与前端校验全部通过;Feature Flag 单条更新、changelog/impact、批量 override、Cutover 摘要/列表/时间线/startsAt 编辑均回归通过;issues/2026-04-07_r54-cutover-feature-flags.csv 的 Dev_Status、Review1_Status、Regression_Status 按测试结果回填。","命令:export PATH=/home/shunli/.nvm/versions/node/v22.20.0/bin:$PATH && cd server && npx prisma validate && node --check src/routes/featureFlags.js && node --check src/routes/cutover.js && npm test -- tests/unit/routes/featureFlags.changelog.test.js tests/unit/routes/featureFlags.batch.test.js && cd ../client && npm run typecheck && npm run build。业务:1) 单条 flag 保存不回归;2) 批量 override 成功与冲突场景都正确;3) changelog 与 impact 弹窗展示正常;4) Cutover 摘要、倒计时、时间线、创建/编辑 startsAt 与 dry-run 均正常。","manual","DONE","DONE","DONE","issues/2026-04-07_r54-cutover-feature-flags.csv|server/src/routes/featureFlags.js|server/tests/unit/routes/featureFlags.changelog.test.js|server/tests/unit/routes/featureFlags.batch.test.js|client/src/api/featureFlags.ts|client/src/pages/FeatureFlagsPage.tsx|client/src/pages/CutoverConsolePage.tsx","[""A5""]","回滚路径:若 QA 发现关键回归,暂停提交并回退对应代码变更。2026-04-07:本地执行 prisma validate、featureFlags/cutover node --check、两组 featureFlags 路由单测、client typecheck/build、git diff --check 全部通过;Vitest 在 server 目录下需使用 tests/unit/... 路径。"
|