@@ -33,7 +33,7 @@ routing, endpoints and host effects remain outside this bounded frontend. Unsupp
3333refuse before managed value resolution and provider work. Early typed input
3434capability refusals retain ` E_NATIVE_PROJECT_UNSUPPORTED ` without exposing
3535compiler diagnostics or creating native source/start/run authority. ` --detach ` ,
36- ` --json ` , service subsets, recovery and other lifecycle operations refuse before input
36+ ` --json ` , service subsets and other lifecycle operations refuse before input
3737acquisition. ` --branch ` supplies an explicit native namespace; its omission uses
3838the canonical project namespace without inferring a Git branch. Profile and env
3939selection keep their compiler contracts. ` --env base ` bypasses inherited overlays
@@ -47,11 +47,41 @@ Ctrl-C requests that shutdown. Exact durable Removed evidence retires the tagged
4747native run and startup intent. Unknown, changed or live cleanup retains the attempt
4848and refuses replay; a missing ready mapping does not authorize a fresh start.
4949
50+ ` down --recover ` explicitly retires a complete stored native generation whose
51+ foreground publisher and frontend admission owner are both dead on the same host
52+ boot. It requires the current version 3 native publication, the exact stored Ready,
53+ startup intent and private source envelope, and the original guest incarnation.
54+ Live owners, older version 2 dead publications, partial startup, pending writes,
55+ changed files and rebooted guests refuse. Env/profile changes, service subsets and
56+ ` --json ` are unsupported for this operation. It neither recompiles authored input
57+ nor acquires managed values or starts a provider.
58+ Omit ` --profile ` to recover the stored generation; explicit empty or named profile
59+ overrides both refuse.
60+
61+ Recovery commits a distinct private intent before calling the Rust cleanup owner.
62+ The original raw selectors and resource inventory remain fixed through retries;
63+ current cleanup phases may advance. Before retiring each frontend file, the owner
64+ inspects the exact native receipt and requires all resources Removed with null
65+ observations. A committed retirement phase alone permits the corresponding file's
66+ expected absence. Pending writes and replacements remain retained refusals. The
67+ recovery lease blocks ordinary startup throughout this work. Completed frontend
68+ history is archived under fresh startup admission before a later generation can
69+ start; incomplete history never permits automatic takeover. Persistent data stays
70+ retained, and no recovery operation reboots the guest or allocates new resources.
71+
72+ Dead recovery lease takeover retains its private directory and commits the exact
73+ next owner file before replacing the old owner. A recorded candidate may be pending
74+ or already published after interruption; both forms must match the saved inode and
75+ bytes before a fresh lease is issued. Separate committed release flags authorize
76+ only the corresponding owner/directory absence. An unrecorded pending candidate
77+ and an interrupted completed-history hardlink archive remain retained refusals;
78+ this operation does not repair arbitrary partial lock or file publications.
79+
5080The native receipt and source paths are distinct from strict Compose v1 artifacts.
5181Image-only graph receipts remain v2; source-bearing graph receipts use a closed v3
5282binding, distinct from the existing foreground publication-owner v3. Ready/control
5383envelopes remain v2. Dead-owner recovery of source-bearing receipts is not admitted
5484by the separately qualified image-only recovery path. No native hash substitutes
5585for a normalized Compose hash. Source and fake-driver
5686checks do not qualify an installed frontend, a live provider, the full authored
57- corpus, interrupted recovery or resource overhead; those remain separate gates.
87+ corpus, actual version 3 dead-owner recovery or resource overhead; those remain separate gates.
0 commit comments