コンテンツにスキップ

互換性

1.0.0 から、rulec の版の番号は Semantic Versioning に従います。このページは、rulec が読み書きするものそれぞれについて、「互換」が何を指すかを書きます。1.x のリリースが守るべきことを、ここで確かめられるようにするためです。

短く言えば、1.0 で rulec check を通る規則は、どの 1.x でも通り、意味も変わりません。生成コードの呼び方も答えも変わりません。

どの 1.x でも変えないもの

  1. .rule の言語。 1.0 が受け付ける書き方は、書き方も意味もそのまま残ります。ステートマシン(machine・held・never・once・scenario)も含みます。新しい書き方が増えることはあります。
  2. 名前に使える語。 予約語、つまり E009 が名前として受け付けない 65 語(src/kw.rs にある一覧)は 1.0 で固定し、テストがその一覧を見張ります。後の版で言語に語が増えることはありますが、この一覧には足しません。新しい語は、名前が来ない位置でだけ読むか、規則が宣言した同じ綴りの名前に譲ります。1.0 で使えた名前は、その後も使えます。
  3. 生成コードの答え。 検査を通る規則なら、どの言語の生成コードも、同じ入力にはどの 1.x でも同じ出力を返します。参照評価器も同じです。後の 1.x で過去の記録を再生しても、前と同じ答えになります。
  4. 生成コードの呼び方。 モジュール・関数・型・フィールド・エラーの名前、やりとりする整数の意味(§10.2)、呼び出しが書く記録、_traced・_record・_from の関数など、rulec api が説明するものすべてです。新しい関数が隣に増えることはあります。
  5. コマンドライン。 コマンド、フラグ、その値、終了コード(0 は注記だけ、1 は指摘あり、2 は引数の誤りか読めないファイル)。コマンドやフラグが増えることはあります。
  6. 診断コード。 コードの意味は変えません。使わなくなったコードは、廃止したと書いて台帳に残し、その番号を別のものに使い回しません。新しいコードが増えることはあります。新しい警告が増えても、検査を通っていた規則は通ったままです(規則に書いた鍵を言う W901 はこうして足したもので、ritsu のどの言語でも同じ意味です)。
  7. 機械が読む形式。 --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/ の下のすべて。