When a verified GitHub delivery reaches DataMind Oda, the matching rules can start a new chat from it. This page describes what that chat is, how Oda creates it, and the limits of the webhook flow. The endpoint itself, its settings and the answers it sends are on GitHub webhooks.
Every rule that matches the delivery runs, and a rule that returns a request gives Oda what it needs to open a chat:
webhook-.webhook rule id must be a non-empty string, webhook rule "<id>" kind must be a non-empty string), an id already in use (webhook rule "<id>" is already registered), a rule without a run function (webhook rule "<id>" requires run()), or a registration while the webhook handling is shutting down (webhook runtime is closing).Oda validates the rule's request first, before anything is changed. Then, in order:
Accepting the prompt is where the creation settles: before that point, a failure leaves no chat behind. A chat that was already attached is detached and disposed when an attempt is rolled back, and a workspace registered for the attempt can stay behind. Rollbacks are best effort.
GitHub gets its 202 as soon as the verified payload was dispatched in memory. The answer comes before the rules run: it does not say that a rule matched, or that a chat was created. The full set of answers is on GitHub webhooks.
Nothing retries a delivery. Check the chat before you assume the work happened.
These refusals are reported as messages rather than shown in the chat. Each message names the rule or the chat it belongs to.
webhook delivery kind must be a non-empty string, webhook delivery source must be a non-empty string, webhook delivery id must be a non-empty string), its receipt time must be a non-negative whole number (webhook delivery receivedAt must be a non-negative safe integer), and its payload must be lossless JSON (webhook delivery must be lossless JSON).webhook rule result must be null or a Session request object.webhook Session request <field> must be a non-empty string), the folder must be an absolute path (webhook Session request workspacePath must be absolute, got "<path>"), and a model, when named, must be an object whose token cap, when set, is a positive whole number (webhook Session request model must be an object, webhook Session request model. maxTokens must be a positive safe integer).webhook Session "<id>" has no cwd, webhook Session "<id>" belongs to <n> Workspaces at prompt admission, or webhook Session "<id>" cwd <cwd> differs from its Workspace path.Each run records a line naming its provider, source, delivery and rule, in the shape webhook: provider=.; a rule that fails adds the reason after failed:.
It is an ordinary top-level chat, so you open it like any other chat. It belongs to the workspace the rule named, its identifier starts with webhook-, and its first message is the rule's prompt, recorded as a webhook notice.
Nothing deduplicates deliveries. Oda runs the rules again for every delivery, including one it has handled before, so a second delivery can open a second chat. If a rule must act once, the rule owns that check; the delivery's identifier is recorded on the message so the rule can use it.
No. It means only that the verified payload was dispatched in memory. It comes before the rules run and says nothing about rule matches or chats. See GitHub webhooks.
The failure is logged for that run only. The other rules still run, and nothing about the failure goes back to GitHub.
The folder the rule's request names, given as an absolute path. If that folder is not a workspace yet, Oda registers it as one. The chat then works there like any chat in its workspace (Workspaces, files and permissions).
Yes. Every matching rule runs on its own, and each rule can return one request, so several rules can each open a chat from the same delivery.
There is no completion result. Accepting the delivery and settling a rule do not report whether the chat succeeded, went idle or produced output, so open the chat and read what it did.
A rule may name the chat's model and an output-token cap. When it names none, the chat starts with Oda's default model selection.
Handling is in memory and fire and forget. A rule call that had not yet reached a prompt is lost, and nothing queues, replays or retries it. A workspace registered for the attempt can stay behind.
The message text is the prompt exactly as the rule wrote it. Oda adds no framing of its own; the message is marked as a webhook notice so you can tell where it came from.