// Controlul negativ al SBOM-ului re-derivat din lockfile-ul comis (sbom.test.mjs), prin mecanismul comun din _control.mjs. // node aerenew/tools/proof-of-software/test/sbom-control-negativ.mjs import { controleaza } from './_control.mjs'; process.exitCode = await controleaza('sbom.test.mjs', [ ['comparatia SBOM-ului cu lockfile-ul scoasa', 'const aceleasi = JSON.stringify(a) === JSON.stringify(b);', 'const aceleasi = true;', 'CONTROL: o componenta scoasa'], // ancora pe partea STABILA a randului (1.4.0 i-a adaugat `props` la coada si ancora veche a murit: STRICAT, prins de chiar acest control) ['hash-urile de integritate scoase din forma semantica', "hashes: (c.hashes || []).map((h) => `${h.alg}:${String(h.content).toLowerCase()}`).sort(),", 'hashes: [],', 'CONTROL: un hash de integritate'], // B-21 (2026-09-30): felul SBOM-ului il alegea SBOM-ul insusi; fara paznic, un fisier numit care nu e in arbore scapa nejudecat ['un SBOM care numeste un fisier absent din arbore primit (B-21)', 'if (din && !inArbore(din)) {', 'if (false) {', 'CONTROL B-21: un SBOM npm editat care spune ca e derivat din go.sum'], // prima forma a reparatiei B-21 (revizuita in aceeasi ora): un nume necunoscut, dar prezent in arbore, iesea nejudecat ['un nume de fisier necunoscut scoate arborele npm de sub judecata (B-21)', " if (fel === 'npm' && !prezente.includes('package-lock.json') && prezente.length) {", " if (din && !['go.sum', 'packages.lock.json', 'gradle/verification-metadata.xml'].includes(din)) { checks.push({ name: 'rebuild: SBOM', pass: null, detail: `derived from ${din}, which this verifier does not re-derive` }); return; }\n if (fel === 'npm' && !prezente.includes('package-lock.json') && prezente.length) {", 'CONTROL B-21: un SBOM npm editat care numeste un fisier AL arborelui'], ['un arbore fara lockfile trecut drept re-derivat', "if (!fs.existsSync(path.join(src, 'package-lock.json'))) return { lipsa:", "if (false) return { lipsa:", 'fara package-lock'], ]);