Skip to main content
Glama
Thecimal

Quantified Self MCP Server

Quantified Self MCPサーバー

ローカルのModel Context Protocol(MCP)サーバーで、LLM(例: Claude Desktop)があなたの個人の健康・財務データを照会できるようにします。すべては2つのローカルSQLiteファイルに保存され、あなたが制御するPythonプロセスがディスクから直接読み取ります。クラウドデータベースも、ダッシュボードも、サードパーティのサービスもありません。

含まれるもの

quantified-self-mcp/
├── server.py              # the MCP server (FastMCP) — 2 tools
├── init_db.py              # loads a CSV file into the local SQLite database
├── requirements.txt
├── .gitignore              # keeps data/ and .db files out of version control
└── sample_data/
    ├── health_sample.csv   # 30 days of sample data, so you can try it immediately
    └── finance_sample.csv  # ~2 months of sample expenses

init_db.pyを実行すると、server.pyの隣にdata/フォルダが作成され、health.dbとfinance.dbが含まれます。このフォルダはここには含まれていません。あなた自身のデータからあなたのマシン上で生成されるためです。

Related MCP server: apple-health-mcp

公開されているツール

ツール

戻り値

パラメータ(すべて任意)

read_health_data

毎日の歩数、睡眠時間、安静時心拍数

start_date、end_date(ISO YYYY-MM-DD; デフォルトは過去30日間)

read_finance_data

カテゴリ別の支出台帳、合計付き

start_date、end_date、category(デフォルトは過去90日間、すべてのカテゴリ)

どちらのツールも、一致する行に加えて計算されたサマリー(健康の平均/最小/最大、財務のカテゴリ別合計)を返すため、モデルが多数の行にわたって独自の集計を行う必要はありません。

1. 環境のセットアップ

Python 3.10+が必要です。

cd quantified-self-mcp
python3 -m venv .venv
source .venv/bin/activate      # Windows: .venv\Scripts\activate
pip install -r requirements.txt

2. データの読み込み

同梱のサンプルですぐに試せます:

python init_db.py health  sample_data/health_sample.csv
python init_db.py finance sample_data/finance_sample.csv

自分のデータを使うには、以下の列でCSVにエクスポートし、同じコマンドを自分のファイルに対して実行してください:

  • health CSV: date, steps, sleep_hours, resting_heart_rate

  • finance CSV: date, category, amount, description(descriptionは任意)

日付はISO形式(2026-08-23)にしてください。MM/DD/YYYYも受け付けられ、変換されます。金額/数値には$と,を含めることができます(例: $1,234.56)— これらは自動的に削除されます。問題のある行(不正な日付、非数値の金額、カテゴリ欠落など)はインポート全体を中断するのではなく、警告付きでスキップされます。最後に表示される行は、常に読み込まれた行数とスキップされた行数を示します。

init_db.py healthを再度実行すると、日付でアップサートされます(日を追加しても安全に再実行できます)。init_db.py financeは毎回新しい行を追加します。台帳には自然な一意キーがないためです。どちらのコマンドにも--replaceを追加すると、代わりにテーブルを最初に削除します。

3.(任意)単独でテストする

クライアントに組み込む前に、MCP Inspectorを開いてブラウザでツールを直接呼び出すことができます:

fastmcp dev inspector server.py

4. Claude Desktopに接続する

Claude Desktopは、ローカルのMCPサーバーをサブプロセスとして起動し、JSON設定ファイルに基づいてstdioで通信します:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

アプリから直接ジャンプできます: 設定 → 開発者 → 設定ファイルを編集。

mcpServersの下にエントリを追加し、絶対パスを使用してください。重要なのは、commandを作成した仮想環境内のPythonインタープリタに向けることで、裸のpythonではなく、ということです。Claude Desktopはサーバーを最小限の環境で実行するため、シェルのPATHやアクティブなvenvを確実に継承しません。そのため、裸の"python"はしばしば誤ったインタープリタ(またはまったくないもの)に解決され、サーバーは静かに起動に失敗します。

{
  "mcpServers": {
    "quantified-self": {
      "command": "/absolute/path/to/quantified-self-mcp/.venv/bin/python3",
      "args": ["/absolute/path/to/quantified-self-mcp/server.py"]
    }
  }
}

Windowsでは、通常次のようになります:

{
  "mcpServers": {
    "quantified-self": {
      "command": "C:\\absolute\\path\\to\\quantified-self-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\absolute\\path\\to\\quantified-self-mcp\\server.py"]
    }
  }
}

ファイルを保存し、Claude Desktopを完全に終了して再起動します(ウィンドウを閉じるだけでは不十分—設定変更を読み込むには再起動が必要です)。チャットボックスのハンマー/ツールアイコンを探して、quantified-selfが接続されていることを確認します。

FastMCPには、このファイルを編集するCLIショートカットも同梱されています— fastmcp install claude-desktop server.py --name "Quantified Self" — 試す価値があります(現在のフラグはfastmcp install claude-desktop --helpを実行)。ただし、上記の手動JSONは常に機能し、何か問題があればデバッグしやすいです。Anthropicには、ローカルMCPサーバー用の新しいワンクリック「デスクトップ拡張機能」パッケージ形式もあります。このような個人利用には必要ありませんが、JSON編集に不慣れな人とサーバーを共有したい場合に知っておくとよいでしょう。

5.(任意)Dockerで実行 / Glamaでホスト

#5-optional-run-it-in-docker--host-it-on-glama

Dockerfileが同梱されており、ローカルvenvの代わりにコンテナで実行したい人向けです。Glamaでのホスティングも含みます。Glamaは、リポジトリにDockerfileがあると、そこから直接ビルドします。

docker build -t quantified-self-mcp .
docker run -i --rm -v "$PWD/data:/app/data" quantified-self-mcp

イメージはPythonのみです(python:3.12-slim + pip install -r requirements.txt)。このプロジェクトにはNode.jsはどこにもありません。HEALTH_DB_PATHとFINANCE_DB_PATHは、コンテナ内の/data/health.dbと/data/finance.dbにデフォルト設定されるため、マウントされたボリューム(例: Glamaの/dataマウント)が再デプロイ後もデータベースを永続化します。上書きするには、server.pyの上部にある設定セクションを参照してください。

glama.jsonは意図的に最小限です— 単にGlamaにこのリポジトリを指すだけです。Dockerfileが、イメージのビルドと起動方法(python server.py、stdio経由)の実際のソースです。以前のバージョンのglama.jsonは、Dockerfileを使用する代わりに、汎用ビルドパック(裸のdebian:trixie-slimベースイメージと手動のpip installビルドステップとcmdArguments)を手動設定しようとしました。そのイメージにはPythonインタープリタが確実にプロビジョニングされておらず、プラットフォームはこのリポジトリに存在しないNode.jsエントリポイントの実行にフォールバックしました(Cannot find module '/app/server.js')。Dockerfileを同梱することで、その曖昧さは解消されます。

プライバシーモデル — 「ローカル」が実際に意味するもの

これについては正確にしておく価値があります。これがプロジェクトの要点だからです:

  • 両方のSQLiteデータベースは、このプロジェクトのdata/フォルダ内の、あなたのディスク上にのみ存在します。サーバーはネットワーク呼び出しを行わず、テレメトリもなく、どこにも同期しません。

  • server.pyは、SQLiteの読み取り専用モードで両方のデータベースを開きます(単に「書き込みを発行しない」だけでなく、接続は物理的に不可能です)。バグのあるプロンプトや悪意のあるプロンプトでも、どちらのツールもあなたのデータを変更できません。ターミナルからあなたが実行するinit_db.pyだけが、書き込みを行います。

  • MCPクライアントがこれらのツールのいずれかを呼び出すと、そのクエリに対して返された特定の行が、応答しているモデルに送信される会話の一部になります。これがMCPがモデルに情報を提供するメカニズムです。Claude Desktopをホスト型モデルで使用している場合、あなたが尋ねたデータのスライスは、そのターンでAnthropicに送信されることを意味します。チャットに入力する他のものと同様です。

  • つまり、ここでの「ローカル」とは、あなたの完全なデータセットがサードパーティのデータベースに保存または同期されることは決してなく、ツールが実際に呼び出されない限り何も送信されない— そしてその場合でも、その特定の呼び出しが返す行のみが送信され、データベース全体ではありません。完全にオフラインのエンドツーエンドを意味するものではありません。そのためには、MCP互換クライアントと組み合わせた完全にローカルなモデルランタイム(例: Ollama)が必要です。

トラブルシューティング

  • サーバーがClaude Desktopに表示されない: commandとargsが絶対パスを使用しているか、venvのPythonパスが実際に存在するか、アプリを完全に終了して再起動したかを確認してください。ログは~/Library/Logs/Claude(macOS)または%APPDATA%\Claude\logs(Windows)にあります。mcp-server-quantified-self.logに、このサーバー固有のstderrが表示されます。

  • ツールから「No health/finance database found」: そのデータセットに対して先にinit_db.pyを実行してください。ツールは意図的に空のデータベースを自動生成しないため、静かに空の回答が返ることはありません。

  • server.pyの編集が反映されていないように見える: Claude Desktopを再起動してください。サーバープロセスはメッセージごとではなく、アプリセッションごとに1回起動されます。

  • GlamaでのホスティングがCannot find module '/app/server.js'で失敗する: これは、デプロイがPythonではなくNode.jsランタイムにフォールバックしたことを意味します。このリポジトリにはserver.jsはありません。プラットフォームが確実にpython server.pyを実行するように、汎用ビルドパック設定ではなく、同梱のDockerfile(上記の「Dockerで実行 / Glamaでホスト」を参照)からビルドしてください。

拡張

自然な次のステップをいくつか紹介します。どれもまだビルドされていませんが、パターンが示す方向性です:

  • エントリをCSV/SQLの代わりにLLMを通じて追加できるように、ツール(log_expense、log_daily_metric)を書く。

  • より多くのメトリクス— 体重、ワークアウト、気分、水分摂取量— それぞれが別のテーブルと別の読み取りツールになります。

  • 予算対実績ツール。read_finance_dataの合計を、あなたが定義した目標と比較します。

Available Tools

20 tools
aggregate_measurementsPreview a source-priority resolution of a day's measurementsA
Read-onlyIdempotent

Preview what one day's raw measurements would roll up to if a conflicting metric were resolved using source_priority, alongside that day's actual current daily_metrics values.

daily_metrics is a database-maintained projection (see db/schema.sql): every log_measurement/import automatically keeps it in sync the moment it's written, using each metric's fixed aggregation method (sum/mean/last — see aggregation_rules, or get_baseline's "method" field). When a metric has measurements from more than one source on a day, the projection uses only one source's observations — never a blend of devices. It takes the highest-ranked present source in the stored source priority list (manual log_daily_metric entries rank first by default); if none is ranked, the source that observed the most hours of that day, then the one with the latest observation, then by name. This tool writes nothing: "aggregated" previews what the source_priority you pass would produce; "row" is the real, currently-stored value, which differs from "aggregated" whenever the stored priority differs from the one you pass.

If a metric has measurements from more than one source that day (e.g. an Apple Watch and a Garmin both logging resting_heart_rate), use get_metric_provenance first to see whether they actually disagree.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day to preview, formatted YYYY-MM-DD.
source_priorityNoOrdered list of source names, e.g. ["Apple Watch", "Garmin"]. For any metric with more than one source that day, the first name in this list that's actually present wins in "aggregated" and the other source's readings for that metric are dropped from that preview. Omit to use the stored priority list and the same fallback the stored projection uses. Never affects "row" — see above.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowYes
dateYes
aggregatedYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations' readOnlyHint/destructiveHint by explaining that the tool writes nothing, how the stored daily_metrics projection is maintained, the full source-selection fallback algorithm, how 'aggregated' differs from 'row', and a privacy caveat about data entering the conversation. This is rich behavioral context that an agent genuinely needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and structured into clear paragraphs covering mechanics, edge-case guidance, and privacy. It is somewhat long for a two-parameter read-only tool, and a small amount of content overlaps with the schema descriptions, but it is dense and every section earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the output schema exists, and the annotations already cover read-only/idempotent safety, the description supplies everything an agent needs: the exact computation semantics, the fallback ranking logic, the distinction between hypothetical and actual values, a cross-tool precondition, and a privacy note. No critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter coverage, including detailed descriptions of date format, source_priority ordering, omission behavior, and the fact that source_priority never affects 'row'. The tool description adds surrounding conceptual context about the stored priority list but does not need to add parameter syntax. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Preview what one day's raw measurements would roll up to if a conflicting metric were resolved using source_priority, alongside that day's *actual* current daily_metrics values.' It clearly separates the hypothetical 'aggregated' result from the real stored 'row' value, making the tool's unique role unmistakable among the many metric-reading siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete conditional guidance: if a metric has measurements from more than one source, 'use get_metric_provenance first to see whether they actually disagree.' This tells the agent when to check another tool before invoking this one. It does not exhaustively enumerate when not to use the tool or name all alternative tools, but the provided workflow is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_metric_trendCalculate metric trend
Read-onlyIdempotent

Fit a simple straight-line trend to one metric over a window and report its direction, slope (change per day), and r_squared (how well a straight line actually fits — low r_squared means "noisy," not "flat").

Use this tool when:

  • the user asks whether one metric is trending up/down/flat over a continuous window (e.g. "is my weight trending down?", "how has my HRV changed?").

Do not use this tool when:

  • the user wants two specific, separately-defined ranges compared (e.g. "this month vs last month") rather than a single continuous slope -> use compare_metric_periods instead.

  • the user asks what's typical/normal rather than which direction it's moving -> use get_baseline instead.

  • the user asks about isolated unusual days rather than an overall direction -> use detect_metric_anomalies instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 30 days before end_date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimYesEvidence and decision for the trend claim; read claim.decision before reporting it.
rangeYes
trendYes
metricYes
evidenceYesDEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence.
data_healthNoWhether the data behind this result is complete, current and trustworthy.
clear_metricClear a single metricA
DestructiveIdempotent

Blank out (set to null) a single metric for a single day, without touching that day's other metrics. The counterpart to log_daily_metric for undoing a bad value — e.g. a mood logged for the wrong day, or a weight entered with the wrong units. Clears everything recorded for that metric/day — including individual log_measurement readings or imported rows, not just a value log_daily_metric wrote directly — so the metric genuinely goes back to "nothing recorded" rather than falling back to a blended value from whatever else is left.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day to clear a field for, formatted YYYY-MM-DD.
fieldYesWhich metric to blank out. One of: steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowNo
noteNo
clearedYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations' destructiveHint by detailing the full scope of destruction: it clears everything recorded for that metric/day, including individual log_measurement readings and imported rows, not just values written by log_daily_metric. It also adds a privacy note about data becoming part of the conversation sent to a model, which annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main behavioral statement is front-loaded and precise, and the extra detail about clearing all related rows is necessary for a destructive tool. The privacy note adds relevant context but is somewhat tangential to invocation, keeping this from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive operation, the description fully covers what the tool does, the scope of the destruction, and a privacy consideration. The output schema exists, so return-value details are not the description's responsibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already fully documents both parameters. The description reinforces the behavior ('set to null', 'single metric', 'single day') but does not add meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a precise verb ('blank out / set to null') and identifies the exact resource ('a single metric for a single day'), making the operation unmistakable. It also distinguishes itself from the sibling log_daily_metric by explicitly naming it as the counterpart for undoing a bad value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when to use this tool: for undoing a bad value, with concrete examples like a mood logged for the wrong day or weight entered with wrong units. It does not enumerate explicit when-not-to-use cases or alternative tools, but the context is clear enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_metric_periodsCompare two periods
Read-onlyIdempotent

Compare one metric's average between two date ranges — e.g. "this month vs. last month" or "since starting a new medication vs. before." The two ranges may be any length and need not be adjacent or equal in size; each is summarized with its own baseline first.

Use this tool when:

  • the user names or implies two distinct date ranges to weigh against each other (e.g. "compare my average steps this month to last month", "since starting a new medication vs. before").

Do not use this tool when:

  • there's only one continuous window and the question is about direction over time, not two discrete ranges -> use calculate_metric_trend instead.

  • the user wants "what's normal" for a single window, not a before/after comparison -> use get_baseline instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.
period_a_endYes
period_b_endYes
period_a_startYes
period_b_startYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimYesEvidence and decision for the period comparison claim; read claim.decision before reporting it.
deltaNo
metricYes
period_aYes
period_bYes
pct_changeNo
data_healthNoWhether the data behind this result is complete and current (the weaker of the two periods).
period_a_statsYes
period_b_statsYes
period_a_evidenceYesDEPRECATED: identical to claim.evidence_a. Use claim.decision, not a standalone confidence field.
period_b_evidenceYesDEPRECATED: identical to claim.evidence_b. Use claim.decision, not a standalone confidence field.
detect_metric_anomaliesDetect metric anomalies
Read-onlyIdempotent

Flag days where one metric deviated sharply from its own baseline over the window, using a median/MAD-based modified z-score rather than a mean/stdev z-score — more robust for short, noisy personal-health series, where the mean/stdev version is easily dragged around by the very outliers it's supposed to catch.

Use this tool when:

  • the user asks whether anything looked unusual/off/weird on particular days for one metric (e.g. "was there anything unusual about my sleep last month?").

Do not use this tool when:

  • the user wants a general sense of what's typical, with no interest in flagging specific days -> use get_baseline instead.

  • the user asks about a steady increase/decrease over time rather than isolated spikes/dips -> use calculate_metric_trend instead.

  • the user already has one specific date in mind and wants the full "why" behind it (baseline, anomaly, trend, and correlations together) -> use explain_metric_change instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
thresholdNoModified z-score cutoff. 3.5 (the default, Iglewicz & Hoaglin's standard value) flags only clear outliers; lower it (e.g. 2.5) to see more borderline days.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 90 days before end_date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimYesEvidence and decision for the anomaly claim; read claim.decision before reporting it.
rangeYes
metricYes
evidenceYesDEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence.
anomaliesYes
thresholdYes
data_healthNoWhether the data behind this result is complete, current and trustworthy.
explain_metric_changeExplain a metric change
Read-onlyIdempotent

Build an evidence bundle for "why did my look like that on ?": that day's value against a 90-day baseline, whether it qualifies as an anomaly, the trend leading into it, and any other metric that correlates with it strongly enough to be worth mentioning. Returns facts, not an explanation — turning "sleep was 2.6 stdev below baseline and resting heart rate correlates at r=0.71" into an actual answer for the person is what the calling model should do with these facts, not something this tool guesses at itself.

Do not use this tool when:

  • scanning across many metrics for what changed lately, without a specific metric/date in mind -> use get_recent_changes instead.

  • you only need one piece of this bundle (just the baseline, just the trend, just anomalies, or just a correlation) rather than the full why-explanation -> use get_baseline, calculate_metric_trend, detect_metric_anomalies, or find_metric_correlation directly instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day to explain, formatted YYYY-MM-DD.
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateYes
trendYes
valueNo
metricYes
baselineYes
sessionsNo
is_anomalyYes
data_healthNoWhether the data behind this result is complete and current (the weaker of the two windows).
trend_claimYesEvidence and decision for the 30-day trend leading into this day, assessed separately from the headline claim. Read trend_claim.decision before reporting it.
baseline_claimYesEvidence and decision for the 90-day baseline statistics reported in "baseline" (and quoted in narrative_facts). Read baseline_claim.decision before stating what is typical for this metric; it is one of the components overall_decision is the weakest of.
baseline_rangeYes
headline_claimYesEvidence and decision for the headline claim: this day's value against its 90-day baseline. Read headline_claim.decision before reporting it.
narrative_factsYes
conflicting_daysNo
modified_z_scoreNo
overall_decisionYesThe single decision governing this whole result: weakest-of-N over the headline claim (headline_claim.decision), the trend (trend_claim.decision), and every surfaced correlation's own decision. If any component is insufficient/suggestive, the composite is too — report overall_decision.tier and must_state rather than treating the headline claim as though the trend and correlations couldn't drag it down.
correlated_metricsYes
export_health_data_csvExport health data to CSVA
DestructiveIdempotent

Write daily health metrics for a date range to a CSV file on disk, next to the database, instead of returning every row through this tool's own result.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

Unlike read_health_data, this is not capped at MAX_ROWS_RETURNED and the row values themselves are not included in this tool's response — only the resulting file's path and a row count are. That means a long-range export doesn't have to pass through a cloud LLM's context just to produce a file you can open yourself (in a spreadsheet, a notebook, another tool, etc.). Any metric listed in HEALTH_PRIVATE_FIELDS is still written as an empty cell in the file, since those fields shouldn't leave the database at all, not just stay out of the model's context.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 30 days before end_date. Ranges over ~10 years are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
rangeYes
rows_exportedYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true and readOnlyHint=false, and the description fully supports this: it states it writes to disk, does not return row values, and only provides file path and row count. It goes beyond annotations by disclosing the privacy implication (data becomes part of the conversation) and the handling of HEALTH_PRIVATE_FIELDS as empty cells. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but each paragraph earns its place: purpose, privacy note, and comparison with read_health_data. It is front-loaded with the main action and uses structured paragraphs. Slightly verbose but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that writes to disk and has privacy implications, the description covers all necessary aspects: side effects, return value (path and row count), difference from read_health_data, private field behavior, and privacy guidance. The output schema exists, so return format is already specified. An agent has everything needed to decide and call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage: both start_date and end_date have clear descriptions with formatting and defaults. The description adds no new semantic detail about the parameters beyond 'date range', so it stays at the baseline for well-covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Write daily health metrics for a date range to a CSV file on disk, next to the database.' It clearly distinguishes itself from read_health_data by contrasting the output (file path vs. rows) and the row cap. An agent immediately knows what this tool does and how it differs from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names the alternative (read_health_data) and explains the differentiator: this tool is not capped at MAX_ROWS_RETURNED and avoids passing data through the model context. It also advises treating the export like pasting into a chat if the model is cloud-based. This gives the agent clear conditions for choosing this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_metric_correlationFind correlation between two metrics
Read-onlyIdempotent

Compute the Pearson correlation between two metrics over the same window, joined by date. Correlation, not causation: a strong r just means the two moved together, not that one caused the other.

Use this tool when:

  • the user names or implies two different metrics and asks whether they move together (e.g. "does my sleep affect my mood?", "did my HRV change after I increased my workouts?").

Do not use this tool when:

  • only one metric is in question -> use get_baseline, calculate_metric_trend, or detect_metric_anomalies instead, depending on what's being asked about that one metric.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
lag_daysNoShift metric_b this many days later before joining — 1 tests whether metric_a today predicts metric_b tomorrow (e.g. "does poor sleep tonight predict lower steps tomorrow?"). 0 (default) compares same-day values.
metric_aYes
metric_bYes
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 90 days before end_date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nYes
rNo
noteNo
claimYesEvidence and decision for the correlation claim; read claim.decision before reporting it.
lag_daysYes
metric_aYes
metric_bYes
evidence_aYesDEPRECATED: identical to claim.evidence_a. Use claim.decision, not a standalone confidence field.
evidence_bYesDEPRECATED: identical to claim.evidence_b. Use claim.decision, not a standalone confidence field.
data_healthNoWhether the data behind this result is complete and current (the weaker of the two metrics).
get_baselineGet metric baseline
Read-onlyIdempotent

Compute "what's normal" for one metric over a window: mean, median, and standard deviation. This is the number every other analytics tool below measures against, so a wider window (60-90+ days) gives a more stable baseline than the 30-day default read_health_data uses.

Use this tool when:

  • the user asks what's normal/typical/usual for one metric (e.g. "what's normal for my resting heart rate?"), with no particular day or direction of change in mind.

Do not use this tool when:

  • the user asks whether a metric is going up/down over time -> use calculate_metric_trend instead.

  • the user asks whether specific days looked unusual -> use detect_metric_anomalies instead.

  • the user wants two ranges compared against each other -> use compare_metric_periods instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms.
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 90 days before end_date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
claimYesEvidence and decision for the "what's normal" claim; read claim.decision before reporting it.
rangeYes
metricYes
baselineYes
evidenceYesDEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence.
data_healthNoWhether the data behind this baseline is complete, current and trustworthy.
get_data_statusCheck how current the data is
Read-onlyIdempotent

Report how current and complete the database is: latest data date, coverage window, gaps, last successful import, and an overall status of CURRENT, STALE, INCOMPLETE, NO_DATA or IMPORT_FAILED. Check this before drawing conclusions from any analysis, and say so when the status is anything other than CURRENT.

Use this tool when:

  • the user asks how up to date their data is, or whether an import is needed.

  • you are about to interpret recent data and want to know whether it is fresh enough to trust.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
stale_after_daysNoHow many days the latest data may trail today before the status becomes STALE. Defaults to 2.

Output Schema

ParametersJSON Schema
NameRequiredDescription
gapsYes
as_ofYes
actionNo
reasonNo
sourceNo
statusYes
coverageYes
gap_countYes
days_behindNo
latest_dataNo
missing_daysYes
latest_importNo
days_with_dataYes
stale_after_daysYes
last_successful_importNo
get_import_statusList recent imports
Read-onlyIdempotent

List the most recent import runs, newest first: which importer, the source file's name and SHA-256, whether the run succeeded, failed or was interrupted, and how many rows were loaded, skipped and written.

Use this tool when:

  • the user asks what was imported and when, or why an import did not go through.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many import runs to return (1-50). Defaults to 5.

Output Schema

ParametersJSON Schema
NameRequiredDescription
importsYes
get_metric_historyGet metric history
Read-onlyIdempotent

Read one metric's day-by-day values, without the other six metrics read_health_data always includes. Use this when you only care about a single metric (e.g. before calling get_baseline or calculate_metric_trend yourself) and don't need the full multi-metric payload.

Use this tool when:

  • the user wants one specific metric's history/trend over time (e.g. "show my weight over the last 30 days", "how has resting heart rate changed this month").

Do not use this tool when:

  • the request is broad/general, across multiple metrics at once -> use read_health_data instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYesOne of steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms. Rejected if configured as private via HEALTH_PRIVATE_FIELDS.
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 30 days before end_date.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rangeYes
metricYes
pointsYes
evidenceYesCoverage/quality of the data a single-metric analytical result is based on. See evidence.build_evidence for how each field is computed.
data_healthNoWhether this history is complete, current and trustworthy; see DataHealth.
get_metric_provenanceBreak a metric down by sourceA
Read-onlyIdempotent

Show one metric's raw measurements for one day, broken down by which source reported them — answers "which one is correct?" when e.g. an Apple Watch and a Garmin disagree on resting heart rate, instead of silently averaging two different devices into one number.

Do not use this tool when:

  • the user just wants a plain day-by-day history for the metric, with no need to see the per-source breakdown -> use get_metric_history instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day to inspect, formatted YYYY-MM-DD.
metricYesName of the metric to inspect, e.g. "resting_heart_rate".

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateYes
metricYes
sourcesYes
conflictYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive behavior, and the description adds meaningful context beyond that: it explains the data becomes part of the conversation and may be sent to a cloud model. This is a real behavioral disclosure about data flow and privacy that an agent could not infer from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured: purpose leads, a do-not-use block clearly distinguishes the sibling tool, and the privacy note is placed at the end. It is longer than strictly necessary because of the privacy explanation, but each paragraph earns its place and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple two-parameter input, full schema coverage, output schema presence, and complete annotations, the description covers what an agent needs to call this tool correctly. The only minor gap is that it does not spell out the exact return shape or whether source values are normalized, but the output schema covers that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the two parameters, including formats and examples for `date` and `metric`. The description does not add much beyond the schema, but the terms 'one day' and 'metric' reinforce the single-day, single-metric scope. The schema does the heavy lifting, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete action and resource: 'Show one metric's raw measurements for one day, broken down by which source reported them.' It directly distinguishes the tool from the sibling `get_metric_history` by emphasizing the per-source breakdown and the 'which one is correct?' use case. The verb and scope are specific enough that an agent can tell what it is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the alternative: 'Do not use this tool when... use `get_metric_history` instead.' It also gives a concrete triggering scenario (e.g., Apple Watch and Garmin disagreeing on resting heart rate), making both when-to-use and when-not-to-use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_changesGet recent changes
Read-onlyIdempotent

Scan every (non-private) metric for what's changed lately: a recent period vs. the four-times-as-long period before it (period-over-period shift), any anomalies inside the recent period, and a trend over it. The single best tool to start a "how have I been doing?" conversation with — it does the scanning across all metrics that would otherwise take one get_baseline/detect_metric_anomalies/calculate_metric_trend call per metric.

Do not use this tool when:

  • the user already named a specific metric and wants the full why-bundle for it (value, baseline, anomaly flag, trend, correlated metrics) -> use explain_metric_change instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLength of the "recent" window in days (default 7). The comparison baseline is the 4x-as-long period immediately before it, so a 7-day recent window compares against the preceding 28 days.

Output Schema

ParametersJSON Schema
NameRequiredDescription
changesYes
data_healthNoWhether the data behind these changes is complete and current (the weakest metric window).
recent_rangeYes
baseline_rangeYes
log_daily_metricLog a daily metricA
DestructiveIdempotent

Record one or more health metrics for a single day, creating that day's row if it doesn't already have one.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

Only the metrics you pass are written — anything left as null is not touched, so logging just today's mood doesn't erase today's steps if they were set earlier. To undo a value logged by mistake, use clear_metric rather than trying to overwrite it with a placeholder.

Use this tool when:

  • the user is recording a simple day-level value for one of the nine fixed metrics below (e.g. "log my weight as 82 kg", "I walked 8,000 steps today").

Do not use this tool when:

  • the observation needs its own timestamp/source, or the day may have more than one reading of the same metric -> use log_measurement instead.

  • it's a workout/exercise session -> use log_workout_session instead (workout_minutes here is just the daily total, not the session itself).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day to log, formatted YYYY-MM-DD.
moodNoMood rating on a 1-10 scale.
stepsNoStep count for the day. 0-200,000.
hrv_msNoHeart rate variability in milliseconds. 0-300.
water_mlNoWater intake in millilitres. 0-10,000.
weight_kgNoBody weight in kilograms. 1-500.
heart_rateNoNon-resting heart rate reading in bpm. 20-250.
sleep_hoursNoHours of sleep. 0-24.
workout_minutesNoMinutes of exercise. 0-1,440.
resting_heart_rateNoResting heart rate in bpm. 20-250.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowYes
loggedYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the crucial merge behavior: null metrics are untouched and only passed metrics are written. It also adds a privacy note about data becoming part of the conversation and suggests clear_metric for undo. These are meaningful behavioral details that do not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a front-loaded core statement, a privacy section, a merge-behavior section, and explicit usage conditions. Despite its length, every section addresses a real agent decision and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with 10 parameters, the description covers sibling selection, partial-update semantics, privacy implications, and recovery via clear_metric. An output schema exists, so return-value details are not necessary. The tool is fully specified for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all 10 parameters with units and ranges, so the baseline is 3. The description adds context like 'workout_minutes here is just the daily total' and the null-not-touched rule, but does not need to repeat the schema's per-parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Record one or more health metrics for a single day', and explains the row-creation behavior. It also explicitly distinguishes itself from siblings like log_measurement and log_workout_session, so an agent can tell them apart without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description has clear 'Use this tool when' and 'Do not use this tool when' sections with concrete conditions and named alternatives. It routes timestamped readings to log_measurement and workout sessions to log_workout_session, leaving no ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_measurementLog a raw measurementA

Record a single raw observation — one metric, one value, one point in time — rather than a whole day's summary. Use this instead of log_daily_metric when the source, exact time, or the fact that there were multiple readings that day matters (e.g. three separate workouts, or a wearable's periodic heart-rate samples).

Use this tool when:

  • recording one timestamped observation where the exact time, source, or possibility of multiple same-day readings matters (e.g. "record my blood pressure reading from my cuff at 7am").

Do not use this tool when:

  • it's just a single end-of-day value for a fixed metric -> use log_daily_metric instead.

  • it's a workout/exercise session -> use log_workout_session instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoUnit the value is in, e.g. "bpm", "kg". Optional.
valueYesThe numeric reading.
metricYesName of the metric, e.g. "resting_heart_rate", "steps". Not free-form: must already have an entry in the aggregation_rules table (steps, sleep_hours, resting_heart_rate, weight_kg, workout_minutes, mood, water_ml, heart_rate, hrv_ms, out of the box) — daily_metrics is a database-maintained projection over measurements (see db/schema.sql), so every metric written to it needs a known aggregation method (sum/mean/last) or there would be nothing telling the projection how to roll same-day readings up. metrics_schema lists the current set.
sourceNoWhere this came from, e.g. "Apple Watch", "manual". Optional.
timestampYesWhen the observation was taken, YYYY-MM-DD or a full ISO 8601 timestamp (YYYY-MM-DDTHH:MM:SS).
source_typeNoCategory of source, e.g. "wearable", "manual", "app". Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
measurementYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, openWorldHint=false), so the bar is lower. The description still adds genuinely non-obvious context the annotations cannot carry: the privacy disclosure that returned data enters the conversation sent to the calling client's model. It does not, however, discuss duplicate/repeat handling, which the idempotentHint=false annotation implies is a real concern for a timestamped-observation writer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the sibling contrast, and the when/when-not bullets are scannable. The 'Use this tool when' bullet largely restates the opening paragraph, and the multi-sentence privacy note, while valuable, is disproportionately long for a logging tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values need not be explained. The description covers selection criteria, exclusions, sibling routing, the metric-name constraint, and a privacy caveat — everything an agent needs to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (unit, value, metric, source, timestamp, source_type) is already documented in the schema, including the aggregation_rules constraint on metric. The description adds no format or constraint detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Record a single raw observation — one metric, one value, one point in time') and immediately contrasts it with the daily-summary alternative. An agent can distinguish it from log_daily_metric and log_workout_session without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use this tool when' and 'Do not use this tool when' sections, each with concrete examples ('three separate workouts', 'record my blood pressure reading from my cuff at 7am') and named alternatives (log_daily_metric, log_workout_session). This is about as complete as routing guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_workout_sessionLog a workout sessionA

Record one workout as a structured event — activity, timing, intensity, and heart-rate response — rather than folding it into the day's workout_minutes total. Use this alongside (not instead of) log_daily_metric/log_measurement for workout_minutes: this is what lets explain_metric_change say what the workout was, not just how long it ran. A day can have more than one session; each call adds a new row.

Use this tool when:

  • the user describes an actual workout/exercise session (e.g. "I went running for 40 minutes", "log today's strength workout").

Do not use this tool when:

  • the user only wants to record the day's total exercise minutes as a single number, with no activity type/timing/intensity -> use log_daily_metric (workout_minutes) or log_measurement instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesThe day the workout happened, YYYY-MM-DD.
notesNoFree-text notes, e.g. route or how it felt. Optional.
sourceNoWhere this came from, e.g. "Apple Watch", "manual". Optional.
intensityNoOne of "low", "moderate", "high". Optional.
start_timeNoWhen it started, HH:MM (24-hour) or a full ISO timestamp. Optional.
activity_typeYesWhat kind of workout, e.g. "running", "cycling", "strength". Free-form.
avg_heart_rateNoAverage heart rate during the workout, bpm. Optional.
max_heart_rateNoPeak heart rate during the workout, bpm. Optional.
duration_minutesYesHow long it lasted, in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sessionYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=false, etc., but the description adds important behavior: 'each call adds a new row' clarifies non-idempotence specifics, and the privacy note about data becoming part of the conversation sent to the model is unique contextual disclosure. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a strong first sentence, followed by structured usage guidance and a privacy note. It is longer than the minimal two-sentence example, but every section contributes value given the tool's complexity and need to disambiguate from siblings. The explicitly labeled sections compensate for length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete enough for a 9-parameter tool with 100% schema coverage and an output schema. It covers when to use, when not, privacy implications, and multi-session behavior. No significant context is missing for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so the schema fully documents each of the 9 parameters. The description adds a high-level grouping ('activity, timing, intensity, heart-rate response') but does not provide parameter-level semantics beyond the schema. Baseline of 3 applies since schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Record one workout as a structured event — activity, timing, intensity, and heart-rate response.' It explicitly contrasts with log_daily_metric/log_measurement for workout_minutes and explains the relationship to explain_metric_change, distinguishing it from siblings without the need to open schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit 'Use this tool when' and 'Do not use this tool when' sections with concrete examples ('I went running for 40 minutes') and names the exact alternatives (log_daily_metric / log_measurement) for the excluded cases. This goes beyond mere context to actionable selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_health_dataRead health dataA
Read-onlyIdempotent

Read daily health metrics from the local database: steps, sleep hours, resting heart rate, weight (kg), workout minutes, mood, and water intake (ml).

Use this tool when:

  • the request is broad/general, across multiple metrics at once (e.g. "what health data do I have?", "overview of this week").

Do not use this tool when:

  • the user wants one specific metric's history/trend over time -> use get_metric_history instead.

  • the user wants raw/individual measurement rows (timestamp, source) -> use read_measurements instead.

  • the user wants workout sessions specifically -> use read_workout_sessions instead.

  • the user is asking why something changed, or wants a trend, anomaly, comparison, or correlation -> use explain_metric_change (one metric, one date) or get_recent_changes (scan across all metrics) instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoLast day to include, formatted YYYY-MM-DD. Defaults to today.
start_dateNoFirst day to include, formatted YYYY-MM-DD. Defaults to 30 days before end_date. Ranges over ~10 years are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
rangeYes
summaryYes
coverageYesMulti-metric coverage for a Layer-1 result spanning several metrics at once. See evidence.build_coverage_summary for how each field is computed; unlike Evidence (one metric, gaps/freshness/recent_gap), this reports a coverage_percent per metric side by side.
truncatedYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds meaningful context beyond that: the data returned is daily aggregated metrics (not raw rows), the database is a local SQLite file, and returned data may be sent to the configured model — a privacy-relevant behavior an agent should weigh before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but every section earns its place: a front-loaded metrics list, explicit routing rules, and a privacy note. The use of bullets under 'Use when' and 'Do not use when' makes the guidance scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the crowded sibling set (17 tools), the description fully disambiguates this tool from get_metric_history, read_measurements, read_workout_sessions, explain_metric_change, and get_recent_changes. Combined with rich annotations, full schema coverage, and an output schema, nothing needed to select or invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents start_date and end_date with defaults and formatting. The description adds no new parameter-level detail, but under high schema coverage the baseline of 3 applies; no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read daily health metrics from the local database,' and lists the exact metrics covered (steps, sleep, heart rate, etc.). It also distinguishes itself from closely related siblings (get_metric_history, read_measurements, read_workout_sessions), so an agent knows exactly what this tool does and does not cover.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool when' section explicitly directs broad/general multi-metric requests to this tool, and the 'Do not use this tool when' section names four alternatives with the exact conditions that should route elsewhere. This is the strongest possible usage guidance — no inference is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_measurementsRead raw measurementsA
Read-onlyIdempotent

Read individual measurement rows (not the daily_metrics aggregate), most recent first. Use this to see exactly when and where each reading came from, rather than just a day's summarized value.

Use this tool when:

  • the user wants raw/individual observations (e.g. "what measurements have I recorded?"), including their timestamp or source.

Do not use this tool when:

  • the user wants a broad, multi-metric overview -> use read_health_data instead.

  • the user wants one metric's day-by-day history -> use get_metric_history instead.

  • the user wants workout sessions -> use read_workout_sessions instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return (default 200).
metricNoOnly return this metric. Omit for all metrics.
sourceNoOnly return rows from this source, e.g. "Apple Watch". Omit for all sources.
end_dateNoOnly return rows on/before this date (YYYY-MM-DD). Omit for no upper bound.
start_dateNoOnly return rows on/after this date (YYYY-MM-DD). Omit for no lower bound.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
measurementsYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely non-obvious context: results are ordered most-recent-first, and the privacy note discloses that returned data becomes part of the conversation sent to the configured model, which is a data-egress trait not conveyed by any annotation or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded in the first sentence, and the when/when-not lists are scannable. The privacy note is several lines long but earns its place by disclosing a real behavioral risk; overall slightly verbose but well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still covers ordering, scope, filtering intent, alternatives, and a privacy caveat. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (limit, metric, source, start_date, end_date) are already documented in the schema with defaults and formats. The description adds only the ordering ('most recent first') and the raw-vs-aggregate scope, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource ('read individual measurement rows') and immediately distinguishes the output from the daily_metrics aggregate, contrasting raw rows against summarized values. An agent can tell this apart from sibling tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit 'Use this tool when' section and a 'Do not use this tool when' section that names three specific alternatives (read_health_data, get_metric_history, read_workout_sessions) with the condition that selects each. Routing is fully specified with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_workout_sessionsRead workout sessionsA
Read-onlyIdempotent

Read individual workout sessions (not the daily_metrics workout_minutes total), most recent day first. Use this to see what each workout actually was — activity, timing, intensity, heart rate — rather than just a day's summed minutes.

Use this tool when:

  • the user asks about workouts/exercise sessions specifically (e.g. "what workouts did I do this week?", "show my recent gym sessions").

Do not use this tool when:

  • the user just wants the daily workout_minutes total, not individual sessions -> use read_health_data or get_metric_history instead.

Privacy note: this server and its SQLite file are entirely local, but the data returned by this tool becomes part of the conversation sent to whatever model the calling client is configured with. If that model runs in the cloud rather than on your machine, treat this the same as pasting the data into a chat with that provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return (default 200).
end_dateNoOnly return sessions on/before this date (YYYY-MM-DD). Omit for no upper bound.
start_dateNoOnly return sessions on/after this date (YYYY-MM-DD). Omit for no lower bound.
activity_typeNoOnly return sessions of this activity type. Omit for all types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
sessionsYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive), the description adds genuinely useful behavioral context: ordering is 'most recent day first,' the tool returns session-level detail rather than daily totals, and it discloses a privacy implication about data becoming part of the conversation. These are meaningful traits not captured by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core definition, followed by structured usage guidance and a relevant privacy note. Every section earns its place: the first sentence states the tool's scope, the bullets give actionable routing rules, and the privacy note is important for local-vs-cloud model contexts. No filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations, full parameter schema coverage, and presence of an output schema, the description supplies all remaining context an agent needs: when to use it, when not to, how results are ordered, and what data is returned. The alternative tools are explicitly named, so the surrounding tool ecosystem is adequately addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents limit, start_date, end_date, and activity_type fully. The description reinforces the overall intent but does not add parameter-specific detail beyond what the input schema provides, matching the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Read individual workout sessions,' and immediately disambiguates from the daily_metrics workout_minutes total. It also enumerates the meaningful fields returned (activity, timing, intensity, heart rate) and contrast with daily aggregates, making the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit 'Use this tool when' and 'Do not use this tool when' sections with concrete example queries and names the alternatives (read_health_data, get_metric_history). An agent can confidently route between this tool and its siblings without further inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.0.30
    • Changedcalculate_metric_trend1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete, current and trustworthy."
        +}
    • Changedcompare_metric_periods1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete and current (the weaker of the two periods)."
        +}
    • Changeddetect_metric_anomalies1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete, current and trustworthy."
        +}
    • Changedexplain_metric_change2 fields changed
      • addedOutput schema / properties / correlated_metrics / items / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete and current (the weaker of the two metrics)."
        +}
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete and current (the weaker of the two windows)."
        +}
    • Changedfind_metric_correlation1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this result is complete and current (the weaker of the two metrics)."
        +}
    • Changedget_baseline1 field changed
      • changedOutput schema / properties / data_health / anyOf
        Previous value: -[
        -  {
        -    "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every condition that\napplies. See data_health.compose_data_health for how it is decided.",
        -    "properties": {
        -      "completeness": {
        -        "properties": {
        -          "coverage_ratio": {
        -            "type": "number"
        -          },
        -          "expected_days": {
        -            "type": "integer"
        -          },
        -          "missing_days": {
        -            "type": "integer"
        -          },
        -          "observed_days": {
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "expected_days",
        -          "observed_days",
        -          "coverage_ratio",
        -          "missing_days"
        -        ],
        -        "type": "object"
        -      },
        -      "coverage": {
        -        "properties": {
        -          "end": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "requested_end": {
        -            "type": "string"
        -          },
        -          "requested_start": {
        -            "type": "string"
        -          },
        -          "start": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "requested_start",
        -          "requested_end"
        -        ],
        -        "type": "object"
        -      },
        -      "freshness": {
        -        "properties": {
        -          "age_days": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null,
        -            "description": "Days from the latest observation to the end of the requested window."
        -          },
        -          "dataset_days_behind": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null,
        -            "description": "Days from the dataset's latest data (any metric) to today."
        -          },
        -          "latest_data": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "last_import": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "finished_at": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              },
        -              "importer": {
        -                "type": "string"
        -              },
        -              "source_file": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              },
        -              "status": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "importer",
        -              "status"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "last_successful_import": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observations": {
        -        "description": "Number of daily values the result is computed from.",
        -        "type": "integer"
        -      },
        -      "reasons": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "status": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "status",
        -      "reasons",
        -      "freshness",
        -      "coverage",
        -      "completeness",
        -      "gaps",
        -      "observations"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +    "properties": {
        +      "completeness": {
        +        "properties": {
        +          "coverage_ratio": {
        +            "type": "number"
        +          },
        +          "expected_days": {
        +            "type": "integer"
        +          },
        +          "missing_days": {
        +            "type": "integer"
        +          },
        +          "observed_days": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "expected_days",
        +          "observed_days",
        +          "coverage_ratio",
        +          "missing_days"
        +        ],
        +        "type": "object"
        +      },
        +      "coverage": {
        +        "properties": {
        +          "end": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          },
        +          "requested_end": {
        +            "type": "string"
        +          },
        +          "requested_start": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          }
        +        },
        +        "required": [
        +          "requested_start",
        +          "requested_end"
        +        ],
        +        "type": "object"
        +      },
        +      "freshness": {
        +        "properties": {
        +          "age_days": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null,
        +            "description": "Days from the latest observation to the end of the requested window."
        +          },
        +          "dataset_days_behind": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null,
        +            "description": "Days from the dataset's latest data (any metric) to today."
        +          },
        +          "latest_data": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "gaps": {
        +        "items": {
        +          "properties": {
        +            "days": {
        +              "type": "integer"
        +            },
        +            "end": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "start",
        +            "end",
        +            "days"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "last_import": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "finished_at": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "importer": {
        +                "type": "string"
        +              },
        +              "source_file": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "status": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "importer",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "last_successful_import": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "observations": {
        +        "description": "Number of daily values the result is computed from.",
        +        "type": "integer"
        +      },
        +      "reasons": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "status": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "status",
        +      "reasons",
        +      "freshness",
        +      "coverage",
        +      "completeness",
        +      "gaps",
        +      "observations"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_data_status1 field changed
      • changedOutput schema / properties / latest_import / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "error": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "finished_at": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "id": {
        -        "type": "integer"
        -      },
        -      "importer": {
        -        "type": "string"
        -      },
        -      "measurements_written": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "rows_loaded": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "rows_skipped": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "source_file": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "source_sha256": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "started_at": {
        -        "type": "string"
        -      },
        -      "status": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "importer",
        -      "status",
        -      "started_at"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "coverage_after_end": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "coverage_after_start": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "coverage_before_end": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "coverage_before_start": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "error": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "finished_at": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "id": {
        +        "type": "integer"
        +      },
        +      "importer": {
        +        "type": "string"
        +      },
        +      "measurements_written": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "records_added": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "records_removed": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "records_seen": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "records_unchanged": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "records_updated": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "rows_loaded": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "rows_skipped": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source_file": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source_sha256": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "started_at": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "importer",
        +      "status",
        +      "started_at"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_import_status9 fields changed
      • addedOutput schema / properties / imports / items / properties / coverage_after_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / coverage_after_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / coverage_before_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / coverage_before_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / records_added
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / records_removed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / records_seen
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / records_unchanged
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / imports / items / properties / records_updated
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedget_metric_history1 field changed
      • changedOutput schema / properties / data_health / anyOf
        Previous value: -[
        -  {
        -    "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every condition that\napplies. See data_health.compose_data_health for how it is decided.",
        -    "properties": {
        -      "completeness": {
        -        "properties": {
        -          "coverage_ratio": {
        -            "type": "number"
        -          },
        -          "expected_days": {
        -            "type": "integer"
        -          },
        -          "missing_days": {
        -            "type": "integer"
        -          },
        -          "observed_days": {
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "expected_days",
        -          "observed_days",
        -          "coverage_ratio",
        -          "missing_days"
        -        ],
        -        "type": "object"
        -      },
        -      "coverage": {
        -        "properties": {
        -          "end": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          },
        -          "requested_end": {
        -            "type": "string"
        -          },
        -          "requested_start": {
        -            "type": "string"
        -          },
        -          "start": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "required": [
        -          "requested_start",
        -          "requested_end"
        -        ],
        -        "type": "object"
        -      },
        -      "freshness": {
        -        "properties": {
        -          "age_days": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null,
        -            "description": "Days from the latest observation to the end of the requested window."
        -          },
        -          "dataset_days_behind": {
        -            "anyOf": [
        -              {
        -                "type": "integer"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null,
        -            "description": "Days from the dataset's latest data (any metric) to today."
        -          },
        -          "latest_data": {
        -            "anyOf": [
        -              {
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "default": null
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "last_import": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "finished_at": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              },
        -              "importer": {
        -                "type": "string"
        -              },
        -              "source_file": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              },
        -              "status": {
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "importer",
        -              "status"
        -            ],
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "last_successful_import": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observations": {
        -        "description": "Number of daily values the result is computed from.",
        -        "type": "integer"
        -      },
        -      "reasons": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "status": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "status",
        -      "reasons",
        -      "freshness",
        -      "coverage",
        -      "completeness",
        -      "gaps",
        -      "observations"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +    "properties": {
        +      "completeness": {
        +        "properties": {
        +          "coverage_ratio": {
        +            "type": "number"
        +          },
        +          "expected_days": {
        +            "type": "integer"
        +          },
        +          "missing_days": {
        +            "type": "integer"
        +          },
        +          "observed_days": {
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "expected_days",
        +          "observed_days",
        +          "coverage_ratio",
        +          "missing_days"
        +        ],
        +        "type": "object"
        +      },
        +      "coverage": {
        +        "properties": {
        +          "end": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          },
        +          "requested_end": {
        +            "type": "string"
        +          },
        +          "requested_start": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          }
        +        },
        +        "required": [
        +          "requested_start",
        +          "requested_end"
        +        ],
        +        "type": "object"
        +      },
        +      "freshness": {
        +        "properties": {
        +          "age_days": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null,
        +            "description": "Days from the latest observation to the end of the requested window."
        +          },
        +          "dataset_days_behind": {
        +            "anyOf": [
        +              {
        +                "type": "integer"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null,
        +            "description": "Days from the dataset's latest data (any metric) to today."
        +          },
        +          "latest_data": {
        +            "anyOf": [
        +              {
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "default": null
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "gaps": {
        +        "items": {
        +          "properties": {
        +            "days": {
        +              "type": "integer"
        +            },
        +            "end": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "start",
        +            "end",
        +            "days"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "last_import": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "finished_at": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "importer": {
        +                "type": "string"
        +              },
        +              "source_file": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "status": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "importer",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "last_successful_import": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "observations": {
        +        "description": "Number of daily values the result is computed from.",
        +        "type": "integer"
        +      },
        +      "reasons": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "status": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "status",
        +      "reasons",
        +      "freshness",
        +      "coverage",
        +      "completeness",
        +      "gaps",
        +      "observations"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedget_recent_changes1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, MIXED_SOURCES, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every\ncondition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind these changes is complete and current (the weakest metric window)."
        +}
  2. 6 tool updatesv1.0.29
    • Changedget_baseline1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every condition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether the data behind this baseline is complete, current and trustworthy."
        +}
    • Addedget_data_status
    • Addedget_import_status
    • Changedget_metric_history1 field changed
      • addedOutput schema / properties / data_health
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Data-quality state behind one result (not a medical or statistical confidence score). status is one of\nVALID, VALID_WITH_GAPS, INSUFFICIENT_DATA, STALE, IMPORT_INCOMPLETE; reasons lists every condition that\napplies. See data_health.compose_data_health for how it is decided.",
        +      "properties": {
        +        "completeness": {
        +          "properties": {
        +            "coverage_ratio": {
        +              "type": "number"
        +            },
        +            "expected_days": {
        +              "type": "integer"
        +            },
        +            "missing_days": {
        +              "type": "integer"
        +            },
        +            "observed_days": {
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "expected_days",
        +            "observed_days",
        +            "coverage_ratio",
        +            "missing_days"
        +          ],
        +          "type": "object"
        +        },
        +        "coverage": {
        +          "properties": {
        +            "end": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            },
        +            "requested_end": {
        +              "type": "string"
        +            },
        +            "requested_start": {
        +              "type": "string"
        +            },
        +            "start": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "requested_start",
        +            "requested_end"
        +          ],
        +          "type": "object"
        +        },
        +        "freshness": {
        +          "properties": {
        +            "age_days": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the latest observation to the end of the requested window."
        +            },
        +            "dataset_days_behind": {
        +              "anyOf": [
        +                {
        +                  "type": "integer"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null,
        +              "description": "Days from the dataset's latest data (any metric) to today."
        +            },
        +            "latest_data": {
        +              "anyOf": [
        +                {
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "last_import": {
        +          "anyOf": [
        +            {
        +              "properties": {
        +                "finished_at": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "importer": {
        +                  "type": "string"
        +                },
        +                "source_file": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "status": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "importer",
        +                "status"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "last_successful_import": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observations": {
        +          "description": "Number of daily values the result is computed from.",
        +          "type": "integer"
        +        },
        +        "reasons": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "reasons",
        +        "freshness",
        +        "coverage",
        +        "completeness",
        +        "gaps",
        +        "observations"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Whether this history is complete, current and trustworthy; see DataHealth."
        +}
    • Changedlog_measurement2 fields changed
      • addedOutput schema / properties / measurement / properties / value / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / measurement / properties / value / type
        Removed value: -"number"
    • Changedread_measurements2 fields changed
      • addedOutput schema / properties / measurements / items / properties / value / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / measurements / items / properties / value / type
        Removed value: -"number"
  3. 6 tool updatesv1.0.28
    • Changedcalculate_metric_trend3 fields changed
      • removedOutput schema / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "trend",
        -  "claim",
        -  "evidence",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "trend",
        +  "claim",
        +  "evidence"
        +]
    • Changedcompare_metric_periods3 fields changed
      • removedOutput schema / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "period_a",
        -  "period_b",
        -  "period_a_stats",
        -  "period_b_stats",
        -  "claim",
        -  "period_a_evidence",
        -  "period_b_evidence",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric",
        +  "period_a",
        +  "period_b",
        +  "period_a_stats",
        +  "period_b_stats",
        +  "claim",
        +  "period_a_evidence",
        +  "period_b_evidence"
        +]
    • Changeddetect_metric_anomalies3 fields changed
      • removedOutput schema / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "threshold",
        -  "anomalies",
        -  "claim",
        -  "evidence",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "threshold",
        +  "anomalies",
        +  "claim",
        +  "evidence"
        +]
    • Changedexplain_metric_change8 fields changed
      • removedOutput schema / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to headline_claim.decision. Use headline_claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / correlated_metrics / items / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / properties / correlated_metrics / items / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "claim",
        -  "evidence_a",
        -  "evidence_b",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "claim",
        +  "evidence_a",
        +  "evidence_b"
        +]
      • removedOutput schema / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to headline_claim.profile. Use headline_claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / trend_claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to trend_claim.decision. Use trend_claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / trend_evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to trend_claim.profile. Use trend_claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "date",
        -  "baseline_range",
        -  "baseline",
        -  "is_anomaly",
        -  "trend",
        -  "correlated_metrics",
        -  "narrative_facts",
        -  "baseline_claim",
        -  "headline_claim",
        -  "trend_claim",
        -  "evidence_profile",
        -  "claim_decision",
        -  "trend_evidence_profile",
        -  "trend_claim_decision",
        -  "overall_decision"
        -]New value: +[
        +  "metric",
        +  "date",
        +  "baseline_range",
        +  "baseline",
        +  "is_anomaly",
        +  "trend",
        +  "correlated_metrics",
        +  "narrative_facts",
        +  "baseline_claim",
        +  "headline_claim",
        +  "trend_claim",
        +  "overall_decision"
        +]
    • Changedfind_metric_correlation3 fields changed
      • removedOutput schema / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "claim",
        -  "evidence_a",
        -  "evidence_b",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "claim",
        +  "evidence_a",
        +  "evidence_b"
        +]
    • Changedget_recent_changes3 fields changed
      • removedOutput schema / properties / changes / items / properties / claim_decision
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.decision. Use claim.decision instead.",
        -  "properties": {
        -    "must_state": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "permitted_phrasing_class": {
        -      "type": "string"
        -    },
        -    "template": {
        -      "type": "string"
        -    },
        -    "tier": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "tier",
        -    "permitted_phrasing_class",
        -    "must_state",
        -    "template"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / changes / items / properties / evidence_profile
        Removed value: -{
        -  "deprecated": true,
        -  "description": "DEPRECATED: identical to claim.profile. Use claim.decision instead.",
        -  "properties": {
        -    "analysis": {
        -      "type": "string"
        -    },
        -    "dimensions": {
        -      "items": {
        -        "properties": {
        -          "can_block": {
        -            "default": true,
        -            "type": "boolean"
        -          },
        -          "details": {
        -            "additionalProperties": true,
        -            "type": "object"
        -          },
        -          "dimension": {
        -            "enum": [
        -              "sample",
        -              "temporal",
        -              "robustness",
        -              "missingness",
        -              "practical",
        -              "measurement_validity",
        -              "provenance"
        -            ],
        -            "type": "string"
        -          },
        -          "reason_codes": {
        -            "items": {
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          "status": {
        -            "enum": [
        -              "adequate",
        -              "negligible",
        -              "not_assessed",
        -              "weak",
        -              "concern",
        -              "blocking"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "dimension",
        -          "status"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "effect": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "metric": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "metric",
        -    "analysis",
        -    "dimensions"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / properties / changes / items / required
        Previous value: -[
        -  "metric",
        -  "kind",
        -  "detail",
        -  "claim",
        -  "evidence",
        -  "evidence_profile",
        -  "claim_decision"
        -]New value: +[
        +  "metric",
        +  "kind",
        +  "detail",
        +  "claim",
        +  "evidence"
        +]
  4. 2 tool updatesv1.0.27
    • Changedexplain_metric_change2 fields changed
      • addedOutput schema / properties / baseline_claim
        Added value: +{
        +  "description": "Evidence and decision for the 90-day baseline statistics reported in \"baseline\" (and quoted in narrative_facts). Read baseline_claim.decision before stating what is typical for this metric; it is one of the components overall_decision is the weakest of.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "date",
        -  "baseline_range",
        -  "baseline",
        -  "is_anomaly",
        -  "trend",
        -  "correlated_metrics",
        -  "narrative_facts",
        -  "headline_claim",
        -  "trend_claim",
        -  "evidence_profile",
        -  "claim_decision",
        -  "trend_evidence_profile",
        -  "trend_claim_decision",
        -  "overall_decision"
        -]New value: +[
        +  "metric",
        +  "date",
        +  "baseline_range",
        +  "baseline",
        +  "is_anomaly",
        +  "trend",
        +  "correlated_metrics",
        +  "narrative_facts",
        +  "baseline_claim",
        +  "headline_claim",
        +  "trend_claim",
        +  "evidence_profile",
        +  "claim_decision",
        +  "trend_evidence_profile",
        +  "trend_claim_decision",
        +  "overall_decision"
        +]
    • Changedget_recent_changes8 fields changed
      • addedOutput schema / properties / changes / items / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for this change note's claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / changes / items / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / changes / items / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • addedOutput schema / properties / changes / items / properties / evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / changes / items / properties / evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence."
      • addedOutput schema / properties / changes / items / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / changes / items / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • changedOutput schema / properties / changes / items / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric",
        -  "kind",
        -  "detail",
        -  "evidence"
        -]New value: +[
        +  "metric",
        +  "kind",
        +  "detail",
        +  "claim",
        +  "evidence",
        +  "evidence_profile",
        +  "claim_decision"
        +]
  5. 5 tool updatesv1.0.26
    • Changedcalculate_metric_trend8 fields changed
      • addedOutput schema / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the trend claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • addedOutput schema / properties / evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence."
      • addedOutput schema / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • changedOutput schema / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric",
        -  "range",
        -  "trend",
        -  "evidence"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "trend",
        +  "claim",
        +  "evidence",
        +  "evidence_profile",
        +  "claim_decision"
        +]
    • Changedcompare_metric_periods10 fields changed
      • addedOutput schema / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the period comparison claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_a": {
        +      "description": "Descriptive data coverage behind the first source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_b": {
        +      "description": "Descriptive data coverage behind the second source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...), assessed jointly across both sources where relevant. Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence_a",
        +    "evidence_b",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • addedOutput schema / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • addedOutput schema / properties / period_a_evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / period_a_evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence_a. Use claim.decision, not a standalone confidence field."
      • addedOutput schema / properties / period_b_evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / period_b_evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence_b. Use claim.decision, not a standalone confidence field."
      • changedOutput schema / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric",
        -  "period_a",
        -  "period_b",
        -  "period_a_stats",
        -  "period_b_stats",
        -  "period_a_evidence",
        -  "period_b_evidence"
        -]New value: +[
        +  "metric",
        +  "period_a",
        +  "period_b",
        +  "period_a_stats",
        +  "period_b_stats",
        +  "claim",
        +  "period_a_evidence",
        +  "period_b_evidence",
        +  "evidence_profile",
        +  "claim_decision"
        +]
    • Changeddetect_metric_anomalies8 fields changed
      • addedOutput schema / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the anomaly claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • addedOutput schema / properties / evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence."
      • addedOutput schema / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • changedOutput schema / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric",
        -  "range",
        -  "threshold",
        -  "anomalies",
        -  "evidence"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "threshold",
        +  "anomalies",
        +  "claim",
        +  "evidence",
        +  "evidence_profile",
        +  "claim_decision"
        +]
    • Changedexplain_metric_change35 fields changed
      • removedOutput schema / properties / baseline_evidence
        Removed value: -{
        -  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -  "properties": {
        -    "confidence": {
        -      "type": "string"
        -    },
        -    "coverage_ratio": {
        -      "type": "number"
        -    },
        -    "expected_days": {
        -      "type": "integer"
        -    },
        -    "freshness_days": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "gaps": {
        -      "items": {
        -        "properties": {
        -          "days": {
        -            "type": "integer"
        -          },
        -          "end": {
        -            "type": "string"
        -          },
        -          "start": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "start",
        -          "end",
        -          "days"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "measurement_count": {
        -      "type": "integer"
        -    },
        -    "missing_days": {
        -      "type": "integer"
        -    },
        -    "observed_days": {
        -      "type": "integer"
        -    },
        -    "observed_end": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "observed_start": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "recent_gap_days": {
        -      "type": "integer"
        -    },
        -    "requested_end": {
        -      "type": "string"
        -    },
        -    "requested_start": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "requested_start",
        -    "requested_end",
        -    "expected_days",
        -    "observed_days",
        -    "coverage_ratio",
        -    "missing_days",
        -    "measurement_count",
        -    "gaps",
        -    "recent_gap_days",
        -    "confidence"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to headline_claim.decision. Use headline_claim.decision instead."
      • addedOutput schema / properties / correlated_metrics / items / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the correlation claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_a": {
        +      "description": "Descriptive data coverage behind the first source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_b": {
        +      "description": "Descriptive data coverage behind the second source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...), assessed jointly across both sources where relevant. Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence_a",
        +    "evidence_b",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / correlated_metrics / items / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_a / anyOf
        Removed value: -[
        -  {
        -    "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -    "properties": {
        -      "confidence": {
        -        "type": "string"
        -      },
        -      "coverage_ratio": {
        -        "type": "number"
        -      },
        -      "expected_days": {
        -        "type": "integer"
        -      },
        -      "freshness_days": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "measurement_count": {
        -        "type": "integer"
        -      },
        -      "missing_days": {
        -        "type": "integer"
        -      },
        -      "observed_days": {
        -        "type": "integer"
        -      },
        -      "observed_end": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observed_start": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "recent_gap_days": {
        -        "type": "integer"
        -      },
        -      "requested_end": {
        -        "type": "string"
        -      },
        -      "requested_start": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "requested_start",
        -      "requested_end",
        -      "expected_days",
        -      "observed_days",
        -      "coverage_ratio",
        -      "missing_days",
        -      "measurement_count",
        -      "gaps",
        -      "recent_gap_days",
        -      "confidence"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_a / default
        Removed value: -null
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a / deprecated
        Added value: +true
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a / description
        Added value: +"DEPRECATED: identical to claim.evidence_a. Use claim.decision, not a standalone confidence field."
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a / properties
        Added value: +{
        +  "confidence": {
        +    "type": "string"
        +  },
        +  "coverage_ratio": {
        +    "type": "number"
        +  },
        +  "expected_days": {
        +    "type": "integer"
        +  },
        +  "freshness_days": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "gaps": {
        +    "items": {
        +      "properties": {
        +        "days": {
        +          "type": "integer"
        +        },
        +        "end": {
        +          "type": "string"
        +        },
        +        "start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "start",
        +        "end",
        +        "days"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "measurement_count": {
        +    "type": "integer"
        +  },
        +  "missing_days": {
        +    "type": "integer"
        +  },
        +  "observed_days": {
        +    "type": "integer"
        +  },
        +  "observed_end": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "observed_start": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "recent_gap_days": {
        +    "type": "integer"
        +  },
        +  "requested_end": {
        +    "type": "string"
        +  },
        +  "requested_start": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a / required
        Added value: +[
        +  "requested_start",
        +  "requested_end",
        +  "expected_days",
        +  "observed_days",
        +  "coverage_ratio",
        +  "missing_days",
        +  "measurement_count",
        +  "gaps",
        +  "recent_gap_days",
        +  "confidence"
        +]
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a / type
        Added value: +"object"
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_b / anyOf
        Removed value: -[
        -  {
        -    "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -    "properties": {
        -      "confidence": {
        -        "type": "string"
        -      },
        -      "coverage_ratio": {
        -        "type": "number"
        -      },
        -      "expected_days": {
        -        "type": "integer"
        -      },
        -      "freshness_days": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "measurement_count": {
        -        "type": "integer"
        -      },
        -      "missing_days": {
        -        "type": "integer"
        -      },
        -      "observed_days": {
        -        "type": "integer"
        -      },
        -      "observed_end": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observed_start": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "recent_gap_days": {
        -        "type": "integer"
        -      },
        -      "requested_end": {
        -        "type": "string"
        -      },
        -      "requested_start": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "requested_start",
        -      "requested_end",
        -      "expected_days",
        -      "observed_days",
        -      "coverage_ratio",
        -      "missing_days",
        -      "measurement_count",
        -      "gaps",
        -      "recent_gap_days",
        -      "confidence"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_b / default
        Removed value: -null
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b / deprecated
        Added value: +true
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b / description
        Added value: +"DEPRECATED: identical to claim.evidence_b. Use claim.decision, not a standalone confidence field."
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b / properties
        Added value: +{
        +  "confidence": {
        +    "type": "string"
        +  },
        +  "coverage_ratio": {
        +    "type": "number"
        +  },
        +  "expected_days": {
        +    "type": "integer"
        +  },
        +  "freshness_days": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "gaps": {
        +    "items": {
        +      "properties": {
        +        "days": {
        +          "type": "integer"
        +        },
        +        "end": {
        +          "type": "string"
        +        },
        +        "start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "start",
        +        "end",
        +        "days"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "measurement_count": {
        +    "type": "integer"
        +  },
        +  "missing_days": {
        +    "type": "integer"
        +  },
        +  "observed_days": {
        +    "type": "integer"
        +  },
        +  "observed_end": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "observed_start": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "recent_gap_days": {
        +    "type": "integer"
        +  },
        +  "requested_end": {
        +    "type": "string"
        +  },
        +  "requested_start": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b / required
        Added value: +[
        +  "requested_start",
        +  "requested_end",
        +  "expected_days",
        +  "observed_days",
        +  "coverage_ratio",
        +  "missing_days",
        +  "measurement_count",
        +  "gaps",
        +  "recent_gap_days",
        +  "confidence"
        +]
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b / type
        Added value: +"object"
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • removedOutput schema / properties / correlated_metrics / items / properties / sample_confidence
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / correlated_metrics / items / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "sample_confidence"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "claim",
        +  "evidence_a",
        +  "evidence_b",
        +  "evidence_profile",
        +  "claim_decision"
        +]
      • addedOutput schema / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to headline_claim.profile. Use headline_claim.decision instead."
      • addedOutput schema / properties / headline_claim
        Added value: +{
        +  "description": "Evidence and decision for the headline claim: this day's value against its 90-day baseline. Read headline_claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / overall_decision
        Added value: +{
        +  "description": "The single decision governing this whole result: weakest-of-N over the headline claim (headline_claim.decision), the trend (trend_claim.decision), and every surfaced correlation's own decision. If any component is insufficient/suggestive, the composite is too — report overall_decision.tier and must_state rather than treating the headline claim as though the trend and correlations couldn't drag it down.",
        +  "properties": {
        +    "must_state": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "permitted_phrasing_class": {
        +      "type": "string"
        +    },
        +    "template": {
        +      "type": "string"
        +    },
        +    "tier": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "tier",
        +    "permitted_phrasing_class",
        +    "must_state",
        +    "template"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / trend_claim
        Added value: +{
        +  "description": "Evidence and decision for the 30-day trend leading into this day, assessed separately from the headline claim. Read trend_claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / trend_claim_decision / deprecated
        Added value: +true
      • addedOutput schema / properties / trend_claim_decision / description
        Added value: +"DEPRECATED: identical to trend_claim.decision. Use trend_claim.decision instead."
      • removedOutput schema / properties / trend_evidence
        Removed value: -{
        -  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -  "properties": {
        -    "confidence": {
        -      "type": "string"
        -    },
        -    "coverage_ratio": {
        -      "type": "number"
        -    },
        -    "expected_days": {
        -      "type": "integer"
        -    },
        -    "freshness_days": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "gaps": {
        -      "items": {
        -        "properties": {
        -          "days": {
        -            "type": "integer"
        -          },
        -          "end": {
        -            "type": "string"
        -          },
        -          "start": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "start",
        -          "end",
        -          "days"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "measurement_count": {
        -      "type": "integer"
        -    },
        -    "missing_days": {
        -      "type": "integer"
        -    },
        -    "observed_days": {
        -      "type": "integer"
        -    },
        -    "observed_end": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "observed_start": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "recent_gap_days": {
        -      "type": "integer"
        -    },
        -    "requested_end": {
        -      "type": "string"
        -    },
        -    "requested_start": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "requested_start",
        -    "requested_end",
        -    "expected_days",
        -    "observed_days",
        -    "coverage_ratio",
        -    "missing_days",
        -    "measurement_count",
        -    "gaps",
        -    "recent_gap_days",
        -    "confidence"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / trend_evidence_profile / deprecated
        Added value: +true
      • addedOutput schema / properties / trend_evidence_profile / description
        Added value: +"DEPRECATED: identical to trend_claim.profile. Use trend_claim.decision instead."
      • changedOutput schema / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric",
        -  "date",
        -  "baseline_range",
        -  "baseline",
        -  "is_anomaly",
        -  "trend",
        -  "correlated_metrics",
        -  "narrative_facts",
        -  "baseline_evidence",
        -  "trend_evidence",
        -  "trend_evidence_profile",
        -  "trend_claim_decision"
        -]New value: +[
        +  "metric",
        +  "date",
        +  "baseline_range",
        +  "baseline",
        +  "is_anomaly",
        +  "trend",
        +  "correlated_metrics",
        +  "narrative_facts",
        +  "headline_claim",
        +  "trend_claim",
        +  "evidence_profile",
        +  "claim_decision",
        +  "trend_evidence_profile",
        +  "trend_claim_decision",
        +  "overall_decision"
        +]
    • Changedfind_metric_correlation21 fields changed
      • addedOutput schema / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the correlation claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_a": {
        +      "description": "Descriptive data coverage behind the first source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence_b": {
        +      "description": "Descriptive data coverage behind the second source.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...), assessed jointly across both sources where relevant. Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence_a",
        +    "evidence_b",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / claim_decision / deprecated
        Added value: +true
      • changedOutput schema / properties / claim_decision / description
        Previous value: -"How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."New value: +"DEPRECATED: identical to claim.decision. Use claim.decision instead."
      • removedOutput schema / properties / evidence_a / anyOf
        Removed value: -[
        -  {
        -    "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -    "properties": {
        -      "confidence": {
        -        "type": "string"
        -      },
        -      "coverage_ratio": {
        -        "type": "number"
        -      },
        -      "expected_days": {
        -        "type": "integer"
        -      },
        -      "freshness_days": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "measurement_count": {
        -        "type": "integer"
        -      },
        -      "missing_days": {
        -        "type": "integer"
        -      },
        -      "observed_days": {
        -        "type": "integer"
        -      },
        -      "observed_end": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observed_start": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "recent_gap_days": {
        -        "type": "integer"
        -      },
        -      "requested_end": {
        -        "type": "string"
        -      },
        -      "requested_start": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "requested_start",
        -      "requested_end",
        -      "expected_days",
        -      "observed_days",
        -      "coverage_ratio",
        -      "missing_days",
        -      "measurement_count",
        -      "gaps",
        -      "recent_gap_days",
        -      "confidence"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_a / default
        Removed value: -null
      • addedOutput schema / properties / evidence_a / deprecated
        Added value: +true
      • addedOutput schema / properties / evidence_a / description
        Added value: +"DEPRECATED: identical to claim.evidence_a. Use claim.decision, not a standalone confidence field."
      • addedOutput schema / properties / evidence_a / properties
        Added value: +{
        +  "confidence": {
        +    "type": "string"
        +  },
        +  "coverage_ratio": {
        +    "type": "number"
        +  },
        +  "expected_days": {
        +    "type": "integer"
        +  },
        +  "freshness_days": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "gaps": {
        +    "items": {
        +      "properties": {
        +        "days": {
        +          "type": "integer"
        +        },
        +        "end": {
        +          "type": "string"
        +        },
        +        "start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "start",
        +        "end",
        +        "days"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "measurement_count": {
        +    "type": "integer"
        +  },
        +  "missing_days": {
        +    "type": "integer"
        +  },
        +  "observed_days": {
        +    "type": "integer"
        +  },
        +  "observed_end": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "observed_start": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "recent_gap_days": {
        +    "type": "integer"
        +  },
        +  "requested_end": {
        +    "type": "string"
        +  },
        +  "requested_start": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_a / required
        Added value: +[
        +  "requested_start",
        +  "requested_end",
        +  "expected_days",
        +  "observed_days",
        +  "coverage_ratio",
        +  "missing_days",
        +  "measurement_count",
        +  "gaps",
        +  "recent_gap_days",
        +  "confidence"
        +]
      • addedOutput schema / properties / evidence_a / type
        Added value: +"object"
      • removedOutput schema / properties / evidence_b / anyOf
        Removed value: -[
        -  {
        -    "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        -    "properties": {
        -      "confidence": {
        -        "type": "string"
        -      },
        -      "coverage_ratio": {
        -        "type": "number"
        -      },
        -      "expected_days": {
        -        "type": "integer"
        -      },
        -      "freshness_days": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "gaps": {
        -        "items": {
        -          "properties": {
        -            "days": {
        -              "type": "integer"
        -            },
        -            "end": {
        -              "type": "string"
        -            },
        -            "start": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "start",
        -            "end",
        -            "days"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "measurement_count": {
        -        "type": "integer"
        -      },
        -      "missing_days": {
        -        "type": "integer"
        -      },
        -      "observed_days": {
        -        "type": "integer"
        -      },
        -      "observed_end": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "observed_start": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "recent_gap_days": {
        -        "type": "integer"
        -      },
        -      "requested_end": {
        -        "type": "string"
        -      },
        -      "requested_start": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "requested_start",
        -      "requested_end",
        -      "expected_days",
        -      "observed_days",
        -      "coverage_ratio",
        -      "missing_days",
        -      "measurement_count",
        -      "gaps",
        -      "recent_gap_days",
        -      "confidence"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_b / default
        Removed value: -null
      • addedOutput schema / properties / evidence_b / deprecated
        Added value: +true
      • addedOutput schema / properties / evidence_b / description
        Added value: +"DEPRECATED: identical to claim.evidence_b. Use claim.decision, not a standalone confidence field."
      • addedOutput schema / properties / evidence_b / properties
        Added value: +{
        +  "confidence": {
        +    "type": "string"
        +  },
        +  "coverage_ratio": {
        +    "type": "number"
        +  },
        +  "expected_days": {
        +    "type": "integer"
        +  },
        +  "freshness_days": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "gaps": {
        +    "items": {
        +      "properties": {
        +        "days": {
        +          "type": "integer"
        +        },
        +        "end": {
        +          "type": "string"
        +        },
        +        "start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "start",
        +        "end",
        +        "days"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "measurement_count": {
        +    "type": "integer"
        +  },
        +  "missing_days": {
        +    "type": "integer"
        +  },
        +  "observed_days": {
        +    "type": "integer"
        +  },
        +  "observed_end": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "observed_start": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "recent_gap_days": {
        +    "type": "integer"
        +  },
        +  "requested_end": {
        +    "type": "string"
        +  },
        +  "requested_start": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_b / required
        Added value: +[
        +  "requested_start",
        +  "requested_end",
        +  "expected_days",
        +  "observed_days",
        +  "coverage_ratio",
        +  "missing_days",
        +  "measurement_count",
        +  "gaps",
        +  "recent_gap_days",
        +  "confidence"
        +]
      • addedOutput schema / properties / evidence_b / type
        Added value: +"object"
      • addedOutput schema / properties / evidence_profile / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence_profile / description
        Previous value: -"Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."New value: +"DEPRECATED: identical to claim.profile. Use claim.decision instead."
      • removedOutput schema / properties / sample_confidence
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "evidence_profile",
        -  "claim_decision",
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "sample_confidence"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "claim",
        +  "evidence_a",
        +  "evidence_b",
        +  "evidence_profile",
        +  "claim_decision"
        +]
  6. 1 tool updatev1.0.24
    • Changedget_baseline4 fields changed
      • addedOutput schema / properties / claim
        Added value: +{
        +  "description": "Evidence and decision for the \"what's normal\" claim; read claim.decision before reporting it.",
        +  "properties": {
        +    "decision": {
        +      "description": "How strongly this claim may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it.",
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    "evidence": {
        +      "description": "Descriptive data coverage behind this claim.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    "profile": {
        +      "description": "Per-dimension evidence quality behind this claim (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate.",
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "evidence",
        +    "profile",
        +    "decision"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / evidence / deprecated
        Added value: +true
      • changedOutput schema / properties / evidence / description
        Previous value: -"Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed."New value: +"DEPRECATED: identical to claim.evidence. Use claim.decision, not evidence.confidence."
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "baseline",
        -  "evidence"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "baseline",
        +  "claim",
        +  "evidence"
        +]
  7. 7 tool updatesv1.0.23
    • Changedaggregate_measurements1 field changed
      • changedInput schema / properties / source_priority / description
        Previous value: -"Ordered list of source names, e.g. [\"Apple\nWatch\", \"Garmin\"]. For any metric with more than one source\nthat day, the first name in this list that's actually present\nwins in \"aggregated\" and the other source's readings for that\nmetric are dropped from that preview. Omit to fall back to\nwhichever source was imported most recently. Never affects\n\"row\" — see above."New value: +"Ordered list of source names, e.g. [\"Apple\nWatch\", \"Garmin\"]. For any metric with more than one source\nthat day, the first name in this list that's actually present\nwins in \"aggregated\" and the other source's readings for that\nmetric are dropped from that preview. Omit to use the stored\npriority list and the same fallback the stored projection\nuses. Never affects \"row\" — see above."
    • Changedcalculate_metric_trend11 fields changed
      • removedOutput schema / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "trend",
        -  "evidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric",
        +  "range",
        +  "trend",
        +  "evidence"
        +]
    • Changedcompare_metric_periods11 fields changed
      • removedOutput schema / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "period_a",
        -  "period_b",
        -  "period_a_stats",
        -  "period_b_stats",
        -  "period_a_evidence",
        -  "period_b_evidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric",
        +  "period_a",
        +  "period_b",
        +  "period_a_stats",
        +  "period_b_stats",
        +  "period_a_evidence",
        +  "period_b_evidence"
        +]
    • Changeddetect_metric_anomalies11 fields changed
      • removedOutput schema / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "threshold",
        -  "anomalies",
        -  "evidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric",
        +  "range",
        +  "threshold",
        +  "anomalies",
        +  "evidence"
        +]
    • Changedexplain_metric_change32 fields changed
      • removedOutput schema / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / correlated_metrics / items / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / correlated_metrics / items / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / correlated_metrics / items / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / correlated_metrics / items / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / properties / correlated_metrics / items / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "sample_confidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "sample_confidence"
        +]
      • removedOutput schema / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / evidence_profile / type
        Added value: +"object"
      • removedOutput schema / properties / trend_claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / trend_claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / trend_claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / trend_claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / trend_claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / trend_evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / trend_evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / trend_evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / trend_evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / trend_evidence_profile / type
        Added value: +"object"
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "date",
        -  "baseline_range",
        -  "baseline",
        -  "is_anomaly",
        -  "trend",
        -  "correlated_metrics",
        -  "narrative_facts",
        -  "baseline_evidence",
        -  "trend_evidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric",
        +  "date",
        +  "baseline_range",
        +  "baseline",
        +  "is_anomaly",
        +  "trend",
        +  "correlated_metrics",
        +  "narrative_facts",
        +  "baseline_evidence",
        +  "trend_evidence",
        +  "trend_evidence_profile",
        +  "trend_claim_decision"
        +]
    • Changedfind_metric_correlation11 fields changed
      • removedOutput schema / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n",
        -  "sample_confidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "sample_confidence"
        +]
    • Changedget_recent_changes11 fields changed
      • removedOutput schema / properties / changes / items / properties / claim_decision / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "must_state": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "permitted_phrasing_class": {
        -        "type": "string"
        -      },
        -      "template": {
        -        "type": "string"
        -      },
        -      "tier": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "tier",
        -      "permitted_phrasing_class",
        -      "must_state",
        -      "template"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / changes / items / properties / claim_decision / default
        Removed value: -null
      • addedOutput schema / properties / changes / items / properties / claim_decision / properties
        Added value: +{
        +  "must_state": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "permitted_phrasing_class": {
        +    "type": "string"
        +  },
        +  "template": {
        +    "type": "string"
        +  },
        +  "tier": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / changes / items / properties / claim_decision / required
        Added value: +[
        +  "tier",
        +  "permitted_phrasing_class",
        +  "must_state",
        +  "template"
        +]
      • addedOutput schema / properties / changes / items / properties / claim_decision / type
        Added value: +"object"
      • removedOutput schema / properties / changes / items / properties / evidence_profile / anyOf
        Removed value: -[
        -  {
        -    "properties": {
        -      "analysis": {
        -        "type": "string"
        -      },
        -      "dimensions": {
        -        "items": {
        -          "properties": {
        -            "can_block": {
        -              "default": true,
        -              "type": "boolean"
        -            },
        -            "details": {
        -              "additionalProperties": true,
        -              "type": "object"
        -            },
        -            "dimension": {
        -              "enum": [
        -                "sample",
        -                "temporal",
        -                "robustness",
        -                "missingness",
        -                "practical",
        -                "measurement_validity",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "reason_codes": {
        -              "items": {
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "status": {
        -              "enum": [
        -                "adequate",
        -                "negligible",
        -                "not_assessed",
        -                "weak",
        -                "concern",
        -                "blocking"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "dimension",
        -            "status"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "effect": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "metric": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "metric",
        -      "analysis",
        -      "dimensions"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedOutput schema / properties / changes / items / properties / evidence_profile / default
        Removed value: -null
      • addedOutput schema / properties / changes / items / properties / evidence_profile / properties
        Added value: +{
        +  "analysis": {
        +    "type": "string"
        +  },
        +  "dimensions": {
        +    "items": {
        +      "properties": {
        +        "can_block": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "details": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "dimension": {
        +          "enum": [
        +            "sample",
        +            "temporal",
        +            "robustness",
        +            "missingness",
        +            "practical",
        +            "measurement_validity",
        +            "provenance"
        +          ],
        +          "type": "string"
        +        },
        +        "reason_codes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "enum": [
        +            "adequate",
        +            "negligible",
        +            "not_assessed",
        +            "weak",
        +            "concern",
        +            "blocking"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "dimension",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "effect": {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  "metric": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / changes / items / properties / evidence_profile / required
        Added value: +[
        +  "metric",
        +  "analysis",
        +  "dimensions"
        +]
      • addedOutput schema / properties / changes / items / properties / evidence_profile / type
        Added value: +"object"
      • changedOutput schema / properties / changes / items / required
        Previous value: -[
        -  "metric",
        -  "kind",
        -  "detail",
        -  "evidence"
        -]New value: +[
        +  "evidence_profile",
        +  "claim_decision",
        +  "metric",
        +  "kind",
        +  "detail",
        +  "evidence"
        +]
  8. 6 tool updatesv1.0.20
    • Changedcalculate_metric_trend2 fields changed
      • addedOutput schema / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
    • Changedcompare_metric_periods2 fields changed
      • addedOutput schema / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
    • Changeddetect_metric_anomalies2 fields changed
      • addedOutput schema / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
    • Changedexplain_metric_change6 fields changed
      • addedOutput schema / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
      • addedOutput schema / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
      • addedOutput schema / properties / trend_claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / trend_evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedfind_metric_correlation2 fields changed
      • addedOutput schema / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
    • Changedget_recent_changes2 fields changed
      • addedOutput schema / properties / changes / items / properties / claim_decision
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "must_state": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "permitted_phrasing_class": {
        +          "type": "string"
        +        },
        +        "template": {
        +          "type": "string"
        +        },
        +        "tier": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tier",
        +        "permitted_phrasing_class",
        +        "must_state",
        +        "template"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "How strongly this result may be stated. tier is insufficient, suggestive, detectable_not_meaningful or supported; every entry in must_state has to be mentioned when reporting it."
        +}
      • addedOutput schema / properties / changes / items / properties / evidence_profile
        Added value: +{
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "analysis": {
        +          "type": "string"
        +        },
        +        "dimensions": {
        +          "items": {
        +            "properties": {
        +              "can_block": {
        +                "default": true,
        +                "type": "boolean"
        +              },
        +              "details": {
        +                "additionalProperties": true,
        +                "type": "object"
        +              },
        +              "dimension": {
        +                "enum": [
        +                  "sample",
        +                  "temporal",
        +                  "robustness",
        +                  "missingness",
        +                  "practical",
        +                  "measurement_validity",
        +                  "provenance"
        +                ],
        +                "type": "string"
        +              },
        +              "reason_codes": {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "status": {
        +                "enum": [
        +                  "adequate",
        +                  "negligible",
        +                  "not_assessed",
        +                  "weak",
        +                  "concern",
        +                  "blocking"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "dimension",
        +              "status"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "effect": {
        +          "additionalProperties": true,
        +          "type": "object"
        +        },
        +        "metric": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "metric",
        +        "analysis",
        +        "dimensions"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Per-dimension evidence quality behind this result (sample, temporal, missingness, ...). Dimensions without an evaluator yet are 'not_assessed' and cap the claim, never count as adequate."
        +}
  9. 4 tool updatesv1.0.19
    • Changedaggregate_measurements2 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"The day to aggregate, formatted YYYY-MM-DD."New value: +"The day to preview, formatted YYYY-MM-DD."
      • changedInput schema / properties / source_priority / description
        Previous value: -"Ordered list of source names, e.g. [\"Apple\nWatch\", \"Garmin\"]. For any metric with more than one source\nthat day, the first name in this list that's actually present\nwins and the other source's readings for that metric are\ndropped from the aggregate. Omit to fall back to whichever\nsource was imported most recently."New value: +"Ordered list of source names, e.g. [\"Apple\nWatch\", \"Garmin\"]. For any metric with more than one source\nthat day, the first name in this list that's actually present\nwins in \"aggregated\" and the other source's readings for that\nmetric are dropped from that preview. Omit to fall back to\nwhichever source was imported most recently. Never affects\n\"row\" — see above."
    • Changedexplain_metric_change3 fields changed
      • addedOutput schema / properties / conflicting_days
        Added value: +{
        +  "default": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / sample_confidence
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / correlated_metrics / items / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "sample_confidence"
        +]
    • Changedfind_metric_correlation2 fields changed
      • addedOutput schema / properties / sample_confidence
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric_a",
        -  "metric_b",
        -  "lag_days",
        -  "n"
        -]New value: +[
        +  "metric_a",
        +  "metric_b",
        +  "lag_days",
        +  "n",
        +  "sample_confidence"
        +]
    • Changedlog_measurement1 field changed
      • changedInput schema / properties / metric / description
        Previous value: -"Name of the metric, e.g. \"resting_heart_rate\", \"steps\".\nFree-form — not limited to daily_metrics' fixed columns."New value: +"Name of the metric, e.g. \"resting_heart_rate\", \"steps\".\nNot free-form: must already have an entry in the\naggregation_rules table (steps, sleep_hours,\nresting_heart_rate, weight_kg, workout_minutes, mood,\nwater_ml, heart_rate, hrv_ms, out of the box) — daily_metrics\nis a database-maintained projection over measurements (see\ndb/schema.sql), so every metric written to it needs a known\naggregation method (sum/mean/last) or there would be nothing\ntelling the projection how to roll same-day readings up.\nmetrics_schema lists the current set."
  10. 4 tool updatesv1.0.17
    • Changedcalculate_metric_trend1 field changed
      • addedOutput schema / properties / trend / properties / span_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedexplain_metric_change1 field changed
      • addedOutput schema / properties / trend / properties / span_days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedget_recent_changes2 fields changed
      • addedOutput schema / properties / changes / items / properties / evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / changes / items / required
        Previous value: -[
        -  "metric",
        -  "kind",
        -  "detail"
        -]New value: +[
        +  "metric",
        +  "kind",
        +  "detail",
        +  "evidence"
        +]
    • Changedread_health_data2 fields changed
      • addedOutput schema / properties / coverage
        Added value: +{
        +  "description": "Multi-metric coverage for a Layer-1 result spanning several metrics\nat once. See evidence.build_coverage_summary for how each field is\ncomputed; unlike Evidence (one metric, gaps/freshness/recent_gap),\nthis reports a coverage_percent per metric side by side.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_percent": {
        +      "type": "number"
        +    },
        +    "days_expected": {
        +      "type": "integer"
        +    },
        +    "days_with_data": {
        +      "type": "integer"
        +    },
        +    "metrics": {
        +      "additionalProperties": {
        +        "type": "number"
        +      },
        +      "type": "object"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "period": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "period",
        +    "days_expected",
        +    "days_with_data",
        +    "coverage_percent",
        +    "missing_days",
        +    "metrics",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "range",
        -  "rows",
        -  "truncated",
        -  "summary"
        -]New value: +[
        +  "range",
        +  "rows",
        +  "truncated",
        +  "summary",
        +  "coverage"
        +]
  11. 7 tool updates
    • Changedcalculate_metric_trend2 fields changed
      • addedOutput schema / properties / evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "trend"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "trend",
        +  "evidence"
        +]
    • Changedcompare_metric_periods3 fields changed
      • addedOutput schema / properties / period_a_evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / period_b_evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "period_a",
        -  "period_b",
        -  "period_a_stats",
        -  "period_b_stats"
        -]New value: +[
        +  "metric",
        +  "period_a",
        +  "period_b",
        +  "period_a_stats",
        +  "period_b_stats",
        +  "period_a_evidence",
        +  "period_b_evidence"
        +]
    • Changeddetect_metric_anomalies2 fields changed
      • addedOutput schema / properties / evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "threshold",
        -  "anomalies"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "threshold",
        +  "anomalies",
        +  "evidence"
        +]
    • Changedexplain_metric_change5 fields changed
      • addedOutput schema / properties / baseline_evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_a
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / correlated_metrics / items / properties / evidence_b
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / trend_evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "date",
        -  "baseline_range",
        -  "baseline",
        -  "is_anomaly",
        -  "trend",
        -  "correlated_metrics",
        -  "narrative_facts"
        -]New value: +[
        +  "metric",
        +  "date",
        +  "baseline_range",
        +  "baseline",
        +  "is_anomaly",
        +  "trend",
        +  "correlated_metrics",
        +  "narrative_facts",
        +  "baseline_evidence",
        +  "trend_evidence"
        +]
    • Changedfind_metric_correlation2 fields changed
      • addedOutput schema / properties / evidence_a
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / evidence_b
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +      "properties": {
        +        "confidence": {
        +          "type": "string"
        +        },
        +        "coverage_ratio": {
        +          "type": "number"
        +        },
        +        "expected_days": {
        +          "type": "integer"
        +        },
        +        "freshness_days": {
        +          "anyOf": [
        +            {
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "gaps": {
        +          "items": {
        +            "properties": {
        +              "days": {
        +                "type": "integer"
        +              },
        +              "end": {
        +                "type": "string"
        +              },
        +              "start": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "start",
        +              "end",
        +              "days"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "measurement_count": {
        +          "type": "integer"
        +        },
        +        "missing_days": {
        +          "type": "integer"
        +        },
        +        "observed_days": {
        +          "type": "integer"
        +        },
        +        "observed_end": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "observed_start": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "recent_gap_days": {
        +          "type": "integer"
        +        },
        +        "requested_end": {
        +          "type": "string"
        +        },
        +        "requested_start": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requested_start",
        +        "requested_end",
        +        "expected_days",
        +        "observed_days",
        +        "coverage_ratio",
        +        "missing_days",
        +        "measurement_count",
        +        "gaps",
        +        "recent_gap_days",
        +        "confidence"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedget_baseline2 fields changed
      • addedOutput schema / properties / evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "baseline"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "baseline",
        +  "evidence"
        +]
    • Changedget_metric_history2 fields changed
      • addedOutput schema / properties / evidence
        Added value: +{
        +  "description": "Coverage/quality of the data a single-metric analytical result is\nbased on. See evidence.build_evidence for how each field is computed.",
        +  "properties": {
        +    "confidence": {
        +      "type": "string"
        +    },
        +    "coverage_ratio": {
        +      "type": "number"
        +    },
        +    "expected_days": {
        +      "type": "integer"
        +    },
        +    "freshness_days": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "gaps": {
        +      "items": {
        +        "properties": {
        +          "days": {
        +            "type": "integer"
        +          },
        +          "end": {
        +            "type": "string"
        +          },
        +          "start": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end",
        +          "days"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "measurement_count": {
        +      "type": "integer"
        +    },
        +    "missing_days": {
        +      "type": "integer"
        +    },
        +    "observed_days": {
        +      "type": "integer"
        +    },
        +    "observed_end": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "observed_start": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "recent_gap_days": {
        +      "type": "integer"
        +    },
        +    "requested_end": {
        +      "type": "string"
        +    },
        +    "requested_start": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "requested_start",
        +    "requested_end",
        +    "expected_days",
        +    "observed_days",
        +    "coverage_ratio",
        +    "missing_days",
        +    "measurement_count",
        +    "gaps",
        +    "recent_gap_days",
        +    "confidence"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "metric",
        -  "range",
        -  "points"
        -]New value: +[
        +  "metric",
        +  "range",
        +  "points",
        +  "evidence"
        +]
  12. 27 tool updatesv1.0.16
    • Addedaggregate_measurements
    • Addedcalculate_metric_trend
    • Removedclear_daily_metric
    • Removedclear_daily_metrics_range
    • Addedclear_metric
    • Addedcompare_metric_periods
    • Removeddelete_measurement
    • Removeddelete_workout
    • Addeddetect_metric_anomalies
    • Addedexplain_metric_change
    • Addedexport_health_data_csv
    • Addedfind_metric_correlation
    • Addedget_baseline
    • Addedget_metric_history
    • Addedget_metric_provenance
    • Addedget_recent_changes
    • Changedlog_daily_metric15 fields changed
      • addedInput schema / properties / date / description
        Added value: +"The day to log, formatted YYYY-MM-DD."
      • addedInput schema / properties / heart_rate
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Non-resting heart rate reading in bpm. 20-250."
        +}
      • addedInput schema / properties / hrv_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Heart rate variability in milliseconds. 0-300."
        +}
      • addedInput schema / properties / mood
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Mood rating on a 1-10 scale."
        +}
      • addedInput schema / properties / resting_heart_rate / description
        Added value: +"Resting heart rate in bpm. 20-250."
      • addedInput schema / properties / sleep_hours / description
        Added value: +"Hours of sleep. 0-24."
      • addedInput schema / properties / steps / description
        Added value: +"Step count for the day. 0-200,000."
      • addedInput schema / properties / water_ml
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Water intake in millilitres. 0-10,000."
        +}
      • addedInput schema / properties / weight_kg
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Body weight in kilograms. 1-500."
        +}
      • addedInput schema / properties / workout_minutes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Minutes of exercise. 0-1,440."
        +}
      • addedOutput schema / properties / logged
        Added value: +{
        +  "additionalProperties": {
        +    "anyOf": [
        +      {
        +        "type": "integer"
        +      },
        +      {
        +        "type": "number"
        +      }
        +    ]
        +  },
        +  "type": "object"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / row
        Added value: +{
        +  "properties": {
        +    "date": {
        +      "type": "string"
        +    },
        +    "heart_rate": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "hrv_ms": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "mood": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "resting_heart_rate": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "sleep_hours": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "steps": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "water_ml": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "weight_kg": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "workout_minutes": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    }
        +  },
        +  "required": [
        +    "date"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "logged",
        +  "row"
        +]
      • removedOutput schema / x-fastmcp-wrap-result
        Removed value: -true
    • Changedlog_measurement14 fields changed
      • removedInput schema / properties / date
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / metric
        Added value: +{
        +  "description": "Name of the metric, e.g. \"resting_heart_rate\", \"steps\".\nFree-form — not limited to daily_metrics' fixed columns.",
        +  "type": "string"
        +}
      • removedInput schema / properties / metric_name
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / notes
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • addedInput schema / properties / source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Where this came from, e.g. \"Apple Watch\", \"manual\". Optional."
        +}
      • addedInput schema / properties / source_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Category of source, e.g. \"wearable\", \"manual\", \"app\". Optional."
        +}
      • addedInput schema / properties / timestamp
        Added value: +{
        +  "description": "When the observation was taken, YYYY-MM-DD or a full\nISO 8601 timestamp (YYYY-MM-DDTHH:MM:SS).",
        +  "type": "string"
        +}
      • addedInput schema / properties / unit / description
        Added value: +"Unit the value is in, e.g. \"bpm\", \"kg\". Optional."
      • addedInput schema / properties / value / description
        Added value: +"The numeric reading."
      • changedInput schema / required
        Previous value: -[
        -  "date",
        -  "metric_name",
        -  "value"
        -]New value: +[
        +  "timestamp",
        +  "metric",
        +  "value"
        +]
      • addedOutput schema / properties / measurement
        Added value: +{
        +  "properties": {
        +    "created_at": {
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "integer"
        +    },
        +    "metric": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "timestamp": {
        +      "type": "string"
        +    },
        +    "unit": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null
        +    },
        +    "value": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "timestamp",
        +    "metric",
        +    "value",
        +    "created_at"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "measurement"
        +]
      • removedOutput schema / x-fastmcp-wrap-result
        Removed value: -true
    • Removedlog_workout
    • Addedlog_workout_session
    • Removedread_finance_data
    • Changedread_health_data9 fields changed
      • addedInput schema / properties / end_date / description
        Added value: +"Last day to include, formatted YYYY-MM-DD. Defaults to today."
      • addedInput schema / properties / start_date / description
        Added value: +"First day to include, formatted YYYY-MM-DD.\nDefaults to 30 days before end_date. Ranges over ~10 years are rejected."
      • addedOutput schema / properties / range
        Added value: +{
        +  "properties": {
        +    "end_date": {
        +      "type": "string"
        +    },
        +    "start_date": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "start_date",
        +    "end_date"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / rows
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "date": {
        +        "type": "string"
        +      },
        +      "heart_rate": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "hrv_ms": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "mood": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "resting_heart_rate": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "sleep_hours": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "steps": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "water_ml": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "weight_kg": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "workout_minutes": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "required": [
        +      "date"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / summary
        Added value: +{
        +  "properties": {
        +    "days_with_data": {
        +      "type": "integer"
        +    },
        +    "heart_rate": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "hrv_ms": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "mood": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "resting_heart_rate": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "sleep_hours": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "steps": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "water_ml": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "weight_kg": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "workout_minutes": {
        +      "properties": {
        +        "avg": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "max": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "min": {
        +          "anyOf": [
        +            {
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "days_with_data",
        +    "steps",
        +    "sleep_hours",
        +    "resting_heart_rate",
        +    "weight_kg",
        +    "workout_minutes",
        +    "mood",
        +    "water_ml",
        +    "heart_rate",
        +    "hrv_ms"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "range",
        +  "rows",
        +  "truncated",
        +  "summary"
        +]
      • removedOutput schema / x-fastmcp-wrap-result
        Removed value: -true
    • Addedread_measurements
    • Addedread_workout_sessions
    • Removedupdate_daily_metric
    • Removedupdate_measurement
    • Removedupdate_workout
  13. 27 tool updatesv1.0.15
    • Removedaggregate_measurements
    • Removedcalculate_metric_trend
    • Addedclear_daily_metric
    • Addedclear_daily_metrics_range
    • Removedclear_metric
    • Removedcompare_metric_periods
    • Addeddelete_measurement
    • Addeddelete_workout
    • Removeddetect_metric_anomalies
    • Removedexplain_metric_change
    • Removedexport_health_data_csv
    • Removedfind_metric_correlation
    • Removedget_baseline
    • Removedget_metric_history
    • Removedget_metric_provenance
    • Removedget_recent_changes
    • Changedlog_daily_metric15 fields changed
      • removedInput schema / properties / date / description
        Removed value: -"The day to log, formatted YYYY-MM-DD."
      • removedInput schema / properties / heart_rate
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Non-resting heart rate reading in bpm. 20-250."
        -}
      • removedInput schema / properties / hrv_ms
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Heart rate variability in milliseconds. 0-300."
        -}
      • removedInput schema / properties / mood
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Mood rating on a 1-10 scale."
        -}
      • removedInput schema / properties / resting_heart_rate / description
        Removed value: -"Resting heart rate in bpm. 20-250."
      • removedInput schema / properties / sleep_hours / description
        Removed value: -"Hours of sleep. 0-24."
      • removedInput schema / properties / steps / description
        Removed value: -"Step count for the day. 0-200,000."
      • removedInput schema / properties / water_ml
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Water intake in millilitres. 0-10,000."
        -}
      • removedInput schema / properties / weight_kg
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Body weight in kilograms. 1-500."
        -}
      • removedInput schema / properties / workout_minutes
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Minutes of exercise. 0-1,440."
        -}
      • removedOutput schema / properties / logged
        Removed value: -{
        -  "additionalProperties": {
        -    "anyOf": [
        -      {
        -        "type": "integer"
        -      },
        -      {
        -        "type": "number"
        -      }
        -    ]
        -  },
        -  "type": "object"
        -}
      • addedOutput schema / properties / result
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / row
        Removed value: -{
        -  "properties": {
        -    "date": {
        -      "type": "string"
        -    },
        -    "heart_rate": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "hrv_ms": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "mood": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "resting_heart_rate": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "sleep_hours": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "steps": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "water_ml": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "weight_kg": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "workout_minutes": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    }
        -  },
        -  "required": [
        -    "date"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "logged",
        -  "row"
        -]New value: +[
        +  "result"
        +]
      • addedOutput schema / x-fastmcp-wrap-result
        Added value: +true
    • Changedlog_measurement14 fields changed
      • addedInput schema / properties / date
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / metric
        Removed value: -{
        -  "description": "Name of the metric, e.g. \"resting_heart_rate\", \"steps\".\nFree-form — not limited to daily_metrics' fixed columns.",
        -  "type": "string"
        -}
      • addedInput schema / properties / metric_name
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / notes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedInput schema / properties / source
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Where this came from, e.g. \"Apple Watch\", \"manual\". Optional."
        -}
      • removedInput schema / properties / source_type
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Category of source, e.g. \"wearable\", \"manual\", \"app\". Optional."
        -}
      • removedInput schema / properties / timestamp
        Removed value: -{
        -  "description": "When the observation was taken, YYYY-MM-DD or a full\nISO 8601 timestamp (YYYY-MM-DDTHH:MM:SS).",
        -  "type": "string"
        -}
      • removedInput schema / properties / unit / description
        Removed value: -"Unit the value is in, e.g. \"bpm\", \"kg\". Optional."
      • removedInput schema / properties / value / description
        Removed value: -"The numeric reading."
      • changedInput schema / required
        Previous value: -[
        -  "timestamp",
        -  "metric",
        -  "value"
        -]New value: +[
        +  "date",
        +  "metric_name",
        +  "value"
        +]
      • removedOutput schema / properties / measurement
        Removed value: -{
        -  "properties": {
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "integer"
        -    },
        -    "metric": {
        -      "type": "string"
        -    },
        -    "source": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "source_type": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "timestamp": {
        -      "type": "string"
        -    },
        -    "unit": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null
        -    },
        -    "value": {
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "id",
        -    "timestamp",
        -    "metric",
        -    "value",
        -    "created_at"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / result
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "measurement"
        -]New value: +[
        +  "result"
        +]
      • addedOutput schema / x-fastmcp-wrap-result
        Added value: +true
    • Addedlog_workout
    • Removedlog_workout_session
    • Addedread_finance_data
    • Changedread_health_data9 fields changed
      • removedInput schema / properties / end_date / description
        Removed value: -"Last day to include, formatted YYYY-MM-DD. Defaults to today."
      • removedInput schema / properties / start_date / description
        Removed value: -"First day to include, formatted YYYY-MM-DD.\nDefaults to 30 days before end_date. Ranges over ~10 years are rejected."
      • removedOutput schema / properties / range
        Removed value: -{
        -  "properties": {
        -    "end_date": {
        -      "type": "string"
        -    },
        -    "start_date": {
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "start_date",
        -    "end_date"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / result
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / rows
        Removed value: -{
        -  "items": {
        -    "properties": {
        -      "date": {
        -        "type": "string"
        -      },
        -      "heart_rate": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "hrv_ms": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "mood": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "resting_heart_rate": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "sleep_hours": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "steps": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "water_ml": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "weight_kg": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "workout_minutes": {
        -        "anyOf": [
        -          {
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      }
        -    },
        -    "required": [
        -      "date"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedOutput schema / properties / summary
        Removed value: -{
        -  "properties": {
        -    "days_with_data": {
        -      "type": "integer"
        -    },
        -    "heart_rate": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "hrv_ms": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "mood": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "resting_heart_rate": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "sleep_hours": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "steps": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "water_ml": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "weight_kg": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "workout_minutes": {
        -      "properties": {
        -        "avg": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "max": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        },
        -        "min": {
        -          "anyOf": [
        -            {
        -              "type": "number"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "days_with_data",
        -    "steps",
        -    "sleep_hours",
        -    "resting_heart_rate",
        -    "weight_kg",
        -    "workout_minutes",
        -    "mood",
        -    "water_ml",
        -    "heart_rate",
        -    "hrv_ms"
        -  ],
        -  "type": "object"
        -}
      • removedOutput schema / properties / truncated
        Removed value: -{
        -  "type": "boolean"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "range",
        -  "rows",
        -  "truncated",
        -  "summary"
        -]New value: +[
        +  "result"
        +]
      • addedOutput schema / x-fastmcp-wrap-result
        Added value: +true
    • Removedread_measurements
    • Removedread_workout_sessions
    • Addedupdate_daily_metric
    • Addedupdate_measurement
    • Addedupdate_workout
  14. 3 tool updatesv0.3.0
    • Changedexplain_metric_change1 field changed
      • addedOutput schema / properties / sessions
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "properties": {
        +      "activity_type": {
        +        "type": "string"
        +      },
        +      "avg_heart_rate": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "date": {
        +        "type": "string"
        +      },
        +      "duration_minutes": {
        +        "type": "integer"
        +      },
        +      "id": {
        +        "type": "integer"
        +      },
        +      "intensity": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "max_heart_rate": {
        +        "anyOf": [
        +          {
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "notes": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "source": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "start_time": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "date",
        +      "activity_type",
        +      "duration_minutes",
        +      "created_at"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Addedlog_workout_session
    • Addedread_workout_sessions

TDQS

A4.4/5.0

Scored across 20 tools

Disambiguation5/5

Every tool carries explicit 'use this when' and 'do not use this when' guidance that routes overlapping analytics tools to one another, so the boundaries between get_baseline, detect_metric_anomalies, calculate_metric_trend, compare_metric_periods, get_recent_changes, and explain_metric_change are unambiguous. Read paths (read_health_data vs get_metric_history vs read_measurements) and write paths (log_measurement vs log_daily_metric vs log_workout_session) are similarly well-separated.

Naming Consistency5/5

All 20 tools use lower_snake_case with a clear verb_noun shape (get_*, read_*, log_*, calculate_*, detect_*, compare_*, find_*, export_*, clear_*), plus one consistent naming of the aggregate. There are no camelCase/naming aberrations or vague single-word verbs, so the pattern is highly predictable.

Tool Count4/5

At 20 tools this is on the heavier end, but the domain genuinely spans raw observations, daily aggregates, workouts, imports, exports, and a layered analytics stack, and each tool earns its place. It sits just below the 'heavy' 16-25 range boundary, so it is slightly over but reasonable.

Completeness4/5

The surface covers ingestion (raw and daily), clearing/undo, multi-source provenance, freshness and import monitoring, CSV export, and a full analytics suite, which is near-complete for a quantified-self domain. Minor gaps exist, such as no explicit update/edit for an already-logged workout session (only day-level clear_metric), which an agent can work around.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying personal data synced from services like Lunch Money and Strava using SQL via Claude.
    7 npm
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to interact with local SQLite databases with full CRUD, schema introspection, foreign key relations, generated columns, and multi-format import/export (CSV, JSON, XLSX) through natural language.
    26
    8 npm
    MIT