Skip to content

Diagnostics

dandori check finds all of these but E040 and E050, which dandori build finds for the platform it builds for. An error stops the build; a warning (W) does not. Each diagnostic comes with a run that gets there, and --lang ja gives the same in Japanese. dandori explain <code> says when one comes, how to fix it, and the smallest .flow that gets it.

Code What it finds
E001 a syntax error
E002 a name that is not there: a type (a message or an enum the .proto does not have, or a message that has a field of a type from a file the .proto imports and that could not be read, too), a variable, a field, a rule or a task, a date the dates file does not have, a book, or a transfer the book does not have (a unit the table of units does not have, or a tax that is neither incl_tax nor excl_tax, too)
E003 types that do not match: a value that may be absent used as it is, none where it cannot go, a list of lists, a {…} or [] whose type cannot be told, a range on what is not a number, a range no number is in, a bound of a range whose unit is not of its type or that does not come to a whole number of it, a record that contains itself, written in the .flow or made of a message of a .proto, a time (now, say) passed to a date of a dates file whose calendar says no UTC offset
E004 too many or too few arguments or outputs, a field left out of a {…} record
E005 a rule, a dates file or a book that could not be read: one that does not pass rulec's check, one that walks a list of elements (elements), which dandori does not pass a rule, or one with an input or an output that may be none (T?); for connect, one whose Connect service rulec says nothing of, or does not say what the service calls the values of an enum; a dates file that does not pass koyomi's check, and a book that does not pass chobo's (or one that is not there)
E006 a name declared twice (rules, dates files and books share the names of use rule, use dates and use book); types that come to one name in the code dandori writes (warehouse.Stock and warehouse_Stock); one name for a rule and an API; a rule whose alias is a name the code dandori writes around it uses already (rules, args, out, activity, handler, ctx, and the others of the design's 1.15), two rules of one alias, a task and a rule's activity (rule_<rule>) of one name
E007 a task's clauses that do not go together: two ways of calling, a flow task with another one or with an image, form on a call to an OpenAPI operation, a Connect error code that is not one, an HTTP error without its status or two errors of one status, a key or a callback the way of calling cannot have (an agent takes no key), an AWS service it does not know, model without an agent, an agent without the type of its answer or with declared errors, an answer its schema cannot say, a provider it does not know, enum values that differ only in case for Claude, an event task's parameters, calls, retry or key, or one that starts a case, a url on a task that is not an agent or on Claude's, a url that is not http or https, an effort on a task that is not an agent or at a level its provider does not take; for Jev, an answer it cannot give (not an enum, a bool or a record of them), a record's field left unasked or asked twice, a meaning for a value the enum does not have, a score without the meaning of every level or with more than 10, what only true or only false means, a confidence that goes into what is not a rate of whole steps, confidence without jev or with failure or a declared error, a yes or no floor of 0.5 or less, retry on the error of confidence, an error without its status, key, url, effort; for a task that runs an operation of a book, an operation the transfer does not have (hold, post or void of a transfer done at once, do of one that holds first), key, refused as, an error's = …; a rule's clauses that do not go together: lambda and connect together, a connection without connect, a connect that is not http:// or https://; plaintext where there is no URL of the task's own, a rule or a use to reach, discloses naming what is not a parameter, and an empty reason of either
E008 a case declared wrong (its state an enum made from a .proto whose values are not the machine's states, too), or a task that does to a case what it cannot; for a case that follows a book's hold, an operation that does not fit it (hold starts it, post sends post, void sends void, and do moves no case), an external other than expire, refused when
E009 a statement where it cannot be: a yield that is not the last line of the body of let <name> = for …, or such a for without one; break, succeed, a case's call or an event's wait in a round of for … in parallel; succeed in on failure or on cancel; a variable given a value both inside a round and outside; a rule called without let
E010 a value that no arm of a match takes
E011 an arm that can never be taken
E012 a variable read where it may have no value yet
E013 a task called on a case that has not started, or a case started twice
E014 a value that can be outside the range where it goes: a rule's input, a task's parameter, a field of a record written out, an output
E015 a task that runs another .flow and does not fit it: its parameters and the child's inputs, its answer and the child's outputs, its errors and the child's fails (a child that cannot be read or does not pass the checks, and a flow that runs itself, too)
E016 a task that does not fit the API description or the book it calls: an operation that is not there, a parameter it does not take or one it needs left out, a type, range or enum that differs, a field the answer may leave out that is not T?, a status or an exception it does not answer with, a key that is not its idempotency token, a method that streams (and a description that cannot be read, a .proto without url that a connect task calls, or a method whose message has a type from a file that could not be read); for a task that runs an operation of a book, parameters other than what the operation takes (by name and type), an answer that is not the hold (a do answers nothing), an error that is not a reason the book refuses the operation with
E017 a workflow that does not fit the service it implements (implements): a service the .proto does not have, or one of a description that is not a .proto; a workflow the service does not name, a method with none of dandori's options or more than one, a method that streams, no method or two that start a run, a field of the start's request or its response that is no input or output, an input or an output that is no field, or one of another type, an output that may be absent where its field cannot say so, a name of fails the flow never fails with or one it fails with that fails does not list, a method that sends an event or answers a callback naming no such task, sending a value the task does not read, or answering something, a method that asks where a run is and takes something or answers other than dandori.v1.Status, a file that uses dandori's options without importing them, a message of a file that could not be read (Implement a service)
E018 a flow that uses rules, dates files or books (use rule, use dates, use book), run with the dandori binary alone, which holds no other language and reads none of them: said once, at the first of those declarations, with the same command to run as ritsu dandori; the exit code is 2
E020 the workflow can end with a case in a state that is not final (also when on cancel ends it as cancelled)
E021 an event sent that every state refuses (for a book's hold, an operation the book refuses in every state)
E022 an event sent that can be refused, with nothing to handle the refusal (for a book's hold, declare the reason the book refuses with in errors, and handle it with on <reason> =>; a hold expires on its own, so a post or a void after a hold may be refused with expired)
E030 a call that changes the other side, retried without a key
E031 what an Express workflow cannot do: a wait longer than five minutes, a callback, a nested execution, a call that changes the other side without a key
E040 one run can grow too large for the platform: its history over the limit (25,000 events on Step Functions, 51,200 on Temporal, 3,000 operations on Lambda durable functions), or on Argo Workflows more than 10,000 nodes
E050 what the platform needs is missing, or the platform cannot do it: on Step Functions, a way of calling or a connection (an agent's, Jev's and a rule at its service's too), a nested execution's declared errors, a timeout over 60 seconds on http, agent and jev, a destination that is not HTTPS (a rule's service too); off Temporal, on cancel, event tasks, and a method of the service the workflow implements that asks where a run is; on Step Functions and Lambda durable functions, a called rule's lambda or connect, and a called date's lambda; on Step Functions, a book's lambda; on Lambda durable functions, a timeout on a function it invokes; on Argo, a way of calling or an image, a workflow template's declared errors, retry on a callback task, history encrypted
E906 a value marked secret sent to a party outside the project: a model's provider (OpenAI, Anthropic, or an Open Responses server not on this machine), Jev, a host an http task names by its URL alone, an AWS service; unless the task says it discloses the parameter (Secrets)
W030 a call that may change the other side, retried without a key
W032 a Jev task that sets or reads a confidence, and names an alias of the model (jev-latest, jev-preview) rather than its version
W101 an error nothing handles can fail the run with a case in a state that is not final (while on failure or on cancel settles cases, too)
W102 an on <refusal> that can never happen
W103 a task that starts a case without a key
W104 a value whose range nothing says, where a range is
W901 a value in the shape of a key (an AWS access key ID; a GitHub, Slack, Stripe, OpenAI, Anthropic or Google key or token; a Slack incoming webhook URL; a PEM private key) written in the .flow, in a string or a comment; the line that says ritsu: test secret is a value for tests
W902 a URL a task calls over plain HTTP, to a host that is not this machine (an http task's URL, an agent's url, use rule … connect, the url of use openapi and use proto, an OpenAPI document's first server), unless plaintext "<why>" is written where the URL is
W904 a value marked secret kept in the history of the workflow: an input or an output, the answer of a task, an argument of a call, the reason of a fail; unless the workflow says history encrypted

What it checks says what the checker looks at, with examples.