diff --git a/01_3D-Druck/gemini/Puck_Entscheidung_gemini.svg b/01_3D-Druck/gemini/Puck_Entscheidung_gemini.svg new file mode 100644 index 0000000..c74de7e --- /dev/null +++ b/01_3D-Druck/gemini/Puck_Entscheidung_gemini.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/01_3D-Druck/gemini/Puck_design_gemini.svg b/01_3D-Druck/gemini/Puck_design_gemini.svg new file mode 100644 index 0000000..e9c04eb --- /dev/null +++ b/01_3D-Druck/gemini/Puck_design_gemini.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/01_3D-Druck/gemini/Puck_operation_gemini.svg b/01_3D-Druck/gemini/Puck_operation_gemini.svg new file mode 100644 index 0000000..ddf2f42 --- /dev/null +++ b/01_3D-Druck/gemini/Puck_operation_gemini.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/01_3D-Druck/gemini/Puck_review_gemini.svg b/01_3D-Druck/gemini/Puck_review_gemini.svg new file mode 100644 index 0000000..4ff2d68 --- /dev/null +++ b/01_3D-Druck/gemini/Puck_review_gemini.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/01_3D-Druck/gemini/Puck_support_gemini.svg b/01_3D-Druck/gemini/Puck_support_gemini.svg new file mode 100644 index 0000000..c731d39 --- /dev/null +++ b/01_3D-Druck/gemini/Puck_support_gemini.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/01_3D-Druck/gemini/Puck_transition_gemini.svg b/01_3D-Druck/gemini/Puck_transition_gemini.svg new file mode 100644 index 0000000..b46ebe4 --- /dev/null +++ b/01_3D-Druck/gemini/Puck_transition_gemini.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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**".