Snapshots page always shows "No snapshots yet": parser splits on ASCII | but snapper prints │ #26

Closed
opened 2026-10-01 22:20:40 +08:00 by Breadway · 0 comments
Owner

How I found it

Design and bug walkthrough of bos-settings (main @ 7a79394, release build) in a headless nested Hyprland session. Updates & backup > Snapshots showed "No snapshots yet" on hermes, where snapper -c root list shows 5 snapshots (pre/post pairs from today's pacman runs).

snapper list --columns number,date,description | cat -A shows the column separator is U+2502 (box drawing │), not ASCII |.

Confidence

High. Reproduced in the app and confirmed against the parser in src/src/commands/snapshots.rs (get_snapshots, line.splitn(3, '|')).

Explanation

get_snapshots splits each row on '|'. snapper 0.13 renders tables with Unicode box drawing, so the split yields one column, cols.next()? for the date returns None, and every row is dropped by the filter_map. The UI then reports an empty list and claims "Snapshots are created automatically on every pacman transaction", which reads as the safety net being broken.

Expected: the 4 real snapshots (0 excluded) listed. Actual: empty state.

Impact: rollback UI is unusable, and BSET-22/BSET-23 (restore action) build on this list.

Fix: use snapper's machine output (snapper --jsonout list or --csvout) instead of parsing the human table; add a test with real snapper output.

## How I found it Design and bug walkthrough of bos-settings (main @ 7a79394, release build) in a headless nested Hyprland session. Updates & backup > Snapshots showed "No snapshots yet" on hermes, where `snapper -c root list` shows 5 snapshots (pre/post pairs from today's pacman runs). `snapper list --columns number,date,description | cat -A` shows the column separator is U+2502 (box drawing `│`), not ASCII `|`. ## Confidence High. Reproduced in the app and confirmed against the parser in `src/src/commands/snapshots.rs` (`get_snapshots`, `line.splitn(3, '|')`). ## Explanation `get_snapshots` splits each row on `'|'`. snapper 0.13 renders tables with Unicode box drawing, so the split yields one column, `cols.next()?` for the date returns None, and every row is dropped by the `filter_map`. The UI then reports an empty list and claims "Snapshots are created automatically on every pacman transaction", which reads as the safety net being broken. Expected: the 4 real snapshots (0 excluded) listed. Actual: empty state. Impact: rollback UI is unusable, and BSET-22/BSET-23 (restore action) build on this list. Fix: use snapper's machine output (`snapper --jsonout list` or `--csvout`) instead of parsing the human table; add a test with real snapper output.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Breadway/bos-settings#26
No description provided.