実装順
計画中の作業をどの順で作るか。リポジトリがすでに記録している依存グラフから読み取ったもの。
英語版が原文です。
このページの読みやすい版 — ステップごとに 1 つの成果、依存グラフなし — はマイルストーンです。このページはその順序の理由です。ロードマップは同じ作業をプロダクトの青写真に照らして、画面ごとに読み、スプリントのページは週ごとに追います。
features.mdx は作業に Planned の印をつけますが、どの順で作るかは何も述べません。情報は存在します。ただ、一度に一画面に現れることのない 4 箇所に散らばっているだけです。決定記録の **改訂は** トリガー、ベンチマークの既知のギャップ、リファクタリングの先送り節、そしてソース中の 20 個の ponytail: コメントです。
このページはそのグラフを一箇所で読みます。以下のほぼすべての辺はすでにリポジトリのどこかに述べられており、該当行を引用しています。1 つだけ読み取りではなく提案であるもの — 保留中のワイヤー契約の破壊的変更をまとめること — があり、それはそう明記してあります。
実際に計画されているもの
Section titled “実際に計画されているもの”badge-planned は features.mdx に 23 回現れますが、それは 23 個の機能ではありません。1 つはバッジを説明する凡例の段落です。もう 1 つは、それ以外は実装済みの項目の中にあるインラインのバッジ — 「リージョンブロックは拒否され、落とされない」で、拒否は出荷済みで、リージョンの生成だけが計画中です。
21 項目に、そのインラインの半分を加えて 22 項目。 以下では features.mdx に現れる順に番号を振り、インラインのものを R としています。
さらに 11 項目、22 から 32 の番号のものが、2026-09-17 にセールスページから加わりました。 トップページは目標の出力を描いており(ADR-0060)、そこに示されるブロックのフィールドのうち encode が返さないものは、それぞれ features.mdx の項目になりました。
22. 見出しブロックとセクションパス、23. ページの付属物、24. ページ区切りをまたいで続くブロック、25. ブロックとしての図、26. ブロックごとの OCR 補正、27. 定義語、
28. 相互参照、29. キャプション付きの画像ブロック。そしてプレイグラウンドの 3 項目、30. 実行を上に置き、ページと出力を並べる、31. ブロックに合わせて出力を読む、32. ページごとの経路ヘッダー。
間に差し込まず末尾に足したのは、ここまでの番号が他のページで引用されているとおりの意味を保つためです。Web アプリの画面ごとの項目は、ここではなくロードマップで順序づけます。
他のすべてはここにぶら下がります。それぞれリポジトリの中でブロッカーとして名指しされているものであり、ここで推測したものではありません。
根 1 — benchmarks/case.schema.json のラベル付き部分集合
Section titled “根 1 — benchmarks/case.schema.json のラベル付き部分集合”スキーマ 1.3 までベンチマークのどこにも正解がありませんでした。ケースはルーティングのラベルを持ち、出力については何も持たず、score.py が報告するのは何が生成されたかではなくどの機能が走ったかでした。いまは 10 のラベル付きスコープが expected_text と expected_fields を持ち、レポートはそれに対するテキスト再現率とフィールド精度を測ります。economics.quality は今もテーブルの定数です。この根に残るのはカバレッジです。採点されていない 6 つのメディアタイプにはラベルが無く、2 つの抽出器の差が出る文書にもありません。既知のギャップの項目がいま求めているのはそれで、以前の文言は何をすべきかと誰が待っているかを述べていました。
case.schema.jsonに期待テキストまたは期待フィールドを追加する。 小さなラベル付き部分集合について、それに対して測定された品質値を報告します。Office リーダーの比較が待っているのもこれであり、固有表現抽出のレーンが待っているのもこれです。
スキーマの変更は ADR-0035 の改訂トリガーをそのまま発火させました。2 つの NER レーンを見分けるラベルは、まだ負っているカバレッジです。これはまた、2 つ目の未解決の問いの「ラベル付き集合に対するランク付き測定」も解放します。さらに office-extraction/reader.py:75 の ponytail: も同様で、そのアップグレードは「ベンチマークのラベルが値ではなく整形された日付を必要とするとき」に条件づけられています。
根 2 — アトリビューション、そして PlanResult ラッパー
Section titled “根 2 — アトリビューション、そして PlanResult ラッパー”ADR-0027 はこれを好みではなく法則として述べています。
アトリビューションは選択に先立ちます。 システムが同定しないものを呼び出し元は名指しできないので、ADR-0026 のあらゆる選択トリガーは、これが先に着地することに依存します。
エンコード側のアトリビューションには何も要りません。EncodeResult はすでに自分の計画を包んでいます。計画側はブロックされており、リファクタリングはそのブロッカーをファイル中で最大のものとして記録しています。plan() は裸の RoutePlan を返し、plan_id はそのすべてのフィールドをハッシュするので、ハッシュを変えてはならない名前を置く場所がありません。PlanResult ラッパーがフェーズ 3 でそれを直し、ワイヤーを一度だけ壊しました。
根 3 — バックボーンの実測ベースライン
Section titled “根 3 — バックボーンの実測ベースライン”3 つの別々のページが同じ一文に条件づけられています。コアユーザー機能は「機能 5〜7 は、バックボーンが実測ベースラインを得るまで目標要件のままです」。ゴールは「バックボーンが実測ベースラインを得るまで待ちます」。そして 4 つ目の未解決の問いが、永続化とルーター/エグゼキューターの分離をそれに条件づけています。ベースラインはコーパス実行が生むもので、だからフェーズ 5 はあの位置にあります。
API の破壊的変更は 4 回ではなく 1 回
Section titled “API の破壊的変更は 4 回ではなく 1 回”これが提案であり、末端の並べ替えのどれよりも価値があります。
保留中の 4 つの変更がそれぞれ openapi.json と生成クライアントを動かします。ポートの分割(ADR-0029)、サンプリングの削除(ADR-0033)、PlanResult ラッパー、そして Granularity と BlockKind の重複解消 — 同じ 4 メンバーが 2 つの名前で存在しています。リファクタリングは自分の先送り一覧について、すでに規則を述べています。
これらのいずれを変えるにも
openapi.jsonと生成クライアントの再生成が必要です … API がどのみち動くときにだけ行ってください。
別々に出荷すれば破壊的リリース 4 回とクライアント再生成 4 回です。まとめれば 1 回です。このページの他のあらゆる決定は取り返しがつきますが、これだけは積み上がります。
この 4 つはフェーズ 3 でまとめて出荷されました。同じ規則が、いまはセールスページが約束するブロックに当てはまります。新しいブロックの種類(heading、paragraph、table、diagram、image、page_header)、section パス、表の cells、図の nodes と edges、そして references は、それぞれ openapi.json を動かします。提案: それらすべてのブロックの形を 1 つの ADR で決め、各種類を埋めるチャンカーが 1 つずつ着地するとしても、フェーズ 6 の契約変更は一度で出荷すること。
5 つのトラック。厳密に直列なのは Contract トラックだけです。破線の辺は、まだ発火していないトリガーを待っている作業なので、何も日程に載せません。
緑は完了、琥珀色は一部完了で、2026-09-08 時点です。フェーズ 0、2、3、4 は全体が main にあり、契約トラックは閉じ、衛生管理の監査の実行可能な 4 つの節も着地しました。フェーズ 1 はラベル付き部分集合と採点経路があり、採点されていない 6 つのメディアタイプの資料調達がまだ負債です。宣言済み言語の検出器はフェーズ 4 を離れて未定の一覧に入り、計測を待っています。塗られていないものは未着手です。
フェーズ 0 — 衛生管理
Section titled “フェーズ 0 — 衛生管理”トラック C、依存なし、今すぐ。
features.mdx の項目ではありませんが、他のすべてがこの上に建つ土台です。リファクタリングは監査全体をおよそ 450〜500 正味行と見積もっていました。それを運んだ 2 つのプルリクエストで計測すると、ソースファイルのみで 正味 99 行の削減、新規テスト 200 行、アーキテクチャ変更なしでした。
正しさに隣接する項目は完了し、呼び出しごとの I/O の節も完了しました。アルファベット順デバイス罠、重複したレジデンシー規則、最初の無制限な base64 デコード、別の分類器がすでに取ったファセットの分も課金される分類器、候補ごとに読み直される economics ファイル、ファサードのシングルトン、7 回組み直されるスナップショットの索引、エンコードごとに 2 回展開される計画。すでに発火していた ponytail: も一緒に消えました。計画なしのエンコードはソースを 2 回、エグゼキューターの中と plan() の中で読み込んで観測し、食い違いうる 2 つの SSRF 判定を生んでいましたが、プランナーのポートは呼び出し側がすでに持っているソースを受け取るようになりました。
削除と縮小が続きました。1 つの任意の Plugin 基底の後ろに入った 20 個の同一プロバイダー、ファサードの注入 kwargs とそれが孤児にした 2 つのプロトコル、相関フィルター、それぞれの複製のための 1 つの content_digest と 1 つの number、厳格モデルで検証される economics ファイル、そして frozen なオブジェクトに置き換わったレジストリの 14 幅のタプルです。リファクタリングに残るのは、ワイヤー契約を動かす 5 節と、却下されたものの記録である 6 節です。
フェーズ 1 — 測定の根
Section titled “フェーズ 1 — 測定の根”トラック A、依存なし、今すぐ、最もリードタイムが長い。
case.schema.json に小さなラベル付き部分集合の期待テキストと期待フィールドを追加し、それに対する品質値を報告します。完了、スキーマ 1.3。次に固有表現のラベルとスコープごとの言語を加え、インストール済みの抽出器レーンごとに採点して、ADR-0035 の順序を数にします。完了、スキーマ 1.4。6 スコープ、30 の固有表現で、順序はこの帳票のコーパスの上で実測になりました。「標準ワークロード」の分母は定義され報告されており、方法論が欠落として記録していた 3 ケースは合成のフィクスチャとして採用済みです。--extra vlm を持つインストールからの実行はコミット済みで、generic-vlm のベースラインの 1 ページが実行され、テーブルの値付けの隣に課金額が並びます。このフェーズのエンジニアリングの半分は完了です。残るのは下の調達の半分です。
このフェーズは 2 つに割ってください。半分はエンジニアリングではないからです。 スキーマとスコアリング経路は通常の作業です。コーパスの調達は外部要因でブロックされています。読めるのにスコアされていない 6 つのメディアタイプのうち 4 つは、その文書が公開されて存在しないように見えることが理由です — 日本政府の .docx 10 件はすべて w:sectPr を 1 つしか宣言せず(ページ規則は 2 つ必要)、公開されている text/plain 2 件はどちらも改ページ文字を持たず、e-Gov のカタログには TSV も TIFF もまったくありません。調達は初日に始めてください。後から縮められません。
このフェーズは 3. 難しい企業データを読むのほとんどでもあります。その計数規則は、このインストールが観測し、いずれかの機能が読み、かつ受理されたベンチマークケースがスコアして初めてメディアタイプが 1 件として数えられる、というものです。
フェーズ 2 — アトリビューション、エンコード側のみ
Section titled “フェーズ 2 — アトリビューション、エンコード側のみ”トラック B。
18. どのコンポーネントが答えたかをすべてについて述べる。 完了。トレース上の components 配列が、ローダー、sniffer、チャンカー、言語検出器、勝った分類器をディストリビューション名で名指しします。オブザーバーはその中に無く、この側には置けません。実行は観察しないので、その名前は計画レスポンスが与えるもので、フェーズ 3 の PlanResult ラッパーとともに着地しました。ここは計画どおりエンコード側だけです。
ここに来るのは、ADR-0026 の一族全体を塞き止めているからです。「2 つ目の実装が ID・広告・リクエストフィールドを義務づける」トリガーはすべてこれを待つので、選択系の機能を先に作ることは、システムが同定できないものの名前を作ることになります。
フェーズ 3 — 1 回の API 破壊的変更
Section titled “フェーズ 3 — 1 回の API 破壊的変更”トラック B。この計画全体の要。
協調した 1 リリース、openapi.json の再生成 1 回、クライアント再生成 1 回。
- 13. サンプリングが契約を離れる — 削除なので、このフェーズの中では最初に。
- 10. ページごと・チャンクごとの分類器。
- 11. ページとチャンクにまたがる固有表現抽出。
PlanResultラッパー。 フェーズ 2 の計画側を完成させ、根 2 を恒久的に解消します。完了。GranularityとBlockKindの重複解消。 完了。両端で 1 つのBlockKind。
フェーズ内の順序はサンプリング削除、ポート、実装です。ADR-0033 が、出荷済みの各分類器はこれまで要らなかったサンプリングの既定値を獲得すると述べており、それらのファイルをすでに開いているうちのほうが安いからです。
フェーズ 4 — 新しいポートの上の実装
Section titled “フェーズ 4 — 新しいポートの上の実装”トラック B からトラック D へ。
- 12. 日本語と英語の固有表現抽出、4 つのレーン。 ポートのためにフェーズ 3 を、正確さの主張のためにフェーズ 1 を必要とします。ADR-0035 の改訂トリガーは文字どおり「
case.schema.jsonが期待テキストまたは期待フィールドを得たとき」です。依存順に作ってください。patterns、vibrato、ONNX、LLM。 4 つすべて完了です。indx-ner-patterns、indx-ner-vibrato、indx-ner-onnx、indx-ner-llm。 - 10. ページごと・チャンクごとの分類器、その実装。出荷済みの 3 つの分類器を 3 つのフックすべてから宣言しました。完了。
- 15. モデルによるエンリッチメント。 どちらのポートの形でも覆えなかった残り、つまり要約とタグで、格子の 3 つ目の戻り値の形になりました(ADR-0037)。完了。床として
indx-enrich-extractive、モデルのレーンとしてindx-enrich-llm。 - 16. フォーマットがすでに宣言している言語は条件つきでここにあり、その条件は満たされていません。項目自身が「統計的な答えが短い文書で弱いと分かった場合の追随」と述べており、それを計測したものは何もありません。未定へ移し、その計測をトリガーとします。
フェーズ 5 — コーパスとスケール
Section titled “フェーズ 5 — コーパスとスケール”トラック D、フェーズ 1 のハーネスが必要。
- 19. コーパス実行と逐次結果 — 進捗、キャンセル、失敗したソースの隔離、CPU のみの比率と 1,000 文書あたりのコスト。これが根 3 を生むものです。
- 14. CPU でコーパスを分類する。 項目自身が「下のコーパス実行を待つ」と述べています。
- 1.
gs:とaz:のソース。 ローダー自体は何にも依存せず、手が空いていればもっと早いフェーズで作れます。ここに属するのはプレフィックスへのファンアウトだけです。「プレフィックスにまたがって広げるのは計画中のコーパス実行です」。
フェーズ 6 — 2 つ目のチャンカーができたら、チャンキング
Section titled “フェーズ 6 — 2 つ目のチャンカーができたら、チャンキング”フェーズ 1 とフェーズ 3 が必要。
この 4 つは 1 つの変更として着地し、順序は 2 方向から強制されます。
8. 文と段落のチャンク境界が 2 つ目の非フォールバックチャンカーを作ります。それが ADR-0012 のトリガーを発火させ、ADR-0026 により同じ変更の中で ID・広告・リクエストフィールドを義務づけます。それが 7. リクエストでチャンカーを名指しすると 6. リスト順を超えたチャンカー選択です。さらに 5. チャンクサイズ制御、8 が既定値を定めるレバーを加えます。どの境界が実際によく検索できるかはフェーズ 1 の測定であって、好みではありません。
これは固有表現抽出の後に来なければならず、それがこのグラフの罠です。 ADR-0030 の改訂トリガーはまさにこの変更を名指ししています。
チャンカーが書き換えたテキストを返すようになったとき — 空白の正規化、ハイフンの再結合、柱の除去 — その結果オフセットがブロックの持つ
textを指さなくなったとき。indx-chunker-pdfは今日すでに PDFium のランを行にマージしており、そのマージが最初に壊れる場所です。
スパンが存在する前に 8 を作ることは、アンカリング規則を動く的に対して設計することです。後に作れば、8 は ADR-0030 を、予定された既知の代価として見直しに開くことになります。
セールスページは、このフェーズを境界からブロックへと広げました。 8 と並んで、いまは次を持ちます。
22. 見出しブロックとセクションパス、段落を正しく終わらせるもの。
23. ページの付属物、ページをまたぐ繰り返しであり、したがって文書単位のパス。
24. ページ区切りをまたぐ続き、8 の段落と同じ文書単位のパスを必要とするもの。
そして 25. ブロックとしての図、工程系統図のグラフをページのメタデータから、ノードとエッジごとにボックスを持つチャンクへ移すもの — ChunkPiece は今日テキストか画像を持つだけなので、これが契約変更です。9. 表構造ブロックは未定の一覧を離れてこのフェーズに入ります。そのトリガーは行の消費者であり、セールスページとプレイグラウンドのホバーがいまそれです。
次に、それらのブロックの上でフェーズ 6b: 26. OCR 補正、27. 定義語、28. 相互参照、29. 画像の説明。4 つのうち 3 つはブロックのテキストを書き換えるかその中を指すので、再び ADR-0030 のトリガーです。したがってブロックの形が固まった後に来るのであって、決して同時ではありません。28 は指し示す先の見出しブロックと表ブロックも必要とし、29 は extra の後ろにあるモデル呼び出しで、エンリッチャーと同様にリクエストごとに名指しされます。
トラック E — Web アプリ、今すぐ
Section titled “トラック E — Web アプリ、今すぐ”30. 実行を上に、ページを出力の隣に、31. ブロックに合わせて出力を読む、32. ページごとの経路ヘッダーは、encode が今日返す行チャンク、プラン、来歴の上でのフロントエンドの作業なので、何もゲートしません。フェーズ 6 が着地するにつれて、より細かい対象(セル、ノード、接続線)を得ます。encode が段落・表・図のブロックを返すようになったとき、セールスページは 3 つのページの実際の実行を描き、ADR-0060 の例外は終わります。それがトラック E の最後の一歩であり、フェーズ 6 の目に見える証拠です。
フェーズ 7 — 実測ベースラインができた後
Section titled “フェーズ 7 — 実測ベースラインができた後”トラック D。根 3 はフェーズ 5 の終わりに満たされ、以下すべてを解放します。
- 17. エージェントが読める形でのエクスポートと 2. レシピと類似フォーマットの再利用を、まとめて。4 つ目の未解決の問いが理由を述べています。「レシピストアとエクスポート先が、状態を欲しがる最初の 2 つであり、だからそこで決定が下されます。もう一度先送りされるのではなく。」永続化の決定はここで、両方の消費者が見えている状態で、一度だけ下されます。2 度ではありません。
- 20. 運用面の成熟 — 認証、レート制限、メトリクス、パッケージング、冪等キー。自身のゲート: 「バックボーンのベースラインが実測されるまで、HTTP アダプターは薄いトランスポートのままです。」
- 21. 先送りされたアーキテクチャ — リージョン最適化、広いモダリティ網羅、RAG エクスポート、永続化、ルーターとエグゼキューターの分離デプロイ。
全体の割り当て
Section titled “全体の割り当て”33 個すべて。黙って落とされるものが無いように。
| フェーズ | トラック | 項目 |
|---|---|---|
| 0 · 衛生管理 | C、今すぐ | リファクタリング 3〜4 節 |
| 1 · 測定 | A、今すぐ | 3. 難しい企業データを読む。ラベル付き部分集合と既知のギャップ |
| 2 · アトリビューション | B | 18. どのコンポーネントが答えたか、エンコード側 |
| 3 · API 破壊的変更 | B | 13. サンプリング削除 · 10. ページとチャンクの分類器 · 11. 固有表現抽出 · PlanResult · Granularity/BlockKind |
| 4 · 実装 | B → D | 12. NER 4 レーン · 15. モデルによるエンリッチメント · 10. すべての単位で答える分類器 |
| 5 · スケール | D | 19. コーパス実行 · 14. CPU でコーパスを分類 · 1. gs: と az: |
| 6 · チャンキングとブロック | 1 と 3 の後 | 8. 文と段落 · 22. 見出しとセクション · 23. ページの付属物 · 24. 続き · 25. 図のブロック · 9. 表のブロック · 7. チャンカーを名指し · 6. 選択 · 5. サイズ制御 |
| 6b · ブロックの上の意味 | 6 の後 | 26. OCR 補正 · 27. 定義語 · 28. 相互参照 · 29. 画像の説明 |
| 7 · ベースライン後 | D | 17. エクスポート · 2. レシピ · 20. 運用面の成熟 · 21. 先送りされたアーキテクチャ |
| E · Web アプリ | 今すぐ | 30. 実行を上に、ページを出力の隣に · 31. ホバーで出力 · 32. 経路ヘッダー。その後セールスページが実際の実行を描く |
| 未定 | — | R. リージョン生成 · 4. Office ライブラリの採用 · 16. 宣言された言語 |
これらを日付に載せないでください。名指しされた出来事が起きたときに作ってください。
- R. リージョン生成、インラインのバッジ。「
RegionEvidenceは、リージョンがルートを変えることを測定が示すまで生成されないままであり、ここで発明すれば何も決めていないアドレスを公開することになります。」フェーズ 1 はその測定を生み得ますが、そのようには設計されていません。 - 4. Office リーダーをライブラリと比較して測るは境界にまたがります。測定はフェーズ 1 のものです。
openpyxl、python-docx、python-pptxを採用するかどうかは結果が決め、何が勝っても「ページ列挙は動かしてはならない」 — チャートシートを飛ばすライブラリは、その文書がルーティングされた計画と黙って食い違うことになります。 - 16. フォーマットがすでに宣言している言語。 2026-09-08 に先送り。これは ADR-0017 が名指しする 2 つ目の検出器なので、ADR-0026 を発火させ、同じ変更の中で ID・広告・リクエストフィールドを負います。項目自身が、統計的な検出器が短い文書で弱いと分かることを条件にしており、ラベル付きセットはまだ言語検出を採点していないので、そう述べたものは何もありません。トリガーはその採点です。それができるまで、この検出器はどの計測も求めていないシグナルのために契約変更を払うことになります。
この順序が拒んでいること
Section titled “この順序が拒んでいること”- NER のレーンから始めないこと。 最も目に見える項目であり、最初の 2 つの根の両方に依存します。先に作れば正確さの主張は反証不能で — ADR-0035 がすでにそう述べています — その下のポートもまだ動いています。
- アトリビューションの前にポート分割を出荷しないこと。 ADR-0027 の順序は助言ではありません。ADR-0026 のトリガーにそもそも順序がある理由です。
- ワイヤーの破壊的変更を 1 つずつ取らないこと。 ここで避けられる最大のコストです。