waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ app tools gate-stempel.mjs

2,4 KB Rohdatei
app/tools/gate-stempel.mjs — 59 Zeilen
1 /**
2 * Hält fest, wann die Vollstufe des Gates zuletzt sauber durchlief.
3 *
4 * Der Stempel liegt in `.git/` und ist damit bewusst NICHT versioniert: Er
5 * beschreibt den Zustand dieses einen Arbeitsplatzes, nicht den des Projekts.
6 * Ein eingecheckter Stempel würde behaupten, bei jedem anderen sei die
7 * Vollstufe auch schon gelaufen.
8 *
9 * Der pre-commit-Hook vergleicht sein Alter mit der jüngsten Änderung unter
10 * `app/src` und erinnert, wenn der Quelltext seither weitergewandert ist.
11 */
12 import { execFileSync } from 'node:child_process';
13 import { writeFileSync } from 'node:fs';
14 import { dirname, join } from 'node:path';
15 import { fileURLToPath } from 'node:url';
16
17 import { paketstand } from './paketstand.mjs';
18
19 const wurzel = execFileSync('git', ['rev-parse', '--show-toplevel'], {
20 encoding: 'utf8',
21 }).trim();
22
23 const pfad = join(wurzel, '.git', 'gate-stempel');
24 writeFileSync(pfad, `${new Date().toISOString()}\n`, 'utf8');
25
26 process.stdout.write(`Gate vollständig durchlaufen. Stempel: ${pfad}\n`);
27
28 /*
29 Und jetzt das, was der Bericht bisher verschwieg.
30
31 Playwright zählt übersprungene Prüfungen nicht in die Zusammenfassung: Aus
32 „203 bestanden“ wird „183 bestanden“, und die fehlenden fallen niemandem
33 auf. Ein Gate, das nicht sagt, was es ausgelassen hat, behauptet mehr, als
34 es geprüft hat – dieselbe Unwahrheit, gegen die `bauPruefen()` angelegt ist.
35
36 Die Zahlen sind am 03.09.2026 gemessen (`npx playwright test --list`: 203
37 Prüfungen in 23 Dateien; ohne frisches Paket bleiben 20 liegen – 15 aus
38 `gepackt.spec.ts`, 3 aus `fensterlage.spec.ts` und 2 aus
39 `store-paket.spec.ts`, die ein registriertes MSIX brauchen). Sie standen
40 hier bis Fassung 0.27.2 auf 119 und 110 und waren damit selbst das, wogegen
41 dieser Absatz argumentiert.
42
43 Kein Fehlschlag, sondern eine Feststellung: `npm run gate` baut das Paket
44 nicht mit, und ein Abbruch zwänge zu einem mehrminütigen `dist:win` vor
45 jedem Lauf. Wer veröffentlicht, findet den Schritt in
46 docs/veroeffentlichen.md.
47 */
48 const appWurzel = dirname(dirname(fileURLToPath(import.meta.url)));
49 const paket = paketstand(appWurzel);
50
51 if (!paket.vorhanden || paket.veraltet) {
52 process.stdout.write(
53 `\nNICHT geprüft: e2e/gepackt.spec.ts – ${paket.grund}\n` +
54 'Die gepackte Anwendung ist damit ungeprüft geblieben; vor einer ' +
55 'Veröffentlichung ist das ein offener Punkt.\n',
56 );
57 } else {
58 process.stdout.write('Einschließlich der Prüfungen gegen das gebaute Paket.\n');
59 }