Spaces:
Running
Running
Front door: cathedral-style sovereign 3D hero at / (console one click in at /console); current updates; 0 CDN
Browse files- Dockerfile +9 -0
- cathedral.html +126 -0
- serve.py +31 -3
- static/a11oy_cathedral.js +164 -0
Dockerfile
CHANGED
|
@@ -70,6 +70,15 @@ COPY szl_parity_gaps.py ./szl_parity_gaps.py
|
|
| 70 |
# omitted it, so import a11oy_warhacker_obs failed and /warhacker + /observability 404'd.
|
| 71 |
COPY a11oy_warhacker_obs.py ./a11oy_warhacker_obs.py
|
| 72 |
COPY serve.py ./serve.py
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
# ADDITIVE: batch-2 sovereign security data module (imported by serve.py; try/except-guarded).
|
| 74 |
COPY szl_b2_secdata.py ./szl_b2_secdata.py
|
| 75 |
COPY gates_manifest.json ./gates_manifest.json
|
|
|
|
| 70 |
# omitted it, so import a11oy_warhacker_obs failed and /warhacker + /observability 404'd.
|
| 71 |
COPY a11oy_warhacker_obs.py ./a11oy_warhacker_obs.py
|
| 72 |
COPY serve.py ./serve.py
|
| 73 |
+
# ADDITIVE (cathedral front-door hero): sovereign 3D landing matching the org card.
|
| 74 |
+
# Served at / by serve.py (console one click in at /console). Placed AFTER
|
| 75 |
+
# `COPY console/ ./static/` (line 65) so vendor3d + hero js are not clobbered.
|
| 76 |
+
# ES-module Three.js r160 (MIT) vendored locally — NO CDN. Doctrine v11 LOCKED.
|
| 77 |
+
COPY cathedral.html ./cathedral.html
|
| 78 |
+
COPY static/a11oy_cathedral.js ./static/a11oy_cathedral.js
|
| 79 |
+
COPY static/vendor3d/three.module.min.js ./static/vendor3d/three.module.min.js
|
| 80 |
+
COPY static/vendor3d/OrbitControls.js ./static/vendor3d/OrbitControls.js
|
| 81 |
+
COPY static/vendor3d/THREE_LICENSE.txt ./static/vendor3d/THREE_LICENSE.txt
|
| 82 |
# ADDITIVE: batch-2 sovereign security data module (imported by serve.py; try/except-guarded).
|
| 83 |
COPY szl_b2_secdata.py ./szl_b2_secdata.py
|
| 84 |
COPY gates_manifest.json ./gates_manifest.json
|
cathedral.html
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html>
|
| 2 |
+
<!-- ======================================================================
|
| 3 |
+
a11oy · Front Door — cathedral-style sovereign 3D hero.
|
| 4 |
+
Brain-sun (a11oy) with 3 internal capabilities orbiting + inspectable.
|
| 5 |
+
Sovereign: Three.js r160 (MIT) VENDORED under /static/vendor3d, NO CDN.
|
| 6 |
+
Honesty: locked proven = 5 {F1,F11,F12,F18,F19}; experimental main 1304/22;
|
| 7 |
+
Λ = Conjecture 1; SLSA L1 honest / L2 roadmap. Live /healthz + Λ.
|
| 8 |
+
"Enter Command Console" -> /console (the full working app).
|
| 9 |
+
Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>
|
| 10 |
+
====================================================================== -->
|
| 11 |
+
<html lang="en">
|
| 12 |
+
<head>
|
| 13 |
+
<meta charset="utf-8" />
|
| 14 |
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
| 15 |
+
<meta name="theme-color" content="#0a0e14" />
|
| 16 |
+
<title>a11oy · Governed-AI Command Platform</title>
|
| 17 |
+
<meta name="description" content="a11oy front door: cinematic sovereign 3D brain-sun with internal capabilities orbiting, live Trust Score Λ. Vendored Three.js, no CDN. Λ = Conjecture 1; locked proven 5." />
|
| 18 |
+
<!-- SOVEREIGN: 0 runtime CDN. System font stacks only. -->
|
| 19 |
+
<style>
|
| 20 |
+
:root{
|
| 21 |
+
--hatun-300:#e6c875; --hatun-400:#d7b96b; --hatun-500:#c08f2f;
|
| 22 |
+
--yawar-500:#c0392b; --yuyay-300:#5cc4bf; --yuyay-500:#168f89;
|
| 23 |
+
--indigo-900:#070815; --indigo-800:#0e1024; --indigo-700:#16183a;
|
| 24 |
+
--green:#4fd18b; --amber:#d7b96b; --red:#c0392b;
|
| 25 |
+
--ink:#f3ecdc; --ink-dim:#aba287;
|
| 26 |
+
--hud-bg:rgba(9,10,26,0.82); --hud-border:rgba(215,185,107,0.30);
|
| 27 |
+
--mono:ui-monospace,'JetBrains Mono',Menlo,Consolas,monospace;
|
| 28 |
+
--sans:'Inter',system-ui,-apple-system,sans-serif;
|
| 29 |
+
}
|
| 30 |
+
*{box-sizing:border-box}
|
| 31 |
+
html,body{margin:0;height:100%;background:var(--indigo-900);overflow:hidden;color:var(--ink);font-family:var(--sans)}
|
| 32 |
+
#scene{position:fixed;inset:0;z-index:0;display:block}
|
| 33 |
+
.hud{position:fixed;z-index:10;background:var(--hud-bg);border:1px solid var(--hud-border);border-radius:12px;
|
| 34 |
+
backdrop-filter:blur(9px);-webkit-backdrop-filter:blur(9px);box-shadow:0 10px 34px rgba(0,0,0,0.5)}
|
| 35 |
+
.plaque{top:16px;left:16px;max-width:min(50ch,84vw);padding:14px 16px}
|
| 36 |
+
.plaque .title{color:var(--hatun-300);font-weight:700;letter-spacing:.05em;font-size:13px;text-transform:uppercase;margin-bottom:6px}
|
| 37 |
+
.plaque .line{font:12px/1.55 var(--mono);color:var(--ink)}
|
| 38 |
+
.plaque .line b{color:var(--hatun-400)}
|
| 39 |
+
.plaque .sha{color:var(--yuyay-300)}
|
| 40 |
+
.status{top:16px;right:16px;padding:12px 14px;min-width:230px}
|
| 41 |
+
.status .h{font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px}
|
| 42 |
+
.row{display:flex;align-items:center;gap:8px;font:12px var(--mono);padding:3px 0}
|
| 43 |
+
.dot{width:9px;height:9px;border-radius:50%;flex:none}
|
| 44 |
+
.dot.live{background:var(--green);box-shadow:0 0 9px var(--green)}
|
| 45 |
+
.dot.off{background:var(--red);box-shadow:0 0 9px var(--red)}
|
| 46 |
+
.dot.seed{background:var(--hatun-400);box-shadow:0 0 9px var(--hatun-400)}
|
| 47 |
+
.row .meta{margin-left:auto;color:var(--ink-dim);font-size:11px}
|
| 48 |
+
.feed{margin-top:8px;font:11px var(--mono);color:var(--yuyay-300)}
|
| 49 |
+
.legend{bottom:16px;left:16px;padding:12px 14px;font-size:11px;max-width:46ch}
|
| 50 |
+
.legend .h{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:7px}
|
| 51 |
+
.legend .hint{color:var(--ink-dim);margin-top:4px}
|
| 52 |
+
.enter{position:fixed;z-index:14;left:50%;bottom:80px;transform:translateX(-50%);display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
|
| 53 |
+
.enter a{font:700 13px var(--mono);letter-spacing:.06em;text-transform:uppercase;text-decoration:none;
|
| 54 |
+
padding:13px 26px;border-radius:11px;border:1px solid var(--hatun-400);color:var(--indigo-900);
|
| 55 |
+
background:linear-gradient(180deg,var(--hatun-300),var(--hatun-500));box-shadow:0 10px 30px rgba(192,143,47,0.35);
|
| 56 |
+
transition:transform .15s ease, box-shadow .15s ease}
|
| 57 |
+
.enter a.ghost{background:transparent;color:var(--hatun-300);border-color:var(--hud-border)}
|
| 58 |
+
.enter a:hover{transform:translateY(-2px);box-shadow:0 14px 38px rgba(192,143,47,0.5)}
|
| 59 |
+
.enter a.ghost:hover{color:var(--ink)}
|
| 60 |
+
#inspector{position:fixed;z-index:20;top:50%;right:-420px;transform:translateY(-50%);
|
| 61 |
+
width:380px;max-width:88vw;max-height:80vh;overflow:auto;padding:18px 20px;
|
| 62 |
+
background:var(--hud-bg);border:1px solid var(--hud-border);border-radius:14px;
|
| 63 |
+
backdrop-filter:blur(10px);box-shadow:0 16px 48px rgba(0,0,0,0.6);transition:right .35s cubic-bezier(.2,.8,.2,1)}
|
| 64 |
+
#inspector.show{right:16px}
|
| 65 |
+
#inspector .ititle{color:var(--hatun-300);font-weight:700;font-size:16px;margin-bottom:4px}
|
| 66 |
+
#inspector .iplain{color:var(--ink);font-size:13px;line-height:1.5;margin-bottom:12px}
|
| 67 |
+
#inspector .ih{font:11px var(--mono);color:var(--ink-dim);text-transform:uppercase;letter-spacing:.07em;margin:12px 0 5px}
|
| 68 |
+
#inspector ul{margin:0;padding-left:18px}
|
| 69 |
+
#inspector li{font:12px/1.55 var(--mono);color:var(--ink);margin-bottom:3px}
|
| 70 |
+
#inspector li.proof{color:var(--yuyay-300)}
|
| 71 |
+
#inspector .close{position:absolute;top:12px;right:14px;cursor:pointer;color:var(--ink-dim);font-size:18px;background:none;border:0}
|
| 72 |
+
#inspector .close:hover{color:var(--hatun-300)}
|
| 73 |
+
#boot{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;flex-direction:column;
|
| 74 |
+
background:var(--indigo-900);text-align:center;transition:opacity .6s ease}
|
| 75 |
+
#boot.hide{opacity:0;pointer-events:none}
|
| 76 |
+
#boot .b1{font:700 20px var(--mono);color:var(--hatun-300);letter-spacing:.08em}
|
| 77 |
+
#boot .b2{color:var(--ink-dim);font-size:13px;margin-top:10px}
|
| 78 |
+
.title-card{position:fixed;z-index:8;left:50%;bottom:32px;transform:translateX(-50%);text-align:center;pointer-events:none}
|
| 79 |
+
.title-card .t1{font:700 15px var(--mono);color:var(--hatun-300);letter-spacing:.18em;text-transform:uppercase}
|
| 80 |
+
.title-card .t2{color:var(--ink-dim);font-size:12px;margin-top:4px}
|
| 81 |
+
@media(max-width:680px){.legend{display:none}.status{min-width:160px}.plaque{max-width:78vw}.enter{bottom:96px}}
|
| 82 |
+
</style>
|
| 83 |
+
</head>
|
| 84 |
+
<body>
|
| 85 |
+
<canvas id="scene" aria-label="3D scene: a11oy brain-sun with orbiting internal capabilities"></canvas>
|
| 86 |
+
<div id="boot"><div class="b1">a11oy</div><div class="b2">vendoring sovereign 3D · no CDN…</div></div>
|
| 87 |
+
|
| 88 |
+
<div class="hud plaque" aria-live="polite">
|
| 89 |
+
<div class="title">a11oy · Governed-AI Command Platform</div>
|
| 90 |
+
<div class="line">Doctrine <b>v11 LOCKED</b> · <b>749/14/163</b> · <span class="sha">c7c0ba17</span></div>
|
| 91 |
+
<div class="line" style="margin-top:5px">Λ = <b>Conjecture 1</b> (not a theorem) · locked proven <b>5</b> {F1,F11,F12,F18,F19}</div>
|
| 92 |
+
<div class="line" style="margin-top:5px">Experimental main: <b>1304</b> decl / <b>22</b> axioms · waves 3–10 CI-green · SLSA <b>L1 honest / L2 roadmap</b></div>
|
| 93 |
+
<div class="line" style="margin-top:5px;color:var(--ink-dim)">Sun = a11oy brain · orbit = internal capabilities (reasoning / policy / operator)</div>
|
| 94 |
+
</div>
|
| 95 |
+
|
| 96 |
+
<div class="hud status">
|
| 97 |
+
<div class="h">Live mesh · /healthz</div>
|
| 98 |
+
<div id="status-rows"></div>
|
| 99 |
+
<div class="feed">feed · <span id="feed-src">connecting…</span></div>
|
| 100 |
+
</div>
|
| 101 |
+
|
| 102 |
+
<div class="hud legend">
|
| 103 |
+
<div class="h">a11oy front door</div>
|
| 104 |
+
<div class="hint">Click the sun or a capability to inspect. 25-demo Warhacker · a11oy Code · proven-formulas (9 wave 9/10 cards) all live inside the console.</div>
|
| 105 |
+
</div>
|
| 106 |
+
|
| 107 |
+
<div class="enter">
|
| 108 |
+
<a href="/console">Enter Command Console →</a>
|
| 109 |
+
<a class="ghost" href="/proven-formulas">proven formulas · wave 9/10</a>
|
| 110 |
+
</div>
|
| 111 |
+
|
| 112 |
+
<div id="inspector" role="dialog" aria-modal="false">
|
| 113 |
+
<button class="close" id="insp-close" aria-label="Close">×</button>
|
| 114 |
+
<div class="ititle" id="insp-title"></div>
|
| 115 |
+
<div class="iplain" id="insp-plain"></div>
|
| 116 |
+
<div id="insp-body"></div>
|
| 117 |
+
</div>
|
| 118 |
+
|
| 119 |
+
<div class="title-card"><div class="t1">a11oy</div><div class="t2">drag to orbit · scroll to zoom · click a body to inspect</div></div>
|
| 120 |
+
|
| 121 |
+
<script type="importmap">
|
| 122 |
+
{ "imports": { "three": "/hero/vendor3d/three.module.min.js", "three/addons/": "/hero/vendor3d/" } }
|
| 123 |
+
</script>
|
| 124 |
+
<script type="module" src="/hero/a11oy_cathedral.js"></script>
|
| 125 |
+
</body>
|
| 126 |
+
</html>
|
serve.py
CHANGED
|
@@ -4112,15 +4112,43 @@ except Exception as _vend_e: # never crash the app — additive only
|
|
| 4112 |
|
| 4113 |
@app.get("/")
|
| 4114 |
async def spa_root() -> FileResponse:
|
| 4115 |
-
"""
|
| 4116 |
-
|
| 4117 |
-
|
|
|
|
|
|
|
|
|
|
| 4118 |
app_file = PAGES_DIR / "console.html"
|
| 4119 |
if app_file.is_file():
|
| 4120 |
return FileResponse(app_file, media_type="text/html")
|
| 4121 |
return FileResponse(INDEX_HTML, media_type="text/html")
|
| 4122 |
|
| 4123 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4124 |
|
| 4125 |
# --- Doctrine v13 organ page routes (ADDITIVE; explicit, win over SPA catch-all) ---
|
| 4126 |
PAGES_DIR = Path("/app/pages")
|
|
|
|
| 4112 |
|
| 4113 |
@app.get("/")
|
| 4114 |
async def spa_root() -> FileResponse:
|
| 4115 |
+
"""FRONT DOOR: cathedral-style sovereign 3D hero (a11oy brain-sun, live Trust
|
| 4116 |
+
Score Λ, current updates) matching the org card. The full working console is
|
| 4117 |
+
one click in at /console. Falls back to the console then SPA index if absent."""
|
| 4118 |
+
hero = Path("/app/cathedral.html")
|
| 4119 |
+
if hero.is_file():
|
| 4120 |
+
return FileResponse(hero, media_type="text/html")
|
| 4121 |
app_file = PAGES_DIR / "console.html"
|
| 4122 |
if app_file.is_file():
|
| 4123 |
return FileResponse(app_file, media_type="text/html")
|
| 4124 |
return FileResponse(INDEX_HTML, media_type="text/html")
|
| 4125 |
|
| 4126 |
|
| 4127 |
+
# === ADDITIVE: cathedral front-door hero assets (sovereign, vendored, NO CDN) ===
|
| 4128 |
+
# Served via explicit routes BEFORE the SPA catch-all. ES-module Three.js r160
|
| 4129 |
+
# (MIT) vendored under /app/static/vendor3d. Doctrine v11 LOCKED. Lambda Conjecture 1.
|
| 4130 |
+
_HERO_DIR = Path("/app")
|
| 4131 |
+
_HERO_VENDOR = Path("/app/static/vendor3d")
|
| 4132 |
+
|
| 4133 |
+
@app.get("/hero/a11oy_cathedral.js")
|
| 4134 |
+
async def _hero_app_js() -> Response:
|
| 4135 |
+
f = _HERO_DIR / "static" / "a11oy_cathedral.js"
|
| 4136 |
+
if f.is_file():
|
| 4137 |
+
return FileResponse(str(f), media_type="application/javascript; charset=utf-8")
|
| 4138 |
+
return JSONResponse({"error": "hero js missing"}, status_code=404)
|
| 4139 |
+
|
| 4140 |
+
@app.get("/hero/vendor3d/{fname}")
|
| 4141 |
+
async def _hero_vendor(fname: str) -> Response:
|
| 4142 |
+
if fname not in {"three.module.min.js", "OrbitControls.js", "THREE_LICENSE.txt"}:
|
| 4143 |
+
return JSONResponse({"error": "not allowlisted"}, status_code=404)
|
| 4144 |
+
f = _HERO_VENDOR / fname
|
| 4145 |
+
if f.is_file():
|
| 4146 |
+
ct = "text/plain; charset=utf-8" if fname.endswith(".txt") else "application/javascript; charset=utf-8"
|
| 4147 |
+
return FileResponse(str(f), media_type=ct,
|
| 4148 |
+
headers={"Cache-Control": "public, max-age=31536000, immutable"})
|
| 4149 |
+
return JSONResponse({"error": "vendor missing"}, status_code=404)
|
| 4150 |
+
|
| 4151 |
+
|
| 4152 |
|
| 4153 |
# --- Doctrine v13 organ page routes (ADDITIVE; explicit, win over SPA catch-all) ---
|
| 4154 |
PAGES_DIR = Path("/app/pages")
|
static/a11oy_cathedral.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ============================================================================
|
| 2 |
+
* a11oy_cathedral.js — a11oy front-door sovereign 3D hero (vendored Three.js).
|
| 3 |
+
* Brain-sun (a11oy) + 3 internal capabilities orbiting + inspectable.
|
| 4 |
+
* Honesty: locked proven = 5; experimental main 1304/22; Λ = Conjecture 1;
|
| 5 |
+
* conformal (never 100%) not Hoeffding; SLSA L1 honest / L2 roadmap.
|
| 6 |
+
* Live /healthz + /lambda (13-axis Trust Score). No fakery; honest fallback.
|
| 7 |
+
* Signed-off-by: Stephen P. Lutar Jr. <stephenlutar2@gmail.com>
|
| 8 |
+
* ========================================================================== */
|
| 9 |
+
import * as THREE from 'three';
|
| 10 |
+
import { OrbitControls } from 'three/addons/OrbitControls.js';
|
| 11 |
+
|
| 12 |
+
const CAPABILITIES = [
|
| 13 |
+
{ id:'reasoning', title:'Reasoning & Provenance', color:0x5cc4bf, angle:0,
|
| 14 |
+
plain:'Grounded reasoning, memory/recall and provenance over a signed knowledge base — an internal a11oy function.',
|
| 15 |
+
functions:['grounded ask (cites its source, refuses to fabricate)','13-axis Trust Score (geometric-mean aggregate, floor 0.90)','knowledge ontology (axioms → theorems → formulas)','model router (5-tier, cost-aware)'],
|
| 16 |
+
proof:['Trust-Score CI from CONFORMAL (W5-3 + W7-4) — distribution-free, anti-overconfidence floor (never 100%, NOT Hoeffding)','Model-Router stability C20 + PAC-Bayes/router envelope W7-5 (min ≤ avg ≤ max)','Ontology label-invariance: F-G2 / F-G4 / F-G6 / W7-1 (graph substrate)'] },
|
| 17 |
+
{ id:'policy', title:'Policy & Compliance', color:0xd7b96b, angle:2.094,
|
| 18 |
+
plain:'Deny-by-default safety gates and full ALLOW/DENY verdicts with signed receipts — an internal a11oy function.',
|
| 19 |
+
functions:['8 deny-by-default safety gates','full verdict (ALLOW / DENY) with signals + receipt hash','30-signature threat corpus (MITRE ATT&CK + CVSS)','readiness / compliance (NIST / STIG / ISO)'],
|
| 20 |
+
proof:['Gate-soundness P2 — no action without BOTH policy AND kernel/doctrine check; a single DENY is absorbing','Agentic-loop P3 non-interference — poisoned input provably cannot flip a DENY into an ALLOW'] },
|
| 21 |
+
{ id:'operator', title:'Operator · Ask / Act / Approvals', color:0xe58e54, angle:4.189,
|
| 22 |
+
plain:'The governed run loop: ask, act with approvals, and emit replayable signed receipts — an internal a11oy function.',
|
| 23 |
+
functions:['governed run loop P1–P6 (sign → gate → chain → memory → replay)','human approvals gate for high-impact actions','replayable, hash-chained receipts (Khipu)','a11oy Code — governed agentic coder (P1–P6), open-weight models'],
|
| 24 |
+
proof:['Agentic-loop P1–P6: 28 kernel-verified theorems — run is auditable, gate-sound, injection-resistant end-to-end','P5 replay-determinism gated only by declared hashFn_collision_resistant axiom (named, not a hardness proof)'] }
|
| 25 |
+
];
|
| 26 |
+
|
| 27 |
+
const A11OY = {
|
| 28 |
+
id:'a11oy', title:'a11oy — Command Platform (the brain)',
|
| 29 |
+
plain:'The orchestrating governance substrate: one brain coordinating reasoning, policy and operator capabilities. Live: /healthz.',
|
| 30 |
+
functions:['command center + five superpowers + 25-demo Warhacker board (5×5 live)','a11oy Code (governed agentic coder, P1–P6, open-weight router)','one governance substrate (capabilities are internal, no service split)','13-axis Trust Score aggregate (yuyay_v3, geometric mean, floor 0.90)','/proven: 9 wave 9/10 formula cards (5 with live runtime checks)','signed Khipu receipts for every governed action'],
|
| 31 |
+
proof:['Locked proven kernel = 5 {F1,F11,F12,F18,F19} @ c7c0ba17 (749/14/163) — machine-enforced count','Experimental main: 1304 decl / 22 axioms, waves 3–10 CI-green (~36–44 theorems), excluded from locked count','Λ-Aggregator uniqueness (F23) = Conjecture 1 — NOT a theorem (unconditional uniqueness machine-checked FALSE)'],
|
| 32 |
+
url:'/console'
|
| 33 |
+
};
|
| 34 |
+
|
| 35 |
+
const ENDPOINTS = { health:'/healthz', lambda:'/api/a11oy/v1/lambda' };
|
| 36 |
+
|
| 37 |
+
const canvas = document.getElementById('scene');
|
| 38 |
+
const renderer = new THREE.WebGLRenderer({ canvas, antialias:true, alpha:false });
|
| 39 |
+
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.8));
|
| 40 |
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
| 41 |
+
renderer.toneMapping = THREE.ACESFilmicToneMapping; renderer.toneMappingExposure = 1.15;
|
| 42 |
+
|
| 43 |
+
const scene = new THREE.Scene();
|
| 44 |
+
scene.fog = new THREE.FogExp2(0x070815, 0.0019);
|
| 45 |
+
const camera = new THREE.PerspectiveCamera(55, window.innerWidth/window.innerHeight, 0.1, 4000);
|
| 46 |
+
camera.position.set(0, 70, 320);
|
| 47 |
+
const controls = new OrbitControls(camera, renderer.domElement);
|
| 48 |
+
controls.enableDamping = true; controls.dampingFactor = 0.06;
|
| 49 |
+
controls.minDistance = 90; controls.maxDistance = 1000;
|
| 50 |
+
controls.autoRotate = true; controls.autoRotateSpeed = 0.45;
|
| 51 |
+
|
| 52 |
+
scene.add(new THREE.AmbientLight(0x33304a, 0.9));
|
| 53 |
+
scene.add(new THREE.PointLight(0xffe6a8, 2.4, 1600, 1.4));
|
| 54 |
+
const rim = new THREE.DirectionalLight(0x5c8fd1, 0.5); rim.position.set(-200,120,-150); scene.add(rim);
|
| 55 |
+
|
| 56 |
+
(function backdrop(){
|
| 57 |
+
const N=2600, pos=new Float32Array(N*3);
|
| 58 |
+
for(let i=0;i<N;i++){ const r=1400+Math.random()*1600, t=Math.random()*Math.PI*2, p=Math.acos(2*Math.random()-1);
|
| 59 |
+
pos[i*3]=r*Math.sin(p)*Math.cos(t); pos[i*3+1]=r*Math.cos(p); pos[i*3+2]=r*Math.sin(p)*Math.sin(t); }
|
| 60 |
+
const g=new THREE.BufferGeometry(); g.setAttribute('position', new THREE.BufferAttribute(pos,3));
|
| 61 |
+
scene.add(new THREE.Points(g, new THREE.PointsMaterial({ color:0x8a90c0, size:1.4, sizeAttenuation:true, transparent:true, opacity:0.55 })));
|
| 62 |
+
})();
|
| 63 |
+
|
| 64 |
+
const interactables=[];
|
| 65 |
+
function registerBody(mesh,data){ mesh.userData.inspect=data; interactables.push(mesh); }
|
| 66 |
+
|
| 67 |
+
const sunGroup=new THREE.Group(); scene.add(sunGroup);
|
| 68 |
+
const sunCore=new THREE.Mesh(new THREE.IcosahedronGeometry(36,4),
|
| 69 |
+
new THREE.MeshStandardMaterial({ color:0xffce6e, emissive:0xd79a2e, emissiveIntensity:1.5, roughness:0.35, metalness:0.1 }));
|
| 70 |
+
sunGroup.add(sunCore); registerBody(sunCore, A11OY);
|
| 71 |
+
const sunGlow=new THREE.Mesh(new THREE.SphereGeometry(50,32,32),
|
| 72 |
+
new THREE.MeshBasicMaterial({ color:0xffd98a, transparent:true, opacity:0.10, side:THREE.BackSide }));
|
| 73 |
+
sunGroup.add(sunGlow);
|
| 74 |
+
const brainLattice=new THREE.Mesh(new THREE.IcosahedronGeometry(42,2),
|
| 75 |
+
new THREE.MeshBasicMaterial({ color:0xffe6a8, wireframe:true, transparent:true, opacity:0.22 }));
|
| 76 |
+
sunGroup.add(brainLattice);
|
| 77 |
+
sunGroup.add(makeLabel('a11oy', 0xffe6a8, 66));
|
| 78 |
+
|
| 79 |
+
const ORBIT_R=150; const capBodies=[];
|
| 80 |
+
CAPABILITIES.forEach((cap)=>{
|
| 81 |
+
const grp=new THREE.Group();
|
| 82 |
+
const mesh=new THREE.Mesh(new THREE.IcosahedronGeometry(15,2),
|
| 83 |
+
new THREE.MeshStandardMaterial({ color:cap.color, emissive:cap.color, emissiveIntensity:0.55, roughness:0.5, metalness:0.2 }));
|
| 84 |
+
grp.add(mesh);
|
| 85 |
+
const ring=new THREE.Mesh(new THREE.TorusGeometry(22,0.7,8,64), new THREE.MeshBasicMaterial({ color:cap.color, transparent:true, opacity:0.35 }));
|
| 86 |
+
ring.rotation.x=Math.PI/2; grp.add(ring);
|
| 87 |
+
grp.add(makeLabel(cap.title.split(/[ &·]/)[0], cap.color, 30));
|
| 88 |
+
scene.add(grp); registerBody(mesh, cap);
|
| 89 |
+
const tether=new THREE.Line(new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(),new THREE.Vector3()]),
|
| 90 |
+
new THREE.LineBasicMaterial({ color:cap.color, transparent:true, opacity:0.28 }));
|
| 91 |
+
scene.add(tether);
|
| 92 |
+
capBodies.push({ grp, mesh, cap, baseAngle:cap.angle, tether });
|
| 93 |
+
});
|
| 94 |
+
|
| 95 |
+
function makeLabel(text,color,size){
|
| 96 |
+
const c=document.createElement('canvas'); c.width=256; c.height=64; const ctx=c.getContext('2d');
|
| 97 |
+
ctx.font='700 34px ui-monospace, Menlo, Consolas, monospace';
|
| 98 |
+
ctx.fillStyle='#'+new THREE.Color(color).getHexString();
|
| 99 |
+
ctx.textAlign='center'; ctx.textBaseline='middle'; ctx.shadowColor='rgba(0,0,0,0.8)'; ctx.shadowBlur=8;
|
| 100 |
+
ctx.fillText(text,128,34);
|
| 101 |
+
const tex=new THREE.CanvasTexture(c); tex.anisotropy=4;
|
| 102 |
+
const spr=new THREE.Sprite(new THREE.SpriteMaterial({ map:tex, transparent:true, depthWrite:false }));
|
| 103 |
+
spr.scale.set(size*2,size*0.5,1); spr.position.y=size*0.9; spr.userData.isLabel=true; return spr;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
const ray=new THREE.Raycaster(); const ptr=new THREE.Vector2();
|
| 107 |
+
canvas.addEventListener('click',(e)=>{
|
| 108 |
+
const r=canvas.getBoundingClientRect();
|
| 109 |
+
ptr.x=((e.clientX-r.left)/r.width)*2-1; ptr.y=-((e.clientY-r.top)/r.height)*2+1;
|
| 110 |
+
ray.setFromCamera(ptr,camera);
|
| 111 |
+
const hits=ray.intersectObjects(interactables,false);
|
| 112 |
+
if(hits.length) openInspector(hits[0].object.userData.inspect);
|
| 113 |
+
});
|
| 114 |
+
|
| 115 |
+
const insp=document.getElementById('inspector');
|
| 116 |
+
document.getElementById('insp-close').addEventListener('click',()=>insp.classList.remove('show'));
|
| 117 |
+
function openInspector(d){
|
| 118 |
+
if(!d) return;
|
| 119 |
+
document.getElementById('insp-title').textContent=d.title;
|
| 120 |
+
document.getElementById('insp-plain').textContent=d.plain;
|
| 121 |
+
let html='<div class="ih">Functions</div><ul>'+d.functions.map(f=>`<li>${esc(f)}</li>`).join('')+'</ul>';
|
| 122 |
+
if(d.proof) html+='<div class="ih">Proof support (honest)</div><ul>'+d.proof.map(p=>`<li class="proof">${esc(p)}</li>`).join('')+'</ul>';
|
| 123 |
+
if(d.url) html+=`<div class="ih">Open</div><ul><li><a href="${d.url}" style="color:#5cc4bf">Enter the working app ↗</a></li></ul>`;
|
| 124 |
+
document.getElementById('insp-body').innerHTML=html; insp.classList.add('show');
|
| 125 |
+
}
|
| 126 |
+
function esc(s){ return String(s).replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c])); }
|
| 127 |
+
|
| 128 |
+
let liveState={ a11oy:'…' }, feedSource='connecting…', liveLambda=null;
|
| 129 |
+
async function getJSON(url,ms){
|
| 130 |
+
const ctrl=new AbortController(); const t=setTimeout(()=>ctrl.abort(), ms||7000);
|
| 131 |
+
try{ const r=await fetch(url,{ signal:ctrl.signal, headers:{accept:'application/json'} }); if(!r.ok) throw 0; return await r.json(); }
|
| 132 |
+
finally{ clearTimeout(t); }
|
| 133 |
+
}
|
| 134 |
+
async function poll(){
|
| 135 |
+
try{ const h=await getJSON(ENDPOINTS.health,7000); liveState.a11oy=(h&&(h.status==='ok'||h.ok))?'LIVE':'DEGRADED'; }
|
| 136 |
+
catch(_){ liveState.a11oy='OFFLINE'; }
|
| 137 |
+
try{ const lam=await getJSON(ENDPOINTS.lambda,7000); if(lam&&typeof lam.lambda==='number'){ liveLambda=lam.lambda; feedSource='LIVE a11oy Λ='+lam.lambda.toFixed(3)+' (13-axis Trust Score)'; } }
|
| 138 |
+
catch(_){ if(liveLambda===null) feedSource='Λ feed reconnecting…'; }
|
| 139 |
+
paintHUD();
|
| 140 |
+
}
|
| 141 |
+
function paintHUD(){
|
| 142 |
+
const cls=liveState.a11oy==='LIVE'?'live':(liveState.a11oy==='OFFLINE'?'off':'seed');
|
| 143 |
+
let rows=`<div class="row"><span class="dot ${cls}"></span><span>a11oy · brain</span><span class="meta">${liveState.a11oy}</span></div>`;
|
| 144 |
+
if(liveLambda!==null){ const v=liveLambda>=0.9?'green':(liveLambda>=0.5?'amber':'red'); const col=v==='green'?'#4fd18b':(v==='amber'?'#d7b96b':'#c0392b');
|
| 145 |
+
rows+=`<div class="row"><span class="dot" style="background:${col};box-shadow:0 0 9px ${col}"></span><span>Trust Score Λ</span><span class="meta">${liveLambda.toFixed(3)}</span></div>`; }
|
| 146 |
+
document.getElementById('status-rows').innerHTML=rows;
|
| 147 |
+
document.getElementById('feed-src').textContent=feedSource;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
let tms=0;
|
| 151 |
+
function animate(){
|
| 152 |
+
requestAnimationFrame(animate); tms+=0.004;
|
| 153 |
+
sunCore.rotation.y+=0.0015; brainLattice.rotation.y-=0.0011; brainLattice.rotation.x+=0.0006;
|
| 154 |
+
sunGlow.material.opacity=0.08+0.04*Math.sin(tms*2);
|
| 155 |
+
capBodies.forEach((cb,i)=>{ const a=cb.baseAngle+tms*0.6; const x=Math.cos(a)*ORBIT_R, z=Math.sin(a)*ORBIT_R, y=Math.sin(a*1.3+i)*22;
|
| 156 |
+
cb.grp.position.set(x,y,z); cb.mesh.rotation.y+=0.01;
|
| 157 |
+
cb.tether.geometry.setFromPoints([new THREE.Vector3(0,0,0), new THREE.Vector3(x,y,z)]); cb.tether.geometry.attributes.position.needsUpdate=true; });
|
| 158 |
+
controls.update(); renderer.render(scene,camera);
|
| 159 |
+
}
|
| 160 |
+
window.addEventListener('resize',()=>{ camera.aspect=window.innerWidth/window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth,window.innerHeight); });
|
| 161 |
+
paintHUD(); animate();
|
| 162 |
+
document.getElementById('boot').classList.add('hide');
|
| 163 |
+
poll(); setInterval(poll, 8000);
|
| 164 |
+
controls.addEventListener('start',()=>{ controls.autoRotate=false; });
|