feat: 完成P13治理收尾并创建P14执行合同(Issue: P13-1,P13-2,P13-3,P13-4,P13-5,P13-6,P13-7,P13-8,P14-0)

这个提交包含在:
2026-02-13 00:25:04 +08:00
父节点 3b221a2202
当前提交 1412fead5d
共修改 30 个文件,包含 3988 行新增和 105 行删除
@@ -0,0 +1,10 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P13-0,P13执行合同建档,创建并冻结P13治理增强Issue合同及依赖关系,CSV通过校验且字段规范完整,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-02-12_01-09-41-p13-l5-governance.csv,manual,DONE,DONE,DONE,issues/2026-02-12_01-09-41-p13-l5-governance.csv,[],none
P13-1,后端单元测试框架引入,在server引入可执行单测框架与基础脚手架并设置npm test可运行,`cd server && npm test`可执行且至少包含1个示例测试通过,cd server && npm test,manual,DONE,DONE,DONE,server/package.json | server/vitest.config.* | server/tests/**,"[""P13-0""]",新增依赖: vitest@^2 + @vitest/coverage-v8@^2;回滚: 移除test脚本与依赖;已验收: npm test/test:coverage
P13-2,核心服务单元测试补齐,为高风险治理链路补单测: featureFlags/verification/integration dispatcher,核心链路覆盖并包含开关阻断/灰度/重试异常等关键分支,cd server && npm test -- --coverage,manual,DONE,DONE,DONE,server/src/services/featureFlags/index.js | server/src/services/verification/index.js | server/src/services/integrations/dispatcher.js | server/tests/unit/**,"[""P13-1""]",已补齐featureFlags/verification/dispatcher核心分支单测;验收通过: cd server && npm test && npm run test:coverage;回滚: 删除新增单测文件并恢复Issue状态
P13-3,OpenAPI自动文档接入,接入Fastify Swagger并产出可访问或可导出的OpenAPI文档,非生产且OPENAPI_DOCS_ENABLED=true时,/api/docs 与 /api/docs/json 可访问,NODE_ENV=development OPENAPI_DOCS_ENABLED=true JOBS_ENABLED=false cd server && npm run start & sleep 3 && curl -sf http://127.0.0.1:3000/api/docs >/dev/null && curl -sf http://127.0.0.1:3000/api/docs/json | jq '.openapi' >/dev/null,manual,DONE,DONE,DONE,server/src/app.js | server/src/routes/featureFlags.js | server/src/routes/integrations.js | server/src/routes/invoicePool/verification.js | server/src/plugins/swagger.js | server/src/utils/openapi.js | server/src/config.js | server/.env.example | server/package.json,"[""P13-0""]","新增依赖: @fastify/swagger + @fastify/swagger-ui;回滚: OPENAPI_DOCS_ENABLED=false 或移除插件注册;已验收: /api/docs dev可用, prod隐藏"
P13-4,SLI-SLO与错误预算落地,将现有非功能基线文档升级为可执行SLO并提供告警规则草案,形成明确SLI/SLO/错误预算与Prometheus规则文件并可检查,test -f docs/ops/slo.md && test -f deploy/prometheus/alerts-slo.yml,manual,DONE,DONE,DONE,docs/ops/non-functional-baseline.md | docs/ops/slo.md | deploy/prometheus/alerts-slo.yml,"[""P13-0""]",已新增SLO文档与Prometheus告警规则;验收通过: test -f docs/ops/slo.md && test -f deploy/prometheus/alerts-slo.yml;回滚: 删除新增文档与规则并恢复Issue状态
P13-5,回归脚本结构化报告输出,为regression-all增加JSON报告能力并标准化结果字段,可输出commit/时间戳/脚本项结果并可被CI消费,cd server && ./scripts/regression-all.sh --json-report /tmp/regression-report.json && jq . /tmp/regression-report.json >/dev/null,manual,DONE,DONE,DONE,server/scripts/regression-all.sh | server/scripts/lib/regression-report.sh,"[""P13-0""]",已支持--json-report并输出schema_version=1.0;支持enabled/failed/skipped结构化步骤;回滚: 不使用--json-report保持旧行为
P13-6,CI回归报告归档,在GitHub Actions中上传回归JSON报告并关联commit SHA,CI产物可下载且报告包含失败项定位信息,gh run view --log || manual: 在Actions页面确认artifact存在,manual,DONE,DONE,DONE,.github/workflows/ci-regression.yml | docs/ops/ci-regression-reporting.md,"[""P13-5""]",ci-regression已输出/tmp/hyb-oa-regression/report.json并通过actions/upload-artifact归档;回滚: 移除artifact步骤
P13-7,变更失败率统计脚本,基于回归JSON生成按时间窗口统计的Change Failure Rate报表,生成周/月维度失败率报表并可复算,"python3 scripts/cfr_report.py --input-dir artifacts/regression --window 7d,30d --output-json /tmp/cfr.json && jq -e '.windows[""30d""].run_cfr_pct >= 0' /tmp/cfr.json >/dev/null",manual,DONE,DONE,DONE,scripts/cfr_report.py | docs/ops/dora-metrics.md | docs/feature-matrix.md,"[""P13-6""]",新增CFR统计脚本,支持7d/30d窗口与可选hotfix-csv;failed_commit=回归失败或24h热修
P13-8,P13验收与矩阵收口,执行P13相关校验并同步feature matrix与Issue状态,check-minimal+关键回归通过且矩阵一致性通过,./scripts/check-minimal.sh && cd server && RUN_AUDIT_REGRESSION=1 RUN_OCR_REGRESSION=1 RUN_FEATURE_FLAGS_REGRESSION=1 ./scripts/regression-all.sh --json-report /tmp/regression-report.json && cd /home/shunli/Projects/hyb-oa && python3 scripts/validate-feature-matrix.py,manual,DONE,DONE,DONE,docs/feature-matrix.md | scripts/validate-feature-matrix.py | issues/2026-02-12_01-09-41-p13-l5-governance.csv,"[""P13-2"",""P13-3"",""P13-4"",""P13-7""]",已纳入P13事实源并补齐P13-0~P13-8矩阵行;完成后统一三状态DONE
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P13-0 P13执行合同建档 创建并冻结P13治理增强Issue合同及依赖关系 CSV通过校验且字段规范完整 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-02-12_01-09-41-p13-l5-governance.csv manual DONE DONE DONE issues/2026-02-12_01-09-41-p13-l5-governance.csv [] none
3 P13-1 后端单元测试框架引入 在server引入可执行单测框架与基础脚手架并设置npm test可运行 `cd server && npm test`可执行且至少包含1个示例测试通过 cd server && npm test manual DONE DONE DONE server/package.json | server/vitest.config.* | server/tests/** ["P13-0"] 新增依赖: vitest@^2 + @vitest/coverage-v8@^2;回滚: 移除test脚本与依赖;已验收: npm test/test:coverage
4 P13-2 核心服务单元测试补齐 为高风险治理链路补单测: featureFlags/verification/integration dispatcher 核心链路覆盖并包含开关阻断/灰度/重试异常等关键分支 cd server && npm test -- --coverage manual DONE DONE DONE server/src/services/featureFlags/index.js | server/src/services/verification/index.js | server/src/services/integrations/dispatcher.js | server/tests/unit/** ["P13-1"] 已补齐featureFlags/verification/dispatcher核心分支单测;验收通过: cd server && npm test && npm run test:coverage;回滚: 删除新增单测文件并恢复Issue状态
5 P13-3 OpenAPI自动文档接入 接入Fastify Swagger并产出可访问或可导出的OpenAPI文档 非生产且OPENAPI_DOCS_ENABLED=true时,/api/docs 与 /api/docs/json 可访问 NODE_ENV=development OPENAPI_DOCS_ENABLED=true JOBS_ENABLED=false cd server && npm run start & sleep 3 && curl -sf http://127.0.0.1:3000/api/docs >/dev/null && curl -sf http://127.0.0.1:3000/api/docs/json | jq '.openapi' >/dev/null manual DONE DONE DONE server/src/app.js | server/src/routes/featureFlags.js | server/src/routes/integrations.js | server/src/routes/invoicePool/verification.js | server/src/plugins/swagger.js | server/src/utils/openapi.js | server/src/config.js | server/.env.example | server/package.json ["P13-0"] 新增依赖: @fastify/swagger + @fastify/swagger-ui;回滚: OPENAPI_DOCS_ENABLED=false 或移除插件注册;已验收: /api/docs dev可用, prod隐藏
6 P13-4 SLI-SLO与错误预算落地 将现有非功能基线文档升级为可执行SLO并提供告警规则草案 形成明确SLI/SLO/错误预算与Prometheus规则文件并可检查 test -f docs/ops/slo.md && test -f deploy/prometheus/alerts-slo.yml manual DONE DONE DONE docs/ops/non-functional-baseline.md | docs/ops/slo.md | deploy/prometheus/alerts-slo.yml ["P13-0"] 已新增SLO文档与Prometheus告警规则;验收通过: test -f docs/ops/slo.md && test -f deploy/prometheus/alerts-slo.yml;回滚: 删除新增文档与规则并恢复Issue状态
7 P13-5 回归脚本结构化报告输出 为regression-all增加JSON报告能力并标准化结果字段 可输出commit/时间戳/脚本项结果并可被CI消费 cd server && ./scripts/regression-all.sh --json-report /tmp/regression-report.json && jq . /tmp/regression-report.json >/dev/null manual DONE DONE DONE server/scripts/regression-all.sh | server/scripts/lib/regression-report.sh ["P13-0"] 已支持--json-report并输出schema_version=1.0;支持enabled/failed/skipped结构化步骤;回滚: 不使用--json-report保持旧行为
8 P13-6 CI回归报告归档 在GitHub Actions中上传回归JSON报告并关联commit SHA CI产物可下载且报告包含失败项定位信息 gh run view --log || manual: 在Actions页面确认artifact存在 manual DONE DONE DONE .github/workflows/ci-regression.yml | docs/ops/ci-regression-reporting.md ["P13-5"] ci-regression已输出/tmp/hyb-oa-regression/report.json并通过actions/upload-artifact归档;回滚: 移除artifact步骤
9 P13-7 变更失败率统计脚本 基于回归JSON生成按时间窗口统计的Change Failure Rate报表 生成周/月维度失败率报表并可复算 python3 scripts/cfr_report.py --input-dir artifacts/regression --window 7d,30d --output-json /tmp/cfr.json && jq -e '.windows["30d"].run_cfr_pct >= 0' /tmp/cfr.json >/dev/null manual DONE DONE DONE scripts/cfr_report.py | docs/ops/dora-metrics.md | docs/feature-matrix.md ["P13-6"] 新增CFR统计脚本,支持7d/30d窗口与可选hotfix-csv;failed_commit=回归失败或24h热修
10 P13-8 P13验收与矩阵收口 执行P13相关校验并同步feature matrix与Issue状态 check-minimal+关键回归通过且矩阵一致性通过 ./scripts/check-minimal.sh && cd server && RUN_AUDIT_REGRESSION=1 RUN_OCR_REGRESSION=1 RUN_FEATURE_FLAGS_REGRESSION=1 ./scripts/regression-all.sh --json-report /tmp/regression-report.json && cd /home/shunli/Projects/hyb-oa && python3 scripts/validate-feature-matrix.py manual DONE DONE DONE docs/feature-matrix.md | scripts/validate-feature-matrix.py | issues/2026-02-12_01-09-41-p13-l5-governance.csv ["P13-2","P13-3","P13-4","P13-7"] 已纳入P13事实源并补齐P13-0~P13-8矩阵行;完成后统一三状态DONE
@@ -0,0 +1,10 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
P14-0,P14执行合同建档,创建并校验P14执行合同CSV,冻结依赖关系与字段规范,CSV通过校验且字段完整,python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-02-13_00-11-56-p14-l5-operationalization.csv,manual,DONE,DONE,DONE,issues/2026-02-13_00-11-56-p14-l5-operationalization.csv,[],none
P14-1,回归报告Schema固化,为regression JSON报告补schema校验器并固化schema_version=1.0,报告缺字段或类型不匹配时校验失败,cd server && ./scripts/regression-all.sh --json-report /tmp/r.json && python3 ../scripts/validate_regression_report.py /tmp/r.json,manual,TODO,TODO,TODO,server/scripts/lib/regression-report.sh | server/scripts/regression-all.sh | scripts/validate_regression_report.py | docs/ops/ci-regression-reporting.md,"[""P14-0""]",schema_version固定1.0;回滚: 仅保留基础report字段
P14-2,CI回归摘要发布,在ci-regression输出Job Summary并保留artifact定位失败步骤,Actions Summary可直接查看失败步骤与报告下载链接,manual: 触发ci-regression并在Actions页面核验summary与artifact,manual,TODO,TODO,TODO,.github/workflows/ci-regression.yml | docs/ops/ci-regression-reporting.md,"[""P14-1""]",不引入外部SaaS
P14-3,CFR自动周/月报,将CFR计算纳入自动化并产出7d/30d报表,可稳定产出JSON与Markdown双格式报表并可复算,"python3 scripts/cfr_report.py --input-dir artifacts/regression --window 7d,30d --output-json /tmp/cfr.json --output-md /tmp/cfr.md",manual,TODO,TODO,TODO,scripts/cfr_report.py | docs/ops/dora-metrics.md | .github/workflows/ci-regression.yml,"[""P14-2""]",热修通过--hotfix-csv合并口径
P14-4,高风险服务单测扩容,补齐featureFlags/verification/integrations/outbox/workflow util关键分支单测,新增至少20个测试并提升关键模块覆盖率,cd server && npm test && npm run test:coverage,manual,TODO,TODO,TODO,server/tests/unit/**/*.test.js | server/src/services/featureFlags/index.js | server/src/services/verification/index.js | server/src/services/integrations/dispatcher.js | server/src/services/integrations/outbox.js | server/src/services/integrations/erp.js | server/src/utils/workflow.js,"[""P14-0""]",仅纯单测,不连DB
P14-5,覆盖率门禁渐进,建立coverage gate策略:PR告警、main阻断,main分支低于阈值失败;PR仅提示不阻断,cd server && npm run test:coverage && node ../scripts/coverage_gate.js --mode=ci,manual,TODO,TODO,TODO,server/vitest.config.cjs | scripts/coverage_gate.js | .github/workflows/ci-minimal.yml | docs/ops/testing-strategy.md,"[""P14-4""]",初始阈值仅关键模块lines>=70%,全局先告警
P14-6,OpenAPI覆盖扩展与漂移检查,扩展高频路由OpenAPI schema并增加导出与对比检查,/api/docs/json包含新增路径且导出结果可做diff,NODE_ENV=development OPENAPI_DOCS_ENABLED=true cd server && node scripts/export_openapi.js --out /tmp/openapi.json && jq '.paths|keys' /tmp/openapi.json,manual,TODO,TODO,TODO,server/src/routes/reimbursements.js | server/src/routes/workflow.js | server/src/routes/invoicePool/read.js | server/scripts/export_openapi.js | scripts/openapi_diff_check.py,"[""P14-0""]",不改业务语义,仅补schema
P14-7,分布式追踪最小落地,引入OTel trace基础链路与环境硬闸,默认关闭,开关开启可导出trace,关闭无行为变化,cd server && node --check src/observability/tracing.js && manual: 验证traceparent透传,manual,TODO,TODO,TODO,server/src/observability/tracing.js | server/src/app.js | server/src/index.js | server/src/config.js | server/.env.example | docs/ops/tracing.md,"[""P14-0""]",默认OTEL_TRACES_ENABLED=false,fail-safe
P14-8,P14验收与矩阵收口,执行P14全量校验并同步feature-matrix与执行合同状态,check-minimal+regression-all+matrix校验全部通过,./scripts/check-minimal.sh && cd server && ./scripts/regression-all.sh --json-report /tmp/regression-report.json && cd /home/shunli/Projects/hyb-oa && python3 scripts/validate-feature-matrix.py,manual,TODO,TODO,TODO,docs/feature-matrix.md | scripts/validate-feature-matrix.py | issues/*.csv,"[""P14-3"",""P14-5"",""P14-6"",""P14-7""]",三状态全DONE后关闭
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P14-0 P14执行合同建档 创建并校验P14执行合同CSV,冻结依赖关系与字段规范 CSV通过校验且字段完整 python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-02-13_00-11-56-p14-l5-operationalization.csv manual DONE DONE DONE issues/2026-02-13_00-11-56-p14-l5-operationalization.csv [] none
3 P14-1 回归报告Schema固化 为regression JSON报告补schema校验器并固化schema_version=1.0 报告缺字段或类型不匹配时校验失败 cd server && ./scripts/regression-all.sh --json-report /tmp/r.json && python3 ../scripts/validate_regression_report.py /tmp/r.json manual TODO TODO TODO server/scripts/lib/regression-report.sh | server/scripts/regression-all.sh | scripts/validate_regression_report.py | docs/ops/ci-regression-reporting.md ["P14-0"] schema_version固定1.0;回滚: 仅保留基础report字段
4 P14-2 CI回归摘要发布 在ci-regression输出Job Summary并保留artifact定位失败步骤 Actions Summary可直接查看失败步骤与报告下载链接 manual: 触发ci-regression并在Actions页面核验summary与artifact manual TODO TODO TODO .github/workflows/ci-regression.yml | docs/ops/ci-regression-reporting.md ["P14-1"] 不引入外部SaaS
5 P14-3 CFR自动周/月报 将CFR计算纳入自动化并产出7d/30d报表 可稳定产出JSON与Markdown双格式报表并可复算 python3 scripts/cfr_report.py --input-dir artifacts/regression --window 7d,30d --output-json /tmp/cfr.json --output-md /tmp/cfr.md manual TODO TODO TODO scripts/cfr_report.py | docs/ops/dora-metrics.md | .github/workflows/ci-regression.yml ["P14-2"] 热修通过--hotfix-csv合并口径
6 P14-4 高风险服务单测扩容 补齐featureFlags/verification/integrations/outbox/workflow util关键分支单测 新增至少20个测试并提升关键模块覆盖率 cd server && npm test && npm run test:coverage manual TODO TODO TODO server/tests/unit/**/*.test.js | server/src/services/featureFlags/index.js | server/src/services/verification/index.js | server/src/services/integrations/dispatcher.js | server/src/services/integrations/outbox.js | server/src/services/integrations/erp.js | server/src/utils/workflow.js ["P14-0"] 仅纯单测,不连DB
7 P14-5 覆盖率门禁渐进 建立coverage gate策略:PR告警、main阻断 main分支低于阈值失败;PR仅提示不阻断 cd server && npm run test:coverage && node ../scripts/coverage_gate.js --mode=ci manual TODO TODO TODO server/vitest.config.cjs | scripts/coverage_gate.js | .github/workflows/ci-minimal.yml | docs/ops/testing-strategy.md ["P14-4"] 初始阈值仅关键模块lines>=70%,全局先告警
8 P14-6 OpenAPI覆盖扩展与漂移检查 扩展高频路由OpenAPI schema并增加导出与对比检查 /api/docs/json包含新增路径且导出结果可做diff NODE_ENV=development OPENAPI_DOCS_ENABLED=true cd server && node scripts/export_openapi.js --out /tmp/openapi.json && jq '.paths|keys' /tmp/openapi.json manual TODO TODO TODO server/src/routes/reimbursements.js | server/src/routes/workflow.js | server/src/routes/invoicePool/read.js | server/scripts/export_openapi.js | scripts/openapi_diff_check.py ["P14-0"] 不改业务语义,仅补schema
9 P14-7 分布式追踪最小落地 引入OTel trace基础链路与环境硬闸,默认关闭 开关开启可导出trace,关闭无行为变化 cd server && node --check src/observability/tracing.js && manual: 验证traceparent透传 manual TODO TODO TODO server/src/observability/tracing.js | server/src/app.js | server/src/index.js | server/src/config.js | server/.env.example | docs/ops/tracing.md ["P14-0"] 默认OTEL_TRACES_ENABLED=false,fail-safe
10 P14-8 P14验收与矩阵收口 执行P14全量校验并同步feature-matrix与执行合同状态 check-minimal+regression-all+matrix校验全部通过 ./scripts/check-minimal.sh && cd server && ./scripts/regression-all.sh --json-report /tmp/regression-report.json && cd /home/shunli/Projects/hyb-oa && python3 scripts/validate-feature-matrix.py manual TODO TODO TODO docs/feature-matrix.md | scripts/validate-feature-matrix.py | issues/*.csv ["P14-3","P14-5","P14-6","P14-7"] 三状态全DONE后关闭