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 草稿): 列挙ラベルの序数射影 labelOrdinal(B, x)——宣言値域の宣言順から番号を読む
判断: 本体層 core の射影一族(§4.9)に第 4 の語 labelOrdinal(B, x) : 数値 を追加する。B は列挙値域を宣言した束縛、x はラベル値(または点)。値は x の宣言順の序数(1 起点)。1.1 の追加拡張=呼び出し形を 1 つ足すだけで、1.0 の全プログラムの意味は不変(意味論・文法・字句は凍結のまま。90-open 3-10 の確定)。
- 値域 dom(B) は宣言リストに限る——(i)
external(…, labels: [E₁…Eₙ])の値域(ADR-46 判断 4)、(ii) 窓束縛cycle [E₁…Eₙ] anchor:、(iii)segmentBy(…, labels: cycle […] anchor:)(ADR-47)。いずれも窓列・点列から独立に順序を持つ宣言。並行ラベル列(segmentBy の静的labels:・テーブルリテラルのlabels:)は窓順の割り当て列で列挙順ではない(labels: [m12, m1, …]の m1 は位置 2)。label:ラムダは列挙不能(ADR-42 判断 7 (g))。これらとラベル源なしの束縛は誘導つき静的エラー(並行列→数値をlabels:に直接書く・ラムダ形→値域を持つ側を渡すlabelOrdinal(saku, lunar(d)))。ADR-42 判断 7 (g) の域外検査は所属、本語は順序の問い——矛盾しない。 - 意味論は定義的等式:
labelOrdinal(B, v) ≡ v == E₁ ? 1 : … : v == Eₙ ? n : ⊥。右辺は 1.0 の値式だけで書け、現行正準形(reference/segmentBy.md の三項 12 段)の畳み込み。違いは既定枝が ⊥=明示エラー「値域の外」になること(実測: 値域に m13 を足すと三項形は 29 日が既定枝 12 に化け、警告 0)。型は==の規則を継承(§4.9)。識別子形と文字列形は同じ文字列値(§5.5)。 - 点形
labelOrdinal(B, d) ≡ labelOrdinal(B, B(d))(ADR-42 と同じ型 dispatch)。B(d) の規約(範囲外の註釈輸送 §4.10・tz 名検査 ADR-40)を継承し、本語自身は註釈を生まない。 - 1 起点——「第 N」は ordinalIn と同じ。0 起点は添字
l[i]・epochOrdinalに温存。labelOrdinal(weekday, Sun) == 7は wkst に依らない(cycle のリスト順)。 - 値域の重複は呼び出し時の静的エラー(4 勤 4 休
cycle [On, On, On, On, Off, …]級——序数が一意でない)。宣言側に検査は足さない(実測:labels: [m1, m1, …]は今日合法)。数値・論理値の値域も一様に位置を返す。 - 糖衣ではなく core——値層にリスト探索の原語がなく、再帰も禁止(F110)、値域は宣言に住む。
labelOrdinalは CORE_WORDS に加わり、同名の再定義は §4.8 の静的エラー(唯一の互換の縁。全コーパスで束縛名としての使用 0 件)。1 引数形ord(lunar(d))は原理的に不可——ラベル値は素の文字列で所属宣言を持たない(ADR-30 判断 3。実測:== "m1"と== m1は同じ点列)。 - 名は
labelOrdinal——一族の綴り(ordinalIn=枠内の第 N・epochOrdinal=紀元からの座標・labelOrdinal=値域内の第 N)に乗り、略語なし。ADR-30 で廃したlabelOfとは別物=値域を読む語(ラベルは従来どおり束縛名射影)。 - 供給契約と EBNF は不変——wire・schema・解決子は触らない。
name(args)で導出済み・param-key 追加なし。
背景: 供給側の大安・不成就日は external の識別子ラベル(旧暦月)を算術に使うため、列挙名→数の関数を三項 12 段で premise に置く(実測で成立)。可読性の代償に加え、補助関数名が標準語 monthNo と衝突した事故(収蔵 28)と、既定枝が黙って吸う罠(判断 2)がある。labels: の宣言順は既に序数を定めており、それを読む 1 語で三者が同時に消える。
却下した案: 案 0=labels: に数値を許す(新語ゼロだが供給契約の変更・名前ラベルには効かない。併用は 1.1 で一度に判断)/ord(略語・文字コードの含意・衝突面が最大。実測: 1.0 で ord = l => … は合法)/ordinalOf(yearOf/monthOf の Of と向きが逆)/labelNo(stdlib の …No の register・monthNo 事故と同じ面)/indexOf(list, v)(0 起点・列挙を素のリストに書けない=実測「未解決の名前: m5」)/並行列を値域に含める/点形を anchor 起点の「コマの番号」にする(別の量の相乗り——需要が立てば別語)。
帰結: spec §4.9 の表に 1 行・§4.8/§5.4 に「1.1 の新語は予約語に加わる」規約と命名確定行・§5.2・glossary・CHANGELOG は追補でなく 1.1 の節。reference/labelOrdinal.md(ja/en)新設・segmentBy.md の正準形を差し替え三項形は 1.0 互換として残す・ADR-30/46/47 に改訂節。impl: CORE_WORDS・TableV に宣言値域・evalCall 分岐。Playground 再構築・MCP 再バンドル・検定の追従・semver minor。ADR README の 4 面は EBNF 変更なし・輸送表/整列表は値式の語で行なし(coincides と同列)。
検証の案: (1) 大安の外延一致——三項形と同じ点列・同じ註釈(変異: 起点 0・順序反転で赤)(2) m13 の罠が明示エラー (3) 値域外・型不一致・引数個数の文言 (4) 並行列・label: ラムダ・ラベル源なしの誘導文言 (5) 重複値域のエラーと宣言の受理 (6) 点形の継承=範囲外註釈・tz 名検査 (7) labelOrdinal(weekday, d) == ordinalIn(day, week, d)(wkst: Mon・全日)(8) 往復 E[labelOrdinal(B, v) − 1] == v (9) 予約語(変異: CORE_WORDS 未登録で赤)(10) 既存 827 本が無変更で緑=追加拡張の証人。
決める論点(審査役の一覧・推奨つき)と実装の順序
-
名: 【選択肢】labelOrdinal/ord/ordinalOf/labelNo。【推奨】labelOrdinal——射影一族の綴り(…Ordinal)に乗り略語なし・全コーパスで束縛名としての使用 0 件(実測)。ord は 1.0 で合法な利用者束縛の面が最大(実走で確認)・ordinalOf は stdlib の yearOf/monthOf と Of の向きが逆・labelNo は monthNo 事故と同じ register。§5.4 に候補比較と不採理由を 1 行で残す。
-
引数形: 【選択肢】(a) 値形 labelOrdinal(B, v) のみ/(b) 値形+点形〈labelOrdinal(B, d) ≡ labelOrdinal(B, B(d))〉/(c) 点形を anchor 起点の「コマの番号」にする。【推奨】(b)——ADR-42 と同じ型 dispatch で 3 行・B(d) の射影経路を通せば §4.10 の註釈輸送と ADR-40 の tz 名検査を自動継承・曜日番号が labelOrdinal(weekday, d) の 1 語で書ける。(c) は重複ラベルで値形と別の量になり「定義的等式 1 行」から外れるため不採(4 勤 4 休の「何日目」は別項として記録)。
-
値域の範囲: 【選択肢】external の labels: のみ/external+cycle+labels: cycle の 3 形/重複が無ければ静的 labels:(並行列)やテーブルリテラルの labels: も受理。【推奨】3 形——同じ定義的等式で費用は小さい。並行列は窓順(m1 が位置 2=実測)で列挙順ではなく、「重複が無い間だけ効く」緩い受理は閏月でデータが伸びた瞬間に割れる(ADR-46 判断 3 が退けた「行数で変わる静的性質」と同型)。誘導文言=数値を labels: に直接書く(stdlib/kyureki)か epochOrdinal。
-
序数の起点: 【選択肢】1 起点/0 起点。【推奨】1 起点——ordinalIn の「第 N」・Excel の MATCH/WEEKDAY(d, 2)・旧暦 m1→1 と一致。0 起点は添字 l[i](glossary §6.5)と epochOrdinal に温存し、reference の落とし穴に三つの序数の使い分けを書く。
-
値域の重複: 【選択肢】呼び出し時の静的エラー/宣言側(external の labels:・cycle)にも検査を足す/最初の出現を返す。【推奨】呼び出し時のみ——重複宣言は今日合法(external
labels: [m1, m1, …]が exit 0・4 勤 4 休 cycle が 8 点=実測)で、宣言側に足すと動いている定義が割れる。宣言側の警告級検査は将来候補として記録。 -
数値・論理値の値域(labels: cycle [1, 2, 3] 級): 【選択肢】一様に位置を返す/識別子・文字列の値域に限り他は型エラー。【推奨】一様——値域はリストであり型で特別扱いしない方が規則が 1 つで済む(external と cycle は今日すでに名前限定=実測なので、実際に数値値域が立つのは labels: cycle だけ)。
-
案 0(external/テーブル/cycle の labels: に数値を許す)の扱い: 【選択肢】採らない/labelOrdinal と併用/代替。【推奨】採らない——供給契約(cli.ts 132-134 行・schema/supply.schema.json 46-55 行・MCP・供給側送信コード)の変更を伴い、名前ラベル(十二支・六曜名)の序数には効かない。採るなら 1.1 で一度に決め、語彙の二重化を避ける。
-
1.1 の束ね方と版: 【選択肢】3-10 単独で 1.1.0/3-8(since/until 級)と束ねる/3-16(at の責務)まで待つ。【推奨】3-10 の実装と witness は先に枝で進め、3-8 の材料が揃った時点で一度に 1.1.0 として公開(版上げの作業=入口の版・テスト数・Playground sha・MCP・検定追従・en ミラーで約半日/回)。3-16 は ADR-51 改訂を伴う大物なので待たない。
-
CHANGELOG と状態行の型: 【選択肢】「## 1.1(追加拡張)」の節を新設/「1.1 追補 1」形式。【推奨】1.1 の節——言語が変わるので「言語不変」の追補形は使えない。あわせて doc-consistency.test.ts の状態行検査(正規表現
^## (?:RC\d+|1\.0) 追補 (\d+)・入口 4 箇所)とテスト数の入口 6 箇所(CHANGELOG 最新節の N テスト 含む)を 1.1 の形に読み替える。spec/README「命名は全語確定」・README.md 202 行「naming is final for every word」の文言も「1.0 の全語は確定・1.1 で labelOrdinal を追加」へ。 -
reference/segmentBy.md の正準例の差し替え時期: 【選択肢】1.1 公開と同時に差し替え(三項形は「1.0 互換の書き方」として併記)/1.1 公開まで三項形を正準のまま/両形を恒久に並記。【推奨】公開と同時・併記——Playground と検定が 1.1 になるまでは三項形が動く唯一の形で、供給側の写経文書とも揃える(便で通知)。
-
予約語規約の明文化: 【選択肢】§4.8/§5.4 に「1.1 以降の新語は core 語として予約され、同名の利用者束縛は改名」を書く/ADR だけに留める。【推奨】spec に書く——追加拡張の互換条件を「既存の式の意味は不変(新語と同名の束縛を除く)」と正確に述べることになる。
-
4 勤 4 休「サイクルの何日目」(コマの番号)の需要: 【選択肢】90-open に別項として記録(現行の正道=epochOrdinal の差 mod N)/labelOrdinal の点形に相乗り。【推奨】別項——位相の量であって値域の順序ではない。需要が 2 例目を得たら別語(phaseIn 級)の候補設計へ。
-
ADR 番号と候補設計の置き場: 【選択肢】ADR-54 として立てる/追補の型。【推奨】ADR-54(最新は ADR-53)・候補設計は design/30-syntax/00-syntax-draft.md §1.34(最新は §1.33)に本草稿の判断 1〜8 を写し、4 視点検証の記録欄を空けておく。
実装の順序
-
- 判断の確定と記録(言語の持ち主): decisions の 13 点に答えを付け、ADR-54(本草稿)を design/20-adr/adr-54-label-ordinal.md に確定・design/INDEX.md の ADR 一覧に 1 行・design/30-syntax/00-syntax-draft.md §1.34 に候補設計を写す。ADR-30(読む側の核 二語→三語+labelOf との線引き)・ADR-46(labels: 値域は序数の源)・ADR-47(labels: cycle の値域)に改訂節。90-open 3-10(232-239 行・一覧 50 行)を 91-closed へ移す。公開文書に対話の引用を書かない(上限検査)。
-
- spec(ja): 30-body-layer.md §4.9 の表に
labelOrdinal(B, x)行(値域 3 形・1 起点・註釈なし・点形の等式)と「読む側の中核は四語」・§4.8 に「1.1 の新語は予約語に加わる」規約。40-grammar.md §5.2 の射影行にシグネチャ・§5.4 に確定行(候補比較)・§5.6 は「EBNF 変更なし」の注記のみ。50-glossary.md §6.4 に行 1 本。10-types.md §2.7 の dispatch 表に「labelOrdinal の第 2 引数も同じ規則」の 1 句。
- spec(ja): 30-body-layer.md §4.9 の表に
-
- impl(impl/ から実行): eval.ts 574-575 行 CORE_WORDS に ‘labelOrdinal’(§4.8 の再定義ガード 666/716 行が自動で効く)・122-130 行 TableV に
domain?: string[]・1303 行 externalToTable で declLabels を domain に保持・1943-1983 行の並びに labelOrdinal 分岐(引数 2 個→B の種別で値域導出〈table.domain/CycleV.labels/WinLevel.labelsCycle.list・無ければ誘導つきエラー〉→重複検査→x が点なら B(x) の射影経路で値に→型検査→indexOf+1・域外はエラー)。lexer/parser/stdlib は変更なし。
- impl(impl/ から実行): eval.ts 574-575 行 CORE_WORDS に ‘labelOrdinal’(§4.8 の再定義ガード 666/716 行が自動で効く)・122-130 行 TableV に
-
- witness(impl/test/label-ordinal.test.ts 新設): 本草稿「検証の案」(1)〜(10) を vitest に(doctest にエラー期待の記法は無いのでエラー系はここ)。変異試験の 3 系統(退行版へ戻す・修正を落とす・文言を変異)で赤を実測してから数える。
TZ=UTC npx vitest runと typecheck を impl/ から併走。既存 827 本が無変更で緑=追加拡張の証人。テスト数の入口 6 箇所(README 英日・llms.txt・en/spec/README・impl/README・CHANGELOG 最新節)と impl/scripts/check-test-count.mjs を更新。
- witness(impl/test/label-ordinal.test.ts 新設): 本草稿「検証の案」(1)〜(10) を vitest に(doctest にエラー期待の記法は無いのでエラー系はここ)。変異試験の 3 系統(退行版へ戻す・修正を落とす・文言を変異)で赤を実測してから数える。
-
- reference(ja→en 同一コミット): reference/labelOrdinal.md 新設(doctest: external 版六曜=
# resolve:付き・weekday 番号・labels: cycle の節切り月・落とし穴=三つの序数の使い分けと並行列の不受理)・README.md 34-36 行の射影の表に 1 行・segmentBy.md 134-142 行の正準形を labelOrdinal に差し替え三項形を「1.0 互換の書き方」として残す(既定枝の罠の注記)・external.md の labels: 箇条と cycle.md に 1 行。en/reference は tools/refresh-source-sha.mjs で source_sha 更新・kairos フェンス数一致(doc-consistency 299-328 行)・tools/paralen.mjs 0。
- reference(ja→en 同一コミット): reference/labelOrdinal.md 新設(doctest: external 版六曜=
-
- Playground: tools/build-playground.mjs で js/eval.js を再構築(焼き込み sha を doc-consistency が検査=同じコミットで)。例チップは任意(external 例は供給が要るので weekday 番号の例が向く)。pg-link の encode→decode→CLI 同等実走でリンクを確認。
-
- MCP: mcp/scripts/bundle-docs.mjs を実行(reference/labelOrdinal.md から words.json と同梱 reference が自動追加)・依存 kairos-lang を 1.1 系へ・README 日英に語数の記載があれば更新・schema/supply.schema.json と cli-report.schema.json は不変であることを確認(供給契約不変の witness と対)。
-
- CHANGELOG と入口: spec/CHANGELOG.md に「## 1.1(追加拡張)——labelOrdinal」の節(新語 1・既存の式の意味は不変・予約語の縁・テスト数)。doc-consistency.test.ts の状態行検査の正規表現と spec/README・README 日英・en/spec/README の状態行(「1.0 で凍結・1.1 で 1 語追加」)を 1.1 の形に。README.md 202 行「naming is final for every word」を訂正。ADR README のチェックリスト 4 面(EBNF 変更なし・輸送表/整列表は値式の語で行なし・否定リスト該当なし)を ADR 帰結に明記。
-
- 公開(3-8 の材料が揃ってから一度に 1.1.0): runbook を v1.0.11 から読み替え(semver minor・npm kairos-lang/kairos-lang-mcp 1.1.0・Windows exe の自動ジョブ・Release 本文は日本語を先に)。検定は follow.mjs→verify→publish(Playground と同版追従)。供給側へ便で通知(正準例の差し替え・旧形は合法のまま・任意採用)。ブログは既公開を遡らず、第 29 弾(4 勤 4 休)への追記は別項の需要が立ってから。