Skip to main content
Glama
Thecimal

Quantified Self MCP Server

Explain a metric change

explain_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…

Instructions

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.

Input 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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.0.30
    • 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)."
      +}
  2. Changed8 schema fields changedv1.0.28
    • 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"
      +]
  3. Changed2 schema fields changedv1.0.27
    • 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"
      +]
  4. Changed35 schema fields changedv1.0.26
    • 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"
      +]
  5. Changed32 schema fields changedv1.0.23
    • 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"
      +]
  6. Changed6 schema fields changedv1.0.20
    • 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
      +}
  7. Changed3 schema fields changedv1.0.19
    • 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"
      +]
  8. Changed1 schema field changedv1.0.17
    • addedOutput schema / properties / trend / properties / span_days
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  9. Changed5 schema 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"
      +]
  10. Addedv1.0.16
  11. Removedv1.0.15
  12. Changed1 schema field changedv0.3.0
    • 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"
      +}
  13. Addedv1.0.11

TDQS

A4.7/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 goes further by disclosing the key non-obvious trait: the tool returns facts, not a narrative explanation, and the calling model must do the reasoning. The privacy/data-flow note about data entering the cloud conversation is a valuable behavioral disclosure absent from 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?

Front-loaded with the core purpose, then cleanly segmented into scope, negative-routing bullets, and a privacy note. Despite its length, every block earns its place and no sentence is redundant.

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?

An output schema exists, so return-value documentation is unnecessary; the description instead conveys the semantic richness needed (what the bundle comprises, that it is raw evidence rather than a verdict). Combined with full usage routing, an agent has everything required to call and interpret 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?

Schema description coverage is 100%, so the schema already documents both `metric` (with its allowed value list) and `date` (YYYY-MM-DD). The description frames the metric/date pairing conceptually but adds no format or validation detail beyond the schema, so the baseline of 3 is correct.

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?

Opens with a specific verb+resource and a concrete framing ('Build an evidence bundle for why did my <metric> look like that on <date>'), then enumerates exactly what the bundle contains (day value vs 90-day baseline, anomaly qualification, trend, correlated metrics). It explicitly disambiguates from siblings like get_recent_changes and the single-purpose component tools, so an agent can route correctly 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?

Provides an explicit 'Do not use this tool when' section with two named scenarios (broad multi-metric scanning vs. needing only one piece of the bundle) and maps each to the exact alternative tool. This is textbook when/when-not/alternatives guidance.

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