Spaces:
Running
Running
deploy(hf): sync szl-holdings/a11oy@6e92f454c8d6a8e53cdfe01466b81902cb056125 derived COPY set
Browse filesReusable 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 +155 -2
- a11oy_landing.html +160 -172
- pages/hub.html +1 -0
- pages/landing.html +14 -7
- routers/series_a_web/app.js +21 -275
- routers/series_a_web/index.html +28 -135
- routers/series_a_web/styles.css +1 -91
- szl_hub.py +2 -1
- web/immune.html +316 -2
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">← 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">← 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(
|
| 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(
|
| 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.
|
| 347 |
-
.leg.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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="#
|
| 401 |
-
<a class="hide-sm" href="
|
| 402 |
<a class="hide-sm" href="/lyte">LYTE</a>
|
| 403 |
-
<a class="hide-sm" href="/
|
| 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="/
|
| 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
|
| 467 |
-
<div class="leg
|
|
|
|
|
|
|
| 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 |
-
<!-- ======================
|
| 492 |
-
<section class="band wrap" id="
|
| 493 |
-
<p class="kick">
|
| 494 |
-
<h2>
|
| 495 |
-
<p class="intro">
|
| 496 |
<div class="grid g3">
|
| 497 |
-
<
|
| 498 |
-
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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://
|
| 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">
|
| 586 |
-
real hash-chained receipt ledger, a live Sigstore 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 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 & 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) — sculpt its cortex with your pointer —
|
| 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 |
-
<!-- ======================
|
| 672 |
<section class="band" id="ecosystem">
|
| 673 |
-
<div class="wrap">
|
| 674 |
-
<p class="kick">
|
| 675 |
-
<h2>
|
| 676 |
-
<p class="
|
| 677 |
-
<div class="
|
| 678 |
-
<a class="
|
| 679 |
-
|
| 680 |
-
|
| 681 |
-
|
| 682 |
-
|
| 683 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 684 |
</div>
|
| 685 |
-
<div class="estate-
|
| 686 |
-
<a class="
|
| 687 |
-
<a class="
|
| 688 |
-
<a class="
|
| 689 |
-
<a class="
|
| 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)">
|
| 752 |
-
<a href="/console">
|
| 753 |
-
<a href="/
|
| 754 |
-
<a href="/
|
| 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="
|
| 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)">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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"
|
| 770 |
-
<a href="https://github.com/szl-holdings
|
| 771 |
-
<a href="
|
| 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
|
|
|
|
| 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 |
-
//
|
| 929 |
-
|
| 930 |
-
|
|
|
|
|
|
|
| 931 |
const val = fmtLam(v[k]);
|
| 932 |
-
|
| 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
|
| 1016 |
-
|
| 1017 |
-
|
| 1018 |
-
$("verticals-src").innerHTML = liveChip("lambda/org");
|
| 1019 |
}catch(e){
|
| 1020 |
-
setVerticals({});
|
| 1021 |
-
$("
|
|
|
|
|
|
|
| 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 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 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 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="#
|
| 167 |
-
<a href="#
|
| 168 |
-
<a href="
|
| 169 |
-
<a href="/
|
| 170 |
-
<a href="
|
| 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
|
| 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 & 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 & 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 & 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 & 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, {
|
| 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(
|
| 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(
|
| 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: {
|
| 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: [{
|
| 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: {
|
| 379 |
-
body: JSON.stringify({
|
| 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 |
-
) ? [{
|
| 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: {
|
| 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", {
|
| 433 |
if (revision !== evaluationRevision) {
|
| 434 |
output.textContent = "STALE · form changed before evaluation completed";
|
| 435 |
return;
|
| 436 |
}
|
| 437 |
-
output.textContent = JSON.stringify({
|
| 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 {
|
| 467 |
} catch {}
|
| 468 |
-
await new Promise(
|
| 469 |
}
|
| 470 |
return null;
|
| 471 |
};
|
|
@@ -478,8 +224,8 @@
|
|
| 478 |
try {
|
| 479 |
const value = await request("/passports/execute", {
|
| 480 |
method: "POST",
|
| 481 |
-
headers: {
|
| 482 |
-
body: JSON.stringify({
|
| 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(
|
| 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 |
-
<
|
| 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
|
| 15 |
-
<header
|
| 16 |
-
<
|
| 17 |
-
|
| 18 |
-
|
| 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
|
| 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>
|
| 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 |
-
|
| 60 |
-
<
|
| 61 |
-
|
| 62 |
-
|
| 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>
|
| 114 |
-
<
|
|
|
|
|
|
|
| 115 |
</form>
|
| 116 |
-
<pre id="
|
|
|
|
|
|
|
| 117 |
</section>
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
<
|
| 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 |
-
|
| 147 |
-
<
|
| 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>
|