You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@incubator.apache.org by jm...@apache.org on 2025/10/26 23:38:13 UTC
(incubator) branch master updated: Add interactive scenarios from Apache Training
This is an automated email from the ASF dual-hosted git repository.
jmclean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator.git
The following commit(s) were added to refs/heads/master by this push:
new 805b41d77 Add interactive scenarios from Apache Training
805b41d77 is described below
commit 805b41d77de6e4e87114ebe1035d4c556f94d1f6
Author: Justin Mclean <jm...@apache.org>
AuthorDate: Mon Oct 27 10:30:26 2025 +1100
Add interactive scenarios from Apache Training
---
pages/training/index.ad | 1 +
pages/training/mentor/index.ad | 3 +-
.../training/scenarios/BrandandGovernanceBlur.html | 379 ++++++++++++++++
.../scenarios/ConflictingMentorAdvice.html | 293 ++++++++++++
.../scenarios/CrossListReleaseVoteConfusion.html | 319 ++++++++++++++
.../scenarios/CulturalMisunderstanding.html | 319 ++++++++++++++
.../training/scenarios/LazyConsensusGoneWrong.html | 351 +++++++++++++++
pages/training/scenarios/MentorDependency.html | 459 +++++++++++++++++++
.../scenarios/TheEmployerDominatedPodling.html | 490 +++++++++++++++++++++
pages/training/scenarios/TheHeatedThread.html | 376 ++++++++++++++++
pages/training/scenarios/TheSilentMentor.html | 428 ++++++++++++++++++
pages/training/scenarios/index.md | 48 ++
12 files changed, 3465 insertions(+), 1 deletion(-)
diff --git a/pages/training/index.ad b/pages/training/index.ad
index 0894a7ce2..a5007dc36 100644
--- a/pages/training/index.ad
+++ b/pages/training/index.ad
@@ -41,5 +41,6 @@ Start with your role, or browse the shared resources below. New mentors, it's su
- link:quizzes.html[Quizzes] — self-check questions to reinforce learning about ASF culture and incubation topics
- link:scenarios.html[Scenarios & Exercises] — interactive situations to practice real-world decision-making
- link:casestudies.html[Case Studies] — real examples of podlings’ incubation journeys, outcomes, and lessons learned
+- link:training/scenarios/[Mentoring in Practice] — interactive, story-based exercises to help mentors explore real-world incubation challenges
See also: link:about.html[About this section]
diff --git a/pages/training/mentor/index.ad b/pages/training/mentor/index.ad
index c33c53cd7..e6898bd2c 100644
--- a/pages/training/mentor/index.ad
+++ b/pages/training/mentor/index.ad
@@ -30,7 +30,7 @@ This link:https://youtu.be/2LV6Uk4K-wA[short video] welcomes new mentors to the
See also: link:index.html[Training Home] | link:resources.html[All Resources]
[.small]
-*Key:* 📘 Guide 🖥️ Slide Deck 🎞️ Video 🧩 Quiz 🧠 Practice / Scenario
+*Key:* 📘 Guide 🖥️ Slide Deck 🎞️ Video 🧩 Quiz 🧠 Practice / Scenario 🎮 Interactive
== Steps
@@ -64,6 +64,7 @@ See also: link:index.html[Training Home] | link:resources.html[All Resources]
- 📘 link:https://cwiki.apache.org/confluence/display/INCUBATOR/Selecting+a+PMC+Chair[Selecting a PMC Chair] - guidance on choosing a balanced and effective PMC Chair
- 🖥️ link:https://training.apache.org/presentations/apache/incubator/CommunityBuilding/index.html[Community Building in Practice (Slide Deck)] - building and sustaining healthy, diverse communities
- 🎞️ link:https://youtu.be/rCkqAn6f19Y[Community Building in Practice] - how mentors can help podlings turn contributors into a sustainable Apache community
+- 🎮 link:https://incubator.apache.org/training/scenarios/[Mentoring in Practice] - interactive, story-based exercises that help mentors explore real-world incubation challenges
=== Governance, Consensus & Neutrality
- 📘 link:https://cwiki.apache.org/confluence/display/INCUBATOR/Governance+in+Practice[Governance in Practice] - guidance on applying ASF governance principles in podling communities
diff --git a/pages/training/scenarios/BrandandGovernanceBlur.html b/pages/training/scenarios/BrandandGovernanceBlur.html
new file mode 100644
index 000000000..16cdd264e
--- /dev/null
+++ b/pages/training/scenarios/BrandandGovernanceBlur.html
@@ -0,0 +1,379 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Brand and Governance Blur (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Brand and Governance Blur (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="A5C93D72-INCUBATOR-BRAND-GOV-BLUR-CONSOLIDATED" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" siz [...]
+<<set $independence = 0>> /* independence = self-governance, consensus, balanced relationships */
+<<set $escalation = 0>> /* escalation = times IPMC needed or overused */
+<<set $shortcuts = 0>> /* shortcuts = avoidance, delay, off-list handling */
+<<set $steps = 0>>
+
+You are a mentor working with an incubating Apache project.
+
+Company X, the project’s main corporate sponsor, issues a press release describing the project as
+"an open source initiative by Company X"
+using ASF-style graphics and omitting "Apache Foo (incubating)".
+
+The announcement spreads quickly on social media.
+When mentors raise the issue, company representatives respond:
+"It’s perfectly fine. This helps both the company and the project."
+
+The mentors are concerned that this blurs the project’s independence and connection to the ASF.
+
+What do you do first?
+
+* [[Ask the PPMC to start a discussion on the dev@ list before acting|StartDiscussion]]
+* [[Contact the company privately to explain ASF branding expectations|PrivateOutreach]]
+* [[Post a public clarification on the dev@ list and social media|PublicCorrection]]
+* [[Ignore it for now; it’s just marketing|IgnoreIssue]]
+
+---</tw-passagedata><tw-passagedata pid="2" name="StartDiscussion" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $independence += 1>> /* independence only: encourages community-led discussion */
+
+You post to the project’s dev@ list:
+"We should clarify how ASF branding works and why accurate naming matters for independence."
+
+Several contributors express surprise:
+"We didn’t even know we had to use '(incubating)' everywhere."
+
+The PPMC agrees to take a closer look at the issue.
+
+How should the mentors support this?
+
+* [[Share ASF trademark and incubation disclaimer links|ShareGuidelines]]
+* [[Encourage the PPMC to contact Company X politely for a correction|PPMCRequest]]
+* [[Let the PPMC decide their next step without mentor input|StepBack]] /* independence only */
+* [[Handle it privately to avoid friction|SkipToPrivate]] /* negative independence + shortcut */
+* [[Defer to the next report cycle; it’s probably minor|DeferIssue]]
+
+---</tw-passagedata><tw-passagedata pid="3" name="StepBack" tags="" position="275,25" size="100,100"><<set $steps += 1>>
+<<set $independence += 1>> /* independence only: mentors demonstrate restraint, PPMC owns next steps */
+You decide to step back and let the PPMC handle the next steps on its own.
+They begin drafting a short message to Company X seeking clarification about the post.
+The mentors watch the thread unfold, offering context only when asked.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="4" name="SkipToPrivate" tags="" position="400,25" size="100,100"><<set $steps += 1>>
+<<set $independence -= 1>> /* mentors bypass open list process */
+<<set $shortcuts += 1>> /* and take a process shortcut */
+You move the discussion off-list to keep things simple.
+Other contributors later feel excluded and confused.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="5" name="ShareGuidelines" tags="" position="525,25" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* policy clarity: linking to official marks and naming guidance */
+
+You share ASF resources:
+- ASF Trademark and Branding Policy: https://www.apache.org/foundation/marks/
+- Podling Naming and Disclaimers: https://incubator.apache.org/policy/incubation.html#naming
+
+The PPMC thanks you for clarifying.
+They decide to ask Company X to correct their post and to review all materials for consistent naming.
+
+* [[Continue to the PPMC’s outreach to Company X|PPMCRequest]]
+
+---</tw-passagedata><tw-passagedata pid="6" name="PPMCRequest" tags="" position="650,25" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* explicit request to fix naming and avoid ASF-style marks */
+<<set $independence += 1>> /* PPMC leads external communication, mentors support */
+
+The PPMC drafts a polite message to Company X:
+"Thank you for promoting the project.
+To help users understand our ASF status, could you please update your announcement to use the full name *Apache Foo (incubating)* and avoid ASF-style logos?
+This helps protect both the ASF and the project’s independence."
+
+The company replies:
+"We’ll look into it, but our campaign is already published. Changing it now would be difficult."
+
+How should the PPMC respond?
+
+* [[Suggest the required changes needed for ASF compliance and offer clarification if useful|SuggestChanges]]
+* [[Seek community consensus before acting|SeekConsensus]] /* independence only */
+* [[Let the mentors take it up privately with the company|PrivateOutreach]]
+* [[Downplay the issue to keep relations smooth|DownplayIssue]] /* negative outcome */
+* [[Escalate to the IPMC for further advice|EscalateIPMC]]
+
+---</tw-passagedata><tw-passagedata pid="7" name="SeekConsensus" tags="" position="775,25" size="100,100"><<set $steps += 1>>
+<<set $independence += 1>> /* independence only: consensus-building before action */
+The PPMC posts back to the dev@ list:
+"The company says revising the press release will be difficult.
+Let’s discuss as a community how to proceed while keeping our independence clear."
+
+Contributors weigh options, and newer members learn ASF principles.
+Even if the company’s correction is delayed, the community grows stronger.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="8" name="DownplayIssue" tags="" position="900,25" size="100,100"><<set $steps += 1>>
+<<set $branding -= 1>> /* appeasement: accuracy suffers */
+<<set $independence -= 1>> /* culture: sends wrong signal about governance */
+<<set $shortcuts += 1>> /* avoidance contributes to repeat issues */
+You tell the company "No problem, just remember next time."
+Branding confusion persists and volunteers feel uneasy.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="9" name="PrivateOutreach" tags="" position="1025,25" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* reinforces correct policy understanding in a direct channel */
+<<set $independence -= 1>> /* mentor-initiated, off-list first contact before PPMC reduces independence */
+
+You and another mentor contact Company X privately, explaining that:
+- The ASF owns all Apache trademarks.
+- Podlings must use "Apache Foo (incubating)" in all public materials.
+- Corporate promotion should highlight participation, not control.
+
+The company representative is defensive but willing to talk:
+"We didn’t mean harm. We thought this was acceptable co-branding."
+
+Next step?
+
+* [[Invite them to join a short joint call with the PPMC to align messaging|JointCall]]
+* [[Suggest the required changes and share correct examples of ASF naming|SuggestChanges]]
+* [[Apologise for raising it publicly and promise to tone it down|OverApologise]] /* negative independence */
+* [[Leave it for now and hope they adjust later|DeferIssue]]
+
+---</tw-passagedata><tw-passagedata pid="10" name="OverApologise" tags="" position="1150,25" size="100,100"><<set $steps += 1>>
+<<set $independence -= 1>> /* mentors over-apologise, weakening governance signal */
+The company accepts, but now treats the project as theirs to manage messaging.
+Some contributors raise concerns privately.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="11" name="JointCall" tags="" position="25,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* live clarification reduces future errors */
+<<set $independence += 1>> /* PPMC present and leading alignment with stakeholders */
+The mentors, company representative, and PPMC meet briefly.
+Clear ASF identification avoids confusion about ownership.
+The company appreciates the clarification and agrees to review its materials.
+
+* [[Continue to suggest specific changes|SuggestChanges]]
+
+---</tw-passagedata><tw-passagedata pid="12" name="PublicCorrection" tags="" position="150,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* public correction increases external accuracy */
+<<set $independence -= 1>> /* mentor-led public correction before PPMC reduces independence */
+
+You post a clarification on the dev@ list and social media:
+"Reminder: The project’s official name is *Apache Foo (incubating)*, a community-led project at the Apache Software Foundation.
+Company X is one of several contributors."
+
+What tone do you take next?
+
+* [[Ask the PPMC to follow up with their own polite request for correction|PPMCRequest]]
+* [[Inform Company X privately afterwards to maintain good relations|PrivateOutreach]]
+* [[Double down publicly, criticising the company|PublicConfront]] /* negative independence */
+
+---</tw-passagedata><tw-passagedata pid="13" name="PublicConfront" tags="" position="275,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* policy right */
+<<set $independence -= 2>> /* culture wrong: adversarial tone hurts community maturity */
+The correction sparks tension and the company withdraws support temporarily.
+Contributors worry about damaged relations.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="14" name="SuggestChanges" tags="" position="400,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* concrete text and mark corrections for compliance */
+<<set $independence += 1>> /* PPMC guides what good looks like, mentors support */
+
+You propose the specific updates required for ASF compliance:
+- Replace "an open source initiative by Company X" with "an open source project at the Apache Software Foundation."
+- Use the full name *Apache Foo (incubating).*
+- Remove ASF-style graphics from company-branded materials.
+
+The company agrees and updates the release. The community appreciates the correction.
+
+Optional approach?
+
+* [[Work through the PPMC to approve wording|PPMCReview]]
+* [[Fix it yourself and send to the company directly|MentorOverride]] /* negative independence */
+* [[Escalate to IPMC|EscalateIPMC]]
+
+---</tw-passagedata><tw-passagedata pid="15" name="MentorOverride" tags="" position="525,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* technically correct content */
+<<set $independence -= 1>> /* mentor takes control, bypassing community */
+The company thanks you personally, but the PPMC feels sidelined.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="16" name="PPMCReview" tags="" position="650,150" size="100,100"><<set $steps += 1>>
+<<set $branding += 1>> /* audit of all public surfaces for correct names and disclaimers */
+<<set $independence += 1>> /* PPMC institutionalises learning with a checklist */
+The PPMC finds that the project’s website footer and README also missed the ASF disclaimer.
+They correct these and add a short internal checklist:
+"Always use the full name 'Apache Foo (incubating)' and ASF disclaimer on public pages."
+
+What next?
+
+* [[Adopt the checklist and close the loop|Debrief]]
+* [[Decide not to bother reviewing since it’s fixed|SkipReview]] /* shortcut */
+
+---</tw-passagedata><tw-passagedata pid="17" name="SkipReview" tags="" position="775,150" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* learning lost, maturity stalls */
+A month later another partner repeats the same mistake.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="18" name="EscalateIPMC" tags="" position="900,150" size="100,100"><<set $steps += 1>>
+<<set $escalation += 1>> /* escalation is sometimes needed but carries a small cost */
+The IPMC advises the PPMC to keep communication courteous but clear, reminding that the ASF’s neutral brand must not appear to be owned by any company.
+They provide sample wording and policy links.
+The company updates their materials, and the incident closes positively.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="19" name="IgnoreIssue" tags="" position="1025,150" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* shortcut: inaction creates external confusion and internal frustration */
+A few weeks later, media outlets describe the project as "Company X’s open source product."
+The IPMC notices during report review and asks for clarification.
+The PPMC must now repair both reputation and community trust.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="20" name="DeferIssue" tags="" position="1150,150" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* shortcut: deferral allows misbranding to persist and repeat */
+By the next quarter, Company X repeats the same mistake.
+Contributors begin to feel their volunteer work is being overshadowed by the company’s marketing.
+The PPMC apologises publicly and posts a clarification using ASF-compliant naming.
+
+* [[Proceed to Debrief|Debrief]]
+
+---</tw-passagedata><tw-passagedata pid="21" name="Debrief" tags="" position="25,275" size="100,100"><<set $total = $branding + $independence - $shortcuts - $escalation>>
+/* $branding = external accuracy
+ $independence = governance maturity
+ $shortcuts = penalties for deferral, avoidance, off-list handling
+ $escalation = small penalty if IPMC used too soon or too often */
+
+<<if $total >= 8>>
+You balanced clarity and collaboration.
+The project corrected branding and reinforced independence.
+
+Outcome: Strong Mentor and PPMC Alignment
+
+<<elseif $total >= 4>>
+The issue was fixed but with friction or delay.
+Compliance improved but community maturity still uneven.
+
+Outcome: Mixed Resolution
+
+<<else>>
+Branding confusion persisted or relations were strained.
+The community learned that tone and timing matter as much as policy.
+
+Outcome: Poor Resolution
+<</if>>
+
+''Reflection Questions''
+
+- How can mentors balance accuracy with diplomacy?
+- When does restraint build more independence than intervention?
+- What signals suggest IPMC escalation is warranted?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/ConflictingMentorAdvice.html b/pages/training/scenarios/ConflictingMentorAdvice.html
new file mode 100644
index 000000000..d6145fa4c
--- /dev/null
+++ b/pages/training/scenarios/ConflictingMentorAdvice.html
@@ -0,0 +1,293 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Conflicting Mentor Advice (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Conflicting Mentor Advice (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-CONFLICTING-MENTOR-ADVICE-FINAL" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" [...]
+<<set $transparency = 0>> /* Visibility and clarity of mentor and podling communication */
+<<set $collaboration = 0>> /* Coordination among mentors, IPMC, and podling */
+<<set $shortcuts = 0>> /* Skipping process or inconsistent mentoring */
+<<set $escalation = 0>> /* Premature or unnecessary escalation */
+<<set $steps = 0>>
+
+You are one of three mentors working with an incubating Apache podling.
+The podling has prepared a release candidate.
+
+Mentor A says: "Looks good—go ahead and call the vote."
+Mentor B says: "Hold on, the license headers need more review."
+
+The podling is now unsure what to do. After some confusion, they post to general@incubator:
+
+> “We’re getting mixed signals from our mentors. Could someone clarify the right process?”
+
+This is a healthy sign — the podling is trying to understand ASF expectations.
+
+What do you do next?
+
+<<link "Thank the podling for asking publicly and clarify policy on-list">><<goto "A">><</link>>
+<<link "Reach out to the other mentors privately to coordinate">><<goto "B">><</link>>
+<<link "Ask the IPMC to handle it for you">><<goto "C">><</link>>
+<<link "Tell the podling to just move forward">><<goto "D">><</link>>
+<<link "Stay silent and let others answer">><<goto "E">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Public clarification supports openness */
+<<set $collaboration += 2>> /* Encourages joint mentor and IPMC understanding */
+
+You reply to the general@ thread:
+
+> “Thanks for raising this. It’s fine to ask here when advice seems inconsistent — this helps everyone learn.
+> Let’s confirm what the Release Policy says and align together.”
+
+Mentors and IPMC members chime in with consistent guidance. The podling feels supported and continues confidently.
+
+<<link "Go to Resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="3" name="B" tags="" position="275,25" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Improves mentor alignment */
+<<set $transparency -= 1>> /* Not yet visible to the podling */
+
+You message the other mentors privately to compare notes.
+Everyone quickly realises the disagreement came from different interpretations of the same rule.
+
+<<link "Post a public summary on dev@ explaining the resolution">><<goto "B1Good">><</link>>
+<<link "Assume the podling will see the outcome later">><<goto "B1Weak">><</link>>
+<<link "Privately tell the podling to follow your version">><<goto "B2Poor">><</link>></tw-passagedata><tw-passagedata pid="4" name="B1Good" tags="" position="400,25" size="100,100"><<set $transparency += 2>> /* Visibility reinforces trust */
+<<set $collaboration += 1>> /* Mentors act in unity */
+
+You post on dev@:
+
+> “Mentors compared notes — we were talking past each other.
+> The podling did the right thing by asking for clarification.”
+
+This strengthens both mentor coordination and the podling’s trust.
+
+<<link "Go to Resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="5" name="B1Weak" tags="" position="525,25" size="100,100"><<set $shortcuts += 1>> /* Fails to close the loop publicly */
+<<set $transparency -= 1>> /* Podling left guessing */
+
+Mentors agree privately but never share the conclusion.
+The podling assumes things are fine but still feels uncertain next time.
+
+<<link "Go to Partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="6" name="B2Poor" tags="" position="650,25" size="100,100"><<set $shortcuts += 2>> /* Mentor bypasses open process */
+<<set $transparency -= 2>> /* Hidden communication */
+
+You message the podling privately:
+> “Just go with my view — the others will catch up.”
+
+Confusion deepens, and IPMC members later intervene to untangle mixed messages.
+
+<<link "Go to Damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="7" name="C" tags="" position="775,25" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation by mentor */
+<<set $collaboration -= 1>> /* Mentors skip coordination */
+
+You reply on general@ asking the IPMC to “step in and decide.”
+An IPMC member replies that mentors should align first and then guide the podling together.
+
+<<link "Acknowledge and regroup with mentors">><<goto "C1Recover">><</link>>
+<<link "Defend your escalation publicly">><<goto "C2Bad">><</link>></tw-passagedata><tw-passagedata pid="8" name="C1Recover" tags="" position="900,25" size="100,100"><<set $collaboration += 1>> /* Learns from premature escalation */
+<<set $transparency += 1>> /* Restores openness */
+
+You follow up:
+> “Thanks — agreed. We’ll align as mentors first, then clarify on dev@.”
+
+The podling learns the right order: mentors coordinate before asking IPMC to rule.
+
+<<link "Go to Partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="9" name="C2Bad" tags="" position="1025,25" size="100,100"><<set $escalation += 1>> /* Adds tension */
+<<set $transparency -= 1>> /* Public noise without resolution */
+
+You continue debating on-list. The IPMC discussion grows confusing and off-topic.
+
+<<link "Go to Damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="10" name="D" tags="" position="1150,25" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 2>> /* Skips mentor alignment */
+<<set $collaboration -= 2>> /* Ignores peer coordination */
+
+You tell the podling:
+> “Don’t overthink it — just start the vote.”
+
+When the other mentor objects publicly, the thread turns tense.
+The podling apologises for “doing the wrong thing.”
+
+<<link "Acknowledge mistake and clarify process">><<goto "D1Recover">><</link>>
+<<link "Defend your advice as correct">><<goto "D2Defensive">><</link>></tw-passagedata><tw-passagedata pid="11" name="D1Recover" tags="" position="25,150" size="100,100"><<set $transparency += 2>> /* Correcting publicly supports learning */
+<<set $collaboration += 1>> /* Restores some trust */
+
+You admit the misstep and share a link to the ASF Release Policy.
+Others appreciate the humility.
+
+<<link "Go to Partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="12" name="D2Defensive" tags="" position="150,150" size="100,100"><<set $transparency -= 1>> /* Defensive tone reduces clarity */
+<<set $collaboration -= 1>> /* Mentor tension remains */
+
+You double down:
+> “We’re wasting time on bureaucracy.”
+
+The IPMC intervenes, reminding mentors that consistency and transparency matter.
+
+<<link "Go to Damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="13" name="E" tags="" position="275,150" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Silence adds ambiguity */
+<<set $collaboration -= 1>> /* Missed mentoring opportunity */
+
+You watch silently while others debate on general@.
+The podling feels ignored.
+
+<<link "Step in late to summarise policy">><<goto "E1Recover">><</link>>
+<<link "Stay silent until IPMC wraps it up">><<goto "E2Fail">><</link>></tw-passagedata><tw-passagedata pid="14" name="E1Recover" tags="" position="400,150" size="100,100"><<set $transparency += 1>> /* Late but helpful clarification */
+<<set $collaboration += 1>> /* Re-engagement improves tone */
+
+You eventually post a short clarification and link to ASF documentation.
+It helps, but the delay cost momentum.
+
+<<link "Go to Partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="15" name="E2Fail" tags="" position="525,150" size="100,100"><<set $shortcuts += 1>> /* Avoidance harms trust */
+<<set $collaboration -= 1>> /* Lost opportunity for guidance */
+
+The IPMC wraps up the thread with general reminders about mentor coordination.
+The podling learns little about how to handle such issues themselves.
+
+<<link "Go to Damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="16" name="Partial" tags="" position="650,150" size="100,100"><<set $steps += 1>>
+
+The mentors eventually aligned, and the podling learned some lessons.
+Still, confusion lingered, slowing community confidence.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="17" name="Resolution" tags="" position="775,150" size="100,100"><<set $steps += 1>>
+
+✅ The mentors reinforced ASF culture through open, coordinated guidance.
+The podling learned that asking questions publicly is healthy and valued.
+The IPMC cited this as an example of positive escalation.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="18" name="Damage" tags="" position="900,150" size="100,100"><<set $steps += 1>>
+
+Mentor inconsistency and private direction caused frustration.
+The podling delayed progress, unsure whom to trust.
+The IPMC reminded mentors that alignment and visibility are key parts of their role.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="19" name="Reflect" tags="" position="1025,150" size="100,100"><<set $total = $transparency + $collaboration - $shortcuts - $escalation>>
+
+You’ve reached the end of the scenario. Let’s reflect.
+
+<<if $total >= 8>>
+You demonstrated ASF-aligned mentoring: open communication, mentor coordination, and positive reinforcement of podling independence.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+You achieved a solid outcome with partial transparency or delayed alignment.
+The podling still benefited, but earlier openness would improve learning.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+You restored some order but with limited visibility or inconsistent guidance.
+The podling might hesitate to ask for clarification next time.
+<</if>>
+
+<<if $total < 0>>
+Mentor misalignment and opaque communication eroded trust.
+More transparent, coordinated mentoring would strengthen ASF culture.
+<</if>>
+
+Reflection Questions:
+- How can mentors maintain consistent understanding of ASF policy?
+- What should a podling do when mentor advice is unclear?
+- When is escalation to the IPMC appropriate or healthy?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/CrossListReleaseVoteConfusion.html b/pages/training/scenarios/CrossListReleaseVoteConfusion.html
new file mode 100644
index 000000000..3d88f2ffb
--- /dev/null
+++ b/pages/training/scenarios/CrossListReleaseVoteConfusion.html
@@ -0,0 +1,319 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Cross-List Release Vote Confusion (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Cross-List Release Vote Confusion (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="1F24C1C2-INCUBATOR-CROSS-LIST-VOTE" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="1 [...]
+<<set $independence = 0>> /* Reflects podling self-governance and community-led behavior */
+<<set $escalation = 0>> /* Tracks unnecessary or premature escalation */
+<<set $shortcuts = 0>> /* Tracks procedural shortcuts or hidden fixes */
+<<set $steps = 0>>
+
+Your podling’s first release appears to have gone well.
+After a week of discussion and testing, the vote on dev@ closed with four +1s and no objections.
+You publish the artifacts and send a cheerful note.
+
+Two days later, an IPMC member writes:
+> "I cannot find this vote on general@incubator. Was it posted there?"
+
+You check the archives and realise it never was.
+
+What do you do?
+
+<<link "Take responsibility and clarify next steps">><<goto "Clarify">><</link>>
+<<link "Defend the process and say the votes were enough">><<goto "Defend">><</link>>
+<<link "Quietly post the missing vote without mentioning the mistake">><<goto "HideIssue">><</link>>
+<<link "Ask mentors what to do before replying">><<goto "ConsultMentor">><</link>></tw-passagedata><tw-passagedata pid="2" name="ConsultMentor" tags="" position="150,25" size="100,100"><<set $steps += 1>><<set $independence += 2>> /* PPMC seeks mentor input before acting */
+
+You message your mentors privately:
+> "We ran a release vote on dev@ but never posted it to general@. What should we do?"
+
+One replies:
+> "Withdraw the release if possible and restart the vote correctly on both lists. Be open about it; mistakes happen."
+
+Another adds:
+> "Transparency builds trust. Announce the correction publicly."
+
+<<link "Follow mentor advice and clarify publicly">><<goto "Clarify">><</link>>
+<<link "Try to fix it quietly anyway">><<goto "HideIssue">><</link>>
+<<link "Ask mentors to quietly post the vote on your behalf">><<goto "AskMentorFix">><</link>>
+<<link "Wait and see if anyone else notices">><<goto "Ignore">><</link>></tw-passagedata><tw-passagedata pid="3" name="AskMentorFix" tags="" position="275,25" size="100,100"><<set $steps += 1>><<set $independence -= 2>><<set $shortcuts += 1>> /* Passes responsibility to mentors */
+
+You suggest:
+> "Could one of you post the vote to general@ for us, just this once?"
+
+A mentor replies kindly but firmly:
+> "Releases must come from the PPMC. We can guide, but not act for you."
+
+The mentor posts a note reminding everyone that mentors advise, not execute.
+This becomes a small teaching moment for other podlings watching the thread.
+
+<<link "Acknowledge and handle it yourself">><<goto "Clarify">><</link>>
+<<link "Stay silent after the reminder">><<goto "Ignore">><</link>></tw-passagedata><tw-passagedata pid="4" name="Ignore" tags="" position="400,25" size="100,100"><<set $steps += 1>><<set $branding -= 2>> /* Violates ASF transparency expectations */
+<<set $shortcuts += 1>> /* Avoids process correction */
+
+You decide to wait.
+Maybe no one else will notice.
+
+A week later, another IPMC member posts on general@ asking why the release is already listed on mirrors without IPMC approval.
+Now several people are involved, and mentors are copied.
+
+<<link "Apologize and explain what happened">><<goto "Clarify">><</link>>
+<<link "Defend your actions again">><<goto "Defend">><</link>></tw-passagedata><tw-passagedata pid="5" name="Clarify" tags="" position="525,25" size="100,100"><<set $steps += 1>><<set $branding += 2>> /* Corrects ASF release policy violation */
+<<set $independence += 1>> /* PPMC-led corrective action */
+
+You reply:
+
+> "Thank you for pointing this out. We will announce that the release was premature,
+> withdraw it if possible, and restart the process correctly on both dev@ and general@."
+
+Mentors appreciate your honesty.
+This approach follows the Incubator Release Policy.
+
+<<link "Restart the vote correctly">><<goto "RestartVote">><</link>>
+<<link "Ask why both lists are needed">><<goto "WhyBoth">><</link>>
+<<link "Request a clear checklist for next time">><<goto "RequestChecklist">><</link>></tw-passagedata><tw-passagedata pid="6" name="Defend" tags="" position="650,25" size="100,100"><<set $steps += 1>><<set $independence -= 1>> /* Defensive, not collaborative */
+
+You reply:
+
+> "We already had four +1s from IPMC members on dev@. That should be enough. Why repeat the vote?"
+
+An IPMC member explains:
+- All podling releases must have a public IPMC vote on general@.
+- Votes on dev@ alone are not sufficient for Incubator releases.
+
+<<link "Reluctantly agree and restart correctly">><<goto "RestartVote">><</link>>
+<<link "Keep arguing about the rule">><<goto "ArgueRule">><</link>>
+<<link "Publish anyway">><<goto "PublishAnyway">><</link>>
+<<link "Escalate to the IPMC list accusing them of bureaucracy">><<goto "EscalateBureaucracy">><</link>></tw-passagedata><tw-passagedata pid="7" name="EscalateBureaucracy" tags="" position="775,25" size="100,100"><<set $steps += 1>><<set $independence -= 2>><<set $escalation += 1>> /* Publicly confrontational escalation */
+
+You forward the thread to general@ with a frustrated tone:
+> "These constant rule checks are blocking progress. The IPMC should trust us to release."
+
+Several IPMC members reply, reminding you that process transparency protects the ASF and the podling alike.
+The tone of the conversation becomes defensive, and mentors privately suggest cooling off before responding again.
+
+<<link "Acknowledge the tone and restart properly">><<goto "Clarify">><</link>>
+<<link "Continue arguing publicly">><<goto "PublicArgue">><</link>></tw-passagedata><tw-passagedata pid="8" name="PublicArgue" tags="" position="900,25" size="100,100"><<set $steps += 1>><<set $branding -= 1>><<set $escalation += 2>> /* Reputational damage through public conflict */
+
+You insist that the IPMC is over-controlling.
+The thread grows long and heated.
+A Board member eventually intervenes and asks the mentors to restore calm.
+The project’s reputation takes a hit.
+
+<<link "Reflect on what happened">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="9" name="HideIssue" tags="" position="1025,25" size="100,100"><<set $steps += 1>><<set $branding -= 2>> /* Conceals policy error */
+<<set $shortcuts += 2>> /* Quiet correction attempt */
+
+You post a new [VOTE] Release 0.1.0 on general@incubator without mentioning that the release is already published.
+
+Another IPMC member discovers the public artifacts and asks for clarification.
+
+<<link "Admit the mistake and correct it openly">><<goto "Clarify">><</link>>
+<<link "Blame confusion on unclear rules">><<goto "BlameIncubator">><</link>></tw-passagedata><tw-passagedata pid="10" name="ArgueRule" tags="" position="1150,25" size="100,100"><<set $steps += 1>><<set $independence -= 1>> /* Opposes oversight process */
+
+You write:
+
+> "These duplicate votes slow us down. If IPMC members are already on dev@, why mirror it?"
+
+Mentors explain that mirroring ensures transparency, archival completeness, and shared oversight across the IPMC.
+It is required by ASF policy.
+
+<<link "Restart correctly">><<goto "RestartVote">><</link>>
+<<link "Ask if the requirement could be changed later">><<goto "AskChange">><</link>></tw-passagedata><tw-passagedata pid="11" name="AskChange" tags="" position="25,150" size="100,100"><<set $steps += 1>><<set $independence += 1>> /* Seeks policy understanding rather than ignoring it */
+
+You ask on general@:
+
+> "Could the policy be updated to allow single-list votes?"
+
+Mentors respond:
+> "No. The rule protects both the ASF and podlings. Once you graduate, your PMC will handle releases independently."
+
+<<link "Restart correctly">><<goto "RestartVote">><</link>></tw-passagedata><tw-passagedata pid="12" name="WhyBoth" tags="" position="150,150" size="100,100"><<set $steps += 1>><<set $branding += 1>> /* Understands ASF process */
+<<set $independence += 1>> /* Recognises shared oversight model */
+
+A mentor explains:
+
+> "Dev@ shows your community can manage a vote.
+> General@ allows the IPMC to confirm ASF compliance.
+> Both steps are mandatory before a release can be official."
+
+<<link "Go to reflection">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="13" name="RequestChecklist" tags="" position="275,150" size="100,100"><<set $steps += 1>><<set $independence += 2>> /* Builds community process maturity */
+
+You post to dev@:
+
+> "Let’s add the two-list vote process to our release checklist so we don’t miss it again."
+
+A mentor links to the Incubator Release Policy and suggests storing the checklist in the project repo.
+
+<<link "Go to reflection">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="14" name="PublishAnyway" tags="" position="400,150" size="100,100"><<set $steps += 1>><<set $branding -= 2>> /* Violates ASF policy by premature distribution */
+<<set $shortcuts += 2>> /* Publishes without oversight */
+
+You continue to publish without IPMC approval.
+Within days, the IPMC requests the release be withdrawn from mirrors.
+Your next podling report notes a "process compliance issue."
+
+<<link "Withdraw and restart with a public correction">><<goto "Clarify">><</link>>
+<<link "Complain about slow Incubator rules">><<goto "BlameIncubator">><</link>></tw-passagedata><tw-passagedata pid="15" name="BlameIncubator" tags="" position="525,150" size="100,100"><<set $steps += 1>><<set $independence -= 1>> /* Shifts blame instead of taking responsibility */
+
+You write:
+
+> "These rules are confusing and slow. We just want to release software."
+
+Mentors remind you that incubation is about transparency and shared learning.
+You agree to follow policy, but trust has dipped slightly.
+
+<<link "Restart correctly">><<goto "RestartVote">><</link>>
+<<link "Reflect on what happened">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="16" name="RestartVote" tags="" position="650,150" size="100,100"><<set $steps += 1>><<set $branding += 2>> /* Correctly applies two-list voting rule */
+<<set $independence += 1>> /* PPMC leads public correction and restart */
+
+You announce that the earlier release was premature, withdraw it if possible, and restart correctly:
+
+1. [VOTE] Release 0.1.0 on dev@
+2. After it passes, mirror the thread to general@incubator
+3. Announce the combined result when the IPMC vote passes
+
+This complies fully with the Incubator Release Policy.
+Mentors thank you for your openness.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="17" name="Reflect" tags="" position="775,150" size="100,100"><<set $steps += 1>>
+<<set $total = $branding + $independence - $shortcuts - $escalation>> /* Simplified score with explicit ASF policy and governance alignment */
+
+You have reached the end of the scenario. Let’s reflect.
+
+Your path summary:
+
+<<if $total >= 4>>
+You modelled ASF-aligned practice: compliance with release policy and community-led correction.
+The project strengthened its credibility through openness and independence.
+<</if>>
+
+<<if $total >= 2 and $total < 4>>
+You corrected the issue but needed more openness or shared ownership.
+Some steps were reactive rather than proactive.
+<</if>>
+
+<<if $total >= 0 and $total < 2>>
+You fixed the issue but with limited visibility.
+Future releases may face similar confusion without stronger process awareness.
+<</if>>
+
+<<if $total < 0>>
+Your handling reduced community trust and visibility.
+Greater alignment with ASF policy and PPMC accountability is needed.
+<</if>>
+
+''Reflection Questions''
+
+- How do ASF release vote requirements reinforce both policy compliance and community independence?
+- When should mentors advise versus lead?
+- How does transparent correction strengthen podling reputation during incubation?
+- What checklist or automation could help prevent similar mistakes?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/CulturalMisunderstanding.html b/pages/training/scenarios/CulturalMisunderstanding.html
new file mode 100644
index 000000000..aa0cd1baa
--- /dev/null
+++ b/pages/training/scenarios/CulturalMisunderstanding.html
@@ -0,0 +1,319 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Cultural Misunderstanding (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Cultural Misunderstanding (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-CULTURAL-MISUNDERSTANDING" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size= [...]
+<<set $transparency = 0>> /* Open and visible discussion of communication issues */
+<<set $collaboration = 0>> /* Shared responsibility for community tone and mentoring */
+<<set $shortcuts = 0>> /* Avoiding silence, avoidance, or private assumptions */
+<<set $escalation = 0>> /* Unnecessary or premature escalation */
+<<set $steps = 0>>
+
+You are a mentor observing a subtle communication issue on an incubating Apache project.
+
+One contributor’s short, direct comments, common in their home culture, are being interpreted as abrupt or rude.
+Others begin avoiding review requests from them. The contributor, in turn, feels unfairly judged.
+Tension quietly builds across the mailing list.
+
+What do you do?
+
+<<link "Address it publicly, reminding everyone to assume good faith">><<goto "A">><</link>>
+<<link "Reach out privately to the direct contributor">><<goto "B">><</link>>
+<<link "Wait and see if it resolves naturally">><<goto "C">><</link>>
+<<link "Ask another mentor to intervene instead">><<goto "D">><</link>>
+<<link "Start a general discussion about communication norms">><<goto "E">><</link>>
+<<link "Propose a lightweight review template to guide tone">><<goto "F">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Clear, visible reminder to whole list */
+<<set $collaboration += 1>> /* Encourages shared reflection */
+
+You post on the list:
+
+> "Let’s remember that tone can vary across cultures. Please assume good faith and focus on technical substance."
+
+Some appreciate the reminder. The direct contributor stays quiet at first.
+
+<<link "Follow up privately with that person">><<goto "A1Good">><</link>>
+<<link "Consider the issue closed after your post">><<goto "A1Weak">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Good" tags="" position="275,25" size="100,100"><<set $collaboration += 1>> /* Builds relationship and trust */
+<<set $transparency += 1>> /* Reinforces openness with empathy */
+
+You message the contributor privately to explain that your note was not a personal criticism.
+They respond gratefully and begin adjusting tone slightly.
+Other contributors resume engaging more positively.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="4" name="A1Weak" tags="" position="400,25" size="100,100"><<set $shortcuts += 1>> /* Missed follow through */
+<<set $collaboration -= 1>> /* Trust gap remains */
+
+The reminder helps temporarily, but the contributor feels singled out.
+Tension reappears weeks later in another thread.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="5" name="B" tags="" position="525,25" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 2>> /* Direct mentoring support */
+<<set $transparency -= 1>> /* Private approach limits shared awareness */
+
+You write privately to the contributor:
+
+> "I have noticed some friction that may stem from cultural style, not intent. Could we talk about it?"
+
+They appreciate your note and explain their cultural context.
+
+<<link "Summarise learning publicly, without naming them">><<goto "B1Good">><</link>>
+<<link "Keep the matter private">><<goto "B1Weak">><</link>></tw-passagedata><tw-passagedata pid="6" name="B1Good" tags="" position="650,25" size="100,100"><<set $transparency += 2>> /* Turns private insight into shared lesson */
+<<set $collaboration += 1>> /* Encourages community understanding */
+
+You post:
+
+> "We discussed how tone can differ across cultures. Let’s document shared communication norms."
+
+The thread sparks thoughtful responses and improved mutual understanding.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="7" name="B1Weak" tags="" position="775,25" size="100,100"><<set $shortcuts += 1>> /* Improvement but not shared */
+<<set $collaboration += 0>> /* Limited wider impact */
+
+The contributor adjusts, but others still misinterpret them.
+Without community reflection, assumptions persist.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="8" name="C" tags="" position="900,25" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* Avoidance leaves issue festering */
+<<set $transparency -= 1>> /* No visible mentoring action */
+<<set $collaboration -= 1>> /* Silence erodes trust */
+
+You decide not to intervene, assuming it will settle on its own.
+Instead, quieter contributors stop reviewing that person’s work.
+
+<<link "Later escalate to general@ when it worsens">><<goto "C1Escalate">><</link>>
+<<link "Finally raise it privately with mentors">><<goto "C1Late">><</link>></tw-passagedata><tw-passagedata pid="9" name="C1Escalate" tags="" position="1025,25" size="100,100"><<set $escalation += 2>> /* Overdue escalation damages local trust */
+<<set $collaboration -= 1>> /* PPMC ownership bypassed */
+
+You escalate publicly to the Incubator list.
+Observers note it could have been handled locally earlier.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="10" name="C1Late" tags="" position="1150,25" size="100,100"><<set $collaboration += 1>> /* Late correction but helpful */
+<<set $transparency += 1>> /* Becomes learning moment */
+
+You raise the issue privately with mentors after noticing long term harm.
+They guide you to reopen discussion publicly in a neutral tone.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="11" name="D" tags="" position="25,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration -= 1>> /* Passing responsibility weakens mentoring role */
+<<set $shortcuts += 1>> /* Delegating instead of guiding directly */
+
+You ask another mentor to handle it.
+They reply weeks later, saying the issue faded, but the contributor is now less active.
+
+<<link "Re engage and invite them back">><<goto "D1Good">><</link>>
+<<link "Leave things as they are">><<goto "D1Weak">><</link>></tw-passagedata><tw-passagedata pid="12" name="D1Good" tags="" position="150,150" size="100,100"><<set $collaboration += 2>> /* Restores participation */
+<<set $transparency += 1>> /* Openly encourages return */
+
+You post a neutral note thanking them for past reviews and inviting continued input.
+The contributor rejoins, slightly more cautious but appreciated.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="13" name="D1Weak" tags="" position="275,150" size="100,100"><<set $collaboration -= 1>> /* Inaction leads to contributor loss */
+
+The contributor quietly disappears.
+Future reviews slow, and bus factor increases.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="14" name="E" tags="" position="400,150" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Public shared learning */
+<<set $collaboration += 2>> /* Builds empathy across team */
+
+You start a general thread:
+
+> "Let’s talk about how communication styles differ around the world. How can we keep feedback constructive and respectful?"
+
+Several contributors share experiences.
+The previously frustrated member joins and explains their intent.
+Others thank them for clarifying.
+
+<<link "Encourage documenting communication norms">><<goto "E1Good">><</link>>
+<<link "Let the discussion fade after initial success">><<goto "E1Neutral">><</link>></tw-passagedata><tw-passagedata pid="15" name="E1Good" tags="" position="525,150" size="100,100"><<set $collaboration += 1>> /* Shared learning captured */
+<<set $transparency += 1>> /* Adds lasting visibility */
+
+The podling adds a short communication norms section to its wiki, capturing diverse expectations.
+Trust improves sustainably.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="16" name="E1Neutral" tags="" position="650,150" size="100,100"><<set $shortcuts += 1>> /* No follow up documentation */
+<<set $collaboration += 0>> /* Gains fade over time */
+
+The discussion helps for now, but without notes or reminders, old habits slowly return.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="17" name="F" tags="" position="775,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Provides structure for shared expectations */
+<<set $transparency += 1>> /* Makes desired tone visible in the process */
+
+You propose a lightweight pull request review template with prompts such as:
+- Greet the contributor and thank them for the PR.
+- Focus on specifics to improve.
+- Offer one positive observation.
+
+The team is open to trying it.
+
+<<link "Pilot the template for two weeks and solicit feedback on list">><<goto "F1Good">><</link>>
+<<link "Adopt the template immediately without discussion">><<goto "F1Weak">><</link>></tw-passagedata><tw-passagedata pid="18" name="F1Good" tags="" position="900,150" size="100,100"><<set $collaboration += 1>> /* Co design and opt in build buy in */
+<<set $transparency += 1>> /* Public feedback loop on the pilot */
+
+The pilot runs and you collect feedback in a summary note.
+Minor tweaks are adopted and the template becomes optional guidance.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="19" name="F1Weak" tags="" position="1025,150" size="100,100"><<set $shortcuts += 1>> /* Process imposed without consensus */
+<<set $collaboration -= 1>> /* Reduces local ownership */
+
+Some contributors feel process was dropped on them.
+Compliance is inconsistent and resentment lingers.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="20" name="Damage" tags="" position="1150,150" size="100,100"><<set $steps += 1>>
+
+Because the misunderstanding was never surfaced constructively, quiet frustration lingers.
+The contributor disengages, and the podling loses diversity of perspective.
+The IPMC later reminds mentors to help projects normalise cross cultural discussion early.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="21" name="Partial" tags="" position="25,275" size="100,100"><<set $steps += 1>>
+
+The project resolves the issue only partially.
+Communication improves for a while, but the deeper lesson about cultural diversity is not fully internalised.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="22" name="Resolution" tags="" position="150,275" size="100,100"><<set $steps += 1>>
+
+The project handled the cultural misunderstanding with transparency and empathy.
+
+- The PPMC surfaced the issue early.
+- Mentors framed it as learning, not blame.
+- The community documented shared tone expectations.
+
+Trust and inclusivity strengthened.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="23" name="Reflect" tags="" position="275,275" size="100,100"><<set $total = $transparency + $collaboration - $shortcuts - $escalation>>
+
+You have reached the end of the scenario. Let’s reflect.
+
+<<if $total >= 8>>
+You modelled ASF aligned mentoring: open discussion, empathy across cultures, and visible learning.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+You supported cultural understanding with moderate openness. A few shortcuts reduced sustained learning.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+You managed the tension but missed deeper mentoring opportunities. Long term inclusion remains fragile.
+<</if>>
+
+<<if $total < 0>>
+Silence or escalation reduced trust. Greater empathy and earlier public reflection would have helped the project grow.
+<</if>>
+
+Reflection questions
+
+- What early signals of misunderstanding could mentors watch for?
+- How might you frame tone discussions as cultural learning rather than blame?
+- How can projects document and revisit shared communication norms over time?
+- How does this connect to the ASF value of "Community over Code"?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/LazyConsensusGoneWrong.html b/pages/training/scenarios/LazyConsensusGoneWrong.html
new file mode 100644
index 000000000..85943e104
--- /dev/null
+++ b/pages/training/scenarios/LazyConsensusGoneWrong.html
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Lazy Consensus Gone Wrong (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Lazy Consensus Gone Wrong (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-LAZY-CONSENSUS" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="100,100">/ [...]
+<<set $transparency = 0>> /* Clear communication, open discussion, and visible decisions */
+<<set $collaboration = 0>> /* PPMC-led governance, mentor guidance, and constructive teamwork */
+<<set $shortcuts = 0>> /* Hidden fixes, opacity, or process skipping */
+<<set $escalation = 0>> /* Premature or unnecessary public escalation */
+<<set $steps = 0>>
+
+You are a mentor working with an incubating Apache project.
+
+The project starts a thread on dev@:
+
+''[DISCUSS] Proposal: Merge new analytics module''
+
+> "If there are no objections within 72 hours, we’ll merge the new analytics module into the main codebase."
+
+After three days, no one replies. The merge happens and contributors are pleased.
+
+Two days later, a mentor who had been travelling objects, saying the merge introduces //licensing complications// that could affect redistribution.
+
+The mentor feels ignored. The project feels blindsided.
+
+A debate begins: ''Is lazy consensus still valid once the action is complete?''
+
+What do you do?
+
+<<link "Defend the project">><<goto "A">><</link>>
+<<link "Pause and acknowledge the concern">><<goto "B">><</link>>
+<<link "Take it offline">><<goto "C">><</link>>
+<<link "Escalate immediately">><<goto "D">><</link>>
+<<link "Ask clarifying questions first">><<goto "E">><</link>>
+<<link "Stay silent and watch what happens">><<goto "FPassive">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Procedural defensiveness harms clarity */
+<<set $collaboration -= 1>> /* Reduces trust and shared ownership */
+
+You defend the project:
+
+> "The 72-hour period passed with no objections. The decision stands."
+
+A committer replies:
+
+> "So objections don’t count if someone’s away for a few days?"
+
+The discussion heats up.
+
+<<link "Double down on procedure">><<goto "A1Hard">><</link>>
+<<link "Acknowledge the misunderstanding and reset the tone">><<goto "A1Soft">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Hard" tags="" position="275,25" size="100,100"><<set $transparency -= 1>> /* Further rigidity lowers openness */
+<<set $collaboration -= 1>> /* Ignores collaborative correction */
+
+The discussion grows tense. Other mentors note that lazy consensus can be revisited if a valid concern arises.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="4" name="A1Soft" tags="" position="400,25" size="100,100"><<set $collaboration += 2>> /* Encourages collaboration and learning */
+<<set $transparency += 1>> /* Demonstrates calm and open ASF tone */
+
+You post:
+
+> "Let’s treat this as a learning opportunity. Clarity matters more than blame."
+
+The tone improves. The project is open to revisiting the merge.
+
+<<link "Go to re-evaluation">><<goto "Reeval">><</link>></tw-passagedata><tw-passagedata pid="5" name="B" tags="" position="525,25" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 2>> /* Invites open review and shared governance */
+
+You pause and acknowledge the concern:
+
+> "This raises an important point. Let’s revisit and confirm consensus before deciding whether to revert."
+
+The tension cools and contributors start analysing the dependency.
+
+<<link "Suggest a temporary revert while discussion continues">><<goto "B1Good">><</link>>
+<<link "Keep the merge and promise to fix it later">><<goto "B1Weak">><</link>>
+<<link "Invite other mentors or license experts to weigh in">><<goto "B2Consult">><</link>></tw-passagedata><tw-passagedata pid="6" name="B1Good" tags="" position="650,25" size="100,100"><<set $transparency += 2>> /* Visible correction reinforces trust */
+<<set $collaboration += 2>> /* Collaborative re-evaluation improves health */
+
+The project reverts temporarily and continues the discussion. Transparency improves.
+
+<<link "Go to re-evaluation">><<goto "Reeval">><</link>></tw-passagedata><tw-passagedata pid="7" name="B1Weak" tags="" position="775,25" size="100,100"><<set $shortcuts += 1>> /* Defers clarity and leaves unresolved tension */
+<<set $transparency -= 1>> /* Ambiguity persists on-list */
+<<set $collaboration -= 1>> /* Missed chance for shared correction */
+
+You decide to keep the merge and "deal with it later."
+The issue fades until it reappears when the project later proposes another major code integration, and contributors again disagree about how to handle lazy consensus and objections.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="8" name="B2Consult" tags="" position="900,25" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Visible request for wider input */
+<<set $collaboration += 1>> /* Inclusive, but PPMC retains ownership */
+
+You invite other mentors and relevant ASF lists to share insight.
+The discussion expands, and the podling learns how to seek help without losing ownership.
+
+<<link "Go to re-evaluation">><<goto "Reeval">><</link>></tw-passagedata><tw-passagedata pid="9" name="C" tags="" position="1025,25" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Moves discussion off public list */
+
+You take the discussion offline with mentors and a few contributors.
+Private messages ease tensions, but no update is posted to the list.
+
+<<link "Post a public summary afterward">><<goto "C1Good">><</link>>
+<<link "Leave the private fix unreported">><<goto "C1Bad">><</link>></tw-passagedata><tw-passagedata pid="10" name="C1Good" tags="" position="1150,25" size="100,100"><<set $transparency += 1>> /* Restores some visibility with public summary */
+<<set $collaboration += 1>> /* Partial recovery via later openness */
+
+You summarise the offline discussion publicly:
+
+> "A licensing concern was raised and discussed privately; here’s the plan moving forward."
+
+Contributors appreciate the update, but some note decisions should ideally stay on-list.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="11" name="C1Bad" tags="" position="25,150" size="100,100"><<set $transparency -= 2>> /* No transparency follow-up */
+<<set $shortcuts += 1>> /* Shortcut via private fix */
+
+Without a summary, contributors are left confused by unseen changes.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="12" name="D" tags="" position="150,150" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation to IPMC */
+<<set $collaboration -= 1>> /* Reduces PPMC independence */
+
+You escalate to general@incubator.apache.org.
+IPMC members remind you that mentors should help the ''PPMC'' self-correct first, and escalation is only appropriate when the project cannot resolve issues internally.
+
+<<link "Acknowledge the premature escalation and refocus discussion">><<goto "D1Good">><</link>>
+<<link "Continue debating publicly">><<goto "D1Bad">><</link>></tw-passagedata><tw-passagedata pid="13" name="D1Good" tags="" position="275,150" size="100,100"><<set $collaboration += 1>> /* Restores project ownership slowly */
+
+You redirect the discussion back to the project list and help them handle it locally.
+The project learns, but trust will take time to rebuild.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="14" name="D1Bad" tags="" position="400,150" size="100,100"><<set $escalation += 1>> /* Adds tension and public noise */
+<<set $collaboration -= 1>> /* Weakens shared problem solving */
+
+The discussion drags on publicly; the project feels exposed.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="15" name="E" tags="" position="525,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Mentoring through inquiry */
+
+You ask clarifying questions:
+
+> "Can you tell us more about the licensing concern before we decide next steps?"
+
+The mentor explains it is an incompatible dependency.
+
+<<link "Encourage open review on the list">><<goto "E1Good">><</link>>
+<<link "Quietly remove the dependency yourself">><<goto "E1Bad">><</link>>
+<<link "Quietly fix it yourself to save time">><<goto "E2Fix">><</link>></tw-passagedata><tw-passagedata pid="16" name="E1Good" tags="" position="650,150" size="100,100"><<set $transparency += 1>> /* Open review improves visibility */
+<<set $collaboration += 1>> /* Shared learning but limited closure */
+
+You guide an open technical review. Consensus builds around facts, but closure is thin.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="17" name="E1Bad" tags="" position="775,150" size="100,100"><<set $transparency -= 1>> /* Hidden fix reduces openness */
+<<set $shortcuts += 2>> /* Bypasses process learning */
+
+You fix the issue quietly, but others never learn what happened.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="18" name="E2Fix" tags="" position="900,150" size="100,100"><<set $shortcuts += 2>> /* Mentor bypasses community process */
+<<set $collaboration -= 2>> /* Undermines podling independence */
+<<set $transparency -= 1>> /* Hidden mentoring action */
+
+You replace the dependency yourself and commit directly.
+The problem vanishes, but the podling learns nothing and ownership blurs.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="19" name="FPassive" tags="" position="1025,150" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Lack of visible guidance */
+<<set $collaboration -= 1>> /* Missed mentoring opportunity */
+
+You decide to observe rather than intervene.
+The project debates internally, but frustration builds as no one clarifies lazy consensus expectations.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="20" name="Reeval" tags="" position="1150,150" size="100,100"><<set $steps += 1>>
+
+The project reopens the discussion publicly.
+A contributor confirms the dependency license is incompatible.
+They agree to revert temporarily and continue discussion until resolved.
+
+''Reflection prompt:''
+What could you do to help the project capture this learning for future proposals?
+
+<<link "Encourage them to document process improvements">><<goto "AltGood1">><</link>>
+<<link "Suggest they summarise in the next podling report">><<goto "AltGood2">><</link>>
+<<link "Assume they’ve learned and move on">><<goto "AltNeutral">><</link>></tw-passagedata><tw-passagedata pid="21" name="AltGood1" tags="" position="25,275" size="100,100"><<set $transparency += 1>> /* Publicly documents learning */
+<<set $collaboration += 1>> /* Strengthens PPMC ownership */
+
+They post a short message documenting lessons learned about lazy consensus.
+Other podlings later reference it.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="22" name="AltGood2" tags="" position="150,275" size="100,100"><<set $collaboration += 1>> /* Captures learning via report summary */
+
+They agree to mention the learning experience in the next podling report.
+Good reflection, but it will not reach new contributors immediately.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="23" name="AltNeutral" tags="" position="275,275" size="100,100"><<set $shortcuts += 1>> /* Fails to record lessons for others */
+
+You decide not to follow up. The lesson risks being forgotten.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="24" name="Damage" tags="" position="400,275" size="100,100"><<set $steps += 1>>
+
+Because communication was incomplete, confusion persists.
+Some contributors disengage. The next podling report mentions a "process misunderstanding".
+The ''IPMC'' reminds the ''PPMC'' to keep decisions visible and to clarify closure on-list.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="25" name="Partial" tags="" position="525,275" size="100,100"><<set $steps += 1>>
+
+The unresolved or poorly documented handling of lazy consensus resurfaces later when the project discusses integrating a new feature.
+Community members recall the earlier incident and ask for clearer decision-making guidance.
+The confusion becomes a reminder of the need for consistent mentoring.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="26" name="Resolution" tags="" position="650,275" size="100,100"><<set $steps += 1>>
+
+✅ The project handled the issue transparently and learned from it.
+
+* Use clearer lazy-consensus proposals.
+* Post short closure summaries on-list.
+* Treat late concerns with respect instead of defensiveness.
+
+Mentors highlight this case as an example of learning through practice.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="27" name="Reflect" tags="" position="775,275" size="100,100"><<set $total = $transparency + $collaboration - $shortcuts - $escalation>>
+
+You have reached the end of the scenario. Let’s reflect.
+
+<<if $total >= 8>>
+You modelled ASF-aligned practice: open communication, shared learning, and PPMC-led governance.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+You balanced transparency and pragmatism. A few shortcuts or escalations reduced the learning impact, but the outcome was solid overall.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+You resolved the issue, but with limited visibility or collaboration. The project might repeat similar confusion later.
+<</if>>
+
+<<if $total < 0>>
+Your approach reduced community trust. Greater transparency and patience would have helped the project grow in ASF culture.
+<</if>>
+
+''Reflection Questions''
+
+- What decisions improved or harmed transparency?
+- How might a mentor help the project document lessons without taking control?
+- What could the PPMC include in its next podling report to show learning?
+- How does this scenario connect to the ASF principle of ''community over code''?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/MentorDependency.html b/pages/training/scenarios/MentorDependency.html
new file mode 100644
index 000000000..8e58fdfdf
--- /dev/null
+++ b/pages/training/scenarios/MentorDependency.html
@@ -0,0 +1,459 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>Mentor Dependency (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="Mentor Dependency (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-MENTOR-DEPENDENCY-REV5" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="100,100">/ [...]
+<<set $transparency = 0>> /* Clear communication, open discussion, and visible learning */
+<<set $collaboration = 0>> /* PPMC-led governance, mentor guidance, and teamwork */
+<<set $shortcuts = 0>> /* Mentor overreach, hidden fixes, or doing instead of teaching */
+<<set $escalation = 0>> /* Premature escalation to the IPMC or ASF level */
+<<set $steps = 0>>
+
+You are a mentor working with an incubating Apache project.
+
+After more than a year in incubation, the podling still depends on mentors to drive votes, file reports, and interpret ASF rules.
+When mentors pause activity, the project stalls. You begin to wonder if your help has become dependency.
+
+What do you do?
+
+<<link "Handle the backlog yourself to keep momentum">><<goto "A">><</link>>
+<<link "Invite the PPMC to lead the next governance task">><<goto "B">><</link>>
+<<link "Step back quietly and observe what happens">><<goto "C">><</link>>
+<<link "Escalate concerns to general@incubator">><<goto "D">><</link>>
+<<link "Ask open questions that draw out volunteers">><<goto "E">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* Mentor doing the work instead of guiding reduces growth */
+<<set $collaboration -= 1>> /* Removes community ownership */
+
+You step in and do the work: calling votes, writing reports, and answering ASF questions.
+Everything gets done, but only because you did it.
+
+<<link "Continue doing it for efficiency">><<goto "A1Hard">><</link>>
+<<link "Use this to reset and then delegate publicly">><<goto "A1Soft">><</link>>
+<<link "Wait for consensus without prompting (delay)">><<goto "A1Avoid">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Hard" tags="" position="275,25" size="100,100"><<set $shortcuts += 2>> /* Repeated overreach compounds dependency */
+<<set $collaboration -= 1>> /* Further reduces shared governance */
+
+The project remains dependent on mentors. Others assume you will handle governance next time too.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="4" name="A1Soft" tags="" position="400,25" size="100,100"><<set $collaboration += 1>> /* Reintroduces PPMC participation */
+<<set $transparency += 1>> /* Publicly visible pivot to mentoring mode */
+
+You post to the list:
+"We have cleared the backlog, but going forward, the PPMC should lead reports and votes. Mentors will review only."
+
+<<link "Follow through by assigning tasks openly (rotate)">><<goto "Rotate">><</link>>
+<<link "Announce rotation but do not follow up">><<goto "Complacency">><</link>>
+<<link "Assign tasks rigidly (over-correct)">><<goto "OverCorrectA">><</link>>
+<<link "Follow through with public check-ins and recognition">><<goto "FollowThrough">><</link>></tw-passagedata><tw-passagedata pid="5" name="A1Avoid" tags="" position="525,25" size="100,100"><<set $transparency -= 1>> /* No explicit prompt to move forward */
+<<set $collaboration -= 1>> /* Team left passive */
+<<set $shortcuts += 1>> /* Indecision becomes a shortcut to inaction */
+
+You claim to be waiting for consensus, but never prompt or structure the decision.
+Threads drift and nothing happens.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="6" name="OverCorrectA" tags="" position="650,25" size="100,100"><<set $transparency += 1>> /* Clear intent but tone rigid */
+<<set $collaboration += 0>> /* Directives replace dialogue */
+<<set $shortcuts += 1>> /* Overly controlling mentoring */
+
+You publicly assign tasks forcefully:
+"Each committer must handle one report this month."
+Progress resumes, but engagement feels coerced.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="7" name="Complacency" tags="" position="775,25" size="100,100"><<set $transparency += 1>> /* You did announce a plan */
+<<set $collaboration += 0>> /* No follow-through to build shared ownership */
+<<set $shortcuts += 1>> /* Good intention without execution */
+
+You announced rotation but never followed up.
+Deadlines slip again and uncertainty returns.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="8" name="FollowThrough" tags="" position="900,25" size="100,100"><<set $transparency += 2>> /* Follow-up visible on-list */
+<<set $collaboration += 1>> /* Recognition reinforces PPMC leadership */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+You check in after the next report:
+"Great job leading this round - let us rotate again next month."
+The team responds positively and begins planning the next rotation themselves.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="9" name="B" tags="" position="1025,25" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Encourages shared action between mentor and PPMC */
+<<set $transparency += 1>> /* Visible invitation to contribute */
+
+You invite PPMC members to take on the next report or vote.
+They agree hesitantly and ask for guidance.
+
+<<link "Coach them privately so they do not make mistakes">><<goto "CoachPrivate">><</link>>
+<<link "Coach them publicly so everyone learns">><<goto "CoachPublic">><</link>></tw-passagedata><tw-passagedata pid="10" name="CoachPrivate" tags="" position="1150,25" size="100,100"><<set $collaboration += 1>> /* Builds 1:1 confidence */
+<<set $transparency -= 1>> /* Learning not visible to wider community */
+
+They succeed quietly, but most contributors never see the process.
+Next time, they ask again privately.
+
+<<link "Post a public follow-up explaining the steps">><<goto "Summarise">><</link>>
+<<link "Let it continue privately">><<goto "Damage">><</link>>
+<<link "Write drafts privately for them to copy (shadow-coach)">><<goto "ShadowCoach">><</link>></tw-passagedata><tw-passagedata pid="11" name="ShadowCoach" tags="" position="25,150" size="100,100"><<set $transparency -= 1>> /* Ghost-writing hides learning */
+<<set $collaboration -= 1>> /* Ownership shifts back to mentor */
+<<set $shortcuts += 2>> /* Doing the work for others */
+
+You draft the report and emails privately to help.
+They copy, paste, and ask you again next time.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="12" name="CoachPublic" tags="" position="150,150" size="100,100"><<set $collaboration += 2>> /* Broadly builds PPMC capability */
+<<set $transparency += 1>> /* Demonstrates open mentoring practice */
+
+You guide them on-list, showing how to structure [DISCUSS] and [VOTE] threads.
+Other contributors follow along and gain confidence.
+
+<<link "Propose rotating tasks among members">><<goto "Rotate">><</link>>
+<<link "Over-teach and correct every detail (dominate thread)">><<goto "OverCorrectB">><</link>>
+<<link "PPMC proposes their own rotation">><<goto "PeerRotation">><</link>>
+<<link "Formalise a monthly rotation calendar">><<goto "SteadyCycle">><</link>></tw-passagedata><tw-passagedata pid="13" name="OverCorrectB" tags="" position="275,150" size="100,100"><<set $transparency += 1>> /* Lots of visible activity */
+<<set $collaboration += 0>> /* Your voice dominates; others withdraw */
+<<set $shortcuts += 2>> /* Teaching becomes directing */
+
+Your explanations flood the thread and you correct every message.
+People stop participating, waiting for your approval.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="14" name="PeerRotation" tags="" position="400,150" size="100,100"><<set $transparency += 2>> /* Community announces plan on-list */
+<<set $collaboration += 2>> /* Self-organised rotation shows independence */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+PPMC members propose a rotation and volunteers sign up without prompting.
+Mentors acknowledge progress and stay in review mode.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="15" name="SteadyCycle" tags="" position="525,150" size="100,100"><<set $transparency += 2>> /* Calendar and ownership are public */
+<<set $collaboration += 1>> /* Predictable shared responsibility */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+The community publishes a monthly rotation calendar with clear owners and dates.
+Mentors monitor progress but do not steer day-to-day work.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="16" name="Summarise" tags="" position="650,150" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Publicly documents the process for others */
+<<set $collaboration += 1>> /* Reinforces shared knowledge and confidence */
+
+You post a short summary explaining how to run [DISCUSS] and [VOTE] threads.
+Others begin to learn by example.
+
+<<link "Propose rotation">><<goto "Rotate">><</link>></tw-passagedata><tw-passagedata pid="17" name="Rotate" tags="" position="775,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 2>> /* Broad ownership through distributed responsibility */
+<<set $transparency += 1>> /* Visible, predictable governance on-list */
+
+You suggest rotating report and vote leadership among PPMC members.
+Mentors stay in review mode, helping the PPMC understand ASF policy rather than applying it for them.
+
+After a few cycles, the community starts to act independently.
+
+<<link "Recognise this as progress">><<goto "Resolution">><</link>>
+<<link "Rotation narrows to a few people (burnout risk)">><<goto "Burnout">><</link>>
+<<link "Arguments over fairness stall rotation">><<goto "Fragmentation">><</link>></tw-passagedata><tw-passagedata pid="18" name="Burnout" tags="" position="900,150" size="100,100"><<set $transparency += 1>> /* Visible fatigue signs on-list */
+<<set $collaboration += 0>> /* Others are not stepping up to share load */
+<<set $shortcuts += 2>> /* Sustainability shortcut: same people do all work */
+
+A few members rotate reports repeatedly. Others stay quiet.
+Work gets done, but participation narrows and burnout grows.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="19" name="Fragmentation" tags="" position="1025,150" size="100,100"><<set $transparency += 1>> /* Disagreement is on-list */
+<<set $collaboration -= 2>> /* Team cohesion drops */
+<<set $shortcuts += 1>> /* Process focus over facilitation */
+
+Members argue over who should take which rotation slot.
+Progress stalls while mentors remain silent, expecting the PPMC to self-correct.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="20" name="Resolution" tags="" position="1150,150" size="100,100"><<set $transparency += 1>> /* Visible closure and accountability */
+<<set $collaboration += 2>> /* PPMC demonstrates stable self-governance */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+The project demonstrates growing independence.
+PPMC members lead governance openly; mentors support, not direct.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="21" name="Damage" tags="" position="25,275" size="100,100"><<set $shortcuts += 1>> /* Mentor-led pattern continues */
+<<set $transparency += 0>> /* Visibility low but not hidden */
+<<set $collaboration -= 1>> /* Dependency persists */
+
+The podling remains mentor-driven.
+The IPMC flags lack of independence in its next review.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="22" name="C" tags="" position="150,275" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Silence reduces clarity and trust */
+<<set $collaboration -= 1>> /* Team becomes passive without guidance */
+
+You quietly stop replying to see what happens.
+After two weeks, nothing moves. Reports lapse, and contributors hesitate to act.
+
+<<link "Step in to fix things again">><<goto "A">><</link>>
+<<link "Reopen a discussion about shared responsibility">><<goto "PromptDiscussion">><</link>>
+<<link "Stay silent again to force ownership">><<goto "SilenceAgain">><</link>></tw-passagedata><tw-passagedata pid="23" name="PromptDiscussion" tags="" position="275,275" size="100,100"><<set $transparency += 2>> /* Re-establishes visibility and expectations */
+<<set $collaboration += 1>> /* Invites collective ownership */
+
+You ask publicly:
+"Who can lead our next report or release? Mentors will stay in review mode only."
+
+Some volunteers step forward, unsure where to start.
+
+<<link "Support them in public as they learn">><<goto "CoachPublic">><</link>>
+<<link "Guide them privately to avoid mistakes">><<goto "CoachPrivate">><</link>>
+<<link "Prompt, then go silent again">><<goto "SilenceAgainAfterPrompt">><</link>>
+<<link "Form a small working group to share ownership">><<goto "SharedOwnership">><</link>></tw-passagedata><tw-passagedata pid="24" name="SilenceAgain" tags="" position="400,275" size="100,100"><<set $transparency -= 1>> /* Ongoing silence */
+<<set $collaboration -= 2>> /* Community confidence falls */
+<<set $shortcuts += 1>> /* Avoidance becomes a pattern */
+
+You wait for others to act without any guidance.
+Nothing moves; trust erodes further.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="25" name="SilenceAgainAfterPrompt" tags="" position="525,275" size="100,100"><<set $transparency += 1>> /* At least a prompt existed */
+<<set $collaboration -= 1>> /* Ownership still unclear */
+<<set $shortcuts += 1>> /* Inconsistent engagement */
+
+You nudge the list, then disappear again.
+Energy fades and nobody feels responsible.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="26" name="SharedOwnership" tags="" position="650,275" size="100,100"><<set $transparency += 1>> /* Visible coordination on-list */
+<<set $collaboration += 1>> /* Contributors coordinate and share responsibility */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+A small working group volunteers to draft the next report and document each step on-list.
+Momentum improves as tasks are shared transparently.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="27" name="Recovery" tags="" position="775,275" size="100,100"><<set $transparency += 2>> /* Public follow-up closes the loop */
+<<set $collaboration += 2>> /* Capability grows across the team */
+
+After some private guidance, you return to the list to document the process.
+People start to try the steps themselves next time.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="28" name="D" tags="" position="900,275" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation bypasses local governance */
+<<set $collaboration -= 2>> /* Undermines PPMC independence */
+
+You post to general@incubator about mentor dependency.
+IPMC members reply that mentors should help the podling self-correct first.
+
+<<link "Apologise and refocus locally">><<goto "Refocus">><</link>>
+<<link "Defend your action publicly">><<goto "Defend">><</link>>
+<<link "Start a mentors-only coordination thread">><<goto "ParallelList">><</link>>
+<<link "File an IPMC ticket instead of a discussion">><<goto "ReportOnly">><</link>></tw-passagedata><tw-passagedata pid="29" name="Refocus" tags="" position="1025,275" size="100,100"><<set $collaboration += 1>> /* Re-engages project team in local problem-solving */
+<<set $transparency += 1>> /* Admits error openly and models accountability */
+
+You acknowledge the feedback and refocus on helping the PPMC grow.
+
+<<link "Move toward rotating responsibility">><<goto "Rotate">><</link>>
+<<link "Report back periodically as momentum returns">><<goto "SlowRepair">><</link>>
+<<link "Run an on-list walkthrough of governance steps">><<goto "LocalWorkshop">><</link>></tw-passagedata><tw-passagedata pid="30" name="SlowRepair" tags="" position="1150,275" size="100,100"><<set $transparency += 2>> /* Apology and visible correction */
+<<set $collaboration += 1>> /* Gradual re-engagement of PPMC */
+<<set $shortcuts += 0>>
+<<set $escalation += 2>> /* Original escalation penalty remains */
+
+After refocusing, the team rebuilds trust.
+Reports resume slowly but steadily under local leadership.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="31" name="LocalWorkshop" tags="" position="25,400" size="100,100"><<set $transparency += 2>> /* Steps explained on-list, archived for reference */
+<<set $collaboration += 2>> /* Group learns together */
+<<set $shortcuts += 0>>
+<<set $escalation += 1>> /* Prior escalation still a drag */
+
+You facilitate an on-list walkthrough: how to run [DISCUSS], [VOTE], tally, and close.
+PPMC members practice and ask questions in the thread.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="32" name="Defend" tags="" position="150,400" size="100,100"><<set $escalation += 1>> /* Escalation intensifies tension */
+<<set $collaboration -= 1>> /* Discourages open collaboration */
+
+The discussion drags on publicly, leaving the podling feeling exposed.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="33" name="ParallelList" tags="" position="275,400" size="100,100"><<set $transparency -= 2>> /* Private side-channel */
+<<set $collaboration -= 2>> /* PPMC bypassed */
+<<set $escalation += 2>> /* Further escalation */
+
+Mentors start a parallel thread off-list to fix the podling.
+Decisions move out of sight and trust drops.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="34" name="ReportOnly" tags="" position="400,400" size="100,100"><<set $transparency -= 1>> /* Procedural substitution for discussion */
+<<set $collaboration -= 1>> /* Bypasses community conversation */
+<<set $escalation += 1>> /* Raises the issue without local effort */
+
+You open a ticket asking the IPMC to intervene.
+People are confused about who is responsible.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="35" name="E" tags="" position="525,400" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Encourages dialogue rather than direction */
+<<set $transparency += 1>> /* Makes mentoring intent explicit */
+
+You ask:
+"Who feels ready to lead our next [VOTE] or report? Mentors can review drafts."
+
+Two volunteers reply but seem unsure about ASF expectations.
+
+<<link "Guide them with examples in public">><<goto "CoachPublic">><</link>>
+<<link "Just confirm deadlines and hope they figure it out">><<goto "Drift">><</link>>
+<<link "Post a prescriptive checklist instead of discussion">><<goto "ChecklistTrap">><</link>>
+<<link "Encourage peers to help each other while you observe">><<goto "PeerSupport">><</link>></tw-passagedata><tw-passagedata pid="36" name="Drift" tags="" position="650,400" size="100,100"><<set $shortcuts += 1>> /* Laissez-faire shortcut; learning opportunity missed */
+<<set $collaboration -= 1>> /* Confusion weakens teamwork */
+
+Unclear ownership leads to missed deadlines.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>>
+<<link "IPMC steps in after repeated lapses">><<goto "IPMCIntervention">><</link>></tw-passagedata><tw-passagedata pid="37" name="IPMCIntervention" tags="" position="775,400" size="100,100"><<set $transparency += 1>> /* Public accountability: reminder seen on-list */
+<<set $collaboration += 0>> /* Mixed signal - some external help, limited local drive */
+<<set $shortcuts += 0>>
+<<set $escalation += 1>> /* Still an escalation, but less severe */
+
+The IPMC follows up on the missed reports with a gentle reminder.
+Mentors and PPMC members respond publicly, clarifying next steps and recommitting to regular reporting.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="38" name="ChecklistTrap" tags="" position="900,400" size="100,100"><<set $transparency += 0>>
+<<set $collaboration -= 1>> /* Checklist replaces shared reasoning */
+<<set $shortcuts += 2>> /* Procedural shortcut undermines learning */
+
+You post a detailed checklist:
+"Follow these steps exactly; do not improvise."
+Tasks get done, but nobody understands why.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="39" name="PeerSupport" tags="" position="1025,400" size="100,100"><<set $transparency += 1>> /* Peer mentoring visible and inclusive */
+<<set $collaboration += 1>> /* Healthy teamwork and self-reliance */
+<<set $shortcuts += 0>>
+<<set $escalation += 0>>
+
+Community members start helping each other on-list.
+Mentors observe while peers explain ASF practices to newcomers.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="40" name="Reflect" tags="" position="1150,400" size="100,100"><<set $total = $transparency + $collaboration - $shortcuts - $escalation>>
+
+You have reached the end of the scenario.
+
+<<if $total >= 6>>
+You modelled ASF-aligned mentoring: visible learning, shared governance, and steady mentor withdrawal.
+The podling is on track for graduation readiness.
+<</if>>
+
+<<if $total >= 2 and $total < 6>>
+You made progress toward independence but still relied on mentors for momentum or structure.
+Encourage on-list learning and responsibility rotation to build confidence.
+<</if>>
+
+<<if $total >= 0 and $total < 2>>
+You maintained progress, but dependency remains.
+Public coaching and delegation would strengthen governance culture.
+<</if>>
+
+<<if $total < 0>>
+Mentor overreach or escalation reduced community confidence.
+Rebuild trust through transparency and shared ownership.
+<</if>>
+
+''Reflection Questions''
+
+- How can mentors tell when their guidance has become dependency?
+- What steps can a podling take to build governance confidence among its own members?
+- How can the community gradually assume more responsibility before graduation?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/TheEmployerDominatedPodling.html b/pages/training/scenarios/TheEmployerDominatedPodling.html
new file mode 100644
index 000000000..5d1fac0c1
--- /dev/null
+++ b/pages/training/scenarios/TheEmployerDominatedPodling.html
@@ -0,0 +1,490 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>The Employer-Dominated Podling (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="The Employer-Dominated Podling (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-EMPLOYER-DOMINATED" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="1 [...]
+<<set $transparency = 0>> /* Clear public communication and visible governance */
+<<set $independence = 0>> /* PPMC-led decision-making free from vendor control */
+<<set $collaboration = 0>> /* Welcoming participation across employers and individuals */
+<<set $shortcuts = 0>> /* Private channels, deference to corporate hierarchy, hidden fixes */
+<<set $escalation = 0>> /* Premature or unnecessary public escalation */
+<<set $steps = 0>>
+
+You are a mentor working with an incubating Apache project.
+
+The podling is strong technically, but most active committers work for the same company.
+External contributors have stepped back, saying decisions feel made internally.
+
+A new contributor posts on dev@:
+
+"It seems like most big decisions are discussed elsewhere. Should I still propose ideas here?"
+
+What do you do?
+
+<<link "Defend the company's support">><<goto "A">><</link>>
+<<link "Encourage a transparent reply from the PPMC">><<goto "B">><</link>>
+<<link "Privately ask an active PPMC member to bring discussion on-list">><<goto "C">><</link>>
+<<link "Escalate to general@incubator">><<goto "D">><</link>>
+<<link "Stay silent to observe community response">><<goto "E">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Defensive tone reduces openness */
+<<set $independence -= 1>> /* Reinforces employer centrality */
+
+You post:
+
+"Company X has been crucial to this project's success. Their engineers and infrastructure make this all possible."
+
+Other contributors stay quiet. The new volunteer does not reply.
+
+<<link "Follow up to clarify inclusiveness">><<goto "A1Fix">><</link>>
+<<link "Let the matter drop">><<goto "A1Drop">><</link>>
+<<link "Suggest highlighting non-employee contributions in next status mail">><<goto "A1Credit">><</link>>
+<<link "Push back on the contributor's tone">><<goto "A1Scold">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Fix" tags="" position="275,25" size="100,100"><<set $transparency += 1>> /* Partial recovery via clarification */
+<<set $collaboration += 1>> /* Signals that outside input is welcome */
+
+You follow up:
+
+"To be clear, everyone is welcome. Decisions happen on the list and proposals are encouraged."
+
+Some trust returns.
+
+<<link "Propose low-lift outreach to invite wider input">><<goto "A2Outreach">><</link>>
+<<link "Draft a short governance note clarifying that proposals begin on dev@">><<goto "A2GovNote">><</link>>
+<<link "Move on without concrete follow-ups">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="4" name="A1Drop" tags="" position="400,25" size="100,100"><<set $transparency -= 1>> /* Silence confirms imbalance */
+<<set $independence -= 1>> /* Vendor dominance remains unaddressed */
+
+Perception hardens. External contributors disengage.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="5" name="A1Credit" tags="" position="525,25" size="100,100"><<set $transparency += 1>> /* Visible recognition of diverse effort */
+<<set $collaboration += 1>> /* Encourages broader participation */
+<<set $independence += 0>> /* Messaging only; practices unchanged unless followed up */
+
+You nudge the PPMC to acknowledge recent non-employee PRs and reviews in the next periodic mail.
+
+<<link "Pair it with an explicit 'no pre-meeting decisions' reminder">><<goto "A2Guardrail">><</link>>
+<<link "Leave it at credit only">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="6" name="A1Scold" tags="" position="650,25" size="100,100"><<set $escalation += 1>> /* Escalates tension unnecessarily */
+<<set $transparency -= 1>> /* Chills open discussion */
+<<set $independence -= 1>> /* Further centers the employer's role */
+<<set $collaboration -= 1>> /* Alienates potential contributors */
+
+You reply:
+
+"Accusations like that aren't helpful. Please respect the people doing the work."
+
+Several non-employee contributors go quiet. Some threads move further into private channels.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="7" name="A2Outreach" tags="" position="775,25" size="100,100"><<set $transparency += 1>> /* Public invitation improves visibility */
+<<set $collaboration += 1>> /* Encourages broader participation */
+
+The PPMC posts a short call for ideas on dev@ and highlights a few issues ideal for newcomers.
+A couple of non-employee contributors volunteer.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="8" name="A2GovNote" tags="" position="900,25" size="100,100"><<set $transparency += 1>> /* Clarifies process in public */
+<<set $independence += 1>> /* Nudges toward community-led decisions */
+
+A brief on-list note clarifies that proposals should start on dev@ with a short template people can copy.
+
+<<link "Invite a non-employee contributor to co-lead the first trial of this template">><<goto "A3Empower">><</link>>
+<<link "File it and move on without assigning ownership">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="9" name="A2Guardrail" tags="" position="1025,25" size="100,100"><<set $transparency += 1>> /* Expectations stated in public */
+<<set $independence += 1>> /* Reduces off-list control */
+
+The PPMC posts a reminder that side conversations must be summarised back to dev@ before decisions.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="10" name="A3Empower" tags="" position="1150,25" size="100,100"><<set $collaboration += 2>> /* Shares ownership across employers */
+<<set $independence += 1>> /* Demonstrates community direction */
+
+A contributor volunteers to pilot the template on the next feature idea. The thread gains traction.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="11" name="B" tags="" position="25,150" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Keeps discussion public */
+<<set $independence += 2>> /* PPMC speaks as a community, not a company */
+<<set $collaboration += 1>> /* Rebuilds trust with outsiders */
+
+You encourage a PPMC member to respond openly:
+
+"Could a PPMC member confirm that decisions happen publicly and everyone can help shape them?"
+
+A PPMC member replies on-list, thanking the contributor and reaffirming openness.
+
+<<link "Start a concrete thread on how proposals are initiated">><<goto "B1Good">><</link>>
+<<link "Leave it at reassurance only">><<goto "B1Neutral">><</link>>
+<<link "Propose rotating volunteers to open and summarise discussion threads, ensuring representation across employers">><<goto "B1Rotate">><</link>>
+<<link "Add 'good first issue' labels and tag independent reviewers">><<goto "B1Labels">><</link>></tw-passagedata><tw-passagedata pid="12" name="B1Good" tags="" position="150,150" size="100,100"><<set $collaboration += 2>> /* Builds shared ownership */
+<<set $independence += 1>> /* Shifts practice toward community-led work */
+
+The PPMC starts a thread to review how proposals begin.
+They notice many ideas started in a private Slack and agree to move those discussions to dev@.
+
+<<link "Invite independent contributors to co-lead the next steps">><<goto "B2Empower">><</link>>
+<<link "Mentor offers to draft diversity goals for the next report">><<goto "B2Overreach">><</link>>
+<<link "Mentor assigns named roles to 'fix diversity' now">><<goto "B2Assign">><</link>></tw-passagedata><tw-passagedata pid="13" name="B1Neutral" tags="" position="275,150" size="100,100"><<set $collaboration += 1>> /* Minor improvement via reassurance */
+<<set $independence += 0>> /* Practices largely unchanged */
+
+The reply reassures the list but does not change habits.
+Some private coordination continues.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="14" name="B1Rotate" tags="" position="400,150" size="100,100">/* Revised for ASF flat structure: rotation of volunteers, not leaders */
+<<set $transparency += 1>> /* Visible process tweak */
+<<set $collaboration += 1>> /* Broadens voices in discussions */
+<<set $independence += 1>> /* Reduces single-employer centrality */
+
+The PPMC agrees that different people will open and summarise key proposal threads.
+
+<<link "Pair this with a no pre-meeting decisions reminder">><<goto "B2Guardrails">><</link>>
+<<link "Stop at rotation only">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="15" name="B1Labels" tags="" position="525,150" size="100,100"><<set $transparency += 1>> /* Clarifies entry points publicly */
+<<set $collaboration += 1>> /* Lowers barrier for newcomers */
+<<set $independence += 0>> /* Tooling help; governance change requires follow-up */
+
+Issues get triaged with newcomer tags and at least one independent reviewer per PR.
+
+<<link "Wrap with a public 'how we propose' note">><<goto "B2WrapNote">><</link>>
+<<link "Let practice evolve without explicit guardrails">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="16" name="B2Empower" tags="" position="650,150" size="100,100"><<set $transparency += 1>> /* Public inclusion and role clarity */
+<<set $collaboration += 2>> /* Shares ownership across employers */
+<<set $independence += 1>> /* Demonstrates community-led direction */
+
+A mentor suggests:
+
+"Could we invite one of the independent contributors to summarise the thread and co-lead next steps?"
+
+The PPMC agrees. Two volunteers step up and co-own the action items.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="17" name="B2Overreach" tags="" position="775,150" size="100,100"><<set $transparency += 1>> /* Visible intention to improve */
+<<set $independence -= 1>> /* Mentor begins steering instead of guiding */
+
+You offer to draft diversity and participation goals for the next report yourself.
+The PPMC accepts, but some feel the mentor is taking the wheel.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="18" name="B2Assign" tags="" position="900,150" size="100,100"><<set $escalation += 1>> /* Perceived heavy-handedness */
+<<set $independence -= 2>> /* Mentor dictates roles; undermines PPMC ownership */
+<<set $collaboration -= 1>> /* Resentment from both employees and independents */
+
+You post:
+
+"I'm assigning Alice, Bob, and Carol to lead outreach and onboarding to fix this right now."
+
+Backlash follows. Participation drops; some contributors disengage entirely.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="19" name="B2Guardrails" tags="" position="1025,150" size="100,100"><<set $transparency += 1>> /* Expectations set in public */
+<<set $independence += 1>> /* Guardrails limit private coordination */
+
+A short reminder is posted: discussions and decisions belong on dev@, and any side conversation must be summarised back promptly.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="20" name="B2WrapNote" tags="" position="1150,150" size="100,100"><<set $transparency += 1>> /* Process made explicit on-list */
+<<set $independence += 1>> /* Moves practice toward list-first governance */
+
+A concise post explains proposal flow and links to labelled issues.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="21" name="C" tags="" position="25,275" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Private outreach lowers visibility initially */
+<<set $collaboration += 0>> /* Depends on public follow-up */
+
+You privately message an active PPMC member:
+
+"There is a growing perception that decisions are made internally. Can we move more discussion to the list?"
+
+<<link "PPMC member posts an open acknowledgement with concrete steps">><<goto "C1Good">><</link>>
+<<link "They quietly remind colleagues but say nothing publicly">><<goto "C1Weak">><</link>>
+<<link "Suggest a brief office-hours post on dev@ to invite questions">><<goto "C1OfficeHours">><</link>>
+<<link "Propose pairing internal maintainers with independent co-reviewers">><<goto "C1Pairing">><</link>></tw-passagedata><tw-passagedata pid="22" name="C1Good" tags="" position="150,275" size="100,100"><<set $transparency += 2>> /* Visibility restored by open follow-up */
+<<set $independence += 1>> /* PPMC self-corrects publicly */
+<<set $collaboration += 1>> /* Encourages engagement from outsiders */
+
+A PPMC member thanks the mentor and pledges to move discussions on-list.
+They propose a standing rule: discuss proposals only on dev@.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="23" name="C1Weak" tags="" position="275,275" size="100,100"><<set $shortcuts += 1>> /* Private fix without public learning */
+<<set $transparency -= 1>> /* Community remains unaware */
+<<set $independence -= 1>> /* Private coordination persists */
+
+Some internal improvement happens, but perception remains unchanged.
+
+<<link "Post a late public summary of the private adjustments">><<goto "C2LateSummary">><</link>>
+<<link "Say nothing further">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="24" name="C1OfficeHours" tags="" position="400,275" size="100,100"><<set $transparency += 1>> /* Opens a channel in public view */
+<<set $collaboration += 1>> /* Low-bar participation from newcomers */
+
+The PPMC posts a short message offering a time to answer questions and points back to dev@ for decisions.
+
+<<link "Follow with a written summary back to the list">><<goto "C2SummaryBack">><</link>>
+<<link "Time zones exclude many; side chat continues and decisions drift">><<goto "C2Misfire">><</link>>
+<<link "Treat it as a one-off and move on">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="25" name="C1Pairing" tags="" position="525,275" size="100,100"><<set $collaboration += 2>> /* Structured inclusion in reviews */
+<<set $independence += 1>> /* Diversifies decision influence */
+
+The PPMC invites an independent committer to co-review significant PRs for the next month, with summaries on dev@.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="26" name="C2LateSummary" tags="" position="650,275" size="100,100"><<set $transparency += 1>> /* Partial recovery through later visibility */
+<<set $independence += 0>> /* Structure still somewhat company-centered */
+
+A brief on-list summary clarifies next steps, but the delay blunts impact.
+Some trust returns, though skepticism remains.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="27" name="C2SummaryBack" tags="" position="775,275" size="100,100"><<set $transparency += 1>> /* Captures decisions in public */
+<<set $independence += 1>> /* Reinforces list-first governance */
+
+A summary is posted to dev@ with action items and next steps.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="28" name="C2Misfire" tags="" position="900,275" size="100,100"><<set $shortcuts += 1>> /* Decisions drift to private channels */
+<<set $transparency -= 1>> /* Exclusion via time zones and side chat */
+<<set $independence -= 1>> /* Employer-controlled channels dominate */
+
+The office-hours session excludes many due to time zones. Follow-ups move into a private chat and are not summarised.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="29" name="D" tags="" position="1025,275" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation to IPMC */
+<<set $independence -= 1>> /* Undercuts podling ownership */
+
+You post to general@incubator:
+
+"This project appears dominated by one employer. Advice welcome."
+
+IPMC members note mentors should help the podling self-correct first, and escalation is for when local efforts fail.
+
+<<link "Acknowledge and refocus locally">><<goto "D1Good">><</link>>
+<<link "Continue the public thread">><<goto "D1Bad">><</link>>
+<<link "Request a formal IPMC review of the podling's diversity">><<goto "D1Formal">><</link>>
+<<link "Ask an experienced mentor to quietly coach you on next steps off-list">><<goto "D1Coach">><</link>></tw-passagedata><tw-passagedata pid="30" name="D1Good" tags="" position="1150,275" size="100,100"><<set $collaboration += 1>> /* Restores mentoring balance */
+<<set $independence += 1>> /* PPMC regains agency with mentor support */
+
+You thank the IPMC for input and redirect the focus to dev@, guiding the PPMC to address the issue themselves.
+
+<<link "IPMC requests a lightweight follow-up plan to monitor diversity">><<goto "D2FollowUp">><</link>>
+<<link "Proceed without any follow-up planning">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="31" name="D1Bad" tags="" position="25,400" size="100,100"><<set $escalation += 1>> /* Prolonged exposure and tension */
+<<set $independence -= 1>> /* Further damages podling confidence */
+
+The public thread grows defensive.
+Company employees feel attacked. External contributors disengage further.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="32" name="D1Formal" tags="" position="150,400" size="100,100"><<set $escalation += 2>> /* Heavy-handed escalation */
+<<set $independence -= 1>> /* Bypasses podling ownership */
+
+A request is made for a formal review. Tension rises and participation drops.
+
+<<link "Walk it back and refocus on dev@ with a clear plan">><<goto "D2WalkBack">><</link>>
+<<link "Double down on the formal route">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="33" name="D1Coach" tags="" position="275,400" size="100,100"><<set $shortcuts += 1>> /* Off-list coaching; OK if summarised back */
+<<set $transparency += 0>> /* No immediate visibility */
+<<set $independence += 0>>
+
+You receive tips from a seasoned mentor on approaches that preserve podling ownership.
+
+<<link "Summarise the approach publicly and empower the PPMC">><<goto "D2CoachSummary">><</link>>
+<<link "Keep the coaching private and proceed quietly">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="34" name="D2FollowUp" tags="" position="400,400" size="100,100"><<set $transparency += 1>> /* Adds simple, visible accountability */
+<<set $independence += 1>> /* PPMC owns the plan and reports progress */
+
+In a brief note, the IPMC asks the PPMC to include a one-line update on decision visibility and contributor diversity in the next two reports.
+The PPMC agrees and leads the updates.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="35" name="D2WalkBack" tags="" position="525,400" size="100,100"><<set $transparency += 1>> /* Explains the change in approach */
+<<set $independence += 1>> /* Restores local ownership */
+
+You clarify that local correction is preferred and start a thread on dev@ to outline next steps.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="36" name="D2CoachSummary" tags="" position="650,400" size="100,100"><<set $transparency += 1>> /* Brings learning back to the list */
+<<set $independence += 1>> /* PPMC-led correction */
+
+You post a short plan on dev@: proposal template, rotation of thread-starters, and summary-back rule.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="37" name="E" tags="" position="775,400" size="100,100"><<set $steps += 1>>
+<<set $transparency -= 1>> /* Silence reads as acceptance of status quo */
+<<set $collaboration -= 1>> /* Missed mentoring opportunity */
+
+You decide to observe. Company-employed committers reply briefly, then move on.
+No deeper discussion happens.
+
+<<link "Let drift continue">><<goto "E1QuietDrift">><</link>>
+<<link "Intervene later with a structured on-list prompt">><<goto "E2LateIntervention">><</link>>
+<<link "Nudge a contributor privately to start a public proposals thread">><<goto "E2Nudge">><</link>>
+<<link "Audit recent decisions and post an index of dev@ discussion links">><<goto "E2Index">><</link>>
+<<link "Downplay concerns in the next podling report">><<goto "E2Rationalize">><</link>></tw-passagedata><tw-passagedata pid="38" name="E1QuietDrift" tags="" position="900,400" size="100,100"><<set $transparency -= 1>> /* Ongoing lack of visibility */
+<<set $independence -= 1>> /* Entrenches single-vendor control */
+
+Over weeks, participation narrows further.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="39" name="E2LateIntervention" tags="" position="1025,400" size="100,100"><<set $transparency += 1>> /* Late, but public prompt */
+<<set $collaboration += 1>> /* Encourages course correction */
+<<set $shortcuts += 0>> /* No shortcut this time, just delayed mentoring */
+
+You later start a thread on dev@:
+
+"Could we document where feature proposals begin and ensure they start here?"
+
+Some constructive replies follow.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="40" name="E2Nudge" tags="" position="1150,400" size="100,100"><<set $shortcuts += 1>> /* Private nudge rather than public prompt */
+<<set $transparency += 0>> /* No visible correction yet */
+<<set $independence += 0>> /* Depends on follow-up */
+
+A contributor agrees to start a thread but delays.
+
+<<link "Follow up publicly with a proposals kickoff thread yourself">><<goto "E3PublicKickoff">><</link>>
+<<link "Wait it out">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="41" name="E2Index" tags="" position="25,525" size="100,100"><<set $transparency += 2>> /* Makes governance traceable */
+<<set $independence += 1>> /* Centers the list as source of truth */
+
+You post a simple index that links recent dev@ decisions and invites additions for anything missing.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="42" name="E2Rationalize" tags="" position="150,525" size="100,100"><<set $transparency -= 1>> /* Misleads oversight by omission */
+<<set $independence -= 1>> /* Avoids confronting vendor dominance */
+<<set $escalation += 0>> /* No escalation, but harms trust */
+
+In the next report you write: "No major issues noted." The imbalance persists and deepens.
+
+<<link "Go to damage control">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="43" name="E3PublicKickoff" tags="" position="275,525" size="100,100"><<set $transparency += 1>> /* Visible action in public */
+<<set $collaboration += 1>> /* Low-friction path for others to join */
+
+You start a dev@ thread proposing a simple template for new proposals and invite volunteers to champion items.
+
+<<link "See resolution path">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="44" name="Damage" tags="" position="400,525" size="100,100"><<set $steps += 1>>
+
+The perception of dominance persists.
+A few non-employee contributors drift away, leaving a single-vendor project.
+In the next podling report, mentors note reduced diversity and the need to expand independent participation.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="45" name="Partial" tags="" position="525,525" size="100,100"><<set $steps += 1>>
+
+Some corrective steps are taken, but power imbalance is not fully addressed.
+Discussions are more visible, yet new contributors remain hesitant.
+Independence remains uncertain.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="46" name="Resolution" tags="" position="650,525" size="100,100"><<set $steps += 1>>
+
+The project addressed vendor dominance transparently.
+Decisions now start and finish on dev@.
+A PPMC-owned note clarifies participation is open to all.
+Independent contributors co-lead next steps.
+Reports include brief evidence of list-based decisions and independent participation.
+
+Community health improves and diversity grows.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="47" name="Reflect" tags="" position="775,525" size="100,100"><<set $total = $transparency + $independence + $collaboration - $shortcuts - $escalation>>
+
+You have reached the end of the scenario. Let us reflect.
+
+<<if $total >= 8>>
+You modelled ASF-aligned mentoring: open communication, PPMC independence, and inclusive governance.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+You balanced openness with pragmatism. Some internal habits may persist, but practices are improving.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+You achieved partial progress without fundamental change. External contributors may still view the project as company-controlled.
+<</if>>
+
+<<if $total < 0>>
+Your approach reinforced vendor dominance. Greater transparency and patience would help the project grow in ASF culture.
+<</if>>
+
+''Reflection Questions''
+
+- Which actions best demonstrate independence from any single employer?
+- How can mentors encourage companies to share control without alienating them?
+- What concise evidence could the next podling report include to show improvement?
+- How does this scenario connect to the ASF value of community over code?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/TheHeatedThread.html b/pages/training/scenarios/TheHeatedThread.html
new file mode 100644
index 000000000..5118ce031
--- /dev/null
+++ b/pages/training/scenarios/TheHeatedThread.html
@@ -0,0 +1,376 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>The Heated Thread (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="The Heated Thread (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-HEATED-THREAD-ADV" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="100,100">/* Ini [...]
+<<set $transparency = 0>> /* Clear, public, and respectful communication */
+<<set $collaboration = 0>> /* PPMC-led conflict resolution and teamwork */
+<<set $shortcuts = 0>> /* Avoiding avoidance, silence, or private fixes */
+<<set $escalation = 0>> /* Premature or unnecessary escalation */
+<<set $steps = 0>>
+
+You are a mentor working with an incubating Apache project.
+
+A long thread begins on `dev@` about switching the project’s build system from Maven to Gradle.
+At first, it’s a healthy technical discussion — but soon, the tone shifts.
+
+> "Your approach ignores half the project’s needs."
+> "Maybe if you actually read the code, you’d understand!"
+
+The exchange escalates.
+Other participants go silent, unsure whether to intervene.
+
+What do you do?
+
+<<link "Step in publicly to cool things down">><<goto "A">><</link>>
+<<link "Wait to see if it resolves itself">><<goto "B">><</link>>
+<<link "Email both parties privately to de-escalate">><<goto "C">><</link>>
+<<link "Escalate to general@incubator.apache.org for guidance">><<goto "D">><</link>>
+<<link "Invite a neutral summary of technical points">><<goto "E">><</link>>
+
+/* --- PATH A: Public intervention --- */</tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Visible guidance strengthens trust */
+<<set $collaboration += 1>> /* Mentoring through calm example */
+
+You step in publicly:
+
+> "Let’s pause for a moment. Please focus on the technical issue, not each other. We all want the best outcome for the project."
+
+One contributor thanks you, the other replies curtly:
+> "Don’t lecture me — I’m defending my work."
+
+<<link "Reassure and redirect">><<goto "A1Good">><</link>>
+<<link "Reinforce community norms firmly">><<goto "A1Neutral">><</link>>
+<<link "Call out the behaviour sharply">><<goto "A1Bad">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Good" tags="" position="275,25" size="100,100"><<set $collaboration += 2>> /* Shows empathy and resets tone */
+<<set $transparency += 1>> /* Keeps communication open */
+
+You reply calmly:
+
+> "No worries — it’s easy for tone to get lost in text. Let’s list pros and cons of both build options before deciding."
+
+People re-engage productively, and the silent contributors start replying again.
+
+<<link "Encourage documentation of the process">><<goto "A2Doc">><</link>>
+<<link "Let the discussion conclude naturally">><<goto "A2Fade">><</link>></tw-passagedata><tw-passagedata pid="4" name="A2Doc" tags="" position="400,25" size="100,100"><<set $transparency += 1>> /* Captures learning */
+<<set $collaboration += 1>> /* Reinforces PPMC ownership */
+
+You suggest:
+> "Let’s summarise this in our dev@ archive so future contributors know how we handled disagreement."
+
+The summary later appears in the next podling report.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="5" name="A2Fade" tags="" position="525,25" size="100,100"><<set $shortcuts += 1>> /* Fails to capture learning */
+
+The thread ends peacefully, but no one documents what was learned.
+When another disagreement happens later, people repeat the same mistakes.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="6" name="A1Neutral" tags="" position="650,25" size="100,100"><<set $transparency += 1>> /* Affirms ASF norms */
+<<set $collaboration -= 1>> /* Slight defensiveness reduces rapport */
+
+You write:
+
+> "Please remember that ASF discussions should stay respectful. Let’s focus on ideas, not people."
+
+It stops the argument, but the tone feels chilly.
+The discussion moves on mechanically, without much reflection.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="7" name="A1Bad" tags="" position="775,25" size="100,100"><<set $transparency -= 1>> /* Harsh response harms openness */
+<<set $collaboration -= 2>> /* Scolding damages trust */
+
+You post:
+
+> "This behaviour is unacceptable. You both need to apologise immediately."
+
+The thread ends abruptly. One contributor unsubscribes.
+
+<<link "Go to damage control">><<goto "Damage">><</link>>
+
+/* --- PATH B: Do nothing (wait) --- */</tw-passagedata><tw-passagedata pid="8" name="B" tags="" position="900,25" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 1>> /* Avoiding early intervention allows harm */
+<<set $collaboration -= 1>> /* Lost mentoring opportunity */
+
+You wait to see if others step in.
+After several days, the thread dies down on its own.
+But one of the main contributors goes quiet and hasn’t committed in weeks.
+
+<<link "Reach out privately afterward">><<goto "B1Good">><</link>>
+<<link "Assume they’ll come back">><<goto "B1Bad">><</link>></tw-passagedata><tw-passagedata pid="9" name="B1Good" tags="" position="1025,25" size="100,100"><<set $collaboration += 2>> /* Restores human connection */
+<<set $transparency += 1>> /* Restores visibility later */
+
+You message the inactive contributor privately:
+
+> "Just checking in — are you OK? The thread got tense, and I wanted to make sure you still feel welcome."
+
+They appreciate it and return gradually.
+
+<<link "Encourage them to post publicly">><<goto "B2Public">><</link>>
+<<link "Keep the check-in private">><<goto "B2Private">><</link>></tw-passagedata><tw-passagedata pid="10" name="B2Public" tags="" position="1150,25" size="100,100"><<set $transparency += 2>> /* Restores openness */
+<<set $collaboration += 1>> /* Encourages participation */
+
+You suggest they reply to the list to restart discussion.
+They do, thanking everyone for helping de-escalate.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="11" name="B2Private" tags="" position="25,150" size="100,100"><<set $shortcuts += 1>> /* Learning hidden from group */
+<<set $transparency -= 1>> /* Unseen progress */
+
+They return to contributing silently, avoiding discussion threads.
+Future conflicts may resurface.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="12" name="B1Bad" tags="" position="150,150" size="100,100"><<set $shortcuts += 2>> /* Avoidance compounds harm */
+<<set $collaboration -= 1>> /* Mentor absence felt */
+
+You decide not to follow up.
+Weeks later, the contributor resigns quietly. The podling loses momentum.
+
+<<link "Go to damage control">><<goto "Damage">><</link>>
+
+/* --- PATH C: Private outreach to both parties --- */</tw-passagedata><tw-passagedata pid="13" name="C" tags="" position="275,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Direct contact can calm tempers */
+<<set $transparency -= 1>> /* Private conversation not visible */
+
+You message both privately, acknowledging the conflict and encouraging perspective.
+They apologise to you but not to the list.
+
+<<link "Encourage public closure">><<goto "C1Good">><</link>>
+<<link "Let it stay private">><goto "C1Bad">><</link>></tw-passagedata><tw-passagedata pid="14" name="C1Good" tags="" position="400,150" size="100,100"><<set $transparency += 2>> /* Visibility rebuilds trust */
+<<set $collaboration += 1>> /* Community sees resolution */
+
+You suggest:
+
+> "Could you post a short note to close the thread, just so everyone knows the issue’s settled?"
+
+They do, thanking each other for resolving things. The list’s mood improves.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="15" name="C1Bad" tags="" position="525,150" size="100,100"><<set $shortcuts += 1>> /* Private fix limits transparency */
+<<set $transparency -= 1>> /* Hidden repair */
+<<set $collaboration -= 1>> /* Unclear leadership */
+
+You consider it solved privately.
+Others on the list still sense tension and avoid new topics.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>>
+
+/* --- PATH D: Escalate to IPMC --- */</tw-passagedata><tw-passagedata pid="16" name="D" tags="" position="650,150" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation */
+<<set $collaboration -= 1>> /* Weakens PPMC independence */
+
+You escalate the thread to `general@incubator.apache.org`.
+Some IPMC members reply, but several ask why the mentors didn’t first handle it locally.
+
+<<link "Acknowledge the feedback and redirect locally">><<goto "D1Good">><</link>>
+<<link "Defend the escalation">><<goto "D1Bad">><</link>></tw-passagedata><tw-passagedata pid="17" name="D1Good" tags="" position="775,150" size="100,100"><<set $transparency += 1>> /* Brings back local ownership */
+<<set $collaboration += 1>> /* Helps the PPMC recover leadership */
+
+You post back to `dev@`:
+
+> "Thanks everyone — we’ll handle this locally and summarise learnings here."
+
+The PPMC restarts discussion respectfully.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="18" name="D1Bad" tags="" position="900,150" size="100,100"><<set $escalation += 1>> /* Extra tension */
+<<set $collaboration -= 2>> /* External debate undermines PPMC */
+
+The debate spills across lists, with outsiders criticising tone and mentors arguing among themselves.
+
+<<link "Go to damage control">><<goto "Damage">><</link>>
+
+/* --- PATH E: Invite neutral summary --- */</tw-passagedata><tw-passagedata pid="19" name="E" tags="" position="1025,150" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 2>> /* Refocuses on technical facts */
+<<set $transparency += 1>> /* Keeps discussion public */
+
+You write:
+
+> "Let’s reset — can someone summarise both technical options objectively so we can compare side-by-side?"
+
+A neutral contributor volunteers.
+
+<<link "Acknowledge and build on the summary">><<goto "E1Good">><</link>>
+<<link "Thank them and move on without reflection">><<goto "E1Neutral">><</link>>
+<<link "Ignore the effort and end the thread">><<goto "E1Bad">><</link>></tw-passagedata><tw-passagedata pid="20" name="E1Good" tags="" position="1150,150" size="100,100"><<set $collaboration += 2>> /* Re-engages others in solution mode */
+<<set $transparency += 1>> /* Shared understanding */
+
+The project thanks the summariser and agrees to prototype both options before deciding.
+Healthy debate returns.
+
+<<link "Invite a closing reflection">><<goto "E2Reflect">><</link>></tw-passagedata><tw-passagedata pid="21" name="E2Reflect" tags="" position="25,275" size="100,100"><<set $collaboration += 1>> /* Reinforces learning */
+<<set $transparency += 1>> /* Visible closure */
+
+You encourage:
+
+> "Let’s note what helped here — clear summaries made a difference."
+
+They agree to include this insight in their next podling report.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="22" name="E1Neutral" tags="" position="150,275" size="100,100"><<set $shortcuts += 1>> /* Fails to embed lesson */
+<<set $collaboration -= 1>> /* Learning missed */
+
+The technical issue is solved, but no one reflects on the conflict.
+A missed mentoring opportunity.
+
+<<link "Go to partial resolution">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="23" name="E1Bad" tags="" position="275,275" size="100,100"><<set $collaboration -= 2>> /* Dismisses constructive input */
+<<set $transparency -= 1>> /* Shuts down visibility */
+
+The summary is ignored, and frustration returns.
+The volunteer disengages from the project.
+
+<<link "Go to damage control">><<goto "Damage">><</link>>
+
+/* --- OUTCOME PASSAGES --- */</tw-passagedata><tw-passagedata pid="24" name="Resolution" tags="" position="400,275" size="100,100"><<set $steps += 1>>
+
+✅ The project handled the tension constructively and restored a healthy tone.
+
+* Respect replaced hostility.
+* The PPMC led its own resolution.
+* The discussion remained visible and educational.
+
+Mentors note that de-escalation, empathy, and transparency helped rebuild trust.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="25" name="Partial" tags="" position="525,275" size="100,100"><<set $steps += 1>>
+
+The conflict cooled, but the project missed a chance to learn collectively.
+Future disagreements might resurface without guidance.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="26" name="Damage" tags="" position="650,275" size="100,100"><<set $steps += 1>>
+
+The conflict left lasting damage.
+A contributor withdrew, and activity declined.
+The next podling report notes "reduced participation after tense discussions."
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>>
+
+/* --- REFLECTION SECTION --- */</tw-passagedata><tw-passagedata pid="27" name="Reflect" tags="" position="775,275" size="100,100"><<set $total = $transparency + $collaboration - $shortcuts - $escalation>>
+
+You’ve reached the end of the scenario.
+
+<<if $total >= 8>>
+✅ You modelled ASF-aligned practice: respectful communication, transparency, and mentoring that empowers the PPMC.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+⚖️ You de-escalated effectively but missed opportunities for broader learning or documentation.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+⚠️ The conflict was contained, but without enough openness to rebuild trust fully.
+<</if>>
+
+<<if $total < 0>>
+❌ Your choices reduced visibility and trust. The community will need time to recover and may repeat the mistake.
+<</if>>
+
+''Reflection Questions''
+
+- When should a mentor step in versus letting the PPMC lead?
+- Which responses preserved trust and which reduced it?
+- How can podlings document and share lessons from conflict?
+- How does this scenario demonstrate ''community over code'' in practice?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/TheSilentMentor.html b/pages/training/scenarios/TheSilentMentor.html
new file mode 100644
index 000000000..00885cf52
--- /dev/null
+++ b/pages/training/scenarios/TheSilentMentor.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html data-init="no-js">
+<head>
+<meta charset="UTF-8" />
+<title>The Silent Mentor (ASF Interactive Scenario)</title>
+<meta name="viewport" content="width=device-width,initial-scale=1" />
+<meta name="application-name" content="SugarCube" />
+<meta name="version" content="2.37.3" />
+<!--
+
+SugarCube (v2.37.3): A free (gratis and libre) story format.
+
+Copyright © 2013–2021 Thomas Michael Edwards <th...@gmail.com>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+<script id="script-libraries" type="text/javascript">
+if(document.head&&document.addEventListener&&document.querySelector&&Object.create&&Object.freeze&&JSON){document.documentElement.setAttribute("data-init", "loading");
+/*! @source http://purl.eligrey.com/github/classList.js/blob/1.2.20171210/classList.js */
+"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||!function(t){"use strict";if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0,n=this.length;n>e;e++)if(e in this&&this[e]===t)return e;return-1},c=function(t,e){this.name=t,this.code=DOMExcepti [...]
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2020 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/v4.5.14/LICENSE
+ */
+(function(t,r){"use strict";if(typeof define==="function"&&define.amd){define(r)}else if(typeof exports==="object"){module.exports=r()}else{t.returnExports=r()}})(this,function(){var t=Array;var r=t.prototype;var e=Object;var n=e.prototype;var i=Function;var a=i.prototype;var o=String;var f=o.prototype;var u=Number;var l=u.prototype;var s=r.slice;var c=r.splice;var v=r.push;var h=r.unshift;var p=r.concat;var y=r.join;var d=a.call;var g=a.apply;var w=Math.max;var b=Math.min;var T=n.toStri [...]
+/*!
+ * https://github.com/paulmillr/es6-shim
+ * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
+ * and contributors, MIT License
+ * es6-shim: v0.35.4
+ * see https://github.com/paulmillr/es6-shim/blob/0.35.4/LICENSE
+ * Details and documentation:
+ * https://github.com/paulmillr/es6-shim/
+ */
+(function(e,t){if(typeof define==="function"&&define.amd){define(t)}else if(typeof exports==="object"){module.exports=t()}else{e.returnExports=t()}})(this,function(){"use strict";var e=Function.call.bind(Function.apply);var t=Function.call.bind(Function.call);var r=Array.isArray;var n=Object.keys;var o=function notThunker(t){return function notThunk(){return!e(t,this,arguments)}};var i=function(e){try{e();return false}catch(t){return true}};var a=function valueOrFalseIfThrows(e){try{retu [...]
+h(Math,"acosh",Cr.acosh,Math.acosh(Number.MAX_VALUE)===Infinity);h(Math,"acosh",Cr.acosh,!Mr(Math.acosh(1+Number.EPSILON),Math.sqrt(2*Number.EPSILON)));h(Math,"cbrt",Cr.cbrt,!Mr(Math.cbrt(1e-300),1e-100));h(Math,"sinh",Cr.sinh,Math.sinh(-2e-17)!==-2e-17);var xr=Math.expm1(10);h(Math,"expm1",Cr.expm1,xr>22025.465794806718||xr<22025.465794806718);var Nr=Math.round;var Ar=Math.round(.5-Number.EPSILON/4)===0&&Math.round(-.5+Number.EPSILON/3.99)===1;var Rr=mr+1;var _r=2*mr-1;var kr=[Rr,_r].ev [...]
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue [...]
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);
+/*!
+ * imagesLoaded PACKAGED v4.1.4
+ * JavaScript is all like "You images are done yet or what?"
+ * MIT License
+ */
+!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0, [...]
+/*! lz-string.min.js v1.5.0 | (c) 2023 Pieroxy | MIT license */
+var LZString=function(){var r=String.fromCharCode,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",e={};function t(r,o){if(!e[r]){e[r]={};for(var n=0;n<r.length;n++)e[r][r.charAt(n)]=n}return e[r][o]}var i={compressToBase64:function(r){if(null==r)return"";var n=i._compress(r,6,function(r){return o.charAt(r)});switch(n.length%4){default:case 0:return n;case 1:return n+"===";case 2:return n+"==";case [...]
+/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/dist/FileSaver.js */
+(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}functi [...]
+/*! seedrandom.js v3.0.5 | Copyright 2019 David Bau. | MIT license */
+!function(f,a,c){var s,l=256,p="random",d=c.pow(l,6),g=c.pow(2,52),y=2*g,h=l-1;function n(n,t,r){function e(){for(var n=u.g(6),t=d,r=0;n<g;)n=(n+r)*l,t*=l,r=u.g(1);for(;y<=n;)n/=2,t/=2,r>>>=1;return(n+r)/t}var o=[],i=j(function n(t,r){var e,o=[],i=typeof t;if(r&&"object"==i)for(e in t)try{o.push(n(t[e],r-1))}catch(n){}return o.length?o:"string"==i?t:t+"\0"}((t=1==t?{entropy:!0}:t||{}).entropy?[n,S(a)]:null==n?function(){try{var n;return s&&(n=s.randomBytes)?n=n(l):(n=new Uint8Array(l),(f [...]
+/*! console_hack.js | (c) 2015 Thomas Michael Edwards | Licensed under SugarCube's Simple BSD license */
+!function(){for(var methods=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeline","timelineEnd","timeStamp","trace","warn"],length=methods.length,noop=function(){},console=window.console=window.console||{};length--;){var method=methods[length];console[method]||(console[method]=noop)}}();
+}else{document.documentElement.setAttribute("data-init", "lacking");}
+</script>
+<style id="style-normalize" type="text/css">/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:tr [...]
+<style id="style-init-screen" type="text/css">@-webkit-keyframes init-loading-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes init-loading-spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes init-loading-spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rot [...]
+<style id="style-font-icons" type="text/css">@font-face{font-family:sc-icons;font-display:block;src:url("data:application/octet-stream;base64,d09GRgABAAAAAFRoAAsAAAAAVBwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgD1IUnWNtYXAAAAFoAAACdAAAAnQzsxFSZ2FzcAAAA9wAAAAIAAAACAAAABBnbHlmAAAD5AAASzgAAEs4ynuL3WhlYWQAAE8cAAAANgAAADYc3WiNaGhlYQAAT1QAAAAkAAAAJAiCBP1obXR4AABPeAAAAfAAAAHwyjAFu2xvY2EAAFFoAAAA+gAAAPpXLER0bWF4cAAAUmQAAAAgAAAAIACEAIVuYW1lAABShAAAAcIAAAHCiTu08nBvc3QAAFRIAAAAIAAAACAAAw [...]
+<style id="style-font-emoji" type="text/css">@font-face{font-family:color-emoji;src:local("Twemoji Mozilla"),local("Apple Color Emoji"),local("Segoe UI Emoji"),local("Segoe UI Symbol"),local("Noto Color Emoji"),local("EmojiOne Color"),local("Android Emoji")}</style>
+<style id="style-core" type="text/css">#store-area,tw-storydata{display:none!important;z-index:0}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:#111}::-webkit-scrollbar-thumb{background-color:#333;border:1px solid #111}*{scrollbar-color:#333 #111;scrollbar-width:thin}:-webkit-full-screen{height:100%;width:100%}:-ms-fullscreen{height:100%;width:100%}:fullscreen{height:100%;width:100%}body::-ms-backdrop{background:0 0}:focus{o [...]
+<style id="style-core-display" type="text/css">#story{z-index:10;margin:2.5em}@media screen and (max-width:1136px){#story{margin-right:1.5em}}#passages{max-width:54em;margin:0 auto}</style>
+<style id="style-core-passage" type="text/css">.passage{line-height:1.75;text-align:left;-webkit-transition:opacity .4s ease-in;-o-transition:opacity .4s ease-in;transition:opacity .4s ease-in}.passage-in{opacity:0}.passage ol,.passage ul{margin-left:.5em;padding-left:1.5em}.passage table{margin:1em 0;border-collapse:collapse;font-size:100%}.passage caption,.passage td,.passage th,.passage tr{padding:3px}@media (prefers-reduced-motion:reduce){.passage{-webkit-transition:opacity 0s;-o-tra [...]
+<style id="style-core-macro" type="text/css">@-webkit-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@-o-keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}@keyframes cursor-blink{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.macro-append-insert,.macro-linkappend-insert,.macro-linkprepend-insert,.macro-linkreplace-insert,.macro-prepend-insert,.macro-repeat-insert,.macro-replace-insert,.macro-timed-insert{-webkit-transition:opacity .4s ease-in;-o-transition [...]
+<style id="style-ui-dialog" type="text/css">html[data-dialog] body{overflow:hidden}#ui-overlay{background-color:#000;height:200%;left:-50%;opacity:0;position:fixed;top:-50%;-webkit-transition:visibility .2s step-end,opacity .2s ease-in;-o-transition:visibility .2s step-end,opacity .2s ease-in;transition:visibility .2s step-end,opacity .2s ease-in;visibility:hidden;width:200%;z-index:100000}#ui-overlay.open{opacity:.8;-webkit-transition:visibility 0s;-o-transition:visibility 0s;transition [...]
+<style id="style-ui-dialog-saves" type="text/css">#ui-dialog-body.saves{padding:0 0 1px}#ui-dialog-body.saves>:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves>h2{background-color:#222;font-size:inherit;margin:0;padding:.1em 0 .1em .4em}#ui-dialog-body.saves table{border-spacing:0;width:100%}#ui-dialog-body.saves tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.saves td{padding:.33em}#ui-dialog-body.saves td:first-child{display:none!important}#ui-dialog-bod [...]
+<style id="style-ui-dialog-settings" type="text/css">#ui-dialog-body.settings [id|=setting-body]>div:first-child{display:table;width:100%}#ui-dialog-body.settings [id|=setting-label]{display:table-cell;padding:.4em 2em .4em 0}#ui-dialog-body.settings [id|=setting-label]+div{display:table-cell;min-width:8em;text-align:right;vertical-align:middle;white-space:nowrap}#ui-dialog-body.settings div[id|=header-body]{margin:1em 0}#ui-dialog-body.settings div[id|=header-body]:first-child{margin-to [...]
+<style id="style-ui-dialog-legacy" type="text/css">#ui-dialog-body.list{padding:0}#ui-dialog-body.list ul{margin:0;padding:0;list-style:none;border:1px solid transparent}#ui-dialog-body.list li{margin:0}#ui-dialog-body.list li:not(:first-child){border-top:1px solid #444}#ui-dialog-body.list li a{display:block;padding:.25em .75em;border:1px solid transparent;color:#eee;text-decoration:none}#ui-dialog-body.list li a:hover{background-color:#333;border-color:#eee}#ui-dialog-body.list a{-webk [...]
+<style id="style-ui-bar" type="text/css">#story{margin-left:20em;-webkit-transition:margin-left .2s ease-in;-o-transition:margin-left .2s ease-in;transition:margin-left .2s ease-in}#ui-bar.stowed~#story{margin-left:4.5em}@media screen and (max-width:1136px){#story{margin-left:19em}#ui-bar.stowed~#story{margin-left:3.5em}}@media screen and (max-width:768px){#story{margin-left:3.5em}}#ui-bar{background-color:#222;border-right:1px solid #444;height:100%;left:0;margin:0;padding:0;position:fi [...]
+<style id="style-ui-debug-bar" type="text/css">#debug-bar{background-color:#222;border-left:1px solid #444;border-top:1px solid #444;bottom:0;margin:0;max-height:95%;max-width:66em;min-width:300px;padding:.5em;position:fixed;right:0;z-index:99900}#debug-bar>div:not([id])+div{margin-top:.5em}#debug-bar>div>label{margin-right:.5em}#debug-bar>div>input[type=text]{min-width:8em;width:14em}#debug-bar>div>select{width:22em}#debug-bar-toggle{color:#eee;background-color:#222;border:1px solid #44 [...]
+<style id="style-ui-debug-views" type="text/css">html[data-debug-view] .debug{padding:.25em;background-color:#234}html[data-debug-view] .debug[title]{cursor:help}html[data-debug-view] .debug.block{display:inline-block;vertical-align:middle}html[data-debug-view] .debug.invalid{text-decoration:line-through}html[data-debug-view] .debug.hidden,html[data-debug-view] .debug.hidden .debug{background-color:#555}html:not([data-debug-view]) .debug.hidden{display:none}html[data-debug-view] .debug[d [...]
+</head>
+<body>
+ <div id="init-screen">
+ <div id="init-no-js"><noscript>JavaScript must be enabled to play.</noscript></div>
+ <div id="init-lacking"><p>Browser lacks capabilities required to play.</p><p>Upgrade or switch to another browser.</p></div>
+ <div id="init-loading"><div>Loading…</div></div>
+ </div>
+ <tw-storydata name="The Silent Mentor (ASF Interactive Scenario)" startnode="1" creator="Twine" creator-version="2.10.0" format="SugarCube" format-version="2.37.3" ifid="9E37F0F2-INCUBATOR-SILENT-MENTOR-FINAL-EXPANDED" options="" tags="" zoom="1" hidden><style role="stylesheet" id="twine-user-stylesheet" type="text/twine-css"></style><script role="script" id="twine-user-script" type="text/twine-javascript"></script><tw-passagedata pid="1" name="Start" tags="" position="25,25" size="100, [...]
+<<set $transparency = 0>> /* Visibility and clarity of mentor participation */
+<<set $collaboration = 0>> /* Shared responsibility and teamwork between mentors and PPMC */
+<<set $independence = 0>> /* PPMC-led governance and self-management */
+<<set $shortcuts = 0>> /* Skipping discussion or process corrections */
+<<set $escalation = 0>> /* Premature or excessive escalation */
+<<set $steps = 0>>
+
+You are one of three mentors on a healthy incubating Apache project.
+The podling is active and responsive. However, one mentor has not posted to the list, voted on releases,
+or acknowledged reports in over six months.
+
+The next quarterly report is due, and another mentor says:
+
+> "We have been the only ones signing off. Should we keep listing them?"
+
+What do you do?
+
+<<link "Raise the issue on the private@ list for visibility">><<goto "A">><</link>>
+<<link "Contact the mentor privately first">><<goto "B">><</link>>
+<<link "Leave things as they are for now">><<goto "C">><</link>>
+<<link "Escalate to the IPMC immediately">><<goto "D">><</link>>
+<<link "Encourage the PPMC to review mentor engagement themselves">><<goto "E">><</link>>
+<<link "Propose a timeboxed mentor check-in cadence">><<goto "F">><</link>>
+<<link "Check expectations against the project wiki and STATUS">><<goto "G">><</link>></tw-passagedata><tw-passagedata pid="2" name="A" tags="" position="150,25" size="100,100"><<set $steps += 1>>
+<<set $transparency += 2>> /* Discusses openly on private@ */
+<<set $collaboration += 1>> /* Invites shared accountability */
+
+You start a thread on private@:
+
+> "One mentor has not posted for half a year. Should we check if they still wish to continue?"
+
+Other mentors and the PPMC respond constructively.
+
+<<link "Propose to reach out together and summarise results on list">><<goto "A1Good">><</link>>
+<<link "Suggest removing the mentor immediately">><<goto "A1Fast">><</link>>
+<<link "Ping them publicly in next report draft for visibility">><<goto "A2PublicCallout">><</link>>
+<<link "Quietly ping once, then report back regardless">><<goto "A2QuietPingThenReport">><</link>>
+<<link "Open nominations to replace or add a mentor">><<goto "A2NominateReplacement">><</link>></tw-passagedata><tw-passagedata pid="3" name="A1Good" tags="" position="275,25" size="100,100"><<set $transparency += 1>> /* Keeps process visible */
+<<set $collaboration += 2>> /* Builds mutual trust */
+<<set $independence += 1>> /* Reinforces PPMC self-governance */
+
+You agree to contact the mentor together and post a summary later.
+The process is transparent, and the podling sees healthy oversight.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="4" name="A1Fast" tags="" position="400,25" size="100,100"><<set $escalation += 1>> /* Too hasty without closure */
+<<set $collaboration -= 1>> /* Risks alienating mentor or IPMC */
+
+You post, "Let us just remove them."
+Others object that mentors should be given a chance to confirm or step down gracefully.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="5" name="A2PublicCallout" tags="" position="525,25" size="100,100"><<set $transparency += 1>> /* Visible, but risky tone */
+<<set $collaboration -= 1>> /* Can feel performative */
+<<set $escalation += 1>> /* Borderline escalation in a formal artifact */
+
+You add a visible "mentor check-in requested" line in the report draft.
+Some appreciate clarity; others feel it pressures the individual.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="6" name="A2QuietPingThenReport" tags="" position="650,25" size="100,100"><<set $collaboration += 1>> /* Coordinated approach */
+<<set $transparency += 1>> /* Follow-up documented */
+<<set $shortcuts -= 0>> /* No shortcut taken, keep neutral */
+
+You send a brief ping and then summarise that outreach on private@ before the report.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="7" name="A2NominateReplacement" tags="" position="775,25" size="100,100"><<set $transparency += 1>> /* Done on private@ */
+<<set $collaboration += 1>> /* Group discussion */
+<<set $independence += 1>> /* PPMC maturity grows */
+
+You open a nominations thread for adding or replacing a mentor, pending contact with the inactive mentor.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="8" name="B" tags="" position="900,25" size="100,100"><<set $steps += 1>>
+<<set $collaboration += 1>> /* Shows initiative */
+<<set $transparency -= 1>> /* Moves discussion off list */
+
+You send a private email to the inactive mentor.
+No reply after a week. The other mentors still have not heard anything.
+
+<<link "Report back to private@ to document the attempt">><<goto "B1Good">><</link>>
+<<link "Decide to drop the matter for now">><<goto "B1Weak">><</link>>
+<<link "Escalate after no reply, ask IPMC for advice">><<goto "B2EscalateAfterNoReply">><</link>>
+<<link "Retry with a clear deadline, then summarise on list">><<goto "B2RetryThenSummarise">><</link>>
+<<link "Suggest the PPMC handle it informally off list">><<goto "B2DeflectToPPMCInformal">><</link>></tw-passagedata><tw-passagedata pid="9" name="B1Good" tags="" position="1025,25" size="100,100"><<set $transparency += 2>> /* Restores visibility */
+<<set $collaboration += 1>> /* Shares update responsibly */
+
+You post:
+"I reached out privately, no response so far. Let us document this in the report and consider updating mentors."
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="10" name="B1Weak" tags="" position="1150,25" size="100,100"><<set $shortcuts += 2>> /* Avoids follow-up */
+<<set $collaboration -= 1>> /* Leaves uncertainty */
+
+You decide not to follow up publicly.
+The inactivity continues unnoticed for another quarter.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="11" name="B2EscalateAfterNoReply" tags="" position="25,150" size="100,100"><<set $escalation += 1>> /* Early escalation */
+<<set $transparency += 1>> /* Visible but premature */
+
+You open a guidance thread on general@ asking for examples.
+You are advised to close the loop on private@ first.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="12" name="B2RetryThenSummarise" tags="" position="150,150" size="100,100"><<set $collaboration += 1>> /* Persists with courtesy */
+<<set $transparency += 1>> /* Documents outcome */
+<<set $independence += 1>> /* PPMC-led fix */
+
+You send a second, timeboxed ping, then summarise results and next steps on private@.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="13" name="B2DeflectToPPMCInformal" tags="" position="275,150" size="100,100"><<set $shortcuts += 1>> /* Off-list workaround */
+<<set $independence -= 1>> /* Blurs roles and venues */
+
+You suggest the PPMC "just handle it informally."
+Confusion increases about where mentoring accountability lives.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="14" name="C" tags="" position="400,150" size="100,100"><<set $steps += 1>>
+<<set $shortcuts += 2>> /* Avoids visible correction */
+<<set $transparency -= 1>> /* Keeps gap hidden from oversight */
+
+You decide not to mention the missing mentor. The report goes in as usual, signed by two mentors.
+No one follows up. Two sign-offs are acceptable for now.
+
+But over several quarters, the same pattern repeats.
+When the IPMC later reviews mentor coverage across all podlings, this gap finally stands out.
+
+<<link "Handle it reactively once questioned">><<goto "Damage">><</link>>
+<<link "Open a late corrective thread documenting the gap">><<goto "C1LateFixDocumented">><</link>>
+<<link "Quietly replace the mentor without discussion">><<goto "C1ReplaceWithoutConsult">><</link>>
+<<link "Start a light check-in thread to re-engage mentors">><<goto "C1OpenCheckinThread">><</link>></tw-passagedata><tw-passagedata pid="15" name="C1LateFixDocumented" tags="" position="525,150" size="100,100"><<set $transparency += 1>> /* Belated visibility */
+<<set $collaboration += 1>> /* Shared clean-up */
+<<set $shortcuts -= 0>> /* Still late */
+
+You acknowledge the gap and propose a small improvement plan.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="16" name="C1ReplaceWithoutConsult" tags="" position="650,150" size="100,100"><<set $shortcuts += 1>> /* Skips courtesy contact */
+<<set $collaboration -= 1>> /* Reduces trust */
+
+You swap out the mentor name in STATUS and the report without contacting them.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="17" name="C1OpenCheckinThread" tags="" position="775,150" size="100,100"><<set $transparency += 2>> /* Visible practice */
+<<set $collaboration += 1>> /* Re-engages people */
+<<set $independence += 1>> /* PPMC-led rhythm */
+
+You start a monthly "mentor check-in" thread.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="18" name="D" tags="" position="900,150" size="100,100"><<set $steps += 1>>
+<<set $escalation += 2>> /* Premature escalation to public venue */
+<<set $transparency += 1>> /* Visible but misplaced */
+<<set $independence -= 1>> /* Reduces project autonomy */
+
+You post to general@incubator.apache.org asking,
+"One of our mentors has gone missing. What should we do?"
+
+Several IPMC members remind you that this should start with private@ discussion first.
+
+<<link "Acknowledge and move discussion back to private@">><<goto "D1Good">><</link>>
+<<link "Keep the public thread going">><<goto "D1Bad">><</link>>
+<<link "Start a meta-thread capturing lessons learned">><<goto "D2MetaThreadLessons">><</link>>
+<<link "Escalate further by hinting at board attention">><<goto "D2EscalateToBoardRumor">><</link>></tw-passagedata><tw-passagedata pid="19" name="D1Good" tags="" position="1025,150" size="100,100"><<set $transparency += 1>> /* Corrects visibility */
+<<set $collaboration += 1>> /* Returns to proper venue */
+<<set $independence += 1>> /* Respects project-led correction */
+
+You post a polite redirect and continue privately. The PPMC handles it well.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="20" name="D1Bad" tags="" position="1150,150" size="100,100"><<set $escalation += 1>> /* Extends escalation */
+<<set $collaboration -= 1>> /* Damages trust */
+
+The mentor sees the thread later and feels criticised in public.
+The podling feels caught in the crossfire.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="21" name="D2MetaThreadLessons" tags="" position="25,275" size="100,100"><<set $transparency += 1>> /* Surfacing patterns */
+<<set $escalation += 1>> /* Still public-first */
+
+You start a thread to gather practices across podlings without naming names.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="22" name="D2EscalateToBoardRumor" tags="" position="150,275" size="100,100"><<set $escalation += 2>> /* Needless escalation */
+<<set $collaboration -= 1>> /* Harms trust widely */
+
+You imply you might raise this to the board if it continues.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="23" name="E" tags="" position="275,275" size="100,100"><<set $steps += 1>>
+<<set $independence += 2>> /* Encourages PPMC self-assessment */
+<<set $transparency += 1>> /* Keeps mentoring visible */
+<<set $collaboration += 1>> /* Builds shared accountability */
+
+You suggest to the PPMC:
+
+"You can assess mentor coverage yourselves. Let us include a short note in the next report."
+
+They agree and plan to discuss mentor engagement each quarter.
+
+<<link "Encourage them to document expectations">><<goto "E1Good">><</link>>
+<<link "Let them handle it informally">><<goto "E1Weak">><</link>>
+<<link "Rotate a mentor of the month for visible check-ins">><<goto "E2RotateMentorOfTheMonth">><</link>>
+<<link "Run a brief survey but take no action">><<goto "E2SurveyWithoutAction">><</link>>
+<<link "Add more mentors to compensate, without fixing participation">><<goto "E2OvercorrectAddMoreMentors">><</link>></tw-passagedata><tw-passagedata pid="24" name="E1Good" tags="" position="400,275" size="100,100"><<set $transparency += 1>> /* Captures learning */
+<<set $collaboration += 1>> /* Improves visibility */
+<<set $independence += 1>> /* Builds maturity */
+
+The PPMC adds a section to their wiki on mentor roles and engagement expectations.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="25" name="E1Weak" tags="" position="525,275" size="100,100"><<set $shortcuts += 1>> /* Defers improvement */
+<<set $collaboration += 1>> /* Still cooperative */
+
+They agree in principle but do not document anything.
+Next cycle, the same confusion arises.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="26" name="E2RotateMentorOfTheMonth" tags="" position="650,275" size="100,100"><<set $transparency += 1>> /* Regular visible touchpoints */
+<<set $collaboration += 1>> /* Shared ownership */
+<<set $independence += 1>> /* PPMC-led rhythm */
+
+A simple rotation ensures each mentor checks in monthly.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="27" name="E2SurveyWithoutAction" tags="" position="775,275" size="100,100"><<set $transparency += 1>> /* Input gathered */
+<<set $shortcuts += 1>> /* No follow-through */
+
+A quick survey surfaces issues but no changes are made.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="28" name="E2OvercorrectAddMoreMentors" tags="" position="900,275" size="100,100"><<set $shortcuts += 1>> /* Avoids the root cause */
+<<set $collaboration -= 1>> /* Dilutes accountability */
+
+You add more mentors without addressing participation expectations.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="29" name="F" tags="" position="1025,275" size="100,100"><<set $steps += 1>>
+<<set $transparency += 1>> /* Proposes routine visibility */
+<<set $collaboration += 1>> /* Shared cadence */
+<<set $independence += 1>> /* PPMC-led scheduling */
+
+You propose a monthly, timeboxed mentor check-in cadence with a one-line "still here" reply expectation.
+
+<<link "Confirm cadence on private@ and note in next report">><<goto "F1Good">><</link>>
+<<link "Pilot it informally off list first">><<goto "F1InformalPilot">><</link>>
+<<link "Make it mandatory immediately without discussion">><<goto "F1HardMandate">><</link>></tw-passagedata><tw-passagedata pid="30" name="F1Good" tags="" position="1150,275" size="100,100"><<set $transparency += 1>> /* Documented practice */
+<<set $collaboration += 1>> /* Consensus-based */
+<<set $independence += 1>> /* Sustained ownership */
+
+The cadence is adopted and referenced in STATUS and reports.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="31" name="F1InformalPilot" tags="" position="25,400" size="100,100"><<set $shortcuts += 1>> /* Off-list trial lacks visibility */
+<<set $collaboration += 1>> /* Cooperative intent */
+
+A few people try it ad hoc, but it never becomes a project practice.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="32" name="F1HardMandate" tags="" position="150,400" size="100,100"><<set $escalation += 1>> /* Imposed without consensus */
+<<set $collaboration -= 1>> /* Reduces goodwill */
+
+You announce a hard rule without prior discussion.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="33" name="G" tags="" position="275,400" size="100,100"><<set $steps += 1>>
+<<set $transparency += 1>> /* Checks documentation */
+<<set $collaboration += 1>> /* Works with PPMC */
+<<set $independence += 1>> /* Encourages self-governance */
+
+You review the wiki and STATUS to confirm mentor expectations are clear and current.
+
+<<link "Open a doc patch to clarify expectations and reporting">><<goto "G1DocPatch">><</link>>
+<<link "Note gaps privately without filing a patch">><<goto "G1AuditOnly">><</link>>
+<<link "Propose removing the mentor text entirely to avoid confusion">><<goto "G1RemoveText">><</link>></tw-passagedata><tw-passagedata pid="34" name="G1DocPatch" tags="" position="400,400" size="100,100"><<set $transparency += 1>> /* Clear references */
+<<set $collaboration += 1>> /* Co-author changes */
+
+You submit a patch that clarifies mentor roles and sign-off visibility.
+
+<<link "Go to resolution">><<goto "Resolution">><</link>></tw-passagedata><tw-passagedata pid="35" name="G1AuditOnly" tags="" position="525,400" size="100,100"><<set $shortcuts += 1>> /* Observation without action */
+
+You log a private note but do not file a patch.
+
+<<link "Go to partial">><<goto "Partial">><</link>></tw-passagedata><tw-passagedata pid="36" name="G1RemoveText" tags="" position="650,400" size="100,100"><<set $shortcuts += 1>> /* Removes guidance rather than fixing it */
+<<set $independence -= 1>> /* Less clarity for the PPMC */
+
+You remove the mentor expectations section to avoid contention.
+
+<<link "Go to damage">><<goto "Damage">><</link>></tw-passagedata><tw-passagedata pid="37" name="Resolution" tags="" position="775,400" size="100,100"><<set $steps += 1>>
+
+The mentoring issue was handled transparently and constructively.
+PPMC and mentors cooperated in the open.
+Coverage and accountability improved.
+Lessons were documented for future podlings.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="38" name="Partial" tags="" position="900,400" size="100,100"><<set $steps += 1>>
+
+The situation was addressed but not fully resolved.
+The podling continues with partial oversight, risking confusion about accountability.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="39" name="Damage" tags="" position="1025,400" size="100,100"><<set $steps += 1>>
+
+The long silence became noticeable only after several quarters,
+when the IPMC reviewed mentor coverage across all podlings.
+The podling appears stable, but the lack of visible mentorship raises concern.
+
+The IPMC reminds all mentors to post occasional check-ins,
+even brief "+1, still here" notes, to keep oversight visible.
+
+<<link "Reflect on your choices">><<goto "Reflect">><</link>></tw-passagedata><tw-passagedata pid="40" name="Reflect" tags="" position="1150,400" size="100,100"><<set $total = $transparency + $collaboration + $independence - $shortcuts - $escalation>>
+
+You have reached the end of the scenario.
+
+<<if $total >= 8>>
+You modelled ASF-aligned mentoring: transparent, balanced, and empowering for the PPMC.
+<</if>>
+
+<<if $total >= 4 and $total < 8>>
+You resolved the problem effectively but could have improved long-term visibility or shared learning.
+<</if>>
+
+<<if $total >= 0 and $total < 4>>
+The issue was managed, but with limited transparency or collaboration. Oversight gaps may persist.
+<</if>>
+
+<<if $total < 0>>
+The approach reduced community trust and transparency. Mentor changes should be handled visibly and with empathy.
+<</if>>
+
+''Reflection Questions''
+
+- How does visibility of mentor activity affect community trust?
+- What is the difference between transparency and escalation in this context?
+- How can mentors model accountability without taking control from the PPMC?
+- How might this scenario connect to the ASF value of community-led governance?
+
+<<link "Restart Scenario">><<goto "Start">><</link>></tw-passagedata></tw-storydata>
+ <script id="script-sugarcube" type="text/javascript">
+ /*! SugarCube JS */
+ if(document.documentElement.getAttribute("data-init")==="loading"){(function(window,document,jQuery,undefined){"use strict";var _excluded=["bubbles","cancelable","composed","detail"],_excluded2=["bubbles","cancelable"],_excluded3=["state"];function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be [...]
+ </script>
+</body>
+</html>
diff --git a/pages/training/scenarios/index.md b/pages/training/scenarios/index.md
new file mode 100644
index 000000000..e11460d05
--- /dev/null
+++ b/pages/training/scenarios/index.md
@@ -0,0 +1,48 @@
+//Licensed under the Apache License, Version 2.0 (the "License");
+//you may not use this file except in compliance with the License.
+//You may obtain a copy of the License at
+//
+//http://www.apache.org/licenses/LICENSE-2.0
+//
+//Unless required by applicable law or agreed to in writing, software
+//distributed under the License is distributed on an "AS IS" BASIS,
+//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//See the License for the specific language governing permissions and
+//limitations under the License.
+
+= Mentoring in Practice
+Apache Incubator PMC
+2025-10-27
+:jbake-type: guide
+:jbake-status: published
+:idprefix:
+:toc:
+:imagesdir: ../images/
+
+These interactive modules are designed for ASF Incubator mentors to explore real-world situations and decision-making challenges.
+Each story is drawn from anonymised case studies of past podlings and allows you to test your judgment in realistic, branching mentoring scenarios.
+
+> **Purpose:** Build mentoring confidence through guided reflection and practice.
+> **Note:** Educational content; some details are simplified for clarity.
+
+---
+
+## 🎮 Interactive Modules
+
+- 🎮 [Brand and Governance Blur](./BrandandGovernanceBlur.html) — when a project’s public identity and company branding begin to overlap
+- 🎮 [Conflicting Mentor Advice](./ConflictingMentorAdvice.html) — how mentors can coordinate when giving different guidance
+- 🎮 [Cross-List Release Vote Confusion](./CrossListReleaseVoteConfusion.html) — when unclear communication leads to duplicate or conflicting votes
+- 🎮 [Cultural Misunderstanding](./CulturalMisunderstanding.html) — recognising and resolving cross-cultural communication issues
+- 🎮 [Lazy Consensus Gone Wrong](./LazyConsensusGoneWrong.html) — when silence is misread as agreement
+- 🎮 [Mentor Dependency](./MentorDependency.html) — supporting rather than steering a developing community
+- 🎮 [The Employer-Dominated Podling](./TheEmployerDominatedPodling.html) — maintaining independence when one company leads most activity
+- 🎮 [The Heated Thread](./TheHeatedThread.html) — de-escalating tensions while keeping discussion transparent
+- 🎮 [The Silent Mentor](./TheSilentMentor.html) — handling mentor absence or inactivity during key stages
+
+---
+
+## 📘 Related Resources
+
+- 📘 [Practicing The Apache Way](https://cwiki.apache.org/confluence/display/INCUBATOR/Practicing+The+Apache+Way)
+
+---
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@incubator.apache.org
For additional commands, e-mail: cvs-help@incubator.apache.org