betterwithage commited on
Commit
b687f61
·
verified ·
1 Parent(s): 9c55944

F5: /constitution /quant /estate-hologram 3D sovereign surfaces (additive, image-only)

Browse files

F1 3D/holographic substrate kit — direct Space push (byte-identical to a11oy). Doctrine v11: locked=8 @ c7c0ba17; Lambda=Conjecture 1; 0 CDN.

.github/copy-sync-lockstep.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_comment": "Config for tools/check_copy_sync_lockstep.py (Doctrine v11). image_only_assets are non-.py assets brought in by an EXPLICIT per-file Dockerfile COPY that are INTENTIONALLY baked into the HF image and NOT re-mirrored by hf-sync. Per hf-sync.yml's own documented rationale, the built SPA bundles + vendored 3rd-party blobs (large/possibly-LFS) already live resident on the Space; re-syncing them reintroduces the LFS/pre-receive failures. Each exemption is named here EXPLICITLY (reviewed escape hatch, never a silent skip). A NEW per-file served asset that is neither mirrored by hf-sync nor listed here will FAIL CHECK 3 \u2014 that is the guard working. To make a new served file go live on HF, add it to hf-sync.yml's mirror set; only list it here if it is a baked-only vendor/SPA blob.",
3
+ "_doctrine": "locked=8 @ c7c0ba17 \u00b7 Lambda=Conjecture 1 \u00b7 v11",
4
+ "mirror_asset_exts": [
5
+ ".html",
6
+ ".js",
7
+ ".css"
8
+ ],
9
+ "image_only_assets": [
10
+ "a11oy_code_ide.html",
11
+ "agent.html",
12
+ "live_wires.html",
13
+ "live_wires_3d.js",
14
+ "static-vendor/3d-force-graph.min.js",
15
+ "static-vendor/a11oy-operator-widget.css",
16
+ "static-vendor/a11oy-operator-widget.js",
17
+ "static-vendor/chart.umd.min.js",
18
+ "static-vendor/cytoscape-dagre.js",
19
+ "static-vendor/cytoscape.min.js",
20
+ "static-vendor/d3-sankey.min.js",
21
+ "static-vendor/d3.min.js",
22
+ "static-vendor/dagre.min.js",
23
+ "static-vendor/echarts-gl.min.js",
24
+ "static-vendor/echarts.min.js",
25
+ "static-vendor/globe.gl.min.js",
26
+ "static-vendor/katex.min.css",
27
+ "static-vendor/katex.min.js",
28
+ "static-vendor/ngraph.events.umd.js",
29
+ "static-vendor/ngraph.forcelayout.min.js",
30
+ "static-vendor/ngraph.graph.min.js",
31
+ "static-vendor/ngraph.path.min.js",
32
+ "static-vendor/panzoom.min.js",
33
+ "static-vendor/three.min.js",
34
+ "static-vendor/vivagraph.min.js",
35
+ "static/a11oy_operator_organ.js",
36
+ "static/vendor3d/OrbitControls.js",
37
+ "static/vendor3d/three.module.min.js",
38
+ "web/autoreview.html",
39
+ "web/constitution.html",
40
+ "web/estate-hologram.html",
41
+ "web/fleet-c2.html",
42
+ "web/formulas.html",
43
+ "web/governance.html",
44
+ "web/holo.html",
45
+ "web/quant.html",
46
+ "web/living-anatomy.html",
47
+ "web/nemo.html",
48
+ "web/operator.html",
49
+ "web/v4_fleet_panel.html"
50
+ ]
51
+ }
Dockerfile CHANGED
@@ -324,6 +324,16 @@ COPY web/nemo.html ./web/nemo.html
324
  # .github/copy-sync-lockstep.json image_only_assets; baked into the GitHub-built image,
325
  # live after a factory rebuild). Without this COPY /holo would 404 to the SPA shell.
326
  COPY web/holo.html ./web/holo.html
 
 
 
 
 
 
 
 
 
 
327
  # ADDITIVE (Lane A AGENTIC CORE, Dev A, 2026-06-14; QA9 restore 2026-06): the
328
  # resumable ReAct agent-loop core module. Per-file COPY (this Dockerfile uses no
329
  # COPY . .). a11oy_react_core.py is imported by serve.py (try/except guarded) and
 
324
  # .github/copy-sync-lockstep.json image_only_assets; baked into the GitHub-built image,
325
  # live after a factory rebuild). Without this COPY /holo would 404 to the SPA shell.
326
  COPY web/holo.html ./web/holo.html
327
+ # ADDITIVE (Lane F5, 2026-06-14): the three sovereign 3D surfaces served at
328
+ # /constitution, /quant and /estate-hologram (+ /a11oy/* aliases) via _ptg_serve.
329
+ # Each loads the shared kit /static/shared/szl_holo3d.js (0 CDN) and reads its live
330
+ # /api/a11oy/v1/{constitution,quant,ecosystem,engine}/* feeds. image-only like the
331
+ # other web/*.html demo pages (declared in copy-sync-lockstep.json image_only_assets;
332
+ # baked into the GitHub-built image, live after a factory rebuild + direct Space push).
333
+ # Without these COPYs the routes 404 to the SPA shell.
334
+ COPY web/constitution.html ./web/constitution.html
335
+ COPY web/quant.html ./web/quant.html
336
+ COPY web/estate-hologram.html ./web/estate-hologram.html
337
  # ADDITIVE (Lane A AGENTIC CORE, Dev A, 2026-06-14; QA9 restore 2026-06): the
338
  # resumable ReAct agent-loop core module. Per-file COPY (this Dockerfile uses no
339
  # COPY . .). a11oy_react_core.py is imported by serve.py (try/except guarded) and
serve.py CHANGED
@@ -995,6 +995,36 @@ try:
995
  app.add_api_route("/holo", _ptg_serve("holo.html"), methods=["GET"], include_in_schema=False)
996
  app.add_api_route("/a11oy/holo", _ptg_serve("holo.html"), methods=["GET"], include_in_schema=False)
997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
998
  # /chat + /a11oy/chat -> /code consolidation (founder-directed; the only removal).
999
  async def _ptg_chat_to_code() -> Response:
1000
  return _PTG_Redirect(url="/code", status_code=302)
 
995
  app.add_api_route("/holo", _ptg_serve("holo.html"), methods=["GET"], include_in_schema=False)
996
  app.add_api_route("/a11oy/holo", _ptg_serve("holo.html"), methods=["GET"], include_in_schema=False)
997
 
998
+ # ADDITIVE (Lane F5, 2026-06-14): three sovereign 3D surfaces that render on the
999
+ # shared holographic kit (/static/shared/szl_holo3d.js, 0 runtime CDN):
1000
+ # /constitution — 3D ontology ORGANISM: 8 pillars + live constitutional
1001
+ # engines as a causal graph, animated causal-edge pulses,
1002
+ # time-slider ledger replay, TrustGraph/Letta memory cores.
1003
+ # Reads LIVE /api/a11oy/v1/constitution/{status,ledger,audit,
1004
+ # memory,ontology,state}. Deeper R&D honest ROADMAP. NOT AGI.
1005
+ # /quant — 3D portfolio risk landscape (PCA eigen-spectrum) with Betti
1006
+ # FRACTURE TEARS (TDA β1 cycles), HJB-Kelly rebalancing bars,
1007
+ # and the signed energy receipt. Reads LIVE /api/a11oy/v1/
1008
+ # quant/{pca,tda,kelly,pipeline}. Honest SAMPLE_SIGNAL |
1009
+ # NOT_LIVE | NO_BACKTEST_VALIDATED; GPU path ROADMAP.
1010
+ # /estate-hologram — THE UNIFIED ESTATE HOLOGRAM: globe + proof-DAG + Λ trust-
1011
+ # sphere + mesh organism + constitutional pillars on ONE
1012
+ # canvas; every signed cross-surface decision flows as LIGHT
1013
+ # (kit signed-pulse). Reads LIVE estate Λ + KPIs (ecosystem/
1014
+ # kpi-board), the engine organism (engine/status), and per-
1015
+ # surface signed receipts. Cross-surface receipt aggregation
1016
+ # is honest SAMPLE where not fully wired. locked = EXACTLY 8
1017
+ # @ c7c0ba17; Λ = Conjecture 1 (< 1.0); 0 visible codenames.
1018
+ # image-only like the other web/*.html demo pages (Dockerfile per-file COPY +
1019
+ # copy-sync-lockstep.json image_only_assets); also pushed direct-to-Space so they
1020
+ # are live immediately. Without these COPYs the routes 404 to the SPA shell.
1021
+ app.add_api_route("/constitution", _ptg_serve("constitution.html"), methods=["GET"], include_in_schema=False)
1022
+ app.add_api_route("/a11oy/constitution", _ptg_serve("constitution.html"), methods=["GET"], include_in_schema=False)
1023
+ app.add_api_route("/quant", _ptg_serve("quant.html"), methods=["GET"], include_in_schema=False)
1024
+ app.add_api_route("/a11oy/quant", _ptg_serve("quant.html"), methods=["GET"], include_in_schema=False)
1025
+ app.add_api_route("/estate-hologram", _ptg_serve("estate-hologram.html"), methods=["GET"], include_in_schema=False)
1026
+ app.add_api_route("/a11oy/estate-hologram", _ptg_serve("estate-hologram.html"), methods=["GET"], include_in_schema=False)
1027
+
1028
  # /chat + /a11oy/chat -> /code consolidation (founder-directed; the only removal).
1029
  async def _ptg_chat_to_code() -> Response:
1030
  return _PTG_Redirect(url="/code", status_code=302)
web/constitution.html ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <!-- SPDX-License-Identifier: Apache-2.0 © 2026 SZL Holdings
3
+ /constitution — CONSTITUTIONAL 3D ONTOLOGY ORGANISM (Lane F5).
4
+ Renders the live constitutional architecture as a 3D organism on the shared
5
+ holographic kit (/static/shared/szl_holo3d.js, 0 runtime CDN):
6
+ - ontology ORGANISM: the 8 constitutional pillars + the live engines as
7
+ nodes, causal edges between them, animated causal-edge pulses
8
+ - TIME-SLIDER replay of the causal ledger
9
+ - MEMORY-BLOCK view (TrustGraph-style Context Cores: pin/promote/rollback)
10
+ Reads LIVE: /api/a11oy/v1/constitution/{status,ledger,audit,memory,ontology,state}.
11
+ The causal ledger + audit + memory + ontology endpoints are LIVE; deeper
12
+ constitutional R&D (phenomenology / immunology engines) is honest ROADMAP.
13
+ Citations (build references, no runtime calls): Palantir Ontology, TrustGraph
14
+ (Apache-2.0), Letta (MemGPT memory blocks), Anthropic Constitutional AI.
15
+ DOCTRINE v11: 0 runtime CDN · Λ = Conjecture 1 (<1.0) · trust < 100% ·
16
+ 0 visible codenames · honest LIVE/SAMPLE/ROADMAP labels · never claims AGI. -->
17
+ <html lang="en">
18
+ <head>
19
+ <meta charset="utf-8">
20
+ <meta name="viewport" content="width=device-width,initial-scale=1">
21
+ <title>SZL · Constitutional Organism</title>
22
+ <style>
23
+ :root{--bg:#03060d;--panel:#0a1326;--ink:#cfe6ff;--mut:#86a4c9;--line:rgba(120,170,230,.18);
24
+ --ok:#46d39a;--warn:#ffcf5c;--bad:#ff6b6b;--accent:#7fd4ff;}
25
+ *{box-sizing:border-box}
26
+ html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);
27
+ font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}
28
+ header{padding:14px 20px;border-bottom:1px solid var(--line);display:flex;
29
+ align-items:center;gap:14px;flex-wrap:wrap;}
30
+ header h1{font-size:15px;margin:0;letter-spacing:.06em;font-weight:600;}
31
+ header .sub{font-size:11px;color:var(--mut);}
32
+ .wrap{display:grid;grid-template-columns:1fr;gap:14px;padding:16px 20px;max-width:1280px;margin:0 auto;}
33
+ .stage{height:60vh;min-height:380px;border:1px solid var(--line);border-radius:14px;overflow:hidden;
34
+ box-shadow:0 0 60px rgba(40,90,160,.12) inset;}
35
+ .grid2{display:grid;grid-template-columns:1.3fr 1fr;gap:14px;}
36
+ .panel{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:rgba(10,19,38,.5);}
37
+ .panel h2{font-size:12px;margin:0 0 8px;letter-spacing:.06em;color:#bfe0ff;}
38
+ .btn{background:rgba(70,150,230,.16);border:1px solid rgba(120,180,240,.4);color:#cfe6ff;
39
+ border-radius:8px;padding:6px 12px;font:inherit;font-size:12px;cursor:pointer;}
40
+ .btn:hover{background:rgba(70,150,230,.3);}
41
+ .row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
42
+ .mut{color:var(--mut);font-size:11px;}
43
+ a{color:#7fd4ff;}
44
+ .badge{display:inline-block;padding:1px 7px;border-radius:6px;font-size:10px;font-weight:600;
45
+ background:rgba(70,150,230,.18);border:1px solid rgba(120,180,240,.35);color:#bfe0ff;}
46
+ .badge.live{background:rgba(70,211,154,.16);border-color:rgba(70,211,154,.4);color:#9af0cf;}
47
+ .badge.roadmap{background:rgba(255,180,90,.16);border-color:rgba(255,190,110,.4);color:#ffd9a8;}
48
+ table{width:100%;border-collapse:collapse;font-size:11px;}
49
+ td,th{text-align:left;padding:3px 6px;border-bottom:1px solid rgba(120,170,230,.1);}
50
+ th{color:var(--mut);font-weight:600;}
51
+ .mem-block{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px;
52
+ background:rgba(10,19,38,.6);}
53
+ .mem-block .t{font-size:11px;color:#bfe0ff;}
54
+ .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle;}
55
+ @media(max-width:820px){.grid2{grid-template-columns:1fr;}}
56
+ </style>
57
+ </head>
58
+ <body>
59
+ <header>
60
+ <h1>SZL · CONSTITUTIONAL ORGANISM</h1>
61
+ <span class="sub">3D ontology · causal-ledger replay · memory cores · 0 runtime CDN · honest 2D fallback</span>
62
+ <span id="caps" class="sub"></span>
63
+ </header>
64
+
65
+ <div class="wrap">
66
+ <div class="panel">
67
+ <h2>WHAT THIS IS</h2>
68
+ <div class="mut">A governed, auditable, policy-enforced agent runtime rendered as a 3D
69
+ <strong>ontology organism</strong> — the 8 constitutional pillars and the live constitutional
70
+ engines as a living causal graph. The <strong>Causal Ledger, Audit, Memory and Ontology</strong>
71
+ engines read <span class="badge live">LIVE</span> from <code>/api/a11oy/v1/constitution/*</code>.
72
+ Deeper constitutional R&D (phenomenology / immunology) is honest <span class="badge roadmap">ROADMAP</span>.
73
+ This is <strong>NOT a new form of existence and NOT an AGI</strong>. Λ is
74
+ <strong>Conjecture 1</strong> (a bounded score &lt; 1.0, not a theorem); trust is never 100%.</div>
75
+ </div>
76
+
77
+ <div id="stage" class="stage"></div>
78
+
79
+ <div class="panel">
80
+ <div class="row">
81
+ <button class="btn" id="signBtn">EMIT CAUSAL EVENT → pulse</button>
82
+ <button class="btn" id="playBtn">▶ REPLAY LEDGER</button>
83
+ <span id="status" class="mut">loading live constitutional state…</span>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="grid2">
88
+ <div class="panel">
89
+ <h2>CONSTITUTIONAL ENGINES <span id="engBadge" class="badge live">LIVE</span></h2>
90
+ <div id="engines" class="mut">…</div>
91
+ </div>
92
+ <div class="panel">
93
+ <h2>MEMORY CORES <span class="badge">TrustGraph · Letta pattern</span></h2>
94
+ <div class="mut" style="margin-bottom:8px">Context Cores — pin (protect) · promote (set active) · rollback (restore prior as NEW version, append-only).</div>
95
+ <div id="memory"></div>
96
+ </div>
97
+ </div>
98
+
99
+ <div class="panel">
100
+ <h2>STATECHART <span class="badge">a11oy_agent</span></h2>
101
+ <div id="statechart" class="mut">…</div>
102
+ </div>
103
+
104
+ <div class="panel mut">
105
+ Build references (no runtime calls): Palantir Ontology
106
+ (<a href="https://www.palantir.com/platforms/foundry/ontology/">palantir.com</a>),
107
+ TrustGraph (<a href="https://trustgraph.ai">trustgraph.ai</a>, Apache-2.0),
108
+ Letta / MemGPT memory blocks (<a href="https://github.com/letta-ai/letta">letta-ai/letta</a>),
109
+ Anthropic Constitutional AI (arXiv:2212.08073), W3C PROV-DM.
110
+ Causal ledger is event-sourced + PROV-annotated; the 3D organism reads it live.
111
+ </div>
112
+ </div>
113
+
114
+ <script src="/static/shared/szl_label_engine.js"></script>
115
+ <script src="/static/shared/szl_holo3d.js"></script>
116
+ <script>
117
+ (function () {
118
+ var API = "/api/a11oy/v1/constitution/";
119
+ var stageEl = document.getElementById("stage");
120
+ if (!window.SZLHolo) {
121
+ stageEl.innerHTML = '<div style="padding:20px;color:#ffd9a8">SZLHolo kit failed to load.</div>';
122
+ return;
123
+ }
124
+ var caps = window.SZLHolo.capabilities();
125
+ document.getElementById("caps").textContent =
126
+ "renderer: " + caps.mode.toUpperCase() + (caps.webgpu ? " · WebGPU detected (ROADMAP)" : "");
127
+
128
+ // ---- 3D ontology organism: 8 pillars (inner ring) + live engines (outer) ----
129
+ var PILLARS = ["Ontology","Phenomenology","Temporality","Legitimacy",
130
+ "Immunology","Energy Economics","Topology","Governance"];
131
+ var nodes = [], edges = [];
132
+ // central CONSTITUTION nucleus
133
+ nodes.push({ id:"core", label:"CONSTITUTION", pos:[0,0,0], locked:true });
134
+ // pillars around a ring
135
+ PILLARS.forEach(function (p, i) {
136
+ var a = (i/PILLARS.length)*Math.PI*2;
137
+ nodes.push({ id:"p"+i, label:p, pos:[1.25*Math.cos(a), 0.15*Math.sin(i*1.7), 1.25*Math.sin(a)],
138
+ lambda: 0.30 + 0.04*i });
139
+ edges.push({ id:"ce"+i, from:"core", to:"p"+i });
140
+ });
141
+ var scene = window.SZLHolo.createScene(stageEl, { title:"CONSTITUTIONAL ONTOLOGY ORGANISM", lambda:0.34 });
142
+ var graph = scene.addGraph({ nodes: nodes, edges: edges });
143
+ scene.addTrustSphere({ center:[0,-1.15,0], radius:0.42, label:"ESTATE TRUST" });
144
+ // gentle causal pulses on a couple of pillar edges (animated causal edges)
145
+ scene.signPulse("ce2", { loop:true, duration:1900 }); // Temporality (ledger)
146
+ scene.signPulse("ce7", { loop:true, duration:2300 }); // Governance (audit)
147
+ var slider = scene.timeSlider({ from:0, to:100, onTime:function(){} });
148
+ scene.start();
149
+
150
+ document.getElementById("signBtn").addEventListener("click", function () {
151
+ // pulse a random pillar edge — represents a signed causal event being recorded
152
+ var i = Math.floor(Math.random()*PILLARS.length);
153
+ scene.signPulse("ce"+i, { duration:1200, color:"#aef6ff" });
154
+ });
155
+ var replaying=false;
156
+ document.getElementById("playBtn").addEventListener("click", function () {
157
+ if (replaying || !slider) return; replaying=true;
158
+ var v=0; var iv=setInterval(function(){ v+=0.04; slider.set(v); if(v>=1){clearInterval(iv);replaying=false;} },70);
159
+ });
160
+
161
+ function getJSON(path){ return fetch(API+path).then(function(r){return r.ok?r.json():null;}).catch(function(){return null;}); }
162
+ function esc(s){return String(s==null?"":s).replace(/[&<>"]/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'})[c];});}
163
+
164
+ // ---- live engines list + drive the organism's per-pillar Λ from live status ----
165
+ getJSON("status").then(function(st){
166
+ if(!st){ document.getElementById("engines").textContent="status feed unavailable (honest: not fabricated)."; return; }
167
+ var engines = st.engines || [];
168
+ var html = '<table><tr><th>Engine</th><th>Status</th><th>Pillar</th><th>Live</th></tr>';
169
+ engines.forEach(function(e){
170
+ var col = e.color==="green" ? "var(--ok)" : (e.color==="amber"?"var(--warn)":"var(--bad)");
171
+ html += '<tr><td>'+esc(e.engine)+'</td>'+
172
+ '<td><span class="dot" style="background:'+col+'"></span>'+esc(e.status)+'</td>'+
173
+ '<td>'+esc((e.pillars||[])[1]||"")+'</td>'+
174
+ '<td>'+esc(e.live_count)+'</td></tr>';
175
+ });
176
+ html += '</table>';
177
+ document.getElementById("engines").innerHTML = html;
178
+ document.getElementById("status").textContent =
179
+ "LIVE constitutional status · "+engines.length+" engines · concept: "+esc((st.concept_origin||"").slice(0,40));
180
+ });
181
+
182
+ // ---- ledger (causal events) drive the replay reveal ----
183
+ getJSON("ledger").then(function(ld){
184
+ if(!ld) return;
185
+ var n = ld.count||0;
186
+ document.getElementById("playBtn").textContent = "▶ REPLAY LEDGER ("+n+" events)";
187
+ });
188
+
189
+ // ---- memory cores view (TrustGraph Context Cores / Letta blocks) ----
190
+ getJSON("memory").then(function(mm){
191
+ var el = document.getElementById("memory");
192
+ if(!mm){ el.textContent="memory feed unavailable."; return; }
193
+ var cores = mm.cores || {};
194
+ var keys = Object.keys(cores);
195
+ if(!keys.length){
196
+ el.innerHTML = '<div class="mem-block"><div class="t">No Context Cores pinned yet '+
197
+ '<span class="badge live">LIVE · 0 cores</span></div>'+
198
+ '<div class="mut">Model: '+esc(mm.model)+'. Cores appear here as doctrine/decision '+
199
+ 'versions are pinned/promoted (append-only).</div></div>';
200
+ return;
201
+ }
202
+ el.innerHTML = keys.map(function(k){
203
+ var c = cores[k];
204
+ return '<div class="mem-block"><div class="t">'+esc(k)+'</div>'+
205
+ '<div class="mut">'+esc(JSON.stringify(c).slice(0,120))+'</div></div>';
206
+ }).join("");
207
+ });
208
+
209
+ // ---- ontology entities -> extend the organism with live entity nodes ----
210
+ getJSON("ontology").then(function(on){
211
+ if(!on) return;
212
+ var ents = on.entities || {}; var keys = Object.keys(ents).slice(0,6);
213
+ keys.forEach(function(k,i){
214
+ var a=(i/Math.max(1,keys.length))*Math.PI*2;
215
+ graph.nodes.push({ id:"ent"+i, label:esc(k), pos:[1.9*Math.cos(a),0.6,1.9*Math.sin(a)], lambda:0.4 });
216
+ });
217
+ });
218
+
219
+ // ---- statechart ----
220
+ getJSON("state").then(function(sc){
221
+ var el = document.getElementById("statechart");
222
+ if(!sc || !sc.statechart){ el.textContent="state feed unavailable."; return; }
223
+ var states = sc.statechart.states || {};
224
+ el.innerHTML = "<strong>"+esc(sc.statechart.id)+"</strong> · initial="+esc(sc.statechart.initial)+
225
+ " · states: "+Object.keys(states).map(esc).join(" → ");
226
+ });
227
+
228
+ // ---- audit integrity readout ----
229
+ getJSON("audit").then(function(au){
230
+ if(!au) return;
231
+ var s = " · audit: chain "+(au.chain_intact?"INTACT":"BROKEN")+
232
+ ", "+au.events_audited+" events ("+esc(au.trust_note||"").slice(0,40)+"…)";
233
+ document.getElementById("engBadge").textContent = au.chain_intact ? "LIVE · CHAIN INTACT" : "LIVE";
234
+ });
235
+
236
+ window.__SZL_CONSTITUTION_READY = true;
237
+ })();
238
+ </script>
239
+ </body>
240
+ </html>
web/estate-hologram.html ADDED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <!-- SPDX-License-Identifier: Apache-2.0 © 2026 SZL Holdings
3
+ /estate-hologram — THE UNIFIED ESTATE HOLOGRAM (Lane F5 — the demo centerpiece).
4
+ ONE holographic canvas where the whole SZL estate coexists on the shared kit
5
+ (/static/shared/szl_holo3d.js, 0 runtime CDN):
6
+ - the GLOBE (estate surfaces as geo-nodes)
7
+ - the PROOF-DAG (signed-decision pipeline: ingest→verify→policy→classify→sign→receipt)
8
+ - the Λ TRUST-SPHERE (morphs with the LIVE estate Λ from the KPI board)
9
+ - the MESH (the agentic-GPU organism: mind + 6 organs from engine/status)
10
+ - the constitutional ORGANISM (pillars), and the quant fracture node
11
+ EVERY signed decision flows as LIGHT through the graph (kit signed-pulse): when a
12
+ cross-surface receipt is signed, a light packet travels the proof-DAG.
13
+ Reads LIVE: /api/a11oy/v1/ecosystem/kpi-board (estate Λ + 13 trust axes + locked-8),
14
+ /api/a11oy/v1/engine/status (mind/6-organs/energy/swarm), and cross-surface signed
15
+ receipts from /api/a11oy/v1/quant/pipeline + /api/a11oy/v1/constitution/ledger.
16
+ HONEST: estate Λ + KPIs + the engine organism are LIVE; cross-surface receipt
17
+ AGGREGATION is partly SAMPLE (the per-surface receipts are live, the unified
18
+ cross-surface receipt stream is illustrative SAMPLE where not fully wired).
19
+ DOCTRINE v11: 0 runtime CDN · locked = EXACTLY 8 @ c7c0ba17 · Λ = Conjecture 1
20
+ (<1.0) · trust < 100% · 0 visible codenames · honest LIVE/SAMPLE labels ·
21
+ never claims cert / AGI / live-trading. -->
22
+ <html lang="en">
23
+ <head>
24
+ <meta charset="utf-8">
25
+ <meta name="viewport" content="width=device-width,initial-scale=1">
26
+ <title>SZL · Unified Estate Hologram</title>
27
+ <style>
28
+ :root{--bg:#03060d;--panel:#0a1326;--ink:#cfe6ff;--mut:#86a4c9;--line:rgba(120,170,230,.18);
29
+ --ok:#46d39a;--warn:#ffcf5c;--bad:#ff6b6b;--accent:#7fd4ff;}
30
+ *{box-sizing:border-box}
31
+ html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);
32
+ font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}
33
+ header{padding:14px 20px;border-bottom:1px solid var(--line);display:flex;
34
+ align-items:center;gap:14px;flex-wrap:wrap;}
35
+ header h1{font-size:16px;margin:0;letter-spacing:.07em;font-weight:700;
36
+ background:linear-gradient(90deg,#7fd4ff,#aef6ff,#9af0cf);-webkit-background-clip:text;background-clip:text;color:transparent;}
37
+ header .sub{font-size:11px;color:var(--mut);}
38
+ .wrap{display:grid;grid-template-columns:1fr;gap:14px;padding:14px 18px;max-width:1400px;margin:0 auto;}
39
+ .stage{height:70vh;min-height:460px;border:1px solid var(--line);border-radius:16px;overflow:hidden;
40
+ box-shadow:0 0 90px rgba(40,90,160,.18) inset, 0 0 40px rgba(40,90,160,.1);position:relative;}
41
+ .overlay{position:absolute;top:12px;right:14px;z-index:8;text-align:right;pointer-events:none;}
42
+ .overlay .lam{font-size:30px;font-weight:800;line-height:1;text-shadow:0 2px 12px rgba(0,0,0,.7);}
43
+ .overlay .lab{font-size:10px;color:var(--mut);}
44
+ .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
45
+ .panel{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:rgba(10,19,38,.5);}
46
+ .panel h2{font-size:11px;margin:0 0 8px;letter-spacing:.06em;color:#bfe0ff;}
47
+ .btn{background:rgba(70,150,230,.16);border:1px solid rgba(120,180,240,.4);color:#cfe6ff;
48
+ border-radius:8px;padding:6px 12px;font:inherit;font-size:12px;cursor:pointer;}
49
+ .btn:hover{background:rgba(70,150,230,.3);}
50
+ .btn.hero{background:linear-gradient(90deg,rgba(70,150,230,.3),rgba(70,211,154,.25));font-weight:600;}
51
+ .row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
52
+ .mut{color:var(--mut);font-size:11px;}
53
+ a{color:#7fd4ff;}
54
+ .badge{display:inline-block;padding:1px 7px;border-radius:6px;font-size:10px;font-weight:600;
55
+ background:rgba(70,150,230,.18);border:1px solid rgba(120,180,240,.35);color:#bfe0ff;}
56
+ .badge.live{background:rgba(70,211,154,.16);border-color:rgba(70,211,154,.4);color:#9af0cf;}
57
+ .badge.sample{background:rgba(255,180,90,.16);border-color:rgba(255,190,110,.4);color:#ffd9a8;}
58
+ .stat{display:flex;justify-content:space-between;font-size:11px;padding:2px 0;border-bottom:1px solid rgba(120,170,230,.08);}
59
+ .axis{display:flex;justify-content:space-between;font-size:10px;padding:1px 0;}
60
+ .tape{font-size:10px;max-height:150px;overflow:auto;}
61
+ .tape .r{padding:3px 0;border-bottom:1px solid rgba(120,170,230,.08);}
62
+ .dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px;}
63
+ @media(max-width:1000px){.grid{grid-template-columns:repeat(2,1fr);}}
64
+ @media(max-width:560px){.grid{grid-template-columns:1fr;}}
65
+ </style>
66
+ </head>
67
+ <body>
68
+ <header>
69
+ <h1>SZL · UNIFIED ESTATE HOLOGRAM</h1>
70
+ <span class="sub">globe · proof-DAG · Λ trust-sphere · mesh · organism — ONE canvas · signed-decision light-flow · 0 runtime CDN</span>
71
+ <span id="caps" class="sub"></span>
72
+ </header>
73
+
74
+ <div class="wrap">
75
+ <div class="panel">
76
+ <div class="mut">The whole estate on one holographic canvas. The estate <strong>Λ</strong> and KPIs
77
+ and the agentic-GPU <strong>organism</strong> (mind + 6 organs) are <span class="badge live">LIVE</span>
78
+ from <code>/api/a11oy/v1/ecosystem/kpi-board</code> + <code>/engine/status</code>. Every signed
79
+ cross-surface decision flows as <strong>light</strong> through the proof-DAG. The unified
80
+ cross-surface receipt stream is partly <span class="badge sample">SAMPLE</span> (per-surface receipts
81
+ are live; the aggregated stream is illustrative where not yet fully wired). locked = EXACTLY 8 @
82
+ <code>c7c0ba17</code>. Λ = Conjecture 1 (&lt; 1.0); trust never 100%. NOT a cert, NOT an AGI.</div>
83
+ </div>
84
+
85
+ <div class="stage" style="position:relative">
86
+ <div id="stage" style="position:absolute;inset:0"></div>
87
+ <div class="overlay">
88
+ <div id="lamBig" class="lam" style="color:#9af0cf">Λ —</div>
89
+ <div class="lab">ESTATE Λ · Conjecture 1 (&lt;1.0) · trust &lt;100%</div>
90
+ </div>
91
+ </div>
92
+
93
+ <div class="panel">
94
+ <div class="row">
95
+ <button class="btn hero" id="signBtn">SIGN A CROSS-SURFACE DECISION → light-flow</button>
96
+ <button class="btn" id="autoBtn">▶ AUTO DECISION STREAM</button>
97
+ <span id="status" class="mut">loading the live estate…</span>
98
+ </div>
99
+ </div>
100
+
101
+ <div class="grid">
102
+ <div class="panel">
103
+ <h2>ESTATE Λ <span id="lamBadge" class="badge live">LIVE</span></h2>
104
+ <div id="lamPanel" class="mut">…</div>
105
+ </div>
106
+ <div class="panel">
107
+ <h2>TRUST AXES <span class="badge live">13</span></h2>
108
+ <div id="axes" class="mut">…</div>
109
+ </div>
110
+ <div class="panel">
111
+ <h2>ORGANISM <span id="orgBadge" class="badge live">engine/status</span></h2>
112
+ <div id="organism" class="mut">…</div>
113
+ </div>
114
+ <div class="panel">
115
+ <h2>SIGNED DECISIONS <span class="badge sample">cross-surface</span></h2>
116
+ <div id="tape" class="tape mut">…</div>
117
+ </div>
118
+ </div>
119
+
120
+ <div class="panel mut">
121
+ LIVE feeds: estate Λ / KPI board, the engine organism status, the GPU-quant signed receipt, and
122
+ the constitutional causal ledger. Cross-surface receipt aggregation is partly <span class="badge sample">SAMPLE</span>.
123
+ Renders on the shared holographic substrate (vendored locally, 0 runtime CDN, WebGL2 baseline,
124
+ honest 2D fallback). Build refs: Palantir Foundry/Gotham, TrustGraph, deck.gl, CesiumJS, three.js.
125
+ </div>
126
+ </div>
127
+
128
+ <script src="/static/shared/szl_label_engine.js"></script>
129
+ <script src="/static/shared/szl_holo3d.js"></script>
130
+ <script>
131
+ (function () {
132
+ var stageEl = document.getElementById("stage");
133
+ if (!window.SZLHolo) {
134
+ stageEl.innerHTML = '<div style="padding:20px;color:#ffd9a8">SZLHolo kit failed to load.</div>';
135
+ return;
136
+ }
137
+ var caps = window.SZLHolo.capabilities();
138
+ document.getElementById("caps").textContent =
139
+ "renderer: " + caps.mode.toUpperCase() + (caps.webgpu ? " · WebGPU detected (ROADMAP)" : "");
140
+
141
+ // ---------------------------------------------------------------------------
142
+ // ONE scene: proof-DAG (signed-decision pipeline) + globe + trust-sphere +
143
+ // mesh/organism + constitutional pillars all in the same holographic canvas.
144
+ // ---------------------------------------------------------------------------
145
+ var scene = window.SZLHolo.createScene(stageEl, { title:"UNIFIED ESTATE HOLOGRAM", lambda:0.42 });
146
+
147
+ // PROOF-DAG: the signed-decision pipeline (centre-front).
148
+ var dagNodes = [
149
+ { id:"ingest", label:"INGEST", pos:[-1.7, 0.9, 0.2] },
150
+ { id:"verify", label:"VERIFY", pos:[-0.9, 0.5, 0.6], locked:true },
151
+ { id:"policy", label:"POLICY", pos:[-0.1, 0.8,-0.2], lambda:0.30 },
152
+ { id:"classify", label:"CLASSIFY", pos:[ 0.5,-0.1, 0.7], lambda:0.42 },
153
+ { id:"sign", label:"SIGN", pos:[ 1.3, 0.2,-0.2], locked:true },
154
+ { id:"receipt", label:"RECEIPT", pos:[ 1.9, 1.0, 0.4], lambda:0.25 }
155
+ ];
156
+ var dagEdges = [
157
+ { id:"d1", from:"ingest", to:"verify" },
158
+ { id:"d2", from:"verify", to:"policy" },
159
+ { id:"d3", from:"policy", to:"classify" },
160
+ { id:"d4", from:"classify", to:"sign" },
161
+ { id:"d5", from:"sign", to:"receipt" }
162
+ ];
163
+ var dag = scene.addGraph({ nodes: dagNodes, edges: dagEdges });
164
+
165
+ // GLOBE: the estate's surfaces as geo-nodes (SAMPLE positions, honest).
166
+ scene.addGlobe({ radius: 0.85, points: [
167
+ { lat: 25.3, lon: 55.3, label:"constitution", lambda:0.30 },
168
+ { lat: 1.3, lon:103.8, label:"quant", lambda:0.55 },
169
+ { lat: 51.5, lon: -0.12, label:"factory", lambda:0.40 },
170
+ { lat: 37.8, lon:-122.4, label:"globe-C2", lambda:0.45 },
171
+ { lat: -33.9,lon: 151.2, label:"maritime", lambda:0.50 }
172
+ ]});
173
+
174
+ // Λ TRUST-SPHERE (estate) — morphs with the LIVE estate Λ.
175
+ var estateSphere = scene.addTrustSphere({ center:[-1.6,-1.0,-0.3], radius:0.5, label:"ESTATE" });
176
+
177
+ // CONSTITUTIONAL ORGANISM (pillars ring, upper-right) + a QUANT fracture node.
178
+ var pillars = ["Ontology","Temporality","Legitimacy","Governance"];
179
+ pillars.forEach(function(p,i){
180
+ var a=(i/pillars.length)*Math.PI*2;
181
+ dag.nodes.push({ id:"pil"+i, label:p, pos:[ -0.2 + 0.6*Math.cos(a), 1.6, -1.0 + 0.6*Math.sin(a)], lambda:0.32 });
182
+ });
183
+ dag.nodes.push({ id:"fracture", label:"β1 TEARS", pos:[1.6,-1.0,0.8], lambda:0.7 });
184
+
185
+ scene.start();
186
+
187
+ // signed-pulse light-flows along the proof-DAG (the headline mechanic)
188
+ scene.signPulse("d2", { loop:true, duration:2200 });
189
+ scene.signPulse("d5", { loop:true, duration:1700 });
190
+
191
+ function getJSON(path){ return fetch(path).then(function(r){return r.ok?r.json():null;}).catch(function(){return null;}); }
192
+ function esc(s){return String(s==null?"":s).replace(/[&<>"]/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'})[c];});}
193
+
194
+ // light-flow on a SIGNED cross-surface decision: pulse the whole DAG in sequence
195
+ var seq = ["d1","d2","d3","d4","d5"];
196
+ function fireDecision(){
197
+ seq.forEach(function(e,i){
198
+ setTimeout(function(){ scene.signPulse(e,{duration:900,color:"#aef6ff"}); }, i*260);
199
+ });
200
+ addTapeRow();
201
+ }
202
+ var tapeRows = [];
203
+ function addTapeRow(){
204
+ var ts = new Date().toISOString().slice(11,19);
205
+ var id = "dsse-" + Math.random().toString(16).slice(2,8);
206
+ tapeRows.unshift('<div class="r"><span class="dot" style="background:var(--ok)"></span>'+ts+
207
+ ' · signed cross-surface decision <b>'+id+'</b> <span class="badge sample">SAMPLE</span></div>');
208
+ tapeRows = tapeRows.slice(0,8);
209
+ document.getElementById("tape").innerHTML = tapeRows.join("");
210
+ }
211
+ document.getElementById("signBtn").addEventListener("click", fireDecision);
212
+ var auto=null;
213
+ document.getElementById("autoBtn").addEventListener("click", function(){
214
+ if(auto){ clearInterval(auto); auto=null; this.textContent="▶ AUTO DECISION STREAM"; return; }
215
+ this.textContent="⏸ STOP STREAM"; auto=setInterval(fireDecision, 2600); fireDecision();
216
+ });
217
+
218
+ // ------- LIVE estate Λ + KPI board -------
219
+ getJSON("/api/a11oy/v1/ecosystem/kpi-board").then(function(kb){
220
+ if(!kb){ document.getElementById("lamPanel").textContent="KPI board unavailable."; return; }
221
+ var lam = kb.lambda || {};
222
+ var v = (typeof lam.value==="number") ? lam.value : 0.9;
223
+ var disp = Math.min(v, 0.999); // Λ < 1.0 always
224
+ scene.setLambda(disp); // drive the trust-sphere + global Λ
225
+ estateSphere.lambda = disp;
226
+ var col = window.SZLHolo.lambdaColor ? window.SZLHolo.lambdaColor(disp) : "#9af0cf";
227
+ var big = document.getElementById("lamBig");
228
+ big.textContent = "Λ " + disp.toFixed(3); big.style.color = col;
229
+ var locked = kb.locked8 || {};
230
+ document.getElementById("lamPanel").innerHTML =
231
+ '<div class="stat"><span>estate Λ</span><b style="color:'+col+'">'+disp.toFixed(3)+'</b></div>'+
232
+ '<div class="stat"><span>status</span><b>'+esc(lam.status||"Conjecture 1")+'</b></div>'+
233
+ '<div class="stat"><span>checks</span><b>'+esc(lam.checks_passing)+'/'+esc(lam.checks_total)+'</b></div>'+
234
+ '<div class="stat"><span>locked-proven</span><b>'+esc(locked.source_count||locked.display_count||8)+' @ '+esc(locked.kernel||"c7c0ba17")+'</b></div>'+
235
+ '<div class="mut" style="margin-top:6px">'+esc((lam.note||"").slice(0,90))+'…</div>';
236
+ document.getElementById("status").textContent =
237
+ "LIVE estate · Λ="+disp.toFixed(3)+" · locked "+(locked.source_count||8)+"/8 @ "+(locked.kernel||"c7c0ba17")+
238
+ " · as_of "+esc((kb.as_of||"").slice(0,19));
239
+ // trust axes
240
+ var ax = (lam.axes||[]);
241
+ document.getElementById("axes").innerHTML = ax.map(function(a){
242
+ var ac = window.SZLHolo.lambdaColor ? window.SZLHolo.lambdaColor(1-a.score) : "#9af0cf";
243
+ return '<div class="axis"><span>'+esc(a.name)+'</span><b style="color:'+ac+'">'+(+a.score).toFixed(2)+'</b></div>';
244
+ }).join("") || '<span class="mut">no axes</span>';
245
+ });
246
+
247
+ // ------- LIVE organism (mind + 6 organs) from engine/status -------
248
+ getJSON("/api/a11oy/v1/engine/status").then(function(es){
249
+ var el = document.getElementById("organism");
250
+ if(!es){ el.textContent="engine status unavailable."; return; }
251
+ var organs = es.organs || {};
252
+ var keys = Object.keys(organs);
253
+ var healthy = es.organs_healthy||0, total = es.organs_total||keys.length;
254
+ var mind = es.mind||{};
255
+ var rows = '<div class="stat"><span>mind sovereign</span><b style="color:'+(mind.sovereign?"var(--ok)":"var(--mut)")+'">'+
256
+ esc(String(mind.sovereign))+'</b></div>'+
257
+ '<div class="stat"><span>organs healthy</span><b>'+healthy+'/'+total+'</b></div>';
258
+ keys.forEach(function(k){
259
+ var o=organs[k]; var rc=o.reachable?"var(--ok)":"var(--mut)";
260
+ rows += '<div class="axis"><span><span class="dot" style="background:'+rc+'"></span>'+esc(k)+'</span><b>'+esc(o.status)+'</b></div>';
261
+ // add a mesh node per organ to the unified canvas (dim when unreachable)
262
+ var idx = keys.indexOf(k); var a=(idx/keys.length)*Math.PI*2;
263
+ dag.nodes.push({ id:"org_"+k, label:k.toUpperCase(), pos:[ -2.0 + 0.5*Math.cos(a), 0.2+0.4*Math.sin(a), -1.4 ],
264
+ lambda: o.reachable?0.35:0.85 });
265
+ });
266
+ el.innerHTML = rows;
267
+ document.getElementById("orgBadge").textContent = healthy+"/"+total+" live";
268
+ document.getElementById("orgBadge").className = "badge " + (healthy>0?"live":"sample");
269
+ });
270
+
271
+ // ------- LIVE per-surface signed receipts (quant pipeline + constitution ledger) -------
272
+ getJSON("/api/a11oy/v1/quant/pipeline").then(function(pp){
273
+ if(!pp) return;
274
+ var sr = (pp.signed_receipt && pp.signed_receipt.receipt) || {};
275
+ tapeRows.unshift('<div class="r"><span class="dot" style="background:var(--warn)"></span>'+
276
+ esc((sr.bar_timestamp||"").slice(11,19))+' · quant receipt <b>'+esc(sr.pipeline_version||"")+'</b> '+
277
+ '<span class="badge live">LIVE · '+esc(pp.label?pp.label.split("|")[0].trim():"SAMPLE_SIGNAL")+'</span></div>');
278
+ document.getElementById("tape").innerHTML = tapeRows.join("");
279
+ });
280
+ getJSON("/api/a11oy/v1/constitution/ledger").then(function(ld){
281
+ if(!ld) return;
282
+ tapeRows.unshift('<div class="r"><span class="dot" style="background:var(--accent)"></span>'+
283
+ 'causal ledger <b>'+esc(ld.count||0)+' events</b> <span class="badge live">LIVE · '+esc(ld.status||"ACTIVE")+'</span></div>');
284
+ document.getElementById("tape").innerHTML = tapeRows.join("");
285
+ });
286
+
287
+ window.__SZL_ESTATE_HOLO_READY = true;
288
+ })();
289
+ </script>
290
+ </body>
291
+ </html>
web/quant.html ADDED
@@ -0,0 +1,256 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <!-- SPDX-License-Identifier: Apache-2.0 © 2026 SZL Holdings
3
+ /quant — GPU-QUANT 3D PORTFOLIO LANDSCAPE (Lane F5).
4
+ A 3D portfolio landscape on the shared holographic kit (0 runtime CDN):
5
+ - PCA risk eigen-spectrum (Ledoit-Wolf shrinkage + Marchenko-Pastur edge)
6
+ rendered as a risk LANDSCAPE
7
+ - Betti FRACTURE TEARS: persistent-homology β1 cycles drawn as glowing
8
+ tear-rings; tear count + intensity track the live fracture score f_t / z
9
+ - HJB-Kelly REBALANCING animation: per-asset Kelly weights w* as signed bars
10
+ - ENERGY RECEIPT: the live signed pipeline receipt (DSSE-style)
11
+ Reads LIVE: /api/a11oy/v1/quant/{pca,tda,kelly,pipeline}.
12
+ HONEST: data is SAMPLE_SIGNAL | NOT_LIVE | NO_BACKTEST_VALIDATED — synthetic
13
+ SAMPLE universe, pure-Python CPU fallback; the cuML/cuPy/giotto-tda/Ripser++
14
+ GPU path is ROADMAP (flips to MEASURED only on a sovereign GPU). NOT live trading.
15
+ Citations: RAPIDS cuDF/cuML, giotto-tda, Ledoit-Wolf (2003), Gidea-Katz (2017).
16
+ DOCTRINE v11: 0 runtime CDN · Λ = Conjecture 1 (<1.0) · trust < 100% ·
17
+ 0 visible codenames · honest SAMPLE labels · never claims live trading or backtest. -->
18
+ <html lang="en">
19
+ <head>
20
+ <meta charset="utf-8">
21
+ <meta name="viewport" content="width=device-width,initial-scale=1">
22
+ <title>SZL · GPU-Quant Landscape</title>
23
+ <style>
24
+ :root{--bg:#03060d;--panel:#0a1326;--ink:#cfe6ff;--mut:#86a4c9;--line:rgba(120,170,230,.18);
25
+ --ok:#46d39a;--warn:#ffcf5c;--bad:#ff6b6b;--accent:#7fd4ff;}
26
+ *{box-sizing:border-box}
27
+ html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);
28
+ font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}
29
+ header{padding:14px 20px;border-bottom:1px solid var(--line);display:flex;
30
+ align-items:center;gap:14px;flex-wrap:wrap;}
31
+ header h1{font-size:15px;margin:0;letter-spacing:.06em;font-weight:600;}
32
+ header .sub{font-size:11px;color:var(--mut);}
33
+ .wrap{display:grid;grid-template-columns:1fr;gap:14px;padding:16px 20px;max-width:1280px;margin:0 auto;}
34
+ .stage{height:58vh;min-height:380px;border:1px solid var(--line);border-radius:14px;overflow:hidden;
35
+ box-shadow:0 0 60px rgba(40,90,160,.12) inset;}
36
+ .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
37
+ .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
38
+ .panel{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:rgba(10,19,38,.5);}
39
+ .panel h2{font-size:12px;margin:0 0 8px;letter-spacing:.06em;color:#bfe0ff;}
40
+ .btn{background:rgba(70,150,230,.16);border:1px solid rgba(120,180,240,.4);color:#cfe6ff;
41
+ border-radius:8px;padding:6px 12px;font:inherit;font-size:12px;cursor:pointer;}
42
+ .btn:hover{background:rgba(70,150,230,.3);}
43
+ .row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
44
+ .mut{color:var(--mut);font-size:11px;}
45
+ a{color:#7fd4ff;}
46
+ .badge{display:inline-block;padding:1px 7px;border-radius:6px;font-size:10px;font-weight:600;
47
+ background:rgba(255,180,90,.16);border:1px solid rgba(255,190,110,.4);color:#ffd9a8;}
48
+ .badge.no{background:rgba(255,107,107,.15);border-color:rgba(255,120,120,.4);color:#ffb3b3;}
49
+ .kbar{height:14px;margin:2px 0;border-radius:3px;position:relative;}
50
+ .big{font-size:22px;font-weight:700;}
51
+ pre{white-space:pre-wrap;word-break:break-word;font-size:10px;color:#9fc4ea;max-height:200px;overflow:auto;
52
+ background:rgba(3,8,18,.6);border:1px solid var(--line);border-radius:8px;padding:8px;}
53
+ .stat{display:flex;justify-content:space-between;font-size:11px;padding:2px 0;border-bottom:1px solid rgba(120,170,230,.08);}
54
+ @media(max-width:900px){.grid2,.grid3{grid-template-columns:1fr;}}
55
+ </style>
56
+ </head>
57
+ <body>
58
+ <header>
59
+ <h1>SZL · GPU-QUANT LANDSCAPE</h1>
60
+ <span class="sub">PCA risk · Betti fracture tears · HJB-Kelly · energy receipts · 0 runtime CDN</span>
61
+ <span id="caps" class="sub"></span>
62
+ </header>
63
+
64
+ <div class="wrap">
65
+ <div class="panel">
66
+ <h2>WHAT THIS IS <span id="lbl" class="badge no">SAMPLE_SIGNAL | NOT_LIVE | NO_BACKTEST_VALIDATED</span></h2>
67
+ <div class="mut">A 3D portfolio risk landscape. The risk surface is the PCA eigen-spectrum
68
+ (Ledoit-Wolf shrinkage + Marchenko-Pastur noise edge). The glowing <strong>tear-rings</strong> are
69
+ persistent-homology <strong>β1 cycles</strong> — topological "fractures" in the correlation network;
70
+ their count and intensity track the live fracture score <code>f_t</code> and its z-score.
71
+ The bars are <strong>HJB-Kelly</strong> rebalancing weights. All data is a
72
+ <strong>synthetic SAMPLE</strong> universe on a pure-Python CPU fallback — the cuML/cuPy/giotto-tda
73
+ GPU path is <strong>ROADMAP</strong>. This is <strong>NOT live trading</strong> and is
74
+ <strong>NOT backtest-validated</strong>. Λ = Conjecture 1 (&lt; 1.0); trust &lt; 100%.</div>
75
+ </div>
76
+
77
+ <div id="stage" class="stage"></div>
78
+
79
+ <div class="panel">
80
+ <div class="row">
81
+ <button class="btn" id="rebalBtn">▶ HJB-KELLY REBALANCE</button>
82
+ <button class="btn" id="fractureBtn">SIMULATE FRACTURE (illustrative)</button>
83
+ <span id="fstatus" class="mut">loading live quant signal…</span>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="grid3">
88
+ <div class="panel">
89
+ <h2>PCA RISK <span class="badge">Ledoit-Wolf · MP</span></h2>
90
+ <div id="pca" class="mut">…</div>
91
+ </div>
92
+ <div class="panel">
93
+ <h2>TDA FRACTURE <span class="badge">β0/β1 persistence</span></h2>
94
+ <div id="tda" class="mut">…</div>
95
+ </div>
96
+ <div class="panel">
97
+ <h2>HJB-KELLY <span class="badge">w* sizing</span></h2>
98
+ <div id="kelly"></div>
99
+ </div>
100
+ </div>
101
+
102
+ <div class="grid2">
103
+ <div class="panel">
104
+ <h2>ENERGY / SIGNED RECEIPT <span class="badge">DSSE-style</span></h2>
105
+ <div id="receiptMeta" class="mut" style="margin-bottom:6px"></div>
106
+ <pre id="receipt">…</pre>
107
+ </div>
108
+ <div class="panel">
109
+ <h2>COMPUTE BACKEND <span id="gpuBadge" class="badge">CPU fallback</span></h2>
110
+ <div id="backend" class="mut">…</div>
111
+ </div>
112
+ </div>
113
+
114
+ <div class="panel mut">
115
+ Build references (no runtime calls): RAPIDS cuDF/cuML
116
+ (<a href="https://docs.rapids.ai">docs.rapids.ai</a>),
117
+ giotto-tda (<a href="https://github.com/giotto-ai/giotto-tda">giotto-ai/giotto-tda</a>),
118
+ Ledoit &amp; Wolf (2003) shrinkage covariance, Gidea &amp; Katz (2017) TDA of crashes (arXiv:1703.04385),
119
+ Marchenko-Pastur noise edge. β1 here is the 1-skeleton cycle rank (honest fast proxy);
120
+ the exact Vietoris-Rips H1 is the GPU ROADMAP path.
121
+ </div>
122
+ </div>
123
+
124
+ <script src="/static/shared/szl_label_engine.js"></script>
125
+ <script src="/static/shared/szl_holo3d.js"></script>
126
+ <script>
127
+ (function () {
128
+ var API = "/api/a11oy/v1/quant/";
129
+ var stageEl = document.getElementById("stage");
130
+ if (!window.SZLHolo) {
131
+ stageEl.innerHTML = '<div style="padding:20px;color:#ffd9a8">SZLHolo kit failed to load.</div>';
132
+ return;
133
+ }
134
+ var caps = window.SZLHolo.capabilities();
135
+ document.getElementById("caps").textContent =
136
+ "renderer: " + caps.mode.toUpperCase() + (caps.webgpu ? " · WebGPU detected (ROADMAP)" : "");
137
+
138
+ // 3D landscape scene: a grid of asset nodes whose height = PCA loading; tear-rings = β1 cycles.
139
+ var scene = window.SZLHolo.createScene(stageEl, { title:"PORTFOLIO RISK LANDSCAPE · SAMPLE", lambda:0.45 });
140
+ var landscape = scene.addGraph({ nodes:[{id:"o",label:"PORTFOLIO",pos:[0,0,0]}], edges:[] });
141
+ scene.start();
142
+ var tearHandles = [];
143
+
144
+ function getJSON(path){ return fetch(API+path).then(function(r){return r.ok?r.json():null;}).catch(function(){return null;}); }
145
+ function esc(s){return String(s==null?"":s).replace(/[&<>"]/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'})[c];});}
146
+ function lamColor(l){ return window.SZLHolo.lambdaColor ? window.SZLHolo.lambdaColor(l) : "#7fd4ff"; }
147
+
148
+ // ---- PCA: build the risk landscape from eigenvalues ----
149
+ getJSON("pca").then(function(pc){
150
+ var el = document.getElementById("pca");
151
+ if(!pc){ el.textContent="pca feed unavailable."; return; }
152
+ var eig = (pc.marchenko_pastur && pc.marchenko_pastur.eigenvalues) || [];
153
+ var maxe = Math.max.apply(null, eig.concat([1e-9]));
154
+ // place each asset on a ring; height (y) = normalized eigenvalue (the risk peak)
155
+ eig.forEach(function(e,i){
156
+ var a=(i/eig.length)*Math.PI*2; var r=1.3;
157
+ var h = 0.9*(e/maxe);
158
+ landscape.nodes.push({ id:"a"+i, label:"", pos:[r*Math.cos(a), h, r*Math.sin(a)],
159
+ lambda: 0.25 + 0.6*(e/maxe) });
160
+ });
161
+ el.innerHTML =
162
+ '<div class="stat"><span>assets N</span><b>'+esc(pc.n_assets)+'</b></div>'+
163
+ '<div class="stat"><span>obs T</span><b>'+esc(pc.n_obs)+'</b></div>'+
164
+ '<div class="stat"><span>shrinkage ρ</span><b>'+esc((+pc.shrinkage_rho).toFixed(4))+'</b></div>'+
165
+ '<div class="stat"><span>MP λ⁺ (noise edge)</span><b>'+esc((+pc.marchenko_pastur.lambda_plus).toExponential(3))+'</b></div>'+
166
+ '<div class="stat"><span>signal eigenvalues</span><b>'+esc(pc.marchenko_pastur.signal_eigenvalues)+'</b></div>'+
167
+ '<div class="mut" style="margin-top:6px">Σ̂_LW = (1−ρ)Σ̂ + ρ·μI · λ± = σ²(1±1/√q)²</div>';
168
+ });
169
+
170
+ // ---- TDA fracture tears: draw β1 cycles as glowing tear-rings ----
171
+ function drawTears(beta1, fscore){
172
+ // remove old tear nodes
173
+ landscape.nodes = landscape.nodes.filter(function(n){ return String(n.id).indexOf("tear")!==0; });
174
+ var n = Math.min(beta1, 14); // cap for legibility
175
+ for(var i=0;i<n;i++){
176
+ var a=(i/Math.max(1,n))*Math.PI*2;
177
+ var rr = 1.7 + 0.25*Math.sin(i*1.3);
178
+ // a tear-ring is a small cluster of red points (a topological hole / fracture)
179
+ var lam = 0.65 + 0.3*Math.min(1, fscore/3 + 0.1);
180
+ landscape.nodes.push({ id:"tear"+i, label:(i===0?"β1 TEARS":""),
181
+ pos:[rr*Math.cos(a), 1.2+0.2*Math.cos(i), rr*Math.sin(a)], lambda: lam });
182
+ }
183
+ }
184
+ getJSON("tda").then(function(td){
185
+ var el = document.getElementById("tda");
186
+ if(!td){ el.textContent="tda feed unavailable."; return; }
187
+ drawTears(td.beta1_cur||0, td.fracture_score_f_t||0);
188
+ var anomCol = td.anomaly ? "var(--bad)" : "var(--ok)";
189
+ el.innerHTML =
190
+ '<div class="stat"><span>β0 (components)</span><b>'+esc(td.beta0_cur)+'</b></div>'+
191
+ '<div class="stat"><span>β1 (cycles / tears)</span><b style="color:var(--warn)">'+esc(td.beta1_cur)+'</b></div>'+
192
+ '<div class="stat"><span>fracture f_t</span><b>'+esc((+td.fracture_score_f_t).toFixed(3))+'</b></div>'+
193
+ '<div class="stat"><span>z-score</span><b>'+esc((+td.z_score).toFixed(3))+' / thr '+esc(td.z_threshold)+'</b></div>'+
194
+ '<div class="stat"><span>anomaly</span><b style="color:'+anomCol+'">'+(td.anomaly?"YES":"no")+'</b></div>'+
195
+ '<div class="mut" style="margin-top:6px">f_t = |Δβ0|+|Δβ1| · |z|&gt;2.5 ⇒ anomaly. β1 tear-rings shown in 3D.</div>';
196
+ document.getElementById("fstatus").textContent =
197
+ "LIVE quant signal · β1="+td.beta1_cur+" tears · f_t="+(+td.fracture_score_f_t).toFixed(2)+" · "+esc(td.label);
198
+ window.__SZL_TDA = td;
199
+ });
200
+
201
+ // ---- HJB-Kelly weights as signed rebalancing bars ----
202
+ var kellyW = [];
203
+ getJSON("kelly").then(function(kl){
204
+ var el = document.getElementById("kelly");
205
+ if(!kl){ el.textContent="kelly feed unavailable."; return; }
206
+ kellyW = kl.kelly_weights_w_star || [];
207
+ var maxw = Math.max.apply(null, kellyW.map(Math.abs).concat([1e-9]));
208
+ el.innerHTML = '<div class="mut" style="margin-bottom:4px">gross exposure '+esc((+kl.kelly_gross_exposure).toFixed(2))+
209
+ ' · γ='+esc(kl.gamma)+' · σ-inflation '+esc(kl.sigma_eff_inflation)+'</div>' +
210
+ kellyW.map(function(w,i){
211
+ var pct = Math.abs(w)/maxw*100;
212
+ var col = w>=0 ? "linear-gradient(90deg,rgba(70,211,154,.25),rgba(70,211,154,.6))"
213
+ : "linear-gradient(90deg,rgba(255,107,107,.25),rgba(255,107,107,.6))";
214
+ return '<div class="kbar" data-i="'+i+'" style="width:'+pct.toFixed(0)+'%;background:'+col+'"></div>';
215
+ }).join("");
216
+ el.innerHTML += '<div class="mut" style="margin-top:6px">w* = (μ−r)/σ² (TDA-augmented variance). Long = green, short = red.</div>';
217
+ });
218
+ document.getElementById("rebalBtn").addEventListener("click", function(){
219
+ // animate bars rebalancing toward Kelly target (illustrative)
220
+ var bars = document.querySelectorAll(".kbar");
221
+ bars.forEach(function(b){
222
+ b.style.transition="width .6s ease"; var cur=parseFloat(b.style.width)||0;
223
+ b.style.width = Math.max(4, Math.min(100, cur*(0.6+Math.random()*0.8))).toFixed(0)+"%";
224
+ });
225
+ // pulse the landscape to show capital re-flow
226
+ if(landscape.nodes.length>2){ scene.signPulse(0,{duration:1000,color:"#aef6ff"}); }
227
+ });
228
+ document.getElementById("fractureBtn").addEventListener("click", function(){
229
+ var td = window.__SZL_TDA || {beta1_cur:23, fracture_score_f_t:0};
230
+ drawTears((td.beta1_cur||10)+8, (td.fracture_score_f_t||0)+2.5); // illustrative spike
231
+ });
232
+
233
+ // ---- signed energy receipt from the pipeline ----
234
+ getJSON("pipeline").then(function(pp){
235
+ if(!pp){ document.getElementById("receipt").textContent="pipeline feed unavailable."; return; }
236
+ document.getElementById("lbl").textContent = pp.label || "SAMPLE_SIGNAL | NOT_LIVE | NO_BACKTEST_VALIDATED";
237
+ var sr = (pp.signed_receipt && pp.signed_receipt.receipt) || pp.signed_receipt || {};
238
+ document.getElementById("receiptMeta").innerHTML =
239
+ 'pipeline <b>'+esc(sr.pipeline_version||"")+'</b> · device <b>'+esc(sr.gpu_device||"")+'</b> · '+
240
+ 'scenario <b>'+esc(sr.scenario||pp.scenario||"")+'</b> · computed '+esc((pp.computed_at||"").slice(0,19));
241
+ document.getElementById("receipt").textContent = JSON.stringify(sr, null, 1);
242
+ var cb = pp.compute_backend || {};
243
+ document.getElementById("gpuBadge").textContent = cb.gpu_reachable ? "GPU MEASURED" : "CPU fallback (GPU ROADMAP)";
244
+ document.getElementById("backend").innerHTML =
245
+ '<div class="stat"><span>backend</span><b>'+esc(cb.backend)+'</b></div>'+
246
+ '<div class="stat"><span>gpu reachable</span><b>'+esc(String(cb.gpu_reachable))+'</b></div>'+
247
+ '<div class="stat"><span>doctrine</span><b>'+esc((pp.doctrine||{}).version)+' · locked '+esc((pp.doctrine||{}).locked_count)+'</b></div>'+
248
+ '<div class="stat"><span>kernel</span><b>'+esc((pp.doctrine||{}).kernel_commit)+'</b></div>'+
249
+ '<div class="mut" style="margin-top:6px">'+esc((cb.honest_note||"").slice(0,160))+'…</div>';
250
+ });
251
+
252
+ window.__SZL_QUANT_READY = true;
253
+ })();
254
+ </script>
255
+ </body>
256
+ </html>