Der Treff zieht in Team Dogi ein — die dritte Adresse ist wieder weg
Filipe, nachdem er die dritte Wand gesehen hatte: "das soll keine app für sich sein, dass soll in der crew seite adaptiert werden, da rein perfektionniert." WAS VERSCHWINDET: treff.dogfather-universe.com samt Weiche (treff-adresse.js), Zugangswand, Manifest und acht Bühnenbildern. Kein DNS-Eintrag, kein zweiter Caddy-Block, kein zweites App-Symbol. Die Gründe, die DAFÜR sprachen, stehen jetzt als Kommentar in crew-adresse.js statt als Code -- sie gelten weiter, und beim nächsten Mal wird jemand dieselbe Idee haben: eine App je Ursprung, und ein Schloss mehr zwischen der Community und den Daten der Agentur. WAS DER VERZICHT KOSTET, benannt statt übersehen: · Die Community steht vor derselben Wand wie das Team und liest dort die Namen der drei Team-Rollen. Filipes Entscheidung auf die Frage: vierte Kachel "Community" statt gar keiner Kacheln. · Ein Schloss weniger. Was vorher die Adresse getrennt hat, muss jetzt jede einzelne Regel halten -- deshalb prüft pruef-treff-werkzeuge seit heute zehn Dinge mehr (70 statt 60). EINE LÜCKE, DIE DABEI AUFGEFALLEN IST -- und die es schon vorher gab: Ein Mitglied der Community stand in der Auswahl, wen man zu einem Termin einlädt, wem man eine Aufgabe gibt und mit wem man einen Chat anfängt. Für DogFather bedeutet fast jede Liste "alle". Jetzt zu, über eine Hülle (ohneAussen) um die fünf Listen, die von Zusammenarbeit handeln -- damit sie auch für die Listen gilt, die es noch nicht gibt. Die Verwaltungsliste in "Personen & Zugänge" zeigt sie weiterhin, sonst legt er einen Zugang an und der verschwindet im selben Moment. DREI BEFUNDE AUS DEN PRÜFUNGEN, wieder keiner vom Lesen: · Mein eigener Kommentar auf der Wand nannte eine Rolle der Agentur -- in einer Datei, die jedes Community-Mitglied im Quelltext liest. Zum zweiten Mal an einem Tag, und zum zweiten Mal ausgerechnet in einem Kommentar, der erklärt, warum man das nicht tut. · Die Prüfung "der Satz nennt die Modis" durchsuchte den QUELLTEXT und wäre grün geblieben, obwohl der Satz auf dem Bildschirm längst ein anderer ist -- sie fand ihn in einem Kommentar. Sie misst jetzt die sichtbare Unterzeile. · Der erste Entwurf der Adressregel sperrte die Community auch auf localhost aus -- eine Bedingung durch AUSSCHLUSS, zum dritten Mal an einem Tag. Jede Zeile nennt jetzt die Adresse, FÜR DIE sie gilt. Und zwei feste Zahlen weniger: Die Kachelreihe wird nicht mehr gezählt, sondern beim Namen genannt (admin, hand, modi, gast) -- eine Zahl war dort schon zweimal rot, ohne dass etwas kaputt war. Der App-Name wird nicht nur geprüft, sondern der UNTERSCHIED zur Agenturadresse. Die App heißt auf crew. jetzt "DogFather Universe" statt "Team Dogi" -- sie gehört ab heute beiden (Entscheidung Filipe). Geprüft: rollen 312 · crew-adresse 132 · kalender 104 · sicht 84 · modi-verborgen 80 · chat-kanaele 79 · treff-werkzeuge 70 · haus-trennung 62 · treff 58 · chat 48 · treff-seiten 42 · bereiche-lesend 37 · start-ansicht 147 · css-klassen 30 · zwischenspeicher 21 · alle-wege 19 · rechtetafel 19 -- alles grün. Die 58 bei pruef-treff sind elf weniger als gestern: Mit der dritten Adresse fallen ihre 26 Weichen-Prüfungen weg, ersetzt durch 10 für die eine Wand plus die neuen in 7b. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+13
-42
@@ -61,35 +61,6 @@ const SZENE = join(QUELLE, "gate-spicy-dogfather.jpeg");
|
||||
const DOGI = join(QUELLE, "dogfather-husky.png");
|
||||
const ZIEL = process.env.BUEHNE_ZIEL || join(WURZEL, "workspace", "assets", "img", "buehne");
|
||||
|
||||
/* ZWEI TUEREN, EIN WERKZEUG (11.09.2026).
|
||||
|
||||
Der Treff bekommt seine eigene Zugangswand, und sie braucht ihr
|
||||
eigenes Motiv -- nicht weil sie anders aussehen soll, sondern weil
|
||||
in diesem Bild "TEAM DOGI" EINGEBRANNT ist. Die Community traegt
|
||||
diesen Namen nicht; auf ihrer Tuer stuende sonst der Name eines
|
||||
Bereichs, zu dem sie nicht gehoert.
|
||||
|
||||
WARUM KEINE ZWEITE DATEI: Eine Kopie dieser 520 Zeilen haette die
|
||||
drei Gegenproben mitkopiert -- und beim naechsten Nachbessern waere
|
||||
genau eine der beiden verbessert worden. Hier aendern sich zwei
|
||||
Dinge, also sind es zwei Werte und kein zweites Werkzeug.
|
||||
|
||||
DIE FARBE BLEIBT DIESELBE, und das ist eine Entscheidung, keine
|
||||
Bequemlichkeit: Gemessen liegt der naechstbeste eigene Farbton
|
||||
(Tannengruen) 60 Lab-Einheiten vom Marineblau entfernt -- er waere
|
||||
also klar unterscheidbar gewesen. Nur haette der Treff damit wie ein
|
||||
DRITTES Haus ausgesehen, neben Spicy Media und Team Dogi. Er ist
|
||||
aber kein drittes Haus, sondern eine zweite Tuer in demselben:
|
||||
"lila und babyblau ueberall" (Filipe, 10.09.2026). Unterschieden
|
||||
werden die Tueren durch das WORT darauf, nicht durch die Farbe --
|
||||
so, wie man es in einem Gebaeude auch macht.
|
||||
|
||||
node tools/crew-buehne.mjs
|
||||
WAND_TEXT="DER TREFF" WAND_PRAEFIX=treff-gate node tools/crew-buehne.mjs
|
||||
*/
|
||||
const WAND_TEXT = process.env.WAND_TEXT || "TEAM DOGI";
|
||||
const WAND_PRAEFIX = process.env.WAND_PRAEFIX || "crew-gate";
|
||||
|
||||
for (const q of [SZENE, DOGI]) {
|
||||
if (!existsSync(q)) { console.error(`Fehlt: ${q}`); process.exit(1); }
|
||||
}
|
||||
@@ -324,14 +295,14 @@ async function bauen({ breite, ausschnitt = null, guete = 0.92, dunkel = 0.08,
|
||||
g.restore();
|
||||
}
|
||||
|
||||
/* ---- 5. Der Name auf der Tuer --------------------------------- */
|
||||
/* ---- 5. "TEAM DOGI" ------------------------------------------- */
|
||||
const schriftHoehe = Math.round(zh * 0.072);
|
||||
g.save();
|
||||
g.textAlign = "center";
|
||||
g.textBaseline = "alphabetic";
|
||||
g.font = `800 ${schriftHoehe}px "Segoe UI", system-ui, sans-serif`;
|
||||
/* 0,955 lag halb unter dem Bildrand -- im Bildschirmfoto war von
|
||||
dem Namen die untere Haelfte abgeschnitten. Jetzt so weit
|
||||
"TEAM DOGI" die untere Haelfte abgeschnitten. Jetzt so weit
|
||||
herauf, dass die Unterlaengen noch auf dem Wasser stehen. */
|
||||
const ty = zh * 0.915;
|
||||
/* Erst ein kalter Schein darunter, dann die Schrift in Metall --
|
||||
@@ -339,7 +310,7 @@ async function bauen({ breite, ausschnitt = null, guete = 0.92, dunkel = 0.08,
|
||||
g.shadowColor = "rgba(70,150,220,0.85)";
|
||||
g.shadowBlur = schriftHoehe * 0.9;
|
||||
g.fillStyle = "rgba(10,25,45,0.9)";
|
||||
g.fillText(a.text, mx, ty);
|
||||
g.fillText("TEAM DOGI", mx, ty);
|
||||
g.shadowBlur = 0;
|
||||
const metall = g.createLinearGradient(0, ty - schriftHoehe, 0, ty);
|
||||
metall.addColorStop(0, "#ffffff");
|
||||
@@ -347,7 +318,7 @@ async function bauen({ breite, ausschnitt = null, guete = 0.92, dunkel = 0.08,
|
||||
metall.addColorStop(0.55, "#7ea6c6");
|
||||
metall.addColorStop(1, "#e8f2fa");
|
||||
g.fillStyle = metall;
|
||||
g.fillText(a.text, mx, ty);
|
||||
g.fillText("TEAM DOGI", mx, ty);
|
||||
g.restore();
|
||||
|
||||
/* ---- 6. Vignette und ein Hauch Dunkel ------------------------- */
|
||||
@@ -393,7 +364,7 @@ async function bauen({ breite, ausschnitt = null, guete = 0.92, dunkel = 0.08,
|
||||
dogiKasten,
|
||||
};
|
||||
}, { szene: szeneDaten, dogi: dogiDaten, breite, ausschnitt, guete, dunkel, vignette,
|
||||
ohneDogi, tafel: TAFEL, text: WAND_TEXT });
|
||||
ohneDogi, tafel: TAFEL });
|
||||
|
||||
return { ...roh, puffer: Buffer.from(roh.bild.split(",")[1], "base64") };
|
||||
}
|
||||
@@ -468,17 +439,17 @@ let gebaut = 0;
|
||||
console.log("\n--- Quer ---");
|
||||
for (const b of [960, 1280, 1600, 1920, 2560]) {
|
||||
const r = await bauen({ breite: b, guete: 0.93, dunkel: 0.08, vignette: 0.26 });
|
||||
writeFileSync(join(ZIEL, `${WAND_PRAEFIX}-${b}.webp`), r.puffer);
|
||||
writeFileSync(join(ZIEL, `crew-gate-${b}.webp`), r.puffer);
|
||||
gebaut++;
|
||||
|
||||
if (r.rotAnteil > 0.01) maengel.push(
|
||||
`${WAND_PRAEFIX}-${b}: noch ${(r.rotAnteil * 100).toFixed(1)} % rote Bildpunkte -- Umfaerbung hat nicht gegriffen`);
|
||||
`crew-gate-${b}: noch ${(r.rotAnteil * 100).toFixed(1)} % rote Bildpunkte -- Umfaerbung hat nicht gegriffen`);
|
||||
if (r.tafelMittel > 46) maengel.push(
|
||||
`${WAND_PRAEFIX}-${b}: die Tafel ist zu hell (${r.tafelMittel.toFixed(1)}) -- die Karte braucht einen ruhigen Grund`);
|
||||
`crew-gate-${b}: die Tafel ist zu hell (${r.tafelMittel.toFixed(1)}) -- die Karte braucht einen ruhigen Grund`);
|
||||
if (r.tafelStreuung > 34) maengel.push(
|
||||
`${WAND_PRAEFIX}-${b}: in der Tafel ist zu viel Muster (Streuung ${r.tafelStreuung.toFixed(1)})`);
|
||||
`crew-gate-${b}: in der Tafel ist zu viel Muster (Streuung ${r.tafelStreuung.toFixed(1)})`);
|
||||
|
||||
console.log(` ${WAND_PRAEFIX}-${b}.webp`.padEnd(30)
|
||||
console.log(` crew-gate-${b}.webp`.padEnd(30)
|
||||
+ `${(r.puffer.length / 1024).toFixed(0)} KB · ${r.breite}x${r.hoehe}`
|
||||
+ ` · Rot ${(r.rotAnteil * 100).toFixed(2)} %`
|
||||
+ ` · Tafel ${r.tafelMittel.toFixed(1)}/${r.tafelStreuung.toFixed(1)}`);
|
||||
@@ -500,11 +471,11 @@ for (const b of [440, 580, 900]) {
|
||||
ausschnitt: [0.13, 0.02, 0.32, 0.98], guete: 0.88,
|
||||
dunkel: 0.22, vignette: 0.30,
|
||||
});
|
||||
writeFileSync(join(ZIEL, `${WAND_PRAEFIX}-hoch-${b}.webp`), r.puffer);
|
||||
writeFileSync(join(ZIEL, `crew-gate-hoch-${b}.webp`), r.puffer);
|
||||
gebaut++;
|
||||
if (r.rotAnteil > 0.01) maengel.push(
|
||||
`${WAND_PRAEFIX}-hoch-${b}: noch ${(r.rotAnteil * 100).toFixed(1)} % rote Bildpunkte`);
|
||||
console.log(` ${WAND_PRAEFIX}-hoch-${b}.webp`.padEnd(30)
|
||||
`crew-gate-hoch-${b}: noch ${(r.rotAnteil * 100).toFixed(1)} % rote Bildpunkte`);
|
||||
console.log(` crew-gate-hoch-${b}.webp`.padEnd(30)
|
||||
+ `${(r.puffer.length / 1024).toFixed(0)} KB · ${r.breite}x${r.hoehe}`
|
||||
+ ` · Rot ${(r.rotAnteil * 100).toFixed(2)} %`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user