1.0 まで残っていること
1.0.0 は機能の完成ではない。壊さないと約束する面の確定である。したがってこの行程は「何を作るか」ではなく「何を凍らせられる状態にするか」で切ってある。
現在は koyu 0.16.0 / muro 1.0 である。
版は二本ある
言語の版と実装の版は切り離してある。
| 版 | いま | 意味 |
|---|---|---|
| 言語 (muro) | 1.0 | 原本の文法と意味論。koyu 1.0 と書く。ここは確定している |
| 実装 (npm パッケージ) | 0.16.0 | ライブラリ・CLI・MCP サーバー。0.x である間は何が変わっても破壊的変更ではない |
二本を分けたのは、言語が固まったあとも実装を動かし続けられるようにするためである。koyu 1.0 と書いたファイルは、実装が 0.16 でも 1.0 でも 2.0 でも同じ意味に読まれる。
原本の版を省略すると最新版として読まれる。受理される言語版は 0.1 0.2 0.3 0.4 0.5 1.0 の六つで、古い版で書かれたファイルは、その版の受理条件で検査される。
凍らせる八つの面
1.0.0 で「壊さない」と約束するのは、次の八つである。八つすべてが凍らせられる状態になった。
| 面 | 何を約束するか | 状態 |
|---|---|---|
| muro 1.0 の文法と意味論 | 原本の読み方が変わらないこと | ✅ 言語版 1.0 を切った。属性の名前空間と合成の規則が最後の破壊的変更だった |
| 合成の規則 | 層の重ね方 — 強度・衝突・冪等性・over / drop の解決 | ✅ 六つすべて実装済み |
| 同一性 | uid は空間とゾーンに閉じ、生成は乱数。開口と内包物は「含む対象 + 一意な名」で同定され、重複は診断が止める | ✅ |
| 属性の三層と名前空間 | 構造層 / 解釈層 / 運搬層の区別と、ドットを含むキーが運搬層になる規則 | ✅ 台帳が実装の唯一の出所 |
| 機械形式 | 正準JSON の綴り — 形式版・キーの照合順 (符号位置の昇順)・NFC 正規化 | ✅ |
| 導出規則 | 書かれた構成から一つに決まるもの (壁線分・面積・隣接・通行可能性) の定義 | ✅ 参照実装が立ち、一意性が機械の縛れる述語になった |
| 構造整合の診断 | 65のコードと、その severity がコードの不変属性であること | ✅ 判定を別の領域へ分け、緑の意味が定義と一致した |
| 公開 API と CLI | TypeScript の名前 (実行時59・型77) と、14のサブコマンドの契約 | ✅ 面を書き下し、実装との集合一致をテストが縛る |
残っている作業 — 通しで見ること
面が立ったことと、面を見たことは違う。テストが緑であることは、テストが縛っている範囲について言えるだけである。1.0.0 は引き返せないので、縛っていない範囲を人が通しで見る。0.16.0 はそのための版である。
見るのは四つ。
| 面 | 何を見るか | なぜテストで足りないか |
|---|---|---|
| MCP | 12のツールを実際に stdio で叩き、入出力と失敗時の挙動を見る | 外へ出している面なのに、通しで動かした記録が無い |
| 文書 | この文書群が現在を語っているか。貼られた出力が実物か | 文の正しさは機械が読めない |
| 描画 | ブラウザで実際に描かれるもの — 平面・立体・テーマ・編集 | 形の一致は縛れるが、見た目は縛っていない (それが設計である) |
| 公開面 | npm pack に何が入るか、14のサブコマンドが実際に動くか | パッケージの中身と実行は、テストの外にある |
確認して直したものは 0.16.x で出し、通ったら 1.0.0 を切る。
直近で閉じたもの — 描かれた線が絡む四つの不整合
規則を書き下したことが、規則の破れを見せた。導出規則を全部書き出す過程で、同じ原本から二つの形が出る経路が四つ見つかり、形は正準形の関数であるという一つの原理に畳んで閉じた。
| # | 経路 | 直す前 → 直した後 |
|---|---|---|
| 1 | 外皮を切る線で、boundary の a/b を入れ替えると残す側が反転する | 16.00㎡ ↔ 14.00㎡ → 一致 |
| 2 | 線の端点の書き順が開口の at: の起点を決めるのに、正準JSON は書き順を捨てる | 正準JSON がバイト同一のまま扉 (750, 2500) ↔ (2250, 3500) → 一致 |
| 3 | line を持つ境界の宣言順で導出面積が変わる | 正準JSON がバイト同一のまま 27.00㎡ ↔ 22.50㎡ → 一致 |
| 4 | 診断が線の効きを計算し直すため母集団が食い違い、実際に切った線に「何も切っていない」が誤報される | 4.5㎡ を落とした線に LIN03 → 出ない |
テストは含意そのものを縛る — 正準形が等しいことを前提として確かめてから形の一致を主張するので、前提が崩れれば「この組は何も証明していない」と落ちる。
1.0 の後 — 伸ばす領域
コアはもう動かない。伸ばすのは判定と表現である。
- 判定 — 区画・避難距離・排煙・用途別の面積率。管轄が二つ目を持ったら章を割る。規則を一つ足すのに要るのは台帳の一行と文書の一節で、言語の版は動かない。
- 表現 — 寸法線・通り芯記号・建具の作図表現・縮尺・勾配屋根。図面の精度は凍結の対象ではない。
- 外部との接続 — RDF/BOT 出力、測地、IFC からの一方向の取り込み。コアの外に置く。
扱わないこと
- 原本における幾何 (例外は所与 — 敷地形状)
- 配置の仕組み (内包は座を与えない)
- 建築的な判定を原本の契約に含めること
- 実務解像度の追求 — カバー率は価値ではない
- 往復互換
- 曲面と自由形状
- オーサリングツール
何を約束し何を約束しないかの全体は約束の範囲にある。凍結の対象と対象外の切れ目は安定性、明示的に持たないものは持たないものが持つ。