Es laeuft: TikTok baut die Seite nur fuer Handys -- und zwei Vorlagen statt einer
Filipes Kachel ging nicht. Der Grund war nicht TikTok, sondern EIN WORT
in unserer Kennung.
DAS WORT HEISST "Mobile"
Gestern hiess es hier noch "17 KB, keine Daten, von jedem Weg aus".
Nachgemessen mit einem Keksglas und fuenf Kennungen:
Desktop-Kennung, ohne Kekse 17 KB keine Daten
Desktop-Kennung, MIT Keksen 17 KB keine Daten
Android-Kennung, ohne Kekse 939 KB DATEN
iPhone-Kennung, mit Keksen 939 KB DATEN
TikTok-App, mit Keksen 42 KB keine Daten
TikTok baut die Seite serverseitig NUR fuer die Handyfassung auf; am
Rechner laedt sie sich mit JavaScript nach. Kekse, Sprache und
Accept spielen keine Rolle -- einzeln nachgemessen.
UND WIR BLEIBEN EHRLICH: Unser Name und unsere Adresse stehen hinten
an der Kennung. Nachgemessen liefert TikTok damit dieselben 939 KB.
Es kostet also nichts. Die Pruefung verlangt jetzt BEIDES: "Mobile"
(sonst kommt nichts an) und unseren Namen (sonst ist es eine
Verkleidung).
ZWEI VORLAGEN, NICHT EINE
Filipes Einladung fuehrt zu "LIVE Glow Up" -- und die ist ganz
anders gebaut als "Gipfelstuermer". Ihr fehlen gleich DREI
Bausteine, auf denen der Bauplan beruht: live_rule_introduction,
live_reward_introduction, live_campaign_intro. Stattdessen hat sie
live_task_group (Aufgaben als Reiter) und live_secondary_gift.
Der Leser kann jetzt beide. Gemessen:
Gipfelstuermer 5 Aufgaben, 5 Geschenke, 6 Preisgruppen, 0 Hinweise
LIVE Glow Up 2 Aufgaben, 1 Geschenk, 0 Preise, 2 Hinweise
Die doppelten Reiter fallen weg: Die Vorlage legt je Reiter zwei
Eintraege an (Creator und Zuschauer), und zweimal derselbe Haken
waere ein Haken an zwei Stellen.
"HAT KEINE" IST ETWAS ANDERES ALS "KONNTE NICHT GELESEN WERDEN"
Ohne diese Unterscheidung haette LIVE Glow Up vier Hinweise gemeldet,
die alle nach einem Fehler klingen -- obwohl schlicht nichts da ist.
Das eine schickt jemanden suchen, das andere sagt ihm, dass nichts
fehlt. Entsprechend haengt der Regeltext auch kein pauschales "Bitte
nachtragen" mehr an: Jeder Hinweis sagt selbst, ob etwas zu tun ist.
FUENFTE PRUEFDATEI
kampagne-aufgabengruppe.html.br -- die echte Seite von LIVE Glow Up,
unveraendert, unangemeldet geholt (uid "0", anchor_id leer),
147 KB gepackt, sofort zurueckgelesen und Byte fuer Byte verglichen.
Ohne sie koennte der Leser eine Vorlage und faellt bei der naechsten
Einladung um.
GEPRUEFT
pruef-kampagne-lesen 112 -> 128 (eigener Abschnitt fuer die zweite
Vorlage, mit Gegenprobe: Gipfelstuermer meldet weiterhin nichts) ·
pruef-kampagne 102 -> 103 · pruef-struktur, pruef-zeichen, pruef-video
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -97,6 +97,11 @@ const SEITEN = {
|
||||
sha: "28e6a24ff3f6b726", gross: 986_560,
|
||||
was: "Stern Stunde, Preisbaustein entfernt",
|
||||
},
|
||||
aufgabengruppe: {
|
||||
datei: "kampagne-aufgabengruppe.html.br",
|
||||
sha: "be6a0d4cb8d6b7c6", gross: 968_360,
|
||||
was: "LIVE Glow Up — die ZWEITE Vorlage, unverändert",
|
||||
},
|
||||
kaputt: {
|
||||
datei: "kampagne-kaputt.html", packt: false,
|
||||
sha: "cf40f347d49d3e03", gross: 369,
|
||||
@@ -470,14 +475,14 @@ melde("=== 7. Eine Kampagne ohne Preise ist unvollständig, nicht unlesbar ===")
|
||||
ok(p.pflicht.titel === "Stern Stunde" && !!p.pflicht.start && !!p.pflicht.ende,
|
||||
`sie wird gelesen: ${p.pflicht.titel}, ${p.pflicht.start} bis ${p.pflicht.ende}`);
|
||||
ok(p.kuer.preise.length === 0, `keine Preise gelesen (${p.kuer.preise.length})`);
|
||||
ok(p.hinweise.some((h) => h.includes("Preise")),
|
||||
`und das steht als Hinweis da: „${p.hinweise.find((h) => h.includes("Preise"))}“`);
|
||||
ok(p.hinweise.some((h) => /Preis/.test(h)),
|
||||
`und das steht als Hinweis da: „${p.hinweise.find((h) => /Preis/.test(h))}“`);
|
||||
ok(p.hinweise.length === 1,
|
||||
`genau ein Hinweis, nicht mehr (${p.hinweise.length}) — nur die Preise fehlen`);
|
||||
ok(p.kuer.aufgaben.length > 0 && p.kuer.geschenke.length > 0 && !!p.kuer.bannerUrl,
|
||||
`alles andere ist da: ${p.kuer.aufgaben.length} Aufgaben,`
|
||||
+ ` ${p.kuer.geschenke.length} Geschenke, Banner ja`);
|
||||
ok(regelnText(p.kuer, p.hinweise).includes("Bitte nachtragen"),
|
||||
ok(/Preis/.test(regelnText(p.kuer, p.hinweise)),
|
||||
"die Kachel sagt selbst, dass sie unvollständig ist");
|
||||
ok(!regelnText(p.kuer, p.hinweise).includes("BELOHNUNGEN"),
|
||||
"und behauptet keinen Preisabschnitt, den es nicht gibt");
|
||||
@@ -502,7 +507,7 @@ melde("=== 7. Eine Kampagne ohne Preise ist unvollständig, nicht unlesbar ===")
|
||||
w.globalData.activityInfo.ac_schema_with_interaction_rules = JSON.stringify(s);
|
||||
});
|
||||
const l = leseKampagne(leer);
|
||||
ok(l.kuer.preise.length === 0 && l.hinweise.some((h) => h.includes("Preise")),
|
||||
ok(l.kuer.preise.length === 0 && l.hinweise.some((h) => /Preis/.test(h)),
|
||||
"auch ein leerer Preisbaustein ergibt denselben Hinweis");
|
||||
ok(l.kuer.aufgaben.length === 5,
|
||||
`und der Rest bleibt unberührt (${l.kuer.aufgaben.length} Aufgaben)`);
|
||||
@@ -699,6 +704,70 @@ melde("=== 10. Ein Wörterbuch mit Lücken wird gemeldet, nicht verschwiegen ===
|
||||
"und kein Platzhalter steht dafür in der Kachel");
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
10b. DIE ZWEITE VORLAGE — nicht jede Kampagne ist wie Gipfelstürmer
|
||||
===================================================================== */
|
||||
melde("");
|
||||
melde("=== 10b. „LIVE Glow Up“ ist ganz anders gebaut ===");
|
||||
|
||||
{
|
||||
const g = leseKampagne(seite.aufgabengruppe);
|
||||
|
||||
/* GEGENPROBE ZUERST: Die Bausteine, auf denen Gipfelstürmer
|
||||
beruht, gibt es hier WIRKLICH nicht. Ohne diese Zeile bewiese
|
||||
der Rest nur, dass irgendeine Seite gelesen wurde. */
|
||||
ok(!g.auszug.bausteine.includes("live_rule_introduction")
|
||||
&& !g.auszug.bausteine.includes("live_reward_introduction")
|
||||
&& !g.auszug.bausteine.includes("live_campaign_intro"),
|
||||
`ihr fehlen drei Bausteine, die Gipfelstürmer trägt`);
|
||||
ok(g.auszug.bausteine.includes("live_task_group")
|
||||
&& g.auszug.bausteine.includes("live_secondary_gift"),
|
||||
`dafür hat sie live_task_group und live_secondary_gift`);
|
||||
|
||||
/* Und das Pflichtprogramm steht trotzdem. */
|
||||
ok(g.pflicht.titel === "LIVE Glow Up", `Titel: ${g.pflicht.titel}`);
|
||||
ok(g.pflicht.start === "2026-10-05" && g.pflicht.ende === "2026-10-11",
|
||||
`Zeitraum: ${g.pflicht.start} bis ${g.pflicht.ende}`);
|
||||
ok(g.pflicht.zone === "Europe/Berlin" && !!g.kuer.bannerUrl,
|
||||
`Zone und Banner da`);
|
||||
|
||||
/* Aufgaben aus der Aufgabengruppe -- und OHNE Doppelte. Die
|
||||
Vorlage legt je Reiter zwei Einträge an (Creator und Zuschauer);
|
||||
zweimal derselbe Haken wäre ein Haken an zwei Stellen. */
|
||||
ok(g.kuer.aufgaben.length === 2,
|
||||
`${g.kuer.aufgaben.length} Aufgaben aus der Aufgabengruppe`);
|
||||
ok(new Set(g.kuer.aufgaben).size === g.kuer.aufgaben.length,
|
||||
"keine davon doppelt");
|
||||
ok(g.kuer.aufgaben[0].includes("Missionen"),
|
||||
`die erste heißt „${g.kuer.aufgaben[0]}“`);
|
||||
|
||||
ok(g.kuer.geschenke.length === 1 && !!g.kuer.geschenke[0].name,
|
||||
`${g.kuer.geschenke.length} Geschenk aus live_secondary_gift`
|
||||
+ ` („${g.kuer.geschenke[0]?.name}“)`);
|
||||
ok(g.kuer.klapptexte.length === 2,
|
||||
`${g.kuer.klapptexte.length} Klapptexte`);
|
||||
ok(g.kuer.klapptexte.some((k) => /Woche 1/.test(k.text)),
|
||||
" der Zeitplan steht darin (Woche 1 …)");
|
||||
|
||||
/* WAS ES NICHT GIBT, HEISST NICHT „konnte nicht gelesen werden“.
|
||||
Das sind zwei verschiedene Nachrichten: Die eine schickt
|
||||
jemanden suchen, die andere sagt ihm, dass nichts fehlt. */
|
||||
ok(g.hinweise.length === 2,
|
||||
`${g.hinweise.length} Hinweise: ${g.hinweise.join(" | ")}`);
|
||||
ok(g.hinweise.every((h) => /hat keine|hat keinen/.test(h)),
|
||||
" beide sagen „hat keine“, keiner „konnte nicht gelesen werden“");
|
||||
|
||||
/* GEGENPROBE: Bei Gipfelstürmer sagt derselbe Leser gar nichts --
|
||||
dort ist alles da. */
|
||||
ok(leseKampagne(seite.gipfel).hinweise.length === 0,
|
||||
"Gegenprobe: Gipfelstürmer meldet weiterhin nichts");
|
||||
|
||||
/* Und der Regeltext trägt den Zeitplan, nicht nur Überschriften. */
|
||||
const r = regelnText(g.kuer, g.hinweise);
|
||||
ok(/Woche 1/.test(r) && /Woche 4/.test(r),
|
||||
`der Regeltext enthält den ganzen Zeitplan (${r.length} Zeichen)`);
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
11. DER LESER LIEST NUR — nachgewiesen am Quelltext
|
||||
===================================================================== */
|
||||
@@ -758,8 +827,8 @@ melde("=== 12. Gleiche Eingabe, gleiches Ergebnis ===");
|
||||
try { leseKampagne(text); gelesen++; }
|
||||
catch { geworfen++; void name; }
|
||||
}
|
||||
ok(gelesen === 3 && geworfen === 1,
|
||||
`${gelesen} der vier Seiten lesen sich, ${geworfen} wirft (die kaputte)`);
|
||||
ok(gelesen === 4 && geworfen === 1,
|
||||
`${gelesen} der fünf Seiten lesen sich, ${geworfen} wirft (die kaputte)`);
|
||||
}
|
||||
|
||||
melde("");
|
||||
|
||||
Reference in New Issue
Block a user