diff --git a/docs/feature-matrix.md b/docs/feature-matrix.md index 1c002b38..497af371 100644 --- a/docs/feature-matrix.md +++ b/docs/feature-matrix.md @@ -1,8 +1,8 @@ -# hyb-oa 实现状态矩阵(P5-P16C) +# hyb-oa 实现状态矩阵(P5-G2) **快照日期**:2026-03-07 -**范围**:`F1-F42`(含 `F19b/F19c/F19d`)+ `R1-S2` + `P9A1-P9D1` + `P10E1-P10G1` + `G0-G6` + `H1` + `M1-M4` + `P13-0-P13-8` + `P14-0-P14-8` + `P15A-0-P15A-5` + `P15B-0-P15B-6` + `P16A-0-P16A-6` + `P16B-0-P16B-6` + `P16C-0-P16C-6`,共 145 项。 -**事实源**:`issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` + `issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv` + `issues/2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv` + `issues/2026-02-10_10-35-30-p10-production-hardening.csv` + `issues/2026-02-11-p11-p12-governance-mobile.csv` + `issues/2026-02-12_01-09-41-p13-l5-governance.csv` + `issues/2026-02-13_00-11-56-p14-l5-operationalization.csv` + `issues/2026-03-06_14-30-00-p15a-l5-permission-decouple.csv` + `issues/2026-03-06_14-30-00-p15b-l5-leave-v1.csv` + `issues/2026-03-07_13-47-05-p16a-l5-master-data-core.csv` + `issues/2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv` + `issues/2026-03-07_17-14-39-p16c-l5-suppliers.csv`(执行合同) +**范围**:`F1-F42`(含 `F19b/F19c/F19d`)+ `R1-S2` + `P9A1-P9D1` + `P10E1-P10G1` + `G0-G6` + `H1` + `M1-M4` + `P13-0-P13-8` + `P14-0-P14-8` + `P15A-0-P15A-5` + `P15B-0-P15B-6` + `P16A-0-P16A-6` + `P16B-0-P16B-6` + `P16C-0-P16C-6` + `R9-0-R9-3` + `G2-0-G2-6`,共 156 项。 +**事实源**:`issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` + `issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv` + `issues/2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv` + `issues/2026-02-10_10-35-30-p10-production-hardening.csv` + `issues/2026-02-11-p11-p12-governance-mobile.csv` + `issues/2026-02-12_01-09-41-p13-l5-governance.csv` + `issues/2026-02-13_00-11-56-p14-l5-operationalization.csv` + `issues/2026-03-06_14-30-00-p15a-l5-permission-decouple.csv` + `issues/2026-03-06_14-30-00-p15b-l5-leave-v1.csv` + `issues/2026-03-07_13-47-05-p16a-l5-master-data-core.csv` + `issues/2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv` + `issues/2026-03-07_17-14-39-p16c-l5-suppliers.csv` + `issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv` + `issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv`(执行合同) **说明**: - 本矩阵用于全局读图(审计/交接/回归覆盖追踪),不替代 `issues/*.csv` 的执行合同职责。 @@ -167,3 +167,17 @@ | P16C-4 | 前端供应商Tab与API封装 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | client:typecheck/build | `MasterDataPage` 新增供应商 Tab 与 API 封装完成 | | P16C-5 | 矩阵与蓝图事实源同步 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | validate-feature-matrix | P16C 条目、范围与事实源同步完成 | | P16C-6 | P16C回归与安全收口 | §18(供应商主数据治理) | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07_17-14-39-p16c-l5-suppliers.csv | 2026-03-07 | DONE | regression-all + manual supplier flow | finance 只读 finance_mgr 可维护 employee 无查看权限 且重复/归档幂等验证通过 | + +| R9-0 | R9执行合同建档 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | CSV 校验 | 新路线图合同建档并校验通过 | +| R9-1 | 冻结P16C之后的新阶段顺序 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | validate-feature-matrix | 固定顺序为 G2 → P17A → P17B → P18A → P18B → P19 | +| R9-2 | 冻结Skills与MCP启用边界 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | manual | 继续固定 `plan/testing`,MCP 默认关闭且首次启用前补 `docs/mcp-tools.md` | +| R9-3 | 声明旧P16到P18蓝图为历史快照 | N/A | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | 2026-03-07 | DONE | validate-feature-matrix | 旧蓝图保持不可变,后续阶段不回写历史 CSV | + +| G2-0 | G2执行合同建档 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | CSV 校验 | G2 只处理预算/编号/工作流跨域桥接 | +| G2-1 | 扩展预算与工作流跨域兼容模型 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | prisma:validate + prisma:migrate + prisma:generate | BudgetPool / BudgetLedgerEntry / WorkflowInstance 补齐桥接字段并保持旧报销兼容 | +| G2-2 | 补齐预算接口与通用单据编号读取 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | server:test | 预算 API 支持法体/成本中心维度,新增通用 document sequence 读取与发号服务 | +| G2-3 | 扩展权限解析与工作流实体元数据 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | server:test + regression-workflow-actions | procurement 审批权限与 workflow 实体元数据扩展完成 | +| G2-4 | 升级预算前端为多作用域模式 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | client:typecheck/build | `BudgetsPage` 支持全局/部门/法体+成本中心三种预算模式 | +| G2-5 | 同步R9与G2事实源 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | validate-feature-matrix | Feature Matrix 范围、事实源与 R9/G2 条目同步完成 | +| G2-6 | G2回归与安全收口 | N/A | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | 2026-03-07 | DONE | regression-all + client:typecheck/build | 预算/编号/工作流跨域桥接回归通过,报销主流程零回归 | + diff --git a/issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv b/issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv new file mode 100644 index 00000000..1ce9f50b --- /dev/null +++ b/issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv @@ -0,0 +1,5 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +R9-0,R9执行合同建档,创建并校验R9路线重基线合同CSV,CSV通过校验且字段完整,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,manual,DONE,DONE,DONE,issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,[],R9仅冻结新顺序与技能边界不改业务代码 +R9-1,冻结P16C之后的新阶段顺序,将G2作为P17A前置并冻结G2到P19的单主线顺序,路线顺序在合同与矩阵中可追溯且不再直接从P16C跳采购,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,manual,DONE,DONE,DONE,issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | docs/feature-matrix.md,"[""R9-0""]",固定顺序为G2 P17A P17B P18A P18B P19 +R9-2,冻结Skills与MCP启用边界,明确playwright与security-best-practices使用时序并保持MCP默认关闭,技能与MCP边界在合同中固定且不新增仓库外依赖,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,manual,DONE,DONE,DONE,issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | /home/shunli/.codex/config.toml,"[""R9-0""]",首次启用MCP前必须补docs/mcp-tools.md +R9-3,声明旧P16到P18蓝图为历史快照,保留旧蓝图合同不回写并以R9合同承接后续路线,旧蓝图继续可追溯且后续新增阶段不回写旧CSV,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,manual,DONE,DONE,DONE,issues/2026-03-07_08-15-48-p16-p18-blueprints.csv | issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv,"[""R9-1""]",R9承接后续新阶段旧蓝图保持不可变 diff --git a/issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv b/issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv new file mode 100644 index 00000000..23d16a79 --- /dev/null +++ b/issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv @@ -0,0 +1,8 @@ +ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes +G2-0,G2执行合同建档,创建并校验G2跨域兼容桥接执行合同CSV,CSV通过校验且字段完整,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv,manual,DONE,DONE,DONE,issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv,[],G2只处理预算 编号 工作流跨域桥接不进入采购业务表 +G2-1,扩展预算与工作流跨域兼容模型,为BudgetPool BudgetLedgerEntry WorkflowInstance补齐采购与主数据桥接字段并生成迁移,Prisma schema与迁移可通过校验且保持报销兼容,cd server && npm run prisma:validate && npx prisma migrate dev --name g2_cross_domain_bridge && npm run prisma:generate,manual,DONE,DONE,DONE,server/prisma/schema.prisma | server/prisma/migrations,"[""G2-0""]",保留department_id与reimbursement_id兼容字段 +G2-2,补齐预算接口与通用单据编号读取,扩展预算API支持法体与成本中心维度并新增通用document sequence读取与运行时helper,预算接口和document sequence接口可兼容报销并支撑后续采购,cd server && npm run test,manual,DONE,DONE,DONE,server/src/routes/budgets.js | server/src/routes/configRead.js | server/src/routes/reimbursements.js | server/src/utils | server/src/app.js,"[""G2-1""]",禁止引入新的全局mapper框架 +G2-3,扩展权限解析与工作流实体元数据,为resolveEntityPermission补齐procurement实体并在workflow内新增实体展示元数据,采购任务可按procurement.approve出动作且报销请假不回归,cd server && npm run test && ./scripts/regression-workflow-actions.sh,manual,DONE,DONE,DONE,server/src/constants/permissions.js | server/src/routes/workflow.js | server/src/plugins/auth.js,"[""G2-1""]",仅新增本地helper getWorkflowEntityMeta 不新增permission-mapper.js +G2-4,升级预算前端为多作用域模式,将BudgetsPage从部门预算升级为全局 部门 法体加成本中心三模式并补法体成本中心筛选,预算前端支持新维度创建与筛选且兼容旧部门预算,cd client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,client/src/api/budgets.ts | client/src/pages/BudgetsPage.tsx | client/src/api/masterData.ts,"[""G2-2"",""G2-3""]",不新增独立预算重构页面继续使用BudgetsPage +G2-5,同步R9与G2事实源,新增R9路线合同并在feature-matrix中补G2阶段事实源与说明,矩阵校验通过且G2与R9可追溯,python3 scripts/validate-feature-matrix.py,manual,DONE,DONE,DONE,docs/feature-matrix.md | issues/2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv | issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv,"[""G2-4""]",旧P16到P18蓝图保留为历史快照不回写 +G2-6,G2回归与安全收口,执行后端前端总回归并完成预算 编号 工作流的越权负测,跨域桥接通过回归且无报销请假回归,cd server && npm run test && ./scripts/regression-all.sh && cd ../client && npm run typecheck && npm run build,manual,DONE,DONE,DONE,issues/2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv | server/src/routes/budgets.js | server/src/routes/configRead.js | server/src/routes/workflow.js | client/src/pages/BudgetsPage.tsx,"[""G2-5""]",合并前使用security-best-practices复核预算与对象越权 diff --git a/scripts/validate-feature-matrix.py b/scripts/validate-feature-matrix.py index f10999e6..7963c992 100755 --- a/scripts/validate-feature-matrix.py +++ b/scripts/validate-feature-matrix.py @@ -31,6 +31,8 @@ CSV_FACT_SOURCES = [ ROOT / "issues" / "2026-03-07_13-47-05-p16a-l5-master-data-core.csv", ROOT / "issues" / "2026-03-07_16-22-07-p16b-l5-holiday-calendar.csv", ROOT / "issues" / "2026-03-07_17-14-39-p16c-l5-suppliers.csv", + ROOT / "issues" / "2026-03-07_18-15-03-r9-g2-p19-roadmap-refresh.csv", + ROOT / "issues" / "2026-03-07_18-16-00-g2-l5-cross-domain-bridge.csv", ] ID_PATTERN = re.compile(r"^[A-Z][0-9][0-9A-Za-z-]*$")