Kundenportal war nicht installierbar: Manifest hinter der Zugangswand
Live gemessen nach dem Deploy: Symbole 200, portal.webmanifest 302 auf zugang.html. Der Browser bekam HTML statt JSON und bot "App installieren" gar nicht erst an -- die ganze Arbeit am Symbol waere fuer das Portal wirkungslos geblieben, ohne dass irgendwo etwas rot geworden waere. Das ist zum DRITTEN Mal derselbe Fehler an derselben Stelle (app.webmanifest, verwaltung.webmanifest, jetzt portal.webmanifest). Zweimal stand die Begruendung danach im Code -- beim dritten Mal wurde sie trotzdem uebersehen. Ein Kommentar verhindert nichts. Deshalb zusaetzlich eine Pruefung in pruef-struktur.mjs: Jedes Manifest unter /webdesign/ MUSS in der Ausnahmeliste von webdesign-gate.js stehen. Gegengeprobt -- Eintrag entfernt, Pruefung schlaegt an. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -298,6 +298,49 @@ const BEKANNT_TOT = [".content-wurzel", ".code-feld"];
|
||||
: `kein neues totes CSS (${BEKANNT_TOT.length} bekannte Reste stehen bewusst)`);
|
||||
}
|
||||
|
||||
/* ---------- 9. Kommt jedes Manifest auch WIRKLICH an? --------------------
|
||||
|
||||
Ein Manifest kann fehlerfrei im Repo liegen und trotzdem nie beim
|
||||
Browser ankommen -- wenn eine Zugangswand davorsteht und HTML statt
|
||||
JSON zurueckgibt. Dann bietet der Browser "App installieren" gar
|
||||
nicht erst an, und niemand merkt etwas: Die Datei ist ja da.
|
||||
|
||||
Genau das ist DREIMAL passiert (webdesign/app.webmanifest,
|
||||
verwaltung.webmanifest, portal.webmanifest). Zweimal stand die
|
||||
Begruendung danach im Code -- und beim dritten Mal wurde sie trotzdem
|
||||
uebersehen. Ein Kommentar verhindert nichts; eine Pruefung schon.
|
||||
|
||||
Geprueft wird gegen die Ausnahmeliste in webdesign-gate.js: Jedes
|
||||
Manifest unter /webdesign/ MUSS dort stehen. */
|
||||
console.log(`
|
||||
=== Manifeste hinter der Zugangswand ===`);
|
||||
{
|
||||
const tor = join(SERVER, "webdesign-gate.js");
|
||||
const torText = existsSync(tor) ? readFileSync(tor, "utf8") : "";
|
||||
ok(torText.length > 1000, "webdesign-gate.js gelesen");
|
||||
|
||||
const manifeste = [];
|
||||
const suche = (ordner, vorn) => {
|
||||
for (const n of readdirSync(ordner, { withFileTypes: true })) {
|
||||
if (n.name.startsWith(".") || n.name === "node_modules") continue;
|
||||
const rel = vorn ? `${vorn}/${n.name}` : n.name;
|
||||
if (n.isDirectory()) { if (rel === "webdesign") suche(join(ordner, n.name), rel); continue; }
|
||||
if (n.name.endsWith(".webmanifest") || n.name === "manifest.json") manifeste.push(rel);
|
||||
}
|
||||
};
|
||||
suche(REPO, "");
|
||||
|
||||
const hinterWand = manifeste.filter((m) => m.startsWith("webdesign/"));
|
||||
ok(hinterWand.length >= 2, `${hinterWand.length} Manifeste unter /webdesign/ gefunden`);
|
||||
|
||||
const fehlend = hinterWand.filter((m) => !torText.includes(`"/${m}"`));
|
||||
ok(fehlend.length === 0,
|
||||
fehlend.length
|
||||
? `NICHT in der Ausnahmeliste von webdesign-gate.js: ${fehlend.join(", ")} `
|
||||
+ `— der Browser bekaeme HTML statt JSON und boete "App installieren" nicht an`
|
||||
: `alle ${hinterWand.length} stehen in der Ausnahmeliste`);
|
||||
}
|
||||
|
||||
/* ---------- Gegenprobe --------------------------------------------------- */
|
||||
|
||||
console.log(`\n=== Gegenprobe (muss anschlagen) ===`);
|
||||
|
||||
Reference in New Issue
Block a user