feat(import): UniGetUI .ubundle importer — manifest-import capability#147
Open
Artexis10 wants to merge 2 commits into
Open
feat(import): UniGetUI .ubundle importer — manifest-import capability#147Artexis10 wants to merge 2 commits into
Artexis10 wants to merge 2 commits into
Conversation
… as first source OpenSpec change: endstate import --from unigetui --path <file> converts a UniGetUI backup (.ubundle, export_version 3) into a JSONC manifest. Winget-source packages map to apps; --pin writes versions (per-package InstallationOptions.Version wins); every non-imported package is reported with a reason. Pure transform: no network, deterministic. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WjiYqx7LVvR2Yr883PMKYr
endstate import --from unigetui --path <backup.ubundle> converts a UniGetUI backup (export_version 3, schema verified against upstream serialization sources) into a JSONC manifest. Winget packages map with deterministic canonically-sorted ids; --pin carries versions with per-package InstallationOptions precedence; every non-winget or duplicate entry is reported in the skip list, never silently dropped. Emitted manifest passes a byte-exact LoadManifest round-trip gate before an atomic write; outside a repo checkout the default output lands beside the input bundle. Wrong-shaped JSON is rejected as not-a-UniGetUI-bundle; export_version tolerates numeric, quoted, or unrecognized encodings (warn, never fail). Implements openspec/changes/unigetui-import. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WjiYqx7LVvR2Yr883PMKYr
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.
Implements OpenSpec change
unigetui-import— the acquisition bridge from the 2026-07 market brief (step 3 of the outreach order: the UniGetUI interop Discussion). UniGetUI's backup covers the package list, explicitly not settings; this converts that backup into an Endstate manifest sorebuild --fromlights up install + settings restore + verify on top of it.What
endstate import --from unigetui --path <backup.ubundle>— pure transform (no network, no installs): winget packages map to manifest apps;--pincarries versions with per-packageInstallationOptions.Versionprecedence over the observed version.incompatible_packages, and duplicate winget Ids come back as an explicit skip list with reasons — nothing is ever silently dropped.export_versionas C# double; pin object omitted-when-default). Forward-compat: unknown fields ignored, future/oddexport_versionencodings warn instead of fail, BOM tolerated; JSON that has neitherexport_versionnorpackagesis rejected as not-a-UniGetUI-bundle.LoadManifestround-trip gate before an atomic temp+rename write; default output ismanifests/local/in-repo or beside the input bundle outside a checkout; deterministic output with canonical Id ordering (stable across UniGetUI re-exports).commands.import+ contract-doc section (additive, no schema bump). Also adds the missing.omc/gitignore rule (runtime artifacts).Review
Dual-pass (ContractGuard + code review, both Opus): 0 blockers/majors, APPROVE ×2; all 8 minors + nits hardened in this diff (out-of-repo default path, tolerant version decoding, wrong-file guard, re-export-stable ordering, duplicate-Id de-dup, atomic write, gate-failure test, envelope consistency).
Tests
26 hermetic tests across
internal/importerandinternal/commands(parser tolerance matrix, mapper truth tables, byte-level determinism ×2 runs, skip completeness, round-trip + gate-failure lanes, capabilities advert). Full suite green;openspec:validate81/81.🤖 Generated with Claude Code
https://claude.ai/code/session_01WjiYqx7LVvR2Yr883PMKYr