Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

fix(cli): run/resume 的错误路径跳过会话 finalize——55% 的 `.meta.json` 永远停在 `active`,"尸体"与"在跑"不可分

オープン
#110 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
65/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust
領域
cli

調査の方向性

Read crates/recursive-cli/src/main.rs around the run_result Err branch (2600-2627) and compare it with the loop path at 2240-2247 and the finalize calls at 2675-2676; src/session/writer.rs:522-555 shows finish() is the only writer of status/cost. Then look at cli/resume.rs:646, where the ? skips finalize. Done means a forced provider failure leaves .meta.json with status=crashed, an error field, and cost.json written; note the dependency on #111.

索引モデルが issue の本文から書いたものです。

説明

场景 gap 单(okguitar 提报)· 优先级 P0 · 依赖:depends-on: #111(未终态时 keeper 自动 hold) · 验收:代码 diff 逐点核对;运行时可见性另需 Langfuse(#124)

基线 origin/main = fc29f3d4。

Summary

  • crates/recursive-cli/src/main.rs:2600-2627:run_result 的 Err 分支只 drop(runtime) + 顶一个错误信封,然后 return Err(err)——绕过 :2675-2676 的 finalize_session_writer / finalize_cost_tracker(finish() 是唯一写 status/cost 的地方,src/session/writer.rs:522-555)。
  • crates/recursive-cli/src/cli/resume.rs:646:runtime.run(message.clone()).await?——? 直接跳出,:715-716 的 finalize 永不执行。
  • 对照:loop 路径(main.rs:2240-2247)注释自述不变量 "every run closes its session envelope"——该不变量在 run_once 里不存在,唯 loop 遵守。
  • 实测本机:~/.recursive 1132 个 .meta.json 中 active 626 个(55%)vs crashed 仅 19;抽查一个死透会话:transcript 尾条是孤儿 tool_call、.lock 残留、无 cost 字段——却与正在跑的会话无法区分。

影响

事故复盘时主管线拿到的 .meta.json 给出错误答案("还在跑");recursive resume 也会把 active 当进行中候选;失败 run 的 cost 归零。

建议

finalize 提到 Err 分支(或 RAII guard:SessionWriter Drop 时未 finish 则按 Crashed+原因落盘);resume.rs:646 同处理。

验收:制造一次 provider 失败,断言 .meta.json status=crashed + 有 error 字段 + cost.json 落盘。

主要言語
Rust
スター
4
フォーク
0
平均マージ
5時間 32分
マージ済み PR(30日)
7

環境構築

  • Dockerfile または Docker Compose ファイルあり
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

jeffkit/recursive のほかの issue

jeffkit/recursive の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。