From 3ab69d36a5de1cbd16d3f3c0ef4f3f9e4cbdf060 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 2 Oct 2026 19:26:40 +0200 Subject: [PATCH] Eine dauerhafte Aufgabe wird nicht abgehakt -- auch nicht ueber den Status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- server/pruef-zuteilung.mjs | 54 +++++++++++++++++++++++++++++++++ server/workspace-aufgaben.js | 40 ++++++++++++++++++++++++ workspace/anruf-probe.html | 10 +++--- workspace/app.webmanifest | 8 ++--- workspace/assets/js/aufgaben.js | 18 ++++++++++- workspace/aufgaben.html | 38 +++++++++++------------ workspace/automation.html | 32 +++++++++---------- workspace/befinden.html | 34 ++++++++++----------- workspace/bereich.html | 44 +++++++++++++-------------- workspace/bewerben.html | 38 +++++++++++------------ workspace/bewerbungen.html | 36 +++++++++++----------- workspace/buehne.html | 6 ++-- workspace/calls.html | 34 ++++++++++----------- workspace/chat.html | 40 ++++++++++++------------ workspace/content.html | 34 ++++++++++----------- workspace/crew-index.html | 12 ++++---- workspace/crew.webmanifest | 8 ++--- workspace/dateien.html | 34 ++++++++++----------- workspace/entwicklung.html | 36 +++++++++++----------- workspace/hilfe.html | 30 +++++++++--------- workspace/index.html | 10 +++--- workspace/kalender.html | 34 ++++++++++----------- workspace/leistung.html | 32 +++++++++---------- workspace/manager-ziele.html | 28 ++++++++--------- workspace/material.html | 32 +++++++++---------- workspace/notizen.html | 28 ++++++++--------- workspace/personen.html | 32 +++++++++---------- workspace/profil.html | 36 +++++++++++----------- workspace/reaktion.html | 38 +++++++++++------------ workspace/rechte.html | 34 ++++++++++----------- workspace/report.html | 36 +++++++++++----------- workspace/scouting.html | 32 +++++++++---------- workspace/start.html | 32 +++++++++---------- workspace/startcheck.html | 34 ++++++++++----------- workspace/steckbrief.html | 36 +++++++++++----------- workspace/support.html | 28 ++++++++--------- workspace/tafel.html | 6 ++-- workspace/talente.html | 36 +++++++++++----------- workspace/team.html | 32 +++++++++---------- workspace/teamlage.html | 34 ++++++++++----------- workspace/teilen.html | 30 +++++++++--------- workspace/treff-moderation.html | 32 +++++++++---------- workspace/treff-regeln.html | 32 +++++++++---------- workspace/uebersicht.html | 32 +++++++++---------- workspace/unsere-seiten.html | 30 +++++++++--------- workspace/unterstuetzen.html | 32 +++++++++---------- workspace/werdegang.html | 32 +++++++++---------- workspace/willkommen.html | 30 +++++++++--------- workspace/wissen.html | 34 ++++++++++----------- 49 files changed, 795 insertions(+), 685 deletions(-) diff --git a/server/pruef-zuteilung.mjs b/server/pruef-zuteilung.mjs index 9bc1baa5..4adcee8b 100644 --- a/server/pruef-zuteilung.mjs +++ b/server/pruef-zuteilung.mjs @@ -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 diff --git a/server/workspace-aufgaben.js b/server/workspace-aufgaben.js index 47926626..bcc0c38e 100644 --- a/server/workspace-aufgaben.js +++ b/server/workspace-aufgaben.js @@ -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; } diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 11069850..b6c99030 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,8 +16,8 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +