Summary
Force-killing the Player mid-Process (simulating a crash, power loss, or forced restart) leaves
results silently incomplete and no case ever created in Review — but reopening the project shows
the wizard as fully complete, identical to a genuinely successful run. There's no persisted
completion flag; the wizard only checks whether the results folder is non-empty.
Environment
- Build: 10.8.5 / g9e5ca51+ / 2026-07-27 02:01 UTC (confirmed via
git diff that the
relevant file, FreeEedUI.java, is unchanged through current dev HEAD — not build-dependent)
- Windows: Windows 11 Home (local machine) | Clean install? No
- Severity: Major — not a blocker on the happy path (only triggers after an interruption),
but silently misrepresents incomplete/inaccessible results as fully successful. Same class of
issue as the PST silent-data-loss bug already fixed in d7d5bdd7.
Steps to Reproduce
- Create a new project with a reasonably large input (e.g.
test-data\02-loose-files, 122 files).
- Click Process.
- While it's actively processing (partway through), force-kill the Java process running the
Player — simulating a crash, power loss, or forced restart.
- Reopen FreeEed and open that same project.
Expected vs Actual
Expected: The wizard should reflect that processing was interrupted — "Process" should not
show as complete, and/or there should be a clear indication that results are partial/unreliable,
ideally with a way to resume or re-run.
Actual: All five steps (Project → Inventory → Stage → Process → Review) show as fully
complete with green checkmarks. In this repro, only 25 of 122 input files had actually been
processed (confirmed via metadata1.csv row count and native1.zip size) before the kill, and
no case was ever created in the Review app at all — so the "completed" results aren't even
accessible through Review. A user reopening a crashed project has no indication anything went
wrong.
Root Cause
FreeEedUI.getCurrentStep() (freeeed-processing/src/main/java/org/freeeed/ui/FreeEedUI.java,
lines 824-840) determines step completion purely by checking whether the results folder is
non-empty:
String resultsDir = project.getResultsDir();
if (resultsDir == null) return 3;
File resultsFolder = new File(resultsDir);
if (!resultsFolder.exists() || resultsFolder.list() == null || resultsFolder.list().length == 0) return 3;
return 4; // "Process" shown as complete
Since native1.zip/metadata1.csv are created right at the start of processing (before the
per-file loop begins), this check passes the instant a single file has been written, regardless
of how much of the batch actually finished.
Evidence
FreeEed.log: staging completed normally, "Processing project: qa-test-crash" logged, then
nothing further — confirming the kill landed very early, with no completion or exception trace
after it, and no "Creating new case in FreeEed UI" line (present in every normal run).
- Screenshots:
- Player's Welcome screen showing all 5 green checkmarks after reopening the crashed
project
- Cases list showing no entry for this project at all.

Summary
Force-killing the Player mid-Process (simulating a crash, power loss, or forced restart) leaves
results silently incomplete and no case ever created in Review — but reopening the project shows
the wizard as fully complete, identical to a genuinely successful run. There's no persisted
completion flag; the wizard only checks whether the results folder is non-empty.
Environment
git diffthat therelevant file,
FreeEedUI.java, is unchanged through currentdevHEAD — not build-dependent)but silently misrepresents incomplete/inaccessible results as fully successful. Same class of
issue as the PST silent-data-loss bug already fixed in
d7d5bdd7.Steps to Reproduce
test-data\02-loose-files, 122 files).Player — simulating a crash, power loss, or forced restart.
Expected vs Actual
Expected: The wizard should reflect that processing was interrupted — "Process" should not
show as complete, and/or there should be a clear indication that results are partial/unreliable,
ideally with a way to resume or re-run.
Actual: All five steps (Project → Inventory → Stage → Process → Review) show as fully
complete with green checkmarks. In this repro, only 25 of 122 input files had actually been
processed (confirmed via
metadata1.csvrow count andnative1.zipsize) before the kill, andno case was ever created in the Review app at all — so the "completed" results aren't even
accessible through Review. A user reopening a crashed project has no indication anything went
wrong.
Root Cause
FreeEedUI.getCurrentStep()(freeeed-processing/src/main/java/org/freeeed/ui/FreeEedUI.java,lines 824-840) determines step completion purely by checking whether the results folder is
non-empty:
Since
native1.zip/metadata1.csvare created right at the start of processing (before theper-file loop begins), this check passes the instant a single file has been written, regardless
of how much of the batch actually finished.
Evidence
FreeEed.log: staging completed normally,"Processing project: qa-test-crash"logged, thennothing further — confirming the kill landed very early, with no completion or exception trace
after it, and no
"Creating new case in FreeEed UI"line (present in every normal run).project