sync: 2026-03-17 08:00 — 21 files from Alexandria
Some checks failed
Lint & Format / detect (push) Failing after 36s
Monorepo Lint / lint-shell (push) Failing after 40s
Monorepo Lint / lint-js (push) Failing after 40s
Lint & Format / js-lint (push) Has been skipped
Lint & Format / py-lint (push) Has been skipped
Lint & Format / sh-lint (push) Has been skipped
Lint & Format / go-lint (push) Has been skipped

RoadChain-SHA2048: 59e0f844fc760998
RoadChain-Identity: alexa@sovereign
RoadChain-Full: 59e0f844fc760998d8a3ce5f7d219f21bf7a4b82472c28ebe3e1258438b6770dac3c13ca3f8a43275319408ec7847d36f0031322f7608066c4f8bdd225b2b127eb1c1f3d773ea645b9569eaf9d430766951c0613bf350f2db285cc35fccead7e4a9608b46fd8e057561a25705cf4cc5aaf9abedc4cce547df8008777c4af3b2f2578c2a0eb47489f660eb108414dd7f8d3ada3e2d4062e50cc1d29099f5fa3490e6e44a7216ed37cd761bc507e3d855558935931f27c19981f26c1d2d2c91a9b1b227e3ee7650ab885eaa69aabb856110557d98346a0807bacb36142c0b7fd1510158fdd5d9756f9f2e2d7f1d5d2b0ee8b1277025f8d9a9cafd9cfb536abf568
This commit is contained in:
2026-03-17 08:00:04 -05:00
parent 2fcdc4f5cb
commit b38f50f425
21 changed files with 544 additions and 203 deletions

View File

@@ -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:33:02] [BEAT] [alice] load=0.97 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:34:01] [BEAT] [alice] load=1.62 mem=3220/3794MB temp=37.5C 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:35:01] [BEAT] [alice] load=0.86 mem=3222/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:35:28] [BEAT] [alice] load=0.85 mem=3217/3794MB temp=34.6C 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:35:28] [BEAT] [alice] load=0.85 mem=3215/3794MB temp=35.5C 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:36:02] [BEAT] [alice] load=0.98 mem=3228/3794MB temp=36.0C 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:37:18] [BEAT] [alice] load=3.25 mem=3220/3794MB temp=35.0C 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:38:01] [BEAT] [alice] load=3.83 mem=3227/3794MB temp=34.1C 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:39:01] [BEAT] [alice] load=1.95 mem=3224/3794MB temp=33.1C 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:40:01] [FLEET] [alice] Starting cross-node health check
[2026-03-17 07:08:41] [BEAT] [alice] load=1.40 mem=3221/3794MB temp=37.5C disk=85% [2026-03-17 07:40:02] [BEAT] [alice] load=1.56 mem=3218/3794MB temp=35.0C 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:40:02] [FLEET] [alice] octavia: UP temp=45C mem=2114MB disk=87%
[2026-03-17 07:09:01] [BEAT] [alice] load=1.27 mem=3229/3794MB temp=35.0C disk=85% [2026-03-17 07:40:03] [FLEET] [alice] cecilia: UP temp=35C mem=986MB disk=34%
[2026-03-17 07:10:01] [FLEET] [alice] Starting cross-node health check [2026-03-17 07:40:04] [FLEET] [alice] gematria: UP temp=C mem=4839MB disk=69%
[2026-03-17 07:10:01] [BEAT] [alice] load=0.91 mem=3222/3794MB temp=36.0C disk=85% [2026-03-17 07:40:05] [FLEET] [alice] lucidia: UP temp=56C mem=2641MB disk=31%
[2026-03-17 07:10:02] [FLEET] [alice] octavia: UP temp=42C mem=2513MB disk=86% [2026-03-17 07:40:06] [FLEET] [alice] aria: DOWN (no ping response)
[2026-03-17 07:10:03] [FLEET] [alice] cecilia: UP temp=38C mem=1128MB disk=34% [2026-03-17 07:40:08] [FLEET] [alice] anastasia: DOWN (no ping response)
[2026-03-17 07:10:04] [FLEET] [alice] gematria: UP temp=C mem=4960MB disk=69% [2026-03-17 07:40:33] [BEAT] [alice] load=1.64 mem=3217/3794MB temp=35.0C disk=85%
[2026-03-17 07:10:05] [FLEET] [alice] lucidia: UP temp=59C mem=2649MB disk=31% [2026-03-17 07:40:33] [BEAT] [alice] load=1.64 mem=3226/3794MB temp=34.1C disk=85%
[2026-03-17 07:10:07] [FLEET] [alice] aria: DOWN (no ping response) [2026-03-17 07:41:01] [BEAT] [alice] load=1.15 mem=3217/3794MB temp=34.1C disk=85%
[2026-03-17 07:10:09] [FLEET] [alice] anastasia: DOWN (no ping response) [2026-03-17 07:42:01] [BEAT] [alice] load=1.14 mem=3223/3794MB temp=33.1C disk=85%
[2026-03-17 07:11:01] [BEAT] [alice] load=0.73 mem=3225/3794MB temp=34.1C disk=85% [2026-03-17 07:42:36] [DIAL] [alice] Switchboard unreachable
[2026-03-17 07:12:01] [BEAT] [alice] load=0.90 mem=3219/3794MB temp=34.6C disk=85% [2026-03-17 07:43:01] [BEAT] [alice] load=0.83 mem=3221/3794MB temp=33.6C disk=85%
[2026-03-17 07:12:35] [DIAL] [alice] Switchboard unreachable [2026-03-17 07:44:01] [BEAT] [alice] load=0.98 mem=3223/3794MB temp=34.6C disk=85%
[2026-03-17 07:13:01] [BEAT] [alice] load=0.88 mem=3228/3794MB temp=34.1C 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:13:47] [BEAT] [alice] load=0.81 mem=3226/3794MB temp=34.1C 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:13:47] [BEAT] [alice] load=0.81 mem=3225/3794MB temp=34.1C 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:14:01] [BEAT] [alice] load=0.71 mem=3230/3794MB temp=34.1C disk=85% [2026-03-17 07:45:47] [DIAL] [alice] Switchboard unreachable
[2026-03-17 07:15:02] [BEAT] [alice] load=1.30 mem=3222/3794MB temp=35.5C disk=85% [2026-03-17 07:46:02] [BEAT] [alice] load=1.46 mem=3223/3794MB temp=35.0C disk=85%
[2026-03-17 07:15:47] [DIAL] [alice] Switchboard unreachable [2026-03-17 07:47:01] [BEAT] [alice] load=0.73 mem=3224/3794MB temp=33.1C disk=85%
[2026-03-17 07:16:01] [BEAT] [alice] load=0.77 mem=3225/3794MB temp=33.6C 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:17:01] [BEAT] [alice] load=1.03 mem=3223/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:18:01] [BEAT] [alice] load=1.11 mem=3225/3794MB temp=33.1C disk=85% [2026-03-17 07:50:01] [FLEET] [alice] Starting cross-node health check
[2026-03-17 07:18:53] [BEAT] [alice] load=1.28 mem=3228/3794MB temp=35.0C disk=85% [2026-03-17 07:50:01] [BEAT] [alice] load=1.10 mem=3217/3794MB temp=34.6C 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:50:03] [FLEET] [alice] octavia: UP temp=44C mem=1955MB disk=87%
[2026-03-17 07:19:02] [BEAT] [alice] load=1.16 mem=3224/3794MB temp=34.1C disk=85% [2026-03-17 07:50:03] [FLEET] [alice] cecilia: UP temp=35C mem=934MB disk=34%
[2026-03-17 07:20:01] [FLEET] [alice] Starting cross-node health check [2026-03-17 07:50:05] [FLEET] [alice] gematria: UP temp=C mem=4921MB disk=69%
[2026-03-17 07:20:01] [BEAT] [alice] load=0.76 mem=3219/3794MB temp=33.6C disk=85% [2026-03-17 07:50:05] [FLEET] [alice] lucidia: UP temp=55C mem=2639MB disk=31%
[2026-03-17 07:20:02] [FLEET] [alice] octavia: UP temp=42C mem=2443MB disk=86% [2026-03-17 07:50:07] [FLEET] [alice] aria: DOWN (no ping response)
[2026-03-17 07:20:02] [FLEET] [alice] cecilia: UP temp=36C mem=956MB disk=34% [2026-03-17 07:50:09] [FLEET] [alice] anastasia: DOWN (no ping response)
[2026-03-17 07:20:04] [FLEET] [alice] gematria: UP temp=C mem=4952MB disk=69% [2026-03-17 07:50:48] [BEAT] [alice] load=0.83 mem=3222/3794MB temp=34.6C disk=85%
[2026-03-17 07:20:05] [FLEET] [alice] lucidia: UP temp=62C mem=2632MB disk=31% [2026-03-17 07:50:48] [BEAT] [alice] load=0.83 mem=3222/3794MB temp=34.6C disk=85%
[2026-03-17 07:20:07] [FLEET] [alice] aria: DOWN (no ping response) [2026-03-17 07:51:01] [BEAT] [alice] load=0.71 mem=3221/3794MB temp=34.1C disk=85%
[2026-03-17 07:20:09] [FLEET] [alice] anastasia: DOWN (no ping response) [2026-03-17 07:52:01] [BEAT] [alice] load=1.04 mem=3222/3794MB temp=33.6C disk=85%
[2026-03-17 07:21:01] [BEAT] [alice] load=0.87 mem=3226/3794MB temp=33.1C 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:22:04] [BEAT] [alice] load=1.36 mem=3231/3794MB temp=37.0C 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:23:01] [BEAT] [alice] load=1.50 mem=3225/3794MB temp=34.6C 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:24:01] [BEAT] [alice] load=0.95 mem=3224/3794MB temp=36.0C 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:24:57] [BEAT] [alice] load=1.05 mem=3226/3794MB temp=34.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:24:57] [BEAT] [alice] load=1.05 mem=3225/3794MB temp=34.6C disk=85% [2026-03-17 07:56:02] [BEAT] [alice] load=1.14 mem=3220/3794MB temp=33.1C disk=85%

View File

@@ -36,3 +36,4 @@
*/5 * * * * /opt/blackroad/bin/blackroad-pissed.sh */5 * * * * /opt/blackroad/bin/blackroad-pissed.sh
@reboot /opt/blackroad/bin/blackroad-boot-hello.sh @reboot /opt/blackroad/bin/blackroad-boot-hello.sh
*/30 * * * * /home/pi/blackroad-site-tester.sh --quiet >> /tmp/br-tester.log 2>&1 */30 * * * * /home/pi/blackroad-site-tester.sh --quiet >> /tmp/br-tester.log 2>&1
*/5 * * * * /home/pi/uptime-monitor.sh

View File

@@ -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"}

View File

@@ -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 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 5 0.0.0.0:8184 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:9050 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 200 0.0.0.0:443 0.0.0.0:*
LISTEN 0 128 127.0.0.1:11434 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:* LISTEN 0 32 0.0.0.0:53 0.0.0.0:*

View File

@@ -1,19 +1,19 @@
{ {
"hostname": "alice", "hostname": "alice",
"ts": "2026-03-17T12:24:58Z", "ts": "2026-03-17T12:56:03Z",
"uptime_seconds": 32367, "uptime_seconds": 34233,
"kernel": "6.1.21-v8+", "kernel": "6.1.21-v8+",
"temp_c": 36.5, "temp_c": 34.1,
"memory_mb": { "memory_mb": {
"total": 3794, "total": 3794,
"used": 483, "used": 468,
"free": 3208 "free": 3222
}, },
"disk": "12G/15G (85%)", "disk": "12G/15G (85%)",
"load": [ "load": [
1.05, 1.13,
1.14, 1.15,
1.14 1.22
], ],
"ollama_models": [ "ollama_models": [
"lucidia3b:latest", "lucidia3b:latest",
@@ -26,5 +26,5 @@
], ],
"throttle": "0x0", "throttle": "0x0",
"voltage": "0.9160V", "voltage": "0.9160V",
"services_running": 48 "services_running": 47
} }

View File

@@ -1 +1 @@
{"node":"anastasia","status":"down","ts":"2026-03-17T12:30:01Z"} {"node":"anastasia","status":"down","ts":"2026-03-17T12:56:03Z"}

View File

@@ -1 +1 @@
{"node":"aria","status":"down","ts":"2026-03-17T12:30:01Z"} {"node":"aria","status":"down","ts":"2026-03-17T12:56:03Z"}

View File

@@ -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:35:28] [BEAT] [cecilia] load=0.98 mem=1031/8062MB temp=35.3C 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:36:01] [BEAT] [cecilia] load=0.66 mem=1043/8062MB temp=34.8C 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:37:02] [BEAT] [cecilia] load=0.96 mem=1039/8062MB temp=35.3C disk=34%
[2026-03-17 07:05:01] [HEAL] [cecilia] High swap: 1397MB — clearing inactive [2026-03-17 07:38:01] [BEAT] [cecilia] load=0.79 mem=1046/8062MB temp=35.9C disk=34%
[2026-03-17 07:06:01] [BEAT] [cecilia] load=0.33 mem=902/8062MB temp=37.5C 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:07:01] [BEAT] [cecilia] load=0.36 mem=902/8062MB temp=36.4C disk=34% [2026-03-17 07:40:01] [FLEET] [cecilia] Starting cross-node health check
[2026-03-17 07:08:01] [BEAT] [cecilia] load=0.37 mem=902/8062MB temp=37.0C disk=34% [2026-03-17 07:40:01] [BEAT] [cecilia] load=0.34 mem=1015/8062MB temp=35.9C 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:40:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
[2026-03-17 07:08:40] [BEAT] [cecilia] load=0.33 mem=891/8062MB temp=38.0C disk=34% [2026-03-17 07:40:02] [FLEET] [cecilia] alice: UP temp=36C mem=3218MB disk=85%
[2026-03-17 07:09:01] [BEAT] [cecilia] load=0.23 mem=894/8062MB temp=35.9C disk=34% [2026-03-17 07:40:02] [FLEET] [cecilia] octavia: UP temp=45C mem=2113MB disk=87%
[2026-03-17 07:10:01] [FLEET] [cecilia] Starting cross-node health check [2026-03-17 07:40:03] [FLEET] [cecilia] gematria: UP temp=C mem=4839MB disk=69%
[2026-03-17 07:10:01] [BEAT] [cecilia] load=0.87 mem=1176/8062MB temp=37.5C disk=34% [2026-03-17 07:40:04] [FLEET] [cecilia] lucidia: UP temp=57C mem=2639MB disk=31%
[2026-03-17 07:10:01] [HEAL] [cecilia] High swap: 2047MB — clearing inactive [2026-03-17 07:40:06] [FLEET] [cecilia] aria: DOWN (no ping response)
[2026-03-17 07:10:02] [FLEET] [cecilia] alice: UP temp=34C mem=3218MB disk=85% [2026-03-17 07:40:08] [FLEET] [cecilia] anastasia: DOWN (no ping response)
[2026-03-17 07:10:03] [FLEET] [cecilia] octavia: UP temp=42C mem=2509MB disk=86% [2026-03-17 07:40:32] [BEAT] [cecilia] load=0.32 mem=1047/8062MB temp=35.3C disk=34%
[2026-03-17 07:10:04] [FLEET] [cecilia] gematria: UP temp=C mem=4960MB disk=69% [2026-03-17 07:40:32] [BEAT] [cecilia] load=0.32 mem=1045/8062MB temp=34.2C disk=34%
[2026-03-17 07:10:05] [FLEET] [cecilia] lucidia: UP temp=59C mem=2649MB disk=31% [2026-03-17 07:41:01] [BEAT] [cecilia] load=0.21 mem=1050/8062MB temp=34.8C disk=34%
[2026-03-17 07:10:07] [FLEET] [cecilia] aria: DOWN (no ping response) [2026-03-17 07:42:01] [BEAT] [cecilia] load=0.36 mem=1033/8062MB temp=35.3C disk=34%
[2026-03-17 07:10:09] [FLEET] [cecilia] anastasia: DOWN (no ping response) [2026-03-17 07:42:42] [DIAL] [cecilia] Switchboard unreachable
[2026-03-17 07:11:01] [BEAT] [cecilia] load=0.52 mem=1264/8062MB temp=35.9C disk=34% [2026-03-17 07:43:01] [BEAT] [cecilia] load=0.21 mem=1046/8062MB temp=35.3C 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:44:01] [BEAT] [cecilia] load=0.23 mem=1043/8062MB temp=35.3C disk=34%
[2026-03-17 07:12:36] [DIAL] [cecilia] Switchboard unreachable [2026-03-17 07:45:01] [BEAT] [cecilia] load=0.56 mem=1005/8062MB temp=37.0C disk=34%
[2026-03-17 07:13:01] [BEAT] [cecilia] load=1.21 mem=1268/8062MB temp=37.0C disk=34% [2026-03-17 07:45:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
[2026-03-17 07:13:47] [BEAT] [cecilia] load=1.49 mem=1267/8062MB temp=35.9C disk=34% [2026-03-17 07:45:37] [BEAT] [cecilia] load=0.97 mem=920/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:45:37] [BEAT] [cecilia] load=0.97 mem=916/8062MB temp=34.8C 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:45:46] [DIAL] [cecilia] Switchboard unreachable
[2026-03-17 07:15:01] [BEAT] [cecilia] load=0.99 mem=1227/8062MB temp=37.5C disk=34% [2026-03-17 07:46:01] [BEAT] [cecilia] load=0.90 mem=938/8062MB temp=34.8C disk=34%
[2026-03-17 07:15:01] [HEAL] [cecilia] High swap: 2046MB — clearing inactive [2026-03-17 07:47:01] [BEAT] [cecilia] load=0.76 mem=925/8062MB temp=35.3C disk=34%
[2026-03-17 07:15:46] [DIAL] [cecilia] Switchboard unreachable [2026-03-17 07:48:01] [BEAT] [cecilia] load=0.44 mem=915/8062MB temp=34.8C disk=34%
[2026-03-17 07:16:01] [BEAT] [cecilia] load=0.53 mem=940/8062MB temp=35.9C 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:17:01] [BEAT] [cecilia] load=0.43 mem=944/8062MB temp=35.9C disk=34% [2026-03-17 07:50:01] [FLEET] [cecilia] Starting cross-node health check
[2026-03-17 07:18:01] [BEAT] [cecilia] load=0.28 mem=943/8062MB temp=35.3C disk=34% [2026-03-17 07:50:01] [BEAT] [cecilia] load=0.36 mem=877/8062MB temp=35.9C 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:50:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
[2026-03-17 07:18:53] [BEAT] [cecilia] load=0.18 mem=932/8062MB temp=35.9C disk=34% [2026-03-17 07:50:03] [FLEET] [cecilia] alice: UP temp=35C mem=3218MB disk=85%
[2026-03-17 07:19:01] [BEAT] [cecilia] load=0.15 mem=929/8062MB temp=35.3C disk=34% [2026-03-17 07:50:03] [FLEET] [cecilia] octavia: UP temp=46C mem=1942MB disk=87%
[2026-03-17 07:20:01] [FLEET] [cecilia] Starting cross-node health check [2026-03-17 07:50:04] [FLEET] [cecilia] gematria: UP temp=C mem=4918MB disk=69%
[2026-03-17 07:20:02] [BEAT] [cecilia] load=0.33 mem=902/8062MB temp=36.4C disk=34% [2026-03-17 07:50:05] [FLEET] [cecilia] lucidia: UP temp=53C mem=2639MB disk=31%
[2026-03-17 07:20:02] [HEAL] [cecilia] High swap: 2044MB — clearing inactive [2026-03-17 07:50:07] [FLEET] [cecilia] aria: DOWN (no ping response)
[2026-03-17 07:20:02] [FLEET] [cecilia] alice: UP temp=35C mem=3221MB disk=85% [2026-03-17 07:50:09] [FLEET] [cecilia] anastasia: DOWN (no ping response)
[2026-03-17 07:20:03] [FLEET] [cecilia] octavia: UP temp=43C mem=2496MB disk=86% [2026-03-17 07:50:47] [BEAT] [cecilia] load=0.37 mem=978/8062MB temp=35.3C disk=34%
[2026-03-17 07:20:04] [FLEET] [cecilia] gematria: UP temp=C mem=4952MB disk=69% [2026-03-17 07:50:47] [BEAT] [cecilia] load=0.37 mem=980/8062MB temp=34.2C disk=34%
[2026-03-17 07:20:05] [FLEET] [cecilia] lucidia: UP temp=62C mem=2632MB disk=31% [2026-03-17 07:51:01] [BEAT] [cecilia] load=0.51 mem=970/8062MB temp=35.9C disk=34%
[2026-03-17 07:20:07] [FLEET] [cecilia] aria: DOWN (no ping response) [2026-03-17 07:52:01] [BEAT] [cecilia] load=0.41 mem=969/8062MB temp=34.8C disk=34%
[2026-03-17 07:20:09] [FLEET] [cecilia] anastasia: DOWN (no ping response) [2026-03-17 07:53:01] [BEAT] [cecilia] load=0.29 mem=961/8062MB temp=34.8C disk=34%
[2026-03-17 07:21:01] [BEAT] [cecilia] load=0.40 mem=991/8062MB temp=36.4C 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:22:01] [BEAT] [cecilia] load=0.32 mem=990/8062MB temp=35.9C 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:23:01] [BEAT] [cecilia] load=0.42 mem=985/8062MB temp=35.9C disk=34% [2026-03-17 07:55:01] [HEAL] [cecilia] High swap: 2038MB — clearing inactive
[2026-03-17 07:24:01] [BEAT] [cecilia] load=0.49 mem=986/8062MB temp=34.2C disk=34% [2026-03-17 07:56:01] [BEAT] [cecilia] load=1.47 mem=954/8062MB temp=34.8C 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:56:02] [BEAT] [cecilia] load=1.47 mem=949/8062MB temp=34.8C 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:56:02] [BEAT] [cecilia] load=1.47 mem=948/8062MB temp=35.3C disk=34%

View File

@@ -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"}

View File

@@ -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 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 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: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:8088 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:20241 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)) LISTEN 0 5 0.0.0.0:11435 0.0.0.0:* users:(("python3",pid=1403,fd=3))

View File

@@ -1,24 +1,24 @@
{ {
"hostname": "cecilia", "hostname": "cecilia",
"ts": "2026-03-17T12:30:01Z", "ts": "2026-03-17T12:56:03Z",
"uptime_seconds": 32711, "uptime_seconds": 34272,
"kernel": "6.12.62+rpt-rpi-2712", "kernel": "6.12.62+rpt-rpi-2712",
"temp_c": 34.8, "temp_c": 35.3,
"memory_mb": { "memory_mb": {
"total": 8062, "total": 8062,
"used": 7150, "used": 7119,
"free": 912 "free": 943
}, },
"disk": "144G/457G (34%)", "disk": "144G/457G (34%)",
"load": [ "load": [
0.31, 1.47,
0.32, 0.89,
0.71 0.69
], ],
"ollama_models": [ "ollama_models": [
"amundson:latest", "amundson:latest",
"qwen2.5:3b",
"cecilia3b:latest", "cecilia3b:latest",
"qwen2.5:3b",
"cecilia:latest", "cecilia:latest",
"deepseek-r1:1.5b", "deepseek-r1:1.5b",
"nomic-embed-text:latest", "nomic-embed-text:latest",

View File

@@ -1 +1 @@
{"node":"gematria","status":"down","ts":"2026-03-17T12:30:01Z"} {"node":"gematria","status":"down","ts":"2026-03-17T12:56:03Z"}

View File

@@ -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:35:28] [BEAT] [lucidia] load=2.44 mem=2670/8063MB temp=52.9C 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:35:28] [BEAT] [lucidia] load=2.44 mem=2669/8063MB temp=52.9C 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:36:01] [BEAT] [lucidia] load=2.46 mem=2706/8063MB temp=60.6C disk=31%
[2026-03-17 07:05:01] [HEAL] [lucidia] High swap: 668MB — clearing inactive [2026-03-17 07:37:01] [BEAT] [lucidia] load=1.70 mem=2685/8063MB temp=52.9C disk=31%
[2026-03-17 07:06:01] [BEAT] [lucidia] load=4.52 mem=2689/8063MB temp=61.1C 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:07:01] [BEAT] [lucidia] load=2.52 mem=2710/8063MB temp=51.8C 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:08:01] [BEAT] [lucidia] load=3.71 mem=2663/8063MB temp=51.8C disk=31% [2026-03-17 07:40:01] [FLEET] [lucidia] Starting cross-node health check
[2026-03-17 07:08:40] [BEAT] [lucidia] load=16.93 mem=2648/8063MB temp=57.3C disk=31% [2026-03-17 07:40:01] [BEAT] [lucidia] load=3.07 mem=2662/8063MB temp=56.2C 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:40:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive
[2026-03-17 07:09:20] [BEAT] [lucidia] load=28.23 mem=2655/8063MB temp=52.9C disk=31% [2026-03-17 07:40:02] [FLEET] [lucidia] alice: UP temp=34C mem=3212MB disk=85%
[2026-03-17 07:10:01] [FLEET] [lucidia] Starting cross-node health check [2026-03-17 07:40:04] [FLEET] [lucidia] octavia: DOWN (no ping response)
[2026-03-17 07:10:01] [BEAT] [lucidia] load=15.74 mem=2647/8063MB temp=58.4C disk=31% [2026-03-17 07:40:05] [FLEET] [lucidia] cecilia: UP temp=36C mem=996MB disk=34%
[2026-03-17 07:10:02] [HEAL] [lucidia] High swap: 668MB — clearing inactive [2026-03-17 07:40:06] [FLEET] [lucidia] gematria: UP temp=C mem=4839MB disk=69%
[2026-03-17 07:10:03] [FLEET] [lucidia] alice: UP temp=34C mem=3218MB disk=85% [2026-03-17 07:40:08] [FLEET] [lucidia] aria: DOWN (no ping response)
[2026-03-17 07:10:05] [FLEET] [lucidia] octavia: DOWN (no ping response) [2026-03-17 07:40:10] [FLEET] [lucidia] anastasia: DOWN (no ping response)
[2026-03-17 07:10:05] [FLEET] [lucidia] cecilia: UP temp=38C mem=1142MB disk=34% [2026-03-17 07:40:32] [BEAT] [lucidia] load=1.96 mem=2644/8063MB temp=54.5C disk=31%
[2026-03-17 07:10:07] [FLEET] [lucidia] gematria: UP temp=C mem=4966MB disk=69% [2026-03-17 07:40:32] [BEAT] [lucidia] load=1.96 mem=2643/8063MB temp=54.5C disk=31%
[2026-03-17 07:10:09] [FLEET] [lucidia] aria: DOWN (no ping response) [2026-03-17 07:40:53] [DIAL] [lucidia] Switchboard unreachable
[2026-03-17 07:10:11] [FLEET] [lucidia] anastasia: DOWN (no ping response) [2026-03-17 07:41:01] [BEAT] [lucidia] load=2.20 mem=2679/8063MB temp=61.1C disk=31%
[2026-03-17 07:10:50] [DIAL] [lucidia] Switchboard unreachable [2026-03-17 07:42:01] [BEAT] [lucidia] load=1.28 mem=2680/8063MB temp=53.5C disk=31%
[2026-03-17 07:11:01] [BEAT] [lucidia] load=7.46 mem=2692/8063MB temp=52.9C 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:12:01] [BEAT] [lucidia] load=4.70 mem=2682/8063MB temp=53.5C 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:13:01] [BEAT] [lucidia] load=3.09 mem=2673/8063MB temp=60.0C 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:13:47] [BEAT] [lucidia] load=4.16 mem=2646/8063MB temp=56.8C disk=31% [2026-03-17 07:45:26] [HEAL] [lucidia] High swap: 664MB — clearing inactive
[2026-03-17 07:13:47] [BEAT] [lucidia] load=4.16 mem=2644/8063MB temp=59.0C disk=31% [2026-03-17 07:46:02] [BEAT] [lucidia] load=33.31 mem=2679/8063MB temp=51.8C 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:46:10] [DIAL] [lucidia] Switchboard unreachable
[2026-03-17 07:15:01] [BEAT] [lucidia] load=2.69 mem=2625/8063MB temp=61.1C disk=31% [2026-03-17 07:47:01] [BEAT] [lucidia] load=14.72 mem=2651/8063MB temp=52.9C disk=31%
[2026-03-17 07:15:01] [HEAL] [lucidia] High swap: 667MB — clearing inactive [2026-03-17 07:48:01] [BEAT] [lucidia] load=9.19 mem=2654/8063MB temp=63.4C disk=31%
[2026-03-17 07:15:46] [DIAL] [lucidia] Switchboard unreachable [2026-03-17 07:49:01] [BEAT] [lucidia] load=5.29 mem=2668/8063MB temp=55.1C disk=31%
[2026-03-17 07:16:01] [BEAT] [lucidia] load=1.78 mem=2656/8063MB temp=52.9C disk=31% [2026-03-17 07:50:01] [FLEET] [lucidia] Starting cross-node health check
[2026-03-17 07:17:01] [BEAT] [lucidia] load=1.75 mem=2678/8063MB temp=54.5C disk=31% [2026-03-17 07:50:01] [BEAT] [lucidia] load=2.92 mem=2643/8063MB temp=56.8C 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:50:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive
[2026-03-17 07:19:53] [BEAT] [lucidia] load=56.02 mem=2714/8063MB temp=62.2C disk=31% [2026-03-17 07:50:02] [FLEET] [lucidia] alice: UP temp=34C mem=3218MB disk=85%
[2026-03-17 07:19:53] [BEAT] [lucidia] load=52.33 mem=2685/8063MB temp=60.6C disk=31% [2026-03-17 07:50:04] [FLEET] [lucidia] octavia: DOWN (no ping response)
[2026-03-17 07:19:53] [BEAT] [lucidia] load=52.33 mem=2684/8063MB temp=61.1C disk=31% [2026-03-17 07:50:05] [FLEET] [lucidia] cecilia: UP temp=36C mem=935MB disk=34%
[2026-03-17 07:20:01] [FLEET] [lucidia] Starting cross-node health check [2026-03-17 07:50:06] [FLEET] [lucidia] gematria: UP temp=C mem=4913MB disk=69%
[2026-03-17 07:20:01] [BEAT] [lucidia] load=48.70 mem=2660/8063MB temp=60.6C disk=31% [2026-03-17 07:50:08] [FLEET] [lucidia] aria: DOWN (no ping response)
[2026-03-17 07:20:01] [HEAL] [lucidia] High swap: 665MB — clearing inactive [2026-03-17 07:50:10] [FLEET] [lucidia] anastasia: DOWN (no ping response)
[2026-03-17 07:20:02] [FLEET] [lucidia] alice: UP temp=35C mem=3219MB disk=85% [2026-03-17 07:50:59] [BEAT] [lucidia] load=11.98 mem=2672/8063MB temp=56.2C disk=31%
[2026-03-17 07:20:04] [FLEET] [lucidia] octavia: DOWN (no ping response) [2026-03-17 07:50:59] [BEAT] [lucidia] load=11.98 mem=2674/8063MB temp=54.5C disk=31%
[2026-03-17 07:20:05] [FLEET] [lucidia] cecilia: UP temp=37C mem=961MB disk=34% [2026-03-17 07:51:02] [BEAT] [lucidia] load=11.58 mem=2646/8063MB temp=56.8C disk=31%
[2026-03-17 07:20:06] [FLEET] [lucidia] gematria: UP temp=C mem=4956MB disk=69% [2026-03-17 07:52:03] [BEAT] [lucidia] load=16.34 mem=2630/8063MB temp=52.9C disk=31%
[2026-03-17 07:20:08] [FLEET] [lucidia] aria: DOWN (no ping response) [2026-03-17 07:53:01] [BEAT] [lucidia] load=8.21 mem=2649/8063MB temp=61.1C disk=31%
[2026-03-17 07:20:10] [FLEET] [lucidia] anastasia: DOWN (no ping response) [2026-03-17 07:54:01] [BEAT] [lucidia] load=3.99 mem=2677/8063MB temp=51.8C disk=31%
[2026-03-17 07:21:29] [BEAT] [lucidia] load=26.79 mem=2700/8063MB temp=52.9C 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:22:01] [BEAT] [lucidia] load=17.67 mem=2650/8063MB temp=55.6C disk=31% [2026-03-17 07:55:01] [HEAL] [lucidia] High swap: 664MB — clearing inactive
[2026-03-17 07:23:01] [BEAT] [lucidia] load=7.12 mem=2698/8063MB temp=60.0C disk=31% [2026-03-17 07:55:54] [DIAL] [lucidia] Switchboard unreachable
[2026-03-17 07:24:01] [BEAT] [lucidia] load=5.33 mem=2697/8063MB temp=58.4C disk=31% [2026-03-17 07:56:32] [BEAT] [lucidia] load=22.77 mem=2670/8063MB temp=45.2C 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:56:33] [BEAT] [lucidia] load=22.77 mem=2622/8063MB temp=49.6C 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:56:33] [BEAT] [lucidia] load=22.77 mem=2619/8063MB temp=49.6C disk=31%

View File

@@ -1,14 +1,14 @@
road-pdns Up 7 hours road-pdns Up 8 hours
road-pdns-admin Up 7 hours (healthy) road-pdns-admin Up 8 hours (healthy)
road-dns-db Up 8 hours road-dns-db Up 8 hours
blackroad-gitea Up 9 hours blackroad-gitea Up 10 hours
roadauth Up 9 hours roadauth Up 10 hours
roadapi Up 9 hours roadapi Up 10 hours
blackroad-edge-agent Up 9 hours blackroad-edge-agent Up 10 hours
blackroad.systems Up 9 hours blackroad.systems Up 10 hours
blackroadai.com Up 9 hours blackroadai.com Up 10 hours
blackroad-auth-gateway Up 9 hours blackroad-auth-gateway Up 10 hours
blackroad-metaverse Up 9 hours blackroad-metaverse Up 10 hours
blackroad-os Up 9 hours blackroad-os Up 10 hours
blackroad-os-carpool Up 9 hours blackroad-os-carpool Up 10 hours
pi-my-agent-1 Up 9 hours (healthy) pi-my-agent-1 Up 10 hours (healthy)

View File

@@ -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"}

View File

@@ -1,19 +1,19 @@
{ {
"hostname": "lucidia", "hostname": "lucidia",
"ts": "2026-03-17T12:24:57Z", "ts": "2026-03-17T12:56:34Z",
"uptime_seconds": 32470, "uptime_seconds": 34367,
"kernel": "6.12.62+rpt-rpi-2712", "kernel": "6.12.62+rpt-rpi-2712",
"temp_c": 57.3, "temp_c": 49.6,
"memory_mb": { "memory_mb": {
"total": 8063, "total": 8063,
"used": 5385, "used": 5448,
"free": 2677 "free": 2615
}, },
"disk": "68G/235G (31%)", "disk": "68G/235G (31%)",
"load": [ "load": [
3.18, 22.77,
11.62, 10.84,
10.59 8.72
], ],
"ollama_models": [ "ollama_models": [
"lucidia3b:latest", "lucidia3b:latest",

View File

@@ -1 +1 @@
{"node":"octavia","status":"down","ts":"2026-03-17T12:30:01Z"} {"node":"octavia","status":"down","ts":"2026-03-17T12:56:03Z"}

View File

@@ -1,9 +1,11 @@
""" """
RoadC Language - Tree-Walking Interpreter RoadC Language - Tree-Walking Interpreter
Executes AST nodes produced by the parser Executes AST nodes produced by the parser
Includes ternary runtime (BlackBox Protocol)
""" """
from ast_nodes import * from ast_nodes import *
from ternary import Trit, TernaryWord, TernaryRouter, ARRIVED, WAITING, CANCELLED
class ReturnSignal(Exception): class ReturnSignal(Exception):
@@ -47,6 +49,30 @@ class Environment:
class Interpreter: class Interpreter:
def __init__(self): def __init__(self):
self.global_env = Environment() 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): def run(self, program):
for stmt in program.statements: for stmt in program.statements:

314
roadc/ternary.py Normal file
View File

@@ -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.")

View File

@@ -988,7 +988,7 @@ function handleLandingPage() {
body { background: var(--bg); color: var(--text); font-family: var(--sg); overflow-x: hidden; -webkit-font-smoothing: antialiased; } 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 { width:6px; } ::-webkit-scrollbar-track { background:#000; }
::-webkit-scrollbar-thumb { background: linear-gradient(180deg,#FF6B2B,#FF2255,#8844FF,#00D4FF); border-radius:3px; } ::-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-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); } .gradient-line { height:1px; background: linear-gradient(90deg,transparent,#FF2255,#8844FF,#00D4FF,transparent); }

View File

@@ -3,9 +3,9 @@ main = "src/worker.js"
compatibility_date = "2024-12-01" compatibility_date = "2024-12-01"
workers_dev = true workers_dev = true
routes = [ [[routes]]
{ pattern = "pay.blackroad.io/*", zone_name = "blackroad.io" } pattern = "pay.blackroad.io/*"
] zone_name = "blackroad.io"
[[d1_databases]] [[d1_databases]]
binding = "DB" binding = "DB"
@@ -18,4 +18,4 @@ id = "68e5424a74234de197d5694127d2c3e5"
[vars] [vars]
OLLAMA_URL = "https://ollama.blackroad.io" OLLAMA_URL = "https://ollama.blackroad.io"
AUTH_API = "https://auth.blackroad.io" AUTH_API = "https://auth-blackroad.amundsonalexa.workers.dev"