lili
daa49e5864
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(obs): 便宜档主生成路 OTLP span sink + 双入口 fan-out 并接(阶段四观测 波③ T3-1)
便宜档 Service(cheap_service_app)+ CLI(cheap_studio)主生成路此前只经 make_jsonl_sink
写 trace.jsonl、不产 OTLP span,观测栈 Tempo 看不到便宜档生成。新接 cheap_otlp_sink:与
make_jsonl_sink 同签名,把每步 TraceStep 推成 OTLP span 发 mini-infra Collector
(service.name=cheap-gen-worker),span 属性映射对齐 tier2 studio_sink 的标准 gen-ai 键。
- 默认关(env CHEAP_OTLP_ENDPOINT / infra_config 取不到即 no-op),build_trace_sink 原样返回
jsonl sink、现有行为字节不变;开则 fan-out(jsonl 先落盘照旧、OTLP 额外发一份,各 best-effort)。
- best-effort 铁律:缺 otel / Collector 不可达 / 发送失败 → 记一次告警、永久降级 no-op、绝不抛、
绝不咬生成主链(设计 §8);observe-only 从不回写生成/门判定字段。
- 惰性 import otel(顶层零重依赖,对齐 build_cheap_app 惰性红线)+ 代理旁路(T3-4,建 exporter 前
把 Collector host 并入 NO_PROXY,绕 clash fake-ip)。
- provider 做进程级共享单例(非 per-run):长驻 Service 中间件工厂 per-turn 建 sink,per-run 会逐局
泄漏后台上报线程;trace_id 只作 per-span 属性,BatchSpanProcessor 一条后台线程跨局复用,atexit 兜底 flush。
- 双入口都接(Service :273 + CLI :214),fan-out 不破坏既有 jsonl 落盘。
终审(亲跑非照搬):cheap-worker/.venv 全套 350 passed/1 skipped(含 span sink 11 例)、零回归、
py_compile 三文件过、docs-gate 七检绿。跨机 OTLP 命门已验(mini-desktop→mini-infra:4318=200)。
真发 Collector→Tempo 见 span 排 mini-desktop 起服务后验。
T3-3 metrics 空口按红线#7(不留孤儿)剔除:本波无生产调用方,真值填充随波⑤ T5-2 带埋点调用方一起落。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 09:16:16 -07:00
..
2026-06-29 01:04:55 -07:00
2026-06-29 01:04:55 -07:00
2026-07-03 21:11:31 -07:00
2026-07-03 21:11:31 -07:00
2026-06-29 02:34:06 -07:00
2026-06-27 08:47:13 -07:00
2026-07-04 00:41:56 -07:00
2026-06-26 02:42:14 -07:00
2026-06-27 02:01:20 -07:00
2026-07-03 14:15:59 -07:00
2026-07-02 13:34:57 -07:00
2026-07-05 09:16:16 -07:00
2026-07-04 00:41:56 -07:00
2026-07-02 21:09:44 -07:00
2026-06-30 01:39:06 -07:00
2026-07-03 14:51:36 -07:00
2026-06-26 11:00:00 -07:00
2026-06-26 02:42:14 -07:00
2026-07-03 14:21:34 -07:00
2026-06-28 02:17:41 -07:00
2026-06-27 10:41:16 -07:00
2026-07-03 14:51:36 -07:00
2026-07-03 14:17:54 -07:00
2026-07-02 23:48:41 -07:00
2026-07-02 21:09:44 -07:00
2026-07-04 00:46:09 -07:00
2026-07-03 14:02:53 -07:00
2026-07-01 05:22:49 -07:00
2026-06-28 02:17:41 -07:00
2026-06-30 01:39:06 -07:00
2026-06-26 02:42:14 -07:00
2026-07-03 14:21:34 -07:00
2026-06-26 02:42:14 -07:00
2026-06-30 01:39:05 -07:00
2026-06-28 02:17:41 -07:00
2026-06-28 02:17:41 -07:00
2026-07-03 19:12:35 -07:00