Raft Mover
Raft Mover is a planned Linux-first handoff tool for closed SQLite chat data. It will install Raft Ward as a required dependency and require explicit passes before sending or adopting a frozen copy. This checkout is a supervised v0.1 prototype under development; installing it does not install or enable a timer. Use manual moves while its interruption and desktop behavior are being reviewed.
Each pair of machines needs distinct labels, reciprocal peer_label entries,
and the same private pair.key on both sides. move pair create makes it on
the first machine; move pair import FILE installs a securely transferred
private copy on the second. Packet manifests are signed with HMAC-SHA256 and
authenticated before use. Never place the key in the packet transport.
New to rclone or cross-machine setup? Start with the beginner transport guide. It covers encrypted cloud storage through rclone, SSH through rclone SFTP, and a private shared folder, plus the first supervised round trip.
move receives waiting packets and then sends eligible rafts. move pickup
receives only; move pickup --stage-only checks packets without adopting.
Set stage_only = true in the private config to make that behavior the default.
move --status and move report --format json inspect local state without
moving data. move restore RAFT-LABEL uses the recorded pre-adopt backup only
after that backup passes its hash and Raft Ward checks. Review both histories
before restoring or using move adopt RAFT-LABEL --keep-both, which overrides
the first-pair and divergence refusal.
Bare move never closes an app. An experimental opt-in quit = "signal:TERM" app setting
allows move --close or a timer's --auto run to politely close an idle app.
Set exe to the main process's absolute executable path. The first configured
process name must be its exact Linux comm name. Mover requires one verified
root process. It checks a quiet CPU and database window, refuses listed busy
workers, signals only that root through a pidfd, and waits for Raft Ward to
confirm closure. It never
sends SIGKILL. If the idle hint or process identity is uncertain, that app's
rafts wait while independent rafts can continue. See the transport guide for
the config and current backend limits. The timer relies on logind's idle hint;
on desktops that do not publish it, including current COSMIC setups, --auto
prints idle-unknown, exits 4, and does nothing. A process tree with an
Electron crashpad helper may make --close refuse. AppImage and snap executable
paths can also prevent an exact executable match. Manual moves remain available.
Exit codes: 0 completed, 1 integrity or transport failure, 2 usage or
configuration error, 3 held for review, 4 check inconclusive, 130 Ctrl-C,
and 143 SIGTERM. A held or inconclusive result never approves a move.
Mover keeps pre-adopt backups in its private state directory under backups/.
move --status and move report show each raft's backup count and total bytes.
Do not delete backups while a packet is pending or while reviewing a divergence.
For manual cleanup after both histories are settled, delete only backup files
that are not named by any lineage backup or diverged_backup field and are
not named by any pending receipt's backup field. Keep a separate verified
archive first if you may need an older copy.
keep_last_n = 5 retains the newest acknowledged packets per raft. A receiver
signs an applied-packet acknowledgment only after applying it; a reviewed
decline has its own signed acknowledgment. Unacknowledged packets and older
receipts without a generation number are never pruned. Local
backups are not pruned by this setting.
If status says pending-swap-ambiguous or pending-backup-missing, keep the
current database, staged packet, and backups for supervised recovery.
After reviewing the current database and staged history, move recover RAFT-LABEL --accept-current verifies and backs up the current database, marks
the packet declined with a signed acknowledgment, and breaks automatic lineage.
After the acknowledgment is confirmed, the declined staged copy is removed.
If acknowledgment is unavailable, the copy remains staged until a later retry
or a newer packet is adopted. The current database is never replaced by this
command.
Metadata
Release files for raftmover 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| raftmover-0.1.1.tar.gz | 58.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| raftmover-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 94.6 kB
Release files / raftmover-0.1.1.tar.gz
| Download URL | raftmover-0.1.1.tar.gz |
|---|---|
| Size | 58.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1ef33e732fd003190f67400ef0964880cd34323a2d834ca34551c54d6539cbd0
|
|
BLAKE2b-256 checksum How to use checksums |
84fe48a5884efa5aa82f596e73370f6d8da180045fcac460046f19259f50f515
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency logRelease files / raftmover-0.1.1-py3-none-any.whl
| Download URL | raftmover-0.1.1-py3-none-any.whl |
|---|---|
| Size | 36.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5308d5d1e60be6a97ccc99048a0f7669535a36dd5e5b63b75085e651e13d6bd3
|
|
BLAKE2b-256 checksum How to use checksums |
eac4f22eb85789547131f6cfd848d9e03546e480088aa10a3416239c49af38cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 16, 2026.
Transparency log