Roles and stylesheet
Classes are roles. accent, ok, warn, danger, muted, the dashed cluster group and the edges failure and async take their tones from the theme; queue and senders come from the site stylesheet docs/src/styles/diagrams.css, which pages link only as compiled CSS. The inline diagram follows the theme switch in the header; the two images are standalone SVGs with the light and dark themes baked in, so they keep their colours in any host.
Source: bench/fixtures/roles/, shared with the stylesheet parity gate.
Two tier roles
Section titled “Two tier roles”Diagram source
flowchart LR accTitle: Push scheduler with roles cron["**cron trigger**<br/>every minute<br/>idempotent run key"] subgraph wf["durable workflow"] lease["**lease**<br/>one run per window<br/>90 s TTL"] due["**due set**<br/>scan schedules<br/>next_at ≤ now"] budget["**budget**<br/>250 push slots<br/>per-tenant caps"] enqueue["**enqueue**<br/>batches of 100<br/>dedupe by job id"] wait["**wait**<br/>sleep until acked<br/>or 30 s timeout"] finalize["**finalize**<br/>record outcomes<br/>advance next_at"] release["**release**<br/>drop the lease"] lease --> due --> budget --> enqueue --> wait --> finalize --> release end q[("**push queue**<br/>at-least-once<br/>visibility 60 s")] subgraph consumers["consumers"] c1["**sender A**<br/>APNs"] c2["**sender B**<br/>FCM"] c3["**sender C**<br/>web push"] end dlq[("**dead letters**<br/>after 5 attempts<br/>kept 14 days")] cron --> lease enqueue e1@-->|batch| q q --> c1 & c2 & c3 c1 & c2 & c3 -.->|ack| wait q e2@-->|max retries| dlq class cron accent class lease,release muted class budget warn class finalize ok class dlq danger class e1 async class e2 failure class wf group class q queue class consumers senders