File size: 8,871 Bytes
a6a5d8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5684452
55e5019
a6a5d8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5684452
55e5019
a6a5d8e
 
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html>
<!-- SPDX-License-Identifier: Apache-2.0 © 2026 Lutar, Stephen P. — SZL Holdings · Doctrine v11+ -->
<!-- AYNI-OS surface — reciprocity organism + event-sourced replay + Tinkuy flow. ADDITIVE. -->
<!-- HONEST: Ayni = game-theory primitive (Axelrod-Hamilton 1981). Replay = event-sourcing,
     NOT time-travel. Tinkuy = Kuramoto 1975 order parameter. No mysticism. -->
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>a11oy · AYNI-OS — reciprocity organism &amp; time-reversible replay</title>
<style>
:root{--bg:#0b0d12;--panel:#12151d;--ink:#e7ecf3;--mut:#8a93a6;--acc:#7cc4ff;--ok:#54d18c;--warn:#ffcf5c;--bad:#ff6b6b;--line:#222838;--mono:'SF Mono',ui-monospace,'JetBrains Mono',Menlo,Consolas,monospace}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.55 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif}
a{color:var(--acc)}
.wrap{max-width:1040px;margin:0 auto;padding:28px 20px 80px}
.top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:16px}
.brand{font-weight:700;letter-spacing:.5px}.tag{font-size:12px;color:var(--mut)}
.nav a{margin-left:14px;font-size:13px;text-decoration:none;color:var(--mut)}.nav a:hover{color:var(--acc)}
h1{font-size:26px;margin:24px 0 6px}.sub{color:var(--mut);margin:0 0 18px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px;margin:14px 0;border-left:3px solid var(--ok)}
.card h2{margin:0 0 4px;font-size:17px}
.path{font-family:var(--mono);font-size:12.5px;color:var(--acc);margin:6px 0}
pre{width:100%;background:#0a0c11;color:var(--ink);border:1px solid var(--line);border-radius:8px;font-family:var(--mono);font-size:12px;padding:10px;overflow:auto;max-height:240px;white-space:pre-wrap;word-break:break-word}
button{background:var(--acc);color:#06121f;border:0;border-radius:8px;padding:9px 16px;font-weight:600;cursor:pointer;font-size:13px;margin:8px 8px 8px 0}
input[type=range]{width:100%}
.mut{color:var(--mut);font-size:13px}
.gauges{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:10px}
.g{background:#0a0c11;border:1px solid var(--line);border-radius:10px;padding:10px}
.g .name{font-family:var(--mono);font-size:12px;color:var(--mut)}
.g .val{font-size:20px;font-weight:700;margin-top:2px}
.bar{height:8px;border-radius:5px;background:#1b2030;margin-top:6px;overflow:hidden}
.bar i{display:block;height:100%}
.meter{height:18px;border-radius:9px;background:#1b2030;overflow:hidden;margin:8px 0}
.meter i{display:block;height:100%;background:linear-gradient(90deg,#54d18c,#7cc4ff)}
.pill{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600}
.pill.ok{background:rgba(84,209,140,.15);color:var(--ok)}
.pill.bad{background:rgba(255,107,107,.15);color:var(--bad)}
.row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}
.cite{font-size:12px;color:var(--mut);border-top:1px solid var(--line);margin-top:18px;padding-top:12px}
</style>
  <link rel="stylesheet" href="/assets/szl-flow.css" data-szl-flow-asset="style" />
  <link rel="stylesheet" href="/assets/szl-holo-v2.css" data-szl-holo-asset="style-v2" />
</head>
<body>
<div class="wrap">
  <div class="top">
    <div><span class="brand">a11oy</span> <span class="tag">· AYNI-OS</span></div>
    <div class="nav"><a href="/">home</a><a href="/chaski">chaski</a><a href="/ayni">ayni</a></div>
  </div>

  <h1>AYNI-OS — reciprocity organism &amp; time-reversible replay</h1>
  <p class="sub">A time-reversible (event-sourced), forkable runtime governed by an
  <b>Ayni Conservation Law</b>. <b>Honest framing:</b> Ayni is a game-theory primitive
  (Axelrod&nbsp;&amp;&nbsp;Hamilton 1981; Trivers 1971), <i>not</i> mysticism;
  "time-reversal" is <i>event-sourcing replay</i>, <i>not</i> time-travel; Tinkuy is the
  Kuramoto (1975) order parameter. Locked Doctrine&nbsp;v11 numbers preserved
  (749/14/163, 13-axis yuyay_v3, replay bacf5443…631fc5).</p>

  <!-- AYNI GAUGES -->
  <div class="card">
    <h2>Ayni gauges — per-organ reciprocity coefficient α<sub>o</sub></h2>
    <div class="path">GET /v1/ayni · α = In/(In+Out) · α&lt;0.45 ⇒ HUKLLA T24 fires</div>
    <div class="row"><span id="ayniStatus" class="pill ok">loading…</span>
      <span class="mut">balanced α = 0.50 · deficit threshold 0.45</span></div>
    <div id="gauges" class="gauges"></div>
  </div>

  <!-- REPLAY SCRUBBER -->
  <div class="card">
    <h2>Replay timeline scrubber — verifiable state at past moment T</h2>
    <div class="path">GET /v1/replay?at=&lt;timestamp&gt; · mechanism = event-sourcing-replay</div>
    <div class="row">
      <span class="mut">T = <span id="tlabel" style="font-family:var(--mono)"></span></span>
      <span id="chainPill" class="pill ok">chain —</span>
    </div>
    <input id="scrub" type="range" min="0" max="100" value="100"/>
    <pre id="replayOut">drag the scrubber to reconstruct empire state at past timestamp T…</pre>
  </div>

  <!-- TINKUY METER -->
  <div class="card">
    <h2>Tinkuy r meter — Kuramoto order parameter across organ phases</h2>
    <div class="path">GET /v1/tinkuy · r = |1/N · Σ e^{iθ}| · r&gt;0.85 ⇒ flow (suppress Reflexion)</div>
    <div class="meter"><i id="rbar" style="width:0%"></i></div>
    <div class="row"><span class="mut">r = <b id="rval"></b></span>
      <span id="flowPill" class="pill ok"></span></div>
  </div>

  <div class="cite">
    <b>Citations (peer-reviewed):</b>
    Axelrod &amp; Hamilton, "The Evolution of Cooperation," <i>Science</i> 211(4489):1390–1396, 1981 (DOI 10.1126/science.7466396).
    Trivers, "The Evolution of Reciprocal Altruism," <i>Q. Rev. Biol.</i> 46(1):35–57, 1971 (DOI 10.1086/406755).
    Kuramoto, Lecture Notes in Physics 39, Springer, 1975.
    Csikszentmihalyi, <i>Beyond Boredom and Anxiety</i>, 1975. Strogatz, <i>Sync</i>, 2003.
    Noether, "Invariante Variationsprobleme," Göttingen, 1918.
    <br/>Signed — <b>Yachay</b> (CTO). ADDITIVE only; yuyay_v3 hash untouched.
  </div>
</div>

<script>
const T0 = Math.floor(Date.now()/1000) - 3700;  // window start (≈ seed)
const T1 = Math.floor(Date.now()/1000);          // now
function color(a){ return a < 0.45 ? 'var(--bad)' : (a < 0.55 ? 'var(--warn)' : 'var(--ok)'); }

async function loadAyni(){
  try{
    const r = await fetch('/v1/ayni'); const d = await r.json();
    const g = document.getElementById('gauges'); g.innerHTML='';
    Object.entries(d.alphas||{}).forEach(([o,a])=>{
      const c = color(a);
      g.insertAdjacentHTML('beforeend',
        `<div class="g"><div class="name">${o}</div>
         <div class="val" style="color:${c}">${a.toFixed(2)}</div>
         <div class="bar"><i style="width:${Math.round(a*100)}%;background:${c}"></i></div></div>`);
    });
    const s = document.getElementById('ayniStatus');
    if(d.halt){ s.className='pill bad'; s.textContent='HUKLLA T24 — organ drained'; }
    else { s.className='pill ok'; s.textContent='balanced — no deficit'; }
  }catch(e){ document.getElementById('ayniStatus').textContent='offline'; }
}

async function loadReplay(frac){
  const T = Math.round(T0 + (T1-T0)*frac);
  document.getElementById('tlabel').textContent = new Date(T*1000).toISOString().replace('T',' ').slice(0,19);
  try{
    const r = await fetch('/v1/replay?at='+T); const d = await r.json();
    document.getElementById('replayOut').textContent = JSON.stringify(d, null, 2);
    const cp = document.getElementById('chainPill');
    if(d.chain_verified){ cp.className='pill ok'; cp.textContent='chain verified'; }
    else { cp.className='pill bad'; cp.textContent='chain BROKEN'; }
  }catch(e){ document.getElementById('replayOut').textContent='replay offline'; }
}

async function loadTinkuy(){
  try{
    const r = await fetch('/v1/tinkuy'); const d = await r.json();
    const pct = Math.round((d.r||0)*100);
    document.getElementById('rbar').style.width = pct+'%';
    document.getElementById('rval').textContent = (d.r||0).toFixed(3);
    const p = document.getElementById('flowPill');
    if(d.in_tinkuy){ p.className='pill ok'; p.textContent='TINKUY — flow (Reflexion suppressed)'; }
    else { p.className='pill bad'; p.textContent='incoherent — no flow'; }
  }catch(e){ document.getElementById('rval').textContent='offline'; }
}

document.getElementById('scrub').addEventListener('input', e=>loadReplay(e.target.value/100));
loadAyni(); loadReplay(1.0); loadTinkuy();
setInterval(loadAyni, 15000); setInterval(loadTinkuy, 15000);
</script>
  <script src="/assets/szl-flow.js" defer data-szl-flow-asset="script"></script>
  <script src="/assets/szl-holo-v2.js" defer data-szl-holo-asset="script-v2"></script>
</body>
</html>