← back to AbramsEgo
feat(dungeon): Ultron orchestrator core (sandy4ka pattern) at map center wired to every chamber + live data-flow packets (Hermes neurovision pattern) — directives Ultron→busiest chamber (blue), heartbeats chamber→Ultron (green/red on alert), edges flash red on alert
c4e1c38afa6fb9777017d0f3c3f566f0f42ab38a · 2026-07-02 08:17:22 -0700 · Steve
Files touched
M data/local-fleet.jsonM public/dungeon.html
Diff
commit c4e1c38afa6fb9777017d0f3c3f566f0f42ab38a
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Jul 2 08:17:22 2026 -0700
feat(dungeon): Ultron orchestrator core (sandy4ka pattern) at map center wired to every chamber + live data-flow packets (Hermes neurovision pattern) — directives Ultron→busiest chamber (blue), heartbeats chamber→Ultron (green/red on alert), edges flash red on alert
---
data/local-fleet.json | 2 +-
public/dungeon.html | 30 ++++++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/data/local-fleet.json b/data/local-fleet.json
index 977fca5..7b03ec5 100644
--- a/data/local-fleet.json
+++ b/data/local-fleet.json
@@ -1 +1 @@
-{"fetchedAt":"2026-07-02T15:16:23.228Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0.1,"memMB":27,"restarts":0,"uptimeMs":3654131,"startedAt":"2026-07-02T14:15:29.097Z"},{"name":"abramsego","status":"online","cpu":0.5,"memMB":67,"restarts":12,"uptimeMs":630505,"startedAt":"2026-07-02T15:05:52.723Z"},{"name":"api-token-dashboard","status":"online","cpu":0.1,"memMB":24,"restarts":0,"uptimeMs":3532517,"startedAt":"2026-07-02T14:17:30.711Z"},{"name":"pattern-vault","status":"online","cpu":0.1,"memMB":50,"restarts":3,"uptimeMs":549977,"startedAt":"2026-07-02T15:07:13.251Z"},{"name":"agent-cabinet","status":"online","cpu":0.1,"memMB":25,"restarts":0,"uptimeMs":3529793,"startedAt":"2026-07-02T14:17:33.435Z"},{"name":"astek-landing","status":"online","cpu":0.1,"memMB":36,"restarts":0,"uptimeMs":2027031,"startedAt":"2026-07-02T14:42:36.197Z"}]}
\ No newline at end of file
+{"fetchedAt":"2026-07-02T15:16:59.970Z","procs":[{"name":"pm2-logrotate","status":"online","cpu":0,"memMB":30,"restarts":0,"uptimeMs":3690873,"startedAt":"2026-07-02T14:15:29.097Z"},{"name":"abramsego","status":"online","cpu":0,"memMB":76,"restarts":13,"uptimeMs":821,"startedAt":"2026-07-02T15:16:59.149Z"},{"name":"api-token-dashboard","status":"online","cpu":0,"memMB":24,"restarts":0,"uptimeMs":3569259,"startedAt":"2026-07-02T14:17:30.711Z"},{"name":"pattern-vault","status":"online","cpu":0,"memMB":49,"restarts":3,"uptimeMs":586719,"startedAt":"2026-07-02T15:07:13.251Z"},{"name":"agent-cabinet","status":"online","cpu":0,"memMB":25,"restarts":0,"uptimeMs":3566535,"startedAt":"2026-07-02T14:17:33.435Z"},{"name":"astek-landing","status":"online","cpu":0,"memMB":38,"restarts":0,"uptimeMs":2063773,"startedAt":"2026-07-02T14:42:36.197Z"}]}
\ No newline at end of file
diff --git a/public/dungeon.html b/public/dungeon.html
index 61d0907..3aa8a28 100644
--- a/public/dungeon.html
+++ b/public/dungeon.html
@@ -258,6 +258,8 @@ function build(d){
S('sWork',agents.filter(a=>statusOf(a)==='work').length);
S('sBad',agents.filter(a=>statusOf(a)==='bad').length);
S('sClock',new Date().toLocaleTimeString([],{hour:'numeric',minute:'2-digit'}));
+ // Ultron sits at the center of the whole map, wired to every chamber
+ const b=worldBounds();ultron.x=(b.x0+b.x1)/2;ultron.y=(b.y0+b.y1)/2;
if(!chambers._fit){resetView();chambers._fit=1;}
}
const S=(id,v)=>document.getElementById(id).textContent=v;
@@ -337,6 +339,34 @@ function draw(){
ctx.fillStyle=vg;ctx.fillRect(0,0,W,H);}
document.getElementById('sClock').textContent=(day>0.15?'☀ ':'🌙 ')+now.toLocaleTimeString([],{hour:'numeric',minute:'2-digit'});
ctx.setTransform(cam.z*DPR,0,0,cam.z*DPR,-cam.x*cam.z*DPR,-cam.y*cam.z*DPR);
+ // ---- Ultron orchestrator: edges to every chamber + directive/heartbeat packets ----
+ if(chambers.length){
+ ultron.ph+=0.04;
+ // edges (drawn under everything)
+ chambers.forEach(ch=>{const cx=ch.x+ch.w/2,cy=ch.y+ch.h/2;
+ const hot=chamberScore(ch)>3, alert=agents.some(a=>a.chamber===ch&&statusOf(a)==='bad');
+ ctx.strokeStyle=alert?'#e5484d40':hot?'#d4af6a55':'#3a305033';ctx.lineWidth=alert?2:1;
+ ctx.beginPath();ctx.moveTo(ultron.x,ultron.y);ctx.lineTo(cx,cy);ctx.stroke();});
+ // spawn packets: Ultron → busiest chamber (directive), chambers → Ultron (heartbeat)
+ if(t%22===0){const busy=chambers.reduce((a,c)=>chamberScore(c)>chamberScore(a)?c:a,chambers[0]);
+ packet(ultron.x,ultron.y,busy.x+busy.w/2,busy.y+busy.h/2,'#5b8cff');}
+ if(t%14===0){const c=chambers[(Math.random()*chambers.length)|0];
+ packet(c.x+c.w/2,c.y+c.h/2,ultron.x,ultron.y, agents.some(a=>a.chamber===c&&statusOf(a)==='bad')?'#e5484d':'#37d67a');}
+ // draw packets
+ packets.forEach(p=>{const e=p.tt<.5?2*p.tt*p.tt:1-Math.pow(-2*p.tt+2,2)/2; // ease
+ const x=p.ax+(p.bx-p.ax)*p.tt,y=p.ay+(p.by-p.ay)*p.tt;
+ ctx.fillStyle=p.color;ctx.globalAlpha=.9;ctx.beginPath();ctx.arc(x,y,3,0,6.28);ctx.fill();
+ ctx.globalAlpha=.3;ctx.beginPath();ctx.arc(x,y,6,0,6.28);ctx.fill();ctx.globalAlpha=1;});
+ updatePackets();
+ // Ultron core node
+ const pr=26+Math.sin(ultron.ph)*3;
+ ctx.beginPath();ctx.arc(ultron.x,ultron.y,pr+14,0,6.28);ctx.fillStyle='#d4af6a18';ctx.fill();
+ ctx.beginPath();ctx.arc(ultron.x,ultron.y,pr,0,6.28);ctx.fillStyle='#120d1e';ctx.fill();
+ ctx.lineWidth=3;ctx.strokeStyle='#d4af6a';ctx.stroke();
+ ctx.font='26px sans-serif';ctx.textAlign='center';ctx.textBaseline='middle';ctx.fillText('🧠',ultron.x,ultron.y+1);
+ ctx.fillStyle='#d4af6a';ctx.font='700 12px Avenir Next,sans-serif';ctx.fillText('ULTRON',ultron.x,ultron.y+pr+12);
+ ctx.fillStyle='#8a7fa8';ctx.font='10px Avenir Next,sans-serif';ctx.fillText('orchestrator · keeps the fleet busy',ultron.x,ultron.y+pr+26);ctx.textAlign='left';
+ }
// chambers
chambers.forEach(ch=>{
ctx.fillStyle='#14101e';ctx.strokeStyle='#2a2038';ctx.lineWidth=2;
← e162439 auto-save: 2026-07-02T08:16:24 (2 files) — data/local-fleet.
·
back to AbramsEgo
·
feat(loop): Ng loop-engineering verification gate — smoke-te c904326 →