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

umputun / ralphex / 32997623945
86%

Build:
DEFAULT BRANCH: master
Ran 26 Aug 2026 06:05PM 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

26 Aug 2026 06:03PM UTC coverage: 85.675% (-0.07%) from 85.749%
32997623945

push

github

web-flow
fix: let worktree mode start with a dirty source checkout (#445)

* fix: let worktree mode start with a dirty source checkout

--worktree refused to start when the source checkout held any uncommitted
file other than the plan, so an unrelated scratch file blocked a run whose
whole point is that the main checkout stays in use.

The worktree never sees those files: git worktree add checks out a commit,
and only the selected plan is copied across. Downgrade the dirty list to a
warning in worktree mode and keep the hard error for in-place branch mode,
where the feature branch really is created in that same working tree.

Guard an unfinished merge, cherry-pick, revert, rebase, am or bisect
instead. That state cannot be inferred from the dirty list - once conflicts
are resolved and staged it looks like ordinary staged work - and it breaks
only at the end of the run, where the plan archive's pathspec commit against
the source checkout is refused outright.

Related to #444

* fix: refuse a plan archive that would overwrite an existing completed copy

Letting a dirty source checkout through made an existing data-loss path
reachable under --worktree. With a tracked docs/plans/<date>-foo.md and an
uncommitted docs/plans/completed/<date>-foo.md, git mv declines the existing
destination, the os.Rename fallback replaces it without a word, and the
overwritten file was never committed, so it is gone.

Lstat the destination immediately before that rename and return an error
naming both paths. lstat rather than stat so a symlink is the collision
rather than whatever it points at. The error reaches the caller's existing
warn-and-summarize path, so the run reports the archive as incomplete.

resolvePlanMoveTargets now returns done=true only when the source is gone
and a completed/ copy proves the plan archived. The alternate-basename
collision used to return done=true with a log line, which the caller reads
as archived - the same false success. It goes to the move path i... (continued)

50 of 56 new or added lines in 2 files covered. (89.29%)

5 existing lines in 2 files now uncovered.

8056 of 9403 relevant lines covered (85.67%)

225.44 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
74.42
0.03% pkg/git/external.go
2
79.34
0.13% pkg/git/service.go

Coverage Regressions

Lines Coverage ∆ File
4
78.24
-2.07% pkg/web/watcher.go
1
91.1
-0.34% pkg/web/session_manager.go
Jobs
ID Job ID Ran Files Coverage
1 32997623945.1 26 Aug 2026 06:05PM UTC 55
85.67
GitHub Action Run
Source Files on build 32997623945
  • Tree
  • List 55
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 77403dd9 on github
  • Prev Build on master (#32587678435)
  • Next Build on master (#33192156761)
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