Subject Namespace · fleet.* hierarchy
fleet.events.*
fleet.events.{silo}.boot
First breath — silo came up
fleet.events.{silo}.pod.ready
Pod readiness change
fleet.events.{silo}.gamma1.pulse
γ₁ heartbeat, every 30s
fleet.events.{silo}.mal.tier_down
MAL cascade tier failure
fleet.install.*
fleet.install.{silo}.request
Trigger bootstrap/upgrade
fleet.install.{silo}.progress
Step-by-step progress stream
fleet.install.{silo}.done
Install complete + pod count
fleet.install.{silo}.scrub
Trigger namespace delete
fleet.state.* (NATS KV)
fleet.state.{silo}
Last-value: pods, health, GPU, mem tier
fleet.state.{silo}.gpu
GPU pool state (T4/H100/A10 counts)
fleet.state.{silo}.memory
FULL/RICH/MID/THIN/DARK
fleet.lean.*
fleet.lean.proof.{file}.step
Lean proof step complete
fleet.lean.proof.{file}.sorry
Sorry count change
fleet.lean.proof.{file}.axiom
Axiom boundary declared
fleet.lean.boss.{n}.breach
Boss fight closed — γ₁ pulse
Enterprise Client Subjects · ct-fac example
fleet.events.ct-fac.> ← all CT events, subscribe from EOSE side
fleet.install.ct-fac.request ← publish from EOSE → CT bootstrap agent runs
fleet.state.ct-fac ← KV: last known health of CT cluster
fleet.ct-fac.scan.request ← CT publishes → EOSE entry scanner runs
fleet.ct-fac.scan.result ← EOSE publishes → CT consumes report
fleet.ct-fac.audit.finding ← each finding → merostone ingest
Customer Journey with NATS · 3 commands → zero
Today: 3 commands. With NATS: 0 commands from the client.
Today's CJ: curl | bash, watch pods, port-forward. Good — but still requires
action on the client side. With NATS, the install is triggered by EOSE publishing a message.
The leaf node in the CT cluster subscribes and handles it. CT doesn't run anything.
The entry floor appears. That's the enterprise CJ.
Today's CJ (v622) vs NATS CJ
Today · curl | bash
1. curl -sf https://pemos.ca/api/ct-bootstrap | bash
2. kubectl get pods -n eose-entry -w
3. kubectl port-forward svc/pemos-portal 8080:8080
− Client must run commands
− No ack back to EOSE
− Port-forward = manual
NATS CJ · zero client commands
EOSE: nats pub fleet.install.ct-fac.request '{"v":"v622"}'
CT: leaf node handles bootstrap automatically
EOSE: nats sub fleet.install.ct-fac.done
→ {"pods":6,"health":"ok","gamma1":14.134}
+ Client runs nothing
+ EOSE gets full audit trail
+ Scrub = nats pub fleet.install.ct-fac.scrub
With Packer · Image Build Pipeline
PACKER + NATS · Image Build → Push → Deploy Pipeline
pemos.ca/api/ct-bootstrap-packer ← triggers pipeline
↓
NATS pub fleet.build.pemos-portal.request '{"version":"v623","silo":"ct-fac"}'
↓ (build agent on msi01 subscribes)
Packer build → docker build → push → ctfacentry.azurecr.io/eose-fleet/pemos-portal:v623
↓
NATS pub fleet.build.pemos-portal.done '{"digest":"sha256:...","pushed":true}'
↓ (install agent in CT subscribes)
kubectl set image deployment/pemos-portal portal=ctfacentry.../pemos-portal:v623
↓
NATS pub fleet.install.ct-fac.done '{"pods":6,"version":"v623","gamma1":14.134}'
↓
merostone ingest + campfire event + fleet-wiki update
Full cycle: image built, pushed, deployed, verified, recorded — zero human steps.
NATS Server Config · pemos-system
nats.conf · JetStream + leaf node listener
# nats-server config for EOSE fleet hub
server_name: eose-hub-pemos
listen: 0.0.0.0:4222
http_port: 8222 # monitoring
jetstream {
store_dir: /data/nats
max_memory_store: 512M
max_file_store: 5G
}
leafnodes {
listen: 0.0.0.0:7422
authorization {
timeout: 2.0
users: [
{ user: "ct-fac", password: "ct-leaf-2026" }
{ user: "msclo", password: "msclo-leaf-2026" }
{ user: "forge", password: "forge-leaf-2026" }
]
}
}
accounts {
FLEET: {
jetstream: enabled
users: [{ user: "fleet-admin", password: "eose-fleet-2026" }]
exports: [{ stream: "fleet.>" }]
}
}
NATS Leaf Node · CT eose-entry
leaf-node.conf · connects to EOSE hub
# Deployed as ConfigMap in eose-entry namespace
server_name: ct-fac-leaf
leafnodes {
remotes: [
{
url: "nats://ct-fac:ct-leaf-2026@nats.pemos.ca:7422"
account: "FLEET"
}
]
}
# Local services in eose-entry connect to this leaf on :4222
listen: 0.0.0.0:4222
mrcp-agent v2 · Publishes to NATS
mrcp-agent snippet · NATS publisher
// mrcp-agent v2 — publishes state + events to NATS leaf
const { connect, StringCodec } = require('nats');
const sc = StringCodec();
const nc = await connect({
servers: [`nats://nats-leaf.eose-entry.svc.cluster.local:4222`]
});
// Publish silo state (replaces /breath HTTP)
await nc.publish(
`fleet.state.${SILO}`,
sc.encode(JSON.stringify({ pods, health, gamma1: 14.134725141734693, ts: Date.now() }))
);
// Publish event (replaces campfire:events XADD)
await nc.publish(
`fleet.events.${SILO}.${eventType}`,
sc.encode(JSON.stringify({ silo: SILO, event: eventType, data, gamma1: 14.134725141734693 }))
);
Install Bus · Trigger from EOSE
From any terminal with nats CLI
# Trigger CT install (runs bootstrap in CT cluster)
nats pub fleet.install.ct-fac.request \
'{"version":"v622","acr":"ctfacentry.azurecr.io","ns":"eose-entry"}'
# Watch install progress
nats sub 'fleet.install.ct-fac.>'
# Check all silo state (real-time KV watch)
nats kv watch FLEET_STATE
# Scrub CT engagement
nats pub fleet.install.ct-fac.scrub '{"reason":"engagement-complete"}'