diff --git a/fleet/alice/autonomy-log.txt b/fleet/alice/autonomy-log.txt index f95280e..89eeb72 100644 --- a/fleet/alice/autonomy-log.txt +++ b/fleet/alice/autonomy-log.txt @@ -1,50 +1,50 @@ -[2026-03-17 07:01:01] [BEAT] [alice] load=1.25 mem=3225/3794MB temp=34.1C disk=85% -[2026-03-17 07:02:01] [BEAT] [alice] load=0.82 mem=3224/3794MB temp=34.6C disk=85% -[2026-03-17 07:03:02] [BEAT] [alice] load=1.02 mem=3232/3794MB temp=34.6C disk=85% -[2026-03-17 07:03:32] [BEAT] [alice] load=0.73 mem=3225/3794MB temp=35.0C disk=85% -[2026-03-17 07:03:32] [BEAT] [alice] load=0.73 mem=3223/3794MB temp=34.1C disk=85% -[2026-03-17 07:04:01] [BEAT] [alice] load=0.62 mem=3226/3794MB temp=33.1C disk=85% -[2026-03-17 07:05:01] [BEAT] [alice] load=1.10 mem=3218/3794MB temp=35.5C disk=85% -[2026-03-17 07:06:01] [BEAT] [alice] load=2.39 mem=3225/3794MB temp=33.6C disk=85% -[2026-03-17 07:07:01] [BEAT] [alice] load=1.98 mem=3228/3794MB temp=35.0C disk=85% -[2026-03-17 07:08:01] [BEAT] [alice] load=1.47 mem=3228/3794MB temp=34.6C disk=85% -[2026-03-17 07:08:41] [BEAT] [alice] load=1.40 mem=3221/3794MB temp=37.5C disk=85% -[2026-03-17 07:08:41] [BEAT] [alice] load=1.40 mem=3219/3794MB temp=36.0C disk=85% -[2026-03-17 07:09:01] [BEAT] [alice] load=1.27 mem=3229/3794MB temp=35.0C disk=85% -[2026-03-17 07:10:01] [FLEET] [alice] Starting cross-node health check -[2026-03-17 07:10:01] [BEAT] [alice] load=0.91 mem=3222/3794MB temp=36.0C disk=85% -[2026-03-17 07:10:02] [FLEET] [alice] octavia: UP temp=42C mem=2513MB disk=86% -[2026-03-17 07:10:03] [FLEET] [alice] cecilia: UP temp=38C mem=1128MB disk=34% -[2026-03-17 07:10:04] [FLEET] [alice] gematria: UP temp=C mem=4960MB disk=69% -[2026-03-17 07:10:05] [FLEET] [alice] lucidia: UP temp=59C mem=2649MB disk=31% -[2026-03-17 07:10:07] [FLEET] [alice] aria: DOWN (no ping response) -[2026-03-17 07:10:09] [FLEET] [alice] anastasia: DOWN (no ping response) -[2026-03-17 07:11:01] [BEAT] [alice] load=0.73 mem=3225/3794MB temp=34.1C disk=85% -[2026-03-17 07:12:01] [BEAT] [alice] load=0.90 mem=3219/3794MB temp=34.6C disk=85% -[2026-03-17 07:12:35] [DIAL] [alice] Switchboard unreachable -[2026-03-17 07:13:01] [BEAT] [alice] load=0.88 mem=3228/3794MB temp=34.1C disk=85% -[2026-03-17 07:13:47] [BEAT] [alice] load=0.81 mem=3226/3794MB temp=34.1C disk=85% -[2026-03-17 07:13:47] [BEAT] [alice] load=0.81 mem=3225/3794MB temp=34.1C disk=85% -[2026-03-17 07:14:01] [BEAT] [alice] load=0.71 mem=3230/3794MB temp=34.1C disk=85% -[2026-03-17 07:15:02] [BEAT] [alice] load=1.30 mem=3222/3794MB temp=35.5C disk=85% -[2026-03-17 07:15:47] [DIAL] [alice] Switchboard unreachable -[2026-03-17 07:16:01] [BEAT] [alice] load=0.77 mem=3225/3794MB temp=33.6C disk=85% -[2026-03-17 07:17:01] [BEAT] [alice] load=1.03 mem=3223/3794MB temp=35.0C disk=85% -[2026-03-17 07:18:01] [BEAT] [alice] load=1.11 mem=3225/3794MB temp=33.1C disk=85% -[2026-03-17 07:18:53] [BEAT] [alice] load=1.28 mem=3228/3794MB temp=35.0C disk=85% -[2026-03-17 07:18:53] [BEAT] [alice] load=1.28 mem=3227/3794MB temp=34.1C disk=85% -[2026-03-17 07:19:02] [BEAT] [alice] load=1.16 mem=3224/3794MB temp=34.1C disk=85% -[2026-03-17 07:20:01] [FLEET] [alice] Starting cross-node health check -[2026-03-17 07:20:01] [BEAT] [alice] load=0.76 mem=3219/3794MB temp=33.6C disk=85% -[2026-03-17 07:20:02] [FLEET] [alice] octavia: UP temp=42C mem=2443MB disk=86% -[2026-03-17 07:20:02] [FLEET] [alice] cecilia: UP temp=36C mem=956MB disk=34% -[2026-03-17 07:20:04] [FLEET] [alice] gematria: UP temp=C mem=4952MB disk=69% -[2026-03-17 07:20:05] [FLEET] [alice] lucidia: UP temp=62C mem=2632MB disk=31% -[2026-03-17 07:20:07] [FLEET] [alice] aria: DOWN (no ping response) -[2026-03-17 07:20:09] [FLEET] [alice] anastasia: DOWN (no ping response) -[2026-03-17 07:21:01] [BEAT] [alice] load=0.87 mem=3226/3794MB temp=33.1C disk=85% -[2026-03-17 07:22:04] [BEAT] [alice] load=1.36 mem=3231/3794MB temp=37.0C disk=85% -[2026-03-17 07:23:01] [BEAT] [alice] load=1.50 mem=3225/3794MB temp=34.6C disk=85% -[2026-03-17 07:24:01] [BEAT] [alice] load=0.95 mem=3224/3794MB temp=36.0C disk=85% -[2026-03-17 07:24:57] [BEAT] [alice] load=1.05 mem=3226/3794MB temp=34.6C disk=85% -[2026-03-17 07:24:57] [BEAT] [alice] load=1.05 mem=3225/3794MB temp=34.6C disk=85% +[2026-03-17 07:33:02] [BEAT] [alice] load=0.97 mem=3225/3794MB temp=34.1C disk=85% +[2026-03-17 07:34:01] [BEAT] [alice] load=1.62 mem=3220/3794MB temp=37.5C disk=85% +[2026-03-17 07:35:01] [BEAT] [alice] load=0.86 mem=3222/3794MB temp=34.6C disk=85% +[2026-03-17 07:35:28] [BEAT] [alice] load=0.85 mem=3217/3794MB temp=34.6C disk=85% +[2026-03-17 07:35:28] [BEAT] [alice] load=0.85 mem=3215/3794MB temp=35.5C disk=85% +[2026-03-17 07:36:02] [BEAT] [alice] load=0.98 mem=3228/3794MB temp=36.0C disk=85% +[2026-03-17 07:37:18] [BEAT] [alice] load=3.25 mem=3220/3794MB temp=35.0C disk=85% +[2026-03-17 07:38:01] [BEAT] [alice] load=3.83 mem=3227/3794MB temp=34.1C disk=85% +[2026-03-17 07:39:01] [BEAT] [alice] load=1.95 mem=3224/3794MB temp=33.1C disk=85% +[2026-03-17 07:40:01] [FLEET] [alice] Starting cross-node health check +[2026-03-17 07:40:02] [BEAT] [alice] load=1.56 mem=3218/3794MB temp=35.0C disk=85% +[2026-03-17 07:40:02] [FLEET] [alice] octavia: UP temp=45C mem=2114MB disk=87% +[2026-03-17 07:40:03] [FLEET] [alice] cecilia: UP temp=35C mem=986MB disk=34% +[2026-03-17 07:40:04] [FLEET] [alice] gematria: UP temp=C mem=4839MB disk=69% +[2026-03-17 07:40:05] [FLEET] [alice] lucidia: UP temp=56C mem=2641MB disk=31% +[2026-03-17 07:40:06] [FLEET] [alice] aria: DOWN (no ping response) +[2026-03-17 07:40:08] [FLEET] [alice] anastasia: DOWN (no ping response) +[2026-03-17 07:40:33] [BEAT] [alice] load=1.64 mem=3217/3794MB temp=35.0C disk=85% +[2026-03-17 07:40:33] [BEAT] [alice] load=1.64 mem=3226/3794MB temp=34.1C disk=85% +[2026-03-17 07:41:01] [BEAT] [alice] load=1.15 mem=3217/3794MB temp=34.1C disk=85% +[2026-03-17 07:42:01] [BEAT] [alice] load=1.14 mem=3223/3794MB temp=33.1C disk=85% +[2026-03-17 07:42:36] [DIAL] [alice] Switchboard unreachable +[2026-03-17 07:43:01] [BEAT] [alice] load=0.83 mem=3221/3794MB temp=33.6C disk=85% +[2026-03-17 07:44:01] [BEAT] [alice] load=0.98 mem=3223/3794MB temp=34.6C disk=85% +[2026-03-17 07:45:02] [BEAT] [alice] load=0.95 mem=3216/3794MB temp=34.6C disk=85% +[2026-03-17 07:45:37] [BEAT] [alice] load=1.84 mem=3212/3794MB temp=37.5C disk=85% +[2026-03-17 07:45:37] [BEAT] [alice] load=1.84 mem=3210/3794MB temp=38.0C disk=85% +[2026-03-17 07:45:47] [DIAL] [alice] Switchboard unreachable +[2026-03-17 07:46:02] [BEAT] [alice] load=1.46 mem=3223/3794MB temp=35.0C disk=85% +[2026-03-17 07:47:01] [BEAT] [alice] load=0.73 mem=3224/3794MB temp=33.1C disk=85% +[2026-03-17 07:48:01] [BEAT] [alice] load=1.19 mem=3225/3794MB temp=35.0C disk=85% +[2026-03-17 07:49:01] [BEAT] [alice] load=1.44 mem=3223/3794MB temp=33.1C disk=85% +[2026-03-17 07:50:01] [FLEET] [alice] Starting cross-node health check +[2026-03-17 07:50:01] [BEAT] [alice] load=1.10 mem=3217/3794MB temp=34.6C disk=85% +[2026-03-17 07:50:03] [FLEET] [alice] octavia: UP temp=44C mem=1955MB disk=87% +[2026-03-17 07:50:03] [FLEET] [alice] cecilia: UP temp=35C mem=934MB disk=34% +[2026-03-17 07:50:05] [FLEET] [alice] gematria: UP temp=C mem=4921MB disk=69% +[2026-03-17 07:50:05] [FLEET] [alice] lucidia: UP temp=55C mem=2639MB disk=31% +[2026-03-17 07:50:07] [FLEET] [alice] aria: DOWN (no ping response) +[2026-03-17 07:50:09] [FLEET] [alice] anastasia: DOWN (no ping response) +[2026-03-17 07:50:48] [BEAT] [alice] load=0.83 mem=3222/3794MB temp=34.6C disk=85% +[2026-03-17 07:50:48] [BEAT] [alice] load=0.83 mem=3222/3794MB temp=34.6C disk=85% +[2026-03-17 07:51:01] [BEAT] [alice] load=0.71 mem=3221/3794MB temp=34.1C disk=85% +[2026-03-17 07:52:01] [BEAT] [alice] load=1.04 mem=3222/3794MB temp=33.6C disk=85% +[2026-03-17 07:53:02] [BEAT] [alice] load=1.08 mem=3214/3794MB temp=34.1C disk=85% +[2026-03-17 07:54:01] [BEAT] [alice] load=1.02 mem=3225/3794MB temp=32.1C disk=85% +[2026-03-17 07:55:01] [BEAT] [alice] load=0.81 mem=3216/3794MB temp=34.6C disk=85% +[2026-03-17 07:56:01] [BEAT] [alice] load=1.14 mem=3223/3794MB temp=32.6C disk=85% +[2026-03-17 07:56:02] [BEAT] [alice] load=1.14 mem=3222/3794MB temp=32.1C disk=85% +[2026-03-17 07:56:02] [BEAT] [alice] load=1.14 mem=3220/3794MB temp=33.1C disk=85% diff --git a/fleet/alice/crontab.txt b/fleet/alice/crontab.txt index 779c407..d113502 100644 --- a/fleet/alice/crontab.txt +++ b/fleet/alice/crontab.txt @@ -36,3 +36,4 @@ */5 * * * * /opt/blackroad/bin/blackroad-pissed.sh @reboot /opt/blackroad/bin/blackroad-boot-hello.sh */30 * * * * /home/pi/blackroad-site-tester.sh --quiet >> /tmp/br-tester.log 2>&1 +*/5 * * * * /home/pi/uptime-monitor.sh diff --git a/fleet/alice/heartbeat.json b/fleet/alice/heartbeat.json index 51d35c2..b65cbca 100644 --- a/fleet/alice/heartbeat.json +++ b/fleet/alice/heartbeat.json @@ -1 +1 @@ -{"node":"alice","ts":"2026-03-17T12:30:01Z","load":1.13,"mem_free_mb":3220,"mem_total_mb":3794,"temp_c":36.5,"disk_pct":85,"throttle":"0x0"} +{"node":"alice","ts":"2026-03-17T12:56:02Z","load":1.14,"mem_free_mb":3220,"mem_total_mb":3794,"temp_c":33.1,"disk_pct":85,"throttle":"0x0"} diff --git a/fleet/alice/ports.txt b/fleet/alice/ports.txt index 3e06867..e452dc8 100644 --- a/fleet/alice/ports.txt +++ b/fleet/alice/ports.txt @@ -13,7 +13,7 @@ LISTEN 0 511 0.0.0.0:8080 0.0.0.0:* LISTEN 0 511 0.0.0.0:8083 0.0.0.0:* users:(("node /usr/lib/n",pid=3707,fd=20)) LISTEN 0 5 0.0.0.0:8184 0.0.0.0:* LISTEN 0 4096 127.0.0.1:9050 0.0.0.0:* -LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=32680,fd=5)) +LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=31226,fd=5)) LISTEN 0 200 0.0.0.0:443 0.0.0.0:* LISTEN 0 128 127.0.0.1:11434 0.0.0.0:* LISTEN 0 32 0.0.0.0:53 0.0.0.0:* diff --git a/fleet/alice/system-info.json b/fleet/alice/system-info.json index 279b8fd..11d13d2 100644 --- a/fleet/alice/system-info.json +++ b/fleet/alice/system-info.json @@ -1,19 +1,19 @@ { "hostname": "alice", - "ts": "2026-03-17T12:24:58Z", - "uptime_seconds": 32367, + "ts": "2026-03-17T12:56:03Z", + "uptime_seconds": 34233, "kernel": "6.1.21-v8+", - "temp_c": 36.5, + "temp_c": 34.1, "memory_mb": { "total": 3794, - "used": 483, - "free": 3208 + "used": 468, + "free": 3222 }, "disk": "12G/15G (85%)", "load": [ - 1.05, - 1.14, - 1.14 + 1.13, + 1.15, + 1.22 ], "ollama_models": [ "lucidia3b:latest", @@ -26,5 +26,5 @@ ], "throttle": "0x0", "voltage": "0.9160V", - "services_running": 48 + "services_running": 47 } diff --git a/fleet/anastasia/status.json b/fleet/anastasia/status.json index 308abfd..8a77db6 100644 --- a/fleet/anastasia/status.json +++ b/fleet/anastasia/status.json @@ -1 +1 @@ -{"node":"anastasia","status":"down","ts":"2026-03-17T12:30:01Z"} +{"node":"anastasia","status":"down","ts":"2026-03-17T12:56:03Z"} diff --git a/fleet/aria/status.json b/fleet/aria/status.json index e519651..f4c2ce7 100644 --- a/fleet/aria/status.json +++ b/fleet/aria/status.json @@ -1 +1 @@ -{"node":"aria","status":"down","ts":"2026-03-17T12:30:01Z"} +{"node":"aria","status":"down","ts":"2026-03-17T12:56:03Z"} diff --git a/fleet/cecilia/autonomy-log.txt b/fleet/cecilia/autonomy-log.txt index 37ce063..f7b582d 100644 --- a/fleet/cecilia/autonomy-log.txt +++ b/fleet/cecilia/autonomy-log.txt @@ -1,50 +1,50 @@ -[2026-03-17 07:03:32] [BEAT] [cecilia] load=0.21 mem=938/8062MB temp=38.6C disk=34% -[2026-03-17 07:04:01] [BEAT] [cecilia] load=0.25 mem=941/8062MB temp=37.0C disk=34% -[2026-03-17 07:05:01] [BEAT] [cecilia] load=0.32 mem=913/8062MB temp=38.6C disk=34% -[2026-03-17 07:05:01] [HEAL] [cecilia] High swap: 1397MB — clearing inactive -[2026-03-17 07:06:01] [BEAT] [cecilia] load=0.33 mem=902/8062MB temp=37.5C disk=34% -[2026-03-17 07:07:01] [BEAT] [cecilia] load=0.36 mem=902/8062MB temp=36.4C disk=34% -[2026-03-17 07:08:01] [BEAT] [cecilia] load=0.37 mem=902/8062MB temp=37.0C disk=34% -[2026-03-17 07:08:40] [BEAT] [cecilia] load=0.33 mem=894/8062MB temp=35.9C disk=34% -[2026-03-17 07:08:40] [BEAT] [cecilia] load=0.33 mem=891/8062MB temp=38.0C disk=34% -[2026-03-17 07:09:01] [BEAT] [cecilia] load=0.23 mem=894/8062MB temp=35.9C disk=34% -[2026-03-17 07:10:01] [FLEET] [cecilia] Starting cross-node health check -[2026-03-17 07:10:01] [BEAT] [cecilia] load=0.87 mem=1176/8062MB temp=37.5C disk=34% -[2026-03-17 07:10:01] [HEAL] [cecilia] High swap: 2047MB — clearing inactive -[2026-03-17 07:10:02] [FLEET] [cecilia] alice: UP temp=34C mem=3218MB disk=85% -[2026-03-17 07:10:03] [FLEET] [cecilia] octavia: UP temp=42C mem=2509MB disk=86% -[2026-03-17 07:10:04] [FLEET] [cecilia] gematria: UP temp=C mem=4960MB disk=69% -[2026-03-17 07:10:05] [FLEET] [cecilia] lucidia: UP temp=59C mem=2649MB disk=31% -[2026-03-17 07:10:07] [FLEET] [cecilia] aria: DOWN (no ping response) -[2026-03-17 07:10:09] [FLEET] [cecilia] anastasia: DOWN (no ping response) -[2026-03-17 07:11:01] [BEAT] [cecilia] load=0.52 mem=1264/8062MB temp=35.9C disk=34% -[2026-03-17 07:12:01] [BEAT] [cecilia] load=0.47 mem=1263/8062MB temp=36.4C disk=34% -[2026-03-17 07:12:36] [DIAL] [cecilia] Switchboard unreachable -[2026-03-17 07:13:01] [BEAT] [cecilia] load=1.21 mem=1268/8062MB temp=37.0C disk=34% -[2026-03-17 07:13:47] [BEAT] [cecilia] load=1.49 mem=1267/8062MB temp=35.9C disk=34% -[2026-03-17 07:13:47] [BEAT] [cecilia] load=1.49 mem=1266/8062MB temp=35.9C disk=34% -[2026-03-17 07:14:01] [BEAT] [cecilia] load=1.37 mem=1267/8062MB temp=36.4C disk=34% -[2026-03-17 07:15:01] [BEAT] [cecilia] load=0.99 mem=1227/8062MB temp=37.5C disk=34% -[2026-03-17 07:15:01] [HEAL] [cecilia] High swap: 2046MB — clearing inactive -[2026-03-17 07:15:46] [DIAL] [cecilia] Switchboard unreachable -[2026-03-17 07:16:01] [BEAT] [cecilia] load=0.53 mem=940/8062MB temp=35.9C disk=34% -[2026-03-17 07:17:01] [BEAT] [cecilia] load=0.43 mem=944/8062MB temp=35.9C disk=34% -[2026-03-17 07:18:01] [BEAT] [cecilia] load=0.28 mem=943/8062MB temp=35.3C disk=34% -[2026-03-17 07:18:52] [BEAT] [cecilia] load=0.18 mem=934/8062MB temp=35.3C disk=34% -[2026-03-17 07:18:53] [BEAT] [cecilia] load=0.18 mem=932/8062MB temp=35.9C disk=34% -[2026-03-17 07:19:01] [BEAT] [cecilia] load=0.15 mem=929/8062MB temp=35.3C disk=34% -[2026-03-17 07:20:01] [FLEET] [cecilia] Starting cross-node health check -[2026-03-17 07:20:02] [BEAT] [cecilia] load=0.33 mem=902/8062MB temp=36.4C disk=34% -[2026-03-17 07:20:02] [HEAL] [cecilia] High swap: 2044MB — clearing inactive -[2026-03-17 07:20:02] [FLEET] [cecilia] alice: UP temp=35C mem=3221MB disk=85% -[2026-03-17 07:20:03] [FLEET] [cecilia] octavia: UP temp=43C mem=2496MB disk=86% -[2026-03-17 07:20:04] [FLEET] [cecilia] gematria: UP temp=C mem=4952MB disk=69% -[2026-03-17 07:20:05] [FLEET] [cecilia] lucidia: UP temp=62C mem=2632MB disk=31% -[2026-03-17 07:20:07] [FLEET] [cecilia] aria: DOWN (no ping response) -[2026-03-17 07:20:09] [FLEET] [cecilia] anastasia: DOWN (no ping response) -[2026-03-17 07:21:01] [BEAT] [cecilia] load=0.40 mem=991/8062MB temp=36.4C disk=34% -[2026-03-17 07:22:01] [BEAT] [cecilia] load=0.32 mem=990/8062MB temp=35.9C disk=34% -[2026-03-17 07:23:01] [BEAT] [cecilia] load=0.42 mem=985/8062MB temp=35.9C disk=34% -[2026-03-17 07:24:01] [BEAT] [cecilia] load=0.49 mem=986/8062MB temp=34.2C disk=34% -[2026-03-17 07:24:56] [BEAT] [cecilia] load=0.29 mem=982/8062MB temp=36.4C disk=34% -[2026-03-17 07:24:56] [BEAT] [cecilia] load=0.29 mem=980/8062MB temp=35.3C disk=34% +[2026-03-17 07:35:28] [BEAT] [cecilia] load=0.98 mem=1031/8062MB temp=35.3C disk=34% +[2026-03-17 07:36:01] [BEAT] [cecilia] load=0.66 mem=1043/8062MB temp=34.8C disk=34% +[2026-03-17 07:37:02] [BEAT] [cecilia] load=0.96 mem=1039/8062MB temp=35.3C disk=34% +[2026-03-17 07:38:01] [BEAT] [cecilia] load=0.79 mem=1046/8062MB temp=35.9C disk=34% +[2026-03-17 07:39:01] [BEAT] [cecilia] load=0.52 mem=1047/8062MB temp=34.8C disk=34% +[2026-03-17 07:40:01] [FLEET] [cecilia] Starting cross-node health check +[2026-03-17 07:40:01] [BEAT] [cecilia] load=0.34 mem=1015/8062MB temp=35.9C disk=34% +[2026-03-17 07:40:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive +[2026-03-17 07:40:02] [FLEET] [cecilia] alice: UP temp=36C mem=3218MB disk=85% +[2026-03-17 07:40:02] [FLEET] [cecilia] octavia: UP temp=45C mem=2113MB disk=87% +[2026-03-17 07:40:03] [FLEET] [cecilia] gematria: UP temp=C mem=4839MB disk=69% +[2026-03-17 07:40:04] [FLEET] [cecilia] lucidia: UP temp=57C mem=2639MB disk=31% +[2026-03-17 07:40:06] [FLEET] [cecilia] aria: DOWN (no ping response) +[2026-03-17 07:40:08] [FLEET] [cecilia] anastasia: DOWN (no ping response) +[2026-03-17 07:40:32] [BEAT] [cecilia] load=0.32 mem=1047/8062MB temp=35.3C disk=34% +[2026-03-17 07:40:32] [BEAT] [cecilia] load=0.32 mem=1045/8062MB temp=34.2C disk=34% +[2026-03-17 07:41:01] [BEAT] [cecilia] load=0.21 mem=1050/8062MB temp=34.8C disk=34% +[2026-03-17 07:42:01] [BEAT] [cecilia] load=0.36 mem=1033/8062MB temp=35.3C disk=34% +[2026-03-17 07:42:42] [DIAL] [cecilia] Switchboard unreachable +[2026-03-17 07:43:01] [BEAT] [cecilia] load=0.21 mem=1046/8062MB temp=35.3C disk=34% +[2026-03-17 07:44:01] [BEAT] [cecilia] load=0.23 mem=1043/8062MB temp=35.3C disk=34% +[2026-03-17 07:45:01] [BEAT] [cecilia] load=0.56 mem=1005/8062MB temp=37.0C disk=34% +[2026-03-17 07:45:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive +[2026-03-17 07:45:37] [BEAT] [cecilia] load=0.97 mem=920/8062MB temp=35.9C disk=34% +[2026-03-17 07:45:37] [BEAT] [cecilia] load=0.97 mem=916/8062MB temp=34.8C disk=34% +[2026-03-17 07:45:46] [DIAL] [cecilia] Switchboard unreachable +[2026-03-17 07:46:01] [BEAT] [cecilia] load=0.90 mem=938/8062MB temp=34.8C disk=34% +[2026-03-17 07:47:01] [BEAT] [cecilia] load=0.76 mem=925/8062MB temp=35.3C disk=34% +[2026-03-17 07:48:01] [BEAT] [cecilia] load=0.44 mem=915/8062MB temp=34.8C disk=34% +[2026-03-17 07:49:01] [BEAT] [cecilia] load=0.21 mem=912/8062MB temp=34.8C disk=34% +[2026-03-17 07:50:01] [FLEET] [cecilia] Starting cross-node health check +[2026-03-17 07:50:01] [BEAT] [cecilia] load=0.36 mem=877/8062MB temp=35.9C disk=34% +[2026-03-17 07:50:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive +[2026-03-17 07:50:03] [FLEET] [cecilia] alice: UP temp=35C mem=3218MB disk=85% +[2026-03-17 07:50:03] [FLEET] [cecilia] octavia: UP temp=46C mem=1942MB disk=87% +[2026-03-17 07:50:04] [FLEET] [cecilia] gematria: UP temp=C mem=4918MB disk=69% +[2026-03-17 07:50:05] [FLEET] [cecilia] lucidia: UP temp=53C mem=2639MB disk=31% +[2026-03-17 07:50:07] [FLEET] [cecilia] aria: DOWN (no ping response) +[2026-03-17 07:50:09] [FLEET] [cecilia] anastasia: DOWN (no ping response) +[2026-03-17 07:50:47] [BEAT] [cecilia] load=0.37 mem=978/8062MB temp=35.3C disk=34% +[2026-03-17 07:50:47] [BEAT] [cecilia] load=0.37 mem=980/8062MB temp=34.2C disk=34% +[2026-03-17 07:51:01] [BEAT] [cecilia] load=0.51 mem=970/8062MB temp=35.9C disk=34% +[2026-03-17 07:52:01] [BEAT] [cecilia] load=0.41 mem=969/8062MB temp=34.8C disk=34% +[2026-03-17 07:53:01] [BEAT] [cecilia] load=0.29 mem=961/8062MB temp=34.8C disk=34% +[2026-03-17 07:54:01] [BEAT] [cecilia] load=0.22 mem=954/8062MB temp=35.3C disk=34% +[2026-03-17 07:55:01] [BEAT] [cecilia] load=1.67 mem=918/8062MB temp=35.3C disk=34% +[2026-03-17 07:55:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive +[2026-03-17 07:56:01] [BEAT] [cecilia] load=1.47 mem=954/8062MB temp=34.8C disk=34% +[2026-03-17 07:56:02] [BEAT] [cecilia] load=1.47 mem=949/8062MB temp=34.8C disk=34% +[2026-03-17 07:56:02] [BEAT] [cecilia] load=1.47 mem=948/8062MB temp=35.3C disk=34% diff --git a/fleet/cecilia/heartbeat.json b/fleet/cecilia/heartbeat.json index e216d19..c6a81e3 100644 --- a/fleet/cecilia/heartbeat.json +++ b/fleet/cecilia/heartbeat.json @@ -1 +1 @@ -{"node":"cecilia","ts":"2026-03-17T12:30:00Z","load":0.34,"mem_free_mb":958,"mem_total_mb":8062,"temp_c":35.9,"disk_pct":34,"throttle":"N/A"} +{"node":"cecilia","ts":"2026-03-17T12:56:02Z","load":1.47,"mem_free_mb":948,"mem_total_mb":8062,"temp_c":35.3,"disk_pct":34,"throttle":"N/A"} diff --git a/fleet/cecilia/ports.txt b/fleet/cecilia/ports.txt index 124e692..e585a76 100644 --- a/fleet/cecilia/ports.txt +++ b/fleet/cecilia/ports.txt @@ -16,7 +16,7 @@ LISTEN 0 4096 127.0.0.1:41511 0.0.0.0:* LISTEN 0 5 0.0.0.0:4010 0.0.0.0:* users:(("python3",pid=1034,fd=3)) LISTEN 0 511 0.0.0.0:8080 0.0.0.0:* LISTEN 0 5 0.0.0.0:8089 0.0.0.0:* users:(("python3",pid=336021,fd=5)) -LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=836650,fd=5)) +LISTEN 0 5 0.0.0.0:7890 0.0.0.0:* users:(("python3",pid=906561,fd=5)) LISTEN 0 4096 127.0.0.1:8088 0.0.0.0:* LISTEN 0 4096 127.0.0.1:20241 0.0.0.0:* LISTEN 0 5 0.0.0.0:11435 0.0.0.0:* users:(("python3",pid=1403,fd=3)) diff --git a/fleet/cecilia/system-info.json b/fleet/cecilia/system-info.json index 6c79feb..82d1146 100644 --- a/fleet/cecilia/system-info.json +++ b/fleet/cecilia/system-info.json @@ -1,24 +1,24 @@ { "hostname": "cecilia", - "ts": "2026-03-17T12:30:01Z", - "uptime_seconds": 32711, + "ts": "2026-03-17T12:56:03Z", + "uptime_seconds": 34272, "kernel": "6.12.62+rpt-rpi-2712", - "temp_c": 34.8, + "temp_c": 35.3, "memory_mb": { "total": 8062, - "used": 7150, - "free": 912 + "used": 7119, + "free": 943 }, "disk": "144G/457G (34%)", "load": [ - 0.31, - 0.32, - 0.71 + 1.47, + 0.89, + 0.69 ], "ollama_models": [ "amundson:latest", - "qwen2.5:3b", "cecilia3b:latest", + "qwen2.5:3b", "cecilia:latest", "deepseek-r1:1.5b", "nomic-embed-text:latest", diff --git a/fleet/gematria/status.json b/fleet/gematria/status.json index 13ce251..978d434 100644 --- a/fleet/gematria/status.json +++ b/fleet/gematria/status.json @@ -1 +1 @@ -{"node":"gematria","status":"down","ts":"2026-03-17T12:30:01Z"} +{"node":"gematria","status":"down","ts":"2026-03-17T12:56:03Z"} diff --git a/fleet/lucidia/autonomy-log.txt b/fleet/lucidia/autonomy-log.txt index f7f8c64..0d36779 100644 --- a/fleet/lucidia/autonomy-log.txt +++ b/fleet/lucidia/autonomy-log.txt @@ -1,50 +1,50 @@ -[2026-03-17 07:03:32] [BEAT] [lucidia] load=2.96 mem=2654/8063MB temp=49.0C disk=31% -[2026-03-17 07:04:01] [BEAT] [lucidia] load=4.76 mem=2696/8063MB temp=59.5C disk=31% -[2026-03-17 07:05:01] [BEAT] [lucidia] load=4.80 mem=2697/8063MB temp=52.9C disk=31% -[2026-03-17 07:05:01] [HEAL] [lucidia] High swap: 668MB — clearing inactive -[2026-03-17 07:06:01] [BEAT] [lucidia] load=4.52 mem=2689/8063MB temp=61.1C disk=31% -[2026-03-17 07:07:01] [BEAT] [lucidia] load=2.52 mem=2710/8063MB temp=51.8C disk=31% -[2026-03-17 07:08:01] [BEAT] [lucidia] load=3.71 mem=2663/8063MB temp=51.8C disk=31% -[2026-03-17 07:08:40] [BEAT] [lucidia] load=16.93 mem=2648/8063MB temp=57.3C disk=31% -[2026-03-17 07:08:41] [BEAT] [lucidia] load=16.93 mem=2648/8063MB temp=56.8C disk=31% -[2026-03-17 07:09:20] [BEAT] [lucidia] load=28.23 mem=2655/8063MB temp=52.9C disk=31% -[2026-03-17 07:10:01] [FLEET] [lucidia] Starting cross-node health check -[2026-03-17 07:10:01] [BEAT] [lucidia] load=15.74 mem=2647/8063MB temp=58.4C disk=31% -[2026-03-17 07:10:02] [HEAL] [lucidia] High swap: 668MB — clearing inactive -[2026-03-17 07:10:03] [FLEET] [lucidia] alice: UP temp=34C mem=3218MB disk=85% -[2026-03-17 07:10:05] [FLEET] [lucidia] octavia: DOWN (no ping response) -[2026-03-17 07:10:05] [FLEET] [lucidia] cecilia: UP temp=38C mem=1142MB disk=34% -[2026-03-17 07:10:07] [FLEET] [lucidia] gematria: UP temp=C mem=4966MB disk=69% -[2026-03-17 07:10:09] [FLEET] [lucidia] aria: DOWN (no ping response) -[2026-03-17 07:10:11] [FLEET] [lucidia] anastasia: DOWN (no ping response) -[2026-03-17 07:10:50] [DIAL] [lucidia] Switchboard unreachable -[2026-03-17 07:11:01] [BEAT] [lucidia] load=7.46 mem=2692/8063MB temp=52.9C disk=31% -[2026-03-17 07:12:01] [BEAT] [lucidia] load=4.70 mem=2682/8063MB temp=53.5C disk=31% -[2026-03-17 07:13:01] [BEAT] [lucidia] load=3.09 mem=2673/8063MB temp=60.0C disk=31% -[2026-03-17 07:13:47] [BEAT] [lucidia] load=4.16 mem=2646/8063MB temp=56.8C disk=31% -[2026-03-17 07:13:47] [BEAT] [lucidia] load=4.16 mem=2644/8063MB temp=59.0C disk=31% -[2026-03-17 07:14:01] [BEAT] [lucidia] load=3.45 mem=2668/8063MB temp=55.6C disk=31% -[2026-03-17 07:15:01] [BEAT] [lucidia] load=2.69 mem=2625/8063MB temp=61.1C disk=31% -[2026-03-17 07:15:01] [HEAL] [lucidia] High swap: 667MB — clearing inactive -[2026-03-17 07:15:46] [DIAL] [lucidia] Switchboard unreachable -[2026-03-17 07:16:01] [BEAT] [lucidia] load=1.78 mem=2656/8063MB temp=52.9C disk=31% -[2026-03-17 07:17:01] [BEAT] [lucidia] load=1.75 mem=2678/8063MB temp=54.5C disk=31% -[2026-03-17 07:19:53] [BEAT] [lucidia] load=56.02 mem=2728/8063MB temp=61.7C disk=31% -[2026-03-17 07:19:53] [BEAT] [lucidia] load=56.02 mem=2714/8063MB temp=62.2C disk=31% -[2026-03-17 07:19:53] [BEAT] [lucidia] load=52.33 mem=2685/8063MB temp=60.6C disk=31% -[2026-03-17 07:19:53] [BEAT] [lucidia] load=52.33 mem=2684/8063MB temp=61.1C disk=31% -[2026-03-17 07:20:01] [FLEET] [lucidia] Starting cross-node health check -[2026-03-17 07:20:01] [BEAT] [lucidia] load=48.70 mem=2660/8063MB temp=60.6C disk=31% -[2026-03-17 07:20:01] [HEAL] [lucidia] High swap: 665MB — clearing inactive -[2026-03-17 07:20:02] [FLEET] [lucidia] alice: UP temp=35C mem=3219MB disk=85% -[2026-03-17 07:20:04] [FLEET] [lucidia] octavia: DOWN (no ping response) -[2026-03-17 07:20:05] [FLEET] [lucidia] cecilia: UP temp=37C mem=961MB disk=34% -[2026-03-17 07:20:06] [FLEET] [lucidia] gematria: UP temp=C mem=4956MB disk=69% -[2026-03-17 07:20:08] [FLEET] [lucidia] aria: DOWN (no ping response) -[2026-03-17 07:20:10] [FLEET] [lucidia] anastasia: DOWN (no ping response) -[2026-03-17 07:21:29] [BEAT] [lucidia] load=26.79 mem=2700/8063MB temp=52.9C disk=31% -[2026-03-17 07:22:01] [BEAT] [lucidia] load=17.67 mem=2650/8063MB temp=55.6C disk=31% -[2026-03-17 07:23:01] [BEAT] [lucidia] load=7.12 mem=2698/8063MB temp=60.0C disk=31% -[2026-03-17 07:24:01] [BEAT] [lucidia] load=5.33 mem=2697/8063MB temp=58.4C disk=31% -[2026-03-17 07:24:57] [BEAT] [lucidia] load=3.18 mem=2680/8063MB temp=56.8C disk=31% -[2026-03-17 07:24:57] [BEAT] [lucidia] load=3.18 mem=2679/8063MB temp=57.9C disk=31% +[2026-03-17 07:35:28] [BEAT] [lucidia] load=2.44 mem=2670/8063MB temp=52.9C disk=31% +[2026-03-17 07:35:28] [BEAT] [lucidia] load=2.44 mem=2669/8063MB temp=52.9C disk=31% +[2026-03-17 07:36:01] [BEAT] [lucidia] load=2.46 mem=2706/8063MB temp=60.6C disk=31% +[2026-03-17 07:37:01] [BEAT] [lucidia] load=1.70 mem=2685/8063MB temp=52.9C disk=31% +[2026-03-17 07:38:01] [BEAT] [lucidia] load=3.35 mem=2669/8063MB temp=63.4C disk=31% +[2026-03-17 07:39:01] [BEAT] [lucidia] load=2.45 mem=2707/8063MB temp=54.0C disk=31% +[2026-03-17 07:40:01] [FLEET] [lucidia] Starting cross-node health check +[2026-03-17 07:40:01] [BEAT] [lucidia] load=3.07 mem=2662/8063MB temp=56.2C disk=31% +[2026-03-17 07:40:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive +[2026-03-17 07:40:02] [FLEET] [lucidia] alice: UP temp=34C mem=3212MB disk=85% +[2026-03-17 07:40:04] [FLEET] [lucidia] octavia: DOWN (no ping response) +[2026-03-17 07:40:05] [FLEET] [lucidia] cecilia: UP temp=36C mem=996MB disk=34% +[2026-03-17 07:40:06] [FLEET] [lucidia] gematria: UP temp=C mem=4839MB disk=69% +[2026-03-17 07:40:08] [FLEET] [lucidia] aria: DOWN (no ping response) +[2026-03-17 07:40:10] [FLEET] [lucidia] anastasia: DOWN (no ping response) +[2026-03-17 07:40:32] [BEAT] [lucidia] load=1.96 mem=2644/8063MB temp=54.5C disk=31% +[2026-03-17 07:40:32] [BEAT] [lucidia] load=1.96 mem=2643/8063MB temp=54.5C disk=31% +[2026-03-17 07:40:53] [DIAL] [lucidia] Switchboard unreachable +[2026-03-17 07:41:01] [BEAT] [lucidia] load=2.20 mem=2679/8063MB temp=61.1C disk=31% +[2026-03-17 07:42:01] [BEAT] [lucidia] load=1.28 mem=2680/8063MB temp=53.5C disk=31% +[2026-03-17 07:43:01] [BEAT] [lucidia] load=3.38 mem=2685/8063MB temp=63.4C disk=31% +[2026-03-17 07:44:01] [BEAT] [lucidia] load=2.12 mem=2681/8063MB temp=53.5C disk=31% +[2026-03-17 07:45:24] [BEAT] [lucidia] load=4.76 mem=2641/8063MB temp=55.6C disk=31% +[2026-03-17 07:45:26] [HEAL] [lucidia] High swap: 664MB — clearing inactive +[2026-03-17 07:46:02] [BEAT] [lucidia] load=33.31 mem=2679/8063MB temp=51.8C disk=31% +[2026-03-17 07:46:10] [DIAL] [lucidia] Switchboard unreachable +[2026-03-17 07:47:01] [BEAT] [lucidia] load=14.72 mem=2651/8063MB temp=52.9C disk=31% +[2026-03-17 07:48:01] [BEAT] [lucidia] load=9.19 mem=2654/8063MB temp=63.4C disk=31% +[2026-03-17 07:49:01] [BEAT] [lucidia] load=5.29 mem=2668/8063MB temp=55.1C disk=31% +[2026-03-17 07:50:01] [FLEET] [lucidia] Starting cross-node health check +[2026-03-17 07:50:01] [BEAT] [lucidia] load=2.92 mem=2643/8063MB temp=56.8C disk=31% +[2026-03-17 07:50:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive +[2026-03-17 07:50:02] [FLEET] [lucidia] alice: UP temp=34C mem=3218MB disk=85% +[2026-03-17 07:50:04] [FLEET] [lucidia] octavia: DOWN (no ping response) +[2026-03-17 07:50:05] [FLEET] [lucidia] cecilia: UP temp=36C mem=935MB disk=34% +[2026-03-17 07:50:06] [FLEET] [lucidia] gematria: UP temp=C mem=4913MB disk=69% +[2026-03-17 07:50:08] [FLEET] [lucidia] aria: DOWN (no ping response) +[2026-03-17 07:50:10] [FLEET] [lucidia] anastasia: DOWN (no ping response) +[2026-03-17 07:50:59] [BEAT] [lucidia] load=11.98 mem=2672/8063MB temp=56.2C disk=31% +[2026-03-17 07:50:59] [BEAT] [lucidia] load=11.98 mem=2674/8063MB temp=54.5C disk=31% +[2026-03-17 07:51:02] [BEAT] [lucidia] load=11.58 mem=2646/8063MB temp=56.8C disk=31% +[2026-03-17 07:52:03] [BEAT] [lucidia] load=16.34 mem=2630/8063MB temp=52.9C disk=31% +[2026-03-17 07:53:01] [BEAT] [lucidia] load=8.21 mem=2649/8063MB temp=61.1C disk=31% +[2026-03-17 07:54:01] [BEAT] [lucidia] load=3.99 mem=2677/8063MB temp=51.8C disk=31% +[2026-03-17 07:55:01] [BEAT] [lucidia] load=2.67 mem=2674/8063MB temp=51.2C disk=31% +[2026-03-17 07:55:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive +[2026-03-17 07:55:54] [DIAL] [lucidia] Switchboard unreachable +[2026-03-17 07:56:32] [BEAT] [lucidia] load=22.77 mem=2670/8063MB temp=45.2C disk=31% +[2026-03-17 07:56:33] [BEAT] [lucidia] load=22.77 mem=2622/8063MB temp=49.6C disk=31% +[2026-03-17 07:56:33] [BEAT] [lucidia] load=22.77 mem=2619/8063MB temp=49.6C disk=31% diff --git a/fleet/lucidia/docker.txt b/fleet/lucidia/docker.txt index 4ab0dde..07831f3 100644 --- a/fleet/lucidia/docker.txt +++ b/fleet/lucidia/docker.txt @@ -1,14 +1,14 @@ -road-pdns Up 7 hours -road-pdns-admin Up 7 hours (healthy) +road-pdns Up 8 hours +road-pdns-admin Up 8 hours (healthy) road-dns-db Up 8 hours -blackroad-gitea Up 9 hours -roadauth Up 9 hours -roadapi Up 9 hours -blackroad-edge-agent Up 9 hours -blackroad.systems Up 9 hours -blackroadai.com Up 9 hours -blackroad-auth-gateway Up 9 hours -blackroad-metaverse Up 9 hours -blackroad-os Up 9 hours -blackroad-os-carpool Up 9 hours -pi-my-agent-1 Up 9 hours (healthy) +blackroad-gitea Up 10 hours +roadauth Up 10 hours +roadapi Up 10 hours +blackroad-edge-agent Up 10 hours +blackroad.systems Up 10 hours +blackroadai.com Up 10 hours +blackroad-auth-gateway Up 10 hours +blackroad-metaverse Up 10 hours +blackroad-os Up 10 hours +blackroad-os-carpool Up 10 hours +pi-my-agent-1 Up 10 hours (healthy) diff --git a/fleet/lucidia/heartbeat.json b/fleet/lucidia/heartbeat.json index d7a484c..7d25bbd 100644 --- a/fleet/lucidia/heartbeat.json +++ b/fleet/lucidia/heartbeat.json @@ -1 +1 @@ -{"node":"lucidia","ts":"2026-03-17T12:24:57Z","load":3.18,"mem_free_mb":2679,"mem_total_mb":8063,"temp_c":57.9,"disk_pct":31,"throttle":"N/A"} +{"node":"lucidia","ts":"2026-03-17T12:56:33Z","load":22.77,"mem_free_mb":2619,"mem_total_mb":8063,"temp_c":49.6,"disk_pct":31,"throttle":"N/A"} diff --git a/fleet/lucidia/system-info.json b/fleet/lucidia/system-info.json index 79cfdf0..31a04d6 100644 --- a/fleet/lucidia/system-info.json +++ b/fleet/lucidia/system-info.json @@ -1,19 +1,19 @@ { "hostname": "lucidia", - "ts": "2026-03-17T12:24:57Z", - "uptime_seconds": 32470, + "ts": "2026-03-17T12:56:34Z", + "uptime_seconds": 34367, "kernel": "6.12.62+rpt-rpi-2712", - "temp_c": 57.3, + "temp_c": 49.6, "memory_mb": { "total": 8063, - "used": 5385, - "free": 2677 + "used": 5448, + "free": 2615 }, "disk": "68G/235G (31%)", "load": [ - 3.18, - 11.62, - 10.59 + 22.77, + 10.84, + 8.72 ], "ollama_models": [ "lucidia3b:latest", diff --git a/fleet/octavia/status.json b/fleet/octavia/status.json index 65fcfbe..7b52d6d 100644 --- a/fleet/octavia/status.json +++ b/fleet/octavia/status.json @@ -1 +1 @@ -{"node":"octavia","status":"down","ts":"2026-03-17T12:30:01Z"} +{"node":"octavia","status":"down","ts":"2026-03-17T12:56:03Z"} diff --git a/roadc/interpreter.py b/roadc/interpreter.py index 1f1ba7a..a137879 100644 --- a/roadc/interpreter.py +++ b/roadc/interpreter.py @@ -1,9 +1,11 @@ """ RoadC Language - Tree-Walking Interpreter Executes AST nodes produced by the parser +Includes ternary runtime (BlackBox Protocol) """ from ast_nodes import * +from ternary import Trit, TernaryWord, TernaryRouter, ARRIVED, WAITING, CANCELLED class ReturnSignal(Exception): @@ -47,6 +49,30 @@ class Environment: class Interpreter: def __init__(self): self.global_env = Environment() + self.router = TernaryRouter() + self._setup_builtins() + + def _setup_builtins(self): + """Register built-in functions including ternary operations""" + env = self.global_env + # Standard + env.set('print', lambda *args: print(*args)) + env.set('len', len) + env.set('range', lambda *a: list(range(*a))) + env.set('str', str) + env.set('int', int) + env.set('float', float) + env.set('type', lambda x: type(x).__name__) + # Ternary + env.set('trit', lambda v=0: Trit(v)) + env.set('ARRIVED', ARRIVED) + env.set('WAITING', WAITING) + env.set('CANCELLED', CANCELLED) + env.set('tword', lambda v=0, w=8: TernaryWord(v, w)) + # Routing + env.set('route', lambda rid, paths: self.router.route(rid, paths)) + env.set('resolve', lambda rid, pid, result=None: self.router.resolve(rid, pid, result)) + env.set('route_status', lambda: self.router.status()) def run(self, program): for stmt in program.statements: diff --git a/roadc/ternary.py b/roadc/ternary.py new file mode 100644 index 0000000..76b12e9 --- /dev/null +++ b/roadc/ternary.py @@ -0,0 +1,314 @@ +""" +RoadC Ternary Runtime — Recursive Ternary Logic +The BlackBox Protocol's routing primitive, now a first-class type. + +Ternary values: -1 (cancel), 0 (waiting), 1 (arrived) +This isn't just three states — it's the foundation of self-cancelling computation. + +When a packet arrives via path A (1), all pending paths (-1) cancel automatically. +The -1 isn't failure. It's intelligence. It's the network saying "already handled." + +Recursive ternary: a ternary value can contain ternary values. +A routing decision contains sub-decisions contains sub-sub-decisions. +It's turtles all the way down — and at every level, -1 prunes the tree. + +Math: n/(1+1/n)^n = n/e + 1/(2e) + O(1/n) +The 1/(2e) is the irreducible gap — the cost of being discrete instead of continuous. +You can't beat it. You route around it. +""" + +import time +import hashlib +from dataclasses import dataclass, field +from typing import Optional, List, Dict, Callable, Any + + +# ── Trit: the atomic unit ── +class Trit: + """A balanced ternary digit: -1, 0, or 1""" + __slots__ = ('_value',) + + def __init__(self, value): + if isinstance(value, Trit): + self._value = value._value + elif isinstance(value, (int, float)): + if value > 0: self._value = 1 + elif value < 0: self._value = -1 + else: self._value = 0 + elif isinstance(value, bool): + self._value = 1 if value else -1 + elif value is None: + self._value = 0 + else: + self._value = 0 + + @property + def arrived(self): return self._value == 1 + @property + def waiting(self): return self._value == 0 + @property + def cancelled(self): return self._value == -1 + + def __repr__(self): return f"Trit({self._value})" + def __int__(self): return self._value + def __bool__(self): return self._value == 1 + def __eq__(self, other): + if isinstance(other, Trit): return self._value == other._value + return self._value == other + def __hash__(self): return hash(self._value) + + # Ternary logic operations + def __and__(self, other): + """MIN — both must arrive""" + return Trit(min(self._value, int(Trit(other)))) + + def __or__(self, other): + """MAX — either arriving is enough""" + return Trit(max(self._value, int(Trit(other)))) + + def __invert__(self): + """NEGATE — flip the sign""" + return Trit(-self._value) + + def __neg__(self): + """Cancel — arrived becomes cancelled, cancelled becomes arrived""" + return Trit(-self._value) + + def __add__(self, other): + """Sum — clamped to [-1, 1]""" + return Trit(max(-1, min(1, self._value + int(Trit(other))))) + + def __mul__(self, other): + """Multiply — product of trits""" + return Trit(self._value * int(Trit(other))) + + +# Shortcuts +ARRIVED = Trit(1) +WAITING = Trit(0) +CANCELLED = Trit(-1) + + +# ── TernaryWord: a vector of trits ── +class TernaryWord: + """A word made of trits — like a byte but base 3""" + + def __init__(self, trits=None, width=8): + if trits is None: + self.trits = [WAITING] * width + elif isinstance(trits, list): + self.trits = [Trit(t) for t in trits] + elif isinstance(trits, int): + # Convert integer to balanced ternary + self.trits = [] + n = abs(trits) + sign = 1 if trits >= 0 else -1 + while n > 0: + r = n % 3 + if r == 2: r = -1; n += 1 + self.trits.append(Trit(r * sign)) + n //= 3 + while len(self.trits) < width: + self.trits.append(WAITING) + self.width = len(self.trits) + + def to_int(self): + """Convert back to integer""" + return sum(int(t) * (3 ** i) for i, t in enumerate(self.trits)) + + def __repr__(self): + symbols = {1: '+', 0: '0', -1: '-'} + return 'T[' + ''.join(symbols[int(t)] for t in reversed(self.trits)) + ']' + + def cancel_pending(self): + """Set all waiting trits to cancelled — the key insight""" + self.trits = [CANCELLED if t.waiting else t for t in self.trits] + return self + + +# ── Recursive Ternary Route ── +@dataclass +class Route: + """A routing path through the network. Contains sub-routes recursively.""" + path_id: str + state: Trit = field(default_factory=lambda: WAITING) + children: List['Route'] = field(default_factory=list) + result: Any = None + started_at: float = field(default_factory=time.time) + resolved_at: Optional[float] = None + depth: int = 0 + + def arrive(self, result=None): + """This path delivered. Cancel all siblings.""" + self.state = ARRIVED + self.result = result + self.resolved_at = time.time() + return self + + def cancel(self): + """This path is no longer needed.""" + self.state = CANCELLED + self.resolved_at = time.time() + for child in self.children: + if child.state.waiting: + child.cancel() + return self + + def spawn(self, path_id: str) -> 'Route': + """Create a sub-route""" + child = Route(path_id=path_id, depth=self.depth + 1) + self.children.append(child) + return child + + def resolve(self, result=None): + """First arrival wins. Cancel everything else.""" + self.arrive(result) + # Cancel all siblings at the parent level + return self + + @property + def latency_ms(self): + if self.resolved_at: + return round((self.resolved_at - self.started_at) * 1000, 2) + return None + + def tree(self, indent=0): + """Pretty print the routing tree""" + symbols = {1: '+', 0: '.', -1: 'x'} + state_sym = symbols[int(self.state)] + lat = f" ({self.latency_ms}ms)" if self.latency_ms else "" + result_str = f" → {self.result}" if self.result else "" + lines = [f"{' ' * indent}[{state_sym}] {self.path_id}{lat}{result_str}"] + for child in self.children: + lines.append(child.tree(indent + 1)) + return '\n'.join(lines) + + +# ── Recursive Ternary Router ── +class TernaryRouter: + """Routes requests through multiple paths. First arrival cancels the rest. + This is the BlackBox Protocol routing engine.""" + + def __init__(self): + self.routes: Dict[str, Route] = {} + self.stats = {'total': 0, 'arrived': 0, 'cancelled': 0, 'avg_latency': 0} + + def route(self, request_id: str, paths: List[str]) -> Route: + """Create a multi-path route. Each path runs in parallel. + First to arrive cancels all others.""" + root = Route(path_id=request_id) + for p in paths: + root.spawn(p) + self.routes[request_id] = root + self.stats['total'] += 1 + return root + + def resolve(self, request_id: str, path_id: str, result=None) -> Route: + """A path delivered. Cancel everything else.""" + root = self.routes.get(request_id) + if not root: + raise ValueError(f"Unknown route: {request_id}") + + for child in root.children: + if child.path_id == path_id: + child.arrive(result) + elif child.state.waiting: + child.cancel() + self.stats['cancelled'] += 1 + + root.arrive(result) + self.stats['arrived'] += 1 + if root.latency_ms: + self.stats['avg_latency'] = (self.stats['avg_latency'] + root.latency_ms) / 2 + + return root + + def status(self): + return { + 'active_routes': sum(1 for r in self.routes.values() if r.state.waiting), + 'completed': sum(1 for r in self.routes.values() if r.state.arrived), + **self.stats, + } + + +# ── Assembly-like instructions for ternary operations ── +class TernaryASM: + """Low-level ternary instruction set. + These map directly to what the Hailo/ARM can execute.""" + + @staticmethod + def TRIT_SET(register, value): + """Set a trit register""" + return Trit(value) + + @staticmethod + def TRIT_AND(a, b): + """MIN of two trits""" + return a & b + + @staticmethod + def TRIT_OR(a, b): + """MAX of two trits""" + return a | b + + @staticmethod + def TRIT_NEG(a): + """Negate a trit""" + return -a + + @staticmethod + def TRIT_MUL(a, b): + """Multiply trits""" + return a * b + + @staticmethod + def WORD_CANCEL(word): + """Cancel all pending trits in a word — the key operation""" + return word.cancel_pending() + + @staticmethod + def ROUTE_SPAWN(router, request_id, paths): + """Spawn a multi-path route""" + return router.route(request_id, paths) + + @staticmethod + def ROUTE_RESOLVE(router, request_id, path_id, result): + """First arrival wins""" + return router.resolve(request_id, path_id, result) + + +# ── Demo ── +if __name__ == '__main__': + print("=== BlackRoad Ternary Runtime ===\n") + + # Basic trit operations + print("Trit logic:") + print(f" ARRIVED & WAITING = {ARRIVED & WAITING}") + print(f" ARRIVED | CANCELLED = {ARRIVED | CANCELLED}") + print(f" -ARRIVED = {-ARRIVED}") + print(f" ARRIVED * CANCELLED = {ARRIVED * CANCELLED}") + print() + + # Ternary word + w = TernaryWord(42) + print(f"42 in balanced ternary: {w} = {w.to_int()}") + w2 = TernaryWord(-13) + print(f"-13 in balanced ternary: {w2} = {w2.to_int()}") + print() + + # Recursive routing + print("Recursive Ternary Routing:") + router = TernaryRouter() + + # Simulate: request goes through 3 paths (Tor, WireGuard, direct) + root = router.route("req-001", ["tor", "wireguard", "direct"]) + print(f" Spawned: {root.tree()}") + + # Direct path arrives first + import time; time.sleep(0.01) + router.resolve("req-001", "direct", result="Hello from Octavia") + print(f"\n After resolution:\n{root.tree()}") + + print(f"\n Stats: {router.stats}") + print(f"\n The -1 isn't failure. It's intelligence.") + print(f" 1/(2e) = {1/(2*2.718281828):.6f} — the irreducible gap.") diff --git a/workers/tollbooth-src/worker.js b/workers/tollbooth-src/worker.js index 475fe2a..e743d93 100644 --- a/workers/tollbooth-src/worker.js +++ b/workers/tollbooth-src/worker.js @@ -988,7 +988,7 @@ function handleLandingPage() { body { background: var(--bg); color: var(--text); font-family: var(--sg); overflow-x: hidden; -webkit-font-smoothing: antialiased; } ::-webkit-scrollbar { width:6px; } ::-webkit-scrollbar-track { background:#000; } ::-webkit-scrollbar-thumb { background: linear-gradient(180deg,#FF6B2B,#FF2255,#8844FF,#00D4FF); border-radius:3px; } - .gradient-text { background: var(--g); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; } + .gradient-text { color: #f5f5f5; } .gradient-border { border:1px solid transparent; background-origin:border-box; background-clip:padding-box,border-box; background-image:linear-gradient(#0a0a0a,#0a0a0a), var(--g); } .gradient-line { height:1px; background: linear-gradient(90deg,transparent,#FF2255,#8844FF,#00D4FF,transparent); } diff --git a/workers/tollbooth.toml b/workers/tollbooth.toml index 6c1d294..a9b4daf 100644 --- a/workers/tollbooth.toml +++ b/workers/tollbooth.toml @@ -3,9 +3,9 @@ main = "src/worker.js" compatibility_date = "2024-12-01" workers_dev = true -routes = [ - { pattern = "pay.blackroad.io/*", zone_name = "blackroad.io" } -] +[[routes]] +pattern = "pay.blackroad.io/*" +zone_name = "blackroad.io" [[d1_databases]] binding = "DB" @@ -18,4 +18,4 @@ id = "68e5424a74234de197d5694127d2c3e5" [vars] OLLAMA_URL = "https://ollama.blackroad.io" -AUTH_API = "https://auth.blackroad.io" +AUTH_API = "https://auth-blackroad.amundsonalexa.workers.dev"