日本語 · English(未訳)

Kairos リファレンス実装(プロトタイプ)

スケジュール定義言語 Kairos../spec/)のリファレンス実装の試作。 目的は仕様の実行可能性の検証——EBNF §5.6 がそのままパーサに、代表例 §7 と 40-examples の実データが そのままテストになるかを確かめ、仕様の穴を実行で炙り出すこと(結果=綻び F43〜F50。 ../design/40-examples/90-findings.md)。

使い方

npm install          # devDependencies(typescript / vitest)のみ
npm test             # spec §7 全代表例・NAOJ 暦要項実データ・静的エラー・reference/ と stdlib/ の doctest
npm run typecheck

# CLI(Node 24+。TS をネイティブ実行)
node src/cli.ts examples/payday.kairos      --from 2026-01-01 --to 2027-01-01
node src/cli.ts examples/jp-holidays.kairos --from 2026-01-01 --to 2027-01-01
node src/cli.ts examples/rokuyo.kairos      --from 2026-01-01 --to 2027-01-01   # 旧暦・六曜(大安など)

ライブラリとして:

import { run } from './src/index.ts';
const r = run(source, { from: '2026-01-01', to: '2027-01-01' });
r.results[0].dates;   // ['2026-01-23', …]

設計(仕様との対応)

ファイル 対応する仕様
字句 src/lexer.ts §5.5・ADR-28(日付・幅リテラル、市民時/経過時間の混合エラー、Unicode 識別子)
構文 src/parser.ts §5.6 EBNF(前文・束縛・gen-expr・値式の優先順位・テーブルリテラル)
評価 src/eval.ts §3(窓生成語・機構 A・遅延解決)・§4(core 段・射影)・I1〜I8 の一部を実行時検査
標準 premise stdlib/*.kairos(gregorian・fiscal・isoweek を依存順にロード) 各 stdlib ページ §1 の完全定義を Kairos ソースのまま評価器に食わせる(Kyureki はデータ入り premise のため同梱しない=../stdlib/kyureki.md

方針: 評価器は core 演算子だけを実装し、Gregorian・糖衣・祝日カスケードはすべて Kairos ソースとして 評価する(言語組み込みの魔法にしない=「透明な標準ライブラリ」ADR-25 の検証)。

検証済みの言語機構: 二層構造・前文(三形+後置畳み込み axis:)・機構 A(Fiscalquarter 自動追従)・ with 上書きと rephase 展開の一致・糖衣の遅延解決(nextWeekday の前方 roll・WKST 非依存)・ week 窓の wkst: 遅延解決・cycle(曜日・年干支)・テーブルリテラル(covering:/labels:・昇順検査)・ 束縛名射影(sekki(s) == 立春)・射影 ordinalIn/epochOrdinalsnapTo・結合子カスケード・ 選択子の窓相対(I4 エラー含む)・segmentBy(隙間ポリシー必須)・ストライド(from: 必須=ADR-31)・ 文字列リテラル(tz: "Asia/Tokyo"=ADR-32)・grid の anchor:(ADR-31)・ カレンダー実体と bizDay 標準導出calendar: TSE・軸位置の on: TSE・正体判定=ADR-35。doctest の 標準前提も実体経由)・member 解決規則(定義側優先の上書き重ね=ADR-35 判断 8)・整列の検査&/\/filter(on:)/roll(on:)/shift(unit: 点列軸) の同一 G 要求・snapTo の再整列=ADR-36)・ 範囲外出自と covering: の活性化(ADR-37。値随伴の区間註釈=輸送表 §4.10・包含の静的検査・ 開端/区間リスト covering・束縛後置の被覆主張+必要条件検査・実効被覆域の分類器・ RunResult.annotations/coverage(残走路)・segmentBy の覆域端発火・地平線 4 サイトの三分岐降格・ defCache キーへの asof/source 追加)・窓所属の述語 coincides と stride の入力相対 (ADR-38。証人規則の三分岐・tz 静的検査・窓語 S / cycle w の静的エラー・filter 輸送の逆像拡幅 =F75・stride の n 域検査と from: 規約・窓リーダーの覆域検査=F82〔覆域外に張られた窓の読みは coincides/ordinalIn/epochOrdinal/ラベル射影とも範囲外——合成マーカー帯の黙った 24 時間帯化の封止〕)・窓列への並行ラベル列(ADR-39。segmentBy の labels:・ 束縛名射影・覆域基準の同長性検査=F62 の器・clip/drop/label: 同居/規則マーカー/合成マーカーの 静的エラー群・未知 named-arg を黙って捨てない検査)・多 TZ(IANA tz を Intl ベース・依存ゼロで サポート——premise 相対 TZ〔ADR-33 の射影パラメータモデル〕・DST の 23/25h 市民日〔ADR-11/12 の 幅規約の実行検証〕・隙間/重複リテラルの明示エラー・tz 相対の紀元・covering 端の premise tz 解決・ 整列タグの tz 名と実幾何の一致・tz: 宣言必須の執行=ADR-35/37)・日付ラベル保存の再錨 rebase と免除系の tz 名検査(ADR-40。day 整列検査・存在しない日付の明示エラー・ 最初の瞬間への着地・恒等最適化・註釈の floor/ceil 輸送・within/選択子/ordinalIn/cycle・値射影の 市民グリッド tz 名検査〔snapTo は除外〕——F69 の解=TSE×NYSE 共通営業日が書ける)・ 営業時間の供給規約と標準導出(ADR-41。sessionOpens/sessionCloses の対宣言〔with 継承込み〕・整合性検査 〔結合実効被覆域∩実体化範囲の局所交互・端の切り欠き・同時刻対は両点保持=文脈順序〕・実体相対の bizOpen/bizClose/isOpen〔開場日固定=F85・証人規則の三分岐・実体キーのメモ化〕—— クロス tz の isOpen が tz 検査に掛からず読める=F89)・時刻付き anchor/from: の壁時計ラベル読み (ADR-31 改訂 2=F87 の修正。切替日 anchor の grid が anchor 自身を通り、同じ壁時計の 2 本が 同一 G になる・shift の経過保存は回帰テストで固定=F83 (a))・窓インスタンス参照 (ADR-42。適用の引数型 dispatch〔点→束縛名射影・値→逆像〕を WindowsV/StreamV+wins の二表現に 対で実装・要素点列=定義が窓に束ねた入力点列の窓所属〔F93〕・「窓列→要素点列」の輸送行 〔F94。filter と共通経路 filterByPredicate を共有=第 5 の窓リーダーサイト〕・逆像は窓単位の ラベル評価〔ADR-34 の構造保証から外延等価・naive filter の 1/5〜1/25〕・静的検査群 (a)〜(g) 〔自己参照ガードの値引数拡張=ADR-34 改訂・labels: リテラルの域外検査を含む〕・修飾適用形 Gregorian.year(2020)・stdlib の標準ラベル〔Gregorian year/month・Fiscal.year の同時付与=F96〕 ——marineDay \ year(2020) 級の F9 正準例が立つ)・リテラルと値束縛の締め(ADR-43。 非実在日付の字句エラー〔2026-02-30 級のロールオーバー封止〕・固定オフセット tz の厳格一意形 〔”±HH:MM” のみ・Intl 前段の字句検査〕・時点の裸の値束縛=F97 の挙動固定)・文の区切りと 複数行継続(ADR-44。括弧内自由改行・行頭/行末の段・結合子継続・空行跨ぎ可)・ 空テーブルリテラル(ADR-45=F98。[] covering: 限定の昇格・covering 必須/labels: [] のみの 誘導エラー・整列の第三状態空虚適合〔全整列に適合・結合は相手を継承・rebase は恒等〕・ 空 nonWorking 実体の boot=bizDay 縮退の観測可能性・F99 修正=roll 空軸の依存像の過小近似 〔dependImageAnn の early return 削除・有限/開端 covering の観測差の回復〕——掃引 23 テスト)・ 外部供給宣言 external(ADR-46=socket の確定。解決子フック RunOptions.resolve〔同期〕・ SupplyError=解決失敗の機械可読部分類・契約検査 12 種〔covering/asof 必須・kind 幾何・包含・ 昇順・同長/値域/無宣言到着・実在日の再執行・有限整数〕・スナップショット socketCache〔定義側 premise 単位・一評価一解決・要求駆動〕・位置/tz/source の静的検査・予約語・wire=dates 字面/ instants ms・doctest # resolve: ディレクティブ——external.test.ts 35 本+観測等価スイート。 プロトタイプ注記: 評価器は run ごと生成のため解決値 asof のメモ化キー参加は構成で適合—— 常駐評価器に転用する場合は defCache キーへ解決値 asof を含めること〔ADR-46 判断 6〕)。

プロトタイプの制約(仕様との既知の乖離)

テスト