- v0.6
+ v0.7
@@ -415,7 +423,7 @@ const CHANGE_LEGEND = [
"VollstĂ€ndige Bewertung, Business Case, ausfĂŒhrliche Planung & Tests, Kommunikationsplan",
"DurchlÀuft den vollen Lebenszyklus ab dem Design (alle Gates)"],
bsp:"Rechenzentrumsumzug, Austausch eines Kernsystems, organisationsweite Plattformmigration." },
- { idee:"Der Regelfall fĂŒr alles, was nicht vorab genehmigt ist und kein Notfall ist. DurchlĂ€uft den Bewertungs- und Gate-Prozess.",
+ { idee:"Der Regelfall fĂŒr alles, was nicht vorab genehmigt ist und kein Notfall ist. DurchlĂ€uft einen strukturierten Bewertungs- und Freigabeprozess.",
bed:["Ănderungsantrag (RfC) wird erfasst",
"Risiko- und Impact-Bewertung wird durchgefĂŒhrt",
"Freigabe an den Gates durch die SOR (Gate 2 durch den Service Owner) vor Umsetzung",
@@ -436,6 +444,37 @@ const CHANGE_LEGEND = [
];
// Anzeige-Reihenfolge der Change-Arten (Indizes in CHANGE_TYPES): Standard, Emergency, Normal, Major
const CT_ORDER = [2, 3, 1, 0];
+
+/* Aufgabe 2: Wo wird der Change freigegeben? (Cluster nach Frank; Index parallel zu CHANGE_TYPES) */
+const FREIGABE_OPTIONS = [
+ "SOR / DPM / Mission Board",
+ "Service Owner (SO)",
+ "Keine Freigabe â Standard (vorab genehmigt)",
+ "Keine Freigabe â Emergency (nachgelagert)"
+];
+const FREIGABE_ORDER = [0, 1, 2, 3];
+const FREIGABE_CORRECT = [0, 1, 2, 3]; // MajorâSOR/DPM/MB · NormalâSO · Standardâkeine · Emergencyâkeine
+const FREIGABE_GRUND = [
+ "Ein Major Change wird in der SOR freigegeben. Reicht deren Ressourcen- und Entscheidungshoheit nicht, wird daraus ein Demand â ĂŒber den DPM ans Mission Board.",
+ "Ein Normal Change wird vom Service Owner freigegeben und umgesetzt; er berĂŒhrt die SOR nicht (kein Gate 3).",
+ "Ein Standard Change ist ĂŒber den Standard-Change-Katalog generell vorab autorisiert â keine Einzelfreigabe nötig.",
+ "Ein Emergency Change wird sofort umgesetzt; die formale Freigabe (Gate 3 / SOR) erfolgt nachgelagert zur Dokumentation."
+];
+
+/* Bonus-Karten: Service ist bereits live. Welche Phasen sind fĂŒr diese Change-Art
+ noch relevant â und welche fallen weg? (Index parallel zu CHANGE_TYPES; 0/Major ungenutzt) */
+const BONUS_AUFLOESUNG = [
+ null,
+ { relevant:["Transition (verkĂŒrzt, meist Konfiguration)","Operation"],
+ wegfall:["Design (Service existiert bereits)","voller Review"],
+ text:"Der Service lĂ€uft schon â ein neues Design entfĂ€llt. Der Normal Change steigt in der Transition ein (meist der Konfigurationspfad), wird vom Service Owner freigegeben (Gate 2) und geht zurĂŒck in den Betrieb. Ein kompletter Review-Durchlauf ist fĂŒr diese ĂŒberschaubare Ănderung nicht nötig." },
+ { relevant:["Operation (laufender Betrieb)"],
+ wegfall:["Design","Transition & Gates","Review"],
+ text:"Ein Standard Change ist ĂŒber den Katalog vorab autorisiert. Er wird direkt im laufenden Betrieb umgesetzt â keine Design- oder Transition-Phase, keine Gate-Freigabe, kein Review." },
+ { relevant:["beschleunigte Umsetzung / Deployment","Operation & Support","nachgelagerte Freigabe + Doku"],
+ wegfall:["Design","regulÀre Vorab-Freigabe an den Gates"],
+ text:"Beim Emergency Change zĂ€hlt Tempo: Der Fix wird sofort ausgerollt, um die Störung zu beheben. Die formale Freigabe (Gate 3 / SOR) und die Dokumentation erfolgen nachgelagert; danach geht der Service in den normalen Betrieb zurĂŒck." }
+];
// Feste, EINMALIG gemischte Deck-Reihenfolge ([service, change]) â bei jedem Start gleich, nicht gruppiert.
const DECK_ORDER = [[2,1],[0,3],[4,0],[1,2],[5,3],[3,0],[0,1],[2,3],[4,2],[1,0],[5,1],[3,2],
[2,0],[0,2],[4,3],[1,3],[5,0],[3,1],[2,2],[0,0],[4,1],[1,1],[5,2],[3,3]];
@@ -445,7 +484,7 @@ const USE_CASES = [
changes:[
{titel:"Open Source von oben!", text:"Der OB gibt die Richtung vor: Die proprietÀre VDI-Lösung soll auf eine Open-Source-Alternative (OpenStack + Thin-Client) umgestellt werden."},
{titel:"Tapetenwechsel", text:"Die Stadt bekommt ein neues Logo â der Desktop-Hintergrund aller virtuellen ArbeitsplĂ€tze muss angepasst werden."},
- {titel:"Quartalspflege", text:"Das turnusmĂ€Ăige Firmware-Update der VDI-Host-Hypervisoren steht an â im Standard-Change-Katalog lĂ€ngst hinterlegt."},
+ {titel:"Quartalspflege", text:"Das turnusmĂ€Ăige Firmware-Update der VDI-Host-Hypervisoren steht an."},
{titel:"Blackout!", text:"Ein Stromausfall reiĂt ein ganzes VDI-Host-Cluster aus dem Betrieb â die Sitzungen mĂŒssen sofort auf ein Backup-Cluster migriert werden."}
]},
{ service:"Managed VPN-Access Service",
@@ -453,7 +492,7 @@ const USE_CASES = [
changes:[
{titel:"BrĂŒssel ruft!", text:"Eine neue EU-weite IT-Sicherheitsverordnung zwingt dazu, die gesamte VPN-Architektur neu aufzustellen."},
{titel:"Heimvorteil", text:"Ein neues Intranet-Portal soll in die Split-Tunnel-Liste, damit Mitarbeitende auch aus dem Homeoffice darauf zugreifen."},
- {titel:"Monatsroutine", text:"Das monatliche Firmware-Update der VPN-Appliance steht an â als Standard-Change bereits freigegeben."},
+ {titel:"Monatsroutine", text:"Das monatliche Firmware-Update der VPN-Appliance steht an."},
{titel:"Gephisht!", text:"Ein erfolgreicher Phishing-Angriff hat eine VPN-Zertifikatskette kompromittiert â sofort sperren und neu ausstellen."}
]},
{ service:"Online-BĂŒrgerportal fĂŒr Meldungen & AntrĂ€ge",
@@ -461,7 +500,7 @@ const USE_CASES = [
changes:[
{titel:"Mitreden, Pflicht!", text:"Ein neues Landesgesetz schreibt digitale BĂŒrgerbeteiligung vor â das Portal muss um komplette Beteiligungs-Module erweitert werden."},
{titel:"Rotstift gefragt", text:"Der BĂŒrgerservice meldet einen Rechtschreibfehler in einem statischen Hinweistext, der korrigiert werden muss."},
- {titel:"Patchday", text:"Das monatliche Sicherheits-Patch des Webservers (Apache/Nginx) steht an â im Change-Katalog definiert."},
+ {titel:"Patchday", text:"Das monatliche Sicherheits-Patch des Webservers (Apache/Nginx) steht an."},
{titel:"LĂŒcke im Formular!", text:"In einem Eingabe-Formular wird eine kritische XSS-Schwachstelle entdeckt â ein Hotfix muss sofort raus."}
]},
{ service:"Zentrales Dokumenten-Management-System (DMS)",
@@ -477,7 +516,7 @@ const USE_CASES = [
changes:[
{titel:"Norm-Zwang", text:"Eine bundesweite Vorgabe zu EU-Standards erzwingt die komplette Migration des GIS-Stacks auf konforme Services und Datenmodelle."},
{titel:"Falsch beschriftet", text:"Das Bauamt meldet eine falsche Beschriftung eines Karten-Layers, die korrigiert werden muss."},
- {titel:"GeoServer-Update", text:"Das monatliche Update der GIS-Software (GeoServer 2.23 â 2.24) steht an â im Standard-Change-Katalog."},
+ {titel:"GeoServer-Update", text:"Das monatliche Update der GIS-Software (GeoServer 2.23 â 2.24) steht an."},
{titel:"Schnittstelle offen!", text:"An einer Schnittstelle wird eine kritische Schwachstelle entdeckt, die unautorisierten Datenzugriff erlaubt â Dienst sofort abschalten und patchen."}
]},
{ service:"Beschaffungs- und Vertrags-System fĂŒr FachĂ€mter",
@@ -485,7 +524,7 @@ const USE_CASES = [
changes:[
{titel:"Vergabe neu!", text:"Eine neue EU-Vergaberichtlinie zwingt zur EinfĂŒhrung von E-Invoicing und erweiterten Transparenz-Reports."},
{titel:"Vierstellig, bitte", text:"Das Finanzamt wĂŒnscht eine kleine Anpassung: aus dem Label âKostenstelleâ wird âKostenstelle (4-stellig)â."},
- {titel:"Patch-Quartal", text:"Das quartalsweise Sicherheits-Patch des Anwendungsservers steht an â bereits im Change-Katalog."},
+ {titel:"Patch-Quartal", text:"Das quartalsweise Sicherheits-Patch des Anwendungsservers steht an."},
{titel:"Upload-Falle!", text:"Im Vertrags-Upload wird eine kritische LĂŒcke entdeckt, ĂŒber die sich Schadcode hochladen lĂ€sst â Endpoint sofort sperren, Hotfix einspielen."}
]}
];
@@ -1056,9 +1095,11 @@ function seedAkte(entryIdx){
/* ====================== STATE ====================== */
const LS_KEY = "slc-companion-proto";
function defaultState(){
- return { view:"deck", service:null, change:null,
+ return { view:"deck", mode:"main", service:null, change:null,
classifyDone:false, classifyWrong:null,
+ freigabeDone:false, freigabeWrong:null,
entryDone:false, entryWrong:null,
+ bonusReveal:false, bonusDone:{}, servicesDone:{},
index:0, stage:"discuss", quizIndex:0,
actStep:0, actReveal:false, actDone:false, arteWrong:null,
picks:{}, done:{}, akte:{},
@@ -1157,10 +1198,13 @@ function draw(){
document.body.classList.toggle("runMode", S.view==="run");
if(S.view!=="run"){ document.body.classList.remove("navOpen","akteOpen","rollenOpen"); }
renderCardBadge();
- if(S.view==="deck") return renderDeck();
- if(S.view==="classify") return renderClassify();
- if(S.view==="entry") return renderEntry();
- if(S.view==="end") return renderEnd();
+ if(S.view==="deck") return renderDeck();
+ if(S.view==="classify") return renderClassify();
+ if(S.view==="freigabe") return renderFreigabe();
+ if(S.view==="entry") return renderEntry();
+ if(S.view==="bonusPick") return renderBonusPick();
+ if(S.view==="bonus") return renderBonus();
+ if(S.view==="end") return renderEnd();
renderRun();
}
@@ -1174,19 +1218,25 @@ function renderCardBadge(){
/* ---------- Schritt 1: Action Card ziehen (Raster aller Karten) ---------- */
function renderDeck(){
- const cards = DECK_ORDER.map(([si,ci])=>{
- const c = USE_CASES[si].changes[ci];
- return ``;
+ const cards = USE_CASES.map((u,si)=>{
+ const c = u.changes[0];
+ const done = S.servicesDone && S.servicesDone[si];
+ return ``;
}).join("");
$("#panel").innerHTML = `
-
Schritt 1 · Action Card ziehen
-
Welche Karte habt ihr gezogen?
-
Tippt auf die Action Card, die ihr gezogen habt.
-
${cards}
`;
+
Schritt 1 · Service wÀhlen (Main Action Card)
+
Welchen Service fĂŒhrt ihr ein?
+
Jede Main-Karte ist ein Major Change â ihr spielt den Service einmal komplett von Design bis Review durch. Die Varianten (Bonus-Karten) kommen danach.
Der Service lĂ€uft jetzt â welche Ănderungen kommen im Betrieb?
+
Diese drei Varianten betreffen den bereits eingefĂŒhrten Service. Sie werden nicht komplett durchgespielt â ihr bestimmt nur Change-Art, Freigabe und Einstieg und besprecht, welche Phasen noch relevant sind.
+ Der Service ${USE_CASES[S.service].service} lÀuft bereits. Diskutiert gemeinsam:
+ Welche Phasen und AktivitĂ€ten wĂ€ren fĂŒr diesen ${CHANGE_TYPES[S.change]} noch relevant â und welche fallen weg?
+