betterwithage commited on
Commit
5c4a669
·
verified ·
1 Parent(s): dd01c45

chore(sync): mirror front-door files to Space (hf-sync)

Browse files

Automated front-door sync from szl-holdings/a11oy main via hf-sync.
Added/updated: console/docs.html, console/index.html, console/pricing.html, console/throne-room.html, console/throne-room.js, pages/api-keys.html, pages/audit.html, pages/ayni.html, pages/brain-dual.html, pages/brain-jack.html, pages/brain.html, pages/chaski.html, pages/codex-kernel.html, pages/company.html, pages/compliance.html, pages/console.html, pages/counter-uas.html, pages/cued-engagement.html, pages/docs.html, pages/evidence.html, pages/gap-report.html, pages/hatun-mcp.html, pages/hub.html, pages/landing.html, pages/mesh.html, pages/observability.html, pages/operator_organ.html, pages/pricing.html, pages/run-all.html, pages/sdk.html, pages/security.html, pages/status.html, pages/substrate.html, pages/superpowers.html, pages/throne-room.html, pages/throne-room.js, pages/uds.html, pages/upgrades.html, pages/wallpa.html, pages/warhacker.html, pages/wasi-rikuq.html, pages/wires.html
Deleted (gone from GitHub main): (none)

Keeps the served front-door (pages/*.html, console/*.html) identical
to GitHub main so an HF factory rebuild never drops a GitHub edit or
keeps serving a page that was deleted on GitHub.

Files changed (1) hide show
  1. pages/console.html +361 -0
pages/console.html CHANGED
@@ -8085,5 +8085,366 @@ window.warboard_init=warboard_init; window.warboard_all=warboard_all;
8085
  })();
8086
  </script>
8087
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8088
  </body>
8089
  </html>
 
8085
  })();
8086
  </script>
8087
 
8088
+
8089
+
8090
+ <!-- ===================================================================== -->
8091
+ <!-- CYBER DEFENSE (5) - threat intel + posture drift + attack-surface + -->
8092
+ <!-- signed incident receipts + zero-trust mesh. ADDITIVE. Owns ONLY -->
8093
+ <!-- window.renderCyb* fns, #cyb-* ids, view keys cybThreat/cybPosture/ -->
8094
+ <!-- cybSurface/cybIncident/cybZero, nav group #cyb-nav-group. Reads LIVE -->
8095
+ <!-- /api/sentra/v1/* + /api/a11oy/v1/* feeds (0 client CDN). UI never shows -->
8096
+ <!-- the codename; the vertical is "Cyber Defense" everywhere. -->
8097
+ <!-- DOCTRINE: locked=5 {F1,F11,F12,F18,F19}; Lambda=Conjecture 1 (advisory).-->
8098
+ <!-- ===================================================================== -->
8099
+ <script>
8100
+ (function(){
8101
+ "use strict";
8102
+ var GOLD='#c9b787', TEAL='#5fb3a3', RED='#b06a5a', AMBER='#c9a05f', CREAM='#f5f5f5', DIM='#888', SLATE='#7a8aa0';
8103
+ var SB='/api/sentra/v1', AB='/api/a11oy/v1';
8104
+
8105
+ function E(id){return document.getElementById(id);}
8106
+ function H(id,h){var e=E(id);if(e)e.innerHTML=h;}
8107
+ function esc(s){return window.esc?window.esc(s):String(s==null?'':s).replace(/[<>&]/g,function(c){return{'<':'&lt;','>':'&gt;','&':'&amp;'}[c];});}
8108
+ function fnum(n,d){ if(n==null||isNaN(n))return '\u2014'; return Number(n).toLocaleString(undefined,{maximumFractionDigits:(d==null?0:d)}); }
8109
+ function poll(fn,stamp){ if(window.a11oyPoll){window.a11oyPoll(fn,stamp);} else { fn(); var t=setInterval(fn,12000); (window._liveTimers=window._liveTimers||[]).push(t);} }
8110
+ function getJSON(u){ return window.getJSON?window.getJSON(u):fetch(u).then(function(r){return r.json();}); }
8111
+ function kpi(k,id,d,cls){ return '<div class="kpi"><div class="k">'+k+'</div><div class="v '+(cls||'')+'" id="'+id+'">\u2026</div><div class="d">'+(d||'')+'</div></div>'; }
8112
+ function card(t,ep,inner){ return '<div class="card"><div class="card-h"><span class="card-t">'+t+'</span><span class="card-ep">'+(ep||'')+'</span></div>'+inner+'</div>'; }
8113
+ function box3d(id,h){ return '<div id="'+id+'" style="height:'+(h||360)+'px;position:relative"></div>'; }
8114
+ function dl(){ return window.liveDot?window.liveDot():''; }
8115
+ function fmla(k){ return window.a11oyFormula?window.a11oyFormula(k):''; }
8116
+ function sh(h){ h=(h||'').toString(); return h.length>18?(h.slice(0,10)+'\u2026'+h.slice(-6)):h; }
8117
+ function sevcol(s){ s=(s||'').toLowerCase(); return s.indexOf('crit')>=0?RED:(s.indexOf('high')>=0?AMBER:(s.indexOf('med')>=0?GOLD:TEAL)); }
8118
+ function tbl(heads,rows){ var h='<div style="overflow:auto"><table style="width:100%;border-collapse:collapse;font-family:var(--mono,monospace);font-size:11px">';
8119
+ h+='<thead><tr>'+heads.map(function(x){return '<th style="text-align:left;padding:.35rem .5rem;border-bottom:1px solid rgba(201,183,135,.2);color:'+GOLD+';font-weight:600">'+esc(x)+'</th>';}).join('')+'</tr></thead><tbody>';
8120
+ h+=rows.map(function(r){return '<tr>'+r.map(function(c){return '<td style="padding:.32rem .5rem;border-bottom:1px solid rgba(201,183,135,.06);color:var(--cream,#ddd);vertical-align:top">'+c+'</td>';}).join('')+'</tr>';}).join('');
8121
+ return h+'</tbody></table></div>'; }
8122
+ function err(id,e){ H(id,'<div class="row mono dim">feed unavailable: '+esc((e&&e.message)||e)+'</div>'); }
8123
+
8124
+ var HON='<div class="honesty" style="margin-top:1rem"><b>How to read this.</b> Threat corpus is <b>real MITRE ATT&CK</b> (STIX 2.1, ATT&CK v14) with live CVSS; CVE severity is <b>live NVD/CISA-KEV</b>-class data \u2014 all fetched server-side (0 client CDN), freshness labeled. Containment receipts are hash-chained and <b>DSSE-signed</b> when the cosign key is present, honestly marked unsigned otherwise \u2014 never a fabricated signature. \u039b is a research <b>Conjecture</b> (Conjecture\u00a01, advisory floor 0.90 \u2014 never a pass/fail or legal oracle). Five formulas are locked-proven {F1,F11,F12,F18,F19}; other waves are CI-green, never counted as locked. Post-quantum signing is <b>ROADMAP</b>, labeled as such.</div>';
8125
+
8126
+ /* ---- Tab 1: Threat Intelligence ---- */
8127
+ window.renderCybThreat=function(c){
8128
+ c.innerHTML=
8129
+ card('Threat Intelligence \u2014 live MITRE ATT&CK + CVSS '+dl(),'GET '+SB+'/threats/full',
8130
+ '<div class="kpis">'+kpi('Techniques','cyb-ti-total','STIX 2.1 corpus')+kpi('ATT&CK','cyb-ti-ver','MITRE version')+
8131
+ kpi('Critical+High','cyb-ti-crit','by CVSS severity')+kpi('Updated','cyb-ti-upd','last refresh')+'</div>'+
8132
+ '<div id="cyb-ti-sev" style="margin:.6rem 0"></div>')+
8133
+ card('Technique corpus','signature \u00b7 tactic \u00b7 CVSS','<div id="cyb-ti-tbl"><div class="row mono dim">loading\u2026</div></div>')+
8134
+ '<div class="mono dim" style="font-size:11px">'+'<span id="cyb-ti-parity"></span></div>'+HON;
8135
+ poll(function(){ getJSON(SB+'/threats/full').then(function(d){
8136
+ var corp=d.corpus||[];
8137
+ var crit=corp.filter(function(x){var s=(x.severity||'').toLowerCase();return s.indexOf('crit')>=0||s.indexOf('high')>=0;}).length;
8138
+ H('cyb-ti-total',fnum(d.total!=null?d.total:corp.length)); H('cyb-ti-ver',esc(d.mitre_attack_version||'\u2014'));
8139
+ H('cyb-ti-crit',fnum(crit)); H('cyb-ti-upd',esc((d.last_updated||'').slice(0,10)||'\u2014'));
8140
+ var buckets={Critical:0,High:0,Medium:0,Low:0};
8141
+ corp.forEach(function(x){var s=(x.severity||'').toLowerCase(); if(s.indexOf('crit')>=0)buckets.Critical++;else if(s.indexOf('high')>=0)buckets.High++;else if(s.indexOf('med')>=0)buckets.Medium++;else buckets.Low++;});
8142
+ if(window.barH) window.barH('cyb-ti-sev',Object.keys(buckets),Object.keys(buckets).map(function(k){return buckets[k];}),[RED,AMBER,GOLD,TEAL]);
8143
+ var rows=corp.slice(0,30).map(function(x){ return [
8144
+ '<span style="color:'+CREAM+'">'+esc(x.signature||'\u2014')+'</span>',
8145
+ esc(x.category||''),
8146
+ '<span class="badge mono" style="color:'+sevcol(x.severity)+';border:1px solid '+sevcol(x.severity)+'66">'+esc(x.severity||'?')+'</span>',
8147
+ esc(x.cvss_base!=null?x.cvss_base:'\u2014'),
8148
+ '<span class="dim">'+esc(x.mitre_tactic||'')+'</span> / '+esc(x.mitre_technique||'') ]; });
8149
+ H('cyb-ti-tbl',tbl(['signature','category','sev','CVSS','tactic / technique'],rows));
8150
+ H('cyb-ti-parity',d.parity?('Parity target: '+esc(d.parity)):'');
8151
+ }).catch(function(e){err('cyb-ti-tbl',e);}); },'cyb-ti');
8152
+ };
8153
+
8154
+ /* ---- Tab 2: Posture & Compliance Drift ---- */
8155
+ window.renderCybPosture=function(c){
8156
+ c.innerHTML=
8157
+ card('Posture & Compliance Drift \u2014 governed gate verification '+dl(),'GET '+AB+'/gates',
8158
+ '<div class="kpis">'+kpi('Gates','cyb-po-count','policy gates live')+kpi('Lean-verified','cyb-po-ver','machine-checked')+
8159
+ kpi('Declarations','cyb-po-decl','kernel canonical')+kpi('Axioms','cyb-po-ax','raw axioms')+'</div>'+
8160
+ '<div id="cyb-po-don" style="margin:.6rem 0"></div>')+
8161
+ card('Gate ledger','formula \u00b7 lean theorem \u00b7 status','<div id="cyb-po-tbl"><div class="row mono dim">loading\u2026</div></div>')+
8162
+ card('Citation audit','honest provenance','<div id="cyb-po-audit" class="row mono dim">\u2026</div>')+HON;
8163
+ poll(function(){ getJSON(AB+'/gates').then(function(d){
8164
+ var gates=d.gates||[]; var ver=gates.filter(function(g){return g.lean_verified;}).length; var can=d.canonical||{};
8165
+ H('cyb-po-count',fnum(d.count!=null?d.count:gates.length)); H('cyb-po-ver',fnum(ver)+' / '+fnum(gates.length));
8166
+ H('cyb-po-decl',fnum(can.declarations)); H('cyb-po-ax',fnum(can.axioms));
8167
+ if(window.barH) window.barH('cyb-po-don',['lean-verified','deferred'],[ver,Math.max(0,gates.length-ver)],[TEAL,AMBER]);
8168
+ var rows=gates.slice(0,40).map(function(g){ var ok=g.lean_verified; return [
8169
+ '<span style="color:'+CREAM+'">'+esc(g.name||'\u2014')+'</span>',
8170
+ '<span class="dim">'+esc(g.formula||'')+'</span>',
8171
+ esc(g.lean_theorem||'\u2014'),
8172
+ '<span class="badge mono" style="color:'+(ok?TEAL:AMBER)+';border:1px solid '+(ok?TEAL:AMBER)+'66">'+esc(ok?'verified':(g.lean_status||'deferred'))+'</span>' ]; });
8173
+ H('cyb-po-tbl',tbl(['gate','formula','lean theorem','status'],rows));
8174
+ var a=d.lean_citation_audit||{};
8175
+ H('cyb-po-audit','Verified against <b>'+esc(a.verified_against||'\u2014')+'</b> \u00b7 real theorem citations: '+fnum(a.real_theorem_citations)+' \u00b7 deferred (no theorem yet): '+fnum(a.deferred_no_theorem)+' \u00b7 phantom refs: '+fnum(a.phantom_Lutar_Gate_dir_refs)+'. Sorries: '+fnum(can.sorries)+'. Honest doctrine v11 \u2014 verified gates are machine-checked, deferred gates are labeled, never claimed proven.');
8176
+ }).catch(function(e){err('cyb-po-tbl',e);}); },'cyb-po');
8177
+ };
8178
+
8179
+ /* ---- Tab 3: Attack-Surface Graph (3D) ---- */
8180
+ window.renderCybSurface=function(c){
8181
+ c.innerHTML=
8182
+ card('Attack-Surface Graph \u2014 tactic \u2192 technique exposure (3D) '+dl(),'GET '+SB+'/threats/full',
8183
+ '<div class="kpis">'+kpi('Tactics','cyb-as-tac','ATT&CK tactics')+kpi('Techniques','cyb-as-tech','mapped nodes')+
8184
+ kpi('Critical nodes','cyb-as-crit','crit/high CVSS')+'</div>'+box3d('cyb-as-3d',380))+
8185
+ card('Surface by tactic','exposure count','<div id="cyb-as-tbl"><div class="row mono dim">loading\u2026</div></div>')+HON;
8186
+ poll(function(){ getJSON(SB+'/threats/full').then(function(d){
8187
+ var corp=d.corpus||[]; var tac={}; var nodes=[]; var links=[]; var seenT={}; var crit=0;
8188
+ corp.forEach(function(x){ var t=x.mitre_tactic||x.category||'unmapped'; tac[t]=(tac[t]||0)+1;
8189
+ if(!seenT[t]){ seenT[t]=true; nodes.push({id:'T:'+t,name:t,color:GOLD,val:9}); }
8190
+ var s=(x.severity||'').toLowerCase(); if(s.indexOf('crit')>=0||s.indexOf('high')>=0)crit++;
8191
+ var tid='K:'+(x.signature||x.mitre_technique||Math.random());
8192
+ nodes.push({id:tid,name:(x.mitre_technique||x.signature||''),color:sevcol(x.severity),val:4});
8193
+ links.push({source:'T:'+t,target:tid}); });
8194
+ H('cyb-as-tac',fnum(Object.keys(tac).length)); H('cyb-as-tech',fnum(corp.length)); H('cyb-as-crit',fnum(crit));
8195
+ if(window.a11oyFG) window.a11oyFG('cyb-as-3d',nodes,links,{cooldown:160,labels:nodes.length<=26});
8196
+ var rows=Object.keys(tac).sort(function(a,b){return tac[b]-tac[a];}).map(function(t){return [
8197
+ '<span style="color:'+CREAM+'">'+esc(t)+'</span>',
8198
+ '<span class="badge mono" style="color:'+GOLD+';border:1px solid '+GOLD+'66">'+fnum(tac[t])+'</span>' ]; });
8199
+ H('cyb-as-tbl',tbl(['tactic','exposed techniques'],rows));
8200
+ }).catch(function(e){err('cyb-as-tbl',e);}); },'cyb-as');
8201
+ };
8202
+
8203
+ /* ---- Tab 4: Signed Incident Receipts ---- */
8204
+ window.renderCybIncident=function(c){
8205
+ c.innerHTML=
8206
+ card('Governed Containment \u2014 decision \u2192 signed receipt','GET '+AB+'/governed-decision \u00b7 '+fmla('F1'),
8207
+ '<button class="vchip" id="cyb-ic-run" style="background:var(--teal-soft);color:'+TEAL+';border-color:'+TEAL+'66">Govern containment \u2192 sign</button>'+
8208
+ '<div id="cyb-ic-out" class="row mono dim" style="margin-top:.6rem">Run a governed containment decision; the recommendation is sealed with a DSSE receipt where a key is present.</div>')+
8209
+ card('Live incident verdict feed '+dl(),'GET '+SB+'/verdict/feed','<div id="cyb-ic-feed"><div class="row mono dim">loading\u2026</div></div>')+HON;
8210
+ function run(){ H('cyb-ic-out','<div class="row mono dim">governing\u2026</div>');
8211
+ getJSON(AB+'/governed-decision').then(function(d){ var r=d.recommendation||{}; var rc=d.receipt||{};
8212
+ var signed=!!(rc._pae_sha256); var col=signed?TEAL:AMBER;
8213
+ H('cyb-ic-out',
8214
+ '<div class="row"><span class="badge mono" style="color:'+col+';border:1px solid '+col+'66">'+(signed?'DSSE-SIGNED':'UNSIGNED (no key)')+'</span><span style="color:'+CREAM+'">'+esc(r.title||d.brief||'\u2014')+'</span></div>'+
8215
+ '<div class="row mono" style="font-size:11px;gap:.6rem"><span class="dim">owner</span>'+esc(r.owner||'\u2014')+'<span class="dim">confidence</span>'+esc(r.confidence!=null?r.confidence:'\u2014')+'<span class="dim">human-approval</span>'+esc(r.requires_human_approval?'required':'not required')+'</div>'+
8216
+ '<div class="row mono" style="font-size:11px;gap:.6rem"><span class="dim">next</span>'+esc(r.next_action||'\u2014')+'<span class="dim">rollback</span>'+esc(r.rollback_path||'\u2014')+'</div>'+
8217
+ '<div class="row mono" style="font-size:11px;gap:.6rem"><span class="dim">\u039b advisory</span>'+esc(d.lambda_advisory!=null?d.lambda_advisory:'\u2014')+'<span class="dim">'+esc(d.lambda_status||'')+'</span></div>'+
8218
+ '<div class="row mono dim" style="font-size:10.5px">receipt '+esc(rc.payloadType||'')+' \u00b7 PAE sha256 '+esc(sh(rc._pae_sha256||''))+' \u00b7 '+esc(rc._dsse||'')+' \u00b7 signed '+esc((rc._signed_at||'').slice(0,19))+'</div>'+
8219
+ '<div class="row mono dim" style="font-size:10px">model: '+esc(r.model||'')+'</div>'); }).catch(function(e){err('cyb-ic-out',e);}); }
8220
+ var b=E('cyb-ic-run'); if(b) b.onclick=run;
8221
+ poll(function(){ getJSON(SB+'/verdict/feed').then(function(d){ var v=d.verdicts||[];
8222
+ H('cyb-ic-feed', (v.length?'':'<div class="row mono dim">no verdicts buffered</div>')+v.slice(0,14).map(function(x){
8223
+ return window.a11oyReceiptRow?window.a11oyReceiptRow({decision:x.decision,vertical:x.agent,action:x.action,hash:x.receipt_hash}):
8224
+ ('<div class="row mono" style="font-size:10.5px"><span>'+esc(x.decision)+'</span><span>'+esc(x.agent)+'</span><span>'+esc(x.action)+'</span></div>'); }).join('')+
8225
+ '<div class="row mono dim" style="font-size:10px;margin-top:.4rem">'+esc(d.note||'')+' \u00b7 buffered '+fnum(d.total_buffered)+'</div>'); }).catch(function(e){err('cyb-ic-feed',e);}); },'cyb-ic');
8226
+ };
8227
+
8228
+ /* ---- Tab 5: Zero-Trust Mesh Map ---- */
8229
+ window.renderCybZero=function(c){
8230
+ c.innerHTML=
8231
+ card('Zero-Trust Mesh \u2014 BFT quorum over independent witnesses (3D) '+dl(),'GET '+AB+'/capabilities/mesh \u00b7 '+fmla('F12'),
8232
+ '<div class="kpis">'+kpi('Witnesses','cyb-zt-w','healthy / required')+kpi('Quorum','cyb-zt-q','BFT permitted')+
8233
+ kpi('Bound','cyb-zt-b','fault tolerance')+kpi('Enforcement','cyb-zt-g','policy gates')+'</div>'+box3d('cyb-zt-3d',360))+
8234
+ card('Trust nodes','role \u00b7 health \u00b7 \u039b','<div id="cyb-zt-tbl"><div class="row mono dim">loading\u2026</div></div>')+HON;
8235
+ poll(function(){ getJSON(AB+'/capabilities/mesh').then(function(d){ var nodes=d.nodes||[]; var edges=d.edges||[];
8236
+ H('cyb-zt-w',fnum(d.healthy_witnesses)+' / '+fnum(d.n_required)); H('cyb-zt-q',(d.quorum_permitted?'PERMITTED':'DENIED'));
8237
+ H('cyb-zt-b',esc(d.bft_bound||'\u2014'));
8238
+ var fgn=nodes.map(function(n){return {id:n.id,name:n.id+' ('+(n.role||'')+')',color:n.ok?TEAL:RED,val:n.ok?7:4};});
8239
+ var fgl=edges.map(function(e){return {source:e.from,target:e.to};});
8240
+ if(window.a11oyFG) window.a11oyFG('cyb-zt-3d',fgn,fgl,{cooldown:150,labels:true});
8241
+ var rows=nodes.map(function(n){return [
8242
+ '<span style="color:'+CREAM+'">'+esc(n.id)+'</span>', esc(n.role||''),
8243
+ '<span class="badge mono" style="color:'+(n.ok?TEAL:RED)+';border:1px solid '+(n.ok?TEAL:RED)+'66">'+(n.ok?'trusted '+esc(n.http):'unreachable')+'</span>',
8244
+ esc(n.lambda||''), 'mcp:'+esc(n.mcp_tools!=null?n.mcp_tools:'\u2014') ]; });
8245
+ H('cyb-zt-tbl',tbl(['node','role','health','\u039b','tools'],rows));
8246
+ }).catch(function(e){err('cyb-zt-tbl',e);});
8247
+ getJSON(SB+'/gates').then(function(g){ H('cyb-zt-g',fnum((g.gates||[]).length)); }).catch(function(){}); },'cyb-zt');
8248
+ };
8249
+
8250
+ /* ---- register + nav ---- */
8251
+ function reg(key,title,badge,sub,fn){ if(!window.VIEWS) return; window.VIEWS[key]={title:title,badge:badge,sub:sub,render:async function(c){ fn(c); }}; }
8252
+ function regAll(){ if(!window.VIEWS){ return setTimeout(regAll,120); }
8253
+ reg('cybThreat','Cyber Defense \u2014 Threat Intelligence','LIVE \u00b7 MITRE ATT&CK + CVSS','Live MITRE ATT&CK (STIX 2.1, v14) technique corpus with CVSS severity and CVE/KEV-class signals, fetched server-side. Severity histogram + full technique ledger. Honest labels, 0 client CDN.',window.renderCybThreat);
8254
+ reg('cybPosture','Cyber Defense \u2014 Posture & Compliance Drift','LIVE \u00b7 governed gates','Posture from real governed policy gates: how many are Lean machine-verified vs deferred, kernel-canonical declaration/axiom counts, and an honest citation audit. Drift = verified-vs-deferred over time.',window.renderCybPosture);
8255
+ reg('cybSurface','Cyber Defense \u2014 Attack-Surface Graph','LIVE \u00b7 tactic \u2192 technique DAG','3D attack-surface graph built from the live ATT&CK corpus: tactics linked to their techniques, nodes colored by CVSS severity. 3d-force-graph (MIT, 0 CDN), framed; exposure table by tactic.',window.renderCybSurface);
8256
+ reg('cybIncident','Cyber Defense \u2014 Signed Incident Receipts','LIVE \u00b7 governed + DSSE','Run a governed containment decision through the P1\u2013P6 loop and seal it with a DSSE-signed receipt where a key is present. Live incident verdict feed from the real in-memory audit ring.',window.renderCybIncident);
8257
+ reg('cybZero','Cyber Defense \u2014 Zero-Trust Mesh','LIVE \u00b7 BFT quorum','Zero-trust mesh map: independent witness nodes, BFT quorum (F12 quorum-intersection, n\u22653f+1), per-node trust/health/\u039b, and policy-gate enforcement points. Live 3D graph, auto-poll.',window.renderCybZero);
8258
+ }
8259
+ regAll();
8260
+ function injectNav(){ var anchor=document.querySelector('.nav-item[data-view="verticals"]')||document.querySelector('.nav-item');
8261
+ if(!anchor){ return setTimeout(injectNav,250); } if(document.getElementById('cyb-nav-group')){ return; }
8262
+ var grp=document.createElement('div'); grp.className='nav-group'; grp.id='cyb-nav-group'; grp.textContent='Cyber Defense';
8263
+ var items=[['cybThreat','\u2726','Threat Intelligence'],['cybPosture','\u25c9','Posture & Drift'],['cybSurface','\u2727','Attack-Surface Graph'],['cybIncident','\u26a0','Signed Incidents'],['cybZero','\u26d3','Zero-Trust Mesh']];
8264
+ function mk(d){ var n=document.createElement('div'); n.className='nav-item'; n.id='cyb-nav-'+d[0]; n.setAttribute('data-view',d[0]); n.setAttribute('onclick',"go('"+d[0]+"')"); n.innerHTML='<span class="ico">'+d[1]+'</span>'+d[2]; return n; }
8265
+ var parent=anchor.parentNode; parent.appendChild(grp); items.forEach(function(d){ parent.appendChild(mk(d)); }); }
8266
+ if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded',injectNav); } else { injectNav(); }
8267
+ })();
8268
+ </script>
8269
+
8270
+
8271
+ <!-- ===================================================================== -->
8272
+ <!-- AI-FLEET (5) - fleet topology + decision-receipt stream + orchestration-->
8273
+ <!-- + governance-gate status + per-agent observability. ADDITIVE. Owns -->
8274
+ <!-- ONLY window.renderFlt* fns, #flt-* ids, view keys fltTopo/fltReceipts/ -->
8275
+ <!-- fltOrch/fltGov/fltObs, nav group #flt-nav-group. Reads LIVE -->
8276
+ <!-- /api/rosie/v1/*, /api/a11oy/v4/fleet, /api/a11oy/v1/* feeds (0 CDN). -->
8277
+ <!-- UI never shows the codename; the vertical is "AI-Fleet" everywhere. -->
8278
+ <!-- DOCTRINE: locked=5 {F1,F11,F12,F18,F19}; Lambda=Conjecture 1 (advisory).-->
8279
+ <!-- ===================================================================== -->
8280
+ <script>
8281
+ (function(){
8282
+ "use strict";
8283
+ var GOLD='#c9b787', TEAL='#5fb3a3', RED='#b06a5a', AMBER='#c9a05f', CREAM='#f5f5f5', DIM='#888', SLATE='#7a8aa0';
8284
+ var RB='/api/rosie/v1', AB='/api/a11oy/v1', V4='/api/a11oy/v4';
8285
+
8286
+ function E(id){return document.getElementById(id);}
8287
+ function H(id,h){var e=E(id);if(e)e.innerHTML=h;}
8288
+ function esc(s){return window.esc?window.esc(s):String(s==null?'':s).replace(/[<>&]/g,function(c){return{'<':'&lt;','>':'&gt;','&':'&amp;'}[c];});}
8289
+ function fnum(n,d){ if(n==null||isNaN(n))return '\u2014'; return Number(n).toLocaleString(undefined,{maximumFractionDigits:(d==null?0:d)}); }
8290
+ function poll(fn,stamp){ if(window.a11oyPoll){window.a11oyPoll(fn,stamp);} else { fn(); var t=setInterval(fn,12000); (window._liveTimers=window._liveTimers||[]).push(t);} }
8291
+ function getJSON(u){ return window.getJSON?window.getJSON(u):fetch(u).then(function(r){return r.json();}); }
8292
+ function kpi(k,id,d,cls){ return '<div class="kpi"><div class="k">'+k+'</div><div class="v '+(cls||'')+'" id="'+id+'">\u2026</div><div class="d">'+(d||'')+'</div></div>'; }
8293
+ function card(t,ep,inner){ return '<div class="card"><div class="card-h"><span class="card-t">'+t+'</span><span class="card-ep">'+(ep||'')+'</span></div>'+inner+'</div>'; }
8294
+ function box3d(id,h){ return '<div id="'+id+'" style="height:'+(h||360)+'px;position:relative"></div>'; }
8295
+ function dl(){ return window.liveDot?window.liveDot():''; }
8296
+ function fmla(k){ return window.a11oyFormula?window.a11oyFormula(k):''; }
8297
+ function sh(h){ h=(h||'').toString(); return h.length>18?(h.slice(0,10)+'\u2026'+h.slice(-6)):h; }
8298
+ function sevcol(s){ s=(s||'').toLowerCase(); return s.indexOf('crit')>=0?RED:(s.indexOf('high')>=0?AMBER:(s.indexOf('med')>=0?GOLD:TEAL)); }
8299
+ function tbl(heads,rows){ var h='<div style="overflow:auto"><table style="width:100%;border-collapse:collapse;font-family:var(--mono,monospace);font-size:11px">';
8300
+ h+='<thead><tr>'+heads.map(function(x){return '<th style="text-align:left;padding:.35rem .5rem;border-bottom:1px solid rgba(201,183,135,.2);color:'+GOLD+';font-weight:600">'+esc(x)+'</th>';}).join('')+'</tr></thead><tbody>';
8301
+ h+=rows.map(function(r){return '<tr>'+r.map(function(c){return '<td style="padding:.32rem .5rem;border-bottom:1px solid rgba(201,183,135,.06);color:var(--cream,#ddd);vertical-align:top">'+c+'</td>';}).join('')+'</tr>';}).join('');
8302
+ return h+'</tbody></table></div>'; }
8303
+ function err(id,e){ H(id,'<div class="row mono dim">feed unavailable: '+esc((e&&e.message)||e)+'</div>'); }
8304
+
8305
+ var HON='<div class="honesty" style="margin-top:1rem"><b>How to read this.</b> Fleet topology, health, \u039b status and MCP-tool counts are probed <b>live in-process</b> from the real capabilities mesh (0 client CDN), freshness labeled. The decision ledger is a <b>real hash-chained</b> receipt store (SHA-chain, tamper-evident), DSSE-signed where a key is present \u2014 never a fabricated signature. Router throughput is a <b>live in-memory counter</b>, labeled as such; it is not a billing meter. \u039b is a research <b>Conjecture</b> (Conjecture\u00a01, advisory floor 0.90 \u2014 never a pass/fail oracle). Five formulas are locked-proven {F1,F11,F12,F18,F19}; other waves are CI-green, never counted as locked. SLSA L1 honest build-provenance.</div>';
8306
+
8307
+ /* ---- Tab 1: Fleet Topology & Health ---- */
8308
+ window.renderFltTopo=function(c){
8309
+ c.innerHTML=
8310
+ card('Fleet Topology & Health \u2014 capabilities mesh (3D) '+dl(),'GET '+RB+'/mesh/3d \u00b7 '+fmla('F12'),
8311
+ '<div class="kpis">'+kpi('Agents','flt-tp-n','mesh nodes')+kpi('Healthy','flt-tp-h','reachable witnesses')+
8312
+ kpi('Quorum','flt-tp-q','BFT permitted')+kpi('Bound','flt-tp-b','fault tolerance')+'</div>'+box3d('flt-tp-3d',380))+
8313
+ card('Agent nodes','role \u00b7 health \u00b7 \u039b \u00b7 tools','<div id="flt-tp-tbl"><div class="row mono dim">loading\u2026</div></div>')+
8314
+ card('Peer capabilities','GET '+V4+'/fleet','<div id="flt-tp-peers" class="row mono dim">\u2026</div>')+HON;
8315
+ poll(function(){ getJSON(RB+'/mesh/3d').then(function(d){ var nodes=d.nodes||[]; var edges=d.edges||[];
8316
+ H('flt-tp-n',fnum(nodes.length)); H('flt-tp-h',fnum(d.healthy_witnesses)+' / '+fnum(d.n_required));
8317
+ H('flt-tp-q',d.quorum_permitted?'PERMITTED':'DENIED'); H('flt-tp-b',esc(d.bft_bound||'\u2014'));
8318
+ var fgn=nodes.map(function(n){return {id:n.id,name:n.id+' ('+(n.role||'')+')',color:n.ok?TEAL:RED,val:n.ok?7:4};});
8319
+ var fgl=edges.map(function(e){return {source:e.from,target:e.to};});
8320
+ if(window.a11oyFG) window.a11oyFG('flt-tp-3d',fgn,fgl,{cooldown:150,labels:true});
8321
+ var rows=nodes.map(function(n){return [
8322
+ '<span style="color:'+CREAM+'">'+esc(n.id)+'</span>', esc(n.role||''),
8323
+ '<span class="badge mono" style="color:'+(n.ok?TEAL:RED)+';border:1px solid '+(n.ok?TEAL:RED)+'66">'+(n.ok?'ok '+esc(n.http):'down')+'</span>',
8324
+ esc(n.lambda||''), esc(n.mcp_tools!=null?n.mcp_tools:'\u2014') ]; });
8325
+ H('flt-tp-tbl',tbl(['agent','role','health','\u039b','tools'],rows));
8326
+ }).catch(function(e){err('flt-tp-tbl',e);});
8327
+ getJSON(V4+'/fleet').then(function(d){ var p=d.peers||[];
8328
+ H('flt-tp-peers', p.map(function(x){ var ok=(x.http_code===200||x.status==='ok'||x.status==='live');
8329
+ return '<div class="row mono" style="font-size:11px;gap:.5rem"><span class="badge mono" style="color:'+(ok?TEAL:AMBER)+';border:1px solid '+(ok?TEAL:AMBER)+'66">'+esc(x.status||'?')+'</span><span style="color:'+CREAM+'">'+esc(x.capability||x.service||'\u2014')+'</span><span class="dim">'+esc(x.counts||x.slsa||'')+'</span></div>'; }).join('')); }).catch(function(){}); },'flt-tp');
8330
+ };
8331
+
8332
+ /* ---- Tab 2: Decision-Receipt Stream + Chain Integrity ---- */
8333
+ window.renderFltReceipts=function(c){
8334
+ c.innerHTML=
8335
+ card('Decision Ledger \u2014 hash-chained receipts '+dl(),'GET '+RB+'/ledger',
8336
+ '<div class="kpis">'+kpi('Head seq','flt-rc-seq','chain length')+kpi('Receipts','flt-rc-cnt','this window')+
8337
+ kpi('Root hash','flt-rc-root','chain root')+kpi('Integrity','flt-rc-int','prior-hash link')+'</div>'+
8338
+ '<div id="flt-rc-tbl"><div class="row mono dim">loading\u2026</div></div>')+
8339
+ card('Live governed decision feed '+dl(),'GET '+AB+'/policy/decisions/feed','<div id="flt-rc-feed"><div class="row mono dim">loading\u2026</div></div>')+HON;
8340
+ poll(function(){ getJSON(RB+'/ledger').then(function(d){ var rs=d.receipts||[];
8341
+ H('flt-rc-seq',fnum(d.head_seq)); H('flt-rc-cnt',fnum(d.count!=null?d.count:rs.length));
8342
+ H('flt-rc-root','<span class="mono" style="font-size:11px">'+esc(sh(d.root_hash||''))+'</span>');
8343
+ var linked=true; for(var i=1;i<rs.length;i++){ if(rs[i].prior_hash==null){ linked=false; break; } }
8344
+ H('flt-rc-int','<span style="color:'+(linked?TEAL:AMBER)+'">'+(linked?'\u2713 linked':'partial')+'</span>');
8345
+ var rows=rs.map(function(r){return [
8346
+ esc(r.seq), '<span style="color:'+CREAM+'">'+esc(r.action||'\u2014')+'</span>',
8347
+ '<span class="mono dim">'+esc(sh(r.receipt_id||''))+'</span>',
8348
+ '<span class="mono dim">'+esc(sh(r.prior_hash||''))+'</span>',
8349
+ esc((r.timestamp_utc||'').slice(0,19)) ]; });
8350
+ H('flt-rc-tbl',tbl(['seq','action','receipt id','prior hash','timestamp'],rows));
8351
+ }).catch(function(e){err('flt-rc-tbl',e);});
8352
+ getJSON(AB+'/policy/decisions/feed').then(function(d){ var v=d.verdicts||[];
8353
+ H('flt-rc-feed',(v.length?'':'<div class="row mono dim">no decisions buffered</div>')+v.slice(0,14).map(function(x){
8354
+ return window.a11oyReceiptRow?window.a11oyReceiptRow({decision:x.decision,vertical:x.agent,action:x.action,hash:x.receipt_hash}):''; }).join('')); }).catch(function(){}); },'flt-rc');
8355
+ };
8356
+
8357
+ /* ---- Tab 3: Orchestration & Routing ---- */
8358
+ window.renderFltOrch=function(c){
8359
+ c.innerHTML=
8360
+ card('Orchestration & Routing \u2014 model tier router '+dl(),'GET '+AB+'/router/stats',
8361
+ '<div class="kpis">'+kpi('Mode','flt-or-mode','router state')+kpi('Served','flt-or-served','this window')+
8362
+ kpi('Tiers','flt-or-tiers','routing tiers')+kpi('Routes','flt-or-routes','organ\u2192model')+'</div>'+
8363
+ '<div id="flt-or-bar" style="margin:.6rem 0"></div>')+
8364
+ card('Route table','organ \u00b7 tier \u00b7 model \u00b7 throughput','<div id="flt-or-tbl"><div class="row mono dim">loading\u2026</div></div>')+
8365
+ '<div class="mono dim" style="font-size:11px" id="flt-or-hon"></div>'+HON;
8366
+ poll(function(){ getJSON(AB+'/router/stats').then(function(d){ var routes=d.routes||[];
8367
+ H('flt-or-mode',esc(d.mode||'\u2014')); H('flt-or-served',fnum(d.servedThisWindow));
8368
+ H('flt-or-tiers',fnum((d.tiers||[]).length)); H('flt-or-routes',fnum(routes.length));
8369
+ if(window.barH) window.barH('flt-or-bar',routes.map(function(r){return r.organ;}),routes.map(function(r){return r.throughput||0;}),[TEAL,GOLD,SLATE,AMBER,RED]);
8370
+ var rows=routes.map(function(r){return [
8371
+ '<span style="color:'+CREAM+'">'+esc(r.organ||'\u2014')+'</span>',
8372
+ '<span class="badge mono" style="color:'+GOLD+';border:1px solid '+GOLD+'66">'+esc(r.tier||'')+'</span>',
8373
+ esc(r.model||''), fnum(r.throughput), '<span class="dim">'+esc(r.license||'')+'</span>' ]; });
8374
+ H('flt-or-tbl',tbl(['organ','tier','model','throughput','license'],rows));
8375
+ H('flt-or-hon','Source: '+esc(d.source||'')+' \u00b7 '+esc(d.honesty||''));
8376
+ }).catch(function(e){err('flt-or-tbl',e);}); },'flt-or');
8377
+ };
8378
+
8379
+ /* ---- Tab 4: Governance-Gate Status ---- */
8380
+ window.renderFltGov=function(c){
8381
+ c.innerHTML=
8382
+ card('Governance Gates \u2014 deny-by-default policy '+dl(),'GET '+AB+'/gates \u00b7 '+fmla('F1'),
8383
+ '<div class="kpis">'+kpi('Gates','flt-gv-n','policy gates')+kpi('Lean-verified','flt-gv-v','machine-checked')+
8384
+ kpi('Declarations','flt-gv-d','kernel canonical')+kpi('MCP tools','flt-gv-m','exposed tools')+'</div>'+
8385
+ '<div id="flt-gv-don" style="margin:.6rem 0"></div>')+
8386
+ card('Govern a fleet action \u2192 signed receipt','GET '+AB+'/governed-decision',
8387
+ '<button class="vchip" id="flt-gv-run" style="background:var(--teal-soft);color:'+TEAL+';border-color:'+TEAL+'66">Govern \u2192 sign</button>'+
8388
+ '<div id="flt-gv-out" class="row mono dim" style="margin-top:.6rem">Run a governed fleet decision; \u039b advisory floor + human-approval flag + DSSE receipt.</div>')+
8389
+ card('Gate ledger','formula \u00b7 status','<div id="flt-gv-tbl"><div class="row mono dim">loading\u2026</div></div>')+HON;
8390
+ poll(function(){ getJSON(AB+'/gates').then(function(d){ var gates=d.gates||[]; var ver=gates.filter(function(g){return g.lean_verified;}).length; var can=d.canonical||{};
8391
+ H('flt-gv-n',fnum(d.count!=null?d.count:gates.length)); H('flt-gv-v',fnum(ver)+' / '+fnum(gates.length));
8392
+ H('flt-gv-d',fnum(can.declarations)); H('flt-gv-m',fnum(can.mcp_tools));
8393
+ if(window.barH) window.barH('flt-gv-don',['lean-verified','deferred'],[ver,Math.max(0,gates.length-ver)],[TEAL,AMBER]);
8394
+ var rows=gates.slice(0,40).map(function(g){ var ok=g.lean_verified; return [
8395
+ '<span style="color:'+CREAM+'">'+esc(g.name||'\u2014')+'</span>', '<span class="dim">'+esc(g.formula||'')+'</span>',
8396
+ '<span class="badge mono" style="color:'+(ok?TEAL:AMBER)+';border:1px solid '+(ok?TEAL:AMBER)+'66">'+esc(ok?'verified':(g.lean_status||'deferred'))+'</span>' ]; });
8397
+ H('flt-gv-tbl',tbl(['gate','formula','status'],rows));
8398
+ }).catch(function(e){err('flt-gv-tbl',e);}); },'flt-gv');
8399
+ function run(){ H('flt-gv-out','<div class="row mono dim">governing\u2026</div>');
8400
+ getJSON(AB+'/governed-decision').then(function(d){ var r=d.recommendation||{}; var rc=d.receipt||{}; var signed=!!(rc._pae_sha256); var col=signed?TEAL:AMBER;
8401
+ H('flt-gv-out',
8402
+ '<div class="row"><span class="badge mono" style="color:'+col+';border:1px solid '+col+'66">'+(signed?'DSSE-SIGNED':'UNSIGNED (no key)')+'</span><span style="color:'+CREAM+'">'+esc(r.title||d.brief||'\u2014')+'</span></div>'+
8403
+ '<div class="row mono" style="font-size:11px;gap:.6rem"><span class="dim">confidence</span>'+esc(r.confidence!=null?r.confidence:'\u2014')+'<span class="dim">human-approval</span>'+esc(r.requires_human_approval?'required':'not required')+'<span class="dim">\u039b</span>'+esc(d.lambda_advisory!=null?d.lambda_advisory:'\u2014')+'</div>'+
8404
+ '<div class="row mono dim" style="font-size:10.5px">PAE sha256 '+esc(sh(rc._pae_sha256||''))+' \u00b7 '+esc(rc._dsse||'')+' \u00b7 '+esc(d.lambda_status||'')+'</div>'); }).catch(function(e){err('flt-gv-out',e);}); }
8405
+ var b=E('flt-gv-run'); if(b) b.onclick=run;
8406
+ };
8407
+
8408
+ /* ---- Tab 5: Per-Agent Observability ---- */
8409
+ window.renderFltObs=function(c){
8410
+ c.innerHTML=
8411
+ card('Per-Agent Observability \u2014 MELT, signed '+dl(),'GET '+AB+'/observability/summary',
8412
+ '<div class="kpis">'+kpi('DAG depth','flt-ob-dag','trace depth')+kpi('Organs','flt-ob-org','reachable / total')+
8413
+ kpi('Signed spans','flt-ob-sp','events')+kpi('Chain','flt-ob-chain','trace verified')+'</div>'+
8414
+ '<div class="mono dim" style="font-size:11px" id="flt-ob-pitch"></div>')+
8415
+ card('Mesh reachability','organ \u00b7 status \u00b7 latency','<div id="flt-ob-tbl"><div class="row mono dim">loading\u2026</div></div>')+HON;
8416
+ poll(function(){ getJSON(AB+'/observability/summary').then(function(d){ var m=(d.melt||{}); var met=(m.metrics||{}); var reach=d.mesh_reach||[];
8417
+ H('flt-ob-dag',fnum(met.dag_depth)); H('flt-ob-org',fnum(met.organs_reachable)+' / '+fnum(met.organs_total));
8418
+ H('flt-ob-sp',fnum((m.events||{}).signed_spans)); var cv=(m.traces||{}).chain_verified;
8419
+ H('flt-ob-chain','<span style="color:'+(cv?TEAL:AMBER)+'">'+(cv?'\u2713 verified':'unverified')+'</span>');
8420
+ H('flt-ob-pitch',esc(d.pitch||'')+' \u00b7 '+esc(d.honesty||''));
8421
+ var rows=reach.map(function(x){ var ok=(x.http_code===200||x.status==='ok'||x.status==='live'); return [
8422
+ '<span style="color:'+CREAM+'">'+esc(x.organ||'\u2014')+'</span>',
8423
+ '<span class="badge mono" style="color:'+(ok?TEAL:RED)+';border:1px solid '+(ok?TEAL:RED)+'66">'+esc(x.status||'?')+' '+esc(x.http_code!=null?x.http_code:'')+'</span>',
8424
+ esc(x.latency_ms!=null?(fnum(x.latency_ms,1)+'ms'):'\u2014'), '<span class="dim">'+esc(x.probed_path||x.url||'')+'</span>' ]; });
8425
+ H('flt-ob-tbl',tbl(['agent / organ','status','latency','probe'],rows));
8426
+ }).catch(function(e){err('flt-ob-tbl',e);}); },'flt-ob');
8427
+ };
8428
+
8429
+ /* ---- register + nav ---- */
8430
+ function reg(key,title,badge,sub,fn){ if(!window.VIEWS) return; window.VIEWS[key]={title:title,badge:badge,sub:sub,render:async function(c){ fn(c); }}; }
8431
+ function regAll(){ if(!window.VIEWS){ return setTimeout(regAll,120); }
8432
+ reg('fltTopo','AI-Fleet \u2014 Topology & Health','LIVE \u00b7 capabilities mesh','3D fleet topology of the governed agent mesh: per-agent role, health, \u039b status, MCP-tool counts, BFT quorum (F12), and peer capabilities \u2014 probed live in-process. 0 client CDN, auto-poll.',window.renderFltTopo);
8433
+ reg('fltReceipts','AI-Fleet \u2014 Decision-Receipt Stream','LIVE \u00b7 hash-chained ledger','The real hash-chained decision ledger: head sequence, chain root, per-receipt prior-hash linkage (tamper-evident) and a live governed-decision feed. DSSE-signed where a key is present.',window.renderFltReceipts);
8434
+ reg('fltOrch','AI-Fleet \u2014 Orchestration & Routing','LIVE \u00b7 tier router','Model-tier orchestration: which organ routes to which tier/model, live in-memory throughput per route, served-this-window counter, and licensing posture. Throughput labeled live counter, not a billing meter.',window.renderFltOrch);
8435
+ reg('fltGov','AI-Fleet \u2014 Governance-Gate Status','LIVE \u00b7 deny-by-default','Governance gates that fence every fleet action: how many are Lean machine-verified, kernel-canonical counts, and a governed fleet decision run sealed with a DSSE receipt. \u039b advisory + human-approval flag.',window.renderFltGov);
8436
+ reg('fltObs','AI-Fleet \u2014 Per-Agent Observability','LIVE \u00b7 signed MELT','Signed observability across the fleet: MELT metrics (DAG depth, organs reachable, signed spans, chain-verified traces) and live mesh reachability + latency per agent. New-Relic-but-signed.',window.renderFltObs);
8437
+ }
8438
+ regAll();
8439
+ function injectNav(){ var anchor=document.querySelector('.nav-item[data-view="verticals"]')||document.querySelector('.nav-item');
8440
+ if(!anchor){ return setTimeout(injectNav,250); } if(document.getElementById('flt-nav-group')){ return; }
8441
+ var grp=document.createElement('div'); grp.className='nav-group'; grp.id='flt-nav-group'; grp.textContent='AI-Fleet';
8442
+ var items=[['fltTopo','\u2725','Topology & Health'],['fltReceipts','\u26d3','Decision Receipts'],['fltOrch','\u25f0','Orchestration'],['fltGov','\u2696','Governance Gates'],['fltObs','\u25f7','Observability']];
8443
+ function mk(d){ var n=document.createElement('div'); n.className='nav-item'; n.id='flt-nav-'+d[0]; n.setAttribute('data-view',d[0]); n.setAttribute('onclick',"go('"+d[0]+"')"); n.innerHTML='<span class="ico">'+d[1]+'</span>'+d[2]; return n; }
8444
+ var parent=anchor.parentNode; parent.appendChild(grp); items.forEach(function(d){ parent.appendChild(mk(d)); }); }
8445
+ if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded',injectNav); } else { injectNav(); }
8446
+ })();
8447
+ </script>
8448
+
8449
  </body>
8450
  </html>