Der zweite Weg ist weg -- nicht nur sein Knopf
VanVan im Support, Meldung #8: „Wenn man auf ich fange an drueckt steht dort in Bearbeitung und wenn man auf fertig drueckt dann wird es zu erledigt. DIE AUFGABE BLEIBT ABER IM STATUS OFFEN STEHEN." GESTERN HABE ICH DIE HALBE ARBEIT GEMACHT und daneben eine Ausrede geschrieben. Die zwei Knoepfe kamen weg, und in den Kommentar kam: „Der Weg `/mein-stand` bleibt bestehen -- er ist die Schranke, falls ihn jemand direkt anspricht." Eine Route ist keine Schranke gegen sich selbst. Sie setzte weiterhin NUR `aufgaben_zuteilung.zustand` und liess `aufgaben.status` stehen -- also genau den Widerspruch, den VanVan beschrieben hat. Ich hatte ihn unsichtbar gemacht, nicht abgeschafft: kein Knopf mehr, das Verhalten unveraendert im System. GEFUNDEN BEIM NACHMESSEN AM LAUFENDEN SERVER, nicht beim Schreiben. Filipe hat auf den Screenshot gezeigt und gesagt, es sei noch nicht in Ordnung. Statt meine Pruefungen zu zitieren habe ich die Route gelesen -- und dort stand es. NACHGEMESSEN, BEVOR SIE WEGKAM: Kein einziger Aufruf mehr im ausgelieferten Browsercode (grep ueber alle JS- und HTML-Dateien des Workspace). Nur zwei Pruefungen benutzten sie. UND EINE DAVON NICKTE DEN FEHLER AB. In pruef-zuteilung stand: Bea setzt "in Bearbeitung" (HTTP 200) und danach "erledigt" (HTTP 200) Zwei gruene Haken ueber genau dem Verhalten, das gemeldet wurde -- weil sie nur den Rueckgabewert ansahen und nie den Aufgabenstatus daneben. Eine Pruefung, die nur eine Haelfte misst, kann den Widerspruch gar nicht finden. Jetzt steht dort: Bea setzt "in Bearbeitung" (HTTP 200) und BEIDES steht auf "in Arbeit" (Aufgabe arbeit, Zuteilung arbeit) — das war VanVans Befund und danach "erledigt" (HTTP 200) und wieder beides (Aufgabe erledigt, Zuteilung erledigt) WAS JETZT GILT: `PATCH /workspace/api/aufgaben/:id` mit `{ status }`. Er setzt den Status UND zieht die Zuteilung mit (`zuteilungenNachStatus`), kennt dieselbe Sperre fuer dauerhafte Aufgaben und dieselbe Rechtepruefung. Eine Frage, eine Antwort. ENTFERNT STATT AUSKOMMENTIERT -- dieselbe Entscheidung wie bei `/vorlagen/hilfe` am 01.09.: Eine Route, die niemand mehr aufruft, wird beim naechsten Mal fuer lebenden Code gehalten und mitgepflegt. EIN SCHRECKMOMENT UNTERWEGS, der sich als Messfehler herausstellte: Nach der Umstellung meldete pruef-bewerbung-aufgaben eine 404 beim Abhaken -- also der Verdacht, dass eine ZUGETEILTE Aufgabe ueber den Statusweg gar nicht erreichbar ist und ich gerade etwas kaputt gemacht haette. Nachgemessen statt geglaubt: Die Aufgabe steht in ihrer Liste, der PATCH antwortet 200. Die rote Zeile war eine DRITTE Stelle, die ich beim Umstellen uebersehen hatte und die noch auf die alte Route zeigte. Zwei Minuten Messung statt einer Stunde Suche an der falschen Stelle. GEPRUEFT pruef-zuteilung ok, mit zwei neuen Zeilen, die BEIDE Zustaende messen den zweiten Weg (mein-stand) gibt es nicht mehr (404) pruef-bewerbung-aufgaben 178 ok pruef-struktur 102 ok, 414 -> 413 Routen pruef-aufgabenbrett · pruef-modi-katalog 159 · pruef-aufgaben-vorlagen 60 Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -760,61 +760,38 @@ for (const [weg, entscheidung] of [["annehmen", "ja"], ["ablehnen", "nein"]]) {
|
||||
});
|
||||
}
|
||||
|
||||
/* ---- Meinen eigenen Stand setzen ------------------------------------ */
|
||||
zuteilungRouter.post("/workspace/api/aufgaben/:id/mein-stand", (req, res) => {
|
||||
try {
|
||||
const a = holen(req, res); if (!a) return;
|
||||
const z = meine(a.id, req.person.id);
|
||||
if (!z) return res.status(403).json({ fehler: "nicht_zugeteilt" });
|
||||
/* ==== HIER STAND `/mein-stand` (03.10.2026 entfernt) ==============
|
||||
|
||||
const ziel = String(req.body?.zustand ?? "").trim();
|
||||
/* NUR DIE DREI, DIE MAN SELBST SETZEN DARF. "offen" zurückzudrehen
|
||||
hieße, die eigene Zusage zu löschen; "abgelehnt" hat einen
|
||||
eigenen Weg, weil es eine Begründung braucht. */
|
||||
if (!["angenommen", "arbeit", "erledigt"].includes(ziel)) {
|
||||
return res.status(400).json({ fehler: "ungueltiger_zustand" });
|
||||
}
|
||||
if (z.zustand === "abgelehnt") return res.status(409).json({ fehler: "abgelehnt" });
|
||||
VanVan im Support, Meldung #8: „Wenn man auf ich fange an drückt
|
||||
steht dort in Bearbeitung und wenn man auf fertig drückt dann wird
|
||||
es zu erledigt. DIE AUFGABE BLEIBT ABER IM STATUS OFFEN STEHEN."
|
||||
|
||||
/* ==== EINE DAUERHAFTE AUFGABE WIRD NICHT FERTIG (30.09.2026) ====
|
||||
Gestern habe ich die zwei Knöpfe entfernt, die diese Route riefen,
|
||||
und daneben geschrieben: „Der Weg bleibt bestehen — er ist die
|
||||
Schranke, falls ihn jemand direkt anspricht."
|
||||
|
||||
VanVan im Support: „… dass die Aufgabe dauerhaft sein soll und
|
||||
somit nicht vom Modi in den Status erledigt gesetzt werden
|
||||
kann."
|
||||
DAS WAR EINE AUSREDE, KEINE BEGRÜNDUNG. Eine Route ist keine
|
||||
Schranke gegen sich selbst. Sie setzte weiterhin NUR
|
||||
`aufgaben_zuteilung.zustand` und ließ `aufgaben.status` stehen —
|
||||
also genau den Zustand, den VanVan gemeldet hat. Unsichtbar
|
||||
gemacht, nicht abgeschafft.
|
||||
|
||||
Sie ist keine Aufgabe, die man abarbeitet, sondern eine, die
|
||||
man TUT. „Neue begruessen" ist nicht fertig, wenn man es einmal
|
||||
gemacht hat.
|
||||
NACHGEMESSEN, BEVOR SIE WEGKAM: Kein einziger Aufruf mehr im
|
||||
ausgelieferten Browsercode (`grep` über alle JS- und HTML-Dateien
|
||||
des Workspace). Nur zwei Prüfungen benutzten sie — und eine davon
|
||||
nickte den Fehler sogar ab: Sie setzte „in Bearbeitung" und prüfte
|
||||
HTTP 200, nie den Aufgabenstatus daneben.
|
||||
|
||||
„ICH FANGE AN" BLEIBT ERLAUBT. Auch eine stehende Aufgabe hat
|
||||
einen Anfang, und der Unterschied zwischen „angenommen" und „in
|
||||
Arbeit" sagt etwas. Gesperrt ist nur das Abhaken.
|
||||
WAS STATTDESSEN GILT: `PATCH /workspace/api/aufgaben/:id` mit
|
||||
`{ status }`. Er setzt den Status UND zieht die Zuteilung mit
|
||||
(`zuteilungenNachStatus`), kennt dieselbe Sperre für dauerhafte
|
||||
Aufgaben und dieselbe Rechteprüfung. Eine Frage, eine Antwort.
|
||||
|
||||
DIE SPERRE STEHT HIER UND NICHT NUR IM BROWSER. Ein fehlender
|
||||
Knopf ist eine Bitte; abgelehnt wird am Server -- wer die
|
||||
Schnittstelle direkt anspricht, kaeme sonst durch.
|
||||
ENTFERNT STATT AUSKOMMENTIERT — dieselbe Entscheidung wie bei
|
||||
`/vorlagen/hilfe` am 01.09.: Eine Route, die niemand mehr aufruft,
|
||||
wird beim nächsten Mal für lebenden Code gehalten und mitgepflegt.
|
||||
================================================================== */
|
||||
|
||||
BEENDET WIRD SIE VON DER LEITUNG, ueber den Status der Aufgabe
|
||||
selbst. Eine Pflicht, die niemand mehr beenden kann, waere eine
|
||||
Falle statt einer Regel. */
|
||||
if (ziel === "erledigt" && a.dauerhaft) {
|
||||
return res.status(409).json({ fehler: "dauerhafte_aufgabe" });
|
||||
}
|
||||
|
||||
db().prepare(`UPDATE aufgaben_zuteilung
|
||||
SET zustand = ?, erledigt_am = ?
|
||||
WHERE id = ?`).run(ziel, ziel === "erledigt" ? jetzt() : null, z.id);
|
||||
|
||||
protokolliere("aufgabe_stand", {
|
||||
personId: req.person.id, rolle: req.person.rolle, ip: echteIp(req),
|
||||
detail: `#${a.id} ${ziel}`.slice(0, 120),
|
||||
});
|
||||
res.json({ ok: true, zustand: ziel });
|
||||
} catch (f) {
|
||||
console.error("[zuteilung] mein-stand:", f?.message);
|
||||
res.status(503).json({ fehler: "nicht_verfuegbar" });
|
||||
}
|
||||
});
|
||||
|
||||
/* ---- Bewerten (Abschnitt 5) ----------------------------------------- */
|
||||
zuteilungRouter.post("/workspace/api/aufgaben/:id/bewerten", (req, res) => {
|
||||
|
||||
Reference in New Issue
Block a user