ロードマップ
XTL 1.0(仕様)および xl3 1.0(リファレンス実装)に到達するために何が必要かをまとめます。
現在のバージョンは 0.7.0(npm)で、**XTL 0.1(ドラフト)**を対象としています。0.x の期間中は依然として破壊的変更が発生し得ます。1.0 のリリースはカレンダー上の日付ではなく、以下に挙げる項目によってゲーティングされます。
詳細なバージョン計画は
docs/internal/blueprint-to-1.0.mdにまとめてあります — ギャップ分析、設計思想の境界(xl3 ≠ JXLS)、バージョンごとのステップ計画です。本書はエレベーターピッチであり、ブループリントは根拠そのものです。1.0 ゲートの唯一の正典は下記のテーブルです。 本書とブループリントが矛盾する場合はこのテーブルが優先され、ブループリントの方をそれに合わせて更新します。
xl3 における 1.0 の意味
1.0 の目標は オペレーターにとって信頼できる読みやすさ です。すなわち、ぐらつかない仕様、サプライズのないリファレンス実装、そしてコードを読まなくてもオペレーターがテンプレートをレビューできる程度に小さい表面積です。これは JXLS との機能比較における網羅性の話では ありません — xl3 は意図的に小さな表面でリリースしています(ADR-0043 + ADR-0048)。想定する利用層は 多数の顧客固有の請求書フォーマット(거래명세서、정산서、발주서)を扱う韓国のオペレーションチーム です。エンジンはこのニッチを越えて一般化できますが、ニッチがくさびとなります。
1.0 ゲートテーブル(唯一の正典)
各ゲートにはオーナー、ゲートをクローズさせる成果物、合否基準、ゲートが到達不能となった場合のフォールバック、そしてターゲットマイルストーンが定められています。下の各バージョンごとのステップ計画はゲートを ID で参照します。
| ID | ゲート | オーナー | 成果物 | 合格基準 | フォールバック | ターゲット |
|---|---|---|---|---|---|---|
| G1 | 適合性コーパス ≥ 140 | メンテナ | conformance/fixtures/ | ls conformance/fixtures/ | wc -l ≥ 140 | — | 0.7.1(現在 139 件; 0.7.0 の ADR が 141–187 を予約済み) |
| G2 | Stage 2 OOXML 正規化を仕様化 | メンテナ | ADR-0006 + src/ 配下のカノニカライザ | フィクスチャ 024-027, 093 と ADR-0006 の改訂で網羅 | — | 完了 |
| G3 | エラーコードカタログの凍結 | メンテナ | src/__tests__/error-codes.test.ts スナップショット | カタログのスナップショットが 30 日間変更なし | — | 0.9-rc(0.7.0 の新規 4 コードにより 2026-05-22 にクロックがリセット) |
| G4 | JXLS との境界を公開 | メンテナ | ADR-0048 | ファイルが存在し、PORTERS_GUIDE を参照していること | — | 完了 |
| G5 | 先送り実装の ADR を着地 | メンテナ | ADR-0038 実装 ✅(2026-05-18)+ ADR-0040 PE 実装 | ADR-0038 の対象範囲はリリース済み(フィクスチャ 132-135);ADR-0040 の CF/DV 範囲拡張は未完了 | — | 0.6(一部)/ 0.7.1 |
| G6 | 公開 API サーフェスの凍結 | メンテナ | src/__tests__/api-surface.test.ts スナップショット | スナップショットが 30 日間変更なし | — | 0.9-rc |
| G7 | @stable エクスポートに JSDoc 例 | メンテナ | TypeDoc 出力 | すべての @stable シンボルに @example ブロックが存在 | — | 0.8 |
| G8 | 性能の特性化 | メンテナ | scripts/BENCH.md | 1k/10k/100k 行 × 5/10/20 列のマトリクス + メモリ上限 + parse/eval/write の内訳を公開 | — | 0.7.1 |
| G9 | 性能リグレッションフィクスチャ | メンテナ | 適合性コーパス | 比率ベースのアサーションを含む大規模フィクスチャを 2 件以上 | — | 0.7.1 |
| G10 | クロスブラウザのスモーク | メンテナ | ci.yml | Safari + Firefox でのバンドル読み込み + 1 回の convert() を毎実行 | — | 0.7.1 |
| G11 | CI での Stage 2 実行 | メンテナ | ci.yml | すべての PR で npm run conformance:stage2 が走る | — | 0.7.1 |
| G12 | 未確定挙動の固定(ピボット/スパークライン/ListObject/改ページ) | メンテナ | 適合性フィクスチャ + 項目ごとの ADR | 各項目について:現状挙動を固定するフィクスチャ、または明示的に 1.x に先送りする ADR | ADR と共に 1.1 へ先送り | 0.7.1 / 0.8 |
| G13 | 第二言語実装による検証 | 外部(xl3-py) | conformance/reports/*.json | xl3-py が Stage 1 を 80% 以上、または Stage 2 を 80% 以上通過すること、もしくは他のすべてのゲートがクローズしてから 12 か月以内に別言語(Rust/Go/Java)で 50% のスケルトンが文書化されていること | GOVERNANCE を改訂する公開 ADR で単一実装 1.0 を受容 | 0.7.x–0.8.x |
| G14 | 外部コントリビューターによる ADR | 外部 | spec/decisions/NNNN-*.md | 著者がメンテナ以外で、Context/Decision セクションを行数比 60% 以上書いた ADR が 1 件以上 | 18 か月のタイムボックスを設け、その時点で外部執筆のクックブックレシピが 2 件以上、または外部執筆の適合性フィクスチャが 5 件以上 | 0.8 |
| G15 | 本番リファレンス事例 | 外部(メンテナ協力可) | IMPLEMENTATIONS.md の「Production users」行 | 名指しのユーザーが 1 件以上で、(a) 掲載許諾のある外部企業、または (b) メンテナ自身の雇用主が xl3 をスケジュール化された本番で稼働させ、公開事例研究を出している、のいずれかを満たす | — | 0.8 |
| G16 | メンテナ集合の拡大 | メンテナ | GOVERNANCE.md | ADR と実装 PR に対し承認/却下権を持つ人が 2 人以上 | GOVERNANCE への改訂で単一メンテナ 1.0 ガバナンスを明示的に受容 | 0.8 |
| G17 | 韓国語クックブック i18n の完了 | メンテナ | website/i18n/ko/.../guides/ | すべてのクックブックレシピに韓国語訳が存在 | — | 完了(0.6) |
| G18 | README に本番利用ケースを掲載 | メンテナ | README.md | 「アルファ」ステータスを具体的な本番リファレンス事例で置き換える(G15 と連動) | — | 1.0(G15 と同時) |
| G19 | 0.x → 1.0 移行ガイド | メンテナ | docs/migration-0.x-to-1.0.md | すべての挙動変更を記述、または追加のみであることを確認 | 追加のみと確認できれば CHANGELOG の注記に格下げ | 0.8 |
| G20 | SECURITY.md + 脅威モデル | メンテナ | SECURITY.md + 仕様改訂 | ZIP 爆弾 / 超巨大ワークブック / 数式実行に対するスタンスと制限 API を文書化 | — | 0.7.1 |
| G21 | ハードリミットを文書化(1.1 までストリーミングなし) | メンテナ | spec/evaluation.md | 行数 / メモリのハードリミット値と AbortSignal API を文書化 | — | 0.7.1 |
| G22 | API サーフェス — 内部モデル型を分離 | メンテナ | src/index.ts のエクスポート + STABILITY.md | convert/preview/analyze + 安定インターフェイスのみが @stable 指定、モデル/パーサ型は @experimental か xl3/internal に移動 | — | 完了(0.6) |
| G23 | RC ソーク | メンテナ | git タグ | RC を公開し、21 日以上のソーク(レビューフィードバックを受けて 7 日から延長)、クリティカル課題ゼロ | — | 0.9-rc |
| G24 | 「安定四半期」リリース後チェックリスト | メンテナ | リリースカレンダー | 上記の最終ゲートが ✅ となってから 90 日間の窓を設け、その間に仕様/API/エラーコードの破壊的変更が発生しない | 破壊的変更があればクロックを再スタート | 最終ゲート完了から 1.0 リリースまでの間 |
定義(テスト可能なかたちで)
- 外部コントリビューター(G14): PR オープン時点で
GOVERNANCE.mdのメンテナ集合に含まれず、かつマージ済み ADR コミットのCo-authored-by履歴にも含まれない人物。誤字修正の「ドライブバイ」編集は対象外。ADR フロントマターに著者として記載され、Context/Decision セクションを行数比 60% 以上執筆していること。 - 破壊的変更(G24、G23): (a) 公開 API サーフェスのスナップショット、(b) エラーコードカタログ(改名/削除/再利用)、(c) ADR の
accepted→rejectedへの変更や矛盾するステータス反転、のいずれかへの変更。パッチリリースおよび追加のみの ADR は四半期クロックをリセットしません。 - クリティカルバグ修正(G23 の RC 例外): (a)
convert()における暗黙のデータ損失、(b) ドキュメントとランタイム間のエラーコードカタログの不整合、または (c) 文字通りには実装できないacceptedADR の MUST 条項。メンテナは PR で (a)/(b)/(c) のいずれかを引用します。 - データ損失テスト(G24 のテスト可能形式): コーパスに専用の
data-loss/フィクスチャグループ(8 件以上)を持ち、暗黙の文字列化、numFmt の欠落、数式の書き換え、日付ラウンドトリップの経路を網羅し、すべてがリファレンス実装で合格すること。 - 四半期クロックの起点(G24 と G23 の関係): 90 日の四半期は最後のゲートが ✅ となった日からカウント開始します。RC の公開時点ではクロックは始まりません — RC を公開する前にクロックが始まっている必要があります。RC ソーク中に破壊的変更が発生した場合、ソーク(G23)も四半期(G24)もリセットされます。
バージョン別ステップ計画
ゲートベースであり、日付ベースではありません。カレンダー見積もりは削除しました — 各マイルストーンは、列挙されたゲートがクローズした時点でクローズします。
0.6.0 — 先送り実装、狭いスコープ
テーマ: もっともインパクトの大きい先送り実装ゲートをクリーンにクローズする。
クローズしたゲート: G5(@group/@subtotal 実装のみ — ADR-0040 PE の残りは 0.6.1 へ)、G17(韓国語クックブックの未翻訳 16/17 件)、G22(@group が新たな内部型を露出する前に API サーフェスを整理)。
以前の「0.6.0 ですべてを片付ける」計画はエンジニアリング実現性レビューに照らしてスコープが過大でした。ADR-0038 の実装単体でも、新しいディレクティブ、グループ境界のステートマシン、トランスフォームパスの分割、レンダラーの書き換え、グループスコープの集計評価という、パイプライン全体への組み込みを伴います。0.6.0 を分割することでマイルストーンを出荷可能なサイズに保ちます。