Guide and reference

The plan

File and ZFS plans show commands before Enter runs them. Esc dismisses a ready plan.

Saved remote edits upload automatically by default when the remote file is unchanged. Settings can require confirmation. See Remote editing for conflict checks.

Plan contents#

The panel names the requested verb, the resulting operation, entry count, measured size, source, destination, collisions, route, transport, and commands. A recursive size that cannot be measured is marked as a lower bound. An unreadable destination is reported as unknown collision status.

The plan contains every command step in execution order. Conditional steps state the condition they require. A progressive rsync move shows its source removal, empty-directory cleanup, and remaining-source check, with a warning above the commands that neither location should change during the move and an interruption may split files between them.

Classification#

A same-filesystem move with a clean destination can be an immediate mv. Cross-filesystem, cross-dataset, cross-host, and directory-merge moves require an rsync route that removes each transferred source file. A plan is refused when that route is unavailable. The distinction is computed from freshly gathered filesystem or ZFS topology facts.

A whole-dataset transfer may use zfs send -R and zfs receive -u. File transfers use rsync or a tar stream according to host capabilities and route.

Transport and authentication#

A same-host command runs on that host. A cross-host transfer can run on the source with forwarded-agent authentication, from the Mac when the Mac is an endpoint, or through a Mac proxy pipeline. The selected route appears in the plan because it determines which machine carries the bytes.

Host commands use the system SSH binary and its configuration. The proxy pipeline starts two SSH processes and connects their standard streams.

Verification#

A copy-based file move tells rsync to remove each source file after its content-checked transfer. This prevents a same-size, same-time destination from standing in for different bytes, but does not protect concurrent changes at either location. Interruption may split files across both. pālana removes empty selected source directories and fails the move while any selected source entry remains.

A whole-dataset receive verifies that the requested destination dataset exists before cleanup and source destruction. ZFS mutation plans run a command that checks the requested property or object state after the mutation.

Facts checked again#

ZFS plan composition reads current topology and stores the relevant dataset identity and state in the plan. Enactment reads topology again; changed or unavailable facts refuse the command because the displayed plan no longer describes the host.

Remote edit uploads bind to the destination version read during planning. Commit checks that version again before replacing it, which catches a change that lands after the operator confirms a conflict.

Run, hide, or cancel#

Enter enacts a ready plan, and command output is appended to the same panel. Control-C cancels fact gathering or a running command. Plain ` hides the panel without stopping its work.

Every enacted run is appended to ~/Library/Application Support/palana/operations.log. A logging failure is reported separately because it does not change the command result.