chobo の診断
chobo が出すコードの全部について、いつ出るかと、どう直すかを書いています。一件だけ読むには chobo explain E020 を使ってください。
| コード | 種別 | 見出し |
|---|---|---|
| E001 | エラー | 読めない行があります |
| E002 | エラー | 名前が見つかりません |
| E003 | エラー | 同じものが二度書かれています |
| E004 | エラー | 勘定に渡す引数の数が合いません |
| E005 | エラー | 型が合いません |
| E010 | エラー | 移動の単位が合いません |
| E011 | エラー | 数が単位に収まりません |
| E012 | エラー | 移動の元と先がいつも同じ勘定です |
| E013 | エラー | 振替に移動がありません |
| E014 | エラー | お金でない単位に、税込か税抜を書いています |
| E020 | エラー | 中の勘定に境界がありません |
| E021 | エラー | 外の勘定に境界があります |
| E022 | エラー | 境界に収まる残高がありません |
| E023 | エラー | 境界に拒否の理由の名前がありません |
| E030 | エラー | 振替にキーがありません |
| E031 | エラー | キーに額の引数があります |
| E040 | エラー | 仮押さえの終わり方がありません |
| E041 | エラー | 有効期限が範囲の外です |
| E050 | エラー | 前のリビジョンからある勘定の定義が変わりました |
| E051 | エラー | 前のリビジョンからある振替の定義が変わりました |
| E060 | エラー | 一つの操作が TigerBeetle の一つのリクエストに入りません |
| E061 | エラー | 名前が PostgreSQL の識別子に収まりません |
| E062 | エラー | 名前を MySQL がそのままでは持てません |
| E063 | エラー | 名前を Rust が識別子にできません |
| W101 | 警告 | 残高がたまる一方の勘定 |
| W102 | 警告 | いつも拒否される振替 |
| W103 | 警告 | 移動の順序のせいで拒否される振替 |
| W104 | 警告 | 同じ仮押さえのほかの移動に頼る移動 |
| W105 | 警告 | 使われない宣言 |
| W106 | 警告 | 効かない境界 |
| W107 | 警告 | 前のリビジョンにあった勘定や振替がありません |
| W901 | 警告 | 鍵がファイルに書かれています |
E001
エラー — 読めない行があります
いつ出るか。 知らない語がある、字下げがそろっていない、文字列が閉じていない、行が決まった形になっていないときに出ます。ファイルの先頭の BOM、タブ、結合文字(濁点やアクセントを別の文字として付けたもの)も、このコードになります。読めない行があると、そこから先は推測になるので、chobo は名前の解決やほかの検査をしません。
直し方。 メッセージが示す形に書き直してください。勘定の下に書けるのは description、at least、at most、振替の下に書けるのは description、key、pending、move です。結合文字は、合成済みの一文字(「か」と濁点ではなく「が」)で書き直してください。
最小の再現:
関係するコード: E002
E002
エラー — 名前が見つかりません
いつ出るか。 単位、勘定、型、振替の引数の名前が、宣言されたどれとも合わないときに出ます。chobo は名前を、書いたとおりに比べます。
直し方。 宣言を足すか、宣言にある名前に直してください。外の世界を表す勘定(仕入先、客)も、account 仕入先 : 個 outside のように宣言してください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
E003
エラー — 同じものが二度書かれています
いつ出るか。 同じ名前の単位、勘定、振替、引数を二度宣言したときに出ます。一つの勘定や振替の下に description、at least、at most、key、pending を二度書いたとき、キーに同じ引数を二度並べたときも出ます。
直し方。 どちらかを消すか、別の名前にしてください。キーは一行にまとめて書いてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
E004
エラー — 勘定に渡す引数の数が合いません
いつ出るか。 移動に書いた勘定の引数の数が、勘定の宣言と違うときに出ます。引数は、宣言の順に位置で渡す決まりです。
直し方。 宣言の数だけ渡してください。account 在庫(sku: string) なら 在庫(sku) です。引数の無い勘定は、括弧を書かずに 客 と書いてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock
E005
エラー — 型が合いません
いつ出るか。 string の引数を移動の額に使ったとき、額の引数を勘定の引数に使ったとき、勘定の引数を string 以外の型で宣言したときに出ます。
直し方。 額には、単位を型にした引数(数: 個)か数を書いてください。勘定の引数には、string の引数か文字列を書いてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move sku from supplier to stock(sku)
関係するコード: E010
E010
エラー — 移動の単位が合いません
いつ出るか。 一つの移動の、元の勘定、先の勘定、額の単位がそろっていないときに出ます。chobo は換算しません。
直し方。 単位をそろえてください。両替や換算は、単位ごとに外の勘定を置いて、単位の違う二つの移動で書いてください。換算した額は、呼ぶ側が計算して渡します。
最小の再現:
book shop v1
unit pcs
unit yen
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account customers : yen outside
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
関係するコード: E005
E011
エラー — 数が単位に収まりません
いつ出るか。 帳簿に書いた数(境界や移動の額)の小数が単位の scale より多いとき、移動の額が負のとき、いちばん小さい単位で数えて −(2⁶³ − 1) から 2⁶³ − 1 までの外にあるときに出ます。
直し方。 単位の scale に合う桁数で書いてください。小数の要る単位は、unit USD scale 2 のように宣言してください。向きを変えたい移動は、from と to を入れ替えてください。
最小の再現:
関係するコード: E022
E012
エラー — 移動の元と先がいつも同じ勘定です
いつ出るか。 一つの移動の from と to に、同じ勘定と同じ引数を書いたときに出ます。どう呼んでも same_account で拒否されます。
直し方。 動かす先を別の勘定にしてください。同じ種類の勘定のあいだで動かすなら、別の引数にしてください(在庫(元) to 在庫(先))。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
transfer shuffle(note: string, sku: string, qty: pcs)
key note
move qty from stock(sku) to stock(sku)
E013
エラー — 振替に移動がありません
いつ出るか。 振替の下に move の行が一つも無いときに出ます。
直し方。 move <額> from <勘定> to <勘定> で、どこからどこへ動かすかを書いてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
transfer count(note: string)
key note
E014
エラー — お金でない単位に、税込か税抜を書いています
いつ出るか。 unit の行の最後の incl_tax か excl_tax が、お金の単位でない単位に付いているときに出ます。お金の単位は、通貨の名前(円、JPY、ISO 4217 のコード)の単位で、円と JPY は scale 0、ほかの通貨は scale 0 か 2 のものです。ほかの単位(個、kg、scale 2 の円)には、税込も税抜もありません。
直し方。 incl_tax か excl_tax を外すか、通貨の名前の単位にしてください(unit 円 incl_tax、unit USD scale 2 excl_tax)。税込か税抜かは、規則やワークフローから額を受け取るときに、同じ区別の額だけを受け取るために書くものです。
最小の再現:
関係するコード: E010
E020
エラー — 中の勘定に境界がありません
いつ出るか。 outside を付けていない勘定に、at least も at most も無いときに出ます。chobo が守るのは勘定の境界だけなので、境界の無い中の勘定では何も守られません。
直し方。 at least 0 refused as 在庫切れ のように境界を書いてください。外の世界を表す勘定(仕入先、客、銀行)なら、outside を付けてください。
最小の再現:
関係するコード: E021
E021
エラー — 外の勘定に境界があります
いつ出るか。 outside を付けた勘定に at least か at most を書いたときに出ます。外の勘定は外の世界を表し、マイナスにもなります。
直し方。 境界を消してください。その勘定の残高を守りたいなら、outside を外して中の勘定にしてください。
最小の再現:
関係するコード: E020
E022
エラー — 境界に収まる残高がありません
いつ出るか。 下限が上限より大きいとき、上限が 0 より小さいときに出ます。勘定は残高 0 から始まるので、上限が 0 より小さいと何も入れられません。
直し方。 下限を上限以下にし、上限を 0 以上にしてください。
最小の再現:
book shop v1
unit pcs
account shelf(sku: string) : pcs
at least 10 refused as below_safety_stock
at most 5 refused as shelf_full
関係するコード: E011
E023
エラー — 境界に拒否の理由の名前がありません
いつ出るか。 境界に refused as <理由> が無いとき、または理由の名前が chobo の決めている名前(key_conflict、already_refused、same_account、no_such_hold、already_posted、already_voided、expired、over_hold)と同じときに出ます。理由の名前は、その境界で拒否されたときに呼ぶ側が受け取るもので、dandori のタスクのエラーの名前にもなります。
直し方。 業務の言葉で理由を付けてください(at least 0 refused as 在庫切れ)。
最小の再現:
E030
エラー — 振替にキーがありません
いつ出るか。 振替に key の行が無いとき、またはキーに書いた名前が振替の引数に無いときに出ます。どの振替にも冪等のキーが要ります。同じキーで同じ中身の二度目の呼び出しは何もせず、中身が違えば拒否されます。
直し方。 一度だけにしたい単位を、引数で並べてください。注文と SKU の組ごとに一度なら key 注文, sku です。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
move qty from supplier to stock(sku)
関係するコード: E031
E031
エラー — キーに額の引数があります
いつ出るか。 キーに、単位を型にした引数(額)を入れたときに出ます。入れると、額だけが違うリトライが別の振替として両方通り、二重に動きます。
直し方。 キーから額を外してください。額だけが違う二度目の呼び出しは、key_conflict で拒否されるようになります。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, qty
move qty from supplier to stock(sku)
関係するコード: E030
E040
エラー — 仮押さえの終わり方がありません
いつ出るか。 pending だけを書いて、有効期限も never expires も書いていないときに出ます。仮押さえは、確定、取消、有効期限切れのどれかで終わります。
直し方。 pending expires after 30 minutes か pending never expires と書いてください。never expires の仮押さえを終わらせるのは、呼ぶ側だけです。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account customers : pcs outside
transfer reserve(order: string, sku: string, qty: pcs)
key order, sku
pending
move qty from stock(sku) to customers
関係するコード: E041
E041
エラー — 有効期限が範囲の外です
いつ出るか。 有効期限が 1 秒より短いとき、4294967295 秒(2³² − 1 秒、約 136 年)より長いとき、整数でないときに出ます。TigerBeetle の timeout は 32 ビットの秒です。
直し方。 1 秒から 2³² − 1 秒までの整数で書いてください。それより長く押さえるなら、never expires にしてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account customers : pcs outside
transfer reserve(order: string, sku: string, qty: pcs)
key order, sku
pending expires after 0 minutes
move qty from stock(sku) to customers
関係するコード: E040
E050
エラー — 前のリビジョンからある勘定の定義が変わりました
いつ出るか。 --diff-base で比べたリビジョンにある勘定の、単位、scale、外の勘定かどうか、引数、境界が変わったときに出ます。勘定の同一性に帳簿のバージョンは入らないので、すでにある勘定は前の定義のまま残ります。
直し方。 新しい名前の勘定を宣言し、残高を移す振替を書いてください。変わりうる限度は、はじめから勘定にしておいてください(会員ごとの与信枠なら「使える枠」の勘定)。
比べるリビジョンの帳簿:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
いまの帳簿(最小の再現):
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 3 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
E051
エラー — 前のリビジョンからある振替の定義が変わりました
いつ出るか。 --diff-base で比べたリビジョンにある振替の、引数、キー、仮押さえの終わり方、移動が変わったときに出ます。呼んでいる途中の操作をリトライすると key_conflict で拒否され、押さえ中の仮押さえを確定できなくなります。
直し方。 新しい名前の振替を宣言し、前の振替は残しておいてください。前の振替の仮押さえがどれも終わってから、前の振替を消してください。
比べるリビジョンの帳簿:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
いまの帳簿(最小の再現):
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order
move qty from stock(sku) to customers
E060
エラー — 一つの操作が TigerBeetle の一つのリクエストに入りません
いつ出るか。 chobo build の TigerBeetle のターゲットで、ある振替の一つの操作が送るチェーンが 253 件の振替を超えるときに出ます。チェーンは一つのリクエストで送らないと全部か無しになりませんが、--development で立てたレプリカは一つのリクエストに 253 件までしか受け取りません(そうでないレプリカは 8189 件まで)。境界のある勘定のあいだの移動は、一つで最大 6 件の振替になります。
直し方。 振替の種類を、移動の少ないいくつかの種類に分けてください。分けた振替はそれぞれが一度の書き込みになるので、全部か無しにしたい移動は同じ種類に残してください。
どのコマンドで出るか: chobo build <file.book> --target tigerbeetle-typescript
最小の再現:
book split v1
unit yen
account pool(id: string) : yen
at least 1 refused as pool_short
at most 1000000 refused as pool_full
account credit(id: string) : yen
at least -1000 refused as over_limit
at most 1000 refused as overpaid
account bank : yen outside
transfer fund(note: string, id: string, amount: yen)
key note
move amount from bank to pool(id)
transfer repay(note: string, id: string, amount: yen)
key note
move amount from credit(id) to bank
transfer spread(note: string, a: string, b: string, amount: yen)
key note
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
move amount from pool(a) to credit(b)
E061
エラー — 名前が PostgreSQL の識別子に収まりません
いつ出るか。 chobo build の PostgreSQL のターゲットで、スキーマ(帳簿の名前)、関数(<振替>_<操作>、balance_<勘定>)、関数の引数(p_<引数>)の名前が 63 バイトを超えるときに出ます。PostgreSQL はそれより長い名前を黙って切り詰めるので、二つの関数が同じ名前になりえます。日本語は一字 3 バイトです。
直し方。 名前を短くしてください。ASCII なら 63 字、日本語なら 21 字までです(関数の名前では、後ろに付く _hold などの分を引いた字数です)。
どのコマンドで出るか: chobo build <file.book> --target postgres
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship_the_goods_to_the_customers_who_have_ordered_and_paid_for_them(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
E062
エラー — 名前を MySQL がそのままでは持てません
いつ出るか。 chobo build の MySQL の系統のターゲットで、帳簿の名前から作るテーブル(<帳簿>_accounts など)と制約(<帳簿>_within_lower など)の名前が 64 字を超えるとき、または帳簿の名前に基本多言語面の外の文字(𠮷 など)があるときに出ます。MySQL はそういう文字を、警告だけで ? に書き換えるので、二つの名前が同じになりえます。TiDB と Vitess も同じ決まりです。
直し方。 帳簿の名前を 51 字までにし(後ろに _within_lower が付きます)、基本多言語面の外の文字を外してください。
どのコマンドで出るか: chobo build <file.book> --target mysql
最小の再現:
book stock_of_the_central_warehouse_and_of_each_branch_stores v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
E063
エラー — 名前を Rust が識別子にできません
いつ出るか。 chobo build の Rust のターゲット(postgres-rust、tigerbeetle-rust、mysql-rust)で、振替、勘定、引数の名前か拒否の理由に、Rust の識別子には使えない字があるときに出ます。Rust のクライアントは、これらの名前をそのまま、メソッド、構造体のフィールド、型、列挙の値の名前にします。chobo の名前には Unicode の文字と数字を使えますが、Rust の識別子は XID_Start の字で始まり、XID_Continue の字が続くもの(Unicode 17.0。rustc 1.94〜1.97 が読む版)なので、十進でない数字(²、½、① など)も丸で囲んだ文字(Ⓐ)も使えず、結合文字などは先頭に置けません。
直し方。 名前からその字を外すか、ほかの字に替えてください(たとえば area_m² は area_m2 に)。同じ名前はどの言語のクライアントにも出るので、替えると、どの言語の呼び出しも新しい名前で書くことになります。
どのコマンドで出るか: chobo build <file.book> --target postgres-rust
最小の再現:
book rooms v1
unit sqm
account floor(site: string) : sqm
at least 0 refused as no_room
account builders : sqm outside
account tenants : sqm outside
transfer build(permit: string, site: string, area_m²: sqm)
key permit, site
move area_m² from builders to floor(site)
W101
警告 — 残高がたまる一方の勘定
いつ出るか。 中の勘定へ入れる移動はあるのに、そこから取る移動がどこにも無いときに出ます。入ったものは出ていけません。
直し方。 取り出す振替を書いてください。外の世界を表す勘定なら、outside を付けてください。
最小の再現:
book shop v1
unit yen
account wallet(member: string) : yen
at least 0 refused as short
account bank : yen outside
transfer top_up(slip: string, member: string, amount: yen)
key slip
move amount from bank to wallet(member)
W102
警告 — いつも拒否される振替
いつ出るか。 振替が取る元の勘定に、入れる移動がどこにも無く、その勘定の下限が 0 以上のときに出ます。0 より多く動かせば、いつも拒否されます。
直し方。 その勘定へ入れる振替(入荷、入金)を書いてください。
最小の再現:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account customers : pcs outside
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
関係するコード: W101
W103
警告 — 移動の順序のせいで拒否される振替
いつ出るか。 すぐに確定する振替で、前の移動が勘定から取り、後の移動が同じ勘定へ入れるとき(下限)、または前の移動が入れ、後の移動が取るとき(上限)に出ます。chobo は移動を書いた順に一つずつ確かめるので、合わせれば収まる場合でも、前の移動で拒否されます。
直し方。 頼られる側の移動を先に書いてください。下限なら入れる移動を、上限なら取る移動を先にしてください。
最小の再現:
book market v1
unit yen
account buyers : yen outside
account fees : yen outside
account sales(shop: string) : yen
at least 0 refused as sales_short
transfer sell(order: string, shop: string, price: yen, fee: yen)
key order
move fee from sales(shop) to fees
move price from buyers to sales(shop)
関係するコード: W104
W104
警告 — 同じ仮押さえのほかの移動に頼る移動
いつ出るか。 仮押さえの振替で、ある移動が、同じ仮押さえのほかの移動が入れる勘定から取るとき(または、ほかの移動が取る勘定へ入れるとき)に出ます。押さえた額は、入ってくる側では使えず、出ていく側では空きになりません。順序を変えても通りません。
直し方。 取る分をはじめからその勘定に入れておくか、確定のあとで動かす別の振替に分けてください。
最小の再現:
book market v1
unit yen
account buyers : yen outside
account payouts : yen outside
account escrow(order: string) : yen
at least 0 refused as escrow_short
transfer pay(order: string, price: yen)
key order
pending expires after 1 hour
move price from buyers to escrow(order)
move price from escrow(order) to payouts
関係するコード: W103
W105
警告 — 使われない宣言
いつ出るか。 どの勘定にも引数にも使われない単位、どの移動にも出てこない勘定、キーにも移動にも使われない引数があるときに出ます。
直し方。 消すか、使うところを書いてください。
最小の再現:
book shop v1
unit pcs
unit boxes
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
関係するコード: W106
W106
警告 — 効かない境界
いつ出るか。 上限のある勘定へ入れる移動がどこにも無いとき(下限のある勘定から取る移動が無いときも)に出ます。その境界で拒否される振替がありません。
直し方。 境界を消すか、その境界で確かめるはずだった振替を書いてください。
最小の再現:
book shop v1
unit yen
account credit(member: string) : yen
at least -1000 refused as over_limit
at most 0 refused as overpaid
account shops : yen outside
transfer spend(slip: string, member: string, amount: yen)
key slip
move amount from credit(member) to shops
W107
警告 — 前のリビジョンにあった勘定や振替がありません
いつ出るか。 --diff-base で比べたリビジョンにあった勘定や振替が、いまの帳簿に無いとき、または帳簿の名前が変わったときに出ます。データベースには、その残高と仮押さえが残ります。
直し方。 残高を移す振替を書いてから消すか、残しておいてください。
比べるリビジョンの帳簿:
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer ship(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
いまの帳簿(最小の再現):
book shop v1
unit pcs
account stock(sku: string) : pcs
at least 0 refused as out_of_stock
account supplier : pcs outside
account customers : pcs outside
transfer receive(note: string, sku: string, qty: pcs)
key note, sku
move qty from supplier to stock(sku)
transfer send(order: string, sku: string, qty: pcs)
key order, sku
move qty from stock(sku) to customers
W901
警告 — 鍵がファイルに書かれています
いつ出るか。 帳簿のどこか(文字列でもコメントでも)に、鍵の形の値があるときに出ます。調べる鍵は、AWS のアクセスキー ID、GitHub・Slack・Stripe・OpenAI・Anthropic・Google の鍵やトークン、Slack の Incoming Webhook の URL、PEM の秘密鍵で、どれもプロバイダーが接頭辞や形を決めているものです。ritsu のどの言語も同じ決まりで調べます。診断には鍵の種類と、接頭辞と、長さだけを出し、鍵そのものも、その行も出しません。
直し方。 鍵はコードが動くところ(環境変数、プラットフォームの接続やシークレットの置き場)に置き、そこから読んでください。本物の鍵なら、まずプロバイダーで無効にしてください。ファイルから消しても、リポジトリの履歴には残ります。テスト用の値なら、同じ行のコメントに ritsu: test secret と書いてください。
最小の再現:
book wallet v1
# the Google Maps API key the shops look addresses up with: AIzaSyD-ritsu-fake-key-for-tests-000000
unit jpy
account balance(customer: string) : jpy
at least 0 refused as not_enough
account cards : jpy outside
account shops : jpy outside
transfer top_up(payment: string, customer: string, amount: jpy)
key payment
move amount from cards to balance(customer)
transfer buy(order: string, customer: string, amount: jpy)
key order
move amount from balance(customer) to shops