Sigil 0.17.20

release

A release that hardens the Sigil build. Three build-integrity improvements make a build's output verifiable: compiling the same source in two different directories now produces byte-identical bytecode, the build cache keys its entries by a canonical encoding so it can never hand back the wrong bytes, and the build store re-verifies every artifact it serves. Existing projects build without changes; the build cache rebuilds once on upgrade, since the bytecode and cache-key formats changed.

Download 0.17.20Get started

Bytecode records package-root-relative source paths

Compiled bytecode used to embed the absolute path of every source location, so the same code built in two different directories produced different .sgb. Locations are now recorded relative to the package root, so two clean builds of the same source are byte-for-byte identical. Error messages and source snippets are unchanged, and the only effect on upgrade is a one-time cache rebuild.

The build cache keys builds by a canonical serialization

The build cache reuses an earlier build by hashing its inputs into a key. That key used to come from formatted strings, where two different inputs could produce the same text, so the cache could hand back bytecode built for something else. Inputs now run through a canonical, injective encoding, so distinct inputs always get distinct keys, and the compiler's environment is folded in too, so an ambient machine setting can't quietly change the output while the key stays the same.

The build store verifies every artifact it serves

The build store keeps each artifact under the hash of its contents, but it used to trust that a stored file still matched, so a truncated or overwritten file could be handed back and used. That is the failure behind the occasional need to wipe the cache and rebuild. The store now re-hashes an artifact as it serves it and treats any mismatch as a miss, quarantining the bad copy, and writes are atomic so a killed build leaves nothing half-written behind. A new sigil store verify command re-checks and repairs a damaged store, so the wipe-and-rebuild workaround is gone.