Repository navigation
feat(folders): pause one source folder without the others (#94) - #100
Merged
Merged
Conversation
A paused folder is not scanned, watched, hashed, or uploaded: the reconciliation scan skips it (so its last-scan time keeps the pass that actually ran), the watcher holds no watch on it and ignores any event that races the change, and the upload gate holds its items immediately before the request. What it queued stays pending and the resume asks for a scan, which drains it in the usual order; an upload already on the wire finishes. Pause follows Owner, so pausing a folder stops exactly what its card counts. The flag is a stored column, so a restart keeps it and a re-add does not clear it; a database written before it gains it unpaused. The dashboard card and the folder detail render one shared Pause/Resume toggle, the card reads Paused, and the detail names the user's own pause as the reason rather than an error. The global activity reads Paused only when every folder is paused or the global pause or network hold is on; the global pause and a folder pause compose.
The seed keeps the two demo folders as they were and adds a third, Archive, paused, with a settled backlog and the queue the pause holds. The new dashboard capture shows its Paused card beside the two syncing ones, and the global card leaves the paused folder out of its counts. The capture was taken with the recipe in CONTRIBUTING.md under Xvfb with lavapipe: 1200x900, 6467 colours, so the frame is not blank.
The test bound an ephemeral port and released it, then expected the connect to be refused. In parallel that port can be rebound by another test's server before the connect: its `about` then answered, and its request landed in the other server's log, which broke `every_endpoint_the_client_builds_carries_the_ api_prefix` on the Linux CI run. Port 1 on loopback is privileged and outside the ephemeral range, so nothing the suite binds can take it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Per-folder pause (#94). A paused source folder is not scanned, watched, hashed, or uploaded; what it queued stays pending, and an upload already on the wire finishes. Resume scans the folder and drains the queue in the usual order. Pause follows Owner.
The global pause, a folder pause, and the known-network hold are independent and compose; a global resume leaves folder pauses in place. The tray tooltip is unchanged because it reads the activity state (R8.2). SPEC R8.7/R8.1/§5,
GLOSSARY.md, README and CONTRIBUTING are updated.Closes #94.
Evidence
After: the committed
docs/screenshot.png— Archive reads Paused with Resume beside Details, while the global card reads 410 uploaded · 11 pending · 7 failed (Archive's 120 uploaded and 9 queued are left out).engine::a_paused_folder_holds_its_queued_item_while_another_folder_uploads); a scan skips a paused folder (engine::a_reconciliation_scan_skips_a_paused_folder_until_it_resumes); store migration (store::a_v14_database_gains_the_folder_pause_column); dashboard card reads Paused and an upload on the wire finishes (dashboard::a_paused_folder_card_lets_the_upload_on_the_wire_finish). Also: global/served compose, mid-upload pause, detail reason, and the global sums.cargo fmt --all -- --check,cargo clippy --workspace --all-targets -- -D warnings,cargo nextest run --workspace→ 964 passed, 2 skipped.Merge Danger
Door: one-way — migration V15 adds
source_folder.paused; a database a user has already migrated is not a supported downgrade path.Blast Radius: sync engine, state store, dashboard.
A paused folder stops consuming scan, watch, hash and upload work. Rolling back after release would need the schema handled before the binary is downgraded.