RATATOSKRATATOSK
ログイン

データを理解する

このページでは Ratatosk のデータモデルを説明します — change、それを分類する 3 つの 軸、深刻度、そして何が「要対応」なのか。API・MCP・フィードのドキュメントで使う用語は すべてここで定義します。

モデルは 1 つ、表面は複数。 ウェブ画面・REST API・MCP ツール・アラート・フィードは すべて同じ記録を同じ規則で使います。2 つの表面に「ここで自分がやるべきことは何件か」を 尋ねれば、同じ数が返ります。

change

change はリリースが行ったこと 1 つで、公式リリースノートから逐語的に取り出します。 記録された行はすべて change になります — 捨てるものはありません — そしてそれぞれが 3 つの軸を持ちます。

family — どの種類か

意味
security セキュリティ修正、またはセキュリティを理由とする依存関係の更新
breaking 既存の構成を壊しうるもの: 削除、既定値の変更、検証の厳格化、改名、API バージョン変更
deprecated 将来の削除の予告と、その時期

人が購読するときに選ぶ軸です。「セキュリティと互換性は知らせて、廃止予告は要らない。」

bucket — いまどう動くか

意味
action そのバージョンの全インストールに該当。実施してください
check applies_if が自分の構成と一致する場合だけ該当。まず条件を確かめてください
plan 将来に向けた予告。今日やることはありません
other 全件記録: 定型行と bot の依存関係更新

bucket はモデルが選ぶのではなく、保存されたフィールドからコードが計算し、 ウェブ画面・API・週次メールの裏で同じ規則が動きます。other はすべての表面で既定では 除外されます — 記録の大半を占めるからです。

applies_if — 自分に該当するか

文章ではなく真偽式です:

"applies_if": {
  "evaluable": true,
  "mode": "any_of",
  "clauses": [
    { "kind": "api", "name": "ScheduleJobAlpha1", "verb": "uses", "polarity": "present" }
  ],
  "raw": null
}

modeall_ofany_ofuniversal(全員該当)です。evaluabletrue なら、 文章を解釈する代わりに節を自分のマニフェストと突き合わせれば済みます。false の場合は raw に元の文が入ります — 持っていない構造を作り出す代わりに、無いと明示します。

change_kind

どの種類の変更だったか:

意味
added 無かったものが増えた
removed あった機能・オプション・フラグが消えた
deprecated まだ動くが削除を予告した
renamed 識別子の名前が変わった
value_changed バージョン・既定値・上限が動いた
behavior_changed 同じ構成なのに結果が変わった
constraint_changed 検証や上限が厳しく(あるいは緩く)なった
defect_corrected 欠陥を修正した

主なフィールド

  • matter_key — 根にある事案の同一性。リリースやブランチをまたいでも変わりません。 同じセキュリティロールアップが 5 つのブランチに着地してもキーは 1 つです。 /v1/matters/{key} が登場したすべてのリリースを返します。

  • subjects — この change が触れた識別子。自分のマニフェストや設定と名前で 突き合わせるためのものです。kind の値は次のとおりです。

    kind 意味
    api API グループ/バージョン(例: v1beta1 → v1 昇格の対象)
    crd カスタムリソース定義(CRD)名
    feature_gate フィーチャーゲート名
    flag コマンドラインフラグ(例: --listen-client-http-urls
    metric メトリクス名または接頭辞
    config_field 設定ファイルや chart values のフィールド名
    extension プラグイン・拡張点の名前
    dependency 依存ライブラリ・コンポーネント名
    cve CVE 識別子
    advisory セキュリティアドバイザリ ID(GHSA-… やプロジェクト/GitHub の公式告知)
    subsystem 単一の識別子で特定できない場合のサブシステム名
  • advisories — この change が引用した CVE・アドバイザリ ID。それぞれ台帳の 現在の深刻度を持ちます(下記参照)。

  • quote — 出典の文。一字一句そのまま写し、翻訳しません。だからすべての change は 原文にたどれます。

  • window — ノートが示した時期: introduced_indeprecated_inremoved_in

  • version_rank — 表記に依存しない並び替え用の配列(v0.42.0[0, 42, 0])。 プロジェクトのタグを数値として並べられない場合は null です(モノレポのタグ flagd/v0.16.1、チャネルのタグ lts-4081.3.8 など)。推測せず、区間比較から 除外します。

実際の例

API が返す実際の change です(ここで扱わないフィールドは省略):

{
  "change_id": "buildpacks:v0.40.9:83576398",
  "matter_key": "buildpacks/advisory:cve-2026-41178",
  "project": "buildpacks",
  "version": "v0.40.9",
  "version_rank": [0, 40, 9],
  "family": "security",
  "actionability": "act",
  "bucket": "action",
  "kind": "value_changed",
  "applies_if": { "evaluable": false, "mode": "universal", "clauses": [], "raw": null },
  "advisories": [
    { "id": "CVE-2026-41178", "severity": "medium" },
    { "id": "GO-2026-5158", "severity": "medium" }
  ],
  "subjects": [
    { "kind": "dependency", "name": "go.opentelemetry.io/otel", "name_full": "go.opentelemetry.io/otel", "role": "changed" },
    { "kind": "cve", "name": "cve-2026-41178", "name_full": "CVE-2026-41178", "role": "changed" }
  ],
  "window": { "introduced_in": "v0.40.9" },
  "quote": "`go.opentelemetry.io/otel` | v1.43.0 → v1.44.0 | GO-2026-5158 / CVE-2026-41178 — baggage header not length-capped | Medium",
  "source_url": "https://github.com/buildpacks/pack/releases/tag/v0.40.9",
  "seq": 1487
}

REST API と MCP ツールはこの JSON をそのまま返します。

深刻度

深刻度は change ではなくアドバイザリに付きます。advisories の各項目は公式の 出典(cve.org・GitHub アドバイザリ DB・OSV)から読んだ値を持ち、後から深刻度が 付与・改訂されれば読み直します。画面と API は再分析なしにそれに追随します。

advisories: [] は「評価なし」ではなく、リリースノートがアドバイザリ ID を 挙げなかったという意味です。

リリース要約は、そのリリースのアドバイザリの最大の深刻度を max_severity として 出します。

同じ CVE がプロジェクトごとに異なる深刻度を持つのは正常です — 出典ごとに自分の 文脈で評価するからです。

リリース詳細ページ

リリース詳細ページは公式リリースノートのすべての項目を記録し、そのうちあなたに 何かを求めるものを上の 3 つの層にまとめます。残りは最後の層に畳まれます。

  • 要対応bucket: action
  • 影響確認bucket: check。項目ごとに「次の場合に該当」の条件を示します。
  • 事前準備bucket: plan。それぞれ時期とともに (例: v1.9.0 から · v2.0 で削除予定)。
  • その他の変更 — 残りの記録を畳んだもの: 原文の引用を種類別にまとめます。 セキュリティが動機の項目は必ず独立したグループとして示し、埋もれさせません。

リリースノートが同じことを 2 回述べていれば、画面は 1 件として数えます — 記録は 両方残し、畳むのは画面です。

「要対応」の意味

ウェブのホーム・メールアラート・個人 RSS フィルタはすべて同じ基準を使います。 action の層を family で分けたものです。

  • security — セキュリティ修正。深刻度に関わらずすべて。
  • breaking — 互換性を壊す変更。
  • deprecated — 予告された削除。

ウェブホームの「要対応」ウィンドウは直近 7 日間(ローリング)です。メールアラートと 個人 RSS の type=securitytype=breakingtype=deprecated フィルタも同じ 3 つの family で絞ります — アラートとフィード を参照。

監査可能な沈黙

change が 0 件のリリースは欠落ではなく答えです。ノートは読まれ、その中にあなたの 対応を要するものが無かった、という意味です。リリース要約は記録した行数を notes_total として報告し続けるので、「読んで定型だった」と「読んでいない」を 区別できます。

時刻とタイムゾーン

Ratatosk はすべての時刻を UTC で保存・表示・集計します。リリース日は GitHub が 報告する公開時刻(published_at)です。

対象プロジェクト

Ratatosk は CNCF ランドスケープのプロジェクトを追跡します。現在の一覧と プロジェクトごとの分析履歴は /projects にあります。

次のステップ

  • このデータをプログラムから取得するには: REST API
  • エージェントにツールとして使わせるには: MCP サーバ