SiteGenerationResult.BuildPlan は、今回の生成で書き込む成果物と、その直接入力を表します。
キャッシュと選択実行での利用方法は差分ビルドを参照してください。
DocsSiteTemplate と BlogSiteTemplate は、ページや共通成果物ごとに別のノードを持ちます。
Markdown ページ、追加ページ、CSS、JavaScript、一覧、検索、RSS、サイトマップ、
llms.txt、favicon、manifest、ソーシャル画像の所有者は、実際の出力ファイルと一致します。
Docs のナビゲーションは、公開ページのルート、ラベル、並び順と、追加ページの ナビゲーション項目をまとめたコレクション入力です。各 Docs ページはこのノードに 依存するため、ページの追加や削除、タイトル、ルート、サイドバー設定の変更が ナビゲーションと前後ページを使う出力へ伝播します。
Blog の一覧、アーカイブ、タグ、検索インデックス、RSS、サイトマップは、それぞれが
実際に参照するページ項目だけをコレクション入力として持ちます。本文だけの変更では
投稿ページ、検索インデックスと検索ページが無効化され、日付やタグなどの変更では、
それらを使う集約成果物も無効化されます。検索ページは search-index.json の出力時の
UTF-8 バイト列に対する SHA-256 をキャッシュキーとして持ち、検索インデックスノードに
依存します。
favicon 入力はファイル内容の SHA-256 を保持します。値入力は Unicode 正規化をせず、
宣言されたコードポイントをそのまま比較します。
公開 API から内容を追跡する場合は、BuildInput.FromFile(path, fingerprint) または
BuildInput.FromCollection(id, fingerprint) を使います。フィンガープリントは空でない
決定的な文字列を指定し、値は Unicode 正規化やトリミングをせずに比較されます。
任意の ISiteTemplate は内部の依存関係を判断できないため、
template:legacy-opaque という単一の常時再ビルドノードとして扱います。
ジェネレーターが追加する共通成果物は generator:common が所有し、
不透明テンプレートノードに依存します。
SiteBuildPlan.GetInvalidatedNodes は、前回と今回の検証済み計画を比較します。
入力、依存関係、成果物宣言の変更と、依存ノードからの伝播を調べ、
ノード ID と理由を序数順で返します。削除されたノードは今回の実行対象ではないため、
結果には含めません。永続キャッシュやファイル削除は、後続の段階で扱います。
SiteGenerationResult.BuildReport は、ビルド時刻、環境、テンプレート型、
ノードごとの所有成果物、無効化理由、生成・未公開・古い成果物の削除結果を
相対パスで決定的に保持します。SiteGenerationOptions.PreviousBuildPlan を指定すると、
今回の計画との差分も含まれます。レポートは現在メモリ上の API のみで提供します。
出力ツリーへ自動保存しないため、ユーザーが管理するファイルを報告用ファイルで
上書きせず、失敗やキャンセル時も既存の出力と状態を保持できます。