概要
--list/--list-file(fromList)アーカイブにおいて、Page List(Google Sheets の Page List シート、静的 HTML report、viewer の Pages 一覧)は config.roots(とそのリダイレクト/alias 解決先)にスコープを絞り込むようになった(#367)。一方、viewer の Summary 画面が参照する viewer_summary(getSummary())はこの絞り込みを通っておらず、content_items を直接集計している。
このため、fromList アーカイブでリスト外の内部ページが何らかの理由(crawler のバグ等、#369 参照)で content_items に混入した場合、Page List の件数と Summary の「総ページ数」等の集計値が食い違いうる。
想定される不整合の例
- Page List: リストの URL 数 + リダイレクト先の数(例: 1,808 件のリストなら 1,817 件)
- Summary の総ページ数:
content_items を素のまま集計するため、リスト外の混入ページも数に含まれる(例: 1,831 件)
利用者からは「Page List と Summary で数が合わない、どちらが正しいのか」という混乱の原因になりうる。
対応しなかった理由(#367 時点)
getSummary() は read model(buildViewerReadModel)経由だけでなく、read model を経由しない実行経路からも呼ばれる共通関数。#367 で作った「fromList のとき config.roots に絞る」ロジック(computeFromListAllowedPageIds)は read model 構築時専用に実装したため、getSummary() 側にも同じ絞り込みを効かせるには、そのロジックを read model の外でも呼べる形に一般化する必要があり、#367 の対象範囲を超えると判断し見送った。
対応案(要検討)
getSummary() の集計クエリに fromList アーカイブの config.roots スコープ絞り込みを追加する
computeFromListAllowedPageIds(packages/@nitpicker/query/src/viewer-read-model/compute-from-list-allowed-page-ids.ts)を read model 外からも呼べる場所に移動、または同等のロジックを共有する
- あるいは、揃えないことを仕様として明示し、viewer の Summary 画面に「fromList アーカイブでは Page List と一致しない場合がある」旨の注記を出す、という選択肢もある
関連
概要
--list/--list-file(fromList)アーカイブにおいて、Page List(Google Sheets の Page List シート、静的 HTML report、viewer の Pages 一覧)はconfig.roots(とそのリダイレクト/alias 解決先)にスコープを絞り込むようになった(#367)。一方、viewer の Summary 画面が参照するviewer_summary(getSummary())はこの絞り込みを通っておらず、content_itemsを直接集計している。このため、
fromListアーカイブでリスト外の内部ページが何らかの理由(crawler のバグ等、#369 参照)でcontent_itemsに混入した場合、Page List の件数と Summary の「総ページ数」等の集計値が食い違いうる。想定される不整合の例
content_itemsを素のまま集計するため、リスト外の混入ページも数に含まれる(例: 1,831 件)利用者からは「Page List と Summary で数が合わない、どちらが正しいのか」という混乱の原因になりうる。
対応しなかった理由(#367 時点)
getSummary()は read model(buildViewerReadModel)経由だけでなく、read model を経由しない実行経路からも呼ばれる共通関数。#367で作った「fromListのときconfig.rootsに絞る」ロジック(computeFromListAllowedPageIds)は read model 構築時専用に実装したため、getSummary()側にも同じ絞り込みを効かせるには、そのロジックを read model の外でも呼べる形に一般化する必要があり、#367の対象範囲を超えると判断し見送った。対応案(要検討)
getSummary()の集計クエリにfromListアーカイブのconfig.rootsスコープ絞り込みを追加するcomputeFromListAllowedPageIds(packages/@nitpicker/query/src/viewer-read-model/compute-from-list-allowed-page-ids.ts)を read model 外からも呼べる場所に移動、または同等のロジックを共有する関連
viewer_pagesにリダイレクト元行を追加、--listアーカイブを roots にスコープ絞り込み)--dedupe-cap+ auto-retry でリスト外ページがフルスクレイプされるバグ)