诊断闭环:Stage 必须绑定本次运行与制品身份
自动关联目录:诊断闭环:Stage 必须绑定本次运行与制品身份
核心判断:日志写出
stage=cook只能帮助搜索;要证明一次慢或失败发生在哪份输入、哪个目标和哪组制品上,Stage 必须与 Intent、Run、ArtifactSet 和目标角色共同关联。
一、业务冲突
导入跨桌面进程、Python 服务、UE Cook 子进程和远端发布。用户看到“上传失败”时,真正原因可能是旧计划、特定平台包、凭证、远端保存结果未知或 UI 读到了上次运行。没有关联身份,更多日志只会扩大搜索空间。
二、实际实现
运行记录已经包含 RunId、OperationId、Stage、CurrentStage、Attempt、Retry、Failure 和冻结计划摘要;Issue 能定位字段、节点与产品。构建/运行验证又引入 ArtifactSetId、RuntimePackageSetId 与 RuntimeRunId,并要求引擎日志、运行时 JSON 和实际包字节三方一致。进度事件还带 Stage 超时,能区分子进程整体超时和某个原子阶段停滞。
三、值得保留
诊断不再依赖自然语言拼接,失败可分为确定性内容错误、可重试传输错误、等待资源和结果未知。制品集合与运行证据绑定尤其重要,它把“这次跑过”提升为“这组字节在这个目标上跑过”。
四、结构性缺陷
不同子系统仍使用各自 ID 与 Stage 词汇,日志若没有统一 Trace Context,跨进程关联仍需猜测。currentStage 与顶层 Stage 的兼容投影会积累历史分支;错误码有了结构,但 Repair Action 尚未必机器可读。高频日志还可能泄露路径或凭证上下文。
五、目标设计
struct PipelineTrace {
TraceId trace;
IntentId intent;
RunId run;
StageId stage;
Attempt attempt;
TargetId target;
Optional<ArtifactSetId> artifacts;
};
Emit(EventCode code, PipelineTrace ctx, SafeFields fields);每次进程边界都传递同一 TraceId,Stage 使用注册表而非自由字符串;事件 Schema 声明允许字段、敏感级别与 RepairAction。崩溃报告、UE Trace、结构化日志和 UI Issue 只保存同一关联键,不复制完整私密上下文。
六、取舍与验证
统一关联会增加协议字段和日志治理成本,但能直接回答“哪次、哪步、哪组字节”。端到端故障注入应检查从 UI 错误到子进程日志、Journal 与制品清单能单键贯通;同时测试敏感字段拒绝和日志采样不会破坏关键状态事件。