Problem
Protected main c85d710804139c0697d7ef8fa47d02b1389e6d84 reads retained CycloneDX SBOM evidence before release semantics. Ordinary Node UTF-8 string decoding can replace malformed byte sequences with U+FFFD, allowing byte-invalid retained evidence to become a different Unicode JSON document before validation.
This is an exact retained-byte integrity boundary. Parser hardening must not be confused with release publication, deployment, licensing, or acquisition acceptance.
RCA
- First failing boundary: exact SBOM bytes -> Unicode JSON semantics in
scripts/release-evidence.mjs.
- Immediate cause: non-fatal UTF-8 decoding through
readFileSync(..., "utf8").
- Root cause: structural CycloneDX validation existed without an explicit valid-byte/text boundary.
- Systemic risk: corrupted retained evidence can normalize into a different valid document while appearing semantically acceptable.
Active test-first repair
PR #113 (fix(release): reject malformed UTF-8 SBOM evidence) is the current direct-main repair.
- protected/live base:
c85d710804139c0697d7ef8fa47d02b1389e6d84;
- RED head:
42cb0c53d94dd21b73f5de7d07468bdeec1fd1f2;
- current exact GREEN head:
13849868812c7dc52cd3b973d89fa261ea5e9011;
- PR state: Ready, mergeable, direct
main.
RED injects a malformed UTF-8 byte into an otherwise structurally valid CycloneDX JSON document and requires failure plus absence of a release-evidence manifest. GREEN reads exact SBOM bytes and decodes them with TextDecoder("utf-8", { fatal: true }) before JSON.parse; SBOM digest generation remains bound to the exact retained bytes.
Exact current proof
For unchanged #113 head 13849868812c7dc52cd3b973d89fa261ea5e9011:
- application
ci 31439391439: terminal success;
reviewer-ci 31439391449: terminal success;
- eligible central
Security Scan 31439391436: terminal success;
- formal reviews: 0;
- inline review threads: 0;
- the CodeRabbit exact-head attempt was rate-limited and is non-passing/non-approval evidence.
Acceptance
Repository-owned implementation on #113 current exact head
Remaining protected integration / release acceptance
Related: #5, #27, #29, #68, #69, #113
Problem
Protected
mainc85d710804139c0697d7ef8fa47d02b1389e6d84reads retained CycloneDX SBOM evidence before release semantics. Ordinary Node UTF-8 string decoding can replace malformed byte sequences with U+FFFD, allowing byte-invalid retained evidence to become a different Unicode JSON document before validation.This is an exact retained-byte integrity boundary. Parser hardening must not be confused with release publication, deployment, licensing, or acquisition acceptance.
RCA
scripts/release-evidence.mjs.readFileSync(..., "utf8").Active test-first repair
PR #113 (
fix(release): reject malformed UTF-8 SBOM evidence) is the current direct-mainrepair.c85d710804139c0697d7ef8fa47d02b1389e6d84;42cb0c53d94dd21b73f5de7d07468bdeec1fd1f2;13849868812c7dc52cd3b973d89fa261ea5e9011;main.RED injects a malformed UTF-8 byte into an otherwise structurally valid CycloneDX JSON document and requires failure plus absence of a release-evidence manifest. GREEN reads exact SBOM bytes and decodes them with
TextDecoder("utf-8", { fatal: true })beforeJSON.parse; SBOM digest generation remains bound to the exact retained bytes.Exact current proof
For unchanged #113 head
13849868812c7dc52cd3b973d89fa261ea5e9011:ci31439391439: terminal success;reviewer-ci31439391449: terminal success;Security Scan31439391436: terminal success;Acceptance
Repository-owned implementation on #113 current exact head
Remaining protected integration / release acceptance
mainafter integration.Related: #5, #27, #29, #68, #69, #113