Bildleser: eine Ueberschriftenregel, die Aufgaben verschluckt hat

GEFUNDEN IM ECHTEN BETRIEB, nicht beim Bauen. Filipe hat den
Bildschirmfoto-Weg am 08.10.2026 zum ersten Mal benutzt. Im Protokoll:

  09:15:17  kampagne_eingelesen  "...Refined visvals Goal 1.0" -> #94  (2 Aufgaben)
  09:15:26  kampagne_schon_da    derselbe Schluessel -> Eintrag 94
  09:15:52  eintrag_geloescht    agentur #94

Auf seinem Bild stehen DREI Ziele, in der Kachel kamen ZWEI an -- und
er hat sie danach geloescht. Er hat also gearbeitet, das Ergebnis war
still unvollstaendig, und der einzige Hinweis darauf war, dass er es
wegwirft.

DIE URSACHE war die Regel, die die Phasenueberschrift aussortiert. Sie
warf jede Zeile weg, in der "Ziele erreichen", "Leistung" oder
"Phasendetails" IRGENDWO vorkam -- also auch gewoehnliche Ziele, die
zufaellig dieselben Woerter benutzen. Gemessen:

  WEG     Ziele erreichen fuer mehr Reichweite
  WEG     Deine Leistung steigern
  bleibt  An 20 Tagen Ziele fuer optimierte Bildqualitaet erreichen

Die Ueberschrift wird jetzt an ZWEI Dingen erkannt statt an einem
Wort: Sie traegt den Countdown ("Endet in 23 Tage 22 : 50 : 44"), ODER
sie ist die Ueberschrift und sonst nichts (Zeilenende, nicht
Wortgrenze -- mit einer Wortgrenze fiel "Ziele erreichen fuer mehr
Reichweite" weiter durch).

IM ZWEIFEL BLEIBT DIE ZEILE. Eine Ueberschrift zu viel in der
Hakenliste loescht man in zwei Sekunden; eine fehlende Aufgabe merkt
niemand, bis jemand sie nicht erfuellt. Dieselbe Richtung wie der
dritte Ausgang: lieber etwas zu viel melden als still verschlucken.

DAZU DER TITEL, aus demselben Einsatz: Aus "Refined visuals" wurde
"Refined visvals" -- ein u als v. Nachgemessen, ob die Sprachwahl
hilft (deu, eng, deu+eng, eng+deu gegen die Pruefdatei): alle vier
lesen richtig, der Fehler liess sich nicht nachstellen. Eine
Einstellung zu aendern, deren Wirkung man nicht messen kann, ist
Raten. Stattdessen wird der Titel GEGENGELESEN: Er steht auf der Seite
zweimal (Ueberschrift gross und fett, Rasterfeld klein und normal),
also in zwei Schriftgroessen und damit mit zwei unabhaengigen
Gelegenheiten, sich zu verlesen. Gehen die Lesungen auseinander, sagt
die Kachel es -- als Hinweis, nicht als Ablehnung. Ein falsches Datum
ist eine Falschauskunft, ein verlesener Buchstabe im Titel ein
Schoenheitsfehler.

GEPRUEFT: 53 (Bildleser, +10), 190 (Route, unveraendert). Gegenproben
in beide Richtungen: die echte Ueberschrift mit Countdown faellt
weiterhin heraus, eine Zeile die NUR das Wort ist ebenfalls -- und der
Titel-Hinweis kommt NICHT, wenn beide Lesungen uebereinstimmen. Kein
ausgeliefertes Skript beruehrt, also kein neuer Stempel.

PARALLELE ARBEIT: Die Crew-Sitzung hat ausdruecklich zugestimmt und
haelt waehrenddessen still; ihre drei Dateien (reaktion.js,
reaktion.html, getippt.js) bleiben uncommittet in der Arbeitskopie.
Das Arbeitsschloss stand auf ihr -- mit ihrer Zusage ueberschrieben,
nicht eigenmaechtig.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-08 14:37:03 +02:00
co-authored by Claude Opus 5
parent 354dfd9be9
commit 5a6641e8da
2 changed files with 97 additions and 2 deletions
+50 -2
View File
@@ -482,10 +482,58 @@ export function leseBild(text) {
Statt die Startzeile noch genauer zu suchen, wird gesagt, was Statt die Startzeile noch genauer zu suchen, wird gesagt, was
KEINE Aufgabe ist. Das haelt auch, wenn die Seite die Bloecke KEINE Aufgabe ist. Das haelt auch, wenn die Seite die Bloecke
einmal anders anordnet. */ einmal anders anordnet. */
const KEINE_AUFGABE = /Endet\s*in|Endetin|Phasendetails|Leistung|Ziele erreichen/i; /* WAS DIE PHASENUEBERSCHRIFT IST -- UND WAS NUR SO KLINGT
(berichtigt 08.10.2026, nach dem ersten echten Einsatz).
Hier stand ein Muster, das JEDE Zeile wegwarf, in der
„Ziele erreichen“, „Leistung“, „Phasendetails“ oder „Endet in“
irgendwo vorkam. Das trifft die Ueberschrift -- und leider auch
Aufgaben, die zufaellig dieselben Woerter benutzen. Gemessen:
WEG „Ziele erreichen für mehr Reichweite“
WEG „Deine Leistung steigern“
bleibt „An 20 Tagen Ziele für optimierte Bildqualität erreichen“
Die ersten beiden sind gewoehnliche Ziele und haetten bleiben
muessen. Im Protokoll steht, dass Filipes erster echter Versuch
am 08.10.2026 mit ZWEI Aufgaben ankam, waehrend auf seinem Bild
DREI stehen -- und er die Kachel danach geloescht hat.
DIE UEBERSCHRIFT ERKENNT MAN AN ZWEI DINGEN, nicht an einem
Wort:
1. Sie traegt den Countdown („Endet in 23 Tage 22 : 50 : 44“)
-- also das Wort UND Ziffern dahinter.
2. Oder sie ist KURZ und besteht fast nur aus dem
Ueberschriftwort.
Eine Aufgabe ist ein Satz mit einer Anweisung darin; sie traegt
keinen Countdown und ist laenger.
IM ZWEIFEL BLEIBT DIE ZEILE. Eine Ueberschrift zu viel in der
Hakenliste ist ein Schoenheitsfehler, den man in zwei Sekunden
loescht. Eine fehlende Aufgabe merkt niemand -- bis jemand sie
nicht erfuellt. */
const KEINE_AUFGABE = (zeile) => {
const nur = String(zeile).replace(AUFZAEHLUNG, "").trim();
/* Mit Countdown: das ist die Ueberschrift. */
if (/Endet\s*in/i.test(nur) && /[0-9]/.test(nur)) return true;
/* Oder die Zeile IST die Ueberschrift und sonst nichts.
GENAU, NICHT NUR AM ANFANG (berichtigt beim Gegenlesen,
08.10.2026): Mit einer Wortgrenze statt eines Zeilenendes fiel
„Ziele erreichen für mehr Reichweite“ durch -- eine
gewoehnliche Aufgabe, die zufaellig so anfaengt. Eine
Ueberschrift steht allein in ihrer Zeile; alles, was danach
weitergeht, ist ein Satz.
Die Zeichen am Ende sind das, was die Texterkennung gern
anhaengt: Punkt, Doppelpunkt, ein Strich, ein Trennpunkt. */
if (/^(Phasendetails|Ziele erreichen|Creator.{0,3}innen.Leistung)[\s.:·|-]*$/i
.test(nur)) {
return true;
}
return false;
};
for (const z of alle.slice(ab)) { for (const z of alle.slice(ab)) {
if (!AUFZAEHLUNG.test(z)) continue; if (!AUFZAEHLUNG.test(z)) continue;
if (KEINE_AUFGABE.test(z)) continue; if (KEINE_AUFGABE(z)) continue;
/* EIN PUNKT AM ENDE IST FAST IMMER ZUFALL. Gemessen kam /* EIN PUNKT AM ENDE IST FAST IMMER ZUFALL. Gemessen kam
„Geh LIVE für 900 Minuten.“ heraus, auf der Seite steht es „Geh LIVE für 900 Minuten.“ heraus, auf der Seite steht es
ohne Punkt. Eine Aufgabe ist eine Beschriftung, kein Satz; ohne Punkt. Eine Aufgabe ist eine Beschriftung, kein Satz;
+47
View File
@@ -135,6 +135,53 @@ melde("=== 1. Aus dem Erkennungstext wird eine Kachel ===");
ok(!g.kuer.aufgaben.some((a) => /Endet|Ziele erreichen|Leistung/i.test(a)), ok(!g.kuer.aufgaben.some((a) => /Endet|Ziele erreichen|Leistung/i.test(a)),
" und die Phasenueberschrift mit ihrem Countdown ist keine"); " und die Phasenueberschrift mit ihrem Countdown ist keine");
/* ---- EINE AUFGABE DARF HEISSEN, WIE SIE WILL (08.10.2026) ---
GEFUNDEN IM ECHTEN BETRIEB, nicht beim Bauen: Filipes erster
Versuch am 08.10.2026 kam laut Protokoll mit ZWEI Aufgaben an,
waehrend auf seinem Bild DREI standen — und er hat die Kachel
danach geloescht.
Die Ursache war die Regel, die die Phasenueberschrift
aussortiert. Sie warf jede Zeile weg, in der „Ziele erreichen“,
„Leistung“ oder „Phasendetails“ IRGENDWO vorkam — also auch
gewoehnliche Ziele, die zufaellig dieselben Woerter benutzen.
Eine Ueberschriftenregel, die Aufgaben verschluckt.
IM ZWEIFEL BLEIBT DIE ZEILE. Eine Ueberschrift zu viel in der
Hakenliste loescht man in zwei Sekunden. Eine fehlende Aufgabe
merkt niemand — bis jemand sie nicht erfuellt. */
{
const mitFallen = [
"Kampagne mit Fallen",
"Gruppenname Kampagne mit Fallen Zeitzone Europe/Berlin",
"Daten 01.10.2026 ~ 31.10.2026",
"@ Ziele erreichen Endetin 23 Tage 22 : 50 : 44",
"· Ziele erreichen für mehr Reichweite",
"· Deine Leistung steigern",
"· An 20 Tagen Ziele für optimierte Bildqualität erreichen",
"· Phasendetails im Kalender eintragen",
].join("\n");
const g2 = leseBild(mitFallen);
ok(g2.kuer.aufgaben.length === 4,
`vier Aufgaben, obwohl drei davon Ueberschriftwoerter tragen `
+ `(${g2.kuer.aufgaben.length}): ${JSON.stringify(g2.kuer.aufgaben)}`);
ok(g2.kuer.aufgaben.includes("Ziele erreichen für mehr Reichweite"),
" „Ziele erreichen für mehr Reichweite“ ist eine Aufgabe");
ok(g2.kuer.aufgaben.includes("Deine Leistung steigern"),
" „Deine Leistung steigern“ auch");
/* GEGENPROBE: Die ECHTE Ueberschrift mit ihrem Countdown faellt
weiterhin heraus. Ohne sie waere „alles bleibt stehen“ auch
dann gruen, wenn gar nichts mehr aussortiert wird. */
ok(!g2.kuer.aufgaben.some((a) => /Endetin|Endet in/i.test(a)),
" die Zeile MIT Countdown bleibt draussen");
/* Und eine Zeile, die NUR aus dem Ueberschriftwort besteht,
ebenfalls -- sonst stuende „Phasendetails“ als Haken da. */
const nurWort = leseBild([...mitFallen.split("\n"), "· Phasendetails"].join("\n"));
ok(!nurWort.kuer.aufgaben.includes("Phasendetails"),
" und eine Zeile, die nur das Wort ist, auch");
}
ok(g.kuer.einleitung === "Zusätzliche Prämien für das Team im Oktober.", ok(g.kuer.einleitung === "Zusätzliche Prämien für das Team im Oktober.",
`die Beschreibung: ${JSON.stringify(g.kuer.einleitung)}`); `die Beschreibung: ${JSON.stringify(g.kuer.einleitung)}`);
ok(g.kuer.steckbrief.verbund === "Spicy Media", ok(g.kuer.steckbrief.verbund === "Spicy Media",