Files
dogfather-universe/workspace/calls.html
T
DogFatherGitandClaude Opus 5 ede34fe386 Der Rollenname stand in zwei Dateien, die jeder bekommt
SELBST EINGEBAUT, EINE STUNDE VORHER. Beim Bau der Kategorien habe ich
SECHS Vergleiche und VIER Kommentare mit dem Rollennamen nach
assets/js/aufgaben.js und assets/js/start.js geschrieben -- waehrend ich
an anderer Stelle penibel darauf achtete, ihn herauszuhalten.

Alles unter workspace/ geht an JEDEN, der die Seite oeffnet. Ein Blick in
den Quelltext, und der ganze verborgene Zugang waere gefunden gewesen:
nicht wer ein Modi ist, aber dass es die Rolle ueberhaupt gibt -- und
genau das war Filipes Bedingung ("damit die von der workspace auch nicht
mal sehen dass die modis von mir einen eigenen zugang haben").

Gefunden habe ich es durch Nachsehen, nicht durch Nachdenken. Nachgedacht
hatte ich vorher schon, und zwar richtig -- beim Anzeigenamen und bei der
Rollenauswahl habe ich es sauber ueber den Server geloest. Eine Stunde
spaeter habe ich dieselbe Regel dreimal gebrochen, ohne es zu merken.

WAS AN DIE STELLE TRITT, dreimal derselbe Gedanke:

  * Das Vorlagenbrett: /workspace/api/vorlagen liefert den Katalog jetzt
    schlicht nicht an die Betroffenen. `if (!vorlagen) return` laesst das
    Brett dann verborgen -- dieselbe Wirkung, ohne eine Zeile, die
    verraet, fuer wen sie gilt.
  * Das Kategorie-Feld: statt `ich.rolle === '...'` kommt vom Server
    `kategorie_fuer` -- NUMMERN statt eines Rollennamens. Aus Nummern
    laesst sich nichts schliessen; wer keine bekommt, sieht eine leere
    Liste, und eine leere Liste sagt nichts. `null` heisst "gilt immer"
    und muss `null` bleiben: Ein `|| []` daraus zu machen waere der
    stille Fehler, aus "gilt immer" wuerde "gilt nie".
  * Die Kommentare sagen jetzt, WAS gilt, ohne zu sagen, FUER WEN.

UND EINE SPERRE DAGEGEN: pruef-modi-wortleck durchsucht alle 73
ausgelieferten Dateien nach dem Rollennamen. Die Regel ist damit kein
Vorsatz mehr, sondern ein Werkzeug -- wer ihn dort hineinschreibt,
bekommt einen roten Lauf statt eines erhobenen Zeigefingers im Kommentar.
Mit Gegenprobe in beide Richtungen: Eine eingebaute Fundstelle MUSS
erkannt werden, und "modifiziert", "Modul", "Modus" duerfen NICHT
anschlagen -- eine Pruefung, die staendig Fehlalarm gibt, wird
abgeschaltet und faengt dann auch den echten Fall nicht mehr.

Die Dateizahl steht in der Bedingung, nicht nur im Meldetext: Faende die
Suche keine einzige Datei, waere sonst alles gruen, ohne dass etwas
angesehen wurde.

AUSSERDEM BELEGT statt behauptet: Dass das Kategorie-Feld bei DogFather
nur erscheint, wenn er wirklich einen Modi eintraegt, steht jetzt in der
Pruefung -- erst ein Creator (Feld bleibt weg), dann ein Modi (Feld
kommt). Ohne den zweiten Schritt waere "bleibt weg" auch dann gruen,
wenn es NIE kaeme.

GEPRUEFT: pruef-modi-wortleck (4, neu), pruef-modi-kategorien (25),
pruef-modi-verborgen (57), pruef-vorlagen, pruef-aufgabenbrett.

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

93 lines
4.2 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>Calls &amp; Protokolle · 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=202609100105" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609100105" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/start.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/calls.css?v=202609100105" />
<link rel="stylesheet" href="assets/css/module.css?v=202609100105" />
</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> · Calls</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">Gespräche</p>
<h1 class="titel">Calls &amp; Protokolle</h1>
<p class="unterzeile">
Jeder Call endet mit klaren To-dos – die landen direkt im Aufgabenbrett,
nicht in einem Dokument, das niemand mehr öffnet.
</p>
</div>
<a class="knopf knopf--klein" href="kalender.html">Call planen</a>
</section>
<!-- Wo die Calls stattfinden. Einmal festgelegt, steht der Knopf
„Call beitreten" danach an JEDEM Gespräch – niemand muss mehr bei
jedem Termin einen Link eintippen, und die Frage „wo führe ich den
Call?" ist beantwortet, bevor sie jemand stellt. -->
<section class="call-raum" id="call-raum" hidden>
<p class="call-raum__zeile">
<span class="call-raum__schild">Call-Raum</span>
<a class="call-raum__link" id="call-raum-link" target="_blank" rel="noopener noreferrer" hidden></a>
<span class="call-raum__leer" id="call-raum-leer" hidden>noch nicht festgelegt</span>
</p>
<button type="button" class="knopf-still" id="call-raum-aendern" hidden>Ändern</button>
<form class="call-raum__form" id="call-raum-form" hidden>
<label class="feld-schild" for="call-raum-feld">Link zum Sprachkanal (Discord)</label>
<input id="call-raum-feld" type="url" maxlength="400"
placeholder="https://discord.com/channels/…" />
<button type="submit" class="knopf knopf--klein">Speichern</button>
<button type="button" class="abmelden" id="call-raum-abbrechen">Abbrechen</button>
</form>
</section>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<div id="listen" aria-busy="true"><p class="leise">Gespräche werden geladen …</p></div>
</main>
<script src="assets/js/ki.js?v=202609100105" defer></script>
<script src="assets/js/wahl.js?v=202609100105" defer></script>
<script src="assets/js/bereiche.js?v=202609100105" defer></script>
<script src="assets/js/kopf.js?v=202609100105" defer></script>
<script src="assets/js/glocke.js?v=202609100105" defer></script>
<script src="assets/js/calls.js?v=202609100105" defer></script>
</body>
</html>