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

umputun / ralphex / 33203026970
86%

Build:
DEFAULT BRANCH: master
Ran 28 Aug 2026 07:16PM UTC
Jobs 1
Files 55
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

28 Aug 2026 07:15PM UTC coverage: 85.71% (+0.04%) from 85.675%
33203026970

push

github

web-flow
archive completed progress logs instead of truncating them (#449)

a completed progress log is now archived before the canonical file is reused, so running `ralphex --review` twice no longer destroys the first run's transcript.

`ReviewPhase.Loop` returns nil at its iteration cap, so a capped review finishes with convergence unconfirmed and still gets a `Completed:` footer. A clean review gets the same footer. Either way the next run truncated the file, so this is about completed-log reuse rather than review outcome.

**what changes**

on reuse of a file ending in `Completed:`, the log is copied to `.ralphex/progress/history/<stem>/archive-<YYYYMMDD-HHMMSS>-<token>.txt`, then the canonical file is truncated and gets a fresh header. The archive is copied from a stable snapshot and published atomically while the canonical path stays locked. On Unix, that keeps identical invocations serialized through the same path. The timestamp comes from the archived run's own footer, so it says when that run ended rather than when it was archived. Retention is 10 runs per canonical path, the live file plus 9 archives. Failed and interrupted runs are untouched and still append with a restart separator (#288).

archive names carry an `archive-` marker and no `progress-` prefix. `isProgressFile` matches `progress-*.txt` and `DiscoverRecursive` walks the whole tree with `skipDirs` covering neither `.ralphex` nor `history`, so a prefixed archive would be listed and replayed as a dashboard session of its own, up to nine per canonical path. Archives remain raw files and do not appear in the dashboard. A history UI needs labels and an API rather than accidental discovery.

order is archive, truncate, prune. Pruning last means a failed truncate rolls back to exactly the starting state, where pruning first could delete the oldest archive to make room for one the rollback would then withdraw. Pruning is best effort, since an old archive can be undeletable through permissions or... (continued)

88 of 110 new or added lines in 1 file covered. (80.0%)

3 existing lines in 2 files now uncovered.

8145 of 9503 relevant lines covered (85.71%)

224.21 hits per line

Uncovered Changes

Lines Coverage ∆ File
22
91.6
-1.13% pkg/progress/progress.go

Coverage Regressions

Lines Coverage ∆ File
2
90.75
-0.34% pkg/web/session_manager.go
1
91.6
-1.13% pkg/progress/progress.go
Jobs
ID Job ID Ran Files Coverage
1 33203026970.1 28 Aug 2026 07:16PM UTC 55
85.71
GitHub Action Run
Source Files on build 33203026970
  • Tree
  • List 55
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • b3ad3193 on github
  • Prev Build on master (#33193290880)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc