Eine dauerhafte Aufgabe wird nicht abgehakt -- auch nicht ueber den Status
VanVan im Support, Meldung #6: „Der Modi kann die dauerhafte Aufgabe immer noch auf erledigt setzen." DIE SPERRE GAB ES SEIT DEM 30.09. -- ABER NUR AN EINER TUER. `/mein-stand` lehnt „erledigt" bei einer dauerhaften Aufgabe seither ab. Der STATUSWEG (`PATCH /workspace/api/aufgaben/:id`) kannte `dauerhaft` ueberhaupt nicht. Wer die Aufgabe ohnehin aendern durfte -- etwa weil das Uebernehmen aus dem Pool ihn verantwortlich macht -- hakte sie damit einfach ab. Zwei Tueren, eine Regel, und die Regel hing nur an einer. UND ICH HABE DAS LOCH HEUTE FRUEH VERBREITERT. Mit dem Commit davor darf eine Modi den Status ihrer Aufgabe setzen (damit VanVans Satz „es gibt darüber ja den button starten" fuer sie ueberhaupt stimmt). Damit stand ihr genau der Weg offen, der ihr an der anderen Tuer ausdruecklich verwehrt ist. Gefunden habe ich es nicht beim Bauen, sondern beim Lesen der offenen Supportmeldungen -- ihr Satz stand seit dem 28.09. da und passte ploetzlich auf meine eigene Aenderung. GEAENDERT 1. Der Statusweg lehnt „erledigt" bei einer dauerhaften Aufgabe ab, wenn die Person nicht verteilen darf. DERSELBE Fehlercode wie in `/mein-stand` (`dauerhafte_aufgabe`) -- die Oberflaeche uebersetzt ihn schon, und ein zweiter Code fuer dieselbe Sache waere der, den beim naechsten Mal jemand uebersetzt und der andere nicht. 2. Der Knopf faellt weg, der die Absage holen wuerde (`darf_beenden` vom Server). Dieselbe Ueberlegung wie bei „Fertig" auf der Zuteilungskarte, die seit dem 30.09. daneben steht: Ein Knopf, der eine Absage holt, ist schlimmer als keiner. NUR DER LETZTE SCHRITT faellt weg. „starten" und „zur Freigabe" bleiben -- auch eine stehende Aufgabe hat einen Anfang, und der Unterschied zwischen „offen" und „in Arbeit" sagt etwas. 3. BEENDET WIRD SIE VON DER LEITUNG. Das stand seit dem 30.09. als Satz im Kommentar von `/mein-stand`; jetzt stimmt er auch. GEPRUEFT -- UND ZWAR BEIDE TUEREN, sonst wandert der Fehler nur: eine dauerhafte Aufgabe (#3) Tuer 1 (mein-stand) ist zu (409 dauerhafte_aufgabe) Tuer 2 (Status) jetzt auch (409 dauerhafte_aufgabe) anfangen darf sie trotzdem (200) und die Leitung beendet sie (200) und die Oberflaeche erfaehrt es (darf_beenden false) Die dritte Zeile ist die Gegenprobe gegen zu viel Sperre: „gesperrt" darf nicht heissen, dass gar nichts mehr geht. GEPRUEFT: pruef-zuteilung 90 -> 96 ok · pruef-bewerbung-aufgaben 164 · pruef-aufgabenbrett 49 · pruef-aufgaben-vorlagen 46 · pruef-struktur 102. WAS AUS DERSELBEN MELDUNG NOCH OFFEN IST (VanVan, #6): Bei den VORLAGEN laesst sich weder die Frist anpassen noch „dauerhaft" einstellen, und eine Anmerkung fehlt auch. Das ist ein eigener Umbau und steht hier nur, damit es nicht untergeht. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -436,6 +436,60 @@ melde("\n=== Fertig machen und bewerten ===");
|
||||
ok(fremderStatus.code === 403 || fremderStatus.code === 404,
|
||||
` und wer sie nicht hat, setzt auch keinen Status (${fremderStatus.code})`);
|
||||
|
||||
/* ===================================================================
|
||||
EINE DAUERHAFTE AUFGABE WIRD NICHT ABGEHAKT -- AUCH NICHT UEBER
|
||||
DEN STATUS (02.10.2026)
|
||||
|
||||
VanVan im Support, Meldung #6: „Der Modi kann die dauerhafte
|
||||
Aufgabe immer noch auf erledigt setzen."
|
||||
|
||||
Die Sperre gab es seit dem 30.09., aber nur in `/mein-stand`. Der
|
||||
Statusweg kannte `dauerhaft` nicht -- und seit die Modi den Status
|
||||
setzen darf (zwanzig Zeilen weiter oben), stand ihr genau der Weg
|
||||
offen, der ihr an der anderen Tuer verwehrt ist. Zwei Tueren, eine
|
||||
Regel, und die Regel hing nur an einer.
|
||||
|
||||
GEPRUEFT WERDEN BEIDE TUEREN, sonst wandert der Fehler nur. */
|
||||
{
|
||||
const d = await rufe("/workspace/api/aufgaben", { method: "POST", keks: chef,
|
||||
body: { titel: "Neue begruessen", dauerhaft: true, zuteilung: [idAnna] } });
|
||||
const idDauer = d.json?.id;
|
||||
ok(d.code === 201 && Number.isInteger(idDauer),
|
||||
`eine dauerhafte Aufgabe (#${idDauer})`);
|
||||
await rufe(`/workspace/api/aufgaben/${idDauer}/annehmen`, { method: "POST", keks: anna });
|
||||
|
||||
const ueberStand = await rufe(`/workspace/api/aufgaben/${idDauer}/mein-stand`,
|
||||
{ method: "POST", keks: anna, body: { zustand: "erledigt" } });
|
||||
ok(ueberStand.code === 409 && ueberStand.json?.fehler === "dauerhafte_aufgabe",
|
||||
`Tuer 1 (mein-stand) ist zu (${ueberStand.code} ${ueberStand.json?.fehler})`);
|
||||
|
||||
const ueberStatus = await rufe(`/workspace/api/aufgaben/${idDauer}`,
|
||||
{ method: "PATCH", keks: anna, body: { status: "erledigt" } });
|
||||
ok(ueberStatus.code === 409 && ueberStatus.json?.fehler === "dauerhafte_aufgabe",
|
||||
`Tuer 2 (Status) jetzt auch (${ueberStatus.code} ${ueberStatus.json?.fehler})`
|
||||
+ " — das war VanVans Befund");
|
||||
|
||||
/* ANFANGEN DARF SIE SEHR WOHL. Auch eine stehende Aufgabe hat
|
||||
einen Anfang; gesperrt ist nur das Abhaken. Ohne diese Zeile
|
||||
waere „gesperrt" eine Regel, die zu viel sperrt. */
|
||||
const anfangen = await rufe(`/workspace/api/aufgaben/${idDauer}`,
|
||||
{ method: "PATCH", keks: anna, body: { status: "arbeit" } });
|
||||
ok(anfangen.code === 200, ` anfangen darf sie trotzdem (${anfangen.code})`);
|
||||
|
||||
/* UND DIE LEITUNG BEENDET SIE. Eine Pflicht, die niemand mehr
|
||||
beenden kann, waere eine Falle statt einer Regel. */
|
||||
const chefBeendet = await rufe(`/workspace/api/aufgaben/${idDauer}`,
|
||||
{ method: "PATCH", keks: chef, body: { status: "erledigt" } });
|
||||
ok(chefBeendet.code === 200, ` und die Leitung beendet sie (${chefBeendet.code})`);
|
||||
|
||||
/* DER KNOPF FEHLT AUCH AUF DEM BILDSCHIRM -- einer, der eine
|
||||
Absage holt, ist schlimmer als keiner. */
|
||||
const liste = await rufe("/workspace/api/aufgaben", { keks: anna });
|
||||
const dAnna = (liste.json?.aufgaben || []).find((x) => x.id === idDauer);
|
||||
ok(dAnna?.darf_beenden === false,
|
||||
`und die Oberflaeche erfaehrt es (darf_beenden ${dAnna?.darf_beenden})`);
|
||||
}
|
||||
|
||||
/* ZURUECKRAEUMEN -- und die Rueckfahrt ist selbst eine Messung.
|
||||
|
||||
Dieser Abschnitt hat Annas Aufgabe auf „arbeit" gestellt. Ein
|
||||
|
||||
@@ -544,6 +544,12 @@ aufgabenRouter.get("/workspace/api/aufgaben", (req, res) => {
|
||||
Recht -- vorher hing sie am falschen, und eine Modi sah
|
||||
gar keinen. */
|
||||
r.darf_status = darfStatusSetzen(req.person, r);
|
||||
/* UND DARF ER SIE BEENDEN? Bei einer dauerhaften Aufgabe nur
|
||||
die Leitung. Ohne diese Zeile stuende dort ein Knopf
|
||||
„erledigt", der eine Absage holt -- und ein Knopf, der
|
||||
eine Absage holt, ist schlimmer als keiner (so steht es
|
||||
seit dem 30.09. in /mein-stand). */
|
||||
r.darf_beenden = !r.dauerhaft || darfAufgabenVerteilen(req.person);
|
||||
/* DIE OBERFLAECHE SOLL DEN KNOPF NUR ZEIGEN, WENN ER GEHT.
|
||||
Bisher entschied sie es an `darf_verteilen` -- einer Auskunft
|
||||
ueber die PERSON. Loeschen haengt aber an der AUFGABE: Die
|
||||
@@ -1121,6 +1127,40 @@ aufgabenRouter.patch("/workspace/api/aufgaben/:id", gleicheHerkunft, (req, res)
|
||||
const { aus, fehler } = pruefeFelder(req.body || {}, { neu: false, person: req.person });
|
||||
if (fehler.length) return res.status(400).json({ fehler: fehler.join(" ") });
|
||||
|
||||
/* ==== EINE DAUERHAFTE AUFGABE WIRD NICHT ABGEHAKT ==============
|
||||
(02.10.2026 — und der Anlass ist zur Haelfte meiner)
|
||||
|
||||
VanVan im Support, Meldung #6: „Der Modi kann die dauerhafte
|
||||
Aufgabe immer noch auf erledigt setzen."
|
||||
|
||||
Die Sperre gab es seit dem 30.09. — aber nur in `/mein-stand`.
|
||||
Der Statusweg kannte `dauerhaft` ueberhaupt nicht. Wer die
|
||||
Aufgabe ohnehin aendern durfte (etwa weil das Uebernehmen aus
|
||||
dem Pool ihn verantwortlich macht), hakte sie damit einfach ab.
|
||||
|
||||
UND ICH HABE DAS LOCH HEUTE VERBREITERT: Seit die Modi den
|
||||
Status setzen darf, stand ihr dieser Weg offen, der ihr in
|
||||
`/mein-stand` ausdruecklich verwehrt ist. Zwei Tueren, eine
|
||||
Regel — und die Regel hing nur an einer.
|
||||
|
||||
„Neue begruessen" ist nicht fertig, wenn man es einmal gemacht
|
||||
hat. Sie ist keine Aufgabe, die man abarbeitet, sondern eine,
|
||||
die man TUT.
|
||||
|
||||
BEENDET WIRD SIE VON DER LEITUNG. Das stand schon im Kommentar
|
||||
in `/mein-stand` — jetzt stimmt es auch hier. Wer verteilen
|
||||
darf, darf auch beenden; eine Pflicht, die niemand mehr beenden
|
||||
kann, waere eine Falle statt einer Regel.
|
||||
|
||||
DERSELBE FEHLERCODE wie in `/mein-stand` (`dauerhafte_aufgabe`):
|
||||
Die Oberflaeche uebersetzt ihn schon. Ein zweiter Code fuer
|
||||
dieselbe Sache waere der, den beim naechsten Mal jemand
|
||||
uebersetzt und der andere nicht. */
|
||||
if (aus.status === "erledigt" && aufgabe.dauerhaft
|
||||
&& !darfAufgabenVerteilen(req.person)) {
|
||||
return res.status(409).json({ fehler: "dauerhafte_aufgabe" });
|
||||
}
|
||||
|
||||
/* Zuordnungen darf nur das Management verschieben. */
|
||||
if (!istLeitung(req.person)) { delete aus.creator_id; delete aus.verantwortlich_id; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user