01: 报警—工单闭环读模型与 Gogs 票拆分边界
Type: grilling
Status: resolved
Labels: wayfinder:grilling
Blocked by: None
Question
如何把后端 Gogs“真实数据接线(程序级)”上位来源拆成可独立执行、独立验收、可回写本地地图的后端切片票?本票在讨论中将首阶段优先级具体化为:外部业务系统完成报警到工单处置流程,驾驶舱只读同步并呈现闭环;驾驶舱不创建、不更新工单。
Answer
目标与范围
首阶段正式命名为报警—工单闭环读模型:真实设备产生报警,后端既有报警/工单逻辑负责关联与状态流转,外部业务系统执行工单流程,驾驶舱读取真实关系和状态并实时呈现。驾驶舱仍是只读模块,不提供转工单、派单、接单、处置、验收或取消入口。
地图阶段顺序调整为:
- 报警—工单闭环读模型;
- 地图摘要 + 运行监测;
- 基础设施;
- 预警处置;
- 总体概览。
后端切片
首阶段后端拆为三张 Gogs 执行票;本次只锁边界,不在本票中创建远端工单:
- 工单状态与处置率读模型对齐:复用后端已有权威工单字典和工单操作逻辑;Cockpit 读接口输出权威 0–7 状态及名称;处置率固定为状态 5(已结案)工单数 / 状态 0–6 工单数,状态 7(取消)排除;同步事件/设备工单摘要和时间线所需的已有字段。数据库或既有操作流程不存在的字段不新增,不修改工单创建、派单、接单、处置、验收、延期或取消逻辑。
- 报警/工单读模型与设备—监测点回联:按后端现有报警、工单、设备和监测点关系输出可证明的逐条关系。设备详情展示该设备已有的全部工单;其中未与当前报警关联的工单必须明确提示。报警详情只展示与该报警实际关联的工单;没有事件级关系时显示未关联/关系不可用,不以同设备工单推断报警已转单。多工单遵循后端既有当前/有效/最新规则;若后端没有该规则,则保留明细并显示规则缺失,不由前端猜选。
- 报警/工单实时同步:复用现有 REST 快照、驾驶舱 WebSocket 连接、订阅和重连生命周期;只消费真实后端能够证明的报警/工单增量。当前已知设备状态/报警状态可能有 WS,工单状态增量尚未证实;若协议不能表达工单变化,则使用 REST 重取或轮询作为诚实降级,并标明更新延迟,绝不把设备状态增量冒充工单状态增量。
前后端执行票关系
后端三票与前端执行票分离:
- 后端工单状态票先行;前端 0–7 领域字典、时间线、事件/设备摘要、mock 和视图迁移另建前端票,并依赖后端状态票。
- 后端报警/工单读模型票依赖状态票;前端读模型接线票依赖后端读模型票和前端 0–7 迁移票。
- 后端实时同步票依赖前两张后端票;前端实时消费票依赖后端实时票和前端读模型票。
- 三张后端票和三张前端票各自独立验收;不得在相关决策(#02、#03、#04、#05、#06)未收口前创建带完整契约承诺的执行票。
票据归属、历史结论与责任
- Gogs #63“真实数据接线(程序级)”保留为上位追踪来源。
- 本地票 25 继续维护现行缺口总览;新切片票分别引用 #63、票 25 和本票,关闭时把提交、测试、真实库联调证据和下游解锁摘要回写上位票。
- 历史 Gogs #59–#62 不重开;它们只提供历史交付上下文,当前提交、新模型和真实数据库必须重新验收。
- 新票必须在负责人、后端仓库提交基线、分支/PR 入口和联调环境明确后才认领;没有负责人只能保持待认领,不能算已开始。
- 每张后端票独立要求代码提交、编译、针对性契约测试、当前真实库只读联调和必要的 API 文档更新;组合联调和真人演示作为阶段总收口,不把浏览器职责重复塞进每张后端票。
- 后续真实设备报警演示由真人团队执行:至少走一条报警产生、既有逻辑关联/生成工单、外部系统推进状态、驾驶舱同步并显示点位报警与工单状态的主路径;可用时补充无工单、延期/取消和断线降级样本。阶段最终是否通过,以真人团队整体联调结论为准。
鉴权变更
本阶段采用的鉴权范围是:驾驶舱只读 REST 路径 /api/cockpit/v1/** 与驾驶舱 WebSocket /ws/deviceStatus 不做鉴权;后端其他业务路径和未来写接口不随之改变。该变更已同步到原鉴权决策、其地图索引和 ADR 0005;票 25 负责承接后端实现与证据记录。
状态
已解决。 目标、首阶段范围、三张后端切片、前后端依赖、历史票处理、责任基线、人工总收口和驾驶舱只读鉴权范围均已确认。尚未创建 Gogs 执行票或前端执行票;后续需等待依赖决策收口并按本答案拆票。