日本語 · English

40-examples — 表現力検証(既知スケジュールのサンプル集)

Kairos が「利用者が実際に書きたい既知のスケジュール」を表現できるかを、サンプルを書いて検証する 作業層。RC(リリース候補)策定の一環で、方法論は INDEX の「説明を書いて綻びを炙り出す」—— サンプル記述そのものが綻び出しである。ここは探索の記録であり、確定仕様は ../../spec/、確定した 綻びの解消は ADR と draft(../30-syntax/)へ送る。

判定基準

各サンプルに三値の判定を付す。

検証は当初は実装が無いため期待値照合による(05 以降はリファレンス実装の doctest で実行検証): 各サンプルに公知の具体日付(2026 年の祝日・旧正月・ 節気など)を期待値として付し、式の読み下しと突き合わせる。天文・暦データの期待値は国立天文台 令和8年(2026)暦要項の実データで照合済み95-reference-data.md に一次データと照合結果)。 実データ投入により、時点だけのテーブルでは「立春」を意味的に選べない綻び(F32/F33)が新たに露見し、 射影一族(labelOf)の必要性が具体的に裏づけられた。

「書ける」の証跡(検証形態の対応表)

本ディレクトリは RC 期の探索の記録であり、ファイルにより検証の形態が異なる。「書ける」の 機械的な裏づけがどこにあるかの対応:

ファイル 本文コード例の検証 機械検査の所在
01 祝日一式 期待値照合(記述当時は実装前) 中核形は実装テストが実行検証——祝日カスケード(振替 5/6・国民の休日 9/22 の導出)と給料日は impl/test/examples.test.ts(spec §7.4/7.5)、営業日導出は doctest 標準前提そのもの
02 干支・六曜ほか 期待値照合 年干支は examples.test.ts(§7.6)・cycle 一般は cycle-labels.test.ts・六曜/旧暦は stdlib/kyureki の doctest(NAOJ 朔データ)
03 天文・暦 期待値照合+一次データ照合95-reference-data.md=NAOJ 暦要項) 節気・雑節・旧正月は stdlib 解説と 40-examples 後続ファイルの doctest・月相の算術近似 1 例は本文 doctest(§3.4)
04 射影の綻び出し 探索記録(確定形は ADR-30) 確定後の射影は projections.test.ts・reference 各ページの doctest
05〜11 doctest(生きたテスト)——# eval: 付きフェンスを impl/test/doctest.test.ts が走査・実行 本文がそのままテスト(ティティ・営業時間・注入起点・バックアップ多段・DST と幅規約・代替暦の算術形・「書けない」実例の実測 17 本)

01〜04 の本文例の順次 doctest 化(確定語彙への書き直し込み)は進行中の宿題。それまでの間、 「書ける」の一次証跡は上表の実装テスト・doctest・一次データ照合が担う。

記法の規約

ファイル構成

ファイル 対象
01-jp-holidays.md 国民の祝日一式(固定日・ハッピーマンデー・春分秋分・振替・国民の休日・五輪特例)+生活系(給料日・ゴミ収集・中国本土の調休)
02-cycles.md 十干・十二支(日/年)・干支 60・六曜・一粒万倍日
03-astronomical.md 二十四節気・旧暦・雑節・月齢月相・イースター・ISO 週番号
04-projections.md 射影一族(ordinalIn/labelOf/snapTo/epochOrdinal/label:)の綻び出し
05-astronomical-calendars.md 天文由来の暦法の横断検証(ティティ=実行検証・イスラム暦/バハーイー暦/日没起点の日=机上)。```kairos ブロックは doctest 実行
06-business-hours.md 営業時間・半日休(F67 の綻び出し)。壁時計 vs 経過時間の二意味論・帯+証人パターン・DST 切替日と深夜営業の実行検証(多 TZ 例は # eval: の後置 tz:
07-injected-origin.md 実行起点相対の分解(注入された時点からの次回計算=spec §7.7 の doctest 4 例・誤形の整列エラー実測)
08-backup-schedules.md バックアップの多段世代(日次増分・週次差分・月次フル・上位優先の抑止・開始時刻の漸減=有限場合分け+結合子。doctest 2 例)
09-dst-widths.md DST と幅の規約(1d=市民日 vs 24h=経過時間の運用検証・導出点の隙間/重複解決・名指しは厳格/導出は規約。doctest 4 例・事故の型→規約の対応表)
10-alternative-calendars.md 代替暦の算術形(Outlook/OS の実装様式調査=焼き込みテーブル・算術・境界で展開点列化/タブラー・ヒジュラ暦をデータゼロの規則 premise で実行検証=doctest 3 例/方式の構造対比・ヘブライ暦の三段整理・「Outlook にできて Kairos にできないこと」の正面回答)
11-impossible-schedules.md 「書けない」と言われてきたスケジュール(cron・RRULE・API/業務系の限界実例 32 項目を Web 収集=出典付き/代表 17 本を現行語彙で実測=doctest/三分類〈語彙・データ・射程外=受け皿明文化〉/イースター判定の「書ける」更新・F109)
90-findings.md 綻びログの集約(F1〜F111)と補完機構への写像
95-reference-data.md NAOJ 令和8年暦要項の一次データ(節気・朔弦望・春分秋分)と照合結果

仕分けマトリクス(全要素)

暦要素 判定 主な依存
固定日の祝日(元日・建国記念の日 等) 書ける cycle ラベル述語・月への cycle
ハッピーマンデー(成人の日 等) 書ける cycle ラベル述語(WKST 非依存)
春分の日・秋分の日(官報版) 要外部データ テーブルリテラル
振替休日 書ける 導出ストリームを roll の軸に
国民の休日(挟まれ) 書ける —(積 & の実用例)
年限定特例(五輪移動) 書ける テーブルリテラル・asof/source
給料日(25 日・前営業日) 書ける
ゴミ収集日(第 1・第 3 水曜) 書ける
中国本土の調休(反転) 書ける テーブルリテラル・カスケード差
十干・十二支(日) 書ける anchor=権威データ
十干・十二支(年)・丙午 書ける 年窓への cycle
干支 60 書けるが鈍い (cycle の積は述語合成で代替可)
六曜 要補完+要外部データ 窓内序数・窓ラベル射影・旧暦
一粒万倍日(選日) 構造は書ける 節気データ・ラベル射影・in
二十四節気 要外部データ テーブルリテラル・snapTo
旧暦(朔・大小月・閏月) 要外部データ+要補完 窓ラベル付与・層またぎ規則
雑節(八十八夜・二百十日・彼岸) 節気があれば書ける 範囲 shift は列挙
月齢・月相 要外部データ イベント化して持ち込む
イースター(Computus) 値は書ける・時点化で要補完 点→値の射影 or 値→時点の持ち上げ
ISO 週番号 要補完 窓ラベル射影(年度ラベルと同族)
毎営業日 9 時(壁時計) 書ける strideBy の市民時幅・coincides(06)
「1 日後」vs「24 時間後」(DST 切替を跨ぐ) 書ける 幅の二リテラル 1d/24h=混同が書けない(09)
営業時間帯+半日休(11:30 引け) 書ける(冗長=F77 糖衣候補) segmentBy 帯+証人パターン・時刻付きテーブル(06)
深夜営業の帯(日跨ぎ) 書ける(帰属は修理形=F85) 証人パターンの二段掛け(06)
バックアップ多段世代(抑止・時刻漸減) 書ける day 集合の差・場合分け+結合子・壁時計 tick(08)

総括: 「書けない構造」は無かった。欠けているのは (1) データの持ち込み口(テーブルリテラル)、 (2) 窓→値の射影一族(窓内序数・窓ラベル・snap)、(3) 細部の値語彙(in・日付範囲・非 ASCII ラベル)の三群に集約される。詳細は 90-findings.md