Skip to content

+ create validated WACZ web archives - #110

Merged
Hawkynt merged 1 commit into
mainfrom
feat/wacz-writer
Aug 29, 2026
Merged

+ create validated WACZ web archives#110
Hawkynt merged 1 commit into
mainfrom
feat/wacz-writer

Conversation

@Hawkynt

@Hawkynt Hawkynt commented Aug 28, 2026

Copy link
Copy Markdown
Owner

What changed

  • promote WACZ from read-only to WORM creation
  • preserve caller-supplied WACZ resources and synthesize a standards-shaped manifest when a supplied WARC lacks datapackage.json
  • make generic archive conversion preserve original files verbatim while also wrapping them into a deterministic WARC resource collection
  • generate indexes/index.cdxj and pages/pages.jsonl for generic conversions
  • generate a WACZ 1.1.1 datapackage.json with SHA-256 fixity and byte sizes for generated/custom resources
  • reject duplicate and unsafe archive paths
  • skip the synthetic reader-only metadata.ini entry when rebuilding from extracted content
  • write entries deterministically
  • ZIP-store all archive/ WARC members and already-compressed .gz resources for range-friendly access
  • reuse the existing clean-room WARC writer rather than introducing a second WARC serializer

Verification

Added NUnit coverage for:

  • descriptor-created WACZ round-trip through the existing reader
  • CanCreate capability
  • generic file-tree conversion with preserved original payload plus synthesized WARC/index/pages/manifest resources
  • manifest synthesis for caller-supplied WARC input
  • WARC members using ZIP Store

The first CI run exposed the repository-wide conversion-matrix requirement that every generic IArchiveCreatable target preserve arbitrary source payloads. The normalization path now satisfies that contract while still producing the required WACZ resource structure. Repository CI performs compile/test verification in this environment.

Promotes WACZ from read-only to WORM creation. Supplied resources are kept as
given, and a WARC that arrives without datapackage.json gets a standards-shaped
manifest. A generic tree keeps its original files verbatim and is additionally
wrapped into a deterministic WARC resource collection with indexes/index.cdxj
and pages/pages.jsonl.

datapackage.json follows WACZ 1.1.1 and carries SHA-256 fixity and byte sizes.
Duplicate and unsafe paths are refused, the reader-only metadata.ini input is
skipped, and entries are written in a fixed order.
@Hawkynt
Hawkynt merged commit 6027f17 into main Aug 29, 2026
3 checks passed
@Hawkynt
Hawkynt deleted the feat/wacz-writer branch August 29, 2026 03:33
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