# 测试、观测并完成 BLOGE 生产接线

## When to use

当 graph 从本地示例进入工程环境，需要证明失败行为、提供运维信号、由 Spring 管理接线，或形成容量/故障接管 claim 时使用本任务。没有明确运维 Owner 的生产模块不应加入系统。

## Inspect first

- 阅读仓库测试约定和实际 Maven 模块图。
- 定位 Operator 注册、graph 加载、`GraphEngine` 构造和 `GraphEngineCustomizer`。
- 盘点日志、指标、trace、execution identity 和事故查询方式。
- 在设计容量或 takeover 实验前，明确要证明的负载与失败 claim。

## Required inputs

取得待证明行为、失败分类、必要观测字段、Spring bean 所有权、部署拓扑、并发预期、服务上限、lease/routing 模型和验收阈值。

## Implementation path

1. 为改动行为添加聚焦 graph/Operator 测试，并加入一个受控失败。
2. 只有接线、持久化或运行边界发生变化时才增加模块级集成测试。
3. 让信号能够回答：哪次执行、哪个节点、第几次尝试、什么决策、哪个终态。
4. 在 Spring 中优先使用 starter 管理的 `GraphEngine`、自动发现的 `@BlogeOperator` 和 graph bean；一次只定制一个关注点。
5. 用可归因输入测量瓶颈，并报告环境、命令、吞吐、延迟、错误与饱和点。
6. 把 lease takeover、稳定路由和原始容量分开测试。

## MUST / SHOULD / MAY

- **MUST** 分开报告聚焦测试、模块测试和完整 reactor 结果。
- **MUST** 把 `Tests run: 0` 与 skipped 视为没有证据。
- **MUST** 避免重复注册 Operator；替换 starter bean 时必须接管完整所有权。
- **SHOULD** 把稳定执行身份和业务身份传播到日志、指标和 trace。
- **SHOULD** 让容量 claim 绑定到记录过的环境与负载。
- **MAY** 通过显式 customizer 覆盖一个 Spring 组件，但所有权必须清楚。

## Failure patterns

- 只用 mock 证明接线：加入 claim 所需的最小真实 loader/registry/runtime 边界。
- HTTP 成功就代表 graph 成功：检查 graph 与节点终态。
- 自定义 registry 使注解 Operator 消失：明确选择自动发现或完整手工接管。
- 把 timeout 称为 failover：测试 lease 过期、epoch/fencing、takeover 和旧 Owner 拒绝。

## Validation

先运行聚焦测试，再运行受影响模块；只有共享合同或仓库规则要求时才运行完整 reactor。至少在日志、指标或 trace 中验证一条失败路径。容量与故障接管证据分别记录，并说明边界。

## Evidence

- [Graph 测试](/zh-CN/v/0.9.8-RC1/18-testing-your-graphs)
- [生产可观测性](/zh-CN/v/0.9.8-RC1/19-observability-in-production)
- [Spring 接线](/zh-CN/v/0.9.8-RC1/20-spring-and-production-wiring)
- [容量与分布式边界](/zh-CN/v/0.9.8-RC1/22-distributed-capacity)
- [验证范围参考](/agent/zh-CN/v/0.9.8-RC1/reference/validation-scopes.md)
