Repository navigation
feat(config): adopt existing Compose instances with recoverable rollback - #183
Merged
Merged
Conversation
roodboi
force-pushed
the
feat/native-adoption-generation
branch
from
October 8, 2026 02:47
69d23c0 to
758b55c
Compare
added 8 commits
October 7, 2026 23:14
roodboi
force-pushed
the
feat/native-adoption-generation
branch
from
October 8, 2026 03:17
758b55c to
db792dd
Compare
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.
Legacy Compose projects previously had no qualified format transition that could keep their existing containers and data volumes.
hack config adopt --dry-runnow previews a strict static subset, and explicithack config adoptpublishes a native candidate while retaining the verified original container IDs, network identity and referenced named volumes. Running originals require an explicit, separately journaled--stop.Preparation and publication use a distinct versioned private adoption store. The store binds the canonical legacy input pair, compiler admission, Compose config hashes, engine identity, exact container mounts and volume creation facts. It saves the original files for inode-preserving rollback, journals switch/rollback before pathname changes, and fences upgraded discovery while publication or an effect is pending. Interrupted transitions require explicit recovery; uncertain effects retain their pending evidence.
Adopted
up --detach,restart,down,ps, plainlogsandexecconsume the retained originals. They never enter ordinary native namespace allocation, create replacement volumes or add native nonce labels to legacy objects.downstops and retains data anchors. Reports contain field provenance/status or symbolic workload status; private source values and binding facts stay out of reports and mutation output. Stopped containers remain bound through their configured NetworkID, while active network membership must equal the running original IDs.Validation:
next: adoption source, shared filesystem owner, CLI contract, import mapping/parser and prior acceptance fixture remain byte-identical to the preceding qualified head. All merged after-hook intent/store methods survive the mechanical filesystem extraction, and adopted dispatch still precedes ordinary native selection. Fresh build, full typecheck and privacy/lint pass with unchanged DB cache hits; shared generation/after-hook/selector and adopted dispatch/rollback controls pass 112 tests / 429 assertions. Unchanged whole-suite and live adoption gates were not repeated.This is an optional bounded NC04 increment. Linked/separate Git roots, typed local/managed-env inheritance, profiles, routing/hooks, advanced unsupported mappings, recreation,
run, attached startup and live application migration refuse. Full NC04 remains open for those cases. Publication/rechecks do not freeze external editors or Docker actors. Unmodified v4 clients cannot be universally fenced; migration and rollback require the upgraded selector/launcher boundary.Native generation version-one wire bytes and error-class identity are preserved by the mechanical shared private file-owner extraction. The release signal is
featfor the optional adoption capability; no stable installation or publication is changed.