@ -49,11 +49,11 @@ Toolchain is on hand: `bin/tools/` already carries unpacked zig 0.16.0 alongside
0.15.2 and 0.14.1 (`bin/tools/zig` is currently 0.15.2), with `bin/punk-getzig.cmd` for
0.15.2 and 0.14.1 (`bin/tools/zig` is currently 0.15.2), with `bin/punk-getzig.cmd` for
per-version fetch.
per-version fetch.
Upstream state at drafting: the 0.15.2 migration is IN PROGRESS and uncommitted
Upstream state: the drafting-time 0.15.2 migration (then in progress and uncommitted) was
(`build.zig`, `build.zig.zon` , `src/punkzip.zig` , `src/punkzip_test.zig` ,
completed, made fully green and committed 2026-07-27 as upstream e9b5b553, with the
`src/zipper.zig` modified; `AGENTS.md` , `ZIG_IO.md` , `ZIG_ARRAYLIST.md` ,
localtime banner restored dependency-free in 78453fc0 - see Notes for the pre-activation
`refactor_2026-01-19.txt` untracked) . Vendoring must take a deliberate, recorded upstream
baseline record . Vendoring must take a deliberate, recorded upstream state rather than a
state rather than a working tree.
working tree; one now exists .
## Approach
## Approach
@ -138,3 +138,28 @@ state rather than a working tree.
`build` subcommand using `zipper.add_pathinfo_items` . Compression methods store,
`build` subcommand using `zipper.add_pathinfo_items` . Compression methods store,
shrink, reduce, implode, deflate - the legacy methods are implemented in-tree, so it
shrink, reduce, implode, deflate - the legacy methods are implemented in-tree, so it
reads archives zlib-based readers cannot.
reads archives zlib-based readers cannot.
- Pre-activation upstream baseline (user-directed, 2026-07-27): the maintained checkout
`c:/repo/jn/zig/punkzip` now carries commit e9b5b553 "zig 0.15.2 migration complete:
build + test green (122/122)" and 78453fc0 "restore localtime diagnostic banner,
dependency-free, on stderr". `zig build test` under the pinned 0.15.2 toolchain runs
all ten test modules - 122/122 tests green on Windows, including the previously
mis-wired `bitstream_test.zig` (its 4 tests had never run anywhere: build.zig pointed
test_bitstream at bits_test.zig) and the 13 exact-stdout CLI tests, whose expected
outputs now PIN the current human table listing and creating:/extracting: wording.
Port-order decision per Approach: UPSTREAM-FIRST, adopted in practice - port and
stabilise upstream, then vendor the ported state.
- zeit decision (user, 2026-07-27): the zeit timezone dependency stays out - the
localtime diagnostic returns dependency-free instead (Windows kernel32
GetLocalTime/GetTimeZoneInformation with numeric offset + zone name; honest UTC line
elsewhere), emitted on STDERR. Contract worth keeping: stdout is the parseable
product, diagnostics go to stderr - the machine-readable listing mode this goal adds
must preserve that split. Fallback if real tz fidelity is ever wanted: zeit v0.9.0 is
zig-0.16-compatible, MIT, zero transitive deps - vendor it as a path dep (never a
build-time URL fetch, which conflicts with this goal's no-network-build premise).
- Known upstream gaps carried into the goal work: the catenated/prefixed-zip
`base_offset` read path (`src/zip.zig`) - the fork's raison d'etre - has NO direct
zig-side test; add coverage alongside the machine-listing pin (the parity suite covers
it from the Tcl side only). The undocumented `build` subcommand remains unfinished
scaffolding (wrong arg indexing, writes only an EOCD; its finalize call was restored at
the checkpoint) - finish or remove it during the port. 0.16 first surfaced error
re-confirmed 2026-07-27: `std.process.argsAlloc` removed.