互換性
1.0.0 から、rulec の版の番号は Semantic Versioning に従います。このページは、rulec が読み書きするものそれぞれについて、「互換」が何を指すかを書きます。1.x のリリースが守るべきことを、ここで確かめられるようにするためです。
短く言えば、1.0 で rulec check を通る規則は、どの 1.x でも通り、意味も変わりません。生成コードの呼び方も答えも変わりません。
どの 1.x でも変えないもの
.ruleの言語。 1.0 が受け付ける書き方は、書き方も意味もそのまま残ります。ステートマシン(machine・held・never・once・scenario)も含みます。新しい書き方が増えることはあります。- 名前に使える語。 予約語、つまり E009 が名前として受け付けない 65 語(
src/kw.rsにある一覧)は 1.0 で固定し、テストがその一覧を見張ります。後の版で言語に語が増えることはありますが、この一覧には足しません。新しい語は、名前が来ない位置でだけ読むか、規則が宣言した同じ綴りの名前に譲ります。1.0 で使えた名前は、その後も使えます。 - 生成コードの答え。 検査を通る規則なら、どの言語の生成コードも、同じ入力にはどの 1.x でも同じ出力を返します。参照評価器も同じです。後の 1.x で過去の記録を再生しても、前と同じ答えになります。
- 生成コードの呼び方。 モジュール・関数・型・フィールド・エラーの名前、やりとりする整数の意味(§10.2)、呼び出しが書く記録、
_traced・_record・_fromの関数など、rulec apiが説明するものすべてです。新しい関数が隣に増えることはあります。 - コマンドライン。 コマンド、フラグ、その値、終了コード(0 は注記だけ、1 は指摘あり、2 は引数の誤りか読めないファイル)。コマンドやフラグが増えることはあります。
- 診断コード。 コードの意味は変えません。使わなくなったコードは、廃止したと書いて台帳に残し、その番号を別のものに使い回しません。新しいコードが増えることはあります。新しい警告が増えても、検査を通っていた規則は通ったままです(規則に書いた鍵を言う W901 はこうして足したもので、ritsu のどの言語でも同じ意味です)。
- 機械が読む形式。
--format jsonの出力すべて、ベクタ、fixtures、replay のマニフェスト、adapter/1とextract/1のやりとり、証明書、MCP のツールとその引数とリソース、GitHub Action の入力、リリースのアーカイブとパッケージの名前(Homebrew のi2y/tap/ritsu、.debと.rpm)は、1.0 で持っているフィールドを、同じ意味のまま持ち続けます。1.x でフィールドが増えることはあり、文書が並べている値の集合に値が増えることもあります(新しい診断コード、diffのdomainの新しいwhatなど)。読む側は、知らないキーを読み飛ばし、知らない値も知らないキーと同じように扱ってください。vを持つ形式では、vがその形の版です。checkは 2、証明書は 1 で、vの無い出力は 1 です。証明書を再検査するプログラムは、自分の知らないvを受け付けません。tools/recheck.pyとproofs/の Lean のプログラムはそうしています。
1.x で変わりうるもの
- 文面。 診断の見出し・注記・ヒント、
--help、テキストの報告、rulec docが書くもの、この文書です。読むのはコードと JSON のキーにして、文を読まないでください(§11 原則 5)。 - 生成コードの本文。 並べ方、コメント、ローカル変数の名前、そして書いた rulec の版が入るヘッダです。rulec を上げたら
rulec genをもう一度走らせ、変わったものをコミットしてください。それまではrulec gen --checkが落ちます。CI では一つのリリースを決めて入れます(uses: i2y/ritsu@v1.0.0)。@v1のように動くタグは用意しません。こちらが何も変えていないのに、生成物が古くなってしまうからです。 - 落ちるべきだったのに通っていた規則。 このページや何を証明するかのページが捕まえると言っているものを、前の版が見逃していたと 1.x で分かったとき(見逃した漏れや重なり、何も宣言しないまま読み飛ばした行など)、その直しでその規則は落ちるようになります。互換のために、通ってはいけなかった規則を緑のままにはしません。こうした変更は、どんな規則に効くかを添えてリリースノートに書きます。
- 参照評価器と食い違っていた答え。 ある言語の生成コードが参照評価器と違う答えを返していたら、直して揃えます。これもリリースノートに書きます。
- 検査にかかる時間。 ただし、既定の予算の中で終わっていた規則は、その後も終わります。
約束の外にあるもの
- Rust のライブラリ(
src/lib.rs)。モジュールが公開されているのは、テスト・ritsu(コマンドとブラウザで試すページ)・rulec mcpから使うためで、外に向けたインタフェースではありません。ツールと一緒に変わります。使うのは、コマンドライン、rulec mcp、生成コードにしてください。 - ritsu のブラウザで試すページと、サイト。
experiments/の下のすべて。