質問データの自動検証
node tools/verify-question-dataset.mjs --enforce-quality-targets検証スクリプトは4つのJSONを一つのデータセットとして読み、構造・重複・管理値・品質目標を確認します。
| JSON | 構文、配列ルート、カードオブジェクト |
|---|---|
| ID | 空文字禁止、全Levelで一意 |
| 問題文 | NFKC・空白・疑問符を正規化した完全重複を検出 |
| Level | 1〜4の整数、配置ファイルとの一致 |
| カテゴリ | 12の管理された上位分類だけを許可 |
| topic | 全カードで空でない文字列 |
| detail | Level 3・4でdetail.text必須 |
| 視点 | Level 3・4で4つのperspectiveだけを許可 |
| role | 存在する場合は空でない文字列 |
| 警告 | 10のcontent_warning管理値、空配列・重複・未知値を禁止 |
| 出典 | title、HTTP(S) URL、配列構造 |
| 品質目標 | Level 2が80件以上、Level 4のaffected・actor・decision_makerが各20%以上 |
現在の検証基準
| レコード | 643件 |
|---|---|
| 構造エラー | 0件 |
| 出典未接続警告 | 398件。detail.textはあるがdetail.sourcesがないカード |
| 扱い | 警告を質問削除の理由にせず、事実主張の確認対象として記録 |
エラー0件は、質問内容の完全な中立性や事実の正確さを保証しません。構文検査と編集レビューは別の作業です。
JavaScriptと静的サイト
node --check select.js
node --check question.js
node --check finish.js
node --check warning.jsOmoiはビルド工程を持たないため、構文確認後にHTMLから実際のJSONを読み込み、URLパラメータ・Level・問題数・終了画面まで確認します。
ブラウザで確認する流れ
01
Levelと問題数を選ぶ
両方を選ぶまで次へ進めないこと、Level 4では警告画面へ進むことを確認します。
02
質問を表示する
選択Level以外のカードが混ざらず、選択数だけ表示されることを確認します。
03
長文とdetailを操作する
続き表示、スクロール、detail、出典、閉じる操作を確認します。
04
飛ばす・報告する
スキップで次へ進むこと、質問ID・Level・問題文・データファイル・URLがIssue Formへ入ることを確認します。
05
終了する
選択した数を終えるとfinish.htmlへ進むことを確認します。
公式カタログへの同期
OmoiリポジトリのJSONを正本とし、公開前にVIUK-Light公式サイトのassets/omoi/dataへ同一内容を同期します。
| 件数 | Level別・合計件数が一致する |
|---|---|
| ID | 正本とカタログのID集合が一致する |
| metadata | category、topic、perspective、role、content_warningを欠落させない |
| 参照情報 | カタログに反映日、参照ブランチ、commit、件数を表示 |
| キャッシュ | JSON・JavaScriptのバージョンを更新し、古いデータ表示を避ける |
公開チェックリスト
git diff --checkが成功する- 質問データ検証がエラー0件になる
- JavaScriptの構文確認が成功する
- デスクトップとモバイルで質問フローを確認する
- 長文スクロール、スキップ、Level 4警告、質問報告を確認する
- 公式カタログと正本JSONを比較する
- GitHub Pagesの状態が
builtになる - 公開URLで最新の件数・commit・キャッシュ版を確認する
失敗時の扱い
検証を通すために質問を隠したり、機能を削除したりしません。原因を構造、データ、表示、公開キャッシュに分け、正本を保ったまま修正します。既存の警告や別作業の変更は、今回の変更による新規エラーと分けて記録します。
