日本語 · English(未訳)

1.1 RC の草稿(2026-10-18・判断前)。観点の異なる 3 案(最小の語彙追加/読みやすさと教材/実装と波及)を独立に起こし、審査役が採点して統合した。2026-10-19 に推奨案で確定し、2026-10-21 に ADR-54・ADR-55 として起こした。本書は経過の記録(判断前の本文のまま)。実測の根拠は 1.0.10〜1.0.11 準備版の参照実装。

ADR-5x(1.1 RC 草稿): 時点どうしの順序比較と標準糖衣 since/before——点集合を日時で切り出す

判断: 値層の順序比較 < <= > >= の定義域を「数値どうし」から「数値どうし・時点どうし」へ広げ、stdlib(Gregorian 公開語・at の隣)に糖衣 2 語を置く。

since(p)  = s => s |> filter(t => t >= p)     # p 以後(含む)  = s ∩ [p, ∞)
before(p) = s => s |> filter(t => t <  p)     # p より前(含まず)= s ∩ (−∞, p)

(発端=90-open 3-8・需要 2 例〈11 §(n)・ブログ第 35 弾〉。受け皿 epochOrdinal 形は書けるが読みづらく、単位の問いを生んでいた)。

  1. 1.0 は不変=追加拡張。1.0 で合法だった式の意味は一つも変わらない。時点どうしの順序比較は 1.0 では評価エラー(「数値ではない: point」)で、本 ADR はその形を定義するだけ(静的エラーだった形の合法化=追加拡張。先例 ADR-45/RC5 追補 7・ADR-48)。文法・字句・既存の語は不変。糖衣は展開で消える(ADR-23/§4.8)。
  2. 順序は chronos 上の瞬間の全順序。等値 == の時点規則(§4.9)と同じ台。tz・暦法・粒度に依らない(リテラルは在圏 tz で時点に解決=ADR-33)。単位は持たない——単位の問いは epochOrdinal の床比較に由来する人工物。補題: 目盛り上のリテラル p では epochOrdinal(u,t) >= epochOrdinal(u,p) ⟺ t >= p(現行正準と外延同値)。食い違うのは目盛り外(14:30=床形は 14:00 を含む・瞬間形は 15:00 から)だけ。
  3. 型違いはエラー。時点と数値・ラベル・単独時刻 Thh:mm・ストリームは順序比較できない——1.0 追補 22 の等値エラーと同じ型名で診断し、単独時刻は ADR-51 の誘導へ。単独時刻どうしの順序は定義しない(3-11 と同時に判断)。
  4. 境界は半開 [since, before)=評価範囲 [from, to)・isOpen・窓と同じ規約。since(2026-10-26) は在圏 tz の市民日の開始瞬間。日粒度の列に時刻付きリテラルを渡すと日の点は 00:00 なので everyDay |> before(2026-11-04T17:00) は 11-04 を含む——当日の扱いは日付を 1 日ずらす(評価範囲と同じ作法)。
  5. 展開は filter に固定。糖衣は展開先の意味を継承する(ADR-51 判断 5)——整列・窓を保存(within(month) |> since(p) |> first が成立)、輸送行は filter 行(新しい範囲外を生まない)、整列「なし」の和にも掛かる。stride(1, from: p) 展開は採らない(註釈が評価域の末尾まで膨張・終点の双対が無い)。
  6. ADR-34 判断 4(点±幅算術を導入しない)は不変。順序は算術ではない——新しい点を作らず隣接窓参照の抜け道にならず、幅規約も tz 依存算術も値層へ入らない。ADR-34 へ改訂節で相互参照。
  7. 名は since/before(英語の含意が境界と一致・named-arg キー・core 語・公開語と綴りが重ならない)。「今」は式に埋めない——日単位の切り出しは評価範囲の分離が第一・時刻の切り出しだけ since/before・日時は引数や呼ぶ側で注入(ADR-52 判断 2 と同じ据え方)。

背景(1.0.10 の実走): t >= 2026-10-26T14:00 はエラー・t == … は通る・epochOrdinal 形は 51 点・利用側糖衣 stride(1, from:) も 51 点。差 \ で作る before は整列「なし」の和で ADR-36 の静的エラー、窓付き入力では窓を落とし後段 last が I4 エラー。stride 形は註釈が 09-25..10-05 へ膨張(filter 形は ..10-01・点は同一)。終点の双対は 1.0 核だけでは書けない——核の順序比較が唯一の言語側の判断点。

却下した案:

帰結:

検証の案: (a) 第 35 弾の epochOrdinal 形と糖衣形の 51 点が toEqual(変異=境界反転で赤) (b) before の < を <= に変異→17:00 が出て赤 (c) 14:30 錨で 50 点・先頭 15:00(変異=床比較で 51 点) (d) eval 09-25..10-05 で註釈がちょうど ..10-01(変異=stride 展開で ..10-05) (e) 整列「なし」の和に before が掛かる(変異=\ 展開で ADR-36 エラー) (f) within(month) |> since(p) |> first=[10-15, 11-01] (g) t >= 5・since(T14:00)・weekday(d) >= Mon が誘導つきエラー (h) 既存の数値比較 doctest が全数緑。

決める論点(審査役の一覧・推奨つき)と実装の順序

実装の順序

    1. 前提と枝: 1.0.11(10/19)の公開後に枝 since-before(1.1 RC)を切る。決定 1(受理拡大)と決定 7(1.1 の記録書式)を先に裁定。名(決定 2)は stdlib 2 行の綴りだけなので後でよい。供給側コーパスの since(/before((または from()の掃引を 1 回。
    1. ADR: 草稿を design/20-adr/adr-54-point-order-since-before.md に本文化(判断 1〜7・背景の実走・却下・帰結・検証)。ADR-34 に改訂節(順序は算術の射程外・判断 4 は不変)・ADR-52 に相互参照(until: 点包含 vs before 非包含)。20-adr/README のチェックリスト 4 面を確認(EBNF 不変・輸送表 不変〈展開先 filter〉・整列表 不変・入口の否定リスト)。INDEX.md の ADR 一覧に 1 行・「ADR-01〜54」の範囲表記(doc-consistency.test.ts:53)。
    1. spec: 20-premise-layer.md §3.5 比較の行(:106)に型の注記(数値どうし・時点どうし・混在はエラー)。30-body-layer.md §4.9「等値の型」(:380)を「等値・順序の型」に・§4.8 に標準糖衣例 1 行・§4.7「期間限定は評価範囲の分離が正道」に since/before の一文。40-grammar.md §5.4 に確定行(不採: until〈点包含と反転〉・from/to〈2 役〉・after〈厳密に後〉)。50-glossary.md §6.5 に at 行(:136)と同型の行。en/spec 4 ファイルの鏡+tools/refresh-source-sha.mjs。
    1. impl: eval.ts evalBin の < <= > >=(:1905-1908)を数値どうし/時点どうしの補助に差し替え・混在は typeName(:1924-1931)の日本語名で「順序比較の両辺の型が異なる…」・単独時刻は point() と同じ ADR-51 誘導文。impl/stdlib/gregorian.kairos の at 行(:30)の隣に since/before の 2 行。typecheck と TZ=UTC npx vitest run を impl/ から。
    1. witness: impl/test/since-before.test.ts に (a)〜(h)=境界 2・外延一致(第 35 弾の 51 点 toEqual)・目盛り外 14:30(50 点・先頭 15:00)・輸送行(註釈 09-25..10-01)・整列不問(和に before)・窓の保存([10-15, 11-01])・型規則 3 形・日粒度 11-04 を含む・数値比較の回帰。変異試験 3 系統(退行版へ戻す・修正を落とす・文言を変える)で赤を実測してから数える。doc-consistency.test.ts:441-449 の stdlib .kairos と .md §1 の乖離検査を糖衣行(at/since/before)へ広げる。テスト数の入口 6 箇所(check-test-count.mjs)。
    1. reference 日英: since.md・before.md(doctest 各 2 本=日粒度・時刻付き。落とし穴=日粒度の列に時刻付きリテラル・「今」を式に埋めない・単独時刻はエラー・top-level 同名束縛は影になる)・README.md:44「糖衣(stdlib)」行に追加・epochOrdinal.md(序数比較は床の比較・時点の切り出しは since/before)・takeLast.md(until: は点包含・半開で切るなら before)・stride.md(stride(1, from:) を切り出しに使わない=輸送行が違う)・filter.md と at.md の関連。stdlib/gregorian.md §1(:38 付近)と §2 の表(:99 の at 行の隣)・en/stdlib 鏡。40-examples/11 §(n)(:359-374)を糖衣形に書き換え epochOrdinal 形は「単位を明示したいとき」に格下げ・§11.5(:436-440)に解消の追記。90-open 3-8(:236-247)と一覧の行を 91 へ移設(現役 27 → 26)。paralen 0・製品語 0・「設計者」の引用を書かない(上限検査)。
    1. Playground: tools/build-playground.mjs で再構築(doc-consistency.test.ts:124 の焼き込み指紋は stdlib 3 ファイルを含む)。例に「締め切りまでの残り営業時間」を 1 本(pg-link encode→decode→CLI 同等実走で確認)。
    1. MCP: kairos-lang-mcp の同梱 reference を再 bundle(新 2 ページ・絶対 URL 化の束に含める・語一覧の再生成を確認)・依存 kairos-lang を ^1.1.0・server.json・README 日英(登録簿の 1 行はそのまま)。
    1. CHANGELOG と入口: spec/CHANGELOG.md に「1.1」節(受理拡大=静的エラーだった形の合法化・既存の式の意味は不変・witness 本数・テスト数)。doc-consistency.test.ts:228 の正規表現と 4 入口の状態行(spec/README.md:6・README.ja.md:32・README.md・en/spec/README.md)を 1.1 用に。README 日英の「できないこと」と spec §1.2 比較表に「点と日時の比較が無い」が残っていないか(チェックリスト 4 面目)。llms.txt の正準例に 1 行。
    1. 版と公開: impl 1.1.0・mcp・server.json・winget manifest(tools/release/winget-manifest.mjs)・Windows exe は publish workflow のまま。runbook に 1.1 の手順(trusted publishing は 1.0.10 の教訓どおり)。検定(kairos-exam-project)は follow.mjs→verify→publish で 1.1 に追従し、L2-027 の派生問(since 1 段・2026-02-10..02-13 で 10 点)を追加候補に。Release 本文は日本語を先に。
    1. ブログ: 492(10/22 予約)はそのまま。1.1 公開後に「since/before で 1 行になった」の追補記事を図から起草(半開 [a, b) は初出で解説・在庫 2 本の定常の枠で)。