Files
dogfather-universe/workspace/support.html
T
DogFatherGitandClaude Opus 5 8a9ab66c44 Angemeldet bleiben: /workspace/ zeigte die Anmeldung trotz Sitzung
Filipe: „ich will dass wenn sich jemand bei der workspace seite
anmeldet, angemeldet bleibt bis er sich selbst abmeldet."

ERST GEMESSEN, DANN GEBAUT -- und das hat die Richtung gedreht.

Die naheliegende Antwort waere gewesen, die Sitzung zu verlaengern.
Sie war aber nie zu kurz:

  * Der Keks gilt 180 Tage und verlaengert sich beim Benutzen.
  * In der echten Datenbank lief KEINE der 28 Sitzungen vor Maerz
    2027 ab.
  * Am echten Browser nachgestellt: Er uebersteht dreimaliges
    Neuladen, den Service Worker UND das Schliessen des Browsers.

Trotzdem meldeten sich dieselben Geraete staendig neu an. DogFathers
Android am 05.10. um 22:54 UND um 22:55 -- gleiche IP, gleiche
Browserkennung, eine Minute auseinander. Kein zweites Geraet.

DER GRUND: `/workspace/` lieferte die Anmeldung aus, OHNE zu fragen,
ob schon jemand angemeldet ist. Das ist die Adresse, die man tippt,
als Lesezeichen hat und weitergibt. Wer sie oeffnete, sah das
Codefeld und tippte den Code noch einmal -- obwohl seine Sitzung die
ganze Zeit gueltig war. Jede Eingabe legt eine neue Sitzung an;
deshalb standen sieben davon bei einer Person.

Haette ich die Sitzungsdauer erhoeht, waere der Fehler geblieben und
die Sicherheit schlechter geworden.

(Die installierte App startet auf `start.html` und war nie betroffen.
Es traf nur den Weg ueber die Adresszeile -- also den haeufigsten.)

WARUM DIE WEITERLEITUNG AUF DEM SERVER STEHT

Mein erster Entwurf stand in gate.js und fragte `/api/ich`. Er
funktionierte und war trotzdem die schlechtere Loesung:

  * Ohne Sitzung antwortet `/api/ich` mit 401 -- danach stand bei
    JEDEM Aufruf der Anmeldung ein Fehler in der Browserkonsole.
    `pruef-neue-seiten` wurde davon zehnmal rot, und eine Meldung,
    die immer kommt, liest nach dem zweiten Mal niemand mehr.
  * Die Seite musste waehrend der Abfrage verdeckt werden, und diese
    Verdeckung brauchte wieder eine Notfrist, damit sie bei
    schlechtem Netz nicht haengen bleibt.
  * Und es brauchte eine Schleifensperre mit Zeitstempel in zwei
    Dateien -- deren erste Fassung prompt jeden ZWEITEN Aufruf auf
    der Anmeldung stehen liess. Die Pruefung hat genau das gefunden.

Drei Hilfskonstruktionen fuer etwas, das der Server in einer Zeile
weiss: Er liest die Sitzung ohnehin bei jeder Anfrage. Jetzt sieht
man die Anmeldung gar nicht erst, es gibt keinen Fehler in der
Konsole, und es geht auch ohne JavaScript. Die drei Hilfskonstruktionen
sind wieder entfernt; gate.css ist unveraendert.

BEIDE HAEUSER, OHNE SIE ZU VERMISCHEN: Auf der Crew-Adresse liefert
`/workspace/` die Datei crew-index.html -- derselbe Weg, dasselbe
Ziel. Der Keks bleibt host-gebunden: Wer nur im anderen Haus
angemeldet ist, bekommt weiterhin die Anmeldung, genau wie es die
Haustrennung vom 24.09.2026 verlangt. pruef-crew-adresse bleibt gruen.

NEU: pruef-angemeldet-bleiben.mjs (22 Pruefungen, 0 Fehler)

Mit einem echten Browserprofil auf der Platte -- nur so ueberlebt ein
Keks das Schliessen des Browsers; ein gewoehnlicher Kontext vergisst
alles, und dann maesse die Pruefung ihre eigene Einrichtung.

DIE WICHTIGSTE ZEILE IST DIE ZAHL DER SITZUNGEN. „Man bleibt
angemeldet" laesst sich leicht vortaeuschen: Wer bei jedem Besuch
stillschweigend neu anmeldet, sieht auch nie ein Codefeld. Deshalb
wird durchgehend gezaehlt -- es bleibt bei EINER, ueber drei Aufrufe
und einen Browserneustart hinweg.

Dazu die Gegenprobe in beide Richtungen: Abmelden beendet es
wirklich (die Sitzung ist weg, die Anmeldung bleibt stehen, kein Hin
und Her), und ohne Keks fuehrt `/workspace/` nicht zur Startseite --
die Messung kann also auch Nein sagen.

DREI MEINER EIGENEN MESSUNGEN WAREN ZUERST FALSCH, nicht der Code:
Die Pruefung klickte „Abmelden" ohne die Rueckfrage zu bestaetigen
und meldete dann „die Sitzung ist nicht weg"; ihre Knopfauswahl traf
einen unsichtbaren Knopf und lief 30 Sekunden in eine
Zeitueberschreitung; und die erste Schleifensperre war zu grob.
Alle drei berichtigt, bevor sie als Befund durchgingen.

NICHT VON MIR: pruef-css-klassen meldet weiterhin 44 statt 42
Schriftgroessen unter 11,5 px (uebersicht.css, wissen.css) -- derselbe
aeltere Befund wie gestern.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-06 01:14:27 +02:00

170 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>Support · Spicy &amp; Dogi</title>
<meta name="robots" content="noindex, nofollow" />
<link rel="manifest" href="/workspace/app.webmanifest" />
<meta name="theme-color" content="#06090f" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610060113" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610060113" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610060113" />
<link rel="stylesheet" href="assets/css/start.css?v=202610060113" />
<link rel="stylesheet" href="assets/css/support.css?v=202610060113" />
<link rel="stylesheet" href="assets/css/module.css?v=202610060113" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610060113" />
</head>
<body class="start">
<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> · Support</span></p>
<div class="kopfleiste__rechts">
<span class="wer" id="wer">…</span>
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
</div>
</header>
<!-- `support-seite` (25.09.2026): Filipe wollte fuer diese Kachel
einen eigenen Stil in Babyblau mit Lila. Die Klasse traegt ihn --
alle Regeln dazu haengen daran und gelten damit NUR hier. Ohne
sie muesste man dieselben Farben an dreissig Stellen einzeln
setzen, und die einunddreissigste waere vergessen. -->
<main class="inhalt inhalt--breit support-seite">
<section class="kopf-zeile">
<div>
<p class="marke">Support</p>
<h1 class="titel" id="seiten-titel">Etwas stimmt nicht?</h1>
<p class="unterzeile" id="seiten-unter">
Schreib es hin, häng Bilder dran, fertig. DogFather und die
rechte Hand kümmern sich darum.
</p>
</div>
</section>
<!-- ==================================================================
ZWEI SEITEN, EINE DATEI (24.09.2026)
Filipe: „bei dogfather und der rechten hand soll die kachel
anders gebaut sein weil die sind die die sich um die probleme
kümmern."
Beide Ansichten stehen hier, und support.js blendet die aus, die
nicht gilt. Zwei getrennte Dateien wären die naheliegende
Aufteilung — und die zweite wäre die, in der ein Umbau vergessen
wird. Dieselbe Entscheidung wie bei hilfe.html.
Was der SERVER liefert, entscheidet das ohnehin: Wer nicht zur
Leitung gehört, bekommt fremde Meldungen gar nicht erst. Das
Ausblenden hier ist Aufräumen, keine Sicherung.
================================================================== -->
<!-- ---------- MELDEN: sehen und benutzen alle --------------------- -->
<section class="s-melden" id="melden-block">
<h2 class="s-titel">Was ist los?</h2>
<form id="melden" novalidate>
<label class="s-feld">
<span class="s-feld__schild">Beschreib es kurz</span>
<textarea id="text" rows="4" maxlength="2000"
placeholder="z. B. Auf der Aufgabenseite lässt sich der Haken nicht setzen – der Knopf reagiert nicht."></textarea>
</label>
<!-- ==== BIS ZU DREI BILDER (02.10.2026) ======================
Hier stand „EIN BILD, NICHT FÜNF. Wer drei Bildschirmfotos
anhängt, erklärt damit nichts besser." VanVan hat viermal
das Gegenteil gemeldet: „Hier im Supportbereich kann man
immer nur ein Bild hinzufügen bei einer Meldung. 2-3 wären
besser." Sie ist die, die meldet — ihre Zahl gilt.
Und sie hatte recht: Ein Fehler, der aus Vorher, Klick und
Nachher besteht, braucht drei Bilder. Mit einem davon
beginnt die Rückfrage, die der ganze Weg sparen soll.
`multiple` UND TROTZDEM NACHLEGBAR. Ihr zweiter Satz nennt
den Fall, den `multiple` allein nicht löst: „wenn man es
nacheinander versucht hinzuzufügen wird das Bild immer nur
ersetzt." Das Skript legt deshalb DAZU, statt zu ersetzen
— eine Mehrfachauswahl auf dem Handy wählt man selten in
einem Rutsch.
WIE VIELE ES SIND, STEHT NICHT HIER. Die Zahl kommt vom
Server (`bilder_max`); eine zweite im HTML wäre die, die
beim Ändern vergessen wird. -->
<div class="s-bild">
<input type="file" id="bild" accept="image/png,image/jpeg,image/webp,image/gif"
multiple hidden />
<!-- MEHRZAHL, SEIT ES MEHRERE SEIN DUERFEN (03.10.2026).
Hier stand „Bild anhängen" — Einzahl. Die Funktion kann
seit dem 02.10. drei, nur sagte es niemand: Wer nicht
zufällig ein zweites Mal tippt, schickt eines. Eine
Möglichkeit, von der man nichts weiß, gibt es nicht.
WIE VIELE, STEHT NEBENAN und kommt vom Server — eine
zweite Zahl hier wäre die, die beim Ändern vergessen
wird. -->
<button type="button" class="schritt" id="bild-waehlen">Bilder anhängen</button>
<span class="s-bild__name" id="bild-name"></span>
<button type="button" class="schritt" id="bild-weg" hidden>Alle weg</button>
</div>
<div class="s-vorschau" id="vorschau" hidden></div>
<p class="fehler" id="melden-fehler" role="alert" aria-live="polite"></p>
<div class="s-knopfreihe">
<button type="submit" class="knopf" id="senden">Abschicken</button>
<span class="s-hinweis" id="melden-hinweis"></span>
</div>
</form>
</section>
<!-- ---------- MEINE MELDUNGEN: für alle außer der Leitung --------- -->
<section class="s-meine" id="meine-block" hidden>
<h2 class="s-titel">Deine Meldungen <span class="s-zahl" id="meine-zahl">0</span></h2>
<div id="meine-liste" aria-live="polite"></div>
</section>
<!-- ---------- DER EINGANG: nur DogFather und die rechte Hand ------ -->
<section class="s-eingang" id="eingang-block" hidden>
<div class="s-eingang__kopf">
<h2 class="s-titel">Eingang</h2>
<!-- Die Zahlen stehen VOR der Liste, nicht darunter: Wer
hereinkommt, will zuerst wissen, ob etwas liegen geblieben
ist — und erst dann, was genau. -->
<div class="s-bilanz" id="bilanz"></div>
</div>
<div class="s-filter" id="filter" role="group" aria-label="Nach Stand filtern"></div>
<p class="fehler" id="eingang-fehler" role="alert" aria-live="polite"></p>
<div id="eingang-liste" aria-live="polite"></div>
</section>
</main>
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und
kopf.js liest daraus die Leitungsrollen. Ohne sie stuerzt jede
Seite mit der Meldung „Cannot read properties of undefined
(reading 'LEITUNG')" ab -- gemessen am 24.09.2026, als diese
Zeile beim Anlegen der Seite fehlte. Die Kopfleiste kam
trotzdem, deshalb sah man es nur in der Browserkonsole. -->
<script src="assets/js/bereiche.js?v=202610060113" defer></script>
<!-- wahl.js gehoert zu kopf.js: Der Sicht-Umschalter in der
Kopfleiste baut daraus seine Liste. pruef-css-klassen setzt das
seit dem 07.09.2026 durch -- damals fehlte es auf chat.html und
uebersicht.html, und heute hier. -->
<script src="assets/js/wahl.js?v=202610060113" defer></script>
<script src="assets/js/nachfrage.js?v=202610060113" defer></script>
<script src="assets/js/installieren.js?v=202610060113" defer></script>
<script src="assets/js/kopf.js?v=202610060113" defer></script>
<script src="assets/js/glocke.js?v=202610060113" defer></script>
<script src="assets/js/support.js?v=202610060113" defer></script>
</body>
</html>