File size: 19,383 Bytes
cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 93efc05 cd365ec 47e605d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Open-Loop Society Simulator v0.1.3 β Static HF Repair</title>
<style>
:root{--bg:#0b0d10;--panel:#121821;--panel2:#171f2b;--ink:#e9f0f8;--muted:#a9b8c9;--line:#2a3748;--accent:#e7b65d;--good:#8ef0b0;--warn:#ffd166;--bad:#ff7d7d;--blue:#86b7ff;--violet:#c7a5ff;--pink:#ff9ec7}*{box-sizing:border-box}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:radial-gradient(circle at 20% 0%,rgba(231,182,93,.13),transparent 35%),radial-gradient(circle at 80% 10%,rgba(127,209,174,.10),transparent 38%),linear-gradient(180deg,#080a0d,var(--bg));color:var(--ink)}header{padding:34px 22px 22px;border-bottom:1px solid var(--line);background:rgba(8,10,13,.78);position:sticky;top:0;z-index:10;backdrop-filter:blur(10px)}.wrap{max-width:1240px;margin:0 auto}h1{margin:0 0 8px;font-size:clamp(28px,5vw,48px);letter-spacing:-.04em;line-height:1.02}.subtitle{font-size:clamp(15px,2vw,20px);color:var(--muted);max-width:1040px;line-height:1.45}.tagrow{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.tag{border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--muted);padding:6px 10px;border-radius:999px;font-size:13px}main{padding:22px}.grid{display:grid;grid-template-columns:390px 1fr;gap:18px;align-items:start}@media(max-width:980px){.grid{grid-template-columns:1fr}}.card{background:linear-gradient(180deg,var(--panel),#0f141c);border:1px solid var(--line);border-radius:18px;box-shadow:0 16px 42px rgba(0,0,0,.35);overflow:hidden}.card h2{margin:0;padding:16px 18px;border-bottom:1px solid var(--line);font-size:18px;letter-spacing:-.02em}.body{padding:16px 18px}.notice{border:1px solid rgba(231,182,93,.35);background:rgba(231,182,93,.08);border-radius:16px;padding:14px;color:#f7e3bd;line-height:1.45;margin-bottom:14px}.controls{display:grid;gap:12px}.row{display:grid;grid-template-columns:1fr 64px;gap:10px;align-items:center;padding:10px;border:1px solid rgba(255,255,255,.06);border-radius:12px;background:rgba(255,255,255,.025)}label{font-size:13px;color:var(--ink);font-weight:650}.small{font-size:12px;color:var(--muted);line-height:1.35;margin-top:4px}input[type=range]{width:100%;accent-color:var(--accent)}.val{font-variant-numeric:tabular-nums;text-align:right;color:var(--accent);font-weight:750}select,button{width:100%;border:1px solid var(--line);border-radius:12px;background:var(--panel2);color:var(--ink);padding:11px 12px;font-weight:700}button{cursor:pointer;background:linear-gradient(180deg,#26364a,#172231)}button:hover{border-color:var(--accent)}.btnrow{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}@media(max-width:780px){.metrics{grid-template-columns:repeat(2,1fr)}}.metric{border:1px solid var(--line);background:rgba(255,255,255,.035);border-radius:14px;padding:12px;min-height:78px}.name{font-size:12px;color:var(--muted)}.num{font-size:28px;font-weight:850;letter-spacing:-.04em;margin-top:4px}.hint{font-size:11px;color:var(--muted);margin-top:2px}canvas{width:100%;height:330px;display:block;background:#0a0f15;border:1px solid var(--line);border-radius:14px}.chartblock{display:grid;gap:14px}.legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;color:var(--muted);font-size:12px}.sw{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-2px}.diag{white-space:pre-wrap;background:rgba(255,255,255,.035);border:1px solid var(--line);border-radius:14px;padding:14px;color:#dce7f2;line-height:1.45}.registry{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}@media(max-width:980px){.registry{grid-template-columns:1fr}}details{border:1px solid var(--line);background:rgba(255,255,255,.025);border-radius:14px;padding:12px 14px}summary{cursor:pointer;font-weight:800;color:var(--ink)}details p{color:var(--muted);line-height:1.45;margin:10px 0 0;font-size:13px}.footer{color:var(--muted);font-size:12px;padding:26px 0 10px;line-height:1.5}code{color:#f7d48d}
</style>
</head>
<body>
<header><div class="wrap"><h1>Open-Loop Society Simulator v0.1.3</h1><div class="subtitle">Contested Exit Patch β a bounded HIR/OAM symbolic simulator for tracing whether open-loop capture pressure outruns societyβs ability to translate and repair pressure over a 50-year horizon.</div><div class="tagrow"><span class="tag">Seed: recommender β micro-loop cognition β hollow closure</span><span class="tag">Core test: P_capture vs R_repair</span><span class="tag">Exit is contested</span><span class="tag">Structural model, not empirical prediction</span></div></div></header>
<main class="wrap">
<div class="notice"><strong>Boundary:</strong> This instrument does not prove future outcomes, causation, or intent. It is a review model for pressure logic: <code>the feed does not have to break everyone; it only has to generate pressure faster than society can translate it.</code></div>
<div class="grid"><section class="card"><h2>Controls</h2><div class="body"><div class="controls"><div><label for="scenario">Scenario preset</label><select id="scenario"><option value="A">Run A β Capture Outruns Repair</option><option value="B">Run B β Repair Infrastructure Rebuilt</option><option value="custom">Custom</option></select><div class="small">Run B begins with the same baseline, then applies repair interventions after year 5.</div></div><div id="sliders"></div><div class="btnrow"><button id="exportJson">Export JSON</button><button id="exportCsv">Export CSV</button></div></div></div></section><section class="card"><h2>50-Year Simulation Output</h2><div class="body"><div class="metrics"><div class="metric"><div class="name">Year 50 S_society</div><div class="num" id="m_stability">β</div><div class="hint">agency Γ loop β pressure</div></div><div class="metric"><div class="name">Pressure Gap</div><div class="num" id="m_gap">β</div><div class="hint">P_capture adjusted β R_repair</div></div><div class="metric"><div class="name">Re-entry Pressure</div><div class="num" id="m_reentry">β</div><div class="hint">exit friction Γ outsourced agency Γ habit Γ FOMO</div></div><div class="metric"><div class="name">Exit State</div><div class="num" id="m_exit">β</div><div class="hint">contested / tethered / sustained</div></div></div><div class="chartblock"><div><canvas id="chart1" width="920" height="330"></canvas><div class="legend"><span><span class="sw" style="background:#e7b65d"></span>S_society</span><span><span class="sw" style="background:#86b7ff"></span>P_capture adjusted</span><span><span class="sw" style="background:#8ef0b0"></span>R_repair</span><span><span class="sw" style="background:#ff7d7d"></span>P_reentry</span></div></div><div><canvas id="chart2" width="920" height="330"></canvas><div class="legend"><span><span class="sw" style="background:#c7a5ff"></span>B_loop</span><span><span class="sw" style="background:#ffd166"></span>G_generation</span><span><span class="sw" style="background:#7fd1ae"></span>C_cognition</span><span><span class="sw" style="background:#ff9ec7"></span>M_market</span></div></div></div><h2 style="padding:18px 0 10px;border:0">Decade Diagnosis</h2><div class="diag" id="diagnosis"></div></div></section></div>
<section class="card" style="margin-top:18px"><h2>Vector Registry v0.1</h2><div class="body registry" id="registry"></div></section>
<section class="card" style="margin-top:18px"><h2>Model Notes</h2><div class="body"><p class="small" style="font-size:14px"><strong>Core equation:</strong> S_society = A_agency Γ B_loop β P_capture_adjusted.<br><br><strong>Contested exit rule:</strong> exit only becomes real when P_reentry falls below R_repair. An inactive user can remain structurally tethered through habit, identity, FOMO, and lack of replacement repair loops.<br><br><strong>Repair rule:</strong> pressure becomes learning only when society can translate it faster than open-loop systems generate it.</p></div></section>
<div class="footer">Created and Developed by Collin D. Weber β Primordial Calculus / HIR-OAM. v0.1.3 Static HF Repair. Offline single-file HTML. No external libraries.</div>
</main>
<script>
/* Static HF repair: no Python wrapper, no dynamic iframe resizing, fixed scenario-selector JS collision. */
const clamp=x=>Math.max(0,Math.min(1,x)); const fmt=x=>(Math.round(x*100)/100).toFixed(2);
const defs={P_capture:[.78,'Open-loop feed / platform capture pressure'],R_repair:[.42,'Repair infrastructure capacity'],C_cognition:[.55,'Cognition literacy / self-translation'],L_loop:[.52,'Loop-closure capacity'],T_time:[.40,'Recovery time reserve'],I_institution:[.48,'Institutional trust / repair legitimacy'],M_market:[.65,'Market format capture'],G_generation:[.50,'Generational repair/degradation inheritance'],E_exit:[.72,'Exit friction / contested departure'],O_agency:[.62,'Outsourced agency susceptibility'],H_habit:[.70,'Learned feed habit strength'],F_fomo:[.68,'Missed-opportunity / re-entry hook pressure'],D_dogma:[.35,'Dogmatic outsourcing multiplier']};
let defaults=Object.fromEntries(Object.entries(defs).map(([k,v])=>[k,v[0]])); let state={...defaults}, activeScenario='A', lastResults=[];
const registry=[['Memory / Provenance Collapse','micro-loop stimulus β emotional imprint β source loss β belief residue β identity attachment','Repair: provenance literacy, source-return protocols, reflective journaling.'],['Reading / Long-Form Literacy','short-stimulus appetite β collapsed symbolic endurance β difficulty holding sustained narrative','Repair: long-form reading, slow-reading, deep-listening.'],['Symbolic / Narrative Collapse','micro-loop cognition β inability to hold complex symbolic structures','Repair: symbolic endurance and narrative reconstruction.'],['Craft / Skill-Acquisition','low boredom tolerance β aborted mastery loops β shallow competence','Repair: apprenticeships, deliberate practice, boredom tolerance.'],['Self-Authorship / Future-Self Continuity','identity uncertainty β influencer templates β borrowed desire β weak long-horizon self','Repair: future-self simulation, mentoring arcs.'],['Caregiving / Empathy Fatigue','suffering-as-content β emotional spike β swipe β no sustained repair','Repair: sustained-care practices and empathy endurance.'],['Elder / Intergenerational Memory','micro-loop cognition β elder speech feels slow β inherited memory discarded','Repair: elder-youth storytelling and mentoring.'],['Moral Development / Consequence Memory','action-without-aftermath β reaction-without-responsibility','Repair: consequence mapping and restorative justice.'],['Public-Space Conduct','private pressure β public performance script β staged confrontation','Repair: de-escalation, public-space repair circles.'],['Addiction Crossover / Dopamine Baseline','feed-trained tolerance β offline life feels flat β stronger stimuli seeking','Repair: dopamine reset, nature, mastery-based activity.'],['Cultural / Artistic Homogenization','viral remix logic β slow local tradition outcompeted','Repair: local arts patronage, slow-craft apprenticeship.'],['Repair Infrastructure Failure','capture pressure accelerates β repair systems are weak β pressure accumulates faster than translation','Repair: restorative schools, community repair, therapy access, cognition literacy.'],['Exit Friction / Re-Entry Capture','attempted exit β identity recognition β FOMO/habit tether β agency weakness β re-entry','Repair: clean deletion, habit replacement, community support, exit as success state.'],['Dogmatic Outsourcing Multiplier','authority closure β captured resonance β feed captures the captured closure','Repair: living inquiry, conscience, humility, repair over dogma.']];
function renderSliders(){document.getElementById('sliders').innerHTML=Object.entries(defs).map(([k,v])=>`<div class="row"><div><label>${k}</label><input data-var="${k}" type="range" min="0" max="1" step="0.01" value="${state[k]}"><div class="small">${v[1]}</div></div><div class="val" id="v_${k}">${fmt(state[k])}</div></div>`).join('');document.querySelectorAll('input[type=range]').forEach(inp=>inp.addEventListener('input',()=>{activeScenario='custom';document.getElementById('scenario').value='custom';state[inp.dataset.var]=parseFloat(inp.value);updateVals();run()}));}
function renderRegistry(){document.getElementById('registry').innerHTML=registry.map(([n,b,d])=>`<details><summary>${n}</summary><p><strong>Seed Backtrace:</strong> ${b}</p><p>${d}</p></details>`).join('')}
function updateVals(){for(const k in state){let el=document.getElementById('v_'+k); if(el) el.textContent=fmt(state[k])}}
function setScenario(sc){activeScenario=sc;if(sc==='A'||sc==='B'){state={...defaults};renderSliders()}updateVals();run()}
function derived(s){let A=.25*s.T_time+.25*s.C_cognition+.20*s.I_institution+.15*s.R_repair+.15*s.L_loop;let B=.30*s.L_loop+.25*s.C_cognition+.20*s.I_institution+.15*s.G_generation+.10*s.T_time;let P_re=s.E_exit*s.O_agency*s.H_habit*s.F_fomo*(1-s.R_repair);let Padj=clamp((s.P_capture+.35*P_re)*(1+0.20*s.D_dogma));let Popen=clamp((.40*Padj+.25*s.M_market+.15*(1-s.T_time)+.10*(1-s.I_institution)+.10*(1-s.C_cognition))*(1+0.10*s.D_dogma));let Badj=clamp(B*(1-0.20*s.D_dogma));let S=A*Badj-Popen;return {A_agency:A,B_loop:Badj,P_reentry:P_re,P_capture_adjusted:Padj,P_openloop:Popen,S_society:S}}
function step(s,yr){let ns={...s};if(activeScenario==='B'&&yr>=5){ns.R_repair=clamp(ns.R_repair+.015);ns.P_capture=clamp(ns.P_capture-.008);ns.E_exit=clamp(ns.E_exit-.008);ns.F_fomo=clamp(ns.F_fomo-.006);ns.D_dogma=clamp(ns.D_dogma-.004)}let d=derived(ns), gap=d.P_capture_adjusted-ns.R_repair;if(gap>0){ns.C_cognition=clamp(ns.C_cognition-.030*gap);ns.L_loop=clamp(ns.L_loop-.035*gap);ns.T_time=clamp(ns.T_time-.020*gap);ns.I_institution=clamp(ns.I_institution-.025*gap);ns.M_market=clamp(ns.M_market+.030*gap);ns.G_generation=clamp(ns.G_generation-.030*gap);ns.O_agency=clamp(ns.O_agency+.018*gap);ns.H_habit=clamp(ns.H_habit+.012*gap)}else{let rg=-gap;ns.C_cognition=clamp(ns.C_cognition+.025*rg);ns.L_loop=clamp(ns.L_loop+.030*rg);ns.T_time=clamp(ns.T_time+.015*rg);ns.I_institution=clamp(ns.I_institution+.025*rg);ns.M_market=clamp(ns.M_market-.020*rg);ns.G_generation=clamp(ns.G_generation+.030*rg);ns.O_agency=clamp(ns.O_agency-.015*rg);ns.H_habit=clamp(ns.H_habit-.010*rg)}return ns}
function run(){let s={...state};let rows=[];for(let year=0;year<=50;year++){let d=derived(s);rows.push({year,...s,...d,gap:d.P_capture_adjusted-s.R_repair});if(year<50)s=step(s,year)}lastResults=rows;drawAll(rows);metrics(rows.at(-1));diagnosis(rows)}
function metrics(last){document.getElementById('m_stability').textContent=fmt(last.S_society);document.getElementById('m_gap').textContent=fmt(last.gap);document.getElementById('m_reentry').textContent=fmt(last.P_reentry);let ex=last.P_reentry<last.R_repair?'Sustained':last.P_reentry<last.R_repair+.15?'Tethered':'Contested';let exitEl=document.getElementById('m_exit');exitEl.textContent=ex;exitEl.style.color=ex==='Sustained'?'var(--good)':ex==='Tethered'?'var(--warn)':'var(--bad)'}
function drawAll(rows){draw('chart1',rows,[['S_society','#e7b65d',-1,1],['P_capture_adjusted','#86b7ff',0,1],['R_repair','#8ef0b0',0,1],['P_reentry','#ff7d7d',0,1]],true);draw('chart2',rows,[['B_loop','#c7a5ff',0,1],['G_generation','#ffd166',0,1],['C_cognition','#7fd1ae',0,1],['M_market','#ff9ec7',0,1]],false)}
function draw(id,rows,series,neg){let c=document.getElementById(id),ctx=c.getContext('2d'),W=c.width,H=c.height,p={l:54,r:20,t:18,b:40},min=neg?-1:0,max=1;ctx.clearRect(0,0,W,H);ctx.fillStyle='#0a0f15';ctx.fillRect(0,0,W,H);let X=yr=>p.l+(yr/50)*(W-p.l-p.r),Y=v=>p.t+(max-v)/(max-min)*(H-p.t-p.b);ctx.strokeStyle='rgba(255,255,255,.08)';ctx.lineWidth=1;ctx.font='12px system-ui';ctx.fillStyle='rgba(233,240,248,.58)';for(let i=0;i<=4;i++){let val=min+i*(max-min)/4;ctx.beginPath();ctx.moveTo(p.l,Y(val));ctx.lineTo(W-p.r,Y(val));ctx.stroke();ctx.fillText(val.toFixed(1),10,Y(val)+4)}for(let i=0;i<=5;i++){let yr=i*10;ctx.beginPath();ctx.moveTo(X(yr),p.t);ctx.lineTo(X(yr),H-p.b);ctx.stroke();ctx.fillText(String(yr),X(yr)-7,H-14)}if(neg){ctx.strokeStyle='rgba(255,255,255,.24)';ctx.beginPath();ctx.moveTo(p.l,Y(0));ctx.lineTo(W-p.r,Y(0));ctx.stroke()}for(const [key,color] of series){ctx.strokeStyle=color;ctx.lineWidth=3;ctx.beginPath();rows.forEach((r,i)=>{let xx=X(r.year),yy=Y(r[key]);if(i===0)ctx.moveTo(xx,yy);else ctx.lineTo(xx,yy)});ctx.stroke()}}
function dec(rows,a,b){let x=rows.find(r=>r.year===a),y=rows.find(r=>r.year===b);return `Years ${a}β${b}: ${y.P_capture_adjusted>y.R_repair?'capture pressure remains above repair capacity':'repair capacity exceeds adjusted capture pressure'}; ${y.S_society-x.S_society>=0?'stability improves or holds':'stability declines'}; ${y.G_generation-x.G_generation>=0?'generational inheritance improves':'generational inheritance degrades'}.`}
function diagnosis(rows){let last=rows.at(-1),mode=last.S_society>0?'REPAIR-POSITIVE':last.S_society>-.15?'LIMINAL / UNSTABLE':'DEGRADATION-COMPOUNDING';let exit=last.P_reentry<last.R_repair?'Exit pressure is below repair capacity: sustained exit becomes plausible.':'Re-entry pressure remains above repair capacity: inactive users can remain tethered.';document.getElementById('diagnosis').textContent=[`Final state: ${mode}`,`Core rule: ${last.P_capture_adjusted>last.R_repair?'P_capture_adjusted > R_repair, capture outruns repair.':'R_repair > P_capture_adjusted, repair outruns capture.'}`,exit,'',dec(rows,0,10),dec(rows,10,20),dec(rows,20,30),dec(rows,30,40),dec(rows,40,50),'','Interpretation: the instrument traces whether a society can close loops faster than open-loop systems generate pressure.'].join('\n')}
function download(name,mime,text){let blob=new Blob([text],{type:mime}),url=URL.createObjectURL(blob),a=document.createElement('a');a.href=url;a.download=name;document.body.appendChild(a);a.click();setTimeout(()=>{URL.revokeObjectURL(url);a.remove()},100)}
function exportJSON(){download('open_loop_society_simulator_v0_1_1_review_packet.json','application/json',JSON.stringify({title:'Open-Loop Society Simulator v0.1.3 β Static HF Repair',boundary:'Structural pressure model only; not empirical prediction or causal proof.',scenario:activeScenario,inputs:state,equations:{S_society:'A_agency * B_loop - P_openloop',P_reentry:'E_exit * O_agency * H_habit * F_fomo * (1 - R_repair)',P_capture_adjusted:'(P_capture + 0.35 * P_reentry) * (1 + 0.20 * D_dogma)',contested_exit_rule:'Exit only becomes real when P_reentry < R_repair'},registry:registry.map(([name,seed,detail])=>({name,seed,detail})),results:lastResults},null,2))}
function exportCSV(){let keys=Object.keys(lastResults[0]);download('open_loop_society_simulator_v0_1_1_curves.csv','text/csv',[keys.join(',')].concat(lastResults.map(r=>keys.map(k=>typeof r[k]==='number'?r[k].toFixed(6):JSON.stringify(r[k])).join(','))).join('\n'))}
document.getElementById('exportJson').addEventListener('click', exportJSON);document.getElementById('exportCsv').addEventListener('click', exportCSV);document.getElementById('scenario').addEventListener('change', e=>setScenario(e.target.value));renderSliders();renderRegistry();setScenario('A');
</script>
</body>
</html>
|