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.0 は不変=追加拡張。1.0 で合法だった式の意味は一つも変わらない。時点どうしの順序比較は 1.0 では評価エラー(「数値ではない: point」)で、本 ADR はその形を定義するだけ(静的エラーだった形の合法化=追加拡張。先例 ADR-45/RC5 追補 7・ADR-48)。文法・字句・既存の語は不変。糖衣は展開で消える(ADR-23/§4.8)。
- 順序は chronos 上の瞬間の全順序。等値
==の時点規則(§4.9)と同じ台。tz・暦法・粒度に依らない(リテラルは在圏 tz で時点に解決=ADR-33)。単位は持たない——単位の問いはepochOrdinalの床比較に由来する人工物。補題: 目盛り上のリテラル p ではepochOrdinal(u,t) >= epochOrdinal(u,p) ⟺ t >= p(現行正準と外延同値)。食い違うのは目盛り外(14:30=床形は 14:00 を含む・瞬間形は 15:00 から)だけ。 - 型違いはエラー。時点と数値・ラベル・単独時刻
Thh:mm・ストリームは順序比較できない——1.0 追補 22 の等値エラーと同じ型名で診断し、単独時刻は ADR-51 の誘導へ。単独時刻どうしの順序は定義しない(3-11 と同時に判断)。 - 境界は半開 [since, before)=評価範囲
[from, to)・isOpen・窓と同じ規約。since(2026-10-26)は在圏 tz の市民日の開始瞬間。日粒度の列に時刻付きリテラルを渡すと日の点は 00:00 なのでeveryDay |> before(2026-11-04T17:00)は 11-04 を含む——当日の扱いは日付を 1 日ずらす(評価範囲と同じ作法)。 - 展開は filter に固定。糖衣は展開先の意味を継承する(ADR-51 判断 5)——整列・窓を保存(
within(month) |> since(p) |> firstが成立)、輸送行は filter 行(新しい範囲外を生まない)、整列「なし」の和にも掛かる。stride(1, from: p)展開は採らない(註釈が評価域の末尾まで膨張・終点の双対が無い)。 - ADR-34 判断 4(点±幅算術を導入しない)は不変。順序は算術ではない——新しい点を作らず隣接窓参照の抜け道にならず、幅規約も tz 依存算術も値層へ入らない。ADR-34 へ改訂節で相互参照。
- 名は
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 核だけでは書けない——核の順序比較が唯一の言語側の判断点。
却下した案:
epochOrdinal単位形(since(hour, p)級): 単位が情報を持たず目盛り外で床の罠。瞬間グリッドはchronos grid 1sが OOM。stride(1, from: p)展開: 註釈の膨張・双対なし。受理拡大を認めない場合の since 限定の退路として記録。- 差
\/coincidesで作る before: 整列なしで割れる・窓を落とす・無名テーブルの被覆行が出る。 - 名
until(takeLastの点包含と同語で境界が反転)・from/to(named-arg と 2 役・”to” は包含に読まれる)・after(厳密に後)・between(SQL の両端包含・片側が書けない)。 - core 語 2 つとして追加: 核の最小集合(ADR-23)を増やし輸送表・整列表の行が要る。糖衣で足りる。
帰結:
- spec: §3.5 比較の行・§4.9「等値・順序の型」・§4.8 標準糖衣例・§5.4 命名・glossary §6.5。EBNF・輸送表・整列表は不変。
- impl:
evalBin4 case(数値/時点の分岐+診断)・gregorian.kairos2 行・witness・Playground 再構築・mcp 同梱 reference。 - 文書: reference/since.md・before.md 日英・stdlib 日英・epochOrdinal/takeLast/stride の落とし穴・11 §(n)・90-open 3-8 → 91。
- 版: 言語が変わるので 1.1.0。CHANGELOG の節名と 4 入口の状態行の書式を先に決める。
検証の案: (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.1 の「追加拡張」と認めるか。選択肢: (a) 認める——1.0 で合法だった式の意味は不変・評価エラーだった形の合法化(先例 ADR-45=CHANGELOG.md:207「静的エラーだった形の合法化=追加拡張」・ADR-48)。(b) 認めない——since だけをstride(1, from: p)展開で入れ、before は見送り(1.0 核に終点の双対が無い=実走 R5/R7b で差展開は整列なしと窓付きで割れる)。(c) since/before を糖衣でなく core 語 2 つとして足す(新語=字義どおりの追加拡張だが、核の最小集合〈ADR-23〉を増やし輸送表・整列表の行が要る)。推奨: (a)。90-open 冒頭の定義「既存の式の意味は不変」を満たし、==が時点に定義済み(§4.9:380)なので順序への完成として説明が立つ。 -
【2】名。選択肢: (a) since/before——境界と英語の含意が一致・named-arg キー・core 語・公開語と重ならない(正本ツリーの .kairos/.md で 0 件)。(b) from/before——
from:と同義(≥)で学習が転移・CLI--fromと同じ向きだが、from(とfrom:の 2 役・stride(3, from: x) |> from(y)の字面。(c) since/until——英語の定型対だがtakeLast(n, until:)の点包含(ADR-52 判断 6・glossary §6.5:135)と同語で境界が反転=不採を勧める。推奨: (a)。意味論・実装は名に依存しない(stdlib 2 行の綴りだけ)ので、この決定は最後でよい。 -
【3】糖衣 2 語を受理拡大と同時に出すか、受理拡大だけ先行して様子を見るか。推奨: 同時。需要 2 例の動機は読みやすさ(
filter(t => isOpen(t) and t >= p and t < q)ではラムダが残る)。受理拡大だけ先行は語彙を増やさない最小解として成立するので、凍結を最優先するならこちら。 -
【4】置き場と「影」。選択肢: (a) Gregorian 公開語(
atと同じ・gregorian.kairos:30 の隣・新機構なし)。(b) 暦法非依存の言語水準の既定糖衣(新機構)。付随: lookupBinding(eval.ts:2091-2104)は premise → calendar-system → top の順なので、利用側 top-level のsince/before束縛は stdlib に黙って覆われる(atと同じ既存挙動)。手当て: (i) reference の落とし穴と Release 本文に明記(最小)。(ii) 「stdlib 公開語の top-level 再定義は静的エラー」の新規則(at・monthStart等にも遡る=1.0 で動いていたファイルが止まり得る)。推奨: (a)+(i)。供給側コーパスの掃引を 1 回挟む(正本ツリーは 0 件)。 -
【5】日粒度の列に時刻付きリテラルを渡したときの扱い(
everyDay |> before(2026-11-04T17:00)は 11-04 を含む=実走 R10)。選択肢: (a) 文書化のみ(日の点は 00:00・当日の扱いは日付を 1 日ずらす=評価範囲と同じ作法)。(b) 入力の粒度より細かいリテラルに警告。推奨: (a)。警告は粒度の静的知識を要し、整列「なし」の入力で判定できない。 -
【6】単独時刻どうしの順序(
T09:00 < T17:00)を定義するか。推奨: 定義しない——chronos 上の位置を持たず(ADR-51 判断 2)、点から時刻を取る射影(3-11)が無いので実用が立たない。3-11 と同時に判断。 -
【7】1.1 の記録の書式。CHANGELOG の見出しは doc-consistency.test.ts:228 の正規表現
^## (?:RC\d+|1\.0) 追補 (\d+)が前提で、spec/README.md:6・README.ja.md:32・README.md・en/spec/README.md の状態行も「1.0(追補 N まで反映)」の形。選択肢: (a) 「## 1.1(日付)——…」の節を新設し、状態行を「1.1(…)」へ・正規表現を 1.1 対応に広げる。(b) 「1.1 追補 1」から通し番号を続ける。推奨: (a) を 1.1 RC 枝で先に決めて検査を直す(最初の変更で一斉に赤になる面)。版は impl 1.1.0・mcp・server.json・winget・exe。 -
【8】1.0 文書への先行案内。選択肢: (a) 1.1 まで待つ(Playground・MCP・検定の追従が 1 回で済む)。(b) 90-open 3-8・11 §(n) に「利用側糖衣 2 行(stride 形 since)」を今案内する。推奨: (a)。stride 形は註釈が膨張し before が無いので、教えると 1.1 で書き換えが要る。
-
【9】ブログ第 35 弾(492・10/22 予約・epochOrdinal 形)。選択肢: (a) そのまま出す(1.0.10 の語彙で正しい)・1.1 公開後に「since/before で 1 行」の追補記事。(b) §4「14 時 30 分に聞いても 14 時台のコマは 1 つと数える」に『瞬間で切るなら錨をコマの頭に書く』を一言添えて
--update。推奨: (a)。§4 の文は epochOrdinal 形の挙動として正しいまま残る。 -
【10】reference の形。選択肢: (a) 1 語 1 ファイル(since.md・before.md)——mcp の語一覧がファイル名から作られる(案 3 の報告・bundle-docs.mjs:36・当方未確認)。(b) 対で 1 ページ。推奨: (a)。既存の全語がこの形。
実装の順序
-
- 前提と枝: 1.0.11(10/19)の公開後に枝
since-before(1.1 RC)を切る。決定 1(受理拡大)と決定 7(1.1 の記録書式)を先に裁定。名(決定 2)は stdlib 2 行の綴りだけなので後でよい。供給側コーパスのsince(/before((または from()の掃引を 1 回。
- 前提と枝: 1.0.11(10/19)の公開後に枝
-
- 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)。
-
- 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。
- 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 に
-
- 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/ から。
- impl: eval.ts evalBin の
-
- 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)。
-
- 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・「設計者」の引用を書かない(上限検査)。
-
- Playground: tools/build-playground.mjs で再構築(doc-consistency.test.ts:124 の焼き込み指紋は stdlib 3 ファイルを含む)。例に「締め切りまでの残り営業時間」を 1 本(pg-link encode→decode→CLI 同等実走で確認)。
-
- MCP: kairos-lang-mcp の同梱 reference を再 bundle(新 2 ページ・絶対 URL 化の束に含める・語一覧の再生成を確認)・依存 kairos-lang を ^1.1.0・server.json・README 日英(登録簿の 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 行。
-
- 版と公開: 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 本文は日本語を先に。
-
- ブログ: 492(10/22 予約)はそのまま。1.1 公開後に「since/before で 1 行になった」の追補記事を図から起草(半開 [a, b) は初出で解説・在庫 2 本の定常の枠で)。