Spaces:
Running
chore(sync): mirror front-door files to Space (hf-sync)
Browse filesAutomated front-door sync from szl-holdings/a11oy main via hf-sync.
Added/updated: cathedral.html, cathedral_genius.html, console/docs.html, console/index.html, console/pricing.html, console/throne-room.html, console/throne-room.js, live_wires.html, pages/api-keys.html, pages/audit.html, pages/ayni.html, pages/brain-dual.html, pages/brain-jack.html, pages/brain.html, pages/chaski.html, pages/codex-kernel.html, pages/company.html, pages/compliance.html, pages/console.html, pages/counter-uas.html, pages/cued-engagement.html, pages/docs.html, pages/energy-ops.html, pages/evidence.html, pages/fabric.html, pages/gap-report.html, pages/harvest.html, pages/hatun-mcp.html, pages/hub.html, pages/integrations.html, pages/landing.html, pages/mesh.html, pages/observability.html, pages/operator_organ.html, pages/pinn.html, pages/pnt.html, pages/pricing.html, pages/run-all.html, pages/sdk.html, pages/security.html, pages/status.html, pages/substrate.html, pages/superpowers.html, pages/throne-room.html, pages/throne-room.js, pages/uds.html, pages/upgrades.html, pages/wallpa.html, pages/warhacker.html, pages/wasi-rikuq.html, pages/wires.html, static/a11oy_cathedral.js, static/cathedral_app.js, static/shared/szl_codename_sanitizer.js, static/shared/szl_holo3d.js, static/shared/szl_label_engine.js, static/shared/szl_receipt_cosign.js
Deleted (gone from GitHub main): (none)
Keeps the served front-door (pages/*.html, console/*.html) identical
to GitHub main so an HF factory rebuild never drops a GitHub edit or
keeps serving a page that was deleted on GitHub.
- pages/fabric.html +273 -93
|
@@ -1,101 +1,281 @@
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
-
<html lang="en">
|
| 3 |
-
<
|
| 4 |
-
<
|
| 5 |
-
<meta name="
|
| 6 |
-
<
|
| 7 |
-
<
|
| 8 |
-
|
| 9 |
-
szl3d stage and mounts ONLY the compute-fabric surface (static/3d/surfaces/fabric.js),
|
| 10 |
-
a 3D force-directed node mesh of the live compute pool bound to
|
| 11 |
-
/api/a11oy/v1/compute-pool.
|
| 12 |
-
|
| 13 |
-
Doctrine v11 (HARD): node reachability is a REAL TCP probe (MEASURED) — reachable
|
| 14 |
-
glows teal, unreachable dims with a red ring; "sovereign" is a passed-through PROPERTY
|
| 15 |
-
of owned hardware (gold), never inferred. The topology mesh is STRUCTURAL-ONLY — we do
|
| 16 |
-
NOT claim measured NVLink bandwidth. The surface renders exactly the honesty label the
|
| 17 |
-
JSON carries; if the endpoint 404s/errors/{degraded:true} it shows the honest state and
|
| 18 |
-
keeps the last good mesh, or an honest NO-LIVE-DATA placeholder. 0 runtime CDN — three.js
|
| 19 |
-
vendored same-origin via the importmap. System fonts only. WebGL2 default; ?webgpu=1 opts in.
|
| 20 |
-
-->
|
| 21 |
-
<script type="importmap">
|
| 22 |
-
{
|
| 23 |
-
"imports": {
|
| 24 |
-
"three": "/static/3d/vendor/three/three.module.min.js",
|
| 25 |
-
"three/webgpu": "/static/3d/vendor/three/three.webgpu.min.js",
|
| 26 |
-
"three/addons/": "/static/3d/vendor/three/addons/"
|
| 27 |
-
}
|
| 28 |
-
}
|
| 29 |
-
</script>
|
| 30 |
<style>
|
| 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 |
</div>
|
| 70 |
-
<script type="module">
|
| 71 |
-
import szl3d from "/static/3d/szl3d/szl3d_boot.js";
|
| 72 |
-
import * as live from "/static/3d/szl3d/szl3d_live.js";
|
| 73 |
-
import * as label from "/static/3d/szl3d/szl3d_label.js";
|
| 74 |
-
import * as THREE from "three";
|
| 75 |
-
import surface from "/static/3d/surfaces/fabric.js";
|
| 76 |
|
| 77 |
-
|
| 78 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
});
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
}
|
| 98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
</script>
|
| 100 |
-
</body>
|
| 101 |
-
</html>
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
+
<html lang="en"><head>
|
| 3 |
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
| 4 |
+
<title>a11oy — Fabric · Governed Distributed Compute Fabric (one unified view)</title>
|
| 5 |
+
<meta name="description" content="The Governed Distributed Compute Fabric as one unified system-of-systems view: sovereign GPU mesh (laptop + OMEN + chaski + cloud failover) under one governed router, honest TCP reachability, joules MEASURED per node, doctrine-locked. Terrestrial-proven core; orbital is a clearly-labeled ROADMAP frame. Doctrine v11 honest. 0 runtime CDN.">
|
| 6 |
+
<!-- SZL Estate shared modules (byte-identical cross-app), served in-image at /static/shared (0 CDN). -->
|
| 7 |
+
<script src="/static/shared/szl_label_engine.js"></script>
|
| 8 |
+
<script src="/static/shared/szl_holo3d.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
<style>
|
| 10 |
+
:root{--bg:#0b0e14;--card:#121826;--ink:#e8eef7;--mut:#8aa0bf;--acc:#5ad1c0;--acc2:#7aa2ff;--line:#243149;--warn:#e0c060;--bad:#ff5c5c;--ok:#16c784;--orbit:#b07cff}
|
| 11 |
+
*{box-sizing:border-box}
|
| 12 |
+
body{margin:0;font:15px/1.55 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink)}
|
| 13 |
+
.wrap{max-width:1180px;margin:0 auto;padding:30px 20px 96px}
|
| 14 |
+
h1{font-size:28px;margin:0 0 4px;letter-spacing:.2px}
|
| 15 |
+
h2{font-size:18px;margin:34px 0 10px;border-bottom:1px solid var(--line);padding-bottom:6px}
|
| 16 |
+
.sub{color:var(--mut);margin:0 0 14px}
|
| 17 |
+
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin:14px 0}
|
| 18 |
+
code{background:#0a1626;padding:1px 5px;border-radius:5px;color:var(--acc);font-size:12px}
|
| 19 |
+
a{color:var(--acc);text-decoration:none}a:hover{text-decoration:underline}
|
| 20 |
+
nav a{margin-right:14px;font-weight:600}
|
| 21 |
+
.note{color:var(--mut);font-size:13px}
|
| 22 |
+
.foot{margin-top:40px;color:var(--mut);font-size:12px;border-top:1px solid var(--line);padding-top:14px}
|
| 23 |
+
table{width:100%;border-collapse:collapse;font-size:13px}
|
| 24 |
+
th,td{text-align:left;padding:7px 9px;border-bottom:1px solid var(--line);vertical-align:top}
|
| 25 |
+
th{color:var(--mut);font-weight:600}
|
| 26 |
+
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}
|
| 27 |
+
.kpi{background:#0e1422;border:1px solid var(--line);border-radius:11px;padding:13px 15px}
|
| 28 |
+
.kpi .v{font:700 24px/1.1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--acc)}
|
| 29 |
+
.kpi .k{color:var(--mut);font-size:12px;margin-bottom:6px}
|
| 30 |
+
.kpi .l{margin-top:8px}
|
| 31 |
+
.holo{height:420px;width:100%;border-radius:12px;overflow:hidden;position:relative}
|
| 32 |
+
.legend{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px;font-size:12px;color:var(--mut)}
|
| 33 |
+
.legend .sw{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:6px;vertical-align:middle}
|
| 34 |
+
.nodegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(255px,1fr));gap:12px;margin-top:6px}
|
| 35 |
+
.nd{background:#0e1422;border:1px solid var(--line);border-radius:11px;padding:13px 15px}
|
| 36 |
+
.nd h3{margin:0 0 4px;font-size:15px}
|
| 37 |
+
.nd .ep{font:12px/1.4 ui-monospace,Menlo,Consolas,monospace;color:var(--mut);word-break:break-all}
|
| 38 |
+
.nd .row{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px;align-items:center}
|
| 39 |
+
.nd .joule{margin-top:9px;font:12px/1.3 ui-monospace,Menlo,Consolas,monospace;color:var(--ink)}
|
| 40 |
+
.dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:6px}
|
| 41 |
+
.dot.up{background:var(--ok)}.dot.down{background:var(--bad)}
|
| 42 |
+
.sov{font-size:11px;font-weight:700;letter-spacing:.04em}
|
| 43 |
+
.orbit{background:linear-gradient(180deg,#150d28 0%,#0e0a1c 100%);border:1px solid #3a2a5e;border-radius:12px;padding:16px 18px;margin:14px 0}
|
| 44 |
+
.orbit h2{color:#cdb4ff;border-bottom-color:#3a2a5e}
|
| 45 |
+
.orbit .band{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
|
| 46 |
+
.banner{display:inline-block;background:#2a1c47;border:1px solid #5a3fa0;color:#d9c6ff;font:800 12px/1 ui-monospace,Menlo,monospace;letter-spacing:.12em;padding:7px 12px;border-radius:8px;text-transform:uppercase}
|
| 47 |
+
.err{color:var(--bad);font-size:13px}
|
| 48 |
+
.muted-num{color:var(--mut)}
|
| 49 |
+
.hl{color:var(--acc2);font-weight:700}
|
| 50 |
+
.flow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;padding:8px 0}
|
| 51 |
+
.flow .node{background:#16264a;border:1px solid var(--line);border-radius:10px;padding:8px 13px;font-weight:700;color:var(--acc2);font-size:13px}
|
| 52 |
+
.flow .arr{color:var(--mut);font-size:18px}
|
| 53 |
+
.refresh{background:var(--acc2);color:#06101f;border:0;border-radius:8px;padding:7px 13px;font-weight:700;cursor:pointer;font-size:13px}
|
| 54 |
+
.stamp{font:12px/1.3 ui-monospace,Menlo,monospace;color:var(--mut)}
|
| 55 |
+
</style></head>
|
| 56 |
+
<body><div class="wrap">
|
| 57 |
+
<nav class="note"><a href="/">home</a><a href="/mesh">/mesh</a><a href="/wires">/wires</a><a href="/observability">/observability</a><a href="/holo">/holo</a></nav>
|
| 58 |
+
<h1>a11oy — Fabric</h1>
|
| 59 |
+
<p class="sub">The <b>Governed Distributed Compute Fabric</b> as one unified system-of-systems view. Sovereign GPU mesh + honest TCP reachability + joules <b>MEASURED</b> per node + one governed OpenAI-compatible router + doctrine-locked provenance. <span class="hl">Terrestrial governed mesh is the proven core; orbital is a clearly-labeled ROADMAP frame.</span> Doctrine v11 · Λ = Conjecture 1 · 0 runtime CDN.</p>
|
| 60 |
+
|
| 61 |
+
<div class="card">
|
| 62 |
+
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px">
|
| 63 |
+
<div class="note">Live sources (no fabrication): <code>/api/a11oy/v1/compute-pool-hardened</code> · <code>/api/a11oy/v1/energy/operator/status</code> · <code>/api/a11oy/v1/honest</code> · <code>/api/a11oy/provenance</code></div>
|
| 64 |
+
<button class="refresh" onclick="loadAll()">↻ refresh live</button>
|
| 65 |
+
</div>
|
| 66 |
+
<div class="stamp" id="stamp" style="margin-top:8px">loading live fabric state…</div>
|
| 67 |
+
</div>
|
| 68 |
+
|
| 69 |
+
<h2>1 · Fabric at a glance</h2>
|
| 70 |
+
<div class="card">
|
| 71 |
+
<div class="kpis" id="kpis"><div class="note">…</div></div>
|
| 72 |
+
<p class="note" style="margin-top:14px">Every figure is honestly labeled. <b>Reachability</b> is a real TCP probe THIS sweep — a timeout/refusal is reachable=false with the reason, never fabricated. <b>Joules</b> are MEASURED only via the on-box exporter (nodes with no exporter read SAMPLE / 0). <b>Sovereign</b> is a property of owned hardware, passed through, never inferred from reachability.</p>
|
| 73 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
+
<h2>2 · System-of-systems mesh (3D)</h2>
|
| 76 |
+
<div class="card">
|
| 77 |
+
<div class="holo" id="holo"></div>
|
| 78 |
+
<div class="legend">
|
| 79 |
+
<span><span class="sw" style="background:#16c784"></span>reachable (LIVE TCP probe)</span>
|
| 80 |
+
<span><span class="sw" style="background:#ff5c5c"></span>unreachable this sweep (honest)</span>
|
| 81 |
+
<span><span class="sw" style="background:#7aa2ff"></span>sovereign owned GPU/CPU</span>
|
| 82 |
+
<span><span class="sw" style="background:#e0c060"></span>hosted-inference failover (non-sovereign)</span>
|
| 83 |
+
</div>
|
| 84 |
+
<p class="note" style="margin-top:12px"><b>Scaling model — honest:</b> nodes scale <span class="hl">horizontally (placement + load-balance)</span> under one governed router. VRAM does <b>NOT</b> merge across the network — there is <b>no fused/combined VRAM</b>. The router places each job on a reachable node; it does not pool memory across machines.</p>
|
| 85 |
+
</div>
|
| 86 |
|
| 87 |
+
<h2>3 · Nodes — honest per-node board</h2>
|
| 88 |
+
<div class="nodegrid" id="nodes"><div class="note">…</div></div>
|
| 89 |
+
|
| 90 |
+
<h2>4 · Energy — joules MEASURED, climbing</h2>
|
| 91 |
+
<div class="card">
|
| 92 |
+
<div class="kpis" id="energy"><div class="note">…</div></div>
|
| 93 |
+
<table id="byNode" style="margin-top:14px"><tr><th>node</th><th>jobs</th><th>tokens</th><th>joules</th><th>label</th></tr></table>
|
| 94 |
+
<p class="note" style="margin-top:12px">Joules are MEASURED via the on-box exporter (node <code id="expnode">betterwithage</code>). Nodes without a local exporter contribute SAMPLE jobs (joules unmeasured) — shown honestly, never imputed. Signed receipts fold into the Khipu ledger: <code>/api/a11oy/v1/energy/provenance</code>.</p>
|
| 95 |
+
</div>
|
| 96 |
+
|
| 97 |
+
<h2>5 · Governed router + provenance</h2>
|
| 98 |
+
<div class="card">
|
| 99 |
+
<div class="flow">
|
| 100 |
+
<span class="node">request</span><span class="arr">→</span>
|
| 101 |
+
<span class="node">governed router</span><span class="arr">→</span>
|
| 102 |
+
<span class="node">placement (Λ-gated)</span><span class="arr">→</span>
|
| 103 |
+
<span class="node">sovereign node / failover</span><span class="arr">→</span>
|
| 104 |
+
<span class="node">signed receipt → Khipu</span>
|
| 105 |
+
</div>
|
| 106 |
+
<div id="prov" class="note" style="margin-top:8px">…</div>
|
| 107 |
+
</div>
|
| 108 |
+
|
| 109 |
+
<div class="orbit">
|
| 110 |
+
<div class="band">
|
| 111 |
+
<span class="banner">Roadmap · orbital framing</span>
|
| 112 |
+
<span id="orbitBadge"></span>
|
| 113 |
+
</div>
|
| 114 |
+
<h2 style="margin-top:6px">6 · Orbital system-of-systems — ROADMAP / analogy (we do NOT run satellites)</h2>
|
| 115 |
+
<p class="note">The same governance primitives the terrestrial mesh PROVES on real metal — honest reachability, joules MEASURED per node, Λ-gated placement, signed-receipt provenance — are exactly what distributed / edge / <b>orbital</b> compute system-of-systems will require. <span style="color:#cdb4ff;font-weight:700">This band is the vision frame, clearly labeled ROADMAP.</span> SZL does <b>not</b> operate satellites; nothing in the mesh above is orbital. We prove on terrestrial metal what the orbital-architecture crowd only asserts.</p>
|
| 116 |
+
<div class="kpis" id="orbit">
|
| 117 |
+
<div class="kpi"><div class="k">Terrestrial governed mesh</div><div class="v" id="orbReach">—</div><div class="l" id="orbReachL"></div></div>
|
| 118 |
+
<div class="kpi"><div class="k">Per-node energy accounting</div><div class="v">joules</div><div class="l" id="orbJ"></div></div>
|
| 119 |
+
<div class="kpi"><div class="k">Edge / orbital placement</div><div class="v">vision</div><div class="l" id="orbRm"></div></div>
|
| 120 |
+
</div>
|
| 121 |
+
</div>
|
| 122 |
+
|
| 123 |
+
<div class="foot" id="foot">
|
| 124 |
+
HONEST: all numbers above carry an explicit label — LIVE (real backend wired) · MEASURED (on-box exporter) · MODELED (deterministic, labeled) · ROADMAP (vision, not deployed). No fused/combined VRAM is claimed anywhere — nodes scale horizontally (placement + load-balance); memory does not merge across the network. Orbital is analogy/ROADMAP; SZL does not run satellites. Reachability is a real TCP probe, never fabricated. trust < 100% · tamper-EVIDENT not tamper-proof · Λ = Conjecture 1 · locked = 8 {F1,F4,F7,F11,F12,F18,F19,F22} @ kernel <code id="kernel">c7c0ba17</code> (749/14/163). SLSA L1 honest · L2 attested · L3 roadmap. Canonical numbers <a href="https://github.com/szl-holdings/.github/blob/main/.github/data/lean_numbers.json" target="_blank" rel="noopener">lean_numbers.json</a>.
|
| 125 |
+
</div>
|
| 126 |
+
</div>
|
| 127 |
+
|
| 128 |
+
<script>
|
| 129 |
+
"use strict";
|
| 130 |
+
var L = (window.SZLLabels && window.SZLLabels.badgeHTML) ? function(k,t){ return window.SZLLabels.badgeHTML(k, t?{label:t}:undefined); } : function(k,t){ return '<span class="szl-pill">'+(t||k)+'</span>'; };
|
| 131 |
+
function $(id){ return document.getElementById(id); }
|
| 132 |
+
function fmt(n){ if(n==null||isNaN(n)) return '—'; return Number(n).toLocaleString('en-US',{maximumFractionDigits:0}); }
|
| 133 |
+
function fmt1(n){ if(n==null||isNaN(n)) return '—'; return Number(n).toLocaleString('en-US',{maximumFractionDigits:1}); }
|
| 134 |
+
async function getJSON(url){ var r = await fetch(url, {headers:{'accept':'application/json'}}); if(!r.ok) throw new Error(url+' HTTP '+r.status); return r.json(); }
|
| 135 |
+
|
| 136 |
+
var holoScene = null;
|
| 137 |
+
function buildHolo(pool){
|
| 138 |
+
var mount = $('holo');
|
| 139 |
+
if(!window.SZLHolo || !window.SZLHolo.Scene){ mount.innerHTML = '<p class="note" style="padding:18px">3D kit unavailable — node board below carries the full honest state.</p>'; return; }
|
| 140 |
+
mount.innerHTML = '';
|
| 141 |
+
// λ here is a presentation parameter (Conjecture 1, <1.0), NOT a measured value.
|
| 142 |
+
holoScene = new window.SZLHolo.Scene(mount, { title: 'GOVERNED DISTRIBUTED COMPUTE FABRIC', lambda: 0.42, autoRotate: true });
|
| 143 |
+
var nodes = (pool.nodes||[]);
|
| 144 |
+
// hub = the governed router (the host running this service / hetzner-box-cpu self node anchors center)
|
| 145 |
+
var specNodes = [{ id:'router', label:'governed router', pos:[0,0,0], locked:true }];
|
| 146 |
+
var R = 1.15;
|
| 147 |
+
nodes.forEach(function(n, i){
|
| 148 |
+
var ang = (i / Math.max(1,nodes.length)) * Math.PI * 2;
|
| 149 |
+
var y = (n.kind === 'hosted-inference') ? 0.55 : -0.25; // failover ring sits above
|
| 150 |
+
specNodes.push({
|
| 151 |
+
id: n.name,
|
| 152 |
+
label: n.name + (n.reachable ? ' ✓' : ' ✕'),
|
| 153 |
+
pos: [R*Math.cos(ang), y, R*Math.sin(ang)],
|
| 154 |
+
// lower lambda => greener/larger (more trust); reachable+sovereign = most trusted
|
| 155 |
+
lambda: n.reachable ? (n.sovereign ? 0.22 : 0.40) : 0.80
|
| 156 |
});
|
| 157 |
+
});
|
| 158 |
+
var edges = nodes.map(function(n){ return { from:'router', to:n.name }; });
|
| 159 |
+
holoScene.addGraph({ nodes: specNodes, edges: edges });
|
| 160 |
+
// pulse the signed-receipt flow along the first reachable sovereign edge
|
| 161 |
+
holoScene.start();
|
| 162 |
+
// Override the SAMPLE HUD badge: this scene is bound to LIVE topology + MEASURED energy.
|
| 163 |
+
try {
|
| 164 |
+
var lbl = mount.querySelector('[data-szl-holo-labels]');
|
| 165 |
+
if(lbl){ lbl.innerHTML = L('LIVE','LIVE TOPOLOGY') + ' ' + L('MEASURED','JOULES MEASURED') + ' ' + L('ROADMAP','ORBITAL = ROADMAP'); }
|
| 166 |
+
} catch(e){}
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
function renderKpis(pool, energy){
|
| 170 |
+
var c = pool.counts || {};
|
| 171 |
+
var html = '';
|
| 172 |
+
html += kpi('Nodes total', fmt(c.nodes_total), L('LIVE'));
|
| 173 |
+
html += kpi('Reachable this sweep', fmt(c.nodes_reachable), L('LIVE','LIVE TCP PROBE'));
|
| 174 |
+
html += kpi('Sovereign GPU reachable', fmt(c.gpu_nodes_reachable), L('LIVE'));
|
| 175 |
+
html += kpi('Joules total', fmt(energy.joules_measured_total), L('MEASURED'));
|
| 176 |
+
html += kpi('Jobs completed', fmt(energy.jobs_completed||energy.jobs_done), L('MEASURED'));
|
| 177 |
+
html += kpi('Scaling', 'horizontal', L('MODELED','PLACEMENT + LB'));
|
| 178 |
+
$('kpis').innerHTML = html;
|
| 179 |
+
}
|
| 180 |
+
function kpi(k,v,label){ return '<div class="kpi"><div class="k">'+k+'</div><div class="v">'+v+'</div><div class="l">'+(label||'')+'</div></div>'; }
|
| 181 |
+
|
| 182 |
+
function renderNodes(pool, energy){
|
| 183 |
+
var byNode = energy.by_node || {};
|
| 184 |
+
var html = '';
|
| 185 |
+
(pool.nodes||[]).forEach(function(n){
|
| 186 |
+
var bn = byNode[n.name] || {};
|
| 187 |
+
var jmeas = bn.joules_measured;
|
| 188 |
+
var hasMeas = (typeof jmeas === 'number' && jmeas > 0);
|
| 189 |
+
var jLabel = hasMeas ? L('MEASURED') : L('SAMPLE','SAMPLE / NO EXPORTER');
|
| 190 |
+
var jVal = hasMeas ? (fmt1(jmeas)+' J') : '0 J (unmeasured)';
|
| 191 |
+
var sov = n.sovereign ? '<span class="sov" style="color:#7aa2ff">SOVEREIGN (owned)</span>' : '<span class="sov" style="color:#e0c060">HOSTED FAILOVER</span>';
|
| 192 |
+
var reach = n.reachable
|
| 193 |
+
? '<span><span class="dot up"></span>reachable</span> ' + L('LIVE','LIVE TCP')
|
| 194 |
+
: '<span><span class="dot down"></span>unreachable: '+(n.detail||'?')+'</span> ' + L('LIVE','HONEST');
|
| 195 |
+
html += '<div class="nd"><h3>'+n.name+'</h3>'+
|
| 196 |
+
'<div class="note">'+n.kind+'</div>'+
|
| 197 |
+
'<div class="ep">'+(n.endpoint||'')+'</div>'+
|
| 198 |
+
'<div class="row">'+reach+'</div>'+
|
| 199 |
+
'<div class="row">'+sov+'</div>'+
|
| 200 |
+
'<div class="joule">energy: '+jVal+' '+jLabel+
|
| 201 |
+
(bn.jobs!=null ? ' <span class="muted-num">· '+fmt(bn.jobs)+' jobs · '+fmt(bn.tokens)+' tok</span>' : '')+
|
| 202 |
+
'</div></div>';
|
| 203 |
+
});
|
| 204 |
+
$('nodes').innerHTML = html;
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
function renderEnergy(energy){
|
| 208 |
+
var html = '';
|
| 209 |
+
html += kpi('Joules MEASURED total', fmt(energy.joules_measured_total), L('MEASURED'));
|
| 210 |
+
html += kpi('Measured token-joules', fmt(energy.measured_token_joules), L('MEASURED'));
|
| 211 |
+
html += kpi('Measured jobs', fmt(energy.measured_jobs), L('MEASURED'));
|
| 212 |
+
html += kpi('Sample jobs (unmeasured)', fmt(energy.sample_jobs), L('SAMPLE'));
|
| 213 |
+
html += kpi('Grid price', fmt1(energy.grid_price_eur_mwh)+' €/MWh', L('LIVE'));
|
| 214 |
+
html += kpi('Power sample', fmt1(energy.power_w_sample)+' W', L('SAMPLE'));
|
| 215 |
+
$('energy').innerHTML = html;
|
| 216 |
+
if(energy.exporter_node) $('expnode').textContent = energy.exporter_node;
|
| 217 |
+
var bn = energy.by_node || {};
|
| 218 |
+
var rows = '<tr><th>node</th><th>jobs</th><th>tokens</th><th>joules</th><th>label</th></tr>';
|
| 219 |
+
Object.keys(bn).forEach(function(k){
|
| 220 |
+
var v = bn[k]; var has = (typeof v.joules_measured==='number' && v.joules_measured>0);
|
| 221 |
+
rows += '<tr><td><b>'+k+'</b></td><td>'+fmt(v.jobs)+'</td><td>'+fmt(v.tokens)+'</td><td>'+(has?fmt1(v.joules_measured)+' J':'0 (unmeasured)')+'</td><td>'+(has?L('MEASURED'):L('SAMPLE'))+'</td></tr>';
|
| 222 |
+
});
|
| 223 |
+
$('byNode').innerHTML = rows;
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
function renderProv(prov, honest){
|
| 227 |
+
var slsa = (honest && honest.footer) ? '' : '';
|
| 228 |
+
var dl = (honest && honest.doctrine_lock) || {};
|
| 229 |
+
var html = '';
|
| 230 |
+
html += '<p>SLSA: <b>'+(prov.slsa||'L1')+'</b> — L1 honest · L2 attested · L3 roadmap. '+L('LIVE')+' Λ = '+(dl.lambda||'Conjecture 1')+' '+L('LIVE','CONJECTURE 1')+'</p>';
|
| 231 |
+
if(prov.khipu_dsse){
|
| 232 |
+
html += '<p>Provenance per answer: signed-receipt substrate · keyid <code>'+(prov.khipu_dsse.keyid||'?')+'</code> · verify at <code>'+(prov.khipu_dsse.verify_endpoint||'/api/a11oy/khipu/verify')+'</code>. tamper-EVIDENT (SHA3-256 hash-chain), not tamper-proof.</p>';
|
| 233 |
+
}
|
| 234 |
+
if(dl.locked_formula_ids){
|
| 235 |
+
html += '<p>Doctrine lock: <code>'+(dl.declarations||749)+'/'+(dl.axioms||14)+'/'+(dl.sorries||163)+'</code> @ kernel <code>'+(dl.commit||'c7c0ba17')+'</code> · locked = '+(dl.locked_formula_count||8)+' {'+(dl.locked_formula_ids||[]).join(',')+'} '+L('LIVE')+'</p>';
|
| 236 |
+
if(dl.commit) $('kernel').textContent = dl.commit;
|
| 237 |
}
|
| 238 |
+
$('prov').innerHTML = html;
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
function renderOrbit(pool, energy){
|
| 242 |
+
var c = pool.counts || {};
|
| 243 |
+
$('orbitBadge').innerHTML = L('ROADMAP','VISION FRAME — NOT DEPLOYED');
|
| 244 |
+
$('orbReach').textContent = fmt(c.nodes_reachable) + '/' + fmt(c.nodes_total);
|
| 245 |
+
$('orbReachL').innerHTML = L('LIVE','PROVEN ON METAL');
|
| 246 |
+
$('orbJ').innerHTML = L('MEASURED','PER-NODE, REAL');
|
| 247 |
+
$('orbRm').innerHTML = L('ROADMAP','ANALOGY ONLY');
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
async function loadAll(){
|
| 251 |
+
$('stamp').textContent = 'fetching live fabric state…';
|
| 252 |
+
try {
|
| 253 |
+
var results = await Promise.allSettled([
|
| 254 |
+
getJSON('/api/a11oy/v1/compute-pool-hardened'),
|
| 255 |
+
getJSON('/api/a11oy/v1/energy/operator/status'),
|
| 256 |
+
getJSON('/api/a11oy/v1/honest'),
|
| 257 |
+
getJSON('/api/a11oy/provenance')
|
| 258 |
+
]);
|
| 259 |
+
var pool = results[0].status==='fulfilled' ? results[0].value : {counts:{},nodes:[]};
|
| 260 |
+
var energy = results[1].status==='fulfilled' ? results[1].value : {by_node:{}};
|
| 261 |
+
var honest = results[2].status==='fulfilled' ? results[2].value : {};
|
| 262 |
+
var prov = results[3].status==='fulfilled' ? results[3].value : {};
|
| 263 |
+
|
| 264 |
+
renderKpis(pool, energy);
|
| 265 |
+
buildHolo(pool);
|
| 266 |
+
renderNodes(pool, energy);
|
| 267 |
+
renderEnergy(energy);
|
| 268 |
+
renderProv(prov, honest);
|
| 269 |
+
renderOrbit(pool, energy);
|
| 270 |
+
|
| 271 |
+
var errs = results.filter(function(r){return r.status==='rejected';});
|
| 272 |
+
var ts = pool.cached_at || new Date().toISOString();
|
| 273 |
+
$('stamp').innerHTML = 'live as of <code>'+ts+'</code> · '+L('LIVE','4 ENDPOINTS WIRED') +
|
| 274 |
+
(errs.length ? ' <span class="err">· '+errs.length+' source(s) unavailable (shown honestly empty)</span>' : '');
|
| 275 |
+
} catch(e){
|
| 276 |
+
$('stamp').innerHTML = '<span class="err">fabric load error: '+e+'</span>';
|
| 277 |
+
}
|
| 278 |
+
}
|
| 279 |
+
loadAll();
|
| 280 |
</script>
|
| 281 |
+
</body></html>
|
|
|