9.2 KiB
9.2 KiB
RailwaySystem Phase 3:P0 Epic / Issue 任务拆分总纲
阶段状态: Phase 3 任务分解完成稿 (正式基线) 业务最高基线:
doc/RailwaySystem 智慧培训系统一期 PRD V1.0.md数据库基线:db-v2-migration-passed-20260914(21张表 KingbaseES 物理迁移验证通过) 代码生成器基线:generator-v2-ready-20260914(Kingbase 只读验证通过) API 契约基线:api-v2-contract-v1.0(Review Round 1 修订版,91 个 API) 本阶段原则: 业务能力驱动拆分,严禁一张表机械对应一个 Issue;只拆 P0,P1/P2 仅作 Backlog 登记;严禁编写业务代码与修改数据库。
1. 拆分目标与核心原则
本阶段旨在将 api-v2-contract-v1.0 中的 49 个 P0 API 以及支撑业务运转的核心基础设施,转化为可独立开发、可代码审查 (Review)、可自动化测试、可业务验收的 Epic 与 Issue。
1.1 最高拆分原则
- 业务能力驱动,拒绝单表 CRUD:
- 错误做法:拆分为
开发 train_enrollment 表 CRUD、开发 train_lesson 表 CRUD。 - 正确做法:拆分为
实现培训计划参训人员管理 (含防重与名单)、实现课次排课与四维冲突排他锁检测。
- 错误做法:拆分为
- 只拆 P0 闭环,严格控制范围:
- 锁定 49 个 P0 API 作为本轮研发唯一核心目标;
- 40 个 P1 辅助 API 与 2 个 P2 远期 API 仅在
07_p1_p2_backlog.md中登记备查,不计入开发排期。
- 主数据最小必要集合原则:
- 基础主数据不作为全量阻塞项,仅建设支撑主业务链路所必需的最小集合(Teacher, Student, Course, Classroom, TrainingSite, Dormitory)。
- 不变量与并发控制强行绑定:
- 5 大跨表业务硬不变量(INV-01 ~ INV-05)与 1 项报到生命周期策略,责任落实到唯一的责任 Issue;
- 排课并发冲突(教师/教室/场地/班级)与宿舍分配防超卖(行锁
SELECT FOR UPDATE+ 性别隔离),必须在 Issue 中明确 SQL 与锁策略。
- 外部对接 Mock 优先与事务轻量解耦:
- 外部硬件系统(班牌、门禁、VR/3D)一期一律采用 SPI + Mock 桩实现,严禁引入 MQ、Kafka、RabbitMQ、Outbox 等重型中间件;
- 外部调用一律置于数据库本地事务之外,通过事务提交后(
afterCommit)轻量解耦触发,外部失败绝不回滚已提交的业务数据,支持手动重试。
2. 主链路业务开发优先级
系统的所有 Issue 依赖与开发批次(Wave),均严格围绕以下最短业务闭环主链路展开推进:
flowchart TD
M1[基础数据: 教师 / 学员 / 课程 / 空间] --> M2[创建培训计划 Plan]
M2 --> M3[配置本期课程 PlanCourse]
M3 --> M4[添加参训名单 Enrollment]
M4 --> M5[课次排课与冲突检测 Lesson]
M5 --> M6[聚合生成完整课表 Timetable]
M4 --> M7[住宿批量预分配 Accommodation]
M7 --> M8[学员报到确认 Report]
M5 --> M9[电子班牌打卡考勤 Attendance]
M8 --> M9
M9 --> M10[成绩项目与打分台账 Score]
M4 --> M11[外部实训记录接入 StudyRecord]
M10 --> M12[培训综合统计与工作台 Statistics/Workbench]
M11 --> M12
M12 --> M13[结束培训计划 Complete Plan]
style M1 fill:#e1f5fe,stroke:#0288d1,stroke-width:2px
style M2 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
style M4 fill:#fff3e0,stroke:#f57c00,stroke-width:2px
style M5 fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
style M7 fill:#e0f2f1,stroke:#00796b,stroke-width:2px
style M9 fill:#fbe9e7,stroke:#d84315,stroke-width:2px
style M10 fill:#fffde7,stroke:#fbc02d,stroke-width:2px
style M13 fill:#ede7f6,stroke:#512da8,stroke-width:2px
3. 全局核心统计指标
经严密分解与审查,Phase 3 输出的核心统计指标如下:
| 统计维度 | 指标数值 | 备注说明 |
|---|---|---|
| Epic 总数 | 12 个 | 覆盖主数据、核心计划、排课、住宿、门禁、考勤、成绩、学习、统计、权限字典与端到端验收 |
| P0 Issue 总数 | 21 个 | 每个 Issue 为 0.5~2 个开发日的独立可验收业务能力 |
| P0 API 覆盖率 | 100% (49/49) | 完整映射 API Contract 中全部 49 个 P0 API(且涵盖 Module A 全部 20 个接口) |
| Contract Gap 数量 | 2 项 | 详见本文档第 4 节及 Risk Register,技术风险完全可控 |
| 开发 Wave 数量 | 8 个 | Wave 0 (准备) ~ Wave 7 (验收),层层递进 |
| 首批可立即开发 Issue | 8 个 | Wave 0 (3个) + Wave 1 中不依赖 Plan 的基础数据 (5个) |
| 必须等待 Module B 的 Issue | 10 个 | 涵盖排课、住宿分配、报到、考勤、成绩配置/录入、学习记录、工作台与端到端验收 |
| Generator 策略分布 | YES: 4, PARTIAL: 10, NO: 7 | 基础表用 YES/PARTIAL 生成骨架,核心领域逻辑与聚合手写 |
| Recommended Agent 分工 | Gemini: 9, Codex: 12 | Gemini 负责基础 CRUD/VO/权限字典;Codex 负责高并发锁/复杂事务/不变量/端到端 |
4. 契约偏差审查 (Contract Gap Analysis)
在对齐 api-v2-contract-v1.0 与 Issue 拆分过程中,识别并登记了 2 项契约统计与定义的细微偏差(Contract Gap):
4.1 Gap 1:Module A P0 统计数字与正文标注偏差 (16 vs 20)
- 现象:
00_readme.md与02_module_a_base_resource_api.md概览统计声明 Module A 拥有 16 个 P0 API、22 个 P1 API(总数 38)。但正文中带有【P0】标记的条目实际有 20 个(教师 4 个、学员 3 个、课程 3 个、教室 3 个、场地 3 个、宿舍 4 个)。 - 根因: 宿舍管理的 4 个接口(
GET /train/dormitory/list,GET /train/dormitory/{dormId},POST /train/dormitory,GET /train/dormitory/options)在正文中被标记为 P0,但概览统计口径中未将其计入主数据最小必要集合(4+3+3+3+3 = 16)。 - 处理策略:
- 本次 Issue 拆分采取最大化安全覆盖原则:设立独立
ISSUE-01-05完整实现宿舍 4 个基础维护接口,保证无论是按 16 还是 20 统计口径,实际业务均不受任何阻塞; - 正式 API 覆盖率判定中,49/49 个 P0 API 实现 100% 全覆盖。
- 本次 Issue 拆分采取最大化安全覆盖原则:设立独立
4.2 Gap 2:Module B 课次单查接口定义缺失
- 现象:
00_readme.md第 136 行概览描述写有“课次详情”,但03_module_b_plan_enrollment_schedule_api.md正文中未独立定义GET /train/lessons/{lessonId}接口。 - 根因: 排课界面的数据回显完全由
GET /train/plans/{planId}/timetable(完整课表 VO)及冲突预检接口支撑,不需要对单课次频繁发起独立的详情 HTTP 请求。 - 处理策略: 严格遵循“不得在 Issue 阶段擅自发明新 API”铁律,暂不新增独立的课次详情接口,排课回显通过现有 Timetable 接口与课次列表解决;若后续前端组件有强诉求,由技术负责人走 API Contract Change 流程统一增补。
5. 文档索引导航 (docs/issues-v1/)
本套 Issue 任务分解规范包含以下 9 篇文档:
| 序号 | 文档名称 | 核心内容 |
|---|---|---|
| 00 | 00_readme.md |
阶段总纲、最高原则、主链路、统计总览、Contract Gap 分析与文档索引 |
| 01 | 01_epic_overview.md |
12 个业务 Epic 概览、目标、业务边界与包含的 Issue 对应清单 |
| 02 | 02_p0_issue_backlog.md |
21 个 P0 Issue 详细技术卡片(严格包含 22 项技术定义与 Given/When/Then 验收准则) |
| 03 | 03_dependency_graph.md |
Mermaid DAG 依赖图,清晰展示串行依赖与并行泳道 |
| 04 | 04_wave_plan.md |
Wave 0 ~ Wave 7 开发推进批次计划、进入条件、产出目标与退出准则 |
| 05 | 05_agent_assignment.md |
Gemini Flash 与 Codex 研发分工建议及 Generator (YES/PARTIAL/NO) 执行策略 |
| 06 | 06_acceptance_matrix.md |
全链路追踪矩阵 (UC → API → Issue → Test) 及 5 大 Invariant / 1 项生命周期策略归属矩阵 |
| 07 | 07_p1_p2_backlog.md |
40 个 P1 辅助 API 与 2 个 P2 远期 API 的统一登记与后续演进规划 |
| 08 | 08_risk_register.md |
技术风险登记册、并发防死锁策略、外部 Mock 隔离与现场确认事项应对策略 |