1.1 RC の草稿(2026-10-18・判断前)。観点の異なる 3 案(最小の語彙追加/読みやすさと教材/実装と波及)を独立に起こし、審査役が採点して統合した。2026-10-19 に推奨案で確定し、2026-10-21 に ADR-54・ADR-55 として起こした。本書は経過の記録(判断前の本文のまま)。実測の根拠は 1.0.10〜1.0.11 準備版の参照実装。
1.1 RC: 2 項目の相互整合・衝突掃引・束の判断材料・決める論点の一覧
3-8(since/before)× 3-10(labelOrdinal)——1.1 RC の相互整合・衝突掃引・束の判断材料
前提: 正本は読むだけ(変更なし)。実走は 1.0.10 の impl(node src/cli.ts list)。試験ファイルは /tmp/claude-1000/-home-haray-sandbox-kairos-project/61014c74-c851-4851-b301-ec81b4be1567/scratchpad/wf-rc11/t1-cmp.kairos 〜 t15-eq-label-num.kairos、掃引コーパスは同ディレクトリの code-corpus.txt。
1. 整合の所見——2 語を一つの語彙として読めるか
| 軸 | 3-10 labelOrdinal(B, x) |
3-8 since(p)/before(p) |
判定 |
|---|---|---|---|
| 層・register | core 射影族(複合綴り: ordinalIn・epochOrdinal・snapTo・coincides と同列) |
stdlib 糖衣・段語(単語: at・take・filter と同列) |
○ それぞれの族の綴り規則に乗る(spec §5.4 の既存語と同じ) |
| 引数の置き方 | 束縛が先・点/値が最後(ordinalIn(u, w, d)・coincides(S, w, d) と同順) |
位置引数 1 つ(at(a)・nth(n) と同形)・named-arg なし |
○ |
| 起点・境界 | 1 起点(ordinalIn と同じ「第 N」。0 起点は l[i]・epochOrdinal に温存) |
半開 [since, before)(評価範囲 [from, to)・窓・isOpen と同じ) |
○ 両方とも既存の規約を継承し新規約を作らない |
| 単位 | 持たない(宣言順の位置) | 持たない(chronos 上の瞬間の全順序) | ○ 3-8 の「単位の問い」は epochOrdinal 形の人工物という読みと整合 |
| 暦法非依存 | 値域は宣言リスト・暦法を見ない | 順序は chronos・tz は在圏で解決(ADR-33) | ○ |
| 型規則との関係 | ラベル→数値への唯一の橋。ラベル同士の順序は定義しない | 時点にだけ順序を足す。ラベル・数値との混在はエラー | ○ 補完関係。実測: weekday(d) >= Fri は今日「数値ではない: string」(t6)・weekday(d) == 1 は「等値比較の両辺の型が異なる…」(t15)。両方入れば 3-8 のラベル側エラーの誘導先に labelOrdinal(weekday, d) >= labelOrdinal(weekday, Fri) が書ける(片方だけなら誘導先が無い) |
| dispatch | 点形 labelOrdinal(B, d) ≡ labelOrdinal(B, B(d))=§2.7(10-types.md:104-122)の「点→射影」に乗る |
該当なし | ○ |
| 互換の縁 | core 語=同名束縛は静的エラー。実測 t8: epochOrdinal = l => 1 → 「core 語 epochOrdinal の再定義は静的エラー(§4.8)」exit 1 |
stdlib 語=利用側 top-level の同名束縛を黙って覆う。実測 t4: top-level at(a) = s => s(恒等)を書いても everyDay |> at(T09:00) は 09:00 の点を出す=stdlib が勝つ・警告なし。premise ブロック内の再定義は利用側が勝つ(t9: 日の点が出る)。根拠 impl/src/eval.ts:2091-2104 lookupBinding=premise → calendar-system → topBindings |
△ 非対称。同じ 1.1 で入る 3 語のうち 1 語は「うるさく止まる」・2 語は「黙って意味が変わる」。spec には top-level 束縛と公開語の優先順の明文は無い(§3.4 は premise 間の曖昧のみ・§4.8 は core 語のみ)。→ 論点 C2 |
| 診断文言 | 日本語型名で書く前提 | 草稿は「追補 22 の等値エラーと同じ型名」 | △ 今日の順序比較の経路は num()(eval.ts:3388-3390)=kindOf の英語種別(point・string)、等値は typeName(1929-1935)の日本語。3-8 の新分岐は typeName 側で書き、両辺を見る(t7: t >= T14:00 は左辺 point で止まり単独時刻の誘導に届かない)。3-10 の文言も同じ typeName に揃えると一語彙として読める |
| 教材上の重なり | 点形の売りの一つ「曜日番号」 | — | △ 実測: ordinalIn(day, week, d) == 7 は wkst: Mon で日曜(t12)・wkst: Sun で土曜(t13)、isoWeekday(d) == 7(ISOWeek)は wkst に依らず日曜(t14)。「月=1…日=7」は 1.0 で既に isoWeekday が返す。点形の固有価値は wkst 非依存の weekday 番号と external/labels: cycle 束縛(B(d) 経由しか道が無い)に絞って説明するのが正確 |
結論: 命名・引数・起点・境界・単位は互いに矛盾せず、既存の 2 つの族(射影族/段語)の規則をそれぞれ継承している。一語彙として揃っていないのは (1) 互換の縁の硬さ と (2) 診断の型名 の 2 点で、どちらも 1 文の規約と実装の 1 分岐で揃う。
2. 衝突の有無(機械掃引の根拠)
語彙集合(spec と stdlib から採取):
- core 語:
impl/src/eval.ts:572-575(CORE_STAGES+everyDay・everyInstant・chronos・grid・span・split・cycle・ordinalIn・epochOrdinal・coincides・external) - 語演算子:
impl/src/parser.ts:22(and・or・not・mod・div・in・premise・with) - param-key:
spec/40-grammar.md:240-243(on・unit・of・from・edges・empties・by・anchor・phase・covering・label・labels・kind・source・to・until) - member-key:
spec/40-grammar.md:205-206(calendar-system・calendar・axis・roll・granularity・tz・wkst・asof・source・epoch) - stdlib 公開語(3 ファイル・31 語): day・hour・weekday・month・year・quarter・week・weekStart・monthStart・monthEnd・yearStart・at・yearNo・monthNo・dayNo・yearOf・monthOf・epochYear・monthLengths・isLeap・daysInMonth・daysInMonthOf/isoWeek・isoWeekStart・isoYear・isoYearStart・isoWeekNo・isoWeekday・isoYearNo/fiscalYearNo・fiscalMonthNo
- 列挙値: Mon…Sun・Following/Preceding/Modified・dates/instants(glossary §6.6・ADR-46)
候補名の照合(上の全集合に対し whole-word):
| 候補 | 語彙集合との衝突 | kairos コードコーパス(spec・reference・stdlib・40-examples・recipes・en の ```kairos フェンス+.kairos=2,493 行) | 検定・ブログ・zenn・供給側 docs(識別子として) | 1.0 で束縛名として合法か(実走) |
|---|---|---|---|---|
labelOrdinal |
なし | 0 | 0 | 合法(t3 exit 0) |
ordinalOf・labelNo |
なし | 0 | 0 | 合法(t3) |
ord |
なし(散文 2 件のみ: reference/segmentBy.md:142・en 182 の「ord(lunar(d)) の類」) |
0 | 0 | 合法(t3) |
since・before・after・between |
なし(散文のみ。eval.ts:1599 の since は内部変数) |
0 | 0 | 合法(t2: since(p) = …/before(p) = … を top-level 糖衣として定義し exit 0・3 点) |
until |
param-key と同綴り(until:) |
4(すべて until:) |
0 | 合法(t5: until(p) = … が解析・実行される)→ 衝突は字句でなく可読性の問題 |
from・to |
param-key と同綴り | from 61・to 3(すべて from:/to:) |
0 | 合法(t5: from(p) = … exit 0) |
→ 推奨名 labelOrdinal・since・before は全集合・全コーパスで 0 件。until/from/to の不採理由は「同綴りの named-arg と 2 役」で、実装上の障害ではない(1.0 でも書ける)。
3. 束の判断材料——両方/片方/どちらも糖衣
| 問い | 事実 | 帰結 |
|---|---|---|
| 3-10 は糖衣で済むか | 値層にリスト探索の原語が無い(§3.5 の演算子表: 添字 l[i]・in のみ)・再帰禁止(F110)・値域は宣言に住む(TableV に domain が無い: eval.ts:122-130) |
不可。三項 12 段は値域ごとの手書き。core 1 語が最小 |
| 3-8 は糖衣で済むか | since は stride(1, from: p) 展開で 1.0 でも書ける(提案側実測・註釈が評価域末尾まで膨張)。before の 1.0 核は epochOrdinal 形(単位必須・t2 で成立)か差 \(提案側実測で整列なし/窓付きで割れる=当方は未再走)。順序比較は num() 固定(eval.ts:1905-1908・t1 で「数値ではない: point」exit 1) |
単位なしの before は core の受理拡大なしに書けない。糖衣だけで出すなら since 限定+単位付き |
| 1.1 の定義との関係 | 90-open:11「追加拡張=新語・新構文の追加で、既存の式の意味は不変」。3-10 は字義どおり新語。3-8 は型規則の緩和(エラー→定義)。先例 ADR-45「静的エラーだった形の合法化=追加拡張」(CHANGELOG.md:207)は凍結前の RC5 追補 7。凍結後の追補は全部「言語不変」(追補 22 の「偽エラー 2 形が評価できる」はバグ修正) | 3-8 を入れるなら 1.1 の定義文に「エラーだった形の合法化を含む」の 1 句が要る。3-10 だけなら不要 |
| 触る面の重なり | 両方: eval.ts・spec §4.8(予約の規約)・§4.9(表/等値の型)・§5.4(確定行)・glossary・CHANGELOG「1.1」節・doc-consistency の正規表現(test/doc-consistency.test.ts:231 ^## (?:RC\d+|1\.0) 追補 (\d+))と状態行 4 入口(spec/README.md:7・README.ja.md・README.md:202「naming is final for every word」・en/spec/README.md)・Playground 再構築(指紋は src+stdlib)・MCP 再バンドル(mcp/scripts/bundle-docs.mjs:36 は reference/*.md のファイル名から words.json を自動生成=確認済み)・検定追従・semver minor |
束ねれば版上げの固定費(約半日/回)が 1 回。片方ずつだと 2 回 |
| 供給契約 | 3-10: --supply の labels は文字列配列(cli.ts:133-135・schema/supply.schema.json:46-55)=不変。3-8: 無関係 |
どちらも wire・schema・MCP tool に変更なし |
| 需要 | 3-10: 1 例(供給側の大安・不成就日)+ monthNo 衝突事故(収蔵 28)。3-8: 2 例(11 §(n)・ブログ第 35 弾) |
いずれも「需要が続けば」の閾は満たしている |
| 片方だけのときの穴 | 3-10 だけ: ラベルの順序は数値経由で書けるが時点の切り出しは epochOrdinal 形のまま。3-8 だけ: weekday(d) >= Fri のエラーに誘導先が無い |
同時に入ると互いの診断の誘導先になる(§1 の表) |
勧め: (A) 両方を 1.1.0 で一度に。ただし順序は 3-8 の受理拡大(論点 S1)を先に裁定——(a) 認めるなら束で進める・(b) 認めないなら 3-10 単独で 1.1.0 とし、3-8 は「利用側糖衣 since(stride 形)」の案内に留めて before は見送り。(D)「どちらも糖衣」は 3-10 が原理的に不可なので成立しない。
4. 決める論点の一覧(2 項目を畳んだ・推奨つき)
共通(束に関わる)
| # | 論点 | 選択肢 | 推奨 |
|---|---|---|---|
| C1 | 1.1「追加拡張」の定義に受理拡大(エラーだった形の合法化)を含めるか | 含める/新語・新構文に限る | 含める(ADR-45 の先例を 1.1 の定義文に明記)。これが 3-8 の可否そのもの |
| C2 | 1.1 の新語と同名の利用側束縛の扱い(互換の縁を一様に) | (i) 文書化のみ(stdlib 語は黙って覆う=t4 の現状)/(ii) stdlib 公開語の top-level 再定義を一律静的エラー(at・monthStart にも遡る)/(iii) 1.1 以降に追加した語(core・stdlib を問わず)に限り同名の top-level 束縛を静的エラー/(iv) since・before を core 語にする |
(iii)。3 語の縁が同じ硬さになり、§4.8/§5.4 に「1.1 以降の新語は予約され同名束縛は改名」の 1 文で両項目を覆える。1.0 の at 等の挙動は不変。コーパス 0 件なので実害は無いが原理(「黙って意味が変わらない」)を守る |
| C3 | 1.1 の記録書式 | 「## 1.1(日付)——…」節を新設・状態行を「1.0 で凍結・1.1 で N 語追加」・正規表現を 1.1 対応/「1.1 追補 1」の通し番号 | 節新設。最初の変更で赤になる面(doc-consistency.test.ts:231・入口 4 箇所・README.md:202・spec/README.md:7「命名は全語確定」)を枝の最初の commit で直す |
| C4 | 束ね方と版 | 両方で 1.1.0/3-10 先行 1.1.0・3-8 は 1.2/3-16 まで待つ | 両方で 1.1.0(§3)。3-16 は ADR-51 改訂の大物なので待たない |
| C5 | ADR 番号と候補設計の置き場 | 3-10=ADR-54・3-8=ADR-55(最新 ADR-53)/逆 | 裁定順に 54・55。INDEX.md:15「ADR-01〜53」の範囲表記を更新。候補設計は 00-syntax-draft §1.34/§1.35 |
| C6 | reference の形と正準例の差し替え時期 | 1 語 1 ファイル(labelOrdinal.md・since.md・before.md)・segmentBy.md の三項形は「1.0 互換の書き方」で併記・11 §(n) は糖衣形に/1.1 公開まで現状 | 1 語 1 ファイル・公開と同時に差し替え・旧形は併記(words.json はファイル名から自動) |
| C7 | 診断の型名 | 新しい順序比較と labelOrdinal のエラーを typeName(日本語)で統一・両辺を見る/現行 num() の英語種別のまま |
統一(t6・t7 の現状「数値ではない: string/point」は英語種別で左辺止まり) |
| C8 | 下流の追従 | 検定は follow→verify→publish で 1.1 に同版・ブログ 492(10/22)はそのまま・1.1 公開後に追補記事・供給側へ便で通知(旧形は合法のまま・任意採用) | そのまま |
3-10 固有
| # | 論点 | 推奨 |
|---|---|---|
| T1 | 名 | labelOrdinal(族の綴り・全コーパス 0 件・ord は 1.0 で合法な束縛名=t3・ordinalOf は yearOf/monthOf と Of の向きが逆・labelNo は monthNo 事故と同 register) |
| T2 | 引数形 | 値形+点形(点形 ≡ labelOrdinal(B, B(d))。§4.10 の註釈輸送・ADR-40 の tz 名検査を B(d) 経由で継承)。「コマの番号」案は不採・別項へ。教材では点形の固有価値を「wkst 非依存の曜日番号・external/labels: cycle」と書く(t12〜t14) |
| T3 | 値域の範囲 | 3 形(external の labels:・窓束縛 cycle・labels: cycle)。並行列 labels: は窓順なので不受理(誘導: 数値を直接書く=stdlib/kyureki.md:46 の形・または epochOrdinal) |
| T4 | 起点 | 1 |
| T5 | 値域の重複 | 呼び出し時の静的エラーのみ(宣言側は今日合法=提案側実測) |
| T6 | 数値・論理値の値域 | 一様に位置。実測: 窓束縛 cycle [1, …] は「cycle のラベルは名前」exit 1(t10)・external も名前限定(eval.ts:1169)・labels: cycle [1, 2, 3] は受理され seg(d) == 2 が 2026-02-01 を返す(t11)=数値値域が立つのは labels: cycle だけ |
| T7 | 案 0(labels: に数値) | 不採(供給契約 cli.ts:133-135・schema:46-55 の変更・名前ラベルに効かない) |
| T8 | 4 勤 4 休の「何日目」 | 90-open に別項(位相の量。需要 2 例目で phaseIn 級) |
3-8 固有
| # | 論点 | 推奨 |
|---|---|---|
| S1 | 時点どうしの順序比較を定義する受理拡大(中心) | 認める(== は時点に定義済み eval.ts:1920・§4.9 等値の型・順序への完成として説明が立つ)。認めないなら since 限定の stride 形+before 見送り |
| S2 | 名 | since/before(0 件・境界と英語が一致。until は takeLast(n, until:) の点包含と境界反転・from/to は param-key と 2 役=t5 で書けるが字面が散る) |
| S3 | 糖衣 2 語を受理拡大と同時に出すか | 同時(需要の動機は読みやすさ) |
| S4 | 置き場 | Gregorian 公開語(at の隣・gregorian.kairos:30)。影の手当ては C2 (iii) に合流 |
| S5 | 日粒度の列に時刻付きリテラル | 文書化のみ(日の点は 00:00・当日は 1 日ずらす) |
| S6 | 単独時刻どうしの順序 | 定義しない(3-11 と同時) |
| S7 | 1.0 文書への先行案内 | 待つ(stride 形は註釈膨張・before が無い) |
草稿の行番号の訂正(小): doc-consistency の正規表現は :231(it( が :228)・spec/README.md の状態行は :7・README.md:202 は草稿どおり。