Changelog: v0.9.1-pre published
Changelog: Windows >2 GB write fix
Changelog: record-count cap fix
Changelog: v0.9.0-pre published
Legacy bridge removed; status note
Changelog: command and switch audit
Changelog: v0.8.0-pre published
Changelog: console 1:1 with the original
Changelog: v0.7.0-pre published
param15 pre-post-filter stream fix (65a00a5); v0.6.0-pre pending list corrected
Changelog: v0.6.0-pre published
Image model ported: decr_param 3 = NzImageModel, wide corpus 1240/1240; two new -co/-cO open items
docs: BMP image model scoped
docs: -cd/-cD cluster fully closed; 1233/1240
changelog: parallel ring sizing from p1
changelog: v0.5.0-pre
docs: -cd/-cD cluster resolved into three causes, two closed
docs: the -cO ring-lifetime bugs, and the two decode gaps left
docs: text-transform bit 0x40 ported
docs: text-transform bit 0x40 decoded from data
docs: -cO is ~7.5% on real files; text-transform bit 0x40 unported
docs: the last failure is ours, not NanoZip's; repro shrunk and two hypotheses refuted
docs: -cc declined by default for every user; the suites could not see it
docs: fuzzing corrupt input found an OOB write, a crash and a DoS
docs: four decode gaps closed; one failure left
docs: multi-file metadata records, and what closing them fixed
docs: audited inventory of what the decode still misses Measured rather than recited. Headline: -co/-cO MULTI-FILE archives decode to wrong bytes and are written out without being declined, because multi-file metadata parsing yields no per-entry checksum and the per-entry verification is guarded by exactly that flag. Both test suites use single-file archives only, so neither sees it. Also records the clean declines (-p<n>, a large multi-file archive), the metadata still not extracted, what is unimplemented on purpose, what is latent and therefore unverifiable, and the coverage gaps behind the suite numbers.
docs: retract two conclusions about the last failure; it is not inherited state Classifying every differing word shows the "580 bytes of model divergence at block-2 entry" is almost entirely pointer fields baked into the captured cold blob plus a per-slot statistic counter. The state effectively matches, so the divergence is introduced inside block 2 and the next step is a chunk-boundary comparison -- which needs the real chunk-loop address, since the real engine does not copy per chunk. Adds two method notes: classify differing words before reading a memory diff as drift, and a data watchpoint only fires when the value changes.
docs: reframe the last failure -- it is an address-mapping question, not a value one Measured the model memory against the binary's: 580 differing bytes of 17.3M at block-2 entry, 474 of them from the cold state. But overwriting the cold state with the binary's values breaks block 1, and the tier2 align table's apparent mismatch is an artefact of a port-invented address. So the question is which cells this port places where the original does not. Adds two method notes, including: a port-invented address is not evidence about the original, and run the suite before believing a measured fix.
docs: synthetic suite 88/88 (100%); the audio defect is fully closed FUN_0809bdc0 is ported, which closes decr_param==2 audio for all three codecs. Every synthetic fixture now decodes natively for all eight methods with zero bridge, and the real corpus is 479/480 -- one file left in the whole project, the already-localised -cO literal bit. Also records that the notes' "Fenwick tree" description of FUN_0809bdc0 did not survive reading it, and how the initial tables were derived when the builder had no decompile either.