• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dcdpr / jp / 26806176212
67%

Build:
DEFAULT BRANCH: main
Ran 02 Jun 2026 07:52AM UTC
Jobs 1
Files 397
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Jun 2026 07:50AM UTC coverage: 66.451% (+0.03%) from 66.422%
26806176212

push

github

web-flow
fix(llm, cli, config): Retry dropped connections + flush on abort (#714)

Distinguish a clean stream completion from a dropped connection across
all three providers: `Finished` is now emitted only from the real
protocol terminal event (`message_stop` for Anthropic, `done` for
Ollama, `ResponseCompleted/Incomplete/Failed` for OpenAI) rather than
being unconditionally chained after every stream.

The retry layer in `collect_with_retry` now treats a stream that ends
without `Event::Finished` as a transient failure, rebuilding and
replaying from where it left off. `StreamEnded` from `eventsource` and
`reqwest::Error` with no HTTP status (transport-level failures such as a
dropped connection mid-body) are likewise classified as retryable.

The idle timeout in `with_idle_timeout` is updated to measure elapsed
time against the wall clock (`SystemTime`) rather than the monotonic
timer. The monotonic clock pauses during system sleep on macOS and
Linux, so a stream interrupted by closing the laptop lid would hang for
a further full idle window after wake before retrying. The new
implementation polls on a short cadence (`IDLE_POLL_INTERVAL = 3s`) and
fires within one tick of the lid reopening. The default
`stream_idle_timeout_secs` is reduced from 60 to 30 to recover faster
from dead streams under normal network conditions.

Partial content is now flushed to `ConversationStream` unconditionally
in `handle_stream_error` — before the retry/abort decision — so that
streamed output the user already saw is never discarded on a fatal
error. `run_turn_loop` additionally calls `conv.flush()` before
propagating a fatal error, so that partial work is persisted to disk.

Signed-off-by: Jean Mertz <git@jeanmertz.com>

52 of 73 new or added lines in 8 files covered. (71.23%)

4 existing lines in 4 files now uncovered.

33317 of 50138 relevant lines covered (66.45%)

239.02 hits per line

Uncovered Changes

Lines Coverage ∆ File
14
67.39
6.03% crates/jp_llm/src/retry.rs
3
70.92
-1.12% crates/jp_llm/src/error.rs
3
76.9
-0.12% crates/jp_llm/src/provider/openai.rs
1
65.63
0.08% crates/jp_cli/src/cmd/query/turn_loop.rs

Coverage Regressions

Lines Coverage ∆ File
1
65.63
0.08% crates/jp_cli/src/cmd/query/turn_loop.rs
1
70.92
-1.12% crates/jp_llm/src/error.rs
1
76.9
-0.12% crates/jp_llm/src/provider/openai.rs
1
67.39
6.03% crates/jp_llm/src/retry.rs
Jobs
ID Job ID Ran Files Coverage
1 26806176212.1 02 Jun 2026 07:52AM UTC 397
66.45
GitHub Action Run
Source Files on build 26806176212
  • Tree
  • List 397
  • Changed 11
  • Source Changed 9
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26806176212
  • cbbe1244 on github
  • Prev Build on main (#26805864183)
  • Next Build on main (#26806547805)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc