Gate-Screens entzerrt + Tiefe-Label "Ausgearbeitet"
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 <noreply@anthropic.com>
This commit is contained in:
parent
b6500bebe1
commit
e79cb97362
3 changed files with 38 additions and 14 deletions
|
|
@ -1294,7 +1294,7 @@ function stationTiefe(id){ return BEARBEITET.has(id) ? "bearbeitet" : "entwurf";
|
|||
function tiefeBadge(id){
|
||||
const t = stationTiefe(id);
|
||||
return t==="bearbeitet"
|
||||
? `<span class="tiefeBadge bearbeitet" title="Eigene Arbeitsergebnisse/Templates liegen vor — hier ist detailliertes Feedback besonders wertvoll.">● Bearbeitet</span>`
|
||||
? `<span class="tiefeBadge bearbeitet" title="Ausgearbeitet — eigene Arbeitsergebnisse/Templates liegen vor; hier ist detailliertes Feedback besonders wertvoll.">● Ausgearbeitet</span>`
|
||||
: `<span class="tiefeBadge entwurf" title="Konzeptioneller Entwurf nach Best Practice — noch keine substantiellen eigenen Arbeitsergebnisse.">○ Entwurf</span>`;
|
||||
}
|
||||
/* 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){
|
|||
<div class="gateCrit">${critItems}</div>
|
||||
${allChecked?`<p class="muted" style="margin:0 0 16px">Alle Kriterien geprüft. Geforderte Artefakte in der Akte (siehe oben)? Pflicht-Figuren am Gate-Puck?</p>`:``}` : ``;
|
||||
|
||||
// ---- Schritt 2: Prüf-Kriterien (eigener Screen) ----
|
||||
if(pruef.length && !S.gateCritDone){
|
||||
return `
|
||||
${revisitNote}
|
||||
${zielLine}
|
||||
<p class="lead"><b>Entscheidet:</b> ${roleLabel(keeper)}</p>
|
||||
${reqLine}
|
||||
${critWrap}
|
||||
<div class="actions">
|
||||
<div class="spacer"></div>
|
||||
<button class="primary" id="gateToDecision" ${allChecked?'':'disabled'}>Weiter → Entscheidung</button>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
// ---- Schritt 3: Entscheidung (eigener Screen, nach Kriterienprüfung) ----
|
||||
const critRecap = pruef.length ? `<div class="hint ok">✓ Alle Prüf-Kriterien geprüft</div>` : ``;
|
||||
const critBack = pruef.length ? `<button class="ghost" id="gateToCrit">← zu den Kriterien</button>` : `<div></div>`;
|
||||
const deciderLine = `<p class="lead" style="margin:0 0 12px"><b>Entscheidet:</b> ${roleLabel(keeper)}</p>`;
|
||||
|
||||
// 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){
|
|||
`<button class="choice freigabeOpt" data-fi="${i}" ${blocked?"disabled":""}><b>${n}</b><br><span style="color:var(--muted);font-weight:400">${d}</span></button>`).join("");
|
||||
return `
|
||||
${revisitNote}
|
||||
${zielLine}
|
||||
<p class="lead"><b>Entscheidet:</b> ${roleLabel(keeper)}</p>
|
||||
${critRecap}
|
||||
${reqLine}
|
||||
${critWrap}
|
||||
<div class="critHead">Freigabe-Entscheidung</div>
|
||||
<div class="choiceGrid">${fopts}</div>`;
|
||||
${deciderLine}
|
||||
<div class="choiceGrid">${fopts}</div>
|
||||
<div class="actions">${critBack}<div class="spacer"></div></div>`;
|
||||
}
|
||||
// Freigabe erteilt (0/1) → Routing-Schritt
|
||||
const fa = st.freigabe[S.gate1Approval];
|
||||
|
|
@ -2096,13 +2115,15 @@ function renderGate(st){
|
|||
<div class="actions"><button class="ghost" id="gateApprovalBack">← andere Freigabe-Entscheidung</button><div class="spacer"></div></div>`;
|
||||
}
|
||||
|
||||
// Normales Gate (2/3): Entscheidung
|
||||
return `
|
||||
${revisitNote}
|
||||
${zielLine}
|
||||
<p class="lead"><b>Entscheidet:</b> ${roleLabel(keeper)}</p>
|
||||
${critRecap}
|
||||
${reqLine}
|
||||
${critWrap}
|
||||
<div class="choiceGrid">${opts}</div>`;
|
||||
<div class="critHead">Entscheidung</div>
|
||||
${deciderLine}
|
||||
<div class="choiceGrid">${opts}</div>
|
||||
<div class="actions">${critBack}<div class="spacer"></div></div>`;
|
||||
}
|
||||
|
||||
/* 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
|
||||
|
|
|
|||
|
|
@ -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<service>-c<change>.png) fuer Offline vorab cachen (alle 24).
|
||||
const CARDS = [];
|
||||
|
|
|
|||
|
|
@ -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**".
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue