Files
dogfather-universe/workspace/aufgaben.html
T
DogFatherGitandClaude Opus 5 9e523d3ea2 Manager sehen nur noch ihre zugeteilten Scouts -- und deren Creator
Wunsch vom 01.09.2026: "er soll nur die Scouts sehen, die ihm zugeteilt
sind." Dazu entschieden: Ein Manager sieht dann AUCH die Creator dieser
Scouts, und zuteilen darf NUR DogFather.

WAS VORHER WAR. Ein Manager sah die gesamte Scout-Pipeline -- alle Leads
aller Scouts, dazu dieselben in der Suche und in "Was ist dran". Das war
die letzte Stelle, an der "nur DogFather sieht alles" noch nicht galt.

EINE EIGENE TABELLE, KEIN ZWEITER EINTRAG IN `betreuung`.
Dort heisst die Spalte creator_id, und der ganze uebrige Code liest sie
als "das ist ein Creator". Ein Scout darin waere technisch moeglich und
fachlich eine Luege gewesen: betreuteIds() gaebe Scout-Nummern zurueck,
die anderswo als Creator behandelt wuerden. Solche Abkuerzungen raechen
sich genau dann, wenn niemand mehr weiss, dass sie getroffen wurden.

DIE KETTE steht an EINER Stelle (betreuteIds in workspace.js):
Manager -> seine Scouts -> deren Creator. Ohne sie muesste jeder Creator
einem Manager einzeln zugewiesen werden, und beim ersten vergessenen
faende er ein Loch in seiner Uebersicht, ohne zu merken, dass es eines
ist. Dieselbe Regel gilt fuer Leads in Pipeline, Suche und Hinweisen --
aus einer Quelle (pipelineIds), nicht dreimal abgeschrieben.

ZUTEILEN DARF NUR DOGFATHER, und das ist keine Foermlichkeit: Diese
Zuteilung ERWEITERT die Sicht eines Managers. Duerfte er sie selbst
setzen, koennte er sich seine eigene Sichtbarkeit vergeben -- eine
Grenze, die der Begrenzte selbst verschieben kann, ist keine. Deshalb
istDogFather und ausdruecklich NICHT istLeitung.

In der Personenliste steht bei jedem Scout "Gehoert zu", sichtbar nur
fuer DogFather. Der Leerwert heisst "— direkt bei DogFather —" und nicht
"— niemand —": Ein Scout ohne Manager ist nicht unbetreut, er haengt an
DogFather. Das ist ein Zustand, kein Mangel.

NEBENBEI KORRIGIERT: In der Zustaendigkeits-Route stand als Kommentar
noch "ein Eintrag auf DogFather oder Manager aendert an den Rechten
nichts, die Leitung sieht ohnehin jeden Creator". Das gilt seit heute
nicht mehr -- fuer einen Manager entscheidet dieser Eintrag jetzt sehr
wohl ueber die Sichtbarkeit. Ein falscher Kommentar ist schlimmer als
keiner: Er wird geglaubt.

DIE PRUEFUNG STELLT DEN MISSBRAUCH AN DEN ANFANG. Diese Aenderung
erweitert Sichtbarkeit -- alles andere heute hat sie eingeschraenkt. Ein
Fehler dort zeigt jemandem zu wenig und faellt auf; ein Fehler hier
zeigt zu viel und faellt niemandem auf. Geprueft wird deshalb: Manager
und Scout duerfen nicht zuteilen (404, und es wird auch wirklich nichts
geschrieben), Scout an Scout und Scout an DogFather werden abgewiesen,
ein Creator laesst sich nicht zuteilen. Danach die Kette in beide
Richtungen, das Zuruecknehmen, und dass ein Scout zu genau einem Manager
gehoert.

Ein lehrreicher Fehlschlag in der Pruefung selbst: Sie meldete, die
Auswahl fehle in der Oberflaeche. Sie fehlte nicht -- die Personenliste
ist nach Rollen ZUGEKLAPPT, und die Pruefung hatte nicht aufgeklappt.
Sah aus wie ein Produktfehler, war einer der Pruefung. Sie klappt jetzt
auf und stellt vorher fest, dass wirklich alle sieben Zeilen dastehen.

Gesamtlauf: 30 von 30 Dateien, 1210 von 1210 Einzelpunkten.

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

161 lines
6.6 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>Aufgaben · Creator Workspace</title>
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609012233" />
<link rel="stylesheet" href="assets/css/start.css?v=202609012233" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609012233" />
</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> · Aufgaben</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">Aufgaben</p>
<h1 class="titel">Offen. In Arbeit. Review. Erledigt.</h1>
</div>
<button type="button" class="knopf knopf--klein" id="neu-oeffnen">Neue Aufgabe</button>
</section>
<!-- Die Leiste über dem Brett (01.09.2026). Drei Zeilen, in dieser
Reihenfolge – die Reihenfolge ist die Aussage:
1. was brennt (ein Satz, sofort lesbar)
2. Ausschnitte (Nur meine · Heute · Überfällig)
3. die eigenen Creator (nur für Betreuer, siehe aufgaben.js)
Alle drei bleiben verborgen, bis feststeht, wer angemeldet ist –
eine Filterleiste ohne Zahlen ist ein Versprechen ohne Deckung. -->
<p class="lage" id="lage" role="status" hidden></p>
<div class="ausschnitte" id="ausschnitte" role="group"
aria-label="Ausschnitt wählen" hidden></div>
<div class="creator-reihe" id="creator-reihe" role="group"
aria-label="Nach Creator einschränken" hidden></div>
<!-- Formular zum Anlegen. Standardmäßig zu, damit das Brett im Vordergrund
steht und die Seite nicht mit einem Formular begrüßt. -->
<form class="neu" id="neu" hidden>
<div class="neu__zeile">
<label class="feld-schild" for="f-titel">Titel</label>
<input id="f-titel" name="titel" maxlength="160" placeholder="Was ist zu tun?" required />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="f-text">Beschreibung <span class="leise">(optional)</span></label>
<textarea id="f-text" name="beschreibung" rows="3" maxlength="4000"
placeholder="Worum geht es genau?"></textarea>
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="f-prio">Priorität</label>
<select id="f-prio" name="prioritaet">
<option value="hoch">hoch</option>
<option value="mittel" selected>mittel</option>
<option value="niedrig">niedrig</option>
</select>
</div>
<div>
<label class="feld-schild" for="f-frist">Frist <span class="leise">(optional)</span></label>
<input id="f-frist" name="frist" type="date" />
</div>
<div id="feld-creator" hidden>
<label class="feld-schild" for="f-creator">Bereich von</label>
<select id="f-creator" name="creator_id"><option value="">—</option></select>
</div>
<div id="feld-verant" hidden>
<label class="feld-schild" for="f-verant">Verantwortlich</label>
<select id="f-verant" name="verantwortlich_id"><option value="">—</option></select>
</div>
</div>
<p class="fehler" id="neu-fehler" role="alert" aria-live="polite"></p>
<div class="neu__knoepfe">
<button type="submit" class="knopf knopf--klein" id="neu-speichern">Anlegen</button>
<button type="button" class="abmelden" id="neu-abbrechen">Abbrechen</button>
</div>
</form>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<div class="brett" id="brett" aria-busy="true">
<p class="leise" id="laedt">Aufgaben werden geladen …</p>
</div>
</main>
<!-- Bearbeiten. Als natives <dialog>: bringt Fokusfang, Schließen mit Esc
und die Abdunklung des Hintergrunds ohne eigenen Code mit. -->
<dialog class="dialog" id="bearbeiten-dialog">
<form method="dialog" id="bearbeiten" class="neu neu--blank">
<h2 class="dialog__titel">Aufgabe bearbeiten</h2>
<div class="neu__zeile">
<label class="feld-schild" for="b-titel">Titel</label>
<input id="b-titel" maxlength="160" required />
</div>
<div class="neu__zeile">
<label class="feld-schild" for="b-text">Beschreibung</label>
<textarea id="b-text" rows="3" maxlength="4000"></textarea>
</div>
<div class="neu__raster">
<div>
<label class="feld-schild" for="b-prio">Priorität</label>
<select id="b-prio">
<option value="hoch">hoch</option>
<option value="mittel">mittel</option>
<option value="niedrig">niedrig</option>
</select>
</div>
<div>
<label class="feld-schild" for="b-frist">Frist</label>
<input id="b-frist" type="date" />
</div>
<div id="b-feld-creator" hidden>
<label class="feld-schild" for="b-creator">Bereich von</label>
<select id="b-creator"><option value="">—</option></select>
</div>
<div id="b-feld-verant" hidden>
<label class="feld-schild" for="b-verant">Verantwortlich</label>
<select id="b-verant"><option value="">—</option></select>
</div>
</div>
<p class="fehler" id="b-fehler" role="alert" aria-live="polite"></p>
<div class="dialog__knoepfe">
<button type="button" class="knopf knopf--klein" id="b-speichern">Speichern</button>
<button type="button" class="abmelden" id="b-abbrechen">Abbrechen</button>
<button type="button" class="abmelden abmelden--warnung" id="b-loeschen" hidden>Löschen</button>
</div>
</form>
</dialog>
<script src="assets/js/wahl.js?v=202609012233" defer></script>
<script src="assets/js/bereiche.js?v=202609012233" defer></script>
<script src="assets/js/kopf.js?v=202609012233" defer></script>
<script src="assets/js/aufgaben.js?v=202609012233" defer></script>
</body>
</html>