Channel
reaching humans — Email, SMS, WhatsApp, and push have physics Signal cannot express: consent, locale, receipts, and fallback chains.
Channel is the element for reaching humans.
Email, SMS, WhatsApp, and push have physics Signal cannot express: consent, locale, receipts, and fallback chains.
Governing rule
Reaching a human has physics Signal cannot express: consent, locale, receipts, and fallback chains.
At a glance
Channel
Essence: reaching humans. Replaces: email · SMS · WhatsApp · push.
Drivers available
channel.email
Dev `console` inbox · prod `smtp`.
SMS · WhatsApp · push
Human mediums with consent and fallback chains.
Why this is an element
Why
Channel is an element because human reach has irreducible physics — consent, locale, receipts — that machine messaging does not.
consent
Opt-out and suppression are first-class.
locale
Localized templates and resolution chains.
fallback
Cross-medium chains recorded as chains, not outcomes.
Example from the teaching apps
Claimed fence from provisions — same source the doc-drift gate checks:
examples/provisions/src/channels.ts
import { channel } from "okengine";
import { z } from "zod";
export const mail = channel.email({ from: "Provisions <no-reply@provisions.sa>" });
export const sms = channel.sms({ sender: "PROVISIONS" });
export const wa = channel.whatsapp();
export const orderConfirmed = mail.template("order-confirmed", {
schema: z.object({ name: z.string(), orderId: z.string(), total: z.number() }),
});
export const otpCode = channel.template("otp-code", { // medium-agnostic
schema: z.object({ code: z.string() }),
});Next
Vault
protected knowledge — Secrets, config, and environment with typed contracts — protected knowledge, not a loose bag of env vars.
AI
reaching machine intelligence — Models, prompts, agents, and RAG earn an element slot: non-determinism, cost, versioned prompts, egress privacy, and different test physics.