Anfuehrungszeichen: drei Loecher in meiner eigenen Wache

Die zweite Sitzung hat in den Praesentationen des Vaults 83 Stellen
gefunden — und damit auf Loecher in MEINER Wache gezeigt. Ich habe
sie nachgemessen, alle drei waren echt.

LOCH 1 — SIE SAH NUR `server/workspace-*.js`

Also ausgerechnet nicht `workspace.js`, die groesste Datei des
Hauses. Der weitere Filter fand dort sofort drei Stellen:

    workspace.js:3404  Kanal „Chat-Moderation"     (Protokoll)
    workspace.js:3422  „${titel}" -> ${haus}       (Protokoll)
    workspace.js:3304  „${… || "ohne Titel"}"      (siehe Loch 3)

Das ist heute der DRITTE Fall von „die Wache kennt nur die halbe
Menge" — nach pruef-struktur (sah nur die Pruefdateien, nicht die
Anwendung) und pruef-fingermass (sah keine variable Breite).

LOCH 2 — IHR AUSDRUCK GILT JE ZEILE

Ein `„`, das erst in der naechsten Zeile mit einem geraden `"`
schliesst, fiel durch. Gemessen: drei echte Faelle, zwei davon
sichtbarer Seitentext.

    workspace/leistung.html       „nicht / zugeordnet"
    workspace/leistung.html       „Backstage-Tabelle / einfuegen"
    workspace/assets/js/ampel.js  „noch ' + 'verbessern"

Beim letzten laeuft das Zitat ueber eine Zeichenketten-Verkettung.

Neue Regel ohne Fehlalarme: erst alle RICHTIG geschlossenen Paare
entfernen (auch mehrzeilig), dann die einzeilig falschen (die meldet
die alte Regel). Was danach noch ein `„` hat und binnen drei Zeilen
ein gerades `"`, ist ein Fund. Ausgenommen bleibt das Zeichen ALS
WERT — in `content: "„";` und in den Sprachtabellen ist das `„` der
Inhalt und das `"` die Begrenzung.

LOCH 3 — EINE AUSNAHME, DIE EINEN FUND VERSCHLUCKT HAT

Gefunden durch die ZAHL, nicht durch den Blick: Der weitere Filter
liess die Ausnahmen von 12 auf 13 steigen. Die dreizehnte war

    `… „${zeile[titelSpalte] || "ohne Titel"}"`

Der Ausdruck blieb am `"` von `"ohne Titel"` haengen; als Inhalt kam
`${zeile[titelSpalte] || ` heraus, das endet auf ein Leerzeichen,
und damit galt „der Satz geht in der naechsten Zeile weiter". Das
echte Schlusszeichen stand hinter dem `}` und war gerade.

Dass die Ausnahmen gezaehlt UND genannt werden, hat ihn gefunden.
Genau dafuer steht die Zeile dort.

Behoben an der Wurzel: Anfuehrungszeichen innerhalb einer Einsetzung
`${…}` werden vorher durch X ersetzt, bei gleicher Laenge und
gleichen Zeilenumbruechen. Das nimmt einer ganzen Sorte
Fehlklassifizierung die Grundlage — die Ausnahmen fielen danach von
13 auf 11.

UND EIN VIERTES, BEIM MESSEN AUFGEFALLEN

`„Van-Van”` in assets/js/data-modis.js schliesst mit U+201D, dem
ENGLISCHEN Zeichen. Zweimal, beide Male in einer DEUTSCHEN Zeile
(`de:` und `"de-CH":`) — nicht einmal eine Uebersetzung, in der es
richtig waere. Eigene Regel dafuer, die keine Ausnahme braucht: Wer
mit `„` oeffnet, schliesst deutsch; in fremdsprachigen Zeilen steht
gar kein `„` am Anfang.

DIE AUSNAHMEZAHL IST JETZT STRENG. Sie stand auf „hoechstens 12" —
damit waere der Anstieg auf 13 nicht aufgefallen. Jetzt genau 11,
wie bei den Grundlinien in pruef-fingermass.

GEPRUEFT: pruef-struktur 68 -> 75 Pruefungen, 0 Fehler. Dazu
leistung-optik 59/0, ampel 47/0, treff 85/0, modi-verborgen 87/0 —
die Seiten, deren Text ich angefasst habe. Steuerzeichen: 830
Dateien, keines. Beide Stempel gesetzt.

Sechs echte Stellen berichtigt, vier neue Gegenproben.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-01 19:28:38 +02:00
co-authored by Claude Opus 5
parent 2b3f140112
commit 1afb38258c
99 changed files with 1392 additions and 1210 deletions
+19 -19
View File
@@ -6,7 +6,7 @@
<meta name="robots" content="noindex, nofollow" />
<title>Verwaltung — DOGFATHER UNIVERSE</title>
<meta name="description" content="Interne Verwaltung — DogiCrew-Supporter, Prämien und Kollektionen. Nur mit Zugangscode." />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/verwaltung-32.png?v=202610010152" />
<link rel="icon" type="image/png" href="/assets/img/app-symbole/verwaltung-32.png?v=202610011927" />
<!-- Eigene, separat installierbare App (20.08.2026, Nutzer-Wunsch: "die
Verwaltungsseite auch herunterladen können, getrennt von der Website
installiert") — eigenes Manifest mit eigener "id"/eigenem "scope"
@@ -16,13 +16,13 @@
und deckt damit auch diese Seite automatisch mit ab — kein zweiter
Service Worker nötig, nur ein zweites Manifest. -->
<link rel="manifest" href="/manifest-verwaltung.json" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/verwaltung-180.png?v=202610010152" />
<link rel="apple-touch-icon" href="/assets/img/app-symbole/verwaltung-180.png?v=202610011927" />
<meta name="apple-mobile-web-app-title" content="DogiCrew-Verwaltung" />
<meta name="theme-color" content="#8d4125" />
<link rel="stylesheet" href="assets/css/main.css?v=202610010152" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=202610010152" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=202610010152" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=202610010152" />
<link rel="stylesheet" href="assets/css/main.css?v=202610011927" />
<link rel="stylesheet" href="assets/css/theme-dogfather.css?v=202610011927" />
<link rel="stylesheet" href="assets/css/theme-hasidog.css?v=202610011927" />
<link rel="stylesheet" href="assets/css/theme-spicymedia.css?v=202610011927" />
<style>
/* =====================================================================
verwaltung.html — Dogis privater Command-Center-Bereich.
@@ -173,7 +173,7 @@
.vw-logo-emblem {
position: absolute; top: 50%; left: 50%; width: min(1200px, 150vw); height: min(1200px, 150vw);
transform: translate(-50%, -50%);
background-image: url('assets/img/logo-dogfather-transparent.png?v=202610010152');
background-image: url('assets/img/logo-dogfather-transparent.png?v=202610011927');
background-size: contain; background-repeat: no-repeat; background-position: center;
opacity: .05;
filter: drop-shadow(0 0 120px rgba(56,189,248,.55)) drop-shadow(0 0 60px rgba(139,92,246,.25));
@@ -187,7 +187,7 @@
}
.vw-logo-tile {
position: absolute; inset: -25%;
background-image: url('assets/img/logo-dogfather-transparent.png?v=202610010152');
background-image: url('assets/img/logo-dogfather-transparent.png?v=202610011927');
background-size: 150px 150px; background-repeat: repeat;
opacity: .02; transform: rotate(-14deg);
}
@@ -295,7 +295,7 @@
.vw-gate-schloss {
width: 72px; height: 72px; margin: 0 auto 1rem; border-radius: 50%;
background: radial-gradient(circle at 32% 28%, rgba(125,211,252,.35), rgba(56,189,248,.08) 70%),
url('assets/img/gate-siegel-hasidog.jpg?v=202610010152') center / cover no-repeat;
url('assets/img/gate-siegel-hasidog.jpg?v=202610011927') center / cover no-repeat;
border: 2px solid rgba(56,189,248,.6);
box-shadow: 0 0 26px rgba(56,189,248,.4), inset 0 0 12px rgba(255,255,255,.08);
animation: vw-schloss-puls 2.6s ease-in-out infinite;
@@ -325,8 +325,8 @@
box-shadow: 0 0 20px rgba(56,189,248,.4), inset 0 0 10px rgba(255,255,255,.08);
animation: vw-schloss-puls 2.6s ease-in-out infinite;
}
.vw-gate-card-icon--dogi { background-image: url('assets/img/vw-gate-dogi.jpg?v=202610010152'); }
.vw-gate-card-icon--vanvan { background-image: url('assets/img/vw-gate-vanvan.jpg?v=202610010152'); }
.vw-gate-card-icon--dogi { background-image: url('assets/img/vw-gate-dogi.jpg?v=202610011927'); }
.vw-gate-card-icon--vanvan { background-image: url('assets/img/vw-gate-vanvan.jpg?v=202610011927'); }
@keyframes vw-schloss-puls-rose {
0%, 100% { box-shadow: 0 0 20px rgba(255,143,198,.35), inset 0 0 10px rgba(255,255,255,.06); }
50% { box-shadow: 0 0 36px rgba(255,143,198,.65), inset 0 0 14px rgba(255,255,255,.12); }
@@ -380,7 +380,7 @@
width: 116px; height: 116px; margin: 0 auto 1.2rem; border-radius: 50%;
background:
radial-gradient(circle at 32% 26%, rgba(125,211,252,.25), rgba(56,189,248,.08) 72%),
url('assets/img/hasidog-kopf-siegel.jpg?v=202610010152') center / cover no-repeat;
url('assets/img/hasidog-kopf-siegel.jpg?v=202610011927') center / cover no-repeat;
border: 2.5px solid rgba(56,189,248,.6);
box-shadow: 0 0 34px rgba(56,189,248,.4), inset 0 0 18px rgba(0,0,0,.35), inset 0 0 0 3px rgba(10,12,16,.5);
animation: vw-schloss-puls 3.4s ease-in-out infinite;
@@ -1285,17 +1285,17 @@
<!-- 21.08.2026: für den "Bestehende Mitglieder importieren"-Knopf in der
Team-Verwaltung -- liest die von Hand gepflegten Profile aus diesen
Dateien aus und bietet an, sie 1:1 in die Datenbank zu übernehmen. -->
<script src="assets/js/data-modis.js?v=202610010152"></script>
<script src="assets/js/data-scouts.js?v=202610010152"></script>
<script src="assets/js/data-creator.js?v=202610010152"></script>
<script src="assets/js/data-manager.js?v=202610010152"></script>
<script src="assets/js/data-stimmen-avatare.js?v=202610010152"></script>
<script src="assets/js/main.js?v=202610010152"></script>
<script src="assets/js/data-modis.js?v=202610011927"></script>
<script src="assets/js/data-scouts.js?v=202610011927"></script>
<script src="assets/js/data-creator.js?v=202610011927"></script>
<script src="assets/js/data-manager.js?v=202610011927"></script>
<script src="assets/js/data-stimmen-avatare.js?v=202610011927"></script>
<script src="assets/js/main.js?v=202610011927"></script>
<!-- Versionsnummer bewusst hochgesetzt (27.08.2026): Caddy liefert Assets mit
max-age=14400, ein Browser hätte die alte Anmelde-Logik sonst bis zu vier
Stunden weiterbenutzt und Dogi wäre trotz Umstellung weiter ohne Code
drin gewesen. Neue Adresse = sofort neue Datei. -->
<script src="assets/js/admin-auth.js?v=202610010152"></script>
<script src="assets/js/admin-auth.js?v=202610011927"></script>
<script>
(function () {
const API_BASE_URL = "https://postfach.dogfather-universe.com";