fix(okr): drift-laas kommando-antall og haandhev rapport utenfor bundlen

This commit is contained in:
Kjell Tore Guttormsen 2026-08-02 10:36:26 +02:00
commit d63438581d
4 changed files with 92 additions and 8 deletions

View file

@ -20,7 +20,7 @@
// Exit: 0 = rapport produsert · 1 = uventet feil (inkl. confinement-brudd)
// 2 = bruksfeil (manglende/ukjent sti)
import { writeFileSync, renameSync, existsSync, statSync } from 'node:fs';
import { writeFileSync, renameSync, existsSync, statSync, realpathSync } from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
@ -55,7 +55,25 @@ if (isMain) {
try {
const ut = byggRapport(bundleRoot);
if (rapportFil) {
writeAtomic(path.resolve(rapportFil), ut);
// Haandhever loeftet i headeren: rapporten skal ALDRI havne i bundlen den
// vurderer. En rapport i treet ville blitt klassifisert av neste kjoering
// (selv-forurensning), og et loefte som bare staar i prosa er ikke et
// loefte -- samme standard som tool-lista i commands/arkivklar.md.
//
// BEGGE sider maa realpath-es, ellers er sammenligningen verdiloes: paa
// macOS er /var en symlenke til /private/var, saa en realpath-et rot mot
// en bare resolvet maal-sti sammenligner to skrivemaater av samme sted og
// slipper alt gjennom. Maalet finnes ikke ennaa, saa det er FORELDRE-
// katalogen som realpath-es -- samme grep som writeConfined i
// lib/innboks-write.mjs.
const maalDir = realpathSync(path.dirname(path.resolve(rapportFil)));
const maal = path.join(maalDir, path.basename(rapportFil));
const rot = realpathSync(path.resolve(bundleRoot));
if (maal === rot || maal.startsWith(rot + path.sep)) {
process.stderr.write(`arkivklar: rapporten kan ikke skrives inne i bundlen som vurderes: ${rapportFil}\n`);
process.exit(1);
}
writeAtomic(maal, ut);
process.stdout.write(`Arkivklar: vurderingsgrunnlag skrevet til ${rapportFil}\n`);
} else {
process.stdout.write(ut);