コンテンツにスキップ

診断コード

E040 と E050 は dandori build がビルド先のプラットフォームについて出し、それ以外はすべて dandori check が出します。エラーがあるとビルドは止まり、警告(W)では止まりません。どの診断にもそこへ至る実行の例が付き、--lang ja を付ければ日本語で出ます。dandori explain <コード> は、いつ出るか、直し方、そのコードを出す最小の .flow を出します。

コード 見つけるもの
E001 構文の誤り
E002 無い名前。型(.proto に無いメッセージや列挙も、読めなかった import にある型のフィールドを持つメッセージも)・変数・フィールド・規則・タスク、日付のファイルに無い日付、無い帳簿、帳簿に無い振替のほか、単位の表に無い単位と、incl_tax・excl_tax のほかの税区分も
E003 型が合わない。オプショナルな値をそのまま使う、none を置けない場所に置く、リストのリスト、型の決まらない {…} や []、数でないものに付けた範囲、どの数も入らない範囲、型の次元に無い単位を付けた範囲の端と、型の単位で数えると整数にならない範囲の端、自分自身を含むレコード(.flow に書いたものも、.proto のメッセージから作ったものも)、UTC オフセットの書かれていないカレンダーを使う日付に渡した時刻(now など)
E004 引数や出力が多すぎる・足りない。{…} のレコードにフィールドが足りない
E005 読めなかった規則、日付のファイル、帳簿。rulec の検査を通らない規則、要素の並び(elements)をたどる規則(dandori は規則に並びを渡せません)、無いことがある入力か出力(T?)を持つ規則。connect で呼ぶ規則では、Connect のサービスの情報や、サービスが列挙の値を何と呼ぶかを rulec から得られないものも。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 のタスクの引数・呼び出し方・retry・key、案件を始める event のタスク、エージェントでないタスクや Claude のエージェントの url、http でも https でもない url、エージェントでないタスクの effort、プロバイダーが受け付けないレベルの effort。Jev では、Jev が答えられない結果の型(列挙・bool・それらのレコードのどれでもない)、尋ねていないフィールドや二度尋ねたフィールド、列挙に無い値の意味、段階の意味が抜けているか 11 段階以上の score、true か false の片方だけの意味、刻みで割り切れない率でない確信度のフィールド、jev の無い confidence、failure や宣言済みのエラーを使う confidence、はいかいいえだけの答えに 0.5 以下の下限、confidence のエラーの retry、ステータスの無いエラー、key・url・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(エージェントと Jev、サービスで呼ぶ規則にも要る)、ネストした実行が宣言するエラー、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 のサーバー)、Jev、URL だけで書いた http の送り先、AWS のサービス。タスクが discloses でその引数を書いていれば出ない(秘密の値)
W030 外部のデータを変えるかもしれない呼び出しを、key なしでリトライする
W032 確信度の下限を書くか確信度を受け取る Jev のタスクが、モデルをバージョンではなくエイリアス(jev-latest・jev-preview)で書いている
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 と書いてあれば出ない

検査が何を見ているかは、例と一緒に何を検査するかにあります。