fix(cli): 失败出口主动误导机器消费者——`--output-format json` 全零值信封、`resume` 连 result 行都不发、错误里无 trace id
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 42/100
Rechercherichtung
Start at crates/recursive-cli/src/main.rs:2605-2622, where the error envelope is finished with TokenUsage::default() and zero counters, then see cli/output.rs:435-439, where Single mode drains events instead of feeding the emitter. Cross-check claude_json.rs:394-440 (the envelope consumers receive), resume.rs:646 (the ? that skips printer finish) and openai.rs:185-188 (no WARN, no trace id). Done: a failed --output-format json run reports real partial usage/steps, resume always emits a result line, and Error::Llm carries provider/model plus a header trace id. Blocked on #110/#115.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
场景 gap 单(okguitar 提报)· 优先级 P0 · 依赖:depends-on: #110、depends-on: #115(未终态时 keeper 自动 hold) · 验收:代码 diff 逐点核对;运行时可见性另需 Langfuse(#124)
基线 origin/main = fc29f3d4。
Summary
crates/recursive-cli/src/main.rs:2605-2622:错误信封task.finish(&reason, None, TokenUsage::default(), 0, 0, ...)——硬编码零值;cli/output.rs:435-439的Self::Single模式下 emitter 从不被喂事件(drain 只丢弃)→build_result(finish, None, TokenUsage::default(), 0, 0)。claude_json.rs:394-440:于是--output-format json(正是代理/flow 的执行模式)在失败时输出{"num_turns":0,"total_cost_usd":0.0,"usage":{all zeros},"stop_reason":"provider_stop:<全文>"}——唯一有信息的是 stop_reason。resume.rs:646的?使 printer 永不 finish——一条 result 行都不发(stream-json 消费者挂死在"等 result";Claude SDK 契约违反,run_once 修过、resume 未修)。- trace id 全缺:全仓 grep
x-request-id|traceparent0 命中;Error::Llm把 model 塞进provider字段;429 重试耗尽后无 WARN(openai.rs:185-188仅 transient 时 warn);Error::RateLimited只有测试构造。
建议
Err 路径透传已知 steps/usage(RuntimeOutcome 已有——让 kernel 在 Err 时也带 partial outcome);resume 补 result 兜底;Error::Llm 加 provider/model 字段并提取响应头 trace id。
- Vorherrschende Sprache
- Rust
- Sterne
- 4
- Forks
- 0
- Ø Merge
- 1 Std. 2 Min.
- Gemergte PRs (30 T.)
- 5
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Kein Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus jeffkit/recursive
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 56/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
Alle Issues in jeffkit/recursive
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
longbridge/nsh#804 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag
-
devex good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
calcit-lang/calcit#2538 ·
Maintainer antworten meist innerhalb von 1 Tag