Skip to content

fix(seed): store packs as gzip-tar so registry installs succeed#27

Merged
Ghost-Frame merged 1 commit into
mainfrom
fix/seed-gzip-tar
Jul 15, 2026
Merged

fix(seed): store packs as gzip-tar so registry installs succeed#27
Ghost-Frame merged 1 commit into
mainfrom
fix/seed-gzip-tar

Conversation

@Ghost-Frame

Copy link
Copy Markdown
Owner

Problem

The seeder stored each pack in the object store as the raw canonical byte
stream, but the client install path (extract_targz) decompresses the blob
as gzip-tar. Every registry install of a seeded pack therefore failed with
invalid gzip header.

Fix

  • Package each persona directory into a gzipped tar (new targz_dir, matching
    the publish path format) and content-address the archive bytes.
  • The pack signature still covers the canonical hash; the stored content hash
    is now correctly decoupled from it.
  • Remove the now-dead pack_canonical_bytes / collect_entries_for_bytes and
    the unicode-normalization dependency; add tar and flate2.
  • Add a regression test asserting the object-store payload is gzip with
    pack.toml at the archive root and signature.sig excluded.

Verification

  • cargo clippy -p frameshift-seed --all-targets -- -D warnings: clean
  • cargo test -p frameshift-seed: 10/10 pass
  • Production marketplace data (37 broken @0.1.0 packs) already remediated
    out of band; all now install end-to-end through the client.

The seeder wrote each pack to the object store as the raw canonical byte
stream, but the client install path decompresses the blob with extract_targz,
so every registry install failed with "invalid gzip header". Package the
persona directory into a gzipped tar (new targz_dir, matching the publish
path) and content-address the archive bytes; the pack signature still covers
the canonical hash, which is now decoupled from the stored content hash.

Remove the now-dead pack_canonical_bytes/collect_entries_for_bytes and the
unicode-normalization dependency, add tar and flate2, and add a regression
test asserting the object-store payload is gzip with pack.toml at the archive
root and signature.sig excluded.
@Ghost-Frame
Ghost-Frame merged commit 33e3c2a into main Jul 15, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant