診断コード
E040 と E050 は dandori build がビルド先のプラットフォームについて出し、それ以外はすべて dandori check が出します。エラーがあるとビルドは止まり、警告(W)では止まりません。どの診断にもそこへ至る実行の例が付き、--lang ja を付ければ日本語で出ます。dandori explain <コード> は、いつ出るか、直し方、そのコードを出す最小の .flow を出します。
| コード | 見つけるもの |
|---|---|
| E001 | 構文の誤り |
| E002 | 無い名前。型(.proto に無いメッセージや列挙も、読めなかった import にある型のフィールドを持つメッセージも)・変数・フィールド・規則・タスク、日付のファイルに無い日付、無い帳簿、帳簿に無い振替、timeout until に書いたタスクに無い引数のほか、単位の表に無い単位と、incl_tax・excl_tax のほかの税区分も |
| E003 | 型が合わない。オプショナルな値をそのまま使う、none を置けない場所に置く、リストのリスト、型の決まらない {…} や []、数でも順序のある列挙でもないものに付けた範囲(順序の無い列挙に付けたものも)、どの値も入らない範囲、型の次元に無い単位を付けた範囲の端と、型の単位で数えると整数にならない範囲の端、列挙の値でない範囲の端、自分自身を含むレコード(.flow に書いたものも、.proto のメッセージから作ったものも)、UTC オフセットの書かれていないカレンダーを使う日付に渡した時刻(now など)、timestamp でない timeout until の引数 |
| E004 | 引数や出力が多すぎる・足りない。{…} のレコードにフィールドが足りない |
| E005 | 読めなかった規則、日付のファイル、帳簿と、呼べない規則。rulec の検査を通らない規則、要素の並び(elements)をたどる規則(dandori は規則に並びを渡せません)、無いことがある入力か出力(T?)を持つ規則。connect で呼ぶ規則では、Connect のサービスの情報や、サービスが列挙の値を何と呼ぶかを rulec から得られないものも。出力の無い規則(rulec の enums のファイル)を呼ぶところも(列挙はフローの型として使えますが、呼べる関数は生成されません)。koyomi の検査を通らない日付のファイル、chobo の検査を通らない帳簿、無いファイルも |
| E006 | 同じ名前を二度宣言している(規則・日付のファイル・帳簿は、use rule・use dates・use book の名前を共有する)。生成するコードで同じ名前になる型(warehouse.Stock と warehouse_Stock)、規則と API に付けた同じ名前も。規則の別名が、dandori がまわりに生成するコードの使っている名前(rules、args、out、activity、handler、ctx など。設計書の 1.15)である規則、別名が同じ二つの規則、タスクと規則のアクティビティ(rule_<規則>)が同じ名前になるものも |
| E007 | タスクの書き方が合わない。呼び出し方が二つある、flow のタスクにほかの呼び出し方や image がある、OpenAPI の操作を呼ぶタスクに form がある、Connect に無いエラーコード、ステータスの無い HTTP のエラー、同じステータスのエラーが二つ、呼び出し方が持てない key や callback(エージェントは key を持たない)、知らない AWS のサービス、agent の無いタスクの model、応答の型の無いエージェントやエラーを宣言したエージェント、Schema で書けない応答の型、知らないプロバイダー、Claude で大文字と小文字だけが違う列挙の値、event のタスクの引数(timeout until の時刻のほか)・呼び出し方・retry・key、案件を始める event のタスク、event でも callback でもないタスクと aws のコールバックの timeout until、timeout をリトライする retry を持つ timeout until のタスク、二つの timeout、エージェントでも判断のタスクでもないタスクや Claude のエージェントの url、http でも https でもない url、エージェントでないタスクの effort、プロバイダーが受け付けないレベルの effort。判断のタスク(jev)では、知らない API、モデルが答えられない結果の型(列挙・bool・それらのレコードのどれでもない)、尋ねていないフィールドや二度尋ねたフィールド、列挙に無い値の意味、段階の意味が抜けているか、TypeSafe の API で 11 段階以上の score、値が一つだけの列挙の選択や段階、Decisions API の predicate のはいといいえの意味、System One の API や jev openai の無いタスクの refusal、failure や宣言済みのエラーを使う refusal とそのリトライ、true か false の片方だけの意味、刻みで割り切れない率でない確信度のフィールド、jev の無い confidence、failure や宣言済みのエラーを使う confidence、はいかいいえだけの答えに 0.5 以下の下限、confidence のエラーの retry、ステータスの無いエラー、key・effort。帳簿の操作のタスクの、振替に無い操作(すぐに確定する振替の hold・post・void、仮押さえにする振替の do)、key、refused as、エラーの = …。規則の書き方が合わないもの(lambda と connect の両方、connect の無い connection、http:// でも https:// でもない connect)も。自分の URL を持たないタスク、connect の無い use rule、URL の無い use の下の plaintext、引数でないものを書く discloses、理由が空の文字列の plaintext と discloses も |
| E008 | 案件の宣言の誤り(.proto から作った列挙の値がステートマシンの状態と違う、も)。あるいは、タスクが案件にできないことをしている。帳簿の仮押さえに従う案件では、合わない操作(hold は starts、post は sends post、void は sends void で、do は案件を動かさない)、expire のほかの external、refused when |
| E009 | 書けない場所にある文。let <名前> = for … の本体の最後の行でない yield、最後に yield の無いそうした for、for … in parallel のイテレーションの中の break・succeed・案件への呼び出し・イベントの待ち、on failure や on cancel の中の succeed、イテレーションの中と外の両方で値を入れる変数、let なしで呼ぶ規則 |
| E010 | match のどの分岐にも当たらない値 |
| E011 | 通ることのない分岐 |
| E012 | 値がまだ入っていないことがある変数を読んでいる |
| E013 | 始まっていない案件にタスクを呼んでいる。あるいは、始まった案件をもう一度始めている |
| E014 | 範囲のある場所(規則の入力、タスクの引数、書き出すレコードのフィールド、出力)に、範囲を外れうる値を渡している。順序のある列挙の値の範囲では、範囲に入らない値になりうる値を渡している |
| E015 | ほかの .flow を走らせるタスクが子と合わない。引数と子の入力、結果と子の出力、宣言したエラーと子の fail を比べる。子が読めない、子が検査を通らない、自分を走らせるフローも |
| E016 | タスクが、呼ぶ API の記述や帳簿と合わない。無い操作、受け取らない引数、要る引数の不足、型・範囲・列挙の違い、レスポンスが省きうるのに T? でないフィールド、返さないステータスや例外、冪等トークンでない key、ストリームのメソッド。記述が読めないとき、connect で呼ぶ .proto に url が無いとき、メソッドやメッセージが、読めなかった import にある型を使っているときも。帳簿の操作のタスクでは、操作が受け取るもの(名前と型)と違う引数、仮押さえでない結果(do は何も返さない)、帳簿がその操作を拒否する理由でないエラー |
| E017 | ワークフローが、implements で実装するサービスと合わない。.proto に無いサービスや、.proto でない記述のサービス。サービスに書いた名前と違うワークフロー、dandori のオプションが無いメソッドや二つ以上あるメソッド、ストリームのメソッド、実行を始めるメソッドが無いか二つ以上ある。始めるメソッドのリクエストやレスポンスの、入力や出力に無いフィールド、フィールドに無い入力や出力、型の違う入力や出力、無いことがあるのにフィールドがそれを表せない出力、フローがその名前で失敗しない fails の名前や、fails に無い失敗の名前。イベントを送るメソッドやコールバックに応答するメソッドに書いたタスクが無いか種類が違う、タスクが読めない値を送る、何かを返す。実行がいまどこにいるかを聞くメソッドが、何かを受け取る、dandori.v1.Status と違うものを返す。dandori のオプションを import せずに使うファイル、読めなかったファイルのメッセージ(サービスを実装する) |
| E018 | 規則・日付のファイル・帳簿を使う(use rule・use dates・use book のある)フローを、dandori のコマンドだけで走らせた。このコマンドにはほかの言語が入っておらず、それらを読めない。そうした宣言の最初で一度だけ出し、同じコマンドを ritsu dandori で走らせるよう伝える。exit code は 2 |
| E020 | 案件を終わりでない状態に残したまま、ワークフローが終わりうる(on cancel が終わってキャンセルで終わるときも) |
| E021 | どの状態でも拒否されるイベントを送っている(帳簿の仮押さえなら、帳簿がどの状態でも拒否する操作) |
| E022 | 拒否されうるイベントを送っているのに、拒否されたときの処理が無い(帳簿の仮押さえでは、帳簿が拒否する理由を errors に書き、on <理由> => で処理する。仮押さえはワークフローの外で期限が切れるので、押さえたあとの post と void は expired で拒否されることがある) |
| E030 | 外部のデータを変える呼び出しを、key なしでリトライする |
| E031 | Express のワークフローにできないこと。五分を超える待ち、コールバック、ネストした実行、key なしで外部のデータを変える呼び出し |
| E040 | 一回の実行が、プラットフォームにとって大きくなりすぎうる。実行履歴の上限は Step Functions が 25,000 件、Temporal が 51,200 件、Lambda durable functions が 3,000 操作。Argo Workflows ではノードが 10,000 個を超えうるもの |
| E050 | プラットフォームに要るものが無いか、プラットフォームにできないこと。Step Functions では、呼び出し方か connection(エージェントと判断のタスク、サービスで呼ぶ規則にも要る)、ネストした実行が宣言するエラー、http・agent・jev の 60 秒を超える timeout、HTTPS でない送信先(規則のサービスも)。Temporal 以外では、on cancel、event のタスク、実装するサービスの、実行がいまどこにいるかを聞くメソッド。Step Functions と Lambda durable functions では、呼ばれる規則の lambda か connect と、呼ばれる日付の lambda。Step Functions では、帳簿の lambda。Lambda durable functions では、invoke する関数の timeout。Argo では、呼び出し方か image、workflow template が宣言するエラー、callback のタスクの retry、history encrypted |
| E906 | 秘密と印を付けた値を、プロジェクトの外の相手に送る。相手は、モデルのプロバイダー(OpenAI、Anthropic、このマシンの外の Open Responses のサーバー)、判断のモデルの API(Jev、OpenAI の Decisions API、このマシンの外のサーバー)、URL だけで書いた http の送り先、AWS のサービス。タスクが discloses でその引数を書いていれば出ない(秘密の値) |
| W030 | 外部のデータを変えるかもしれない呼び出しを、key なしでリトライする |
| W032 | 確信度の下限を書くか確信度を受け取る判断のタスクが、ひとりでに別のモデルに移る名前でモデルを書いている。Jev のエイリアス(jev-latest・jev-preview)、System One の API のサーバーのタグの無い名前と :latest、OpenAI の Decisions API のどのモデルも(バージョンを固定する名前が無い) |
| W101 | どこでも処理しないエラーで、案件を終わりでない状態に残したまま失敗しうる(on failure や on cancel で片付けている最中も) |
| W102 | 起きることのない on <拒否のエラー> |
| W103 | 案件を始めるタスクに key が無い |
| W104 | 範囲のある場所に、範囲の分からない値を渡している |
| W901 | 鍵の形の値(AWS のアクセスキー ID、GitHub・Slack・Stripe・OpenAI・Anthropic・Google の鍵やトークン、Slack の Incoming Webhook の URL、PEM の秘密鍵)が、.flow の文字列かコメントに書かれている。ritsu: test secret と書いた行はテスト用の値として出ない |
| W902 | タスクが呼ぶ URL(http のタスクの URL、エージェントの url、use rule … connect、use openapi と use proto の url、OpenAPI の文書の最初のサーバー)が、このマシンの外へ暗号化しない HTTP で送る。URL を書いたところに plaintext "<理由>" があれば出ない |
| W904 | 秘密と印を付けた値が、ワークフローの履歴に残る。入力・出力、タスクの結果、呼び出しの引数、fail の理由。ワークフローに history encrypted と書いてあれば出ない |
検査が何を見ているかは、例と一緒に何を検査するかにあります。