From e79cb973625e14916fc23925165d229d8d25c8f7 Mon Sep 17 00:00:00 2001 From: breitenbach76 Date: Wed, 10 Jun 2026 08:36:18 +0200 Subject: [PATCH] Gate-Screens entzerrt + Tiefe-Label "Ausgearbeitet" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aufbauend auf "app update final" (b6500be), das den Großteil des Frank-Feedbacks v0.10 enthält (RACI-Betonung, SLC-Gesamtbild 6x, Feedback-System mit Server-Save, Review-Template, Gate-1 zweistufig): - Gates: Freigabe-/Entscheidung ist jetzt ein EIGENER Screen NACH der Kriterienpruefung (vorher auf einem Screen -> ueberladen). Gilt fuer Gate 1/2/3: Pruef-Kriterien -> Button "Weiter -> Entscheidung" (erst aktiv, wenn alle Kriterien geprueft) -> schlanker Entscheidungs-Screen (Optionen + "<- zu den Kriterien"). Gate 1 danach wie gehabt Routing Entwicklung/Konfiguration. Neuer State: gateCritDone. - Tiefe-Badge "Bearbeitet" -> "Ausgearbeitet" (klarer; nur sichtbares Label + Tooltip, interne Bezeichner/CSS-Klasse unveraendert). - sw.js Cache hochgezaehlt; PROJEKTSTAND.md nachgezogen. Co-Authored-By: Claude Opus 4.8 --- 04_Tablet-Quiz/app/index.html | 45 ++++++++++++++++++++++++++--------- 04_Tablet-Quiz/app/sw.js | 2 +- PROJEKTSTAND.md | 5 ++-- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/04_Tablet-Quiz/app/index.html b/04_Tablet-Quiz/app/index.html index a6745a7..2db2360 100644 --- a/04_Tablet-Quiz/app/index.html +++ b/04_Tablet-Quiz/app/index.html @@ -1294,7 +1294,7 @@ function stationTiefe(id){ return BEARBEITET.has(id) ? "bearbeitet" : "entwurf"; function tiefeBadge(id){ const t = stationTiefe(id); return t==="bearbeitet" - ? `● Bearbeitet` + ? `● Ausgearbeitet` : `○ Entwurf`; } /* Dokumente mit eigenem Detail-Feedback (Frank): Gate 1/2/3 + Service Review. */ @@ -1325,7 +1325,7 @@ function defaultState(){ freigabeDone:false, freigabeWrong:null, entryDone:false, entryWrong:null, bonusReveal:false, bonusDone:{}, servicesDone:{}, akteFlash:null, svcModalSel:null, - index:0, stage:"discuss", quizIndex:0, gateDeciderDone:false, gateCrit:0, gate1Approval:null, + index:0, stage:"discuss", quizIndex:0, gateDeciderDone:false, gateCrit:0, gateCritDone:false, gate1Approval:null, feedback:{}, feedbackSaved:{}, feedbackQueue:[], actStep:0, actReveal:false, actDone:false, arteWrong:null, picks:{}, done:{}, akte:{}, @@ -1820,7 +1820,7 @@ function enterStation(idx){ } S.index = idx; S.stage = STATIONEN[idx].typ==="gate" ? "gate" : "act"; - S.gatePick = null; S.quizIndex = 0; S.gateDeciderDone = false; S.gateCrit = 0; S.gate1Approval = null; + S.gatePick = null; S.quizIndex = 0; S.gateDeciderDone = false; S.gateCrit = 0; S.gateCritDone = false; S.gate1Approval = null; S.actStep = 0; S.actReveal = false; S.actDone = false; S.arteWrong = null; S.akteFlash = null; document.body.classList.remove("akteOpen"); } @@ -2071,6 +2071,25 @@ function renderGate(st){
${critItems}
${allChecked?`

Alle Kriterien geprüft. Geforderte Artefakte in der Akte (siehe oben)? Pflicht-Figuren am Gate-Puck?

`:``}` : ``; + // ---- Schritt 2: Prüf-Kriterien (eigener Screen) ---- + if(pruef.length && !S.gateCritDone){ + return ` + ${revisitNote} + ${zielLine} +

Entscheidet: ${roleLabel(keeper)}

+ ${reqLine} + ${critWrap} +
+
+ +
`; + } + + // ---- Schritt 3: Entscheidung (eigener Screen, nach Kriterienprüfung) ---- + const critRecap = pruef.length ? `
✓ Alle Prüf-Kriterien geprüft
` : ``; + const critBack = pruef.length ? `` : `
`; + const deciderLine = `

Entscheidet: ${roleLabel(keeper)}

`; + // Zweistufiges Gate (Gate 1): erst Freigabe-Entscheidung, dann Build-/Konfig-Routing. if(st.freigabe){ if(S.gate1Approval==null){ @@ -2078,12 +2097,12 @@ function renderGate(st){ ``).join(""); return ` ${revisitNote} - ${zielLine} -

Entscheidet: ${roleLabel(keeper)}

+ ${critRecap} ${reqLine} - ${critWrap}
Freigabe-Entscheidung
-
${fopts}
`; + ${deciderLine} +
${fopts}
+
${critBack}
`; } // Freigabe erteilt (0/1) → Routing-Schritt const fa = st.freigabe[S.gate1Approval]; @@ -2096,13 +2115,15 @@ function renderGate(st){
`; } + // Normales Gate (2/3): Entscheidung return ` ${revisitNote} - ${zielLine} -

Entscheidet: ${roleLabel(keeper)}

+ ${critRecap} ${reqLine} - ${critWrap} -
${opts}
`; +
Entscheidung
+ ${deciderLine} +
${opts}
+
${critBack}
`; } /* Gate — Konsequenz der Entscheidung */ @@ -2283,6 +2304,8 @@ function wire(st){ if(b("finish")) b("finish").onclick = ()=>{ captureFeedbackInputs(); S.done[st.id]=true; S.view="end"; S.endReason="done"; save(); draw(); }; // Gate if(b("gateDeciderNext")) b("gateDeciderNext").onclick = ()=>{ S.gateDeciderDone=true; save(); draw(); }; + if(b("gateToDecision")) b("gateToDecision").onclick = ()=>{ S.gateCritDone=true; save(); draw(); }; + if(b("gateToCrit")) b("gateToCrit").onclick = ()=>{ S.gateCritDone=false; S.gate1Approval=null; save(); draw(); }; $("#panel").querySelectorAll(".critItem[data-ci]").forEach(el=>{ el.onclick = ()=>{ const i=+el.dataset.ci; S.gateCrit = (i < (S.gateCrit||0)) ? i : i+1; // abgehaktes wieder lösen vs. nächstes aufdecken diff --git a/04_Tablet-Quiz/app/sw.js b/04_Tablet-Quiz/app/sw.js index 40a9a38..2568598 100644 --- a/04_Tablet-Quiz/app/sw.js +++ b/04_Tablet-Quiz/app/sw.js @@ -1,5 +1,5 @@ /* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */ -const CACHE = "slc-companion-v32"; +const CACHE = "slc-companion-v34"; const SHELL = ["./", "index.html", "manifest.webmanifest", "icon.svg"]; // Action-Card-Grafiken (cards/s-c.png) fuer Offline vorab cachen (alle 24). const CARDS = []; diff --git a/PROJEKTSTAND.md b/PROJEKTSTAND.md index a5d66b4..c12d7d9 100644 --- a/PROJEKTSTAND.md +++ b/PROJEKTSTAND.md @@ -118,8 +118,9 @@ Konzept (`00_Konzept/README_konzept.md`), bis Rückkopplung mit Michael:** - [x] **GRAFIK SLC (Gesamtbild) 6×** im **Major-Walk**: Start (Main-Intro), an den 4 Phasenübergängen (`renderActivity`/`renderGateDone`) und am Schluss (`renderEnd`) — jeweils mit Highlight der aktuellen/nächsten Phase (`slcOverview` auf Basis von `phaseDonut`). **Bonus unberührt.** -- [x] **„Bearbeitet"/„Entwurf" sichtbar:** Badge im Stations-Header (`stationTiefe`/`tiefeBadge`). - Bearbeitet = `ds_01, tr_01, tr_09, tr_12, rv_01`; alles andere Entwurf. +- [x] **„Ausgearbeitet"/„Entwurf" sichtbar:** Badge im Stations-Header (`stationTiefe`/`tiefeBadge`; + Label „Ausgearbeitet" — Franks „Bearbeitet", klarer benannt). Ausgearbeitet = `ds_01, tr_01, + tr_09, tr_12, rv_01`; alles andere Entwurf. - [x] **Gate 1 zweistufig:** erst **Freigabe-Entscheidung** (Freigabe / mit Auflagen / **Zurück an Design** [Rückschleife] / **Ablehnung** [End-Screen]), dann **Routing** Entwicklung/Konfiguration. Gate-Templates: `ziel` an Gate 1/2/3 ergänzt; Gate-1-Prüfdim. „Budget für die **Implementierung**".