2.6 KiB
Internal: Command Restore
Purpose
Explain the implemented restore discovery, planning, installation, and
reporting flow in internal/app. User invocation belongs in
CLI, and the operator recovery procedure and
physical restore scope belong in
Operations.
Restore is split into explicit phases so remote authority, local conflict policy, and filesystem mutation can be tested independently.
Discovery Contract
Discovery delegates current-state pointer and manifest loading to
internal/artifacts, then validates the result against the resolved request:
- campaign must match;
- session ID must match.
Restore treats any missing or invalid remote current state as a command error.
Planning Contract
Restore planner action kinds:
download;skip_same;conflict.
Planner behavior:
- remote list scope is the resolved session prefix;
- remote-to-local mapping is traversal-safe;
- actions are sorted by local relative path and then remote key;
- force converts differing local targets from conflicts to downloads.
Previous-cache files are planned separately through previouscache.BuildPlan
when configured previous-session requirements exist.
Execution Contract
Execution order and safety:
- non-manifest downloads happen before manifest install;
manifest.jsoninstalls last;- downloads use sibling temp files plus atomic rename;
- manifest replacement is validated before rename;
- failed installs do not roll back files already written in the same execution.
Audio restore path:
- uses
audio.MaterializeS3Audio; - integrates spool and S3 audio cache paths;
- supports cache-hit reuse without object redownload.
Reporting Contract
- dry-run mode prints a summary and performs no local writes;
- execution mode persists the canonical restore report described in Operations;
- report includes plan counts, per-action status, and execution failures.
Invariants
- restore uses committed remote current state as authority;
current/run_id.txtis the remote publish commit marker;- restore does not execute pipeline stages.
Implementation And Tests
- Discovery:
internal/app/restore_discovery.go - Planning:
internal/app/restore_plan.go,internal/previouscache - Execution:
internal/app/restore_execute.go - Reporting and command coordination:
internal/app/restore_report.go,internal/app/restore.go - Tests:
internal/app/restore_discovery_test.go,internal/app/restore_plan_test.go,internal/app/restore_execution_test.go,internal/app/restore_workflow_test.go