Files
dogfather-universe/workspace/automation.html
T
DogFatherGit cf6c72b3d8 Beim Laden stand "SPICY MEDIA - Zentrale" auf jeder Startseite
WAS DAS BILD GEZEIGT HAT

Beim Durchsehen der Einzelbilder einer Videoaufnahme -- vier
Sekunden lang, gleich nach dem Laden:

    ---- SPICY MEDIA ----
         Zentrale
       WIRD GELADEN

Und zwar auf der Startseite eines COMMUNITY-MITGLIEDS.

In start.html steht die Vorgabe des Agenturhauses. Das Teamhaus
bekommt eigene Worte ("Team Dogi" / "Die IrrenAnstalt"), aber erst
wenn /api/ich geantwortet hat. Bis dahin las jeder Modi und jedes
Community-Mitglied die Marke der Agentur in der groessten Schrift
der Seite. Auf einem langsamen Telefon sekundenlang, bei jedem
Aufruf.

Das ist kein Schoenheitsfehler. Spicy Media ist der Betrieb hinter
der Agentur, und seit dem 24.09. sind die beiden Haeuser getrennt.
Genau diese Zeile hat die Trennung bei jedem Seitenaufruf kurz
aufgehoben -- und niemandem ist es aufgefallen, weil die Seite
DANACH richtig aussah. Wer hinsieht, sieht den Endzustand.

GELOEST OHNE SPRUNG

`data-wartet` macht die zwei Zeilen durchsichtig, nicht leer -- der
Platz bleibt stehen, es ruckt nichts. start.js nimmt das Merkmal
weg, sobald es weiss, in welchem Haus es ist; gemessen dauert das
351 ms.

Eine Notbremse in der Seite nimmt es nach vier Sekunden notfalls
selbst weg. Ohne sie waere die groesste Schrift der Seite fuer immer
unsichtbar, falls start.js gar nicht erst laeuft -- und "unsichtbar"
waere schlimmer als das falsche Wort.

DIE PRUEFUNG DAZU -- UND ZWEI MESSFEHLER DARIN

pruef-start-ansicht misst ab jetzt beide Richtungen: nach dem Laden
muessen beide Zeilen sichtbar sein, mit gesetztem `data-wartet`
unsichtbar. Ohne die zweite Haelfte koennte die Regel spurlos
verschwinden, ohne dass etwas rot wird.

Die Pruefung selbst hat mich zweimal getaeuscht, und beide Male
lehrreich:

  1. Sie mass 900 ms nach der Anmeldung -- eine feste Pause. Ob
     /api/ich in dieser Zeit geantwortet hat, haengt vom Rechner ab.
     Dieselbe Pruefung war einmal gruen und einmal rot, bei
     unveraendertem Code. Gewartet wird jetzt auf das Merkmal selbst,
     und wie lange es gedauert hat, steht im Meldetext.

  2. `opacity` hat einen Uebergang von 180 ms, und getComputedStyle
     liefert waehrenddessen den laufenden Zwischenwert statt des
     Ziels. Erst meldete die Gegenprobe "nicht verdeckt", dann die
     Messung davor "nicht sichtbar" -- beide Male war die Regel in
     Ordnung und nur die Animation im Weg. Fuer die Messung wird der
     Uebergang jetzt abgeschaltet.

DAS VIDEOWERKZEUG

server/tiktok-videos.mjs nimmt die vier Clips auf. Sechs Aenderungen,
jede aus einem Einzelbild:

  - DIE NACHTRUHE HAT DIE VORBEREITUNG MITBLOCKIERT. Video 2 zeigte
    einen leeren Chat. Gemeldet wurde "gefuellt", weil nur geprueft
    war, dass es den RAUM gibt. Jetzt werden die Nachrichten
    zurueckgelesen und gezaehlt; unter acht wird nicht gefilmt.
  - DOGI-MEDIA WAR LEER -- ein Video ueber Material zum Mitnehmen,
    und auf dem Bildschirm stand "Gerade ist nichts frei". Sechs
    echte Marken-Bilder werden eingestellt, zwei davon schon
    genommen, damit die Aussage des Films auch im Bild steht.
  - "WILL ICH AUCH - 0" an jedem Wunsch, waehrend der Untertitel
    sagte "die anderen sehen, wer mitwill". Ein Versprechen, das das
    Bild gleich wieder einkassiert, ist schlimmer als ein leeres
    Brett. Jetzt wird ueber die echte Route gestimmt, absteigend
    6/5/4 -- unter zehn Stimmen wird nicht gefilmt.
  - DER WAECHTER FUER VIDEO 2 verglich zwei feste Zahlen
    (TREFF_NACHT_AB === "0"). Das ist die Abschrift einer Einstellung
    und keine Frage nach dem Zustand: Jedes andere Fenster, das den
    Chat genauso schlafen legt, wurde abgewiesen. Gefragt wird jetzt
    `istNachtruhe()` -- dieselbe Funktion, die auch die Seite
    befragt. Mit 12 bis 6 steht im Bild "Ab 06:00 Uhr geht es
    weiter" statt "Ab 24:00 Uhr", und das ergibt fuer einen
    Zuschauer ueberhaupt erst Sinn.
  - ROLLEN IM KASTEN STATT IN DER SEITE. `window.scrollBy` bewegt
    die Seite; im Chat rollt aber der Verlauf in seinem eigenen
    Kasten. Drei Bilder hintereinander sahen gleich aus.
  - EINE FESTE PIXELZAHL TRAF DEN FALSCHEN BLOCK. Video 4 filmte
    den Katalog der fertigen Vorschlaege statt der Wuensche, weil
    "480 nach unten" zufaellig dort endete. `b.zu(wahl)` misst, wo
    das Element steht.

Dazu: Umlaute in allen Bildtexten ("Tueren" stand im Video), der
Abspann bleibt am Ende stehen (vorher sah man die letzte Sekunde
wieder die App), und die Dateigroessen im Regal sind echt.

KEIN LINK, UND ZWAR GEMESSEN

Nach jedem Seitenwechsel wird der SICHTBARE Text nach Adressen
abgesucht -- dogfather-universe, https://, www., jeder Domainname.
Bei einem Fund bricht die Aufnahme ab, und es wird keine Datei
geschrieben. Das mit dem Auge zu pruefen waere genau die Sorte
Kontrolle, die beim vierten Video nachlaesst.

Mit PROBE_LECK=ja schiebt die Suche selbst eine Adresse ins Bild --
nachgefahren, Rueckgabewert 2. Eine Suche, die nur "nichts gefunden"
sagen kann, hat nichts bewiesen.

Gemessen: pruef-start-ansicht 160/0 (vorher 157), pruef-buehne
242/0, pruef-handy 177/0, pruef-kachelraster 24/0,
pruef-css-klassen 33/0.
2026-09-27 18:34:10 +02:00

183 lines
7.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Automationen · Spicy & Dogi</title>
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<!-- Die Farbe der Fensterleiste, wenn der Workspace als App laeuft.
Stand auf #0674b9 (kraeftiges Blau) und stach damit als einziger
heller Balken ueber einer durchweg dunklen Seite. Jetzt derselbe
Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite
eine Flaeche sind statt zweier. -->
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609271833" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609271833" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609271833" />
<link rel="stylesheet" href="assets/css/start.css?v=202609271833" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609271833" />
<link rel="stylesheet" href="assets/css/automation.css?v=202609271833" />
<link rel="stylesheet" href="assets/css/module.css?v=202609271833" />
<!-- haus.css MUSS die letzte Stilvorlage sein (10.09.2026).
Auf der Agenturadresse ist sie leer -- das Haus hier IST der
Grundzustand. Auf der Adresse von Team Dogi biegt der Server
genau diesen Dateinamen auf crew-haus.css um, und die Seite
kommt schon beim ERSTEN Abruf in Lila und Babyblau an --
ohne Umfaerben im Browser, ohne Flackern. -->
<link rel="stylesheet" href="assets/css/haus.css?v=202609271833" />
</head>
<body class="start">
<!-- Der Schleier ueber der Buehne (Casper und HasiDog in den unteren
Ecken, siehe start.css). Ein eigenes Element statt eines dritten
Pseudo-Elements -- body hat nur ::before und ::after. -->
<div class="schleier" aria-hidden="true"></div>
<header class="kopfleiste">
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="M14.5 5.5 8 12l6.5 6.5" />
</svg>
<span class="zurueck-knopf__text">Zurück</span>
</button>
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator&nbsp;Workspace</a> · Automationen</span></p>
<div class="kopfleiste__rechts">
<span class="wer" id="wer">…</span>
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
</div>
</header>
<main class="inhalt inhalt--breit">
<section class="kopf-zeile">
<div>
<p class="marke">Was von allein passiert</p>
<h1 class="titel">Automationen</h1>
<p class="unterzeile">
Alles hier läuft ohne Zutun. Diese Seite zeigt, was gerade greift –
und wo du es abschalten kannst.
</p>
</div>
</section>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<!-- Die KI ist die einzige Automation mit Schalter: Sie kostet
Rechenzeit, die der Website gehört. -->
<section class="ki-kasten" id="ki-kasten">
<div class="ki-kasten__kopf">
<div>
<p class="marke">Lokale KI</p>
<h2 class="ki-kasten__titel">Vorschläge in Calls, Start-Check und Report</h2>
<p class="ki-kasten__text" id="ki-text">Zustand wird geprüft …</p>
</div>
<label class="schalter" id="ki-schalter-block" hidden>
<input type="checkbox" id="ki-schalter" />
<span class="schalter__gleis"><span class="schalter__punkt"></span></span>
<span class="schalter__text"><strong id="ki-schalter-text">Angeschaltet</strong></span>
</label>
</div>
<ul class="ki-kasten__daten" id="ki-daten"></ul>
</section>
<!-- Was gerade tatsächlich anliegt: dieselbe Quelle wie auf dem
Dashboard, hier aber vollständig statt gekürzt. -->
<section class="block">
<div class="block__kopf">
<h2 class="block__titel">Was gerade anliegt</h2>
<span class="block__zahl" id="hinweis-zahl">–</span>
</div>
<p class="block__frage">
Dieselben Hinweise wie auf der Übersicht, hier vollständig. Sie führen keine
eigene Liste – jeder verschwindet, sobald die Sache erledigt ist.
</p>
<div id="hinweise"><p class="leise">Wird geprüft …</p></div>
</section>
<!-- Sicherung und Zustand. Steht bewusst weit oben: Es ist die einzige
Automation, deren Ausfall alles auf einmal kosten würde. -->
<section class="zustand" id="zustand-kasten">
<div class="zustand__kopf">
<div>
<p class="marke">Sicherung &amp; Zustand</p>
<h2 class="zustand__titel" id="zustand-titel">Wird geprüft …</h2>
<p class="zustand__text" id="zustand-text"></p>
</div>
<button type="button" class="knopf knopf--klein" id="jetzt-sichern">Jetzt sichern</button>
</div>
<ul class="zustand__daten" id="zustand-daten"></ul>
<div class="klapp-kopf zustand__listenkopf">
<p class="feldschild">Vorhandene Sicherungen</p>
<button type="button" class="knopf-still" id="sicherungen-schalter"
aria-expanded="false" aria-controls="sicherungen" hidden>
<span id="sicherungen-schalter-text">Alle zeigen</span>
<svg class="klapp-pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="m6 9.5 6 6 6-6" />
</svg>
</button>
</div>
<div id="sicherungen" data-klapp="zu"></div>
</section>
<section class="block">
<div class="block__kopf">
<h2 class="block__titel">Läuft dauerhaft im Hintergrund</h2>
</div>
<div class="regeln" id="regeln"></div>
</section>
<!-- ==== DAS LÖSCHKONZEPT (15.09.2026) =========================
Stufe 8 aus dem Plan. Es steht auf DIESER Seite, weil hier
alles steht, was ohne Zutun läuft – und weil es genau das ist:
eine Automatik, die täglich Daten entfernt.
Sichtbar zu sein ist die halbe Sache. Ein Löschkonzept, von dem
niemand weiß, ob es greift, ist ein Dokument; eines mit Zahlen
daneben ist eine Zusicherung. Deshalb steht bei jeder Zeile,
wie viele Datensätze sie gerade betrifft. -->
<section class="block">
<div class="block__kopf">
<h2 class="block__titel">Was gelöscht wird – und was bleibt</h2>
<button type="button" class="knopf-still" id="aufb-jetzt">Jetzt aufräumen</button>
</div>
<p class="block__frage">
Personenbezogene Daten werden nicht aufgehoben, weil Platz da ist, sondern
solange es einen Grund gibt. Läuft täglich von selbst.
</p>
<div id="aufbewahrung"><p class="leise">Wird geladen …</p></div>
</section>
<section class="block">
<!-- Wie im Personen-Bereich: zugeklappt stehen nur die vier
neuesten Zeilen da, alles Weitere auf Knopfdruck. -->
<div class="block__kopf klapp-kopf">
<h2 class="block__titel">Zuletzt automatisch passiert</h2>
<button type="button" class="knopf-still" id="verlauf-schalter"
aria-expanded="false" aria-controls="verlauf" hidden>
<span id="verlauf-schalter-text">Alle zeigen</span>
<svg class="klapp-pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="m6 9.5 6 6 6-6" />
</svg>
</button>
</div>
<p class="block__frage">Aus dem Protokoll – damit nachvollziehbar bleibt, was ohne Zutun geschah.</p>
<div id="verlauf"><p class="leise">Wird geladen …</p></div>
</section>
</main>
<script src="assets/js/meldung.js?v=202609271833" defer></script>
<script src="assets/js/nachfrage.js?v=202609271833" defer></script>
<script src="assets/js/wahl.js?v=202609271833" defer></script>
<script src="assets/js/bereiche.js?v=202609271833" defer></script>
<script src="assets/js/installieren.js?v=202609271833" defer></script>
<script src="assets/js/kopf.js?v=202609271833" defer></script>
<script src="assets/js/glocke.js?v=202609271833" defer></script>
<script src="assets/js/automation.js?v=202609271833" defer></script>
</body>
</html>