日本語 · English(未訳)

境界チェックリスト(2026-09-29〜30・三巡)——敵対的レビューの代替として当方が機械的に回した実測録

目的: レッドチーム監査(80 系の非公開記録・追補 20)の教訓「witness の網に資源・入出力の境界が無かった」を受け、境界値を列挙して 参照実装 1.0.5(非公開の正本・追補 22 準備済み)に流し、統治外エラー(RangeError/TypeError/NaN)・タイムアウト・黙って通る形を探した。 判定は当方の実測のみ(外部 AI の判定は使わない)。

方法: ケースごとに子プロセス(タイムアウト 20 秒)で評価。分類=OK(値が出た)/ERR(KairosError・SupplyError・LexError・ParseError= 統治されたエラー)/UNGOV(それ以外の例外)/TIMEOUT/CLI は終了コード。再現=当方の作業ディレクトリのスクリプト(cases.mjs・run.mjs・ one.ts・probe2.ts・probe3.ts)。ケース数 135(本体 114・CLI 21)。

集計: ERR 42・OK 75・UNGOV 1・TIMEOUT 1・EXIT1 15・EXIT2 1

結果の読み

修正した綻び(1.0.5 に同乗)

黙って通る形(設計者裁定「全部」=10 件とも 1.0.5 で処置・F117〜F126・witness は impl/test/boundary-checklist.test.ts)

  1. 評価範囲の逆順(to < from)——run() も CLI も黙って 0 点(CLI は「# 0 点」exit 0)。→ 使い方エラー「評価範囲が逆順」(from = to の空範囲は正当のまま)。
  2. tz: ""——空文字列が「未宣言」と同じ扱いになり黙って機械 tz に落ちる(memberStr(...) || rt.tzName)。→ 危険メンバーの空値は静的エラー。
  3. BOM 付きファイル——字句エラー「不明な文字」。Windows のメモ帳が付ける=Windows 導線の実害。→ 先頭の BOM を読み飛ばす(CRLF は問題なし)。
  4. nth(0)・nth(-1)・nth(1.5)——黙って 0 点。仕様は「1 起点」。→ stride/take と同規約「nth: n は 1 以上の整数」(nth(32) の空は正当のまま)。
  5. 年 5 桁 10000-01-01——字句が 4 桁で切って別のエラー(「labels:/covering: は…」)に誤誘導。→ 字句で「年は 4 桁」。あわせて 0000 は 受理される(ISO 8601 の year 0)=Limits 節の「0001–9999」は「0000–9999」に訂正が要る。
  6. 同一ブロック内の前文メンバー二重宣言(wkst: Mon; wkst: Sun)——後勝ちで黙る。→ 静的エラー。
  7. premise の同名再定義——後勝ちで黙る(仕様に規定なし)。→ 静的エラー+spec 明文(裁定)。
  8. 異型の等値比較("a" == 1・dayNo(d) == "1")——黙って偽(仕様に規定なし)。→ 型エラーにするか「異型は偽」を明文するか(裁定)。
  9. 0 除算・mod 0——黙って偽(NaN)。→ 評価時エラー。
  10. 空ファイル——本体式が無いのに exit 0・0 行。→ 使い方エラー「本体式が無い」(コメントだけのファイルは # 以外が字句エラー=統治済み)。

処置の対応=1. F117 / 2. F118 / 3. F119 / 4. F120 / 5. F121(Limits 節も 0000 に訂正) / 6. F122 / 7. F123(spec §3.2 明文) /

  1. F124(spec §4.9 明文・型エラー側を採用) / 9. F125 / 10. F126(CLI 側で止める。run() は空集合を返す言語の評価のまま)。

軽微(文言・便宜。機会があれば)

  1. wkst: Xyz・granularity: nope は使用時に「未解決の名前: Xyz」(宣言時でなく使用時・原因を指さない)。値域は暦法依存なので宣言時検査は採らず、文言に「wkst: の値」を添える程度。
  2. calendar-system 無し/premise 無し/calendar-system: Nonsense は「未解決の名前: day」(原因を指さない)。→「calendar-system: の宣言が無い」を添える。
  3. CLI の使い方エラーの一部が Node の parseArgs の英語文言(-n -1「argument is ambiguous」・未知フラグ「Unknown option」)。→ 日本語文言で包む。
  4. サブコマンド省略でフラグが先頭(kairos --from … file)は使い方全文で exit 1(旧形式はファイル先頭のみ)。
  5. takeLast の空入力に「実体化下限で切れ——n=3 個中 0 個」の horizon-clip 警告(誤診断)。→ 空入力なら警告しない。
  6. strideBy(-1s) は「数値ではない: width」(誘導なし)。→「幅は正の量」に統一。
  7. supply の asof の形式が検査されない("yesterday" が通る)。→ 契約違反に追加。

記録のみ(綻びではない)

ケース一覧(自動生成)

数

集合

時間

前文

CLI

再測(probe2・probe3)

二巡目(2026-09-30)——一巡目で覆っていなかった層

設計者「見落としがないか不安」を受け、premise 層の生成語(grid/span/split/cycle/phase/label)・派生(rephase/rebase)・segmentBy・射影と述語・ at・external の kind と labels・stdlib(Fiscal/ISOWeek)・next 経路・CLI の --tz/窓・字句と構造(入れ子・長い連鎖・全角空白・ タブ・継続行・文字列)を 115 件。集計(修正前): TIMEOUT 3・ERR 53・OK 49・UNGOV 6・EXIT1 3・EXIT2 1。

修正した綻び(1.0.5 に同乗・witness は boundary-checklist.test.ts の二巡目 describe)

記録のみ(資源・軽微)

ケース一覧(自動生成・修正前の分類)

生成語

派生

区間

射影

at

external

stdlib

字句

CLI

三巡目(2026-09-30)——Kyureki(供給つき)・Playground 経路・--json の形・供給の巨大入力・細粒度・軽微(文言)

二巡目の引き継ぎに挙げた 5 層を回した。対象は修正前の 1.0.5 準備版(二巡目の処置後・714 テスト)。

方法と件数

層 道具 件数 見るもの
Kyureki(テーブル版 27・供給版 19)・供給契約 39・細粒度 17・CLI 経由の供給 35 cases3.mjs+run.mjs 137 分類(OK/ERR/UNGOV/TIMEOUT/終了コード)と値
Playground 経路(評価器) ENGINE=playground/js/index.js+run.mjs 一巡目・二巡目の本体 215+三巡目の本体 102 impl との差(分類・点数・先頭と末尾・文言・警告)
Playground 経路(UI 層) pg-ui.mjs(DOM の代役で core.js を駆動) 64 項目 プリセット日英 10 本・入力の境界・URL 固定と復元
--json の形 json-invariants.mjs(CLI を子プロセスで・パイプ越し) 30 本 CliReport の不変条件(下記)
再測 probe5.ts・probe6.ts — 狭い窓・日付マーカー・covering の巨大年と区間数・tz の違い・最終窓

集計(三巡目の 137 件・修正前): OK 58・ERR 49・UNGOV 5・TIMEOUT 1・EXIT1 23・EXIT2 1。 修正後: OK 56・ERR 58・EXIT1 22・EXIT2 1(UNGOV・TIMEOUT 0)。Playground 評価器との差は 0 件(一巡目・二巡目の本体 215 件=修正前/ 三巡目の本体 102 件=修正後)。 --json の不変条件は 30 本で違反 0 件(修正前の違反は F137/F139 の 1 本だけ)。

修正した綻び(1.0.5 に同乗・witness は boundary-checklist.test.ts の三巡目 describe・変異試験 26 本とも赤)

統治外エラー

偽エラー(正しい定義が、評価範囲の取り方で落ちる)

黙って通る形

文言(軽微 7 のうち 6 件と、今回の 3 件)

裁定待ち(表面・意味論の判断が要るもの。処置していない)

  1. 最終窓の last——覆域の端で確定する最終窓(ADR-37)に last を掛けると、覆域の最終日が「月末」として出る (旧暦の例: lunarMonth |> last が 2027-12-31。実際の旧十二月は 2028-01-26 まで続く)。註釈は 2028-01-01 から なので、その点自体には付かない。窓の所属(12/28〜31 は旧十二月)は正しいが、窓の終端は未確定——last・窓幅・ shift(unit: 窓) が終端を読む。
  2. 秒未満の点の表示形——表示形は YYYY-MM-DD[Thh:mm[:ss]] で ms を印字しない。0.5 秒刻みや秒未満を持つ供給の instants は同じ表示形が続く(points は一意)。人間表示では区別できない。
  3. DST の重複時の表示形——オフセットを印字しないので、秋の切替日は同じ壁時計が 2 回出て表示形が逆行する (NY 2026-11-01 の 01:30 → 01:00)。--json は points で区別できる。
  4. results[].source が常に空文字列——CliReport では必須の文字列(JSON Schema を公開するなら必須項目になる)。式の字面を 入れるか、項目の意味を定めるか(Schema を公開する前に決める)。
  5. --json のエラー時は JSON を返さない——stdout は空・stderr に文言・終了 1。機械の消費側(MCP)は stderr を読む ことになる(機械向けの入口を設計するときの材料)。
  6. 供給の asof の形式(軽微 17)——"yesterday" も通る。日付に限るかは供給側の実態次第。
  7. covering の表示形の長さ——区間の数に比例する(5 万区間で註釈 1 行が約 1.2 MB)。実用の覆域は数区間。

記録のみ(綻びではない)

ケース一覧(自動生成。変わったものは「修正前 → 修正後」)

Kyureki

Kyureki供給

供給契約

細粒度

CLI