メインコンテンツまでスキップ

約束の範囲 — check が緑であることの意味

npx tsx src/cli.ts check examples/two-rooms.muro
✔ Consistent — 3 spaces / 3 boundaries
  Structural consistency only — architectural validity is what koyu validate says, separately

この一行が何を約束し、何を約束しないか。それがこの頁である。

緑の定義

構造層と解釈層について、宣言された不変量が成り立つ。運搬層については何も言わない。建築としての妥当性については何も言わない。

これは判定ではなく読解の一部であって、壊れた JSON を JSON パーサが弾くのと同じ層にある。

三つの領域

koyu は三つの領域からなる。求められる品質が違うので、分けてある。

領域何を持つか大きさ品質
core言語・意味論・合成・同一性・導出・構造整合の診断・問い・正準 JSON小さいきれいでなければならない凍る
検証建築的な判定 — 15 の規則大きくなる汚くてよい凍らない
表現・ビルドSVG 生成と外部のビュアー大きくなる汚くてよい凍らない

依存は一方向である。検証も表現も core に依存し、core はどちらにも依存しない。core は自分だけで完結して動く。この一方向は文ではなくテストが機械的に守る。

分けないと二つのことが同時に起きる — 汚さが core に染み出して凍り、core の慎重さが検証と表現の成長を止める。分けることそのものが、検証と表現が汚くてよい条件である。凍らない領域の汚れはいつでも書き直せるので安い。凍る領域の汚れは永久に残る。

型からして別である。core が返すのは Diagnostic { code, severity }、検証が返すのは Finding { rule, level } — 綴りも型も混ざらない。判定を足しても言語の版は動かない。

保証するもの

保証診断
パスと同一性の一意性UID01–04 / ZON02 / 合成時のパス重複エラー
参照先の存在REF01 / アセット未定義 / polygon の対応ゾーン(SIT04)
レベルの定義LVL01 / VRT02
区画の重なり(平面)GEO01 / GEO02
区画の重なり(断面)HGT01 / HGT02
合成の解決が定まること合成エラー
形を作るのに必要な情報の充足SUF01–04
関係の健全性BND01–06 / VRT01–06
導出の一意性(開口・seg・線・柱・縦動線の形)OPN01–08 / SEG01–08 / LIN01–03 / COL01–02 / RUN01–05
解釈される属性の値域ATT01–03 / DAY01
与件の健全性SIT01 / SIT02

断面の重なりが core にあるのは、それが平面の重なりの断面版だからである。下階の天井と上階の床が同じ z を占める状態は、二つの空間の領域が重なる状態と同じ種類の矛盾であり、そこからは一意な形が作れない。「階高・軒高・斜線」のような建築的な高さの判断は保証しない — それは検証の面である。

保証しないもの

採光・面積率・容積率・外皮の連続・階段の登りやすさ・扉の設置可能性・避難・接道 — その他あらゆる建築的な妥当性。そして運搬層の属性の意味

これらは存在しないのではなく、別の面にあるkoyu validate が持つ。

npx tsx src/cli.ts validate examples/two-rooms.muro
✔ Nothing caught by validation (this is a judgement, not a guarantee about the composition)

出力自身がそう名乗る。

緑を根拠に「動く」と主張しない

check が緑でも建物が使えるとは限らない。

接する空間の既定は壁なので、扉を一枚も宣言しない二階建ては緑のまま完全に密封される。外皮も自動では生えない — 領域を持たない空間(外部)との境界は導出されないので、外への boundary の書き忘れは黙って壁の不在になる。

動線は koyu doors が、判定は koyu validate が別に答える。

問いは合否を言わない

集計とグラフの問いは core が持つ。ただし合否を言わない。

問いcore が返すもの検証が言うこと
採光床面積と有効窓面積1/7 を満たすか(daylight.ratio)
敷地敷地面積・接道長・建築面積・延べ面積・その商2m の接道(site.frontage)・はみ出し(site.escape)
縦動線段数・蹴上げ・踏面・勾配窮屈さ(stair.proportion)・勾配(run.slope)
外皮何にも面していない外周の線分それが穴か(envelope.gap)
動線最少扉数の経路と通行可能性外部へ出られるか(access.*)
柱と開口通り芯から立つ柱と線分上の開口重なっているか(column.blocksdoor)

閾値は建築の側にある。1/7 も 2m も 240mm も、原本の構成が満たすべき不変量ではない。数を返すところまでが core で、数に線を引くのが検証である。

属性の三層

core の態度
構造層パス・型・区画・レベル・関係の相手・kind必ず見る。壊れていれば読まない
解釈層h w at daylight road site style台帳が値域を定義し、見る
運搬層acme.sensor bems.temp survey.measured見ない。名前空間つきで開いている

運搬層は名前空間(ドット区切り)を持つ。名前空間を持たない未知のキーはエラー(ATT03)である — heigh:2400 のような一字違いが黙って効かないことを防ぐためで、これが「見ていないこと」と「見て問題がないこと」を区別できる唯一の形である。

宣言が無ければ、見ていないことと見て問題がないことが区別できない。その状態の「異常なし」は何も意味しない。持てるが判定しないは正当な状態であり、それを明示することが自由の条件である。

隣り合う頁