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

症状から診断を引く

人向けの check の出力に診断コードは出ない。出るのは ファイル:行: 本文 だけである。手元にあるのが本文か、あるいは「なんとなくおかしい」という感触だけのとき、この頁から引く。

コードを持っているなら、ここではなく診断コード索引が速い。

コードを手に入れる

--json を付けると同じ診断がコード付きで出る。

koyu check bad.muro --json
[
 {
  "code": "SUF01",
  "severity": "error",
  "message": "The ceiling height of /L1/a cannot be determined (neither the space's h: nor level L1's h: is there)",
  "line": 4,
  "file": "<absolute path>/noh.muro",
  "path": [
   "/L1/a"
  ]
 }
]

message本文だけで、位置接頭辞を含まない。位置は linefile が別に持つ。読み方の詳しい手順は診断を読むにある。

severity は二つしかない。error は構成が成立していない (終了コード 1)、warning は疑わしいが成立している (終了コード 0、--strict なら 1)。severity はコードの不変属性で、場合によって変わらない。

1. check がエラーで止まる

本文は完全一致で検索できる。以下は本文の一部である。

見えているもの原因直し方コード
Undefined grid line name: X1grid が無い、または通り参照を使う行よりにあるgrid Xgrid Y を、使う最初の行より前に書く → よくある詰まり合成エラー
A region is given as two ranges, X?..X? and Y?..Y?ほとんどは型 (第2位置引数) の書き忘れ。領域の一つ目が型として読まれているspace <パス> <型> X?..X? Y?..Y? の順に書く → よくある詰まり合成エラー
has a region, but its level cannot be determinedlevel 行が無い。パスに /L1/ と書いてもレベルの宣言にはならないlevel L1 0 h:2400 slab:150 を、使う行より前に書くSUF02
The ceiling height of … cannot be determined空間の h: もレベルの h: も無いどちらかに h: を書くSUF01
The spaces do not touch, so no boundary can be derived角だけで触れている。接触には長さのある共有辺が要る矩形を重ねて辺を共有させるか、その boundary 行を消す → よくある詰まりBND04
There is more than one boundary segment; pick an edge with edge:N/E/S/W外部との境界が室の外周の複数の辺に割れている開口に edge: で辺を選ぶ。N=+Y / S=−Y / E=+X / W=−XOPN05 / segSEG05
No boundary segment can hold the doorその空間対に境界線分が一本も無い相手の空間と本当に接しているかを koyu graph で確かめるOPN04
Space regions overlap:領域を持つ空間の下に、領域を持つ子空間を置いている親を zone にする → 数える分節と数えない分節GEO02
Regions within … overlap:一つの空間が + で合併した矩形同士が重なっている重ならないように割るGEO01
References an undefined space:パスの綴り違い、またはその空間を宣言した層を import していないパスを直すか import を足すREF01
Duplicate boundary:同じ空間対に境界が二本ある一本に統合するか、両方に edge: を付けて別の辺に限定するBND02
A wall boundary cannot be written to a space on a different level階を跨ぐ関係を壁として書いているtype:stair / type:shaft / type:void を使うBND03
Openings overlap同じ境界線分の上で扉と窓が近すぎるat: をずらすOPN02
The door width … exceeds the boundary segment length開口が壁より長い幅を縮めるか、壁を伸ばすOPN06
is written as a positive number:解釈される属性の値が数値として読めない (h:24OO のように英字が混じっている)綴りを直すATT01
A boundary type is wall / open / stair / shaft / void:語彙の決まった属性に台帳外の値を書いた台帳の語に直すATT02
which is not in the ledger (check the spelling, or add a namespace…)台帳に無い属性キーを、名前空間なしで書いた。nmae: は黙って通らない綴りを直すか、運ぶだけの値なら acme.note: のように名前空間を付けるATT03
daylight is either 1 … or 0daylight: に 0/1 以外を書いたdaylight:1daylight:0 にするDAY01
Duplicate uid:同じ uid が二つの対象に付いている片方を new_uids が発行した新しい値にする → 同一性UID03
A koyu 0.5 file uses a 1.0 word:古い版を宣言したファイルに新しい語 (over / drop / 集合編集) を書いたkoyu 1.0 に上げるVER04
One layer holds two opinions about … 同じ層が同じ属性に二度意見を持っている上書きは別の層から行う → 実測を計画に重ねる合成エラー
No such target for over:over の対象が合成されていない綴りを直すか、定義した層より後ろに置く合成エラー
Duplicate space path:二つの層が同じパスを定義している片方を over に変えるか、パスを分ける合成エラー

2. check は警告だけ出す

--strict を付けない限り終了コードは 0 である。放っておくと形が生成されないものが混じっている。

見えているもの意味どうするかコード
has no slab:, so not one floor is generated on this storeyそのレベルの床が一枚も出ないlevel L1 0 h:2400 slab:150 のように slab: を書くSUF03
There are no spaces beneath zone …ゾーンの配下が空。パス接頭辞が噛み合っていないゾーンのパスか空間のパスを直すZON01
A space shares its path with a zone同じパスに空間とゾーンの両方があるどちらか一方にするZON02
A door on a vertical boundary is not interpreted階段・シャフト・吹抜けの境界に開口を書いた。通行には効かない開口を消す。通行は垂直境界そのものが持つVRT05
A door on an open boundary has no effect on passagetype:open は既に通れる開口を消すか、境界を wall に戻すOPN03
cuts nothing描いた線が既定の隣接線と同じか、割付の外にある線を引き直すか、消すLIN03
The area spills outside the region ofarea が親の空間からはみ出している範囲を縮める → 数える分節と数えない分節SEG02
柱の宣言に対して立つ柱が 0 本通り芯の交点に床が無い、または半屋外で上に床が無い宣言する通りか、床のある範囲を見直すCOL01

3. check は緑なのに正しくない

ここには診断が無い。check が言うのは「書かれたものがデータとして矛盾していない」までで、建物として使えるかは言わない。

症状原因確かめる道具
室から外へ出られない接する空間の既定は扉のない壁である。扉は自動では付かないkoyu doors / koyu graphよくある詰まり
外皮が一枚も無い領域を持たない空間 (/out) との組には既定が導出されないkoyu validateenvelope.gapよくある詰まり
空のファイルが緑になる何も書かれていない構成は成立しているkoyu stats / koyu graph で中身を見る
面積表に出したい室が出ないarea は数えない分節である。面積にも室数にも現れない数える分節と数えない分節
check の境界数と正準 JSON の boundaries が合わないcheck は導出後の本数、正準 JSON は書かれた構成だけ食い違いではない → よくある詰まり
属性が効いていない台帳に無いキーはエラーになるが、値の綴り違いは運ばれるkoyu layers --attrs で出所を引く
型を変えたのに採光の判定が変わらない採光の対象は型ではなく daylight:1 が決めるkoyu light

4. check は何も言わない — validate が言う

建築の側の判断は koyu validate が別に返す。check の診断コードではなく、章.規則 の綴りを持つ。

症状規則
外周に何も面していない部分があるenvelope.gap
窓が床面積の 1/7 に足りないdaylight.ratio
窓の h: が無くて窓面積を数え切れていないdaylight.unknown
階段の踏面が窮屈・蹴上と踏面の関係が常用域の外stair.proportion
傾斜路の勾配が宣言より急run.slope
縦動線の形はあるが上下が繋がっていないrun.disconnected
室から外部へ辿り着けないaccess.unreachable
扉が吹抜けにしか開いていないaccess.voidonly
柱が扉と重なっているcolumn.blocksdoor
建物が敷地形状からはみ出すsite.escape
敷地面積の宣言と導出が食い違うsite.area
接道長が足りないsite.frontage

規則の全部は判定 — koyu validateにある。

5. コマンドそのものが落ちる

見えているもの終了コード原因
Undeclared level: l2 (declared: L1 L2 R)2-l のレベル名違い。大文字小文字を区別する。koyu levels で確かめる
Usage: koyu … の使い方行2引数が足りない。--help も同じ経路を通る
Error: No level is defined (スタックトレース付き)1level 行が一つも無い。check は緑でも描画は落ちる
Error: There is no space with a region on level R (スタックトレース付き)1そのレベルに領域を持つ空間が一つも無い
Cannot reach /out from /L1/nope1到達不能。起点か終点のパスが存在しないときも同じ文言である。koyu graph で綴りを確かめる

呼び方の問題は終了コード 2、構成の問題は 1 である。この二つを混ぜないので、CI で区別して扱える。

関連