Error Model
Z+ doesn't crash. Signal chains degrade. No try/catch. No exceptions. No stack traces. A node goes quiet and the chain responds according to its declared behavior. Graceful degradation is structural.
Silence as Signal
In every existing language, the absence of data is an error. In Z+, silence is information. Quiet is different from gone. Gone is different from dead. Each triggers different downstream behavior.
// hold last known value
sensor -> on_silence: hold(t-1)
// emit safe default after timeout
sensor -> on_silence(> 500ms): emit(0)
// graded silence — different durations mean different things
sensor -> on_silence(> 100ms) -> "quiet"
sensor -> on_silence(> 1s) -> "gone"
sensor -> on_silence(> 10s) -> "dead"Silence Patterns
Advanced silence detection for real-world failure modes.
// intermittent silence — the sensor flickers
sensor -> on_pattern(silence: intermittent, window: 10s) -> "degrading"
// correlated silence — two sensors go quiet together
sensor_a -> |
| on_silence(correlated, > 500ms) -> "shared_failure"
sensor_b -> |
// spike then silence — it screamed, then went quiet (bad)
sensor -> on_pattern(spike then silence, within: 200ms) -> "catastrophic"The spike-then-silence pattern is something every embedded engineer knows intuitively. A sensor that spikes and then goes quiet is fundamentally different from one that slowly fades. Z+ expresses this distinction in one line.
Downstream Response
// different responses to different silence grades
sensor -> heartbeat -> {
"quiet" -> wait,
"gone" -> failover -> backup_sensor,
"dead" -> alert -> decommission
}Retry
When operations fail, retry policies are structural — declared in the wiring, not bolted on.
Simple Retry
// retry 3 times, then dead-letter
operation -> on_fail(retries: 3) -> dead_letterEscalating Retry
// increasing delays between retries
operation -> on_fail(schedule: [1s, 10s, 1m]) -> dead_letterPer-Attempt Behavior
// different behavior per attempt
retry -> {
attempt(1) -> notify("retrying"),
attempt(2) -> notify("second attempt"),
attempt(3) -> escalate
}FAFO — Consequence Awareness
The compiler knows about consequences. Not a hard stop. Not a nanny. A question: "hey, you sure?"
// wire a heater with no thermal protection:
// COMPILER WARNING: node 'heater' has no telemetry constraint
// "You sure about that?"
// wire a gate with no knee on a safety-critical path:
// COMPILER WARNING: gate has no knee — hard cutoff on safety path
// "Consider adding knee for smooth transition"