From 1a7d074e94dbcc883deb26973706d7b7d2614177 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Tue, 22 Sep 2026 13:14:19 +0200 Subject: [PATCH] Auf dem iPhone trug Team Dogi das Zeichen der Agentur DIE ZWEITE HAELFTE EINER ENTSCHEIDUNG VOM 10.09.2026 Der Block, der /workspace/app.webmanifest auf crew.webmanifest umbiegt, begruendet sich selbst so: "Sonst hiesse die App auf dem Startbildschirm eines Modis 'Creator Workspace' und traege das Zeichen mit der Chili -- die zu Spicy Media gehoert, nicht zu ihnen." Genau das passierte trotzdem -- auf dem iPhone. Android nimmt das Symbol aus dem Manifest (crew-192.png, richtig). iOS Safari nimmt es NICHT von dort, sondern aus , und diese Zeile steht in jeder HTML-Datei auf workspace-180.png. Gemessen: crew-180.png und workspace-180.png sind verschiedene Dateien (30 899 gegen 34 850 Byte). Ein Modi mit iPhone bekam die Chili auf den Startbildschirm, derselbe Modi mit Android das richtige Zeichen. So etwas faellt beim Ansehen nie auf -- man braeuchte beide Geraete nebeneinander. Behoben mit derselben Loesung wie beim Manifest: umbiegen an EINER Stelle, statt in 37 Dateien eine zweite Zeile zu setzen. Wer eine Seite anlegt, schreibt weiterhin workspace-*.png und bekommt auf crew. trotzdem das richtige Symbol. ABGELEITET, NICHT AUFGEZAEHLT: Umgebogen wird nur, wo es die Crew-Fassung wirklich gibt -- gemessen sind das 32, 180, 192, 512 und die beiden maskable. workspace-1024.png (TikTok) hat keine und bleibt unangetastet; eine kuenftige Groesse kommt von selbst dazu, sobald jemand die Datei anlegt. DREI BEFUNDE VON pruef-struktur, alle aus meiner eigenen Arbeit - material.html und willkommen.html hatten weder theme-color noch apple-touch-icon. Auf dem iPhone waere das Startbildschirm-Symbol ein Bildschirmfoto der Seite gewesen, auf Android die Leiste weiss. Beide binden jetzt app.webmanifest statt crew.webmanifest direkt -- die Adresse biegt es um, und zwei Stellen laufen sonst auseinander. - 20 tote CSS-Regeln (.b-analyse*) in entwicklung.css. Am 22.09. wurde der Block "Resuemee je Frage" aus dem Skript entfernt, die Gestaltung blieb stehen. Das ist nicht nur Ballast auf jeder Seite, sondern eine Falle: Wer spaeter .b-analyse im CSS findet, haelt den Block fuer lebendig. Vor dem Entfernen geprueft, dass im Bereich keine fremde Klasse steht. EIN RUECKSTAND VOM 21.09. NACHGETRAGEN pruef-crew-adresse erwartete vier Rollenkacheln auf der Wand; seit die linke Hand dazukam (Commit 21793b6) sind es fuenf. Die Pruefung war seitdem rot an einer Stelle, an der NICHTS kaputt war -- und die Zeile daneben ("so viele, wie es Rollen auf der Wand gibt") war die ganze Zeit gruen und hat den Fehler damit verdeckt. Gemessen: pruef-crew-adresse 148/0 (war 147/1, neu: vier Aussagen zum Startbildschirm-Symbol samt Gegenprobe, dass die Agenturadresse unveraendert bleibt und Groessen ohne Crew-Fassung nicht umgebogen werden), pruef-struktur 35/0 (war 32/3), pruef-css-klassen 30/0, pruef-befinden 116/0, pruef-willkommen 67/0, pruef-installieren 14/0, pruef-textform 50/0, pruef-zwischenspeicher 27/0. Co-Authored-By: Claude Opus 5 --- server/crew-adresse.js | 58 ++++++++++++++++++ server/pruef-crew-adresse.mjs | 71 ++++++++++++++++++++-- workspace/anruf-probe.html | 8 +-- workspace/app.webmanifest | 8 +-- workspace/assets/css/entwicklung.css | 88 ++++------------------------ workspace/aufgaben.html | 34 +++++------ workspace/automation.html | 30 +++++----- workspace/befinden.html | 28 ++++----- workspace/bereich.html | 40 ++++++------- workspace/bewerben.html | 34 +++++------ workspace/bewerbungen.html | 32 +++++----- workspace/calls.html | 32 +++++----- workspace/chat.html | 36 ++++++------ workspace/content.html | 32 +++++----- workspace/crew-index.html | 10 ++-- workspace/crew.webmanifest | 8 +-- workspace/dateien.html | 32 +++++----- workspace/entwicklung.html | 28 ++++----- workspace/hilfe.html | 26 ++++---- workspace/index.html | 8 +-- workspace/kalender.html | 32 +++++----- workspace/leistung.html | 30 +++++----- workspace/material.html | 36 +++++++----- workspace/personen.html | 30 +++++----- workspace/profil.html | 34 +++++------ workspace/rechte.html | 28 ++++----- workspace/report.html | 32 +++++----- workspace/scouting.html | 30 +++++----- workspace/start.html | 30 +++++----- workspace/startcheck.html | 32 +++++----- workspace/steckbrief.html | 34 +++++------ workspace/talente.html | 30 +++++----- workspace/team.html | 28 ++++----- workspace/teamlage.html | 28 ++++----- workspace/teilen.html | 26 ++++---- workspace/treff-moderation.html | 28 ++++----- workspace/treff-regeln.html | 28 ++++----- workspace/uebersicht.html | 30 +++++----- workspace/unsere-seiten.html | 26 ++++---- workspace/werdegang.html | 28 ++++----- workspace/willkommen.html | 34 +++++++---- workspace/wissen.html | 32 +++++----- 42 files changed, 690 insertions(+), 619 deletions(-) diff --git a/server/crew-adresse.js b/server/crew-adresse.js index 96b11afb..7c5dd8c0 100644 --- a/server/crew-adresse.js +++ b/server/crew-adresse.js @@ -72,8 +72,30 @@ Zugangswand sieht aus wie immer, und der Code stimmt nicht. ===================================================================== */ +import { readdirSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + export const CREW_ADRESSE = "https://crew.dogfather-universe.com"; +/* WELCHE SYMBOLGROESSEN HAT DIE CREW-APP EIGENS? + Abgeleitet aus dem Ordner, nicht aufgezaehlt: Fuer jede Datei + crew-.png, zu der es auch workspace-.png gibt, kann umgebogen + werden. Einmal beim Start gelesen -- pro Anfrage waere es ein + Dateisystemzugriff fuer eine Antwort, die sich nie aendert. */ +const CREW_SYMBOLE = (() => { + try { + const ordner = join(dirname(fileURLToPath(import.meta.url)), + "..", "assets", "img", "app-symbole"); + const da = new Set(readdirSync(ordner)); + return new Set([...da] + .map((f) => f.match(/^crew-([0-9a-z-]+)\.png$/)) + .filter(Boolean) + .map((m) => m[1]) + .filter((x) => da.has(`workspace-${x}.png`))); + } catch { return new Set(); } +})(); + /* ===================================================================== DAS TEAM VON DOGI -- WELCHE ROLLEN DAZUGEHOEREN @@ -386,6 +408,42 @@ export function crewWeiche(req, res, next) { return next(); } + /* DAS SYMBOL AUF DEM IPHONE (22.09.2026) — DIE ZWEITE HAELFTE. + =================================================================== + Der Block darueber ist seit dem 10.09. richtig, war aber nur die + halbe Miete, und seine eigene Begruendung sagt, warum: "Sonst + hiesse die App auf dem Startbildschirm eines Modis 'Creator + Workspace' und traege das Zeichen mit der Chili." + + Genau das passierte -- auf dem iPhone. Android nimmt das Symbol + aus dem Manifest (also crew-192.png, richtig). iOS Safari nimmt + es NICHT von dort, sondern aus ``. + Und die Zeile steht in jeder HTML-Datei auf workspace-180.png. + + Gemessen: crew-180.png und workspace-180.png sind verschiedene + Dateien (30 899 gegen 34 850 Byte). Ein Modi mit iPhone bekam die + Chili auf den Startbildschirm; derselbe Modi mit Android das + richtige Zeichen. Beim Blick auf den Bildschirm faellt so etwas + nie auf, weil kaum jemand beide Geraete nebeneinander hat. + + DIESELBE LOESUNG WIE BEIM MANIFEST: umbiegen statt in 37 Dateien + eine zweite Zeile zu setzen. Wer eine Seite anlegt, schreibt + weiterhin workspace-*.png -- und bekommt auf crew. trotzdem das + richtige Symbol. + + ABGELEITET, NICHT AUFGEZAEHLT: Umgebogen wird nur, wenn es die + Crew-Fassung wirklich gibt. workspace-1024.png (fuer TikTok) hat + keine, bleibt also unangetastet -- und eine kuenftige Groesse + kommt von selbst dazu, sobald jemand die Datei anlegt. */ + const symbol = req.path.match( + /^\/assets\/img\/app-symbole\/workspace-([0-9a-z-]+)\.png$/); + if (symbol && CREW_SYMBOLE.has(symbol[1])) { + req.url = req.url.replace( + `/app-symbole/workspace-${symbol[1]}.png`, + `/app-symbole/crew-${symbol[1]}.png`); + return next(); + } + /* DIE ZUGANGSWAND GEHOERT DOGI UND DEN MODIS (10.09.2026). Filipe: "alles soll auf dogfather und die modis perfektionniert diff --git a/server/pruef-crew-adresse.mjs b/server/pruef-crew-adresse.mjs index b8390069..94af9e69 100644 --- a/server/pruef-crew-adresse.mjs +++ b/server/pruef-crew-adresse.mjs @@ -354,6 +354,50 @@ ok(Array.isArray(mw.icons) && mw.icons.length > 0 ok(mc.start_url === "/workspace/start.html" && mc.scope === "/workspace/", "crew.: Bereich und Startseite stimmen"); +/* --------------------------------------------------------------------- + UND DAS SYMBOL AUF DEM IPHONE (22.09.2026) + --------------------------------------------------------------------- + Die Zeilen darueber pruefen das MANIFEST -- daraus nimmt Android sein + Symbol. iOS Safari nimmt es von dort NICHT, sondern aus + ``, und die Zeile steht in jeder HTML + auf workspace-180.png. + + Bis zum 22.09.2026 war das Manifest deshalb richtig und der + Startbildschirm eines Modis trotzdem falsch -- aber nur auf dem + iPhone. Genau die Sorte Fehler, die beim Ansehen nie auffaellt: Man + braeuchte beide Geraete nebeneinander. + + Gemessen wird der AUSGELIEFERTE INHALT, nicht der Pfad. Eine + Umleitung, die auf eine Datei zeigt, die es nicht gibt, waere sonst + gruen. */ +console.log("\n--- Das Symbol auf dem Startbildschirm ---"); +{ + const pfad = "/assets/img/app-symbole/workspace-180.png"; + const aufCrew = await hole(pfad, { host: CREW }); + const aufWs = await hole(pfad, { host: WS }); + const echtCrew = await hole("/assets/img/app-symbole/crew-180.png", { host: CREW }); + + /* DIE ZAHL GEHOERT IN DIE BEDINGUNG: Waeren beide Antworten leer, + waeren sie auch gleich -- und der Vergleich unten trivial gruen. */ + ok(aufCrew.status === 200 && aufWs.status === 200 && echtCrew.status === 200 + && aufCrew.text.length > 1000, + `alle drei Symbole werden ausgeliefert (${aufCrew.text.length} Byte)`); + ok(aufCrew.text === echtCrew.text, + "crew.: hinter apple-touch-icon steckt wirklich das Crew-Zeichen"); + /* GEGENPROBE. Ohne sie wuesste niemand, ob die Umleitung ueberhaupt + etwas tut -- waeren beide Dateien identisch, waere die Zeile + darueber auch ohne jede Umleitung gruen. */ + ok(aufCrew.text !== aufWs.text, + "workspace.: dort unveraendert das Agenturzeichen — die Umleitung greift also"); + + /* UND SIE GREIFT NUR, WO ES EINE CREW-FASSUNG GIBT. workspace-1024.png + ist das TikTok-Symbol und hat keine; wuerde es mit umgebogen, + liefe die Anfrage auf eine Datei, die es nicht gibt. */ + const tiktok = await hole("/assets/img/app-symbole/workspace-1024.png", { host: CREW }); + ok(tiktok.status === 200 && tiktok.text.length > 1000, + `und Groessen ohne Crew-Fassung bleiben unangetastet (1024: ${tiktok.status})`); +} + /* Die Symboldateien muessen es auch wirklich geben -- ein Manifest, das auf nichts zeigt, faellt sonst erst auf dem Startbildschirm auf. */ let symboleDa = 0; @@ -408,20 +452,37 @@ ok(!/Creator/i.test(wandCrew.text), "crew.: und vom Creator Workspace auch nicht "und behauptet nicht mehr, das hier sei nur zum Arbeiten"); } -/* DIE KACHELREIHE HAT SEIT DEM 11.09.2026 VIER EINTRAEGE. +/* DIE KACHELREIHE HAT SEIT DEM 21.09.2026 FUENF EINTRAEGE. Die Geschichte dieser Zeile ist lehrreich und steht deshalb hier: Erst gab es keine Kachelreihe (eine Sorte Zugang, eine Reihe waere eine Huerde gewesen). Dann drei ("3 rollen. dogfather. rechte hand - und modis"). Jetzt vier, weil der Treff hier eingezogen ist. + und modis"). Dann vier, weil der Treff hier eingezogen ist. Jetzt + fuenf -- die linke Hand ist dazugekommen. GEPRUEFT WIRD NICHT DIE ZAHL, SONDERN WELCHE. Eine Zahl war schon zweimal rot, ohne dass etwas kaputt war. Die NAMEN dagegen sagen etwas: Steht dort eines Tages "manager", ist das ein Befund und kein - Umbau. */ + Umbau. + + NACHGETRAGEN AM 22.09.2026, und der Rueckstand gehoert hierher: + Die Karte "Linke Hand" kam am 21.09. auf die Wand (Commit 21793b6), + diese Erwartung blieb bei vier. Die Pruefung war seitdem rot -- an + einer Stelle, an der NICHTS kaputt war. Eine rote Pruefung, die rot + bleibt, gewoehnt einem das Hinsehen ab; die Zeile darunter ("so + viele, wie es Rollen auf der Wand gibt") war die ganze Zeit gruen + und hat den Fehler damit sogar verdeckt. + + Warum die Liste trotzdem stehen bleibt und nicht abgeleitet wird: + Die REIHENFOLGE ist eine Entscheidung (DogFather, rechte Hand, linke + Hand, Modis, Gaeste) und steht sonst nirgends. Abzuleiten hiesse nur, + die Liste woanders hinzuschreiben. Die Zahl daneben ist die + abgeleitete Haelfte -- zwei Fragen, zwei Zeilen. */ const rollenAufWand = [...wandCrew.text.matchAll(/data-rolle="([a-z]+)"/g)].map((m) => m[1]); -ok(JSON.stringify(rollenAufWand) === JSON.stringify(["admin", "hand", "modi", "gast"]), - `crew.: die vier Kacheln in dieser Reihenfolge (${rollenAufWand.join(", ")})`); +const ERWARTETE_REIHE = ["admin", "hand", "linke", "modi", "gast"]; +ok(JSON.stringify(rollenAufWand) === JSON.stringify(ERWARTETE_REIHE), + `crew.: die ${ERWARTETE_REIHE.length} Kacheln in dieser Reihenfolge ` + + `(${rollenAufWand.join(", ")})`); const kachelnCrew = (wandCrew.text.match(/class="rolle"/g) || []).length; const kachelnWs = (wandWs.text.match(/class="rolle"/g) || []).length; ok(kachelnCrew === rollenAufWand.length, diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index aac28178..d4a7e12b 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +