Files
dogfather-universe/workspace/rechte.html
T
DogFatherGitandClaude Opus 5 b31bd9b515 Zwei bis drei Bilder je Supportmeldung -- und zwei Funde unterwegs
VanVan im Support, Meldung #11, VIERMAL gemeldet: „Hier im
Supportbereich kann man immer nur ein Bild hinzufuegen bei einer
Meldung. 2-3 waeren besser." Und in der zweiten Runde der Satz, auf
den es ankommt: „wenn man es nacheinander versucht hinzuzufuegen wird
das Bild immer nur ersetzt."

EINE TABELLE STATT NEUER SPALTEN

`support_bilder` haelt ab jetzt JEDES Supportbild -- das der Meldung
(`runde_nr` NULL) und das einer Antwort (`runde_nr` = Runde). Die
Alternative waere `bild2_datei`, `bild3_datei` gewesen, und beim
vierten Bild wieder. Eine Zeile je Bild kennt keine Obergrenze im
Schema; die Grenze steht an EINER Stelle im Code (`BILDER_MAX = 3`)
und kommt von dort in die Oberflaeche, statt dort ein zweites Mal
zu stehen.

DIE ACHT VORHANDENEN BILDER WANDERN MIT. Ohne diesen Schritt haette
die neue Tabelle ab heute recht und die alten Bilder waeren
unsichtbar -- ohne Fehler, ohne rote Zeile, nur acht leere Karten.
Der Umzug steht NACH der Spaltennachruestung: Er liest
`urteil_bild_datei`, und die gibt es in einer bestehenden Datenbank
erst, nachdem sie ergaenzt wurde. Stuende er davor, scheiterte er
genau dort, wo es darauf ankommt -- live, waehrend lokal alles gruen
bliebe, weil jede Pruefung ihre Datenbank frisch anlegt.

DREI BILDER IN EINER ANFRAGE

`x-bilder: 20481,15320` sagt, wo zu schneiden ist, der Rumpf ist die
Aneinanderreihung. `multipart/form-data` haette einen Zerleger
gebraucht, den dieses Haus nicht hat; drei Anfragen nacheinander
haetten den Zustand „Meldung da, Bild zwei laedt noch" erzeugt --
genau den, gegen den die Kommentare an dieser Route schon vorher
argumentieren. Die Summe muss auf das Byte stimmen, und jedes Stueck
wird einzeln an seinen ersten Bytes erkannt: Wer falsch schneidet,
bekommt eine Absage, kein verfaelschtes Bild. Ohne den Kopf gilt der
ganze Rumpf als ein Bild -- derselbe Satz mit einer Laenge, damit
eine Seite aus dem Zwischenspeicher weiterlaeuft.

EINE ROUTE STATT DREI. `/:id/bild` und `/:id/runde/:nr/bild` sind
weg; es gibt `/:id/bild/:bid`. Wohin ein Bild gehoert, steht in
seiner Zeile -- der Weg muss es nicht wiederholen. Die
Meldungsnummer bleibt trotzdem im Pfad: Sie ist die
Sichtbarkeitsfrage, und beides muss zusammenpassen (gemessen).

ZWEI FUNDE, DIE DIE PRUEFUNG GEMACHT HAT UND NICHT ICH

 1. UEBER DIE SEITE KAM GAR KEIN BILD MEHR AN. Beim Melden stand
    kein `Content-Type`. Das ging gut, solange der Rumpf eine
    einzelne Datei war -- ein `File` bringt seinen Typ mit. Ein
    `Blob` aus mehreren hat keinen, `fetch` schickt die Zeile dann
    gar nicht, `express.raw` fuehlt sich nicht zustaendig, und der
    Server bekam einen leeren Rumpf. Die Meldung waere durchgegangen,
    der Text angekommen, die Bilder weg -- ohne Fehlermeldung. Alle
    Pruefungen am Server waren dabei gruen; gefunden hat es erst der
    echte Browser.

 2. DAS KREUZ DES DRITTEN BILDES LAG AUF DEM ZWEITEN. Der
    Entfernen-Knopf ist 44 px breit und absolut gesetzt, der Kasten
    aber nur so breit wie sein Bild. Bei einem schmalen Bild ragt er
    darueber hinaus -- wer „das zweite weg" antippt, loescht das
    dritte. `min-width`/`min-height` loesen das an der Ursache: Ein
    Kasten ist nie schmaler als der Knopf in ihm.

WAS ICH FALSCH ANGENOMMEN HATTE: Ich hatte eingebaut, dass ein
Nachtrag in derselben Runde die Bilder ersetzt. Die Pruefung dazu
wurde rot -- zu Recht: Eine zweite Antwort in derselben Runde kann
es nicht geben, die erste verlaesst den Stand „wartet". Der Code
waere nie gelaufen und damit nie pruefbar gewesen. Er ist weg; an
seiner Stelle steht der Beweis, dass er nicht fehlt.

DREI WEITERE ROTE ZEILEN, DIE NICHT ZU DIESEM UMBAU GEHOERTEN

 * `manager-ziele.js` hatte einen ZWEITEN Notnagel
   (`frageNach ? … : confirm(…)`). `nachfrage.js` hat denselben
   laengst, und zwar mit dem vollstaendigen Text; der hiesige war
   der kuerzere und haette gewonnen. Zwei Antworten auf dieselbe
   Frage -- gemeldet von `pruef-nachfrage`.
 * Zwei Mittelpunkte in `reaktion.css` standen woertlich im
   `content`. Sie liegen im Latin-1-Block, wo `pruef-zeichen` die
   Truemmer einer verunglueckten Kodierung sucht. Jetzt als Escape
   -- im Browser nachgemessen, es steht Zeichen fuer Zeichen
   dasselbe da.
 * Das Aufraeumen nach 90 Tagen loeschte nur das EINE Bild der
   Meldung; die Bilder aus den Antwortrunden blieben ohne Zeile auf
   der Platte liegen. Die Liste kommt jetzt aus einer Abfrage statt
   aus einer Spalte und kann deshalb nicht wieder unvollstaendig
   sein.

GEPRUEFT

  pruef-support            78 -> 104 ok
    darunter: der Umzug der alten Bilder auf einer eigenen
    Wegwerf-Datenbank -- zweimal und dreimal gestartet, nichts
    verdoppelt, Datum von damals erhalten
  pruef-support-bilder     NEU, 36 ok (echter Browser)
    dreimal nacheinander waehlen ergibt drei, das vierte wird mit
    einem Satz abgelehnt, dasselbe zaehlt nicht doppelt, einzeln
    entfernen laesst die anderen stehen, alle drei laden wirklich
    (naturalWidth), Kreuze 44x44 und keines verdeckt (mit Gegenprobe
    per Deckel), nichts ragt auf 390 px heraus
  pruef-nachfrage          69 -> 74 ok
  pruef-struktur          102 ok, 413 Routen (vorher 414: zwei weg,
                          eine neu)
  pruef-zeichen             7 ok (vorher 1 Fehler)
  pruef-aufbewahrung       45 ok
  pruef-manager-ziele     216 ok
  pruef-ports              10 ok · pruef-portnummern 41 ok
    (die neue Pruefdatei verschiebt die abgeleiteten Nummern)

NUR DAS AGENTURHAUS IST BETROFFEN. Die Supportseite liegt unter
`/workspace`; am Crew-Haus aendert sich keine Zeile.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-10-02 23:38:03 +02:00

148 lines
6.1 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>Wer sieht was · Creator Workspace</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=202610022336" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610022336" />
<link rel="stylesheet" href="assets/css/gate.css?v=202610022336" />
<link rel="stylesheet" href="assets/css/start.css?v=202610022336" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202610022336" />
<link rel="stylesheet" href="assets/css/treff.css?v=202610022336" />
<link rel="stylesheet" href="assets/css/module.css?v=202610022336" />
<link rel="stylesheet" href="assets/css/haus.css?v=202610022336" />
</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> · Wer sieht was</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">Rechte · nur für dich</p>
<h1 class="titel">Wer sieht was</h1>
<p class="unterzeile">
Nicht aufgeschrieben, sondern ausgerechnet – aus derselben Tafel,
aus der die Schranke ihre Entscheidung holt. Und umstellbar.
</p>
</div>
</section>
<p class="fehler" id="fehler" role="alert" aria-live="polite" hidden></p>
<!-- Die Leiste sagt, ob etwas von Hand gesetzt ist, und ist der Weg
zurück. Sie steht OBEN und nicht unter der Tabelle: Wer etwas
verstellt hat und es zurückdrehen will, sucht nicht erst
zweihundert Zeilen lang. -->
<div class="rechte-leiste" id="leiste" hidden></div>
<!-- ==================================================================
WARUM DIESE SEITE ÜBERHAUPT EXISTIERT
Filipe: „egal welche Rolle oder Person hinzugefügt wird, soll
immer nur das sehen, was ich erlaube."
Dazu gehört, dass er es NACHSEHEN kann. Eine Regel, die man nur
glauben kann, ist eine Zusage; eine, die man ansehen kann, ist
eine Auskunft.
Und sie ist eine Gegenprobe: Wenn hier bei einer Rolle plötzlich
zwanzig Punkte stehen, wo gestern drei waren, sieht man das in
einer Sekunde. In 74 Rollenabfragen über 20 Module sieht man es
nie.
============================================================== -->
<section class="treff-abschnitt">
<h2 class="treff-abschnitt__titel">Wie viele Seiten je Rolle</h2>
<div class="treff-abschnitt__inhalt">
<p>
Das ist die Zahl, um die es geht. Eine neue Rolle startet bei
<strong>null</strong> – sie bekommt nichts, bis es jemand einträgt.
</p>
</div>
<ul class="rechte-zahlen" id="zahlen">
<li class="leise">wird geladen …</li>
</ul>
</section>
<section class="treff-abschnitt">
<h2 class="treff-abschnitt__titel">Die ganze Tafel</h2>
<div class="treff-abschnitt__inhalt">
<p>
Ein Punkt heißt: diese Rolle darf diese Seite öffnen. Leer heißt
nein – und zwar auch dann, wenn niemand je darüber nachgedacht hat.
Das ist der Unterschied zu vorher.
</p>
<p>
<strong>Ein Klick stellt um</strong>, und er wird sofort gespeichert –
kein Knopf am Ende, an dem eine halbe Änderung verlorengeht. Ein
heller Rahmen heißt: <em>dieses Feld ist von Hand gesetzt</em> und
weicht vom Grundstand im Code ab.
</p>
<p class="leise">
Drei Felder sind fest: Du kannst dir selbst die Rechte-, die Personen-
und die Startseite nicht wegnehmen – sonst käme niemand mehr an die
Rechte, an die Zugänge oder auf die Startseite.
</p>
</div>
<div class="rechte-tafel" id="tafel" aria-busy="true">
<p class="leise">wird geladen …</p>
</div>
</section>
<section class="treff-abschnitt">
<h2 class="treff-abschnitt__titel">Ohne Anmeldung</h2>
<div class="treff-abschnitt__inhalt">
<p>
Diese Seiten sind offen – man kann sich schlecht anmelden, wenn die
Anmeldeseite eine Anmeldung verlangt. Jede andere Seite ist zu.
</p>
<ul class="regel-liste" id="offen"><li class="leise">wird geladen …</li></ul>
</div>
</section>
</main>
<!-- WER kopf.js LAEDT, MUSS AUCH wahl.js LADEN (Regel seit 07.09.2026).
Der Umschalter "Meine Sicht" in der Kopfleiste ist ein selbst
gebautes Bedienelement; dahinter liegt ein unsichtbares Systemfeld
fuer Vorleseprogramme. Ohne wahl.js faellt kopf.js auf dieses Feld
zurueck -- ein grauer Kasten von 92 x 19 Pixeln mit weisser
Schrift, mitten in einer dunklen Leiste.
Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen
Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen,
die seit dem 07.09. jede Seite danach absucht. -->
<script src="assets/js/meldung.js?v=202610022336" defer></script>
<script src="assets/js/nachfrage.js?v=202610022336" defer></script>
<script src="assets/js/wahl.js?v=202610022336" defer></script>
<script src="assets/js/bereiche.js?v=202610022336" defer></script>
<script src="assets/js/installieren.js?v=202610022336" defer></script>
<script src="assets/js/kopf.js?v=202610022336" defer></script>
<script src="assets/js/glocke.js?v=202610022336" defer></script>
<script src="assets/js/holen.js?v=202610022336" defer></script>
<script src="assets/js/rechte.js?v=202610022336" defer></script>
</body>
</html>