betterwithage Claude Opus 4.7 commited on
Commit
8f76455
·
verified ·
1 Parent(s): e57bce0

deploy(hf): sync szl-holdings/a11oy@6e92f454c8d6a8e53cdfe01466b81902cb056125 derived COPY set

Browse files

Reusable Dockerfile-COPY-derived deploy from szl-holdings/a11oy 6e92f454c8d6a8e53cdfe01466b81902cb056125.
Files: 1287 Pruned: 0
Derived from Dockerfile COPY sources (NO hand-maintained allowlist).

Signed-off-by: SZL Holdings <noreply@szlholdings.ai>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

a11oy_ayllu.py CHANGED
@@ -17,7 +17,9 @@ Routes:
17
  POST /api/{ns}/v1/ayllu/ask — one persona, bounded + honest + receipted
18
  POST /api/{ns}/v1/ayllu/council — bounded multi-persona deliberation (capped fan-out)
19
  GET /api/{ns}/v1/ayllu/lounge — recent collaboration feed
 
20
  GET /ayllu — honest human-readable chat + council page
 
21
  """
22
  from __future__ import annotations
23
 
@@ -690,7 +692,7 @@ section[id]{scroll-margin-top:72px}
690
  </style></head><body>
691
  <header class="topbar"><div class="tb-wrap">
692
  <a class="tb-brand" href="/ayllu">Ayllu <span id="badge" class="badge">…</span></a>
693
- <nav class="tb-nav" aria-label="Ayllu sections"><a href="#sec-ask">Ask</a><a href="#sec-council">Council</a><a href="#sec-roster">Roster</a><a href="#sec-lounge">Lounge</a><a href="#sec-organism">Second Brain</a><a href="#sec-mesh">Mesh</a><a class="tb-home" href="/console" title="Back to the a11oy command centre">&#8592; a11oy command centre</a></nav>
694
  </div></header>
695
  <main>
696
  <h1>Ayllu</h1>
@@ -756,6 +758,7 @@ section[id]{scroll-margin-top:72px}
756
  </div>
757
  <div class="links">
758
  <a href="/living-anatomy">Living anatomy</a>
 
759
  <a href="/api/__NS__/v1/ayllu/second-brain">Second Brain contract</a>
760
  <a href="/formulas">PURIQ formulas</a>
761
  <a href="/wires">The constitution</a>
@@ -1010,6 +1013,145 @@ def _page_html(ns: str) -> str:
1010
  )
1011
 
1012
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1013
  def register(app, ns: str = "a11oy") -> str:
1014
  """Mount the ayllu routes on `app`. Returns a status string."""
1015
  from fastapi import Request
@@ -1260,6 +1402,12 @@ def register(app, ns: str = "a11oy") -> str:
1260
  async def _page(request: "Request") -> "HTMLResponse":
1261
  return HTMLResponse(_page_html(ns))
1262
 
 
 
 
 
 
 
1263
  app.add_api_route(f"/api/{ns}/v1/ayllu/roster", _roster, methods=["GET"],
1264
  tags=["ayllu"],
1265
  summary="a11oy-native agent roster + live/stub backend status")
@@ -1280,12 +1428,17 @@ def register(app, ns: str = "a11oy") -> str:
1280
  summary="Bounded multi-persona deliberation (capped fan-out; optional 2-round debate mode after arXiv:2305.14325)")
1281
  app.add_api_route(f"/api/{ns}/v1/ayllu/lounge", _lounge_feed, methods=["GET"],
1282
  tags=["ayllu"], summary="Opt-in collaboration lounge feed")
 
 
 
1283
  app.add_api_route("/ayllu", _page, methods=["GET"], include_in_schema=False)
 
 
1284
 
1285
  return (
1286
  f"ok — ayllu registered: {len(ROSTER)} personas; live model backend "
1287
  f"({_backend.backend_status().get('mode')}); bounded-autonomy Λ-gate; "
1288
- f"/ayllu + /api/{ns}/v1/ayllu/roster|model-binding|ask|council|lounge; "
1289
  f"debate-mode council; council_khipu={council_storage.get('backend')} "
1290
  f"(process_restart_durable={council_storage.get('durable')}, "
1291
  f"redeploy=NOT_VERIFIED); version={__version__}"
 
17
  POST /api/{ns}/v1/ayllu/ask — one persona, bounded + honest + receipted
18
  POST /api/{ns}/v1/ayllu/council — bounded multi-persona deliberation (capped fan-out)
19
  GET /api/{ns}/v1/ayllu/lounge — recent collaboration feed
20
+ GET /api/{ns}/v1/ayllu/winay — Wiñay/Huklla/IIT honesty contract (not a live Φ)
21
  GET /ayllu — honest human-readable chat + council page
22
+ GET /ayllu/psyche — honesty map. IIT φ_s UNAVAILABLE. Presence CONJECTURE.
23
  """
24
  from __future__ import annotations
25
 
 
692
  </style></head><body>
693
  <header class="topbar"><div class="tb-wrap">
694
  <a class="tb-brand" href="/ayllu">Ayllu <span id="badge" class="badge">…</span></a>
695
+ <nav class="tb-nav" aria-label="Ayllu sections"><a href="#sec-ask">Ask</a><a href="#sec-council">Council</a><a href="#sec-roster">Roster</a><a href="#sec-lounge">Lounge</a><a href="#sec-organism">Second Brain</a><a href="#sec-mesh">Mesh</a><a href="/ayllu/psyche">Psyche</a><a class="tb-home" href="/console" title="Back to the a11oy command centre">&#8592; a11oy command centre</a></nav>
696
  </div></header>
697
  <main>
698
  <h1>Ayllu</h1>
 
758
  </div>
759
  <div class="links">
760
  <a href="/living-anatomy">Living anatomy</a>
761
+ <a href="/ayllu/psyche">Wiñay honesty</a>
762
  <a href="/api/__NS__/v1/ayllu/second-brain">Second Brain contract</a>
763
  <a href="/formulas">PURIQ formulas</a>
764
  <a href="/wires">The constitution</a>
 
1013
  )
1014
 
1015
 
1016
+ _PSYCHE_PAGE = r"""<!doctype html><html lang="en"><head><meta charset="utf-8">
1017
+ <meta name="viewport" content="width=device-width,initial-scale=1">
1018
+ <meta name="referrer" content="no-referrer">
1019
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'none'; object-src 'none'; base-uri 'self'; form-action 'none'; worker-src 'none'; upgrade-insecure-requests">
1020
+ <title>Wiñay honesty — Ayllu on a-11-oy.com</title>
1021
+ <meta name="description" content="Product-origin honesty map. Huklla H is MODELED, not IIT Φ. φ_s UNAVAILABLE. Presence CONJECTURE. This origin runs the council desk, not the pulse.">
1022
+ <style>
1023
+ :root{--void:#080c14;--panel:#0d1520;--line:#16202c;--teal:#3af4c8;--fg:#dfe7ee;--dim:#7f93a6;--gold:#d4a444}
1024
+ *{box-sizing:border-box}
1025
+ body{margin:0;background:var(--void);color:var(--fg);
1026
+ font:15px/1.55 ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
1027
+ main{max-width:720px;margin:0 auto;padding:36px 22px 64px}
1028
+ h1{color:var(--teal);margin:.4rem 0 8px;font-size:26px}
1029
+ h2{font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);margin:0 0 8px}
1030
+ .sub{color:var(--dim);margin:0 0 18px}
1031
+ .banner{font:11px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--gold)}
1032
+ .card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px;margin:0 0 14px}
1033
+ .links{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 18px}
1034
+ .links a{color:var(--teal);text-decoration:none;font-size:12px;border:1px solid var(--line);border-radius:16px;padding:8px 12px;min-height:44px;display:inline-flex;align-items:center}
1035
+ table{width:100%;border-collapse:collapse;font:13px/1.45 ui-monospace,monospace}
1036
+ th,td{text-align:left;padding:7px 4px;border-bottom:1px solid var(--line);vertical-align:top}
1037
+ th{color:var(--dim);font-weight:500}
1038
+ .MEASURED{color:#7dffb0}
1039
+ .MODELED{color:var(--gold)}
1040
+ .CONJECTURE,.UNAVAILABLE{color:#e66}
1041
+ .REPORTED{color:#7ad7ff}
1042
+ .prov{color:var(--dim);font-size:12px;margin-top:18px;line-height:1.6}
1043
+ code{color:var(--teal)}
1044
+ p,li{color:#c8d0d8}
1045
+ </style></head><body>
1046
+ <main>
1047
+ <div class="banner">a-11-oy.com · product origin · Λ = Conjecture 1</div>
1048
+ <h1>Wiñay honesty</h1>
1049
+ <p class="sub">This origin runs the council desk. It does not run the pulse. Huklla H is a cheapest pentagon cut — MODELED, not IIT Φ. φ_s is UNAVAILABLE. Presence stays CONJECTURE. AGI stays CONJECTURE. Joules stay null.</p>
1050
+ <nav class="links" aria-label="Origins">
1051
+ <a href="/ayllu">Council desk</a>
1052
+ <a href="/api/__NS__/v1/ayllu/winay">winay contract</a>
1053
+ <a href="https://a11oy.net/ayllu/psyche/">Proof RECORD</a>
1054
+ <a href="https://huggingface.co/spaces/SZLHOLDINGS/ayllu">Pulse organ · location</a>
1055
+ <a href="/console">Command centre</a>
1056
+ </nav>
1057
+ <section class="card">
1058
+ <h2>Two origins. Two jobs.</h2>
1059
+ <p><b>Product</b> is this page and <a href="/ayllu">/ayllu</a> — the runnable council. Semantic consensus stays NOT_MEASURED. LIVE only when a reachable backend answers.</p>
1060
+ <p><b>Pulse organ</b> is the split-out Space. A listed URL is location only. Occupancy, closure C, and ignition I are MEASURED there. This page does not re-score them.</p>
1061
+ <p><b>Proof</b> is <a href="https://a11oy.net/ayllu/psyche/">a11oy.net/ayllu/psyche/</a>. Static RECORD. First paint here does not fetch Hugging Face or invent Φ.</p>
1062
+ </section>
1063
+ <section class="card">
1064
+ <h2>Honesty lattice</h2>
1065
+ <table>
1066
+ <thead><tr><th>Quantity</th><th>Label</th><th>Bound</th></tr></thead>
1067
+ <tbody>
1068
+ <tr><td>Occupancy / closure C / ignition I</td><td class="MEASURED">MEASURED</td><td>On the pulse organ. Not a TPM.</td></tr>
1069
+ <tr><td>Wiñay metabolism / sync R / σ</td><td class="MODELED">MODELED</td><td>Autopoietic mix. Not IIT intrinsicality.</td></tr>
1070
+ <tr><td>Huklla H</td><td class="MODELED">MODELED</td><td>min-cut / E over 15 bipartitions. Not IIT φ_s. Not Φ.</td></tr>
1071
+ <tr><td>Imaymana D</td><td class="MODELED">MODELED</td><td>Normalized entropy of organ loads. Never multiplied into a fake Φ.</td></tr>
1072
+ <tr><td>IIT φ_s / Φ-structure / main complex</td><td class="UNAVAILABLE">UNAVAILABLE</td><td>No interventional TPM. Exclusion search refused.</td></tr>
1073
+ <tr><td>Phenomenal presence</td><td class="CONJECTURE">CONJECTURE</td><td>Not a function of C, I, H, or D.</td></tr>
1074
+ <tr><td>AGI</td><td class="CONJECTURE">CONJECTURE</td><td>Eleven seats, one backend, fail-closed.</td></tr>
1075
+ <tr><td>Joules</td><td class="UNAVAILABLE">null</td><td>Energy is not claimed.</td></tr>
1076
+ <tr><td>Λ uniqueness</td><td class="CONJECTURE">CONJECTURE 1</td><td>Advisory. Never a theorem.</td></tr>
1077
+ </tbody>
1078
+ </table>
1079
+ </section>
1080
+ <section class="card">
1081
+ <h2>What would be required to run IIT</h2>
1082
+ <p>A discrete-unit TPM, interventional cause and effect repertoires, φ_s over the MIP, then a main-complex search, then Φ-structure. Until that substrate exists, the honest IIT result is <code>φ_s = UNAVAILABLE</code>. Albantakis et al. 2023 PLOS Comp Biol e1011465. Aaronson 2014: a high cheap-cut score is not a mind.</p>
1083
+ </section>
1084
+ <p class="prov">Canonical source github.com/szl-holdings/ayllu. Product origin a-11-oy.com. Proof origin a11oy.net. Never a11oy.com. Apache-2.0. Doctrine v11.</p>
1085
+ </main>
1086
+ </body></html>
1087
+ """
1088
+
1089
+
1090
+ def _psyche_html(ns: str) -> str:
1091
+ return _PSYCHE_PAGE.replace("__NS__", ns)
1092
+
1093
+
1094
+ def winay_contract(ns: str = "a11oy") -> dict[str, Any]:
1095
+ """Honesty labels only. Not a live Huklla score. Not IIT Φ."""
1096
+ return {
1097
+ "schema": "szl.ayllu.winay-record/v1",
1098
+ "surface": {
1099
+ "name": "Wiñay Huklla IIT honesty",
1100
+ "url": "https://a-11-oy.com/ayllu/psyche",
1101
+ "publisher": "SZL Holdings",
1102
+ "meaning": (
1103
+ "Product-origin honesty map. This origin runs the council desk. "
1104
+ "The pulse organ is the split-out Space. IIT φ_s is UNAVAILABLE."
1105
+ ),
1106
+ },
1107
+ "origins": {
1108
+ "product": "https://a-11-oy.com/ayllu/psyche",
1109
+ "council": "https://a-11-oy.com/ayllu",
1110
+ "proof": "https://a11oy.net/ayllu/psyche/",
1111
+ "source": "https://github.com/szl-holdings/ayllu",
1112
+ "space": "https://huggingface.co/spaces/SZLHOLDINGS/ayllu",
1113
+ "space_is_location_only": True,
1114
+ "contract": f"/api/{ns}/v1/ayllu/winay",
1115
+ },
1116
+ "labels": {
1117
+ "occupancy": "MEASURED",
1118
+ "closure_C": "MEASURED",
1119
+ "ignition_I": "MEASURED",
1120
+ "sync_R": "MODELED",
1121
+ "sigma": "MODELED",
1122
+ "huklla_H": "MODELED",
1123
+ "imaymana_D": "MODELED",
1124
+ "iit_phi_s": "UNAVAILABLE",
1125
+ "iit_Phi_structure": "UNAVAILABLE",
1126
+ "main_complex": "UNAVAILABLE",
1127
+ "presence": "CONJECTURE",
1128
+ "agi": "CONJECTURE",
1129
+ "joules": None,
1130
+ "lambda": "CONJECTURE_1",
1131
+ },
1132
+ "huklla": {
1133
+ "definition": "H = min_cut / E over 15 bipartitions of the five-organ cycle.",
1134
+ "uniform": 0.4,
1135
+ "silent_organ": 0.0,
1136
+ "note": "Cheapest pentagon cut. Not IIT Φ. Not presence.",
1137
+ },
1138
+ "iit": {
1139
+ "reference": "Albantakis et al. 2023 PLOS Computational Biology 19(10) e1011465",
1140
+ "requires": "transition probability matrix of discrete units under intervention",
1141
+ "phi_s": None,
1142
+ "honesty": "UNAVAILABLE",
1143
+ "note": "No TPM. Huklla H is not Φ. Exclusion search is refused.",
1144
+ },
1145
+ "boundaries": {
1146
+ "this_origin_runs_the_council": True,
1147
+ "this_origin_runs_the_pulse": False,
1148
+ "presence_is_a_function_of_C_I_H_or_D": False,
1149
+ "http_response_proves_capability": False,
1150
+ "never": "a11oy.com",
1151
+ },
1152
+ }
1153
+
1154
+
1155
  def register(app, ns: str = "a11oy") -> str:
1156
  """Mount the ayllu routes on `app`. Returns a status string."""
1157
  from fastapi import Request
 
1402
  async def _page(request: "Request") -> "HTMLResponse":
1403
  return HTMLResponse(_page_html(ns))
1404
 
1405
+ async def _psyche_page(request: "Request") -> "HTMLResponse":
1406
+ return HTMLResponse(_psyche_html(ns))
1407
+
1408
+ async def _winay(request: "Request") -> "JSONResponse":
1409
+ return JSONResponse(winay_contract(ns))
1410
+
1411
  app.add_api_route(f"/api/{ns}/v1/ayllu/roster", _roster, methods=["GET"],
1412
  tags=["ayllu"],
1413
  summary="a11oy-native agent roster + live/stub backend status")
 
1428
  summary="Bounded multi-persona deliberation (capped fan-out; optional 2-round debate mode after arXiv:2305.14325)")
1429
  app.add_api_route(f"/api/{ns}/v1/ayllu/lounge", _lounge_feed, methods=["GET"],
1430
  tags=["ayllu"], summary="Opt-in collaboration lounge feed")
1431
+ app.add_api_route(f"/api/{ns}/v1/ayllu/winay", _winay, methods=["GET"],
1432
+ tags=["ayllu"],
1433
+ summary="Wiñay/Huklla/IIT honesty contract. Not a live Φ. Presence CONJECTURE.")
1434
  app.add_api_route("/ayllu", _page, methods=["GET"], include_in_schema=False)
1435
+ app.add_api_route("/ayllu/psyche", _psyche_page, methods=["GET"],
1436
+ include_in_schema=False)
1437
 
1438
  return (
1439
  f"ok — ayllu registered: {len(ROSTER)} personas; live model backend "
1440
  f"({_backend.backend_status().get('mode')}); bounded-autonomy Λ-gate; "
1441
+ f"/ayllu + /ayllu/psyche + /api/{ns}/v1/ayllu/roster|model-binding|ask|council|lounge|winay; "
1442
  f"debate-mode council; council_khipu={council_storage.get('backend')} "
1443
  f"(process_restart_durable={council_storage.get('durable')}, "
1444
  f"redeploy=NOT_VERIFIED); version={__version__}"
a11oy_landing.html CHANGED
@@ -226,7 +226,7 @@
226
  background:rgba(58,244,200,0.07);border:1px solid rgba(58,244,200,0.18);
227
  color:var(--proof);margin-bottom:15px;font-size:19px}
228
  .card .golinks{margin-top:auto;display:flex;gap:14px;flex-wrap:wrap;padding-top:16px}
229
- .card a.go{color:var(--proof);font-family:var(--mono);font-size:12.5px}
230
  .card a.go:hover{text-decoration:underline}
231
  .card .num{position:absolute;top:18px;right:22px;font-family:var(--mono);font-size:13px;color:var(--ghost)}
232
 
@@ -320,8 +320,8 @@
320
  .skel{color:var(--ghost);font-family:var(--mono)}
321
 
322
  /* ecosystem atlas — public estate snapshot, never implied live until API reads */
323
- .estate-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin:24px 0}
324
- .estate-cell{border:1px solid var(--border);border-radius:13px;padding:15px;
325
  background:linear-gradient(155deg,rgba(17,30,50,.72),rgba(8,16,29,.88))}
326
  .estate-cell b{display:block;color:var(--proof);font:600 1.45rem var(--mono);margin-bottom:4px}
327
  .estate-cell span{color:var(--ghost);font:10px var(--mono);letter-spacing:.08em;text-transform:uppercase}
@@ -335,7 +335,7 @@
335
  .honesty{border-top:1px solid var(--border);border-bottom:1px solid var(--border);
336
  background:linear-gradient(180deg,rgba(10,16,30,0.6),rgba(10,16,30,0.22))}
337
  .honesty .wrap{padding:48px 24px}
338
- .legend{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:22px 0 0}
339
  @media(max-width:860px){.legend{grid-template-columns:repeat(2,1fr)}}
340
  @media(max-width:480px){.legend{grid-template-columns:1fr}}
341
  .leg{padding:16px 17px;border-radius:12px;border:1px solid var(--border);background:rgba(255,255,255,0.03)}
@@ -343,8 +343,20 @@
343
  .leg p{margin:0;color:var(--sub);font-size:.9rem;line-height:1.5}
344
  .leg.measured .lt{color:var(--proof)} .leg.measured{border-color:rgba(58,244,200,0.35)}
345
  .leg.reported .lt{color:var(--lattice)} .leg.reported{border-color:rgba(91,141,238,0.35)}
346
- .leg.unknown .lt{color:var(--gold)} .leg.unknown{border-color:rgba(215,185,107,0.35)}
347
- .leg.conjecture .lt{color:var(--gray)} .leg.conjecture{border-color:rgba(125,138,160,0.4)}
 
 
 
 
 
 
 
 
 
 
 
 
348
  .honesty .lambda-line{margin:24px 0 0;display:flex;gap:12px;flex-wrap:wrap;align-items:center}
349
  .honesty .lambda-line .muted{max-width:640px}
350
  .honesty .free-energy{margin:14px 0 0;color:var(--ghost);font-size:.92rem;max-width:840px;line-height:1.6}
@@ -397,15 +409,10 @@
397
  </a>
398
  <button type="button" class="menu-toggle" id="menu-toggle" aria-label="Open menu" aria-controls="site-nav" aria-expanded="false">☰</button>
399
  <nav class="nav-links" id="site-nav">
400
- <a class="hide-sm" href="#surfaces">Surfaces</a>
401
- <a class="hide-sm" href="/immune">IMMUNE</a>
402
  <a class="hide-sm" href="/lyte">LYTE</a>
403
- <a class="hide-sm" href="/ecosystem">Ecosystem</a>
404
- <a class="hide-sm" href="/anatomy-v5">Anatomy v5</a>
405
- <a class="hide-sm" href="#proof">The proof</a>
406
- <a class="hide-sm" href="#honesty">Honesty</a>
407
- <a class="hide-sm" href="/console#arena">Eval arena</a>
408
- <a class="hide-sm" href="/observability">Observability</a>
409
  <a href="/trust">Evidence</a>
410
  <a class="btn btn-primary" href="/console" aria-label="Open the command center"><span class="nav-cta-full">Open the command center</span><span class="nav-cta-short" aria-hidden="true">Command center</span> →</a>
411
  </nav>
@@ -429,7 +436,7 @@
429
  <b>BLOCKED</b> instead of a confident guess.</p>
430
  <div class="cta-row">
431
  <a class="btn btn-primary" href="/console">Open the command center →</a>
432
- <a class="btn btn-lattice" href="/immune">Open IMMUNE</a>
433
  <a class="btn btn-ghost" href="/verify">Verify a receipt offline</a>
434
  </div>
435
  <div class="hero-stats">
@@ -461,10 +468,12 @@
461
  <h2 style="font-size:clamp(1.5rem,3vw,2.1rem);margin:0 0 10px">Every figure on this page is labelled — or it isn't shown.</h2>
462
  <p class="intro" style="margin:0">We grade what we say. If a claim isn't MEASURED live this session, we tell you exactly what it is instead of dressing it up as proof.</p>
463
  <div class="legend">
464
- <div class="leg measured"><div class="lt">MEASURED</div><p>Read live from a running endpoint this session — receipt count, advisory Λ posture, and chain depth. Shown with a live chip; a dead probe degrades to an honest offline chip. Signer state is disclosed separately only where an actual signer-status read is present.</p></div>
465
- <div class="leg reported"><div class="lt">REPORTED</div><p>Stated by a source we name — the locked-8 Lean kernel, the 144-entry genome registry — cited here, not independently re-derived on this page.</p></div>
466
- <div class="leg unknown"><div class="lt">UNKNOWN</div><p>We don't have it right now. Rendered honestly as N/A · UNAVAILABLE · BLOCKED — never a confident guess and never a fabricated number.</p></div>
467
- <div class="leg conjecture"><div class="lt">CONJECTURE</div><p>Advisory and unproven. Rendered in gray, never green, never a theorem. Λ lives here.</p></div>
 
 
468
  </div>
469
  <div class="lambda-line">
470
  <span class="chip gray"><span class="dot"></span>Λ = Conjecture 1</span>
@@ -488,22 +497,70 @@
488
  <p class="pulse-time" id="pulse-checked">Checks have not completed.</p>
489
  </section>
490
 
491
- <!-- ====================== (1c) EXPLORE THE SURFACES ====================== -->
492
- <section class="band wrap" id="surfaces">
493
- <p class="kick">Explore the estate</p>
494
- <h2>Ten surfaces. One governed core.</h2>
495
- <p class="intro">Every surface reads the same live endpoints and the same honesty doctrine. Jump straight in — the full working console is one click away.</p>
496
  <div class="grid g3">
497
- <a class="card surface-card" href="/console"><div class="ic">⌘</div><h3>Command Center</h3><p>The working console — receipt integrity, separately disclosed signer state, the self-doubt gate, the genome registry, and live organ vitals.</p><div class="golinks"><span class="go">Open /console →</span></div></a>
498
- <a class="card surface-card" href="/superpowers"><div class="ic">✦</div><h3>Five Superpowers</h3><p>The five things governed inference does that ungoverned models can't — each linked to the live check that backs it.</p><div class="golinks"><span class="go">Open /superpowers →</span></div></a>
499
- <a class="card surface-card" href="/console#arena"><div class="ic">⚔</div><h3>Adversarial assurance</h3><p>Run governed evaluations, inspect refusals, and trace every verdict to its evidence. The archived Warhacker route now resolves here.</p><div class="golinks"><span class="go">Open the eval arena →</span></div></a>
500
- <a class="card surface-card" href="/observability"><div class="ic">◎</div><h3>Observability</h3><p>OpenTelemetry-style traces and health summaries across the organs — live, read-only, no sign-on-GET.</p><div class="golinks"><span class="go">Open /observability →</span></div></a>
501
- <a class="card surface-card" href="/wires"><div class="ic">〜</div><h3>Wires</h3><p>The live wiring between organs — which probe feeds which surface, and whether it is up right now.</p><div class="golinks"><span class="go">Open /wires →</span></div></a>
502
- <a class="card surface-card" href="/console#mesh"><div class="ic">◇</div><h3>Mesh</h3><p>The BFT-quorum mesh graph — 3-of-4 consensus, live state read from <span class="mono">/api/a11oy/v1/mesh/state</span>.</p><div class="golinks"><span class="go">Open the mesh →</span></div></a>
503
- <a class="card surface-card" href="/formulas"><div class="ic">Σ</div><h3>Formulas</h3><p>The PURIQ agentic formula genome — live-recomputed values, each carrying its own Khipu receipt.</p><div class="golinks"><span class="go">Open /formulas →</span></div></a>
504
- <a class="card surface-card" href="/trust"><div class="ic">✓</div><h3>Evidence</h3><p>The trust center: the locked-8 with truthful Lean refs, Theorem&nbsp;U vs Conjecture&nbsp;1, the receipt ledger, offline verify.</p><div class="golinks"><span class="go">Open the evidence →</span></div></a>
505
- <a class="card surface-card" href="/immune"><div class="ic">⬡</div><h3>IMMUNE</h3><p>Fail-closed Hukulla kernel (Channel A) plus Field lattice (Channel B): exile, mesh, quorum, delta. Hunt / isolate / deceive — never strike people. Same-origin tab. Never fabricates LIVE or PASS.</p><div class="golinks"><span class="go">Open /immune →</span></div></a>
506
- <a class="card surface-card" href="/lyte"><div class="ic">⚖</div><h3>LYTE lattice</h3><p>BIND package, not a second flagship. Named frontiers N1–N25 cited from GitHub — STRUCTURAL-ONLY hub, UNSIGNED-honest receipts, joule UNAVAILABLE unless RAPL reads. Not a production certificate.</p><div class="golinks"><span class="go">Open /lyte →</span></div></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
507
  </div>
508
  </section>
509
 
@@ -578,118 +635,50 @@
578
  </div>
579
  </div>
580
  <div class="cta-row" style="margin-top:34px">
581
- <a class="btn btn-primary" href="https://szlholdings-immune.hf.space" target="_blank" rel="noopener">See it run live · IMMUNE demo →</a>
582
- <a class="btn btn-ghost" href="/console#genome">Browse the genome →</a>
583
  <a class="btn btn-ghost" href="/trust">Read the trust center →</a>
 
584
  </div>
585
- <p class="intro" style="margin-top:16px;opacity:.85">IMMUNE is a live, interactive demo of the same thesis you can drive yourself — a
586
- real hash-chained receipt ledger, a live Sigstore&nbsp;Rekor transparency anchor, and honest
587
- <b>BLOCKED</b> / <b>UNAVAILABLE</b> states instead of confident guesses. Nothing on that page is fabricated.</p>
588
- </section>
589
-
590
- <!-- ====================== (4) THE VERTICALS — live /lambda/org ====================== -->
591
- <section class="band" id="verticals" style="background:linear-gradient(180deg,rgba(10,16,30,0),rgba(10,16,30,0.55))">
592
- <div class="wrap">
593
- <p class="kick">The verticals · live Λ posture <span id="verticals-src"></span></p>
594
- <h2>One governed core. Five places it earns its keep.</h2>
595
- <p class="intro">The same governed inference core runs across five verticals. Each card reads
596
- its live advisory Λ posture from the org-wide 13-axis gate (canonical floor 0.90). Λ is
597
- Conjecture&nbsp;1 — advisory, never a pass/fail oracle.</p>
598
- <div class="grid g3">
599
- <div class="vcard">
600
- <div class="pmark">a11</div>
601
- <h3>a11oy</h3>
602
- <div class="tag">Core · governed inference</div>
603
- <p>The platform itself — command center, receipt integrity, disclosed signer state, and the self-doubt gate.</p>
604
- <div class="lam"><span class="val" id="v-core">—</span><span class="cap">advisory Λ</span><span id="v-core-chip"></span></div>
605
- </div>
606
- <div class="vcard">
607
- <div class="pmark">kil</div>
608
- <h3>killinchu</h3>
609
- <div class="tag">Defense · counter-UAS</div>
610
- <p>Auditable interdiction: receipt per decision, separately disclosed signing state, and 3-of-4 BFT consensus.</p>
611
- <div class="lam"><span class="val" id="v-defense">—</span><span class="cap">advisory Λ</span><span id="v-defense-chip"></span></div>
612
- </div>
613
- <div class="vcard">
614
- <div class="pmark">ins</div>
615
- <h3>Insurance</h3>
616
- <div class="tag">David Leads · lead scoring</div>
617
- <p>Faithful David Leads scorer behind an F12 non-compensatory consent gate.</p>
618
- <div class="lam"><span class="val" id="v-insurance">—</span><span class="cap">advisory Λ</span><span id="v-insurance-chip"></span></div>
619
- </div>
620
- <div class="vcard">
621
- <div class="pmark">fin</div>
622
- <h3>Finance</h3>
623
- <div class="tag">Governed decisioning</div>
624
- <p>Decision paths that must be reconstructable, receipt-bound, and conditionally signed only when verified signer evidence is active.</p>
625
- <div class="lam"><span class="val" id="v-finance">—</span><span class="cap">advisory Λ</span><span id="v-finance-chip"></span></div>
626
- </div>
627
- <div class="vcard">
628
- <div class="pmark">re</div>
629
- <h3>Real estate</h3>
630
- <div class="tag">Governed workflows</div>
631
- <p>Workflow decisions captured into the same one-chain receipt ledger.</p>
632
- <div class="lam"><span class="val" id="v-realestate">—</span><span class="cap">advisory Λ</span><span id="v-realestate-chip"></span></div>
633
- </div>
634
- <div class="vcard" style="border-style:dashed;align-items:flex-start;justify-content:center">
635
- <div class="pmark" style="background:rgba(58,244,200,0.08);border-color:rgba(58,244,200,0.25);color:var(--proof)">Λ</div>
636
- <h3>Org-wide Λ</h3>
637
- <div class="tag">13-axis weighted geomean</div>
638
- <p>The composite advisory posture across all verticals, with min≤Λ≤max SEMANTIC-VERIFIED.</p>
639
- <div class="lam"><span class="val" id="v-org">—</span><span class="cap">floor 0.90</span><span id="v-org-chip"></span></div>
640
- </div>
641
- </div>
642
- </div>
643
- </section>
644
-
645
- <!-- ====================== (5) THE LIVING BODY ====================== -->
646
- <section class="band wrap" id="body">
647
- <p class="kick">The living body</p>
648
- <h2>Watch the governed organism breathe.</h2>
649
- <p class="intro">The same live endpoints render as a 3D anatomical organism — organs glow when
650
- their probes are healthy and dim when they're not, and receipt events travel the vessels as
651
- pulses. It is an operational projection of the platform state. Every pulse links to a real
652
- receipt event; its signing state remains separately disclosed.</p>
653
- <div class="body-embed" id="body-embed">
654
- <div class="poster" id="body-poster">
655
- <div class="pulse-ring" aria-hidden="true"></div>
656
- <h3>The Living Brain &amp; Body · Anatomy v5</h3>
657
- <p>Two live 3D views of the same governed organism: a <b>moldable brain</b> whose eight lobes
658
- are wired to live public reads (Hub assets, GitHub repos, proved theorems, organ vitals,
659
- the harnessed open-weights frontier) &mdash; sculpt its cortex with your pointer &mdash;
660
- and the full <b>living body</b> wired to the same probes as the console.</p>
661
- <div class="cta-row" style="justify-content:center">
662
- <button class="btn btn-lattice" id="brain-load" type="button">🧠 Mold the brain in-frame</button>
663
- <button class="btn btn-ghost" id="body-load" type="button">Load the living body</button>
664
- <a class="btn btn-primary" href="/anatomy-v5">Open the live digital twin →</a>
665
- <a class="btn btn-ghost" href="/living-anatomy" target="_blank" rel="noopener">Open full-screen →</a>
666
- </div>
667
- </div>
668
- </div>
669
  </section>
670
 
671
- <!-- ====================== PUBLIC ECOSYSTEM ATLAS ====================== -->
672
  <section class="band" id="ecosystem">
673
- <div class="wrap">
674
- <p class="kick">Public estate · canonical live sources</p>
675
- <h2>Models, kernels, data, and Spaces — one evidence-labelled map.</h2>
676
- <p class="sub" style="max-width:790px">The front door no longer hardcodes organization totals. Open each canonical source for its current inventory; a reachable URL establishes reachability only, not source/runtime alignment or model quality.</p>
677
- <div class="estate-grid" aria-label="Canonical public ecosystem sources">
678
- <a class="estate-cell" href="https://huggingface.co/SZLHOLDINGS/models" target="_blank" rel="noopener"><b>OPEN</b><span>Models</span></a>
679
- <a class="estate-cell" href="/kernels"><b>OPEN</b><span>Governed kernels</span></a>
680
- <a class="estate-cell" href="https://huggingface.co/SZLHOLDINGS/datasets" target="_blank" rel="noopener"><b>OPEN</b><span>Datasets</span></a>
681
- <a class="estate-cell" href="https://huggingface.co/SZLHOLDINGS/spaces" target="_blank" rel="noopener"><b>OPEN</b><span>Spaces</span></a>
682
- <a class="estate-cell" href="https://huggingface.co/SZLHOLDINGS/collections" target="_blank" rel="noopener"><b>OPEN</b><span>Collections</span></a>
683
- <a class="estate-cell" href="https://huggingface.co/SZLHOLDINGS" target="_blank" rel="noopener"><b>OPEN</b><span>Organization</span></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  </div>
685
- <div class="estate-links">
686
- <a class="btn btn-primary" href="/ecosystem">Open ecosystem atlas →</a>
687
- <a class="btn btn-lattice" href="/anatomy-v5">Open Anatomy v5</a>
688
- <a class="btn btn-ghost" href="/models">Models</a>
689
- <a class="btn btn-ghost" href="/kernels">Kernels</a>
690
- <a class="btn btn-ghost" href="/ecosystem/brain">Brain</a>
691
- <a class="btn btn-ghost" href="/ecosystem/holographic">Holographic</a>
692
- <a class="btn btn-ghost" href="/spaces">All Spaces</a>
693
  </div>
694
  </div>
695
  </section>
@@ -748,33 +737,28 @@
748
  <p class="muted" style="margin:12px 0 0">Part of the SZL Holdings estate ·
749
  <a href="https://github.com/szl-holdings" target="_blank" rel="noopener">github.com/szl-holdings</a></p>
750
  </div>
751
- <div class="lk"><strong style="color:var(--ink)">Product</strong>
752
- <a href="/console">Command center</a>
753
- <a href="/ecosystem">Ecosystem atlas</a>
754
- <a href="/anatomy-v5">Anatomy v5 · digital twin</a>
755
- <a href="/console#genome">Genome registry</a>
756
- <a href="/verify">Verify a receipt</a>
757
- <a href="/living-anatomy">Living anatomy · 3D</a>
758
- <a href="/elite">killinchu · counter-UAS</a>
759
- <a href="/immune">IMMUNE · Hukulla + live kernel</a>
760
  <a href="/lyte">LYTE lattice · BIND package</a>
761
- <a href="https://szlholdings-immune.hf.space" target="_blank" rel="noopener">IMMUNE kernel Space</a></div>
762
  <div class="lk"><strong style="color:var(--ink)">Evidence</strong>
 
763
  <a href="/trust">Trust center</a>
764
  <a href="/api/a11oy/v1/ledger">Receipt ledger</a>
765
  <a href="/api/a11oy/v1/honest">Honest status (JSON)</a>
766
  <a href="https://github.com/szl-holdings/lutar-lean">lutar-lean proofs</a></div>
767
- <div class="lk"><strong style="color:var(--ink)">Router &amp; org</strong>
 
 
 
 
 
768
  <a href="/static/viz/router/">LLM Router · STALE NOT_MEASURED · snapshot 2026-07-11</a>
769
- <a href="https://huggingface.co/spaces/SZLHOLDINGS/llm-router-live" target="_blank" rel="noopener">Status Space (STALE NOT_MEASURED · snapshot 2026-07-11)</a>
770
- <a href="https://github.com/szl-holdings/szl-router" target="_blank" rel="noopener">SZL Router · OpenAI-compatible</a>
771
- <a href="https://github.com/szl-holdings" target="_blank" rel="noopener">SZL Holdings · GitHub org</a>
772
- <a href="#surfaces">All ten surfaces</a></div>
773
- <div class="lk"><strong style="color:var(--ink)">Estate · open source</strong>
774
- <a href="https://github.com/szl-holdings/ouroboros" target="_blank" rel="noopener">ouroboros · self-referential loop</a>
775
- <a href="https://github.com/szl-holdings/szl-formula-ledger" target="_blank" rel="noopener">szl-formula-ledger · formula genome</a>
776
- <a href="https://github.com/szl-holdings/szl-energy-attest" target="_blank" rel="noopener">szl-energy-attest · grid_context (REPORTED)</a>
777
- <a href="https://huggingface.co/SZLHOLDINGS" target="_blank" rel="noopener">Hugging Face org · SZLHOLDINGS</a></div>
778
  </div>
779
  <p class="disc">Honesty doctrine v11 LOCKED. The locked-proven Lean kernel is exactly <b>8</b>
780
  theorems {F1,F4,F7,F11,F12,F18,F19,F22}; the 144-entry genome registry is a separate, larger
@@ -782,7 +766,8 @@
782
  advisory bound, never a theorem and never 1.0. Receipt-chain integrity and DSSE signing are
783
  distinct states; signing is claimed only when persistent signer evidence is active and verification
784
  passes. Read-only routes never mint receipts. Energy is MEASURED only with a live exporter delta,
785
- otherwise honest SAMPLE. Supply
 
786
  chain is SLSA L1 honest (L2 build-attested); FedRAMP / IL5 / ATO accreditation is ROADMAP.
787
  <b style="color:var(--sub)">Alloy by SZL Holdings.</b>
788
  © Stephen P. Lutar Jr. (ORCID 0009-0001-0110-4173) · Apache-2.0.</p>
@@ -925,11 +910,13 @@
925
  }
926
 
927
  function setVerticals(v){
928
- // v: {core,defense,insurance,finance,realestate} advisory Λ (numbers or null)
929
- [["core","v-core"],["defense","v-defense"],["insurance","v-insurance"],
930
- ["finance","v-finance"],["realestate","v-realestate"]].forEach(([k,id])=>{
 
 
931
  const val = fmtLam(v[k]);
932
- $(id).textContent = (val===null) ? "N/A" : val;
933
  lamChip(id+"-chip", num(v[k]));
934
  });
935
  }
@@ -990,7 +977,7 @@
990
  setChain(num(ts.signed_receipts), ts.chain_alg || "sha3_256", num(ch.depth), ch.last_receipt);
991
  $("chain-src").innerHTML = liveChip("overview"); any = true;
992
  }
993
- if(o.org_lambda !== undefined){ const v=fmtLam(o.org_lambda); $("v-org").textContent = v||"N/A"; lamChip("v-org-chip", num(o.org_lambda)); }
994
  return any;
995
  }catch(e){ return false; }
996
  }
@@ -1012,13 +999,14 @@
1012
  try{
1013
  const d = await getJSON("/api/a11oy/v1/lambda/org");
1014
  const v = d.verticals || {};
1015
- setVerticals({ core:v.core, defense:v.defense, insurance:v.insurance,
1016
- finance:v.finance, realestate:v.realestate });
1017
- const ov = fmtLam(d.lambda_org); $("v-org").textContent = ov || "N/A"; lamChip("v-org-chip", num(d.lambda_org));
1018
- $("verticals-src").innerHTML = liveChip("lambda/org");
1019
  }catch(e){
1020
- setVerticals({}); $("v-org").textContent = "N/A"; $("v-org-chip").innerHTML = downChip("N/A");
1021
- $("verticals-src").innerHTML = downChip("UNAVAILABLE");
 
 
1022
  }
1023
  }
1024
  async function loadChain(){
 
226
  background:rgba(58,244,200,0.07);border:1px solid rgba(58,244,200,0.18);
227
  color:var(--proof);margin-bottom:15px;font-size:19px}
228
  .card .golinks{margin-top:auto;display:flex;gap:14px;flex-wrap:wrap;padding-top:16px}
229
+ .card a.go{color:var(--proof);font-family:var(--mono);font-size:12.5px;min-height:44px;display:inline-flex;align-items:center}
230
  .card a.go:hover{text-decoration:underline}
231
  .card .num{position:absolute;top:18px;right:22px;font-family:var(--mono);font-size:13px;color:var(--ghost)}
232
 
 
320
  .skel{color:var(--ghost);font-family:var(--mono)}
321
 
322
  /* ecosystem atlas — public estate snapshot, never implied live until API reads */
323
+ .estate-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:24px 0}
324
+ .estate-cell{border:1px solid var(--border);border-radius:13px;padding:15px;min-height:44px;
325
  background:linear-gradient(155deg,rgba(17,30,50,.72),rgba(8,16,29,.88))}
326
  .estate-cell b{display:block;color:var(--proof);font:600 1.45rem var(--mono);margin-bottom:4px}
327
  .estate-cell span{color:var(--ghost);font:10px var(--mono);letter-spacing:.08em;text-transform:uppercase}
 
335
  .honesty{border-top:1px solid var(--border);border-bottom:1px solid var(--border);
336
  background:linear-gradient(180deg,rgba(10,16,30,0.6),rgba(10,16,30,0.22))}
337
  .honesty .wrap{padding:48px 24px}
338
+ .legend{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:22px 0 0}
339
  @media(max-width:860px){.legend{grid-template-columns:repeat(2,1fr)}}
340
  @media(max-width:480px){.legend{grid-template-columns:1fr}}
341
  .leg{padding:16px 17px;border-radius:12px;border:1px solid var(--border);background:rgba(255,255,255,0.03)}
 
343
  .leg p{margin:0;color:var(--sub);font-size:.9rem;line-height:1.5}
344
  .leg.measured .lt{color:var(--proof)} .leg.measured{border-color:rgba(58,244,200,0.35)}
345
  .leg.reported .lt{color:var(--lattice)} .leg.reported{border-color:rgba(91,141,238,0.35)}
346
+ .leg.roadmap .lt{color:var(--gold)} .leg.roadmap{border-color:rgba(215,185,107,0.35)}
347
+ .leg.software .lt{color:var(--lattice)} .leg.software{border-color:rgba(91,141,238,0.28)}
348
+ .leg.unavailable .lt{color:var(--down)} .leg.unavailable{border-color:rgba(232,116,110,0.38)}
349
+ .leg.simulated .lt{color:var(--gray)} .leg.simulated{border-color:rgba(125,138,160,0.4)}
350
+ .status-row{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0 0}
351
+ .chip.software{color:var(--lattice);border-color:rgba(91,141,238,0.35);background:rgba(91,141,238,0.08)}
352
+ .chip.software .dot{background:var(--lattice)}
353
+ .chip.roadmap{color:var(--gold);border-color:rgba(215,185,107,0.4);background:rgba(215,185,107,0.08)}
354
+ .chip.roadmap .dot{background:var(--gold)}
355
+ .chip.simulated{color:var(--gray);border-color:rgba(125,138,160,0.4);background:rgba(125,138,160,0.08)}
356
+ .chip.simulated .dot{background:var(--gray)}
357
+ .chip.unavailable{color:var(--down);border-color:rgba(232,116,110,0.35);background:rgba(232,116,110,0.07)}
358
+ .chip.unavailable .dot{background:var(--down)}
359
+ .product-card .lam{margin-top:auto;padding-top:14px}
360
  .honesty .lambda-line{margin:24px 0 0;display:flex;gap:12px;flex-wrap:wrap;align-items:center}
361
  .honesty .lambda-line .muted{max-width:640px}
362
  .honesty .free-energy{margin:14px 0 0;color:var(--ghost);font-size:.92rem;max-width:840px;line-height:1.6}
 
409
  </a>
410
  <button type="button" class="menu-toggle" id="menu-toggle" aria-label="Open menu" aria-controls="site-nav" aria-expanded="false">☰</button>
411
  <nav class="nav-links" id="site-nav">
412
+ <a class="hide-sm" href="#products">Products</a>
413
+ <a class="hide-sm" href="#catalog">Catalog</a>
414
  <a class="hide-sm" href="/lyte">LYTE</a>
415
+ <a class="hide-sm" href="https://a11oy.net" rel="noopener">Proof</a>
 
 
 
 
 
416
  <a href="/trust">Evidence</a>
417
  <a class="btn btn-primary" href="/console" aria-label="Open the command center"><span class="nav-cta-full">Open the command center</span><span class="nav-cta-short" aria-hidden="true">Command center</span> →</a>
418
  </nav>
 
436
  <b>BLOCKED</b> instead of a confident guess.</p>
437
  <div class="cta-row">
438
  <a class="btn btn-primary" href="/console">Open the command center →</a>
439
+ <a class="btn btn-lattice" href="https://a11oy.net" rel="noopener">Open the proof registry</a>
440
  <a class="btn btn-ghost" href="/verify">Verify a receipt offline</a>
441
  </div>
442
  <div class="hero-stats">
 
468
  <h2 style="font-size:clamp(1.5rem,3vw,2.1rem);margin:0 0 10px">Every figure on this page is labelled — or it isn't shown.</h2>
469
  <p class="intro" style="margin:0">We grade what we say. If a claim isn't MEASURED live this session, we tell you exactly what it is instead of dressing it up as proof.</p>
470
  <div class="legend">
471
+ <div class="leg measured"><div class="lt">MEASURED</div><p>Read live from a running endpoint this session — receipt count, advisory Λ posture, and chain depth. Shown with a live chip; a dead probe degrades to an honest offline chip. Signer state is disclosed separately only where an actual signer-status read is present. Never used for GPU joules without a live exporter delta.</p></div>
472
+ <div class="leg reported"><div class="lt">REPORTED</div><p>Stated by a source we name — the locked-8 Lean kernel {F1,F4,F7,F11,F12,F18,F19,F22}, the 144-entry genome registry — cited here, not independently re-derived on this page.</p></div>
473
+ <div class="leg roadmap"><div class="lt">ROADMAP</div><p>Future work or an empty Hub card. Not trained, not a product SKU, and not admitted as data. The ROADMAP collection exists so those cards are not sold as models.</p></div>
474
+ <div class="leg software"><div class="lt">SOFTWARE</div><p>Shipped code — kernels, consoles, gates. Not LoRA-trained weights. Hub mirrors GitHub; a SOFTWARE card is not a model SKU.</p></div>
475
+ <div class="leg unavailable"><div class="lt">UNAVAILABLE</div><p>We don't have it right now. Rendered as N/A · UNAVAILABLE · BLOCKED — never a confident guess and never a fabricated number.</p></div>
476
+ <div class="leg simulated"><div class="lt">SIMULATED</div><p>A rehearsal path. killinchu effectors stay SIMULATED unless a real execution path is proved. Never painted LIVE or MEASURED.</p></div>
477
  </div>
478
  <div class="lambda-line">
479
  <span class="chip gray"><span class="dot"></span>Λ = Conjecture 1</span>
 
497
  <p class="pulse-time" id="pulse-checked">Checks have not completed.</p>
498
  </section>
499
 
500
+ <!-- ====================== FLAGSHIPS — three products max ====================== -->
501
+ <section class="band wrap" id="products">
502
+ <p class="kick">Products · three flagships <span id="verticals-src"></span></p>
503
+ <h2>Three products. One evidence contract.</h2>
504
+ <p class="intro">The public product line is three flagships — not nine surfaces, not five verticals, and not forty Hub SKUs. Insurance, finance, and real-estate cards are not products. Λ uniqueness is <b>Conjecture&nbsp;1</b> — advisory, never a theorem, never green.</p>
505
  <div class="grid g3">
506
+ <article class="card product-card" id="product-a11oy">
507
+ <div class="ic">⌘</div>
508
+ <h3>a11oy Command</h3>
509
+ <p>Governed-AI command center: deny-by-default gates, receipt integrity, separately disclosed signer state, and an honest BLOCKED when the model is not sure.</p>
510
+ <div class="status-row">
511
+ <span class="chip software"><span class="dot"></span>SOFTWARE</span>
512
+ <span class="chip gray"><span class="dot"></span>Λ = Conjecture 1</span>
513
+ </div>
514
+ <div class="lam"><span class="val" id="v-core">—</span><span class="cap">advisory Λ</span><span id="v-core-chip"></span></div>
515
+ <div class="golinks">
516
+ <a class="go" href="/console">Open /console →</a>
517
+ <a class="go" href="https://huggingface.co/spaces/SZLHOLDINGS/a11oy" rel="noopener">Space →</a>
518
+ </div>
519
+ </article>
520
+ <article class="card product-card" id="product-killinchu">
521
+ <div class="ic">⚔</div>
522
+ <h3>killinchu</h3>
523
+ <p>Counter-UAS and maritime vertical on the same receipt substrate. Public controls remain advisory. Effectors stay SIMULATED unless a real execution path is proved.</p>
524
+ <div class="status-row">
525
+ <span class="chip software"><span class="dot"></span>SOFTWARE</span>
526
+ <span class="chip simulated"><span class="dot"></span>SIMULATED effectors</span>
527
+ </div>
528
+ <div class="lam"><span class="val" id="v-defense">—</span><span class="cap">advisory Λ</span><span id="v-defense-chip"></span></div>
529
+ <div class="golinks">
530
+ <a class="go" href="/killinchu">Open killinchu →</a>
531
+ <a class="go" href="https://huggingface.co/spaces/SZLHOLDINGS/killinchu" rel="noopener">Space →</a>
532
+ </div>
533
+ </article>
534
+ <article class="card product-card" id="product-forge">
535
+ <div class="ic">⚙</div>
536
+ <h3>Forge / own-metal</h3>
537
+ <p>Owner-forged weights and kernels trained on metal you own. This is a training and evidence path — not a live GPU joule meter, and not forty fake model SKUs.</p>
538
+ <div class="status-row">
539
+ <span class="chip software"><span class="dot"></span>SOFTWARE</span>
540
+ <span class="chip roadmap"><span class="dot"></span>ROADMAP cards ≠ trained</span>
541
+ </div>
542
+ <div class="golinks">
543
+ <a class="go" href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-models-6a9315c1c853da528726dd8d" rel="noopener">Flagship models →</a>
544
+ <a class="go" href="/api/forge/family">Forge family JSON →</a>
545
+ </div>
546
+ </article>
547
+ </div>
548
+ </section>
549
+
550
+ <div class="wrap"><div class="divider"></div></div>
551
+
552
+ <!-- ====================== BOUND PACKAGES — not flagships ====================== -->
553
+ <section class="band wrap" id="bound">
554
+ <p class="kick">Bound packages · not flagships</p>
555
+ <h2>Cited in. Not a fourth product.</h2>
556
+ <p class="intro">These tabs bind onto a-11-oy.com as packages. They are not flagships and they do not certify the product. Hugging Face stays the artifact registry, not the front door.</p>
557
+ <div class="grid g3">
558
+ <a class="card surface-card" href="/lyte" id="bind-lyte">
559
+ <div class="ic">⚖</div>
560
+ <h3>LYTE lattice</h3>
561
+ <p>BIND package. Named frontiers N1–N25 cited from GitHub. STRUCTURAL-ONLY hub. UNSIGNED-honest receipts. Joule UNAVAILABLE unless RAPL <span class="mono">energy_uj</span> is actually read. Occupancy UNAVAILABLE. Not a production certificate.</p>
562
+ <div class="golinks"><span class="go">Open /lyte →</span></div>
563
+ </a>
564
  </div>
565
  </section>
566
 
 
635
  </div>
636
  </div>
637
  <div class="cta-row" style="margin-top:34px">
638
+ <a class="btn btn-primary" href="https://a11oy.net" rel="noopener">Open the proof registry →</a>
 
639
  <a class="btn btn-ghost" href="/trust">Read the trust center →</a>
640
+ <a class="btn btn-ghost" href="/console#genome">Browse the genome →</a>
641
  </div>
642
+ <p class="intro" style="margin-top:16px;opacity:.85">Proof lives at <a href="https://a11oy.net" rel="noopener">a11oy.net</a> — RECORD, diligence, atlas. It is not a product host. Λ uniqueness is Conjecture&nbsp;1, never a theorem.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  </section>
644
 
645
+ <!-- ====================== HUB CATALOG — collections, not a zoo ====================== -->
646
  <section class="band" id="ecosystem">
647
+ <div class="wrap" id="catalog">
648
+ <p class="kick">Hub catalog · four collections</p>
649
+ <h2>Collections are the catalog — not forty product SKUs.</h2>
650
+ <p class="intro">Open a collection for its current inventory. A reachable URL is reachability only — not source/runtime alignment, not model quality, and not a claim that every Hub card is trained. ROADMAP cards are empty on purpose.</p>
651
+ <div class="grid g4" aria-label="Canonical Hugging Face collections">
652
+ <a class="card surface-card" href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-models-6a9315c1c853da528726dd8d" rel="noopener">
653
+ <div class="status-row" style="margin:0 0 12px"><span class="chip software"><span class="dot"></span>TRAINED WEIGHTS</span></div>
654
+ <h3>Flagship models</h3>
655
+ <p>Trained weights only. Kernels and empty ROADMAP cards live elsewhere. Λ uniqueness remains Conjecture&nbsp;1.</p>
656
+ <div class="golinks"><span class="go">Open collection →</span></div>
657
+ </a>
658
+ <a class="card surface-card" href="https://huggingface.co/collections/SZLHOLDINGS/szl-kernels-software-6a9315c19d509bb9214d3e64" rel="noopener">
659
+ <div class="status-row" style="margin:0 0 12px"><span class="chip software"><span class="dot"></span>SOFTWARE</span></div>
660
+ <h3>Kernels</h3>
661
+ <p>Software kernels. Not LoRA-trained models. Source on GitHub; Hub is the mirror.</p>
662
+ <div class="golinks"><span class="go">Open collection →</span></div>
663
+ </a>
664
+ <a class="card surface-card" href="https://huggingface.co/collections/SZLHOLDINGS/szl-roadmap-no-admitted-data-6a9315c19fb3920077cefe50" rel="noopener">
665
+ <div class="status-row" style="margin:0 0 12px"><span class="chip roadmap"><span class="dot"></span>ROADMAP</span></div>
666
+ <h3>Roadmap</h3>
667
+ <p>Honest empty cards. Not trained. Do not treat as product SKUs or admitted data.</p>
668
+ <div class="golinks"><span class="go">Open collection →</span></div>
669
+ </a>
670
+ <a class="card surface-card" href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-spaces-6a9315c15be8186d77796e62" rel="noopener">
671
+ <div class="status-row" style="margin:0 0 12px"><span class="chip software"><span class="dot"></span>SOFTWARE</span></div>
672
+ <h3>Flagship Spaces</h3>
673
+ <p>Running product surfaces. Extra holograms are paused, not deleted. Proof stays at a11oy.net.</p>
674
+ <div class="golinks"><span class="go">Open collection →</span></div>
675
+ </a>
676
  </div>
677
+ <div class="estate-grid" aria-label="Canonical public catalog sources" style="margin-top:22px">
678
+ <a class="estate-cell" href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-models-6a9315c1c853da528726dd8d" rel="noopener"><b>OPEN</b><span>Models</span></a>
679
+ <a class="estate-cell" href="https://huggingface.co/collections/SZLHOLDINGS/szl-kernels-software-6a9315c19d509bb9214d3e64" rel="noopener"><b>OPEN</b><span>Kernels</span></a>
680
+ <a class="estate-cell" href="https://huggingface.co/collections/SZLHOLDINGS/szl-roadmap-no-admitted-data-6a9315c19fb3920077cefe50" rel="noopener"><b>OPEN</b><span>Roadmap</span></a>
681
+ <a class="estate-cell" href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-spaces-6a9315c15be8186d77796e62" rel="noopener"><b>OPEN</b><span>Spaces</span></a>
 
 
 
682
  </div>
683
  </div>
684
  </section>
 
737
  <p class="muted" style="margin:12px 0 0">Part of the SZL Holdings estate ·
738
  <a href="https://github.com/szl-holdings" target="_blank" rel="noopener">github.com/szl-holdings</a></p>
739
  </div>
740
+ <div class="lk"><strong style="color:var(--ink)">Products</strong>
741
+ <a href="/console">a11oy Command</a>
742
+ <a href="/killinchu">killinchu · vertical</a>
743
+ <a href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-models-6a9315c1c853da528726dd8d" rel="noopener">Forge / own-metal</a>
 
 
 
 
 
744
  <a href="/lyte">LYTE lattice · BIND package</a>
745
+ <a href="/verify">Verify a receipt</a></div>
746
  <div class="lk"><strong style="color:var(--ink)">Evidence</strong>
747
+ <a href="https://a11oy.net" rel="noopener">Proof registry · a11oy.net</a>
748
  <a href="/trust">Trust center</a>
749
  <a href="/api/a11oy/v1/ledger">Receipt ledger</a>
750
  <a href="/api/a11oy/v1/honest">Honest status (JSON)</a>
751
  <a href="https://github.com/szl-holdings/lutar-lean">lutar-lean proofs</a></div>
752
+ <div class="lk"><strong style="color:var(--ink)">Catalog</strong>
753
+ <a href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-models-6a9315c1c853da528726dd8d" rel="noopener">Flagship models</a>
754
+ <a href="https://huggingface.co/collections/SZLHOLDINGS/szl-kernels-software-6a9315c19d509bb9214d3e64" rel="noopener">Kernels · SOFTWARE</a>
755
+ <a href="https://huggingface.co/collections/SZLHOLDINGS/szl-roadmap-no-admitted-data-6a9315c19fb3920077cefe50" rel="noopener">ROADMAP · no admitted data</a>
756
+ <a href="https://huggingface.co/collections/SZLHOLDINGS/szl-flagship-spaces-6a9315c15be8186d77796e62" rel="noopener">Flagship Spaces</a></div>
757
+ <div class="lk"><strong style="color:var(--ink)">Honesty</strong>
758
  <a href="/static/viz/router/">LLM Router · STALE NOT_MEASURED · snapshot 2026-07-11</a>
759
+ <a href="https://huggingface.co/spaces/SZLHOLDINGS/llm-router-live" rel="noopener">Status Space (STALE NOT_MEASURED · snapshot 2026-07-11)</a>
760
+ <a href="https://github.com/szl-holdings" rel="noopener">SZL Holdings · GitHub org</a>
761
+ <a href="#honesty">Honesty doctrine</a></div>
 
 
 
 
 
 
762
  </div>
763
  <p class="disc">Honesty doctrine v11 LOCKED. The locked-proven Lean kernel is exactly <b>8</b>
764
  theorems {F1,F4,F7,F11,F12,F18,F19,F22}; the 144-entry genome registry is a separate, larger
 
766
  advisory bound, never a theorem and never 1.0. Receipt-chain integrity and DSSE signing are
767
  distinct states; signing is claimed only when persistent signer evidence is active and verification
768
  passes. Read-only routes never mint receipts. Energy is MEASURED only with a live exporter delta,
769
+ otherwise honest SAMPLE — this page does not invent live GPU joules.
770
+ Hub collections are a catalog, not a zoo; ROADMAP cards are not trained SKUs. Supply
771
  chain is SLSA L1 honest (L2 build-attested); FedRAMP / IL5 / ATO accreditation is ROADMAP.
772
  <b style="color:var(--sub)">Alloy by SZL Holdings.</b>
773
  © Stephen P. Lutar Jr. (ORCID 0009-0001-0110-4173) · Apache-2.0.</p>
 
910
  }
911
 
912
  function setVerticals(v){
913
+ // Flagships only: a11oy command (core) and killinchu (defense).
914
+ // Insurance / finance / real-estate are not products on this page.
915
+ [["core","v-core"],["defense","v-defense"]].forEach(([k,id])=>{
916
+ const el = $(id);
917
+ if(!el) return;
918
  const val = fmtLam(v[k]);
919
+ el.textContent = (val===null) ? "N/A" : val;
920
  lamChip(id+"-chip", num(v[k]));
921
  });
922
  }
 
977
  setChain(num(ts.signed_receipts), ts.chain_alg || "sha3_256", num(ch.depth), ch.last_receipt);
978
  $("chain-src").innerHTML = liveChip("overview"); any = true;
979
  }
980
+ if(o.org_lambda !== undefined && $("v-org")){ const v=fmtLam(o.org_lambda); $("v-org").textContent = v||"N/A"; lamChip("v-org-chip", num(o.org_lambda)); }
981
  return any;
982
  }catch(e){ return false; }
983
  }
 
999
  try{
1000
  const d = await getJSON("/api/a11oy/v1/lambda/org");
1001
  const v = d.verticals || {};
1002
+ setVerticals({ core:v.core, defense:v.defense });
1003
+ if($("v-org")){ const ov = fmtLam(d.lambda_org); $("v-org").textContent = ov || "N/A"; lamChip("v-org-chip", num(d.lambda_org)); }
1004
+ if($("verticals-src")) $("verticals-src").innerHTML = liveChip("lambda/org");
 
1005
  }catch(e){
1006
+ setVerticals({});
1007
+ if($("v-org")) $("v-org").textContent = "N/A";
1008
+ if($("v-org-chip")) $("v-org-chip").innerHTML = downChip("N/A");
1009
+ if($("verticals-src")) $("verticals-src").innerHTML = downChip("UNAVAILABLE");
1010
  }
1011
  }
1012
  async function loadChain(){
pages/hub.html CHANGED
@@ -111,6 +111,7 @@ function setChip(id,cls,val,foot){const el=$(id);if(!el)return;el.className='chi
111
 
112
  // ---- curated primary surfaces (always present; local to this app) ----
113
  const SURFACES=[
 
114
  {name:'Console',route:'/console',ic:'▤',desc:'Operator console — organism, anatomy map, controls'},
115
  {name:'Cockpit',route:'/cockpit',ic:'✦',desc:'Live command cockpit — spine, constellation, engine'},
116
  {name:'Organism',route:'/console#organism',ic:'❋',desc:'The mind + six organs, rendered'},
 
111
 
112
  // ---- curated primary surfaces (always present; local to this app) ----
113
  const SURFACES=[
114
+ {name:'Atelier',route:'/atelier',ic:'⬡',desc:'Artifact walk — Hub cuts, not 40 product SKUs. Not a fourth flagship.'},
115
  {name:'Console',route:'/console',ic:'▤',desc:'Operator console — organism, anatomy map, controls'},
116
  {name:'Cockpit',route:'/cockpit',ic:'✦',desc:'Live command cockpit — spine, constellation, engine'},
117
  {name:'Organism',route:'/console#organism',ic:'❋',desc:'The mind + six organs, rendered'},
pages/landing.html CHANGED
@@ -163,11 +163,11 @@ img,svg,canvas,video{max-width:100%;height:auto;}
163
  </a>
164
  <button type="button" class="menu-toggle" id="menu-toggle" aria-label="Open menu" aria-controls="ds-nav" aria-expanded="false">☰</button>
165
  <nav class="ds-nav" id="ds-nav">
166
- <a href="#what">What it is</a>
167
- <a href="#diff">Receipts</a>
168
- <a href="#proof">Proof</a>
169
- <a href="/benchmark">Benchmark</a>
170
- <a href="#surfaces">Surfaces</a>
171
  </nav>
172
  <div style="display:flex;align-items:center;gap:12px;">
173
  <!-- ADDITIVE (feat/investor-mode-pricing): CEO / Investor-mode toggle. Opens a clean
@@ -353,7 +353,7 @@ img,svg,canvas,video{max-width:100%;height:auto;}
353
  <section class="ds-section" id="surfaces">
354
  <div class="ds-wrap">
355
  <p class="ds-eyebrow">Surfaces</p>
356
- <h2 class="ds-h2">Two front doors. One governed loop.</h2>
357
  <div class="ds-grid ds-grid--2 ds-reveal" style="margin-top:32px;">
358
  <a class="ds-card" href="/console" style="cursor:pointer;">
359
  <span class="ds-card__id">// A11OY</span>
@@ -369,6 +369,13 @@ img,svg,canvas,video{max-width:100%;height:auto;}
369
  <p class="ds-card__body">The maritime &amp; airspace surface: track drones and vessels, run counter-UAS cued engagements through the same governed, signed loop.</p>
370
  <span class="ds-btn" style="margin-top:8px;align-self:flex-start;">Open Drones &amp; Vessels <span class="ds-btn__arrow">→</span></span>
371
  </a>
 
 
 
 
 
 
 
372
  </div>
373
  </div>
374
  </section>
@@ -385,7 +392,7 @@ img,svg,canvas,video{max-width:100%;height:auto;}
385
  </div>
386
  <div class="ds-footer__cols">
387
  <div class="ds-footer__col"><h4>Platform</h4><a href="/console">Command Console</a><a href="/benchmark">Benchmark</a><a href="#what">What it is</a><a href="#diff">Receipts</a><a href="#proof">Proof</a></div>
388
- <div class="ds-footer__col"><h4>Surfaces</h4><a href="/console">a11oy</a><a href="https://szlholdings-killinchu.hf.space/">killinchu</a></div>
389
  <div class="ds-footer__col"><h4>Live</h4><a href="/api/a11oy/v1/observability/summary">Observability</a><a href="/api/a11oy/v1/lambda">Trust score</a><a href="/api/a11oy/v1/gates">Gates</a></div>
390
  </div>
391
  </div>
 
163
  </a>
164
  <button type="button" class="menu-toggle" id="menu-toggle" aria-label="Open menu" aria-controls="ds-nav" aria-expanded="false">☰</button>
165
  <nav class="ds-nav" id="ds-nav">
166
+ <a href="/#products">Products</a>
167
+ <a href="/#catalog">Catalog</a>
168
+ <a href="/lyte">LYTE</a>
169
+ <a href="https://a11oy.net" rel="noopener">Proof</a>
170
+ <a href="/trust">Evidence</a>
171
  </nav>
172
  <div style="display:flex;align-items:center;gap:12px;">
173
  <!-- ADDITIVE (feat/investor-mode-pricing): CEO / Investor-mode toggle. Opens a clean
 
353
  <section class="ds-section" id="surfaces">
354
  <div class="ds-wrap">
355
  <p class="ds-eyebrow">Surfaces</p>
356
+ <h2 class="ds-h2">Two flagships. Bound packages stay packages.</h2>
357
  <div class="ds-grid ds-grid--2 ds-reveal" style="margin-top:32px;">
358
  <a class="ds-card" href="/console" style="cursor:pointer;">
359
  <span class="ds-card__id">// A11OY</span>
 
369
  <p class="ds-card__body">The maritime &amp; airspace surface: track drones and vessels, run counter-UAS cued engagements through the same governed, signed loop.</p>
370
  <span class="ds-btn" style="margin-top:8px;align-self:flex-start;">Open Drones &amp; Vessels <span class="ds-btn__arrow">→</span></span>
371
  </a>
372
+ <a class="ds-card" href="/lyte" style="cursor:pointer;">
373
+ <span class="ds-card__id">// LYTE · BIND</span>
374
+ <h3 class="ds-card__title">LYTE lattice</h3>
375
+ <div class="ds-card__rule"></div>
376
+ <p class="ds-card__body">Bound package, not a flagship. Named frontiers N1-N25 cited from GitHub. STRUCTURAL-ONLY hub. UNSIGNED-honest receipts. Does not certify a-11-oy.com.</p>
377
+ <span class="ds-btn" style="margin-top:8px;align-self:flex-start;">Open /lyte <span class="ds-btn__arrow">→</span></span>
378
+ </a>
379
  </div>
380
  </div>
381
  </section>
 
392
  </div>
393
  <div class="ds-footer__cols">
394
  <div class="ds-footer__col"><h4>Platform</h4><a href="/console">Command Console</a><a href="/benchmark">Benchmark</a><a href="#what">What it is</a><a href="#diff">Receipts</a><a href="#proof">Proof</a></div>
395
+ <div class="ds-footer__col"><h4>Surfaces</h4><a href="/console">a11oy</a><a href="https://szlholdings-killinchu.hf.space/">killinchu</a><a href="/lyte">LYTE lattice</a></div>
396
  <div class="ds-footer__col"><h4>Live</h4><a href="/api/a11oy/v1/observability/summary">Observability</a><a href="/api/a11oy/v1/lambda">Trust score</a><a href="/api/a11oy/v1/gates">Gates</a></div>
397
  </div>
398
  </div>
routers/series_a_web/app.js CHANGED
@@ -1,264 +1,5 @@
1
  (() => {
2
  "use strict";
3
-
4
- const VIEWS = ["command", "estate", "claims", "policy", "twin", "passport", "audit"];
5
- const KEEP = [
6
- { id: "SZLHOLDINGS/README", role: "Org card", href: "https://huggingface.co/SZLHOLDINGS" },
7
- { id: "SZLHOLDINGS/a11oy", role: "Product Command Center", href: "https://a-11-oy.com" },
8
- { id: "SZLHOLDINGS/killinchu", role: "Defense vertical", href: "https://huggingface.co/spaces/SZLHOLDINGS/killinchu" },
9
- { id: "SZLHOLDINGS/immune", role: "Safety kernel", href: "https://huggingface.co/spaces/SZLHOLDINGS/immune" },
10
- { id: "SZLHOLDINGS/szl-khipu", role: "Model demo", href: "https://huggingface.co/spaces/SZLHOLDINGS/szl-khipu" },
11
- { id: "SZLHOLDINGS/szl-atelier", role: "Artifact walk", href: "https://huggingface.co/spaces/SZLHOLDINGS/szl-atelier" },
12
- { id: "SZLHOLDINGS/governed-receipt-verifier", role: "Receipt replay", href: "https://a11oy.net" }
13
- ];
14
- const CLAIMS = [
15
- ["CLM-ORG-REPOS", "Public GitHub repositories in org szl-holdings", "98", "LIVE"],
16
- ["CLM-HF-MODELS", "Hugging Face models under SZLHOLDINGS", "43", "LIVE"],
17
- ["CLM-HF-SPACES", "Hugging Face Spaces under SZLHOLDINGS", "7 public · 38 private · 45 total", "LIVE"],
18
- ["CLM-HF-DATASETS", "Hugging Face datasets under SZLHOLDINGS", "36", "LIVE"],
19
- ["CLM-KHIPU-DL", "SZL-Khipu-1.5B downloads", "502", "LIVE"],
20
- ["CLM-KHIPU-GGUF-DL", "SZL-Khipu-1.5B-GGUF downloads", "553", "LIVE"],
21
- ["CLM-FORGE-DL", "SZL-Forge-1.5B-ReceiptAgent downloads", "493", "LIVE"],
22
- ["CLM-NORM-DL", "szl-governed-norm downloads", "209", "SNAPSHOT"],
23
- ["CLM-LAMBDA-DL", "szl-lambda-gate downloads", "100", "SNAPSHOT"],
24
- ["CLM-TABLES-848", "Database tables (verified 2026-05-12)", "848", "SNAPSHOT"],
25
- ["CLM-ENDPOINTS-5524", "API endpoint declarations (verified 2026-05-12)", "5,524", "SNAPSHOT"],
26
- ["CLM-TESTS-1220", "Passing platform tests (verified 2026-05-12)", "1,220", "SNAPSHOT"],
27
- ["CLM-LAMBDA-MS", "Λ overhead median (verified 2026-05-12)", "≤0.59 ms", "SNAPSHOT"],
28
- ["CLM-DOCTRINE", "Doctrine lock", "v11 LOCKED", "LIVE"],
29
- ["CLM-LAMBDA", "Λ uniqueness", "Conjecture 1 — not a closed theorem", "LIVE"],
30
- ["CLM-LOCKED-8", "Locked-proven formulas", "8 · F1 F4 F7 F11 F12 F18 F19 F22", "LIVE"],
31
- ["CLM-LEAN-COUNTS", "lutar-lean pin (declarations / axioms / sorries)", "749 / 14 / 163", "LIVE"],
32
- ["CLM-TRUST-CEILING", "Trust ceiling claimed on README", "omitted from /honest", "SNAPSHOT"],
33
- ["CLM-SHARE-LINKS", "Four ChatGPT share-link transcripts", "unfetchable", "UNKNOWN"],
34
- ["CLM-HF-WRITE", "Hugging Face write from this session", "keep-7 reapplied; none deleted", "LIVE"],
35
- ["CLM-BOSS", "boss.technologies identity", "BLOCKED_IDENTITY", "UNKNOWN"]
36
- ];
37
- const CONTRADICTIONS = [
38
- ["CTR-KHIPU-DL", "BLOCKER", "Khipu download count", "Prior ~2.36k vs live 502. Retire 2.36k."],
39
- ["CTR-LEXICON", "HIGH", "Naming lexicon drift", "Canonical: a11oy — governed execution fabric. Product a-11-oy.com · proof a11oy.net · never a11oy.com."],
40
- ["CTR-STALE-METRICS", "HIGH", "May 12 platform metrics", "848 tables / 5,524 endpoints / 1,220 tests / ≤0.59 ms Λ stay SNAPSHOT."],
41
- ["CTR-SPACES", "MEDIUM", "Five-Space doctrine vs live Hub", "LIVE public: README, a11oy, killinchu, immune, szl-khipu, szl-atelier, governed-receipt-verifier."],
42
- ["CTR-SPRAWL", "MEDIUM", "Repo sprawl vs canonical home", "98 repositories. Bind as packages. Do not mint a new flagship."],
43
- ["CTR-TRUST-CEILING", "LOW", "Trust ceiling missing from honest API", "Either emit it from /honest or stop putting it on the first fold."]
44
- ];
45
- const TOOLS = [
46
- ["echo.ping", "NONE", "admitted"],
47
- ["receipt.inspect", "NONE", "admitted"],
48
- ["policy.propose", "NONE", "operator"],
49
- ["aql.query", "NONE", "admitted"],
50
- ["fixture.rollback", "REVERSIBLE", "operator"],
51
- ["prod.write", "IRREVERSIBLE", "prohibited"],
52
- ["shell.exec", "IRREVERSIBLE", "prohibited"]
53
- ];
54
- const AUDIT = [
55
- ["B1", "LIVE", "Canonical home is szl-holdings/a11oy — no 20th repo minted this session"],
56
- ["B2", "LIVE", "Lexicon locked: a11oy — governed execution fabric"],
57
- ["B3", "LIVE", "Claims ledger exists; May 12 metrics degraded to SNAPSHOT"],
58
- ["B4", "LIVE", "Contradiction ledger scored separately from claims"],
59
- ["B5", "LIVE", "Vertical slice uses a fixture tool, never a production connector"],
60
- ["B6", "LIVE", "Receipts DEMO_SIGNED; DSSE UNAVAILABLE; PENDING_SYNC visible"],
61
- ["B7", "LIVE", "Hugging Face write LIVE — 7 public Spaces, 38 private, none deleted"],
62
- ["B8", "UNKNOWN", "ChatGPT share-link transcripts UNKNOWN — not fabricated"],
63
- ["B9", "MODELED", "Bricklayer IP-risk register populated before policy-enforcement code"],
64
- ["B10", "LIVE", "Calibration Plane proposal-only, outside TCB"]
65
- ];
66
-
67
- const badgeClass = (state) => {
68
- const key = String(state || "").toLowerCase();
69
- if (key === "live" || key === "admitted") return "badge live";
70
- if (key === "snapshot" || key === "modeled") return "badge snapshot";
71
- if (key === "blocker" || key === "prohibited") return "badge blocker";
72
- return "badge unknown";
73
- };
74
-
75
- const showView = () => {
76
- const raw = (location.hash || "#command").replace(/^#/, "");
77
- const view = VIEWS.includes(raw) ? raw : "command";
78
- document.querySelectorAll("[data-view]").forEach((el) => {
79
- el.hidden = el.getAttribute("data-view") !== view;
80
- });
81
- document.querySelectorAll("[data-nav]").forEach((a) => {
82
- if (a.getAttribute("data-nav") === view) a.setAttribute("aria-current", "page");
83
- else a.removeAttribute("aria-current");
84
- });
85
- };
86
- window.addEventListener("hashchange", showView);
87
- showView();
88
-
89
- const fillList = (id, rows, render) => {
90
- const node = document.getElementById(id);
91
- if (!node) return;
92
- node.replaceChildren(...rows.map(render));
93
- };
94
- fillList("keep-list", KEEP, (item) => {
95
- const li = document.createElement("li");
96
- const a = document.createElement("a");
97
- a.className = "id";
98
- a.href = item.href;
99
- a.textContent = item.id;
100
- if (/^https?:/.test(item.href)) {
101
- a.target = "_blank";
102
- a.rel = "noopener";
103
- }
104
- const role = document.createElement("span");
105
- role.className = "badge live";
106
- role.textContent = item.role;
107
- li.append(a, role);
108
- return li;
109
- });
110
- const claimsBody = document.getElementById("claims-body");
111
- if (claimsBody) {
112
- claimsBody.replaceChildren(...CLAIMS.map(([id, statement, value, state]) => {
113
- const tr = document.createElement("tr");
114
- const cells = [id, statement, value, state];
115
- cells.forEach((text, index) => {
116
- const td = document.createElement("td");
117
- if (index === 3) {
118
- const span = document.createElement("span");
119
- span.className = badgeClass(state);
120
- span.textContent = state;
121
- td.append(span);
122
- } else {
123
- td.textContent = text;
124
- }
125
- tr.append(td);
126
- });
127
- return tr;
128
- }));
129
- }
130
- fillList("ctr-list", CONTRADICTIONS, ([id, sev, title, remedy]) => {
131
- const li = document.createElement("li");
132
- const name = document.createElement("span");
133
- name.className = "id";
134
- name.textContent = `${id} · ${title}`;
135
- const note = document.createElement("span");
136
- note.textContent = remedy;
137
- note.style.color = "var(--muted)";
138
- note.style.flex = "1";
139
- const badge = document.createElement("span");
140
- badge.className = badgeClass(sev);
141
- badge.textContent = sev;
142
- li.append(name, note, badge);
143
- return li;
144
- });
145
- fillList("tools-list", TOOLS, ([name, cls, status]) => {
146
- const li = document.createElement("li");
147
- const id = document.createElement("span");
148
- id.className = "id";
149
- id.textContent = `${name} · ${cls}`;
150
- const badge = document.createElement("span");
151
- badge.className = badgeClass(status);
152
- badge.textContent = status;
153
- li.append(id, badge);
154
- return li;
155
- });
156
- fillList("audit-list", AUDIT, ([id, state, item]) => {
157
- const li = document.createElement("li");
158
- const idEl = document.createElement("span");
159
- idEl.className = "id";
160
- idEl.textContent = `${id} · ${item}`;
161
- const badge = document.createElement("span");
162
- badge.className = badgeClass(state);
163
- badge.textContent = state;
164
- li.append(idEl, badge);
165
- return li;
166
- });
167
-
168
- const encoder = new TextEncoder();
169
- const sha256 = async (text) => {
170
- const digest = await crypto.subtle.digest("SHA-256", encoder.encode(text));
171
- return [...new Uint8Array(digest)].map((value) => value.toString(16).padStart(2, "0")).join("");
172
- };
173
- const hmacHex = async (keyRaw, msg) => {
174
- const key = await crypto.subtle.importKey(
175
- "raw",
176
- encoder.encode(keyRaw),
177
- { name: "HMAC", hash: "SHA-256" },
178
- false,
179
- ["sign"]
180
- );
181
- const sig = await crypto.subtle.sign("HMAC", key, encoder.encode(msg));
182
- return [...new Uint8Array(sig)].map((value) => value.toString(16).padStart(2, "0")).join("");
183
- };
184
- const getDemoKey = async () => {
185
- const existing = localStorage.getItem("a11oy.demo-key");
186
- if (existing) return existing;
187
- const bytes = crypto.getRandomValues(new Uint8Array(32));
188
- const key = [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
189
- localStorage.setItem("a11oy.demo-key", key);
190
- return key;
191
- };
192
- const FIXTURE = {
193
- id: "acc-fixture-v1",
194
- version: "1.0.0",
195
- expiresAt: "2026-11-27T16:00:00Z",
196
- prohibited: ["shell.exec", "prod.write", "unsloth.codex"],
197
- tools: {
198
- "echo.ping": { allowed: true, cls: "NONE" },
199
- "receipt.inspect": { allowed: true, cls: "NONE" },
200
- "policy.propose": { allowed: true, cls: "NONE" },
201
- "shell.exec": { allowed: false, cls: "IRREVERSIBLE" },
202
- "prod.write": { allowed: false, cls: "IRREVERSIBLE" }
203
- }
204
- };
205
- const twinForm = document.getElementById("twin-form");
206
- if (twinForm) {
207
- twinForm.addEventListener("submit", async (event) => {
208
- event.preventDefault();
209
- const tool = document.getElementById("twin-tool").value;
210
- const arg = document.getElementById("twin-arg").value;
211
- const spec = FIXTURE.tools[tool];
212
- const expired = Date.parse(FIXTURE.expiresAt) < Date.now();
213
- let decision = "ALLOW";
214
- let reason = "Constitution admits the fixture.";
215
- if (expired) {
216
- decision = "DENY";
217
- reason = "Constitution expired. Authority that cannot go stale cannot be audited.";
218
- } else if (!spec) {
219
- decision = "DENY";
220
- reason = `Unknown tool ${tool}. Deny by default.`;
221
- } else if (!spec.allowed || FIXTURE.prohibited.includes(tool)) {
222
- decision = "DENY";
223
- reason = `${tool} is prohibited. Not in the trusted computing base of this slice.`;
224
- }
225
- let payload;
226
- if (decision === "ALLOW") {
227
- if (tool === "echo.ping") payload = { pong: arg || "ok", ts: new Date().toISOString() };
228
- else if (tool === "receipt.inspect") payload = { target: arg, intact: true };
229
- else payload = { proposal: arg, executed: false, note: "Propose never execute." };
230
- } else {
231
- payload = { denied: tool, reason };
232
- }
233
- const payloadStr = JSON.stringify(payload);
234
- const payloadHash = await sha256(payloadStr);
235
- const body = JSON.stringify({
236
- tool,
237
- decision,
238
- constitutionId: FIXTURE.id,
239
- constitutionVersion: FIXTURE.version,
240
- payloadHash
241
- });
242
- const receiptHash = await sha256(body);
243
- const signature = await hmacHex(await getDemoKey(), receiptHash);
244
- document.getElementById("twin-result").textContent = JSON.stringify({
245
- tool,
246
- decision,
247
- reason,
248
- payload,
249
- payloadHash,
250
- receiptHash,
251
- signature,
252
- signatureState: "DEMO_SIGNED",
253
- dsseEnvelope: "UNAVAILABLE",
254
- flightStatus: "LOCAL",
255
- blastRadius: spec && spec.cls === "NONE"
256
- ? "In-memory fixture only. No network, no disk, no prod."
257
- : "Would touch production. Refused in this slice."
258
- }, null, 2);
259
- });
260
- }
261
-
262
  const API = "/api/a11oy/v1/series-a";
263
  const EXECUTION_TIMEOUT_MS = 135000;
264
  const DEFAULT_TARGETS = {
@@ -292,11 +33,16 @@
292
  evaluationRevision += 1;
293
  resetExecution();
294
  };
 
 
 
 
 
295
  const request = async (path, options = {}, timeoutMs = 8000) => {
296
  const controller = new AbortController();
297
  const timer = setTimeout(() => controller.abort(), timeoutMs);
298
  try {
299
- const response = await fetch(API + path, { cache: "no-store", ...options, signal: controller.signal });
300
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
301
  return await response.json();
302
  } finally { clearTimeout(timer); }
@@ -331,14 +77,14 @@
331
  } : null;
332
  document.getElementById("updated").textContent = status.observed_at ? `Observed ${status.observed_at}` : status.detail || "Terminal state reached";
333
  const list = document.getElementById("receipts");
334
- list.replaceChildren(...(receipts.items || []).slice(0, 8).map((item) => {
335
  const li = document.createElement("li");
336
  li.textContent = `${item.kind} · ${item.receipt_hash.slice(0, 14)}… · ${item.envelope.signature_status}`;
337
  return li;
338
  }));
339
  if (!list.children.length) list.innerHTML = "<li>OBSERVED · no receipts yet</li>";
340
  } catch (error) {
341
- ["estate", "trust", "signer"].forEach((key) => set(key, error.name === "AbortError" ? "TIMED_OUT" : "UNAVAILABLE"));
342
  document.getElementById("updated").textContent = error.name === "AbortError" ? "Timed out after 8 seconds" : String(error.message || error);
343
  }
344
  };
@@ -352,7 +98,7 @@
352
  }
353
  const evaluated = await request("/passports/evaluate", {
354
  method: "POST",
355
- headers: { "content-type": "application/json" },
356
  body: JSON.stringify({
357
  principal_id: "series-a-ui",
358
  action: {
@@ -361,7 +107,7 @@
361
  impact: "MODERATE",
362
  irreversible: false
363
  },
364
- evidence: [{ ...currentEvidence }],
365
  expected_if_withheld: "Current estate observation remains unchanged",
366
  expected_if_acted: "A bounded governed estate refresh completes or fails closed"
367
  })
@@ -375,8 +121,8 @@
375
  }
376
  const value = await request("/passports/execute", {
377
  method: "POST",
378
- headers: { "content-type": "application/json" },
379
- body: JSON.stringify({ passport_digest: evaluated.passport_digest })
380
  }, EXECUTION_TIMEOUT_MS);
381
  if (value.outcome?.status !== "SUCCEEDED") {
382
  throw new Error(
@@ -414,14 +160,14 @@
414
  });
415
  const evidence = (
416
  selectedLabel === "OBSERVED" && currentEvidence
417
- ) ? [{ ...currentEvidence }] : [{
418
  evidence_id: "ui-unverified",
419
  label: "UNKNOWN",
420
  content_digest: await sha256(evidenceStatement)
421
  }];
422
  const body = {
423
  principal_id: "series-a-ui",
424
- action: { type: form.get("type"), target: form.get("target"), impact: "MODERATE", irreversible: false },
425
  evidence,
426
  expected_if_withheld: "Current state persists",
427
  expected_if_acted: "Bounded action completes or fails closed"
@@ -429,12 +175,12 @@
429
  const output = document.getElementById("passport-result");
430
  output.textContent = "EVALUATING";
431
  try {
432
- const value = await request("/passports/evaluate", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify(body) });
433
  if (revision !== evaluationRevision) {
434
  output.textContent = "STALE · form changed before evaluation completed";
435
  return;
436
  }
437
- output.textContent = JSON.stringify({ decision: value.passport.decision, reason_codes: value.passport.reason_codes, passport_digest: value.passport_digest, signature_status: value.decision_receipt.envelope.signature_status }, null, 2);
438
  if (value.passport.decision === "ALLOW") {
439
  executableDigest = value.passport_digest;
440
  executeButton.disabled = false;
@@ -463,9 +209,9 @@
463
  const value = await request(
464
  `/passports/outcomes/${encodeURIComponent(passportDigest)}`
465
  );
466
- return { outcome: value.outcome, receipt: value.outcome_receipt };
467
  } catch {}
468
- await new Promise((resolve) => setTimeout(resolve, 2000));
469
  }
470
  return null;
471
  };
@@ -478,8 +224,8 @@
478
  try {
479
  const value = await request("/passports/execute", {
480
  method: "POST",
481
- headers: { "content-type": "application/json" },
482
- body: JSON.stringify({ passport_digest: passportDigest })
483
  }, EXECUTION_TIMEOUT_MS);
484
  renderOutcome(value.outcome, value.outcome_receipt);
485
  } catch (error) {
@@ -505,7 +251,7 @@
505
  };
506
  if ("EventSource" in window) {
507
  const source = new EventSource(API + "/events");
508
- EVENT_KINDS.forEach((kind) => source.addEventListener(kind, appendEvent));
509
  source.addEventListener("open", () => {
510
  if (eventRail.firstElementChild?.textContent === "CONNECTING") {
511
  eventRail.firstElementChild.textContent = "CONNECTED · waiting for governed events";
 
1
  (() => {
2
  "use strict";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  const API = "/api/a11oy/v1/series-a";
4
  const EXECUTION_TIMEOUT_MS = 135000;
5
  const DEFAULT_TARGETS = {
 
33
  evaluationRevision += 1;
34
  resetExecution();
35
  };
36
+ const sha256 = async (text) => {
37
+ const bytes = new TextEncoder().encode(text);
38
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
39
+ return [...new Uint8Array(digest)].map(value => value.toString(16).padStart(2, "0")).join("");
40
+ };
41
  const request = async (path, options = {}, timeoutMs = 8000) => {
42
  const controller = new AbortController();
43
  const timer = setTimeout(() => controller.abort(), timeoutMs);
44
  try {
45
+ const response = await fetch(API + path, {cache: "no-store", ...options, signal: controller.signal});
46
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
47
  return await response.json();
48
  } finally { clearTimeout(timer); }
 
77
  } : null;
78
  document.getElementById("updated").textContent = status.observed_at ? `Observed ${status.observed_at}` : status.detail || "Terminal state reached";
79
  const list = document.getElementById("receipts");
80
+ list.replaceChildren(...(receipts.items || []).slice(0, 8).map(item => {
81
  const li = document.createElement("li");
82
  li.textContent = `${item.kind} · ${item.receipt_hash.slice(0, 14)}… · ${item.envelope.signature_status}`;
83
  return li;
84
  }));
85
  if (!list.children.length) list.innerHTML = "<li>OBSERVED · no receipts yet</li>";
86
  } catch (error) {
87
+ ["estate", "trust", "signer"].forEach(key => set(key, error.name === "AbortError" ? "TIMED_OUT" : "UNAVAILABLE"));
88
  document.getElementById("updated").textContent = error.name === "AbortError" ? "Timed out after 8 seconds" : String(error.message || error);
89
  }
90
  };
 
98
  }
99
  const evaluated = await request("/passports/evaluate", {
100
  method: "POST",
101
+ headers: {"content-type": "application/json"},
102
  body: JSON.stringify({
103
  principal_id: "series-a-ui",
104
  action: {
 
107
  impact: "MODERATE",
108
  irreversible: false
109
  },
110
+ evidence: [{...currentEvidence}],
111
  expected_if_withheld: "Current estate observation remains unchanged",
112
  expected_if_acted: "A bounded governed estate refresh completes or fails closed"
113
  })
 
121
  }
122
  const value = await request("/passports/execute", {
123
  method: "POST",
124
+ headers: {"content-type": "application/json"},
125
+ body: JSON.stringify({passport_digest: evaluated.passport_digest})
126
  }, EXECUTION_TIMEOUT_MS);
127
  if (value.outcome?.status !== "SUCCEEDED") {
128
  throw new Error(
 
160
  });
161
  const evidence = (
162
  selectedLabel === "OBSERVED" && currentEvidence
163
+ ) ? [{...currentEvidence}] : [{
164
  evidence_id: "ui-unverified",
165
  label: "UNKNOWN",
166
  content_digest: await sha256(evidenceStatement)
167
  }];
168
  const body = {
169
  principal_id: "series-a-ui",
170
+ action: {type: form.get("type"), target: form.get("target"), impact: "MODERATE", irreversible: false},
171
  evidence,
172
  expected_if_withheld: "Current state persists",
173
  expected_if_acted: "Bounded action completes or fails closed"
 
175
  const output = document.getElementById("passport-result");
176
  output.textContent = "EVALUATING";
177
  try {
178
+ const value = await request("/passports/evaluate", {method: "POST", headers: {"content-type": "application/json"}, body: JSON.stringify(body)});
179
  if (revision !== evaluationRevision) {
180
  output.textContent = "STALE · form changed before evaluation completed";
181
  return;
182
  }
183
+ output.textContent = JSON.stringify({decision: value.passport.decision, reason_codes: value.passport.reason_codes, passport_digest: value.passport_digest, signature_status: value.decision_receipt.envelope.signature_status}, null, 2);
184
  if (value.passport.decision === "ALLOW") {
185
  executableDigest = value.passport_digest;
186
  executeButton.disabled = false;
 
209
  const value = await request(
210
  `/passports/outcomes/${encodeURIComponent(passportDigest)}`
211
  );
212
+ return {outcome: value.outcome, receipt: value.outcome_receipt};
213
  } catch {}
214
+ await new Promise(resolve => setTimeout(resolve, 2000));
215
  }
216
  return null;
217
  };
 
224
  try {
225
  const value = await request("/passports/execute", {
226
  method: "POST",
227
+ headers: {"content-type": "application/json"},
228
+ body: JSON.stringify({passport_digest: passportDigest})
229
  }, EXECUTION_TIMEOUT_MS);
230
  renderOutcome(value.outcome, value.outcome_receipt);
231
  } catch (error) {
 
251
  };
252
  if ("EventSource" in window) {
253
  const source = new EventSource(API + "/events");
254
+ EVENT_KINDS.forEach(kind => source.addEventListener(kind, appendEvent));
255
  source.addEventListener("open", () => {
256
  if (eventRail.firstElementChild?.textContent === "CONNECTING") {
257
  eventRail.firstElementChild.textContent = "CONNECTED · waiting for governed events";
routers/series_a_web/index.html CHANGED
@@ -3,163 +3,56 @@
3
  <head>
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <meta name="theme-color" content="#080c14">
7
- <meta name="color-scheme" content="dark">
8
- <title>a11oy Series-A Command Center</title>
9
- <meta name="description" content="Control before action. Evidence after. Series-A command center on a-11-oy.com — keep-7 Hub estate, claims ledger, fixture constitution, signed passports. Proof lives at a11oy.net.">
10
- <link rel="canonical" href="https://a-11-oy.com/series-a">
11
  <link rel="stylesheet" href="/series-a/styles.css?v=__STYLE_ASSET_DIGEST__">
12
  </head>
13
  <body>
14
- <a class="skip" href="#main">Skip to command center</a>
15
- <header class="topbar">
16
- <div class="wrap nav">
17
- <a class="wordmark" href="https://a-11-oy.com/">
18
- <span class="glyph" aria-hidden="true">Λ</span>
19
- <span class="scope"><span class="scope-name">A11OY</span><span class="scope-sep">/</span><span class="scope-role">SERIES-A</span></span>
20
- </a>
21
- <div class="nav-chips">
22
- <span class="chip live"><span class="dot"></span>PRODUCT</span>
23
- <span class="chip honesty"><span class="dot"></span>DEMO_SIGNED · fixture</span>
24
- </div>
25
- <nav class="tabs" aria-label="Command views">
26
- <a href="#command" data-nav="command" aria-current="page">Command</a>
27
- <a href="#estate" data-nav="estate">Estate</a>
28
- <a href="#claims" data-nav="claims">Claims</a>
29
- <a href="#policy" data-nav="policy">Policy</a>
30
- <a href="#twin" data-nav="twin">Twin</a>
31
- <a href="#passport" data-nav="passport">Passport</a>
32
- <a href="#audit" data-nav="audit">Audit</a>
33
- </nav>
34
- <span class="origin-switch" aria-label="Origins">
35
- <a class="origin-product" href="https://a-11-oy.com/" aria-current="true">Product</a>
36
- <span class="origin-sep" aria-hidden="true">|</span>
37
- <a href="https://a11oy.net/" target="_blank" rel="noopener">Proof ↗</a>
38
- </span>
39
- </div>
40
  </header>
41
-
42
  <main id="main" tabindex="-1">
43
- <section class="toolbar wrap" aria-label="Live observation">
44
  <button id="refresh" type="button">Run governed refresh</button>
45
  <span id="updated" aria-live="polite">Not observed yet</span>
46
  </section>
47
-
48
- <section class="grid wrap" id="cards" aria-label="Live status">
49
  <article><h2>Estate</h2><strong data-key="estate">CHECKING</strong><p>Signed current observation.</p></article>
50
  <article><h2>GitHub repos</h2><strong data-key="repos">—</strong><p>Complete paginated census.</p></article>
51
  <article><h2>Open PRs</h2><strong data-key="prs">—</strong><p>Current public queue.</p></article>
52
- <article><h2>HF Spaces</h2><strong data-key="spaces">—</strong><p>Keep-7 public · rest private.</p></article>
53
  <article><h2>Models</h2><strong data-key="models">—</strong><p>Official Hub listing.</p></article>
54
  <article><h2>Datasets</h2><strong data-key="datasets">—</strong><p>Official Hub listing.</p></article>
55
  <article><h2>Trust factor</h2><strong data-key="trust">CHECKING</strong><p>Derived from signed local decisions.</p></article>
56
  <article><h2>Receipt signer</h2><strong data-key="signer">CHECKING</strong><p>Persistent P‑256 preferred.</p></article>
57
  </section>
58
-
59
- <section class="view wrap" data-view="command">
60
- <p class="eyebrow">Ninety seconds · Series‑A Live Control Plane</p>
61
- <h1>Control before action. <span class="muted">Evidence after.</span></h1>
62
- <p class="lede">Operators, security, and compliance who cannot take a model’s word for what it did. Four primitives sit in the path: Capability Constitution, Assurance Query Language, Operational Twin, Policy-to-Evidence Coverage Graph.</p>
63
- <dl class="facts">
64
- <div><dt>What is live</dt><dd>This origin is the product. Proof is a11oy.net. Hub keep-set is seven public Spaces; 38 are private and paused, never deleted. Receipts on the Twin tab from the fixture are DEMO_SIGNED. Passports below are the live Series-A controller.</dd></div>
65
- <div><dt>OSS vs product</dt><dd>Source github.com/szl-holdings/a11oy (Apache-2.0). Hugging Face is the artifact registry, not the front door.</dd></div>
66
- <div><dt>Why now</dt><dd>Agents are being handed tools. Ungoverned tool authority is the incident. Governance has to live in the path, not in a slide.</dd></div>
67
- </dl>
68
- </section>
69
-
70
- <section class="view wrap" data-view="estate" hidden>
71
- <p class="eyebrow">Hub consolidation · 2026-08-29</p>
72
- <h1>Seven public Spaces. Everything else private.</h1>
73
- <p class="lede">Product lives here. Proof lives at a11oy.net. Archive means pause and private — never delete. Product Space a11oy was not rebuilt as a different app.</p>
74
- <ul class="keep" id="keep-list"></ul>
75
- <p class="bound">38 extras private + paused. amaru / sentra / vessels / rosie do not exist as Spaces. Collection: canonical-public-spaces-7.</p>
76
- </section>
77
-
78
- <section class="view wrap" data-view="claims" hidden>
79
- <p class="eyebrow">P0 · Claims ledger</p>
80
- <h1>Every public number has a home.</h1>
81
- <p class="lede">Marketing copy reads this ledger. Default is UNKNOWN. Stale May 12 metrics stay SNAPSHOT.</p>
82
- <div class="table-wrap">
83
- <table class="ledger">
84
- <thead><tr><th>ID</th><th>Statement</th><th>Value</th><th>State</th></tr></thead>
85
- <tbody id="claims-body"></tbody>
86
- </table>
87
- </div>
88
- <h2 class="sub">Contradictions</h2>
89
- <ul class="keep" id="ctr-list"></ul>
90
- </section>
91
-
92
- <section class="view wrap" data-view="policy" hidden>
93
- <p class="eyebrow">acc-fixture-v1 · expires 2026-11-27</p>
94
- <h1>Authority that cannot expire cannot be audited.</h1>
95
- <p class="lede">Two-person mode. Writes per run: 0. Prohibited: shell.exec, prod.write, unsloth.codex. This constitution is the fixture slice, not a production MCP gateway.</p>
96
- <ul class="keep" id="tools-list"></ul>
97
- </section>
98
-
99
- <section class="view wrap" data-view="twin" hidden>
100
- <p class="eyebrow">Operational Twin · fixture</p>
101
- <h1>Preview the blast radius. Then maybe act.</h1>
102
- <p class="lede">Safe fixture only. Signatures here are DEMO_SIGNED HMAC in the browser. DSSE is UNAVAILABLE. The live passport on the next tab is the product controller.</p>
103
- <form id="twin-form" class="twin">
104
- <label>Tool
105
- <select id="twin-tool" name="tool">
106
- <option value="echo.ping">echo.ping · NONE · admitted</option>
107
- <option value="receipt.inspect">receipt.inspect · NONE · admitted</option>
108
- <option value="policy.propose">policy.propose · NONE · operator</option>
109
- <option value="shell.exec">shell.exec · IRREVERSIBLE · prohibited</option>
110
- <option value="prod.write">prod.write · IRREVERSIBLE · prohibited</option>
111
- </select>
112
  </label>
113
- <label>Ping / proposal <input id="twin-arg" name="arg" value="fabric-ok"></label>
114
- <button type="submit">Execute fixture</button>
 
 
115
  </form>
116
- <pre id="twin-result" aria-live="polite">No fixture receipt yet.</pre>
 
 
117
  </section>
118
-
119
- <section class="view wrap" data-view="passport" hidden>
120
- <div class="panel">
121
- <h2>Counterfactual Action Passport</h2>
122
- <p>Live product controller. GET never mutates. Refresh, evaluate, and execute are explicit POSTs. One attempt. Fail closed.</p>
123
- <form id="passport">
124
- <label>Action
125
- <select name="type"><option value="estate.refresh">Refresh estate truth</option><option value="probe.public_surface">Probe public surface</option></select>
126
- </label>
127
- <label>Target <input name="target" value="szl://estate/current" required></label>
128
- <label>Evidence label <select name="label"><option value="OBSERVED">OBSERVED · server-signed snapshot</option><option value="UNKNOWN">UNKNOWN · fail-closed demo</option></select></label>
129
- <button type="submit">Evaluate passport</button>
130
- <button id="execute" type="button" disabled>Execute authorized action</button>
131
- </form>
132
- <pre id="passport-result" aria-live="polite">No passport evaluated.</pre>
133
- <pre id="execution-result" aria-live="polite">No authorized execution attempted.</pre>
134
- <p>Execution is bounded to one attempt and is enabled only for an ALLOW passport.</p>
135
- </div>
136
- <div class="panel">
137
- <h2>Live event rail</h2>
138
- <ol id="events" aria-live="polite"><li>CONNECTING</li></ol>
139
- </div>
140
- <div class="panel">
141
- <h2>Latest signed receipts</h2>
142
- <ol id="receipts"><li>CHECKING</li></ol>
143
- </div>
144
  </section>
145
-
146
- <section class="view wrap" data-view="audit" hidden>
147
- <p class="eyebrow">FRONTIER_BASELINE_AUDIT</p>
148
- <h1>Inventory before abstraction.</h1>
149
- <ul class="keep" id="audit-list"></ul>
150
  </section>
151
  </main>
152
- <footer>
153
- <div class="wrap footer">
154
- <p>MEASURED · REPORTED · MODELED · UNKNOWN · UNAVAILABLE · no private reasoning collected. Never a11oy.com.</p>
155
- <div class="footer-links">
156
- <a href="https://a-11-oy.com/console">Console</a>
157
- <a href="https://a-11-oy.com/api/a11oy/v1/honest">/honest</a>
158
- <a href="https://a11oy.net/estate/">Proof estate</a>
159
- <a href="https://github.com/szl-holdings/a11oy">Source</a>
160
- </div>
161
- </div>
162
- </footer>
163
  <script src="/series-a/app.js?v=__APP_ASSET_DIGEST__" defer></script>
164
  </body>
165
  </html>
 
3
  <head>
4
  <meta charset="utf-8">
5
  <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>A11oy Series-A Live Control Plane</title>
 
 
 
 
7
  <link rel="stylesheet" href="/series-a/styles.css?v=__STYLE_ASSET_DIGEST__">
8
  </head>
9
  <body>
10
+ <a class="skip" href="#main">Skip to control plane</a>
11
+ <header>
12
+ <p class="eyebrow">A11OY · ACTION ASSURANCE</p>
13
+ <h1>Series‑A Live Control Plane</h1>
14
+ <p>Current estate truth, counterfactual action passports, signed receipts, and one-attempt execution—observed, not assumed.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  </header>
 
16
  <main id="main" tabindex="-1">
17
+ <section class="toolbar" aria-label="Control plane actions">
18
  <button id="refresh" type="button">Run governed refresh</button>
19
  <span id="updated" aria-live="polite">Not observed yet</span>
20
  </section>
21
+ <section class="grid" id="cards" aria-label="Live status">
 
22
  <article><h2>Estate</h2><strong data-key="estate">CHECKING</strong><p>Signed current observation.</p></article>
23
  <article><h2>GitHub repos</h2><strong data-key="repos">—</strong><p>Complete paginated census.</p></article>
24
  <article><h2>Open PRs</h2><strong data-key="prs">—</strong><p>Current public queue.</p></article>
25
+ <article><h2>HF Spaces</h2><strong data-key="spaces">—</strong><p>One canonical A11oy required.</p></article>
26
  <article><h2>Models</h2><strong data-key="models">—</strong><p>Official Hub listing.</p></article>
27
  <article><h2>Datasets</h2><strong data-key="datasets">—</strong><p>Official Hub listing.</p></article>
28
  <article><h2>Trust factor</h2><strong data-key="trust">CHECKING</strong><p>Derived from signed local decisions.</p></article>
29
  <article><h2>Receipt signer</h2><strong data-key="signer">CHECKING</strong><p>Persistent P‑256 preferred.</p></article>
30
  </section>
31
+ <section class="panel">
32
+ <h2>Counterfactual Action Passport</h2>
33
+ <form id="passport">
34
+ <label>Action
35
+ <select name="type"><option value="estate.refresh">Refresh estate truth</option><option value="probe.public_surface">Probe public surface</option></select>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  </label>
37
+ <label>Target <input name="target" value="szl://estate/current" required></label>
38
+ <label>Evidence label <select name="label"><option value="OBSERVED">OBSERVED · server-signed snapshot</option><option value="UNKNOWN">UNKNOWN · fail-closed demo</option></select></label>
39
+ <button type="submit">Evaluate passport</button>
40
+ <button id="execute" type="button" disabled>Execute authorized action</button>
41
  </form>
42
+ <pre id="passport-result" aria-live="polite">No passport evaluated.</pre>
43
+ <pre id="execution-result" aria-live="polite">No authorized execution attempted.</pre>
44
+ <p>Execution is bounded to one attempt and is enabled only for an ALLOW passport.</p>
45
  </section>
46
+ <section class="panel">
47
+ <h2>Live event rail</h2>
48
+ <ol id="events" aria-live="polite"><li>CONNECTING</li></ol>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  </section>
50
+ <section class="panel">
51
+ <h2>Latest signed receipts</h2>
52
+ <ol id="receipts"><li>CHECKING</li></ol>
 
 
53
  </section>
54
  </main>
55
+ <footer>MEASURED · REPORTED · MODELED · UNKNOWN · UNAVAILABLE · no private reasoning collected</footer>
 
 
 
 
 
 
 
 
 
 
56
  <script src="/series-a/app.js?v=__APP_ASSET_DIGEST__" defer></script>
57
  </body>
58
  </html>
routers/series_a_web/styles.css CHANGED
@@ -1,91 +1 @@
1
- :root{
2
- color-scheme:dark;
3
- --void:#080c14;
4
- --deep:#0a1019;
5
- --surface:#0e1626;
6
- --card:#121d30;
7
- --border:#1c2942;
8
- --ink:#eef4fb;
9
- --muted:#aebccf;
10
- --ghost:#7f90a6;
11
- --proof:#3af4c8;
12
- --lattice:#5b8dee;
13
- --gold:#d7b96b;
14
- --down:#e8746e;
15
- --sans:"Space Grotesk",-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,sans-serif;
16
- --mono:"JetBrains Mono","SF Mono",ui-monospace,Menlo,Consolas,monospace;
17
- }
18
- *{box-sizing:border-box}
19
- html,body{margin:0;min-height:100%;background:var(--void);color:var(--ink);font:16px/1.5 var(--sans)}
20
- a{color:var(--proof);text-decoration:none}
21
- a:hover{text-decoration:underline}
22
- .skip{position:absolute;left:-9999px}
23
- .skip:focus{left:1rem;top:1rem;background:var(--proof);color:var(--void);padding:.7rem;z-index:9}
24
- .wrap{width:min(1180px,calc(100% - 2rem));margin-inline:auto}
25
- .topbar{position:sticky;top:0;z-index:10;border-bottom:1px solid var(--border);background:rgba(8,12,20,.92);backdrop-filter:blur(10px)}
26
- .nav{display:flex;flex-wrap:wrap;gap:.75rem 1rem;align-items:center;padding:.75rem 0}
27
- .wordmark{display:inline-flex;align-items:center;gap:.6rem;color:var(--ink);font-weight:700}
28
- .glyph{width:26px;height:26px;border-radius:7px;border:1px solid var(--border);display:grid;place-items:center;color:var(--ghost);font-family:var(--mono)}
29
- .scope-role{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:var(--ghost)}
30
- .scope-sep{color:var(--ghost);padding:0 .35rem}
31
- .nav-chips{display:flex;gap:.5rem;flex-wrap:wrap}
32
- .chip{display:inline-flex;align-items:center;gap:7px;padding:5px 11px;border-radius:999px;font:600 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--border);color:var(--ghost)}
33
- .chip .dot{width:7px;height:7px;border-radius:50%;background:currentColor}
34
- .chip.live{color:var(--proof);border-color:rgba(58,244,200,.32)}
35
- .chip.honesty{color:var(--ghost)}
36
- .tabs{display:flex;gap:.2rem;flex-wrap:wrap;flex:1}
37
- .tabs a{color:var(--muted);padding:.55rem .7rem;border-radius:8px;min-height:44px;display:inline-flex;align-items:center}
38
- .tabs a[aria-current="page"]{color:var(--ink);background:var(--card)}
39
- .origin-switch{display:inline-flex;align-items:center;gap:7px;padding-left:12px;border-left:1px solid var(--border);font-family:var(--mono);font-size:12px}
40
- .origin-product{color:var(--proof);font-weight:700}
41
- .origin-sep{color:var(--ghost)}
42
- .toolbar{display:flex;gap:1rem;align-items:center;justify-content:space-between;margin:1.2rem auto}
43
- .grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem}
44
- .grid article,.panel{background:linear-gradient(180deg,rgba(18,34,57,.96),rgba(10,22,38,.96));border:1px solid var(--border);border-radius:16px;padding:1.1rem}
45
- .grid h2,.panel h2{font-size:.92rem;color:var(--muted);margin:0 0 .5rem;font-weight:600}
46
- .grid strong{font-size:1.55rem;color:var(--proof);font-variant-numeric:tabular-nums}
47
- .grid p,.panel>p,.lede,.bound,.muted{color:var(--muted)}
48
- .view{padding:1.5rem 0 3rem}
49
- .view[hidden]{display:none!important}
50
- .view[data-view="passport"]:not([hidden]){display:grid;gap:1rem}
51
- .eyebrow{font:600 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ghost);margin:0 0 .6rem}
52
- h1{font-size:clamp(2rem,5vw,3.4rem);line-height:1.08;margin:.2rem 0 1rem;letter-spacing:-.02em}
53
- .lede{max-width:44rem;font-size:1.05rem}
54
- .facts{display:grid;gap:1.1rem;margin:2rem 0 0}
55
- .facts dt{font:600 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ghost)}
56
- .facts dd{margin:.4rem 0 0}
57
- .keep{list-style:none;padding:0;margin:1.2rem 0;display:grid;gap:.55rem}
58
- .keep li{border:1px solid var(--border);border-radius:12px;padding:.85rem 1rem;display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;align-items:center;min-height:44px}
59
- .keep .id{font-family:var(--mono);font-size:.92rem}
60
- .badge{font:600 10px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--border);padding:.3rem .45rem;border-radius:4px;color:var(--ghost)}
61
- .badge.live{color:var(--proof);border-color:rgba(58,244,200,.3)}
62
- .badge.snapshot{color:var(--gold);border-color:rgba(215,185,107,.35)}
63
- .badge.unknown{color:var(--ghost)}
64
- .badge.blocker{color:var(--down);border-color:rgba(232,116,110,.4)}
65
- .table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:14px}
66
- .ledger{width:100%;min-width:640px;border-collapse:collapse;font-size:.92rem}
67
- .ledger th{text-align:left;font:600 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ghost);padding:.8rem;background:var(--card)}
68
- .ledger td{padding:.8rem;border-top:1px solid var(--border);vertical-align:top}
69
- .sub{margin:2rem 0 .8rem;font-size:1.2rem}
70
- .twin,.panel form{display:grid;grid-template-columns:1fr 2fr auto;gap:.8rem;align-items:end}
71
- label{display:grid;gap:.35rem;color:var(--muted);font-size:.92rem}
72
- input,select,button{font:inherit;border-radius:10px;border:1px solid var(--border);padding:.75rem .85rem;background:var(--deep);color:var(--ink);min-height:44px}
73
- button{background:var(--proof);color:var(--void);font-weight:800;cursor:pointer}
74
- button:disabled{opacity:.55;cursor:not-allowed}
75
- pre{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--deep);border-radius:12px;padding:1rem;border:1px solid var(--border);font:13px/1.45 var(--mono)}
76
- #events,#receipts{display:grid;gap:.55rem;padding-left:1.4rem}
77
- #events li,#receipts li{overflow-wrap:anywhere}
78
- .footer{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:2rem 0 4rem;color:var(--muted);font-size:.9rem}
79
- .footer-links{display:flex;gap:1rem;flex-wrap:wrap}
80
- @media(max-width:900px){
81
- .grid{grid-template-columns:repeat(2,minmax(0,1fr))}
82
- .twin,.panel form{grid-template-columns:1fr}
83
- .origin-switch{border-left:0;padding-left:0;width:100%}
84
- }
85
- @media(max-width:560px){
86
- .grid{grid-template-columns:1fr}
87
- .tabs a{flex:1;justify-content:center}
88
- }
89
- @media (prefers-reduced-motion:reduce){
90
- *{animation:none!important;transition:none!important}
91
- }
 
1
+ :root{color-scheme:dark;--bg:#07101e;--card:#0d192a;--line:#24344d;--text:#eef5ff;--muted:#9db0c9;--accent:#83d6ff;--good:#7ce7ba}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at top,#13223a 0,#07101e 42%);color:var(--text);font:16px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}.skip{position:absolute;left:-9999px}.skip:focus{left:1rem;top:1rem;background:white;color:black;padding:.7rem;z-index:5}header,main,footer{width:min(1180px,calc(100% - 2rem));margin:auto}header{padding:4rem 0 2rem}.eyebrow{color:var(--accent);letter-spacing:.16em;font-weight:800}h1{font-size:clamp(2.2rem,6vw,5rem);line-height:1;margin:.3rem 0}header>p:last-child{max-width:760px;color:var(--muted);font-size:1.12rem}.toolbar{display:flex;gap:1rem;align-items:center;justify-content:space-between;margin-bottom:1rem}.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem}.grid article,.panel{background:linear-gradient(180deg,rgba(18,34,57,.96),rgba(10,22,38,.96));border:1px solid var(--line);border-radius:18px;padding:1.2rem;box-shadow:0 16px 60px rgba(0,0,0,.25)}.grid h2{font-size:.92rem;color:var(--muted);margin:0 0 .5rem}.grid strong{font-size:1.7rem;color:var(--good)}.grid p,.panel>p{color:var(--muted);margin:.4rem 0 0}.panel{margin-top:1rem}form{display:grid;grid-template-columns:1fr 2fr 1fr auto auto;gap:.8rem;align-items:end}label{display:grid;gap:.35rem;color:var(--muted)}input,select,button{font:inherit;border-radius:10px;border:1px solid var(--line);padding:.7rem .8rem;background:#071321;color:var(--text)}button{background:#dff5ff;color:#06101b;font-weight:800;cursor:pointer}button:disabled{opacity:.55}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#06101b;border-radius:12px;padding:1rem}#events,#receipts{display:grid;gap:.55rem;padding-left:1.4rem}#events li,#receipts li{overflow-wrap:anywhere}footer{padding:2rem 0 4rem;color:var(--muted)}@media(max-width:900px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}form{grid-template-columns:1fr 1fr}}@media(max-width:560px){header{padding-top:2.5rem}.grid,form{grid-template-columns:1fr}.toolbar{align-items:flex-start;flex-direction:column}.grid article{min-height:130px}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
szl_hub.py CHANGED
@@ -106,6 +106,7 @@ TABS = [
106
  {"route": "/audit", "name": "Audit", "purpose": "Khipu DAG visualizer across ALL flagships (the Greene trick)", "source": "this-pass", "status": "GREEN"},
107
  {"route": "/gap-report", "name": "Gap Report", "purpose": "Live gap-audit heatmap (partial-public)", "source": "completeness_audit", "status": "GREEN"},
108
  {"route": "/hub", "name": "Hub Index", "purpose": "One front door linking every tab", "source": "this-pass", "status": "GREEN"},
 
109
  ]
110
 
111
  # DoD Group 1–5 reference (ADVERSARY_DRONE_CATALOG.md §1).
@@ -451,7 +452,7 @@ def register(app: FastAPI) -> None:
451
  ("/security", "security"), ("/compliance", "compliance"),
452
  ("/cued-engagement", "cued-engagement"), ("/uds", "uds"),
453
  ("/counter-uas", "counter-uas"), ("/audit", "audit"),
454
- ("/gap-report", "gap-report"), ("/hub", "hub"),
455
  ]:
456
  app.add_api_route(route, _page(fname), methods=["GET"], include_in_schema=False)
457
 
 
106
  {"route": "/audit", "name": "Audit", "purpose": "Khipu DAG visualizer across ALL flagships (the Greene trick)", "source": "this-pass", "status": "GREEN"},
107
  {"route": "/gap-report", "name": "Gap Report", "purpose": "Live gap-audit heatmap (partial-public)", "source": "completeness_audit", "status": "GREEN"},
108
  {"route": "/hub", "name": "Hub Index", "purpose": "One front door linking every tab", "source": "this-pass", "status": "GREEN"},
109
+ {"route": "/atelier", "name": "Atelier", "purpose": "Artifact walk of Hub cuts. Not 40 product SKUs. Not a fourth flagship.", "source": "szl-atelier", "status": "GREEN"},
110
  ]
111
 
112
  # DoD Group 1–5 reference (ADVERSARY_DRONE_CATALOG.md §1).
 
452
  ("/security", "security"), ("/compliance", "compliance"),
453
  ("/cued-engagement", "cued-engagement"), ("/uds", "uds"),
454
  ("/counter-uas", "counter-uas"), ("/audit", "audit"),
455
+ ("/gap-report", "gap-report"), ("/hub", "hub"), ("/atelier", "atelier"),
456
  ]:
457
  app.add_api_route(route, _page(fname), methods=["GET"], include_in_schema=False)
458
 
web/immune.html CHANGED
@@ -103,9 +103,86 @@ code{font-family:var(--mono);color:var(--teal);}
103
  .kv .v,.digest{overflow-wrap:anywhere;word-break:break-word;}
104
  }
105
  @media(prefers-reduced-motion:reduce){.live-dot{animation:none;}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  </style>
107
  </head>
108
  <body>
 
 
 
 
 
 
109
  <div class="topbar">
110
  <span>SZL HOLDINGS</span><span class="sep">/</span><span>a11oy</span>
111
  <span class="live"><span class="live-dot" id="liveDot"></span><span id="liveTag" aria-live="polite">IMMUNE · CONNECTING</span></span>
@@ -281,6 +358,7 @@ function connectionState(state,reachable){
281
  dot.className="live-dot"+(ready?" ready":reachable?"":" error");
282
  document.getElementById("liveTag").textContent="IMMUNE · "+(reachable?normalized:"UNAVAILABLE");
283
  document.getElementById("organBadge").textContent=ready?"deny-by-default · backend reported "+normalized.toLowerCase():"deny-by-default · evidence "+(reachable?normalized.toLowerCase():"unavailable");
 
284
  return {normalized,ready};
285
  }
286
  function requestFailure(result){
@@ -335,7 +413,8 @@ async function loadFeed(){
335
  const tb = document.querySelector("#feedTable tbody");
336
  if(!result.ok||!result.data||!Array.isArray(result.data.verdicts)){tb.innerHTML='<tr><td class="mono" colspan="5">'+esc(requestFailure(result))+'</td></tr>';return;}
337
  const f=result.data;
338
- if(!f.verdicts.length){tb.innerHTML='<tr><td class="mono" colspan="5">IDLE — no verdicts buffered (resets on restart)</td></tr>';return;}
 
339
  tb.innerHTML = f.verdicts.map(v=>
340
  '<tr><td>'+esc((v.timestamp||"").slice(11,19))+'</td>'+
341
  '<td class="'+esc(v.decision)+'">'+esc(v.decision)+'</td>'+
@@ -396,7 +475,7 @@ function kernelAuthorityLabel(s){
396
  return null;
397
  }
398
 
399
- async function loadKernel(){
400
  const result = await requestJSON(BASE + "/kernel");
401
  const kv = document.getElementById("kernelKv");
402
  const s = result.data||{};
@@ -418,6 +497,7 @@ async function loadKernel(){
418
  row("ledger",s.ledger)+
419
  row("channel A",s.channel_a&&s.channel_a.space)+
420
  row("channel B",s.channel_b&&s.channel_b.space)+
 
421
  row("error",s.error||(!result.ok?requestFailure(result):null))+
422
  row("observed at",s.fetchedAt||s.observed_at)+
423
  '<div><span class="k">kernel</span><span class="pill '+(reach==="REACHABLE"?(writeReady?"green":"yellow"):"red")+'">'+esc(reach+(writeReady?" · WRITE-READY":""))+'</span></div>';
@@ -466,6 +546,7 @@ async function loadField(){
466
  row("rule",s.rule)+
467
  row("cells",typeof s.cell_count==="number"?String(s.cell_count):null)+
468
  row("channel",s.space)+
 
469
  row("error",s.error||(!result.ok?requestFailure(result):null))+
470
  row("observed at",s.fetchedAt||s.observed_at)+
471
  '<div><span class="k">field</span><span class="pill '+(reach==="REACHABLE"?"green":"red")+'">'+esc(reach)+'</span></div>';
@@ -482,11 +563,244 @@ document.getElementById("embedFieldBtn").addEventListener("click",function(){
482
  this.textContent="Lattice embedded";
483
  });
484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  async function loadAll(){ await Promise.all([loadStatus(),loadGates(),loadFeed(),loadKernel(),loadField()]); }
486
  loadAll();
487
  setInterval(loadStatus, 8000);
488
  setInterval(loadKernel, 8000);
489
  setInterval(loadField, 8000);
 
490
  </script>
491
  </body>
492
  </html>
 
103
  .kv .v,.digest{overflow-wrap:anywhere;word-break:break-word;}
104
  }
105
  @media(prefers-reduced-motion:reduce){.live-dot{animation:none;}}
106
+
107
+ /* —— IMMUNE command-center HUD (0-CDN canvas lattice) —— */
108
+ :root{
109
+ --void:#080c14; --proof:#3af4c8; --lattice:#5b8dee; --kanchay-gold:#d7b96b;
110
+ }
111
+ html,body{background:var(--void);overflow-x:hidden;}
112
+ body{
113
+ background:
114
+ radial-gradient(1200px 800px at 72% -8%, #12203a 0%, transparent 58%),
115
+ radial-gradient(900px 700px at 8% 12%, #0c1a28 0%, transparent 52%),
116
+ var(--void);
117
+ }
118
+ #latticeGlobe{position:fixed;inset:0;width:100%;height:100%;z-index:0;display:block;pointer-events:auto;}
119
+ .scanlines,.vignette,.hologrid{position:fixed;inset:0;pointer-events:none;z-index:1;}
120
+ .scanlines{background:repeating-linear-gradient(180deg,transparent 0 2px,rgba(0,0,0,.12) 2px 3px);opacity:.35;}
121
+ .vignette{background:radial-gradient(ellipse at center,transparent 40%,rgba(0,0,0,.55) 100%);}
122
+ .hologrid{
123
+ background-image:
124
+ linear-gradient(rgba(91,141,238,.06) 1px,transparent 1px),
125
+ linear-gradient(90deg,rgba(91,141,238,.06) 1px,transparent 1px);
126
+ background-size:48px 48px;
127
+ opacity:.55;mask-image:radial-gradient(ellipse at 50% 42%,#000 20%,transparent 72%);
128
+ }
129
+ .topbar{background:rgba(8,12,20,.88);}
130
+ .wrap{position:relative;z-index:2;}
131
+ .card,.panel{
132
+ background:linear-gradient(180deg,rgba(10,20,40,.82),rgba(7,11,22,.76));
133
+ backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
134
+ border-color:rgba(91,141,238,.28);
135
+ box-shadow:0 18px 50px -22px #000;
136
+ }
137
+ .card .big{color:var(--proof);}
138
+ .hud-orbit{
139
+ position:relative;min-height:42vh;margin:0 0 1.2rem;
140
+ display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;
141
+ pointer-events:none;
142
+ }
143
+ .hud-orbit .hint{
144
+ pointer-events:none;font-family:var(--mono);font-size:10px;letter-spacing:.14em;
145
+ text-transform:uppercase;color:var(--dim);
146
+ border:1px solid rgba(91,141,238,.28);background:rgba(8,12,20,.7);
147
+ padding:.45rem .7rem;border-radius:6px;
148
+ }
149
+ .hud-orbit .chips{display:flex;gap:.45rem;flex-wrap:wrap;pointer-events:auto;}
150
+ .chip{
151
+ display:inline-flex;align-items:center;gap:.4rem;padding:.28rem .65rem;border-radius:999px;
152
+ font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;
153
+ border:1px solid var(--gold-line);color:var(--muted);background:rgba(8,12,20,.72);
154
+ }
155
+ .chip .dot{width:7px;height:7px;border-radius:50%;background:var(--warn);box-shadow:0 0 8px var(--warn);}
156
+ .chip.ok{color:var(--proof);border-color:rgba(58,244,200,.4);}
157
+ .chip.ok .dot{background:var(--proof);box-shadow:0 0 8px var(--proof);}
158
+ .chip.bad{color:var(--red);border-color:rgba(255,106,90,.4);}
159
+ .chip.bad .dot{background:var(--red);box-shadow:none;}
160
+ .chip.wait .dot{background:var(--warn);}
161
+ .cc-title{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
162
+ .cc-kicker{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--proof);margin:0 0 .35rem;}
163
+ .node-tip{
164
+ position:fixed;z-index:70;display:none;pointer-events:none;
165
+ font-family:var(--mono);font-size:11px;color:var(--cream);
166
+ background:rgba(8,12,20,.92);border:1px solid rgba(91,141,238,.4);
167
+ padding:.45rem .65rem;border-radius:6px;letter-spacing:.04em;
168
+ }
169
+ @media(prefers-reduced-motion:reduce){.scanlines{display:none;}}
170
+
171
+
172
+ .wrap{pointer-events:none;}
173
+ .wrap .card,.wrap .panel,.wrap .lede,.wrap h1,.wrap .cc-kicker,.wrap .kernel-actions,.wrap .footnote,.wrap .badge,.wrap .preset,.wrap textarea,.wrap input,.wrap button,.wrap a,.wrap .chips,.wrap .table-scroll,.wrap .verdict-box,.wrap .simnote,.wrap .kv{pointer-events:auto;}
174
+ .hud-orbit{min-height:46vh;}
175
+ .lede{font-size:.86rem;max-height:7.4em;overflow:auto;padding-right:.4rem;}
176
+
177
  </style>
178
  </head>
179
  <body>
180
+
181
+ <canvas id="latticeGlobe" aria-hidden="true"></canvas>
182
+ <div class="hologrid" aria-hidden="true"></div>
183
+ <div class="scanlines" aria-hidden="true"></div>
184
+ <div class="vignette" aria-hidden="true"></div>
185
+ <div class="node-tip" id="nodeTip"></div>
186
  <div class="topbar">
187
  <span>SZL HOLDINGS</span><span class="sep">/</span><span>a11oy</span>
188
  <span class="live"><span class="live-dot" id="liveDot"></span><span id="liveTag" aria-live="polite">IMMUNE · CONNECTING</span></span>
 
358
  dot.className="live-dot"+(ready?" ready":reachable?"":" error");
359
  document.getElementById("liveTag").textContent="IMMUNE · "+(reachable?normalized:"UNAVAILABLE");
360
  document.getElementById("organBadge").textContent=ready?"deny-by-default · backend reported "+normalized.toLowerCase():"deny-by-default · evidence "+(reachable?normalized.toLowerCase():"unavailable");
361
+ if(window.__immuneBind) window.__immuneBind({organ:reachable?normalized:"UNAVAILABLE"});
362
  return {normalized,ready};
363
  }
364
  function requestFailure(result){
 
413
  const tb = document.querySelector("#feedTable tbody");
414
  if(!result.ok||!result.data||!Array.isArray(result.data.verdicts)){tb.innerHTML='<tr><td class="mono" colspan="5">'+esc(requestFailure(result))+'</td></tr>';return;}
415
  const f=result.data;
416
+ if(!f.verdicts.length){tb.innerHTML='<tr><td class="mono" colspan="5">IDLE — no verdicts buffered (resets on restart)</td></tr>';if(window.__immuneBind) window.__immuneBind({feed:[]});return;}
417
+ if(window.__immuneBind) window.__immuneBind({feed:f.verdicts});
418
  tb.innerHTML = f.verdicts.map(v=>
419
  '<tr><td>'+esc((v.timestamp||"").slice(11,19))+'</td>'+
420
  '<td class="'+esc(v.decision)+'">'+esc(v.decision)+'</td>'+
 
475
  return null;
476
  }
477
 
478
+ async function loadKernel(){ /* command-center bind after paint */
479
  const result = await requestJSON(BASE + "/kernel");
480
  const kv = document.getElementById("kernelKv");
481
  const s = result.data||{};
 
497
  row("ledger",s.ledger)+
498
  row("channel A",s.channel_a&&s.channel_a.space)+
499
  row("channel B",s.channel_b&&s.channel_b.space)+
500
+ (window.__immuneBind&&window.__immuneBind({kernelReach:reach}),'')+
501
  row("error",s.error||(!result.ok?requestFailure(result):null))+
502
  row("observed at",s.fetchedAt||s.observed_at)+
503
  '<div><span class="k">kernel</span><span class="pill '+(reach==="REACHABLE"?(writeReady?"green":"yellow"):"red")+'">'+esc(reach+(writeReady?" · WRITE-READY":""))+'</span></div>';
 
546
  row("rule",s.rule)+
547
  row("cells",typeof s.cell_count==="number"?String(s.cell_count):null)+
548
  row("channel",s.space)+
549
+ (window.__immuneBind&&window.__immuneBind({fieldReach:reach,cells:cells}),'')+
550
  row("error",s.error||(!result.ok?requestFailure(result):null))+
551
  row("observed at",s.fetchedAt||s.observed_at)+
552
  '<div><span class="k">field</span><span class="pill '+(reach==="REACHABLE"?"green":"red")+'">'+esc(reach)+'</span></div>';
 
563
  this.textContent="Lattice embedded";
564
  });
565
 
566
+ /* —— 0-CDN canvas lattice globe (command center). Status is observed, never invented. —— */
567
+ (function(){
568
+ const canvas = document.getElementById("latticeGlobe");
569
+ if(!canvas) return;
570
+ const ctx = canvas.getContext("2d");
571
+ if(!ctx){ canvas.style.display="none"; return; }
572
+ const tip = document.getElementById("nodeTip");
573
+ const reduce = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
574
+ let rot = 0.55, tilt = 0.32, auto = !reduce, dragging = false, lastX = 0, lastY = 0, raf = 0, last = performance.now();
575
+ const hits = [];
576
+ const state = {
577
+ kernel: "CONNECTING",
578
+ field: "CONNECTING",
579
+ organ: "CONNECTING",
580
+ cells: [],
581
+ feed: []
582
+ };
583
+
584
+ const ORGANS = [
585
+ {id:"sentra", label:"SENTRA", lat:18, lon:-40, kind:"organ"},
586
+ {id:"yawar", label:"YAWAR", lat:8, lon:20, kind:"organ"},
587
+ {id:"huklla", label:"HUKLLA", lat:-12, lon:70, kind:"organ"},
588
+ {id:"kernel", label:"CHANNEL A", lat:32, lon:-100, kind:"kernel"},
589
+ {id:"field", label:"CHANNEL B", lat:-28, lon:130, kind:"field"},
590
+ {id:"mesh", label:"MESH 3-of-4", lat:42, lon:50, kind:"mesh"},
591
+ {id:"exile", label:"RANGE.CLOUD.EXILE", lat:-36, lon:-20, kind:"cell"}
592
+ ];
593
+
594
+ function project(lat, lon, r){
595
+ const la = lat * Math.PI / 180;
596
+ const lo = lon * Math.PI / 180 + rot;
597
+ const x = Math.cos(la) * Math.sin(lo);
598
+ const y = Math.sin(la);
599
+ const z = Math.cos(la) * Math.cos(lo);
600
+ const yt = y * Math.cos(tilt) - z * Math.sin(tilt);
601
+ const zt = y * Math.sin(tilt) + z * Math.cos(tilt);
602
+ return {x: x * r, y: -yt * r, z: zt, visible: zt > -0.05};
603
+ }
604
+ function accent(){
605
+ if(state.kernel === "UNAVAILABLE" && state.field === "UNAVAILABLE") return "#ff6a5a";
606
+ if(state.kernel === "REACHABLE") return "#3af4c8";
607
+ return "#d7b96b";
608
+ }
609
+ function nodeColor(n){
610
+ if(n.kind === "kernel") return state.kernel === "REACHABLE" ? "#3af4c8" : state.kernel === "UNAVAILABLE" ? "#ff6a5a" : "#d7b96b";
611
+ if(n.kind === "field" || n.kind === "cell") return state.field === "REACHABLE" ? "#5b8dee" : state.field === "UNAVAILABLE" ? "#ff6a5a" : "#d7b96b";
612
+ if(n.kind === "pulse") return n.decision === "deny" ? "#ff6a5a" : n.decision === "allow" ? "#39d98a" : "#f5c451";
613
+ return "#c9b787";
614
+ }
615
+ function resize(){
616
+ const dpr = Math.min(window.devicePixelRatio || 1, 2);
617
+ const w = canvas.clientWidth || window.innerWidth;
618
+ const h = canvas.clientHeight || window.innerHeight;
619
+ canvas.width = Math.max(1, Math.floor(w * dpr));
620
+ canvas.height = Math.max(1, Math.floor(h * dpr));
621
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
622
+ }
623
+ function nodes(){
624
+ const extra = [];
625
+ (state.cells || []).slice(0, 8).forEach(function(c, i){
626
+ extra.push({
627
+ id: "cell-"+i,
628
+ label: String(c.name || c.id || "cell"),
629
+ lat: -40 + (i % 4) * 18,
630
+ lon: 100 + Math.floor(i / 4) * 40,
631
+ kind: "cell"
632
+ });
633
+ });
634
+ (state.feed || []).slice(0, 6).forEach(function(v, i){
635
+ extra.push({
636
+ id: "pulse-"+i,
637
+ label: String(v.decision || "UNKNOWN").toUpperCase(),
638
+ lat: 50 - i * 12,
639
+ lon: -140 + i * 28,
640
+ kind: "pulse",
641
+ decision: v.decision
642
+ });
643
+ });
644
+ return ORGANS.concat(extra);
645
+ }
646
+ function draw(now){
647
+ const dt = Math.min((now - last) / 1000, 0.1);
648
+ last = now;
649
+ if(auto && !dragging) rot += dt * 0.18;
650
+ const w = canvas.clientWidth || window.innerWidth;
651
+ const h = canvas.clientHeight || window.innerHeight;
652
+ const cx = w * 0.52;
653
+ const cy = h * 0.46;
654
+ const R = Math.min(w, h) * 0.34;
655
+ const col = accent();
656
+ ctx.clearRect(0, 0, w, h);
657
+
658
+ const grd = ctx.createRadialGradient(cx, cy, R * 0.15, cx, cy, R * 1.7);
659
+ grd.addColorStop(0, "rgba(58,244,200,0.10)");
660
+ grd.addColorStop(1, "rgba(8,12,20,0)");
661
+ ctx.fillStyle = grd;
662
+ ctx.fillRect(0, 0, w, h);
663
+
664
+ ctx.beginPath();
665
+ ctx.arc(cx, cy, R * 1.12, 0, Math.PI * 2);
666
+ ctx.strokeStyle = col + "33";
667
+ ctx.lineWidth = 1;
668
+ ctx.stroke();
669
+ ctx.beginPath();
670
+ ctx.arc(cx, cy, R, 0, Math.PI * 2);
671
+ ctx.fillStyle = "rgba(8,12,20,0.72)";
672
+ ctx.fill();
673
+ ctx.strokeStyle = col;
674
+ ctx.globalAlpha = 0.55;
675
+ ctx.lineWidth = 1.2;
676
+ ctx.stroke();
677
+ ctx.globalAlpha = 1;
678
+
679
+ ctx.strokeStyle = col;
680
+ ctx.lineWidth = 0.7;
681
+ ctx.globalAlpha = 0.22;
682
+ for(let i = -2; i <= 2; i++){
683
+ ctx.beginPath();
684
+ let started = false;
685
+ for(let lon = -180; lon <= 180; lon += 6){
686
+ const p = project(i * 22, lon, R);
687
+ if(!p.visible){ started = false; continue; }
688
+ const x = cx + p.x, y = cy + p.y;
689
+ if(!started){ ctx.moveTo(x, y); started = true; }
690
+ else ctx.lineTo(x, y);
691
+ }
692
+ ctx.stroke();
693
+ }
694
+ for(let lon = -150; lon <= 180; lon += 30){
695
+ ctx.beginPath();
696
+ let started = false;
697
+ for(let lat = -80; lat <= 80; lat += 6){
698
+ const p = project(lat, lon, R);
699
+ if(!p.visible){ started = false; continue; }
700
+ const x = cx + p.x, y = cy + p.y;
701
+ if(!started){ ctx.moveTo(x, y); started = true; }
702
+ else ctx.lineTo(x, y);
703
+ }
704
+ ctx.stroke();
705
+ }
706
+ ctx.globalAlpha = 1;
707
+
708
+ hits.length = 0;
709
+ const list = nodes();
710
+ list.forEach(function(a, i){
711
+ list.slice(i + 1).forEach(function(b){
712
+ const pa = project(a.lat, a.lon, R);
713
+ const pb = project(b.lat, b.lon, R);
714
+ if(!pa.visible || !pb.visible) return;
715
+ ctx.beginPath();
716
+ ctx.moveTo(cx + pa.x, cy + pa.y);
717
+ ctx.lineTo(cx + pb.x, cy + pb.y);
718
+ ctx.strokeStyle = "rgba(91,141,238,0.16)";
719
+ ctx.lineWidth = 0.8;
720
+ ctx.stroke();
721
+ });
722
+ });
723
+ list.forEach(function(n){
724
+ const p = project(n.lat, n.lon, R);
725
+ if(!p.visible) return;
726
+ const x = cx + p.x, y = cy + p.y;
727
+ const r = n.kind === "organ" ? 5.5 : 4;
728
+ const c = nodeColor(n);
729
+ ctx.beginPath();
730
+ ctx.arc(x, y, r + 6, 0, Math.PI * 2);
731
+ ctx.fillStyle = c + "22";
732
+ ctx.fill();
733
+ ctx.beginPath();
734
+ ctx.arc(x, y, r, 0, Math.PI * 2);
735
+ ctx.fillStyle = c;
736
+ ctx.fill();
737
+ ctx.font = "10px ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
738
+ ctx.fillStyle = "rgba(245,245,245,0.85)";
739
+ ctx.fillText(n.label, x + 8, y + 3);
740
+ hits.push({id:n.id, label:n.label, x:x, y:y, r:14});
741
+ });
742
+ raf = requestAnimationFrame(draw);
743
+ }
744
+
745
+ function hitAt(x, y){
746
+ for(let i = hits.length - 1; i >= 0; i--){
747
+ const h = hits[i];
748
+ const dx = x - h.x, dy = y - h.y;
749
+ if(dx*dx + dy*dy <= h.r * h.r) return h;
750
+ }
751
+ return null;
752
+ }
753
+ canvas.addEventListener("pointerdown", function(e){
754
+ dragging = true; auto = false;
755
+ lastX = e.clientX; lastY = e.clientY;
756
+ canvas.setPointerCapture(e.pointerId);
757
+ });
758
+ canvas.addEventListener("pointermove", function(e){
759
+ if(dragging){
760
+ rot += (e.clientX - lastX) * 0.008;
761
+ tilt = Math.max(-0.9, Math.min(0.9, tilt + (e.clientY - lastY) * 0.006));
762
+ lastX = e.clientX; lastY = e.clientY;
763
+ }
764
+ const rect = canvas.getBoundingClientRect();
765
+ const h = hitAt(e.clientX - rect.left, e.clientY - rect.top);
766
+ if(h && tip){
767
+ tip.style.display = "block";
768
+ tip.style.left = (e.clientX + 12) + "px";
769
+ tip.style.top = (e.clientY + 12) + "px";
770
+ tip.textContent = h.label;
771
+ }else if(tip){ tip.style.display = "none"; }
772
+ });
773
+ canvas.addEventListener("pointerup", function(){ dragging = false; });
774
+ canvas.addEventListener("pointerleave", function(){ dragging = false; if(tip) tip.style.display = "none"; });
775
+ canvas.addEventListener("dblclick", function(){ auto = !reduce; });
776
+
777
+ function setChip(id, label, reach){
778
+ const el = document.getElementById(id);
779
+ if(!el) return;
780
+ el.className = "chip " + (reach === "REACHABLE" ? "ok" : reach === "UNAVAILABLE" ? "bad" : "wait");
781
+ el.innerHTML = '<span class="dot"></span>' + label + " · " + String(reach || "CONNECTING").toLowerCase();
782
+ }
783
+ window.__immuneBind = function(payload){
784
+ if(!payload) return;
785
+ if(payload.kernelReach){ state.kernel = payload.kernelReach; setChip("chipKernel", "kernel", payload.kernelReach); }
786
+ if(payload.fieldReach){ state.field = payload.fieldReach; setChip("chipField", "field", payload.fieldReach); }
787
+ if(payload.organ){ state.organ = payload.organ; setChip("chipOrgan", "organ", payload.organ); }
788
+ if(payload.cells) state.cells = payload.cells;
789
+ if(payload.feed) state.feed = payload.feed;
790
+ };
791
+
792
+ window.addEventListener("resize", resize);
793
+ resize();
794
+ raf = requestAnimationFrame(draw);
795
+ })();
796
+
797
+
798
  async function loadAll(){ await Promise.all([loadStatus(),loadGates(),loadFeed(),loadKernel(),loadField()]); }
799
  loadAll();
800
  setInterval(loadStatus, 8000);
801
  setInterval(loadKernel, 8000);
802
  setInterval(loadField, 8000);
803
+
804
  </script>
805
  </body>
806
  </html>