凍る面 — 何を壊さないか
1.0 は機能の完成ではない。壊さないと約束する面の確定である。
三つの版
版は互いに独立に数えられる三本ある。混ぜると、どちらの約束が破られたのか言えなくなる。
| 版 | 何に付くか | 現在 |
|---|---|---|
| muro の版 | 言語と意味論と合成の規則。「このように書かれたファイルは、この意味であり続ける」 | 1.0 |
| koyu の版 | 実装。「この実装の面を壊さない」。どの muro を実装するかを宣言する | 0.16.0 |
| 正準 JSON の形式版 | 綴り。キーの集合・並び・照合順・正規化・数の表記 | koyu-canonical/1.0 |
.muro のファイルが名乗るのは言語の版だけである。処理系の出来を名乗るのではない。
koyu 1.0
形式版が別に要るのは、同じ意味論を別のキーで綴り直すことがありうるからである。境界の向きを保存する a キーの追加は、言語を一語も変えずに綴りを変えた。逆に、言語版が上がっても綴りが変わらないことはある。
二本は同時に到達しなくてよい
現に muro は 1.0 に到達し、koyu は 0.x のままである。
これは遅れではなく、二つが別の約束だからである。muro の 1.0 は「この版で読めたものは、以後も同じ意味で読める」を言い、koyu の 1.0 は「この実装の面を壊さない」を言う。言語は確定し、実装はまだ何も凍結を約束していない — 前者だけが先に確定できるし、実際に確定した。
外部のビュアーは独立に版を持ち、従う muro の版を宣言する。検証の面は版を持たず、追加的に増える。
「意味保存」の定義
言語の版を上げるかどうかは、変更が意味保存であるかで決まる。この語の意味は固定されている。
意味保存とは、導出物 — 正準 JSON・グラフ・集計・SVG — が不変であることを指し、診断の増減は含まない。
だから検査を足しても言語の版は動かない。曖昧でない原本の導出物が 1 バイトも変わらないなら、その変更は意味保存の内側にある。逆に、同じ綴りが別の建物を意味するようになる変更は、必ず版を上げる。
旧版の宣言は意味が保たれる場合だけ受理される。同じ文字列が別の建物を意味してしまう組み合わせは VER01–04 が error で止め、二つの選択肢(意味を明示的に書き足す / 版を上げる)を示す。
凍結する八つの面
| 面 | 約束の内容 |
|---|---|
| muro 1.0 の文法と意味論 | この版で読めたものは、以後も同じ意味で読める |
| 合成の規則 | 層の強度順序・単一値の解決・集合の編集・出所。同じ入力からは常に同じ結果が出る |
| 同一性 | uid が同じなら同じものである。パスと名の規則 |
| 属性の三層と名前空間 | 運搬層は見ない、という約束を含む |
| 機械形式 | 形式版を名乗る。同じ入力からは同じバイト列が出る — 照合順と正規化が定まっている。合成の結果を持ち、形を持たない |
| 導出規則 | 明文であり、参照実装が API として提供される |
| 構造整合の診断 | コードと severity。緑の意味が約束の範囲の定義と一致する |
| 公開 API と CLI | 解析・合成・正準化・問い・導出。コマンド(14 個)、引数、終了コード |
診断について一つ念を押す。severity はコードの不変属性である。同じコードが場合によって error になったり warning になったりはしない。重さを変えるときは新しいコードを切り、古い綴りは欠番になる。
凍結の対象でないもの
存在してよいが、凍結対象でないことが明示されている。
- 形の生成と描画 —
svgPlan/svgAxo、CLI のplanaxo、MCP のplan_svg。CLI の面(サブコマンド名・引数・終了コード)は凍るが、SVG の中身は凍らない - 建築的な判定 — 15 の規則と
koyu validateの出力。増える面である - MCP のツール群(12 個)— 追加的に増える面として扱う
- 外部形式との往復と取り込み
- 人のための面 — エディタ支援・オーサリング
- 運搬層の属性の意味
変わってはならないのは SVG ではなく Form である
描画は Form を描くだけである。だから SVG の見た目はいつ変わってもよい。色も線幅も線種も、記号の作図慣習も、紙面の余白も、凍る面には無い。
凍るのは Form の側である — 座標・厚み・z 範囲・向き・対象の同一性・平面の分類。同じ構成から違う Form が出ることは欠陥であり、同じ Form から違う SVG が出ることは欠陥ではない。
「描くだけ」であることは機械が縛る。描画側が形を組み立てる部品を一つも引いていないこと、導出定数が描画側に綴られていないこと、平面に出た黒帯が Form の「切られた区間」そのものであることを、テストが検査する。