diff --git a/04-ISSUES/016-something-after-the-declaration-was-ignored/00-report.md b/04-ISSUES/016-something-after-the-declaration-was-ignored/00-report.md new file mode 100644 index 0000000..a345431 --- /dev/null +++ b/04-ISSUES/016-something-after-the-declaration-was-ignored/00-report.md @@ -0,0 +1,42 @@ +--- +status: resolved +opened: 2026-08-31 +located-in: [mesh-host] +fixed-by: mesh-host — something after the declaration is refused whole +amended-design: +--- + +# 016 — Anything after the declaration in a file was ignored + +## Symptom + +A JSON decoder reads one value and stops. The host's declaration parser used one, so a file +holding a declaration **followed by anything at all** — a stray line, a second declaration, the +tail of a truncated rewrite — parsed as the first value and the rest was never looked at. + +The machine applied something, reported success, and what it applied was not what the file said. + +## Why this matters + +The host refuses a partial declaration everywhere else, in these words: *a host that applied the +parts it understood would leave a machine that looks configured and is not.* This was the same +fault in its quietest form — not a part left out, but a part never seen, with nothing anywhere +saying so. + +**It was live and invisible.** The end-to-end harness had been appending a line to the substrate +bundle by accident ([015](../015-a-command-with-no-answer-was-read-as-success/00-report.md)), and +every bootstrap in every run applied a bundle with a junk line on the end. Nothing failed, so +nothing was looked at, and the corruption was found only by tracing a different bug backwards. + +**That is the argument for refusing rather than tolerating.** A file with something after it is +more likely to be damaged than deliberate: an interrupted write, two files concatenated, a +generator that emitted twice. Applying the first value is applying something nobody wrote. + +## What was done + +After decoding, the parser requires end of input. Trailing whitespace is not "something after it" +— refusing that would make every file an editor writes unusable. + +*Checked by a valid declaration with a stray line after it, with a second declaration after it, +and with garbage after it, each refused; and by the same declaration with trailing blank lines, +accepted.*