ERST DIE METHODE, DANN DER FUND. An einem Tag habe ich in der Community elf Dinge gefunden, die dort nicht hingehoerten -- jedes einzelne, weil ich zufaellig hingesehen habe. Das ist keine Methode. Der Workspace ist fuer die Agentur gebaut worden, und die Community hat ihn geerbt; solche Reste findet man nicht durch Nachdenken, sondern indem man ALLE Seiten durchgeht, die ein Mitglied erreichen kann. server/pruef-community-sicht.mjs tut genau das. Sie leitet aus rechte.js ab, welche Seiten offenstehen (4) und welche nicht (27) -- von Hand aufgezaehlt waere das eine Liste, die bei der naechsten Seite niemand nachzieht --, oeffnet jede davon als Mitglied und fragt zweierlei: Fuehrt ein sichtbarer Weg auf eine verbotene Seite? Steht dort die Sprache eines Arbeitsplatzes? BEIM ERSTEN LAUF: 27 sichtbare Wege, davon ZEHN ins Leere -- und alle zehn derselbe Knopf. Der Chat steht oben rechts in der Kopfleiste, auf jeder einzelnen Seite, mit Zaehler. `chat.html` steht einem Mitglied aber nicht offen: Der Klick landet wieder auf der Startseite. Keine Meldung, kein Grund, nichts passiert -- an der Stelle, die man am ehesten drueckt. Der Knopf haengt jetzt an `darf_chat` aus /api/ich, und das kommt aus derselben Rechtetabelle wie die Schranke dahinter. Die Oberflaeche vergleicht keine Rollennamen -- das waere eine zweite Wahrheit, die bei der naechsten Rechteaenderung auseinanderlaeuft. Dieselbe Ueberlegung steht zwei Zeilen weiter oben schon einmal. UND DIE PRUEFUNG HAT GLEICH MEINEN EIGENEN FEHLER GEFUNDEN: Die erste Fassung stand in `aufbauChat`, wo es die Person gar nicht gibt -- ReferenceError auf allen zehn Seiten. Ohne den Skriptfehler-Abschnitt waere der Knopf verschwunden UND die Seite kaputt gewesen, und das haette wie ein Erfolg ausgesehen. Jetzt haengt es dort, wo die Person ankommt (`werZeigen`) -- ein vorhandener Knopf laesst sich immer entfernen, auf die Reihenfolge des Ladens zu bauen waere eine Annahme. GEGENPROBE: DogFather hat seinen Chat-Knopf weiterhin und 24 Wege auf andere Seiten. Ohne diesen Abschnitt saehe eine abgeschaffte Funktion genauso aus wie eine, die richtig entscheidet. 7 Pruefungen, 0 Fehler. Co-Authored-By: Claude Opus 5 <[email protected]>
120 lines
5.2 KiB
HTML
120 lines
5.2 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Talente · Spicy & 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=202609182158" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609182158" />
|
||
<!-- Wegen des Kastens „Anfragen“ ueber der Liste. Eine eigene Kopie
|
||
der Regel hier waere die zweite Stelle, an der dieselbe Sache
|
||
anders aussieht. -->
|
||
<link rel="stylesheet" href="assets/css/bewerbung.css?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609182158" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202609182158" />
|
||
</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">Team Dogi</a> · Talente</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">Entwicklung & Nachwuchs</p>
|
||
<h1 class="titel">Talente</h1>
|
||
<p class="unterzeile">
|
||
Zuschauer, die ins Team passen könnten. Ein Trichter, keine Liste –
|
||
jede Stufe hat genau einen nächsten Schritt.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- DIE ANFRAGEN GEHOEREN AN DEN ANFANG DIESES TRICHTERS.
|
||
|
||
Wer sich selbst meldet, ist ein Kandidat wie jeder andere -- nur
|
||
dass er die erste Frage ("besteht ueberhaupt Interesse?") schon
|
||
beantwortet hat. Deshalb steht der Weg dorthin auf DIESER Seite
|
||
und nicht als eigene Kachel daneben: Sonst waere aus einem Weg
|
||
zwei Seiten geworden, die man abwechselnd aufmacht.
|
||
|
||
Der Kasten steht ueber der Liste, weil eine unbeantwortete
|
||
Anfrage dringender ist als ein Kandidat, der seit Wochen
|
||
beobachtet wird. -->
|
||
<section id="anfragen-tor" class="bw-tor" hidden></section>
|
||
|
||
<!-- ==================================================================
|
||
HIER STEHEN NAMEN VON MENSCHEN, DIE NICHTS DAVON WISSEN.
|
||
|
||
Diese Seite gehört DogFather und der rechten Hand — sonst niemand,
|
||
keine Agentur, und ganz sicher nicht die Community. Durchgesetzt
|
||
wird das in der Rechtetafel UND in workspace-entwicklung.js; der
|
||
Satz hier ist nur die Erinnerung daran, warum.
|
||
|
||
Deshalb gibt es auch keine Rückmeldung an einen Kandidaten und
|
||
keinen heimlichen Test mit einem Zweitkonto. Wer beobachtet wird,
|
||
ohne es zu wissen, hat ein Recht darauf, dass daraus nichts
|
||
Öffentliches wird.
|
||
============================================================== -->
|
||
|
||
<!-- DER ZUGANGSCODE STEHT AUSSERHALB DER LISTE, und das ist kein
|
||
Schönheitsgrund. Die Liste wird nach jeder Änderung neu
|
||
gezeichnet – stünde der Kasten darin, wäre der Code in genau dem
|
||
Moment wieder weg, in dem er entsteht: wenn die Karte auf „Im
|
||
Team“ springt.
|
||
|
||
DERSELBEN KLASSEN WIE IN „PERSONEN & ZUGÄNGE“. Ein Geheimnis
|
||
sieht im ganzen Haus gleich aus – zwei Gestaltungen für dieselbe
|
||
Sache wären zwei Gelegenheiten, eine davon falsch zu machen. -->
|
||
<div class="code-kasten" id="code-kasten" hidden role="status" aria-live="polite">
|
||
<p class="code-kasten__schild">Zugangscode für <span id="code-name"></span></p>
|
||
<p class="code-kasten__code" id="code-wert"></p>
|
||
<p class="code-kasten__hinweis">
|
||
Dieser Code wird <strong>nur jetzt</strong> angezeigt und ist danach nicht mehr
|
||
abrufbar. Persönlich weitergeben und in Bitwarden ablegen.
|
||
</p>
|
||
<div class="t-text__knoepfe">
|
||
<button type="button" class="knopf knopf--klein" id="code-kopieren">Kopieren</button>
|
||
<button type="button" class="abmelden" id="code-schliessen">Verstanden, schließen</button>
|
||
</div>
|
||
</div>
|
||
|
||
<section id="trichter" class="t-trichter" aria-busy="true"></section>
|
||
|
||
<section id="liste" class="t-liste" aria-busy="true">
|
||
<p class="leise">wird geladen …</p>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<script src="assets/js/wahl.js?v=202609182158" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609182158" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609182158" defer></script>
|
||
<script src="assets/js/talente.js?v=202609182158" defer></script>
|
||
</body>
|
||
</html>
|