42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
---
|
|
status: resolved
|
|
opened: 2026-10-04
|
|
located-in:
|
|
- mesh-host
|
|
fixed-by:
|
|
- mesh-host#84
|
|
amended-design:
|
|
---
|
|
|
|
# 220 — A delivered bundle keeps the files of the one before
|
|
|
|
## What was observed
|
|
|
|
2026-10-04. A tools bundle was rebuilt as one self-contained file per entrypoint
|
|
([ADR 0193](../../02-DECISIONS/0193-every-bundle-the-runtime-serves-is-launched-and-the-runtime-knows-no-language.md)),
|
|
so it no longer carries a package directory. On the machine it was delivered to, its directory still
|
|
held the package directory and a compiled file from the earlier delivery, dated hours before the
|
|
new files. The new files were written over the old directory, and nothing removed what the new
|
|
bundle no longer contains.
|
|
|
|
## Why it matters beyond this instance
|
|
|
|
A bundle on disk should be exactly the artifact that was built. Leftover files can be imported by
|
|
code that should no longer find them. A fix that removes a file then works on a fresh machine and
|
|
fails on every machine that ran an earlier version. It also makes "what runs here" impossible to
|
|
read from the artifact.
|
|
|
|
## Where to look
|
|
|
|
How the host unpacks a bundle into its directory. **How it is checked:** deliver a bundle, then a
|
|
version without one of its files, and the file is gone.
|
|
|
|
## Resolved
|
|
|
|
An archive is unpacked into a fresh directory beside the old one and swapped in by rename; a refused
|
|
or failed unpack leaves the old tree whole. **How it is checked:** a second delivery without a file
|
|
removes it, and nothing is left beside the directory; both tests fail without the fix. Proven
|
|
2026-10-04: a bundle rebuilt and delivered after the fix holds exactly the new build and nothing
|
|
beside it. A bundle that has not changed since keeps its old leftovers until its next version, by
|
|
design: an unchanged archive is not unpacked again.
|