Device command routing: Device sends command via MQTT → Daemon receives on holon queue → Daemon looks up device in registry (device_id → IP, hardware_class, tier) → Passes to Carousel evaluator with device context → Carousel checks: device exists? hardware class valid? user tier permits this action? daily cost budget available? → YES: route to worker pool for execution → NO: return HTTP 402 (cost cap exceeded) or 403 (unauthorized). Carousel enforces tier hierarchy: starter limited to GPIO reads, pro gets relay control, enterprise unlimited.
Segment 4: Worker Execution → Cost Tracking → Result Broadcasting
Execution → cost → broadcast: Worker claims holon from queue → HolonExecutor runs (relay switch, schedule task, fetch sensor) → Cost tracked: execution fee ($0.005) + model tier adjustment (Haiku -90% vs Sonnet) → Billing domain deducts from daily budget + updates tier usage → Result serialized (status + error/success) → Published back to device via MQTT on `kv/{node_id}/response` topic → Device receives within 100ms. User sees state change in app immediately.
// Result published to device:
{
"request_id": "flynn-claude-KAN-123-abc123-1715000001234-f7a9",
"status": "success",
"action": "relay_set",
"relay_id": 1,
"new_state": 1,
"timestamp_ms": 1715000005000,
"cost_usd": 0.005,
"daily_remaining_usd": 9.865
}
Complete round-trip cycle (~100ms typical, 200ms–4s with concurrent workers):
Device side (5–20ms): User clicks button in BLE app → LocalPersist record → Send command via BLE (5ms) → Device receives → Serializes to MQTT → Publishes on `kv/{id}/commands` (20ms total)
Infrastructure (20–30ms): MQTT broker (:1883) receives → Daemon holon queue router subscribes (20ms) → Daemon processes on port 8001
Cloud evaluation (30–50ms): Carousel evaluator tier check + daily budget (10ms) → Routes to worker pool with semaphore (5ms) → Worker claims from queue (5ms)
Execution (50–100ms): HolonExecutor runs command (varies: relay GPIO instant, API call 100ms+) → Collects telemetry → Billing domain records cost → Publishes result on `kv/{id}/response` (50–100ms)
Device feedback (100–150ms): Device receives result via MQTT → Updates local state → UI reflects change. Total: ~100ms for relay toggle, ~500ms for HTTP calls, ~4s for holon worker delays (concurrent execution limits via semaphore).