Matrix and lint
Faults
The fault vocabulary danwo matrix plans from.
The faults danwo matrix plans: each provider call of the clean run × its provider's catalogue, and each webhook delivery × the webhook faults. Ids in paths read as :id; #n marks the n-th matching call. Customise with the config's matrix.
label forms
grammar
How fault labels read, for danwo matrix --faults, MCP inject_fault and danwo.inject.
| Member | Description |
|---|---|
status <code> on <METHOD> <host><path> e.g. status 500 on POST api.stripe.com/v1/checkout/sessions | |
reset | reset-after | delay <ms>ms | slow-then-retry <ms>ms on <METHOD> <host><path> | |
refusal | empty-completion | truncated | content-filter | malformed-tool-call | stream-cut on <METHOD> <model API host><path> e.g. refusal on POST api.openai.com/v1/chat/completions | |
card_declined on POST checkout.stripe.com/checkout/:id/complete (the hosted Checkout page's Pay button) | |
duplicate | forged | delay <ms>ms | stale <seconds>s on [<service> ]webhook <topic> e.g. duplicate on webhook checkout.session.completed | |
reorder [<service> ]webhooks <first>, <second> e.g. reorder webhooks payment_intent.created, payment_intent.succeeded | |
append #<n> to fault the n-th matching call or delivery instead of the next one |
defaultOutboundFaults
function
defaultOutboundFaults(call: OutboundCall): readonly OutboundFault[]danwo matrix's default fault catalogue: each call gets its provider's faults by host (Stripe, Resend, S3 and Tigris, Auth0, Google, Microsoft, Slack, GitHub, Twilio, Flutterwave, Paystack, Bachs, Clerk, Composio, Nylas, Nango, Unipile, Pusher, Novu, Tiptap and the model APIs, with error bodies their SDKs parse), and any other routed host (an outside endpoint such as MiniStack) gets plain HTTP failures.
DEFAULT_WEBHOOK_FAULTS
value
readonly WebhookFault[]Webhook faults when the config names none: a repeat, a late one, a forgery, an old one.
POST api.stripe.com/v1/checkout/sessions
outbound
status 500 · status 429 · reset · reset-afterStripe call.
GET api.stripe.com/v1/customers/cus_a1
outbound
status 500 · status 429 · resetStripe call.
POST api.resend.com/emails
outbound
status 429 · status 500 · delay 10000ms · reset · reset-afterResend call.
PUT t3.storage.dev/media/a.png
outbound
status 500 · status 503 · reset · reset-afterS3 and Tigris call.
GET t3.storage.dev/media/a.png
outbound
status 500 · status 503 · resetS3 and Tigris call.
POST oauth2.googleapis.com/token
outbound
status 500 · status 503 · status 400 · delay 10000ms · reset · reset-afterGoogle call.
GET gmail.googleapis.com/gmail/v1/users/me/history
outbound
status 429 · status 403 · status 500 · status 503 · delay 10000ms · reset · status 404Google call.
POST login.microsoftonline.com/common/oauth2/v2.0/token
outbound
status 500 · status 503 · status 400 · delay 10000ms · reset · reset-afterMicrosoft call.
GET graph.microsoft.com/v1.0/me/messages
outbound
status 429 · status 503 · status 504 · delay 10000ms · resetMicrosoft call.
POST slack.com/api/chat.postMessage
outbound
status 429 · status 500 · status 503 · status 200 · delay 10000ms · reset · reset-afterSlack call.
POST api.github.com/repos/acme/app/issues/:id/comments
outbound
status 403 · status 429 · status 502 · status 503 · delay 10000ms · reset · reset-after · status 422GitHub call.
POST api.example.test/v1/orders
outbound
status 500 · reset · reset-afterany other host call.
webhook checkout.session.completed
webhook
duplicate · delay 600000ms · forged · stale 3600sA webhook from a sender that names no service, as Stripe's; each delivery of the clean run gets these.
slack webhook events:A0APP
webhook
duplicate · delay 600000ms · forged · stale 3600sA webhook from the slack service; each delivery of the clean run gets these.