SERVICE / DETAILother

gauge/precip

GET aeml-x402.zeabur.app/gauge/precip

SONAR SCORE0.846
LIVE PRICE0.005000
BAZAAR LIVEnot compatible
CDP INDEXEDno
DECISION EVIDENCE

Why an agent can trust this route.

10 observations in the last 24h
HANDSHAKE SUCCESS100.0%402 challenge reachable
PAID DELIVERY0.0%settlement observed
P90 LATENCY480msrecent response window
PRICE DRIFT0.0%advertised vs observed

Sonar evidence is advisory. Paid delivery is shown as verified only when paid probes are available; otherwise route estimates use the unpaid handshake as a clearly labeled proxy.

SONAR PROBE HISTORY / 30D

Observed outcomes

JSON ↗
LIVE ENDPOINT METADATA

No provider description has been published.

Resource: aeml-x402.zeabur.app/gauge/precip

Network: base · Asset: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 · Pay to: 0x2d16a243ba9fAcC6AC85519d5efad2149DC4C6c3

Payment methods: — · Last validation: 2026-10-15 11:42:01.261+00

{
  "input": null,
  "output": null,
  "paymentRequirements": [
    {
      "raw": {
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "extra": {
          "name": "USD Coin",
          "version": "2"
        },
        "payTo": "0x2d16a243ba9fAcC6AC85519d5efad2149DC4C6c3",
        "amount": "5000",
        "scheme": "exact",
        "network": "base",
        "mimeType": "application/json",
        "resource": "https://aeml-x402.zeabur.app/gauge/precip",
        "extensions": {
          "bazaar": {
            "info": {
              "input": {
                "type": "http",
                "method": "GET",
                "queryParams": {
                  "loc": "required - location id; full list at free /gauge/preview"
                }
              },
              "output": {
                "type": "json"
              }
            },
            "schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "properties": {
                "input": {
                  "type": "object",
                  "required": [
                    "type",
                    "method",
                    "queryParams"
                  ],
                  "properties": {
                    "type": {
                      "const": "http"
                    },
                    "method": {
                      "enum": [
                        "GET"
                      ],
                      "type": "string"
                    },
                    "queryParams": {
                      "type": "object",
                      "required": [
                        "loc"
                      ],
                      "properties": {
                        "loc": {
                          "type": "string",
                          "examples": [
                            "us-stlouis",
                            "us-memphis",
                            "us-losangeles",
                            "us-fresno",
                            "us-phoenix",
                            "us-denver"
                          ],
                          "description": "required - location id; full list at free /gauge/preview",
                          "x-accepted-values": {
                            "all": "https://api.truthbear.co/schemas/gauge-precip.input.json",
                            "shown": 6,
                            "total": 12
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  }
                },
                "output": {
                  "type": "object",
                  "required": [
                    "type"
                  ],
                  "properties": {
                    "type": {
                      "const": "json"
                    }
                  }
                }
              }
            },
            "priceUsd": "$0.005",
            "discoverable": true,
            "outputSchema": {
              "type": "object",
              "required": [
                "nature",
                "readings"
              ],
              "properties": {
                "line": {
                  "type": "string",
                  "description": "The line this bundle belongs to (e.g. airquality)"
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Human-readable name of the object"
                },
                "note": {
                  "type": "string",
                  "description": "Conditional - endpoint-specific honest disclosure (limits, granularity, disclaimer); some endpoints omit it"
                },
                "addon": {
                  "enum": [
                    "air",
                    "precip"
                  ],
                  "type": "string",
                  "description": "Conditional - returned only by the /gauge/air and /gauge/precip sub-endpoints: the add-on line marker"
                },
                "grade": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Honest data-grade disclosure (e.g. \"screening-level, not decision-grade\")"
                },
                "scope": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Honest statement of scope and limits: monitoring is not forecasting, intelligence is not instruction, and the boundary of what is verifiable"
                },
                "nature": {
                  "type": "string",
                  "description": "Neutrality statement: GAUGE supplies observations and trend description only - no judgement, no prediction, no recommendation"
                },
                "location": {
                  "type": "string",
                  "description": "The location key of this bundle - the ?loc= you passed in"
                },
                "readings": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "change": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Change, nested per metric: change.<metric> = {delta, direction, direction_reason?}, plus the scalar change.period (e.g. \"vs_previous\"). direction is one of rising/falling/stable/unknown - unknown means the direction CANNOT BE DETERMINED, it does not mean stable; in that case direction_reason carries a machine-readable cause: no-previous-record / metric-absent-in-previous / metric-absent-in-current / non-numeric-value"
                      },
                      "entity": {
                        "type": "string",
                        "description": "Monitored object id (e.g. btc / us / hormuz); full list at free /gauge/catalog or /gauge/preview"
                      },
                      "strata": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Statistical strata: share of each official band over the last 5 same-season years plus the band the current value falls in; null when there are no statistics"
                      },
                      "current": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Current reading. The inner metric structure varies by signal (crypto -> {price_usd, volume_24h, ...}; shipping -> {wind_kmh, wave_height_m, ...}). Units are carried in the field-name suffix; see also standard_ruler.unit"
                      },
                      "sources": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object"
                        },
                        "description": "Source list [{name, value, weight, as_of, role, independent, relay_of?}]. independent:true = confirmed independent source; false = confirmed relay channel of another source (relay_of names the origin); null = independence unconfirmed (neither denied nor claimed). name/weight/independent/relay_of are record_hash core fields, so tampering with an independence claim breaks self-verification; as_of/value/role drift easily and are not hashed"
                      },
                      "previous": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Previous-period reading (a subset of the metrics in current; or {note} explaining that there is no previous value)"
                      },
                      "trend_7d": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "object"
                        },
                        "description": "Array of the last 7 trend points; [] means this signal has no series yet or the series does not apply - it is not an error"
                      },
                      "lifecycle": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Lifecycle block (state / birth_at / end_at / death_type / context). Part of the record_hash v3 core, so offline recomputation must include it; null for non-lifecycle lines"
                      },
                      "signal_id": {
                        "type": "string",
                        "description": "Signal id in genus.species ASCII binomial form (e.g. crypto.spot / macro.unemployment / shipping.route-disruption); full list at free /gauge/catalog"
                      },
                      "ots_status": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "RETIRED FIELD - always \"pending\" or null; this field is no longer updated and is kept only for older parsers. Anchoring is done per write-batch (previously one root per day): each batch of writes gets a Merkle root stamped via OpenTimestamps, typically confirmed into a Bitcoin block within hours. See GET /gauge/anchor?hash= for the inclusion proof and the block number."
                      },
                      "source_ref": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Official source URL (provenance)"
                      },
                      "stat_ruler": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Statistical ruler: empirical percentile position across the last 5 same-season years; null when there are no statistics"
                      },
                      "summary_zh": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Human-readable one-line summary, IN CHINESE (zh-TW): reading + where it sits on the official ruler + statistical position. This is the HUMAN front-desk copy - machine consumers should read summary_en (English verdict) instead"
                      },
                      "unverified": {
                        "type": "boolean",
                        "description": "true = the source is untiered (source_tier is null); buyers and agents can filter on this"
                      },
                      "entity_name": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Human-readable name of the object"
                      },
                      "observed_at": {
                        "type": "string",
                        "description": "Actual observation time of the data, ISO-8601"
                      },
                      "record_hash": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "sha256:<64hex> (contract A v3, binds the values plus provenance)"
                      },
                      "source_tier": {
                        "type": [
                          "string",
                          "null"
                        ],
                        "description": "Source tier: T1 (first-hand official) / T2 or T2-<subtype, e.g. T2-exchange> (observable, curated) / screen-viewpoint; null = untiered (see unverified)"
                      },
                      "snapshot_date": {
                        "type": "string",
                        "description": "ISO-8601 date-time in UTC (e.g. 2026-07-24T00:00:00.000Z; aligned to midnight of that day)"
                      },
                      "data_age_hours": {
                        "type": [
                          "number",
                          "null"
                        ],
                        "description": "Age frozen at collection time (0 = same hour), for reference only - if a collector stalls this field stops moving. For freshness always use provenance.age_hours_now (computed at request time) and provenance.freshness; the threshold basis is in provenance.freshness_basis"
                      },
                      "standard_ruler": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Official standard ruler (band / thresholds / normalized_index / pct_to_action, with unit and provenance); null when the line has no official ruler. Inner structure varies by signal"
                      },
                      "hash_core_version": {
                        "type": [
                          "integer",
                          "null"
                        ],
                        "description": "Core-contract version of record_hash (currently 3); use it to pick the right core composition when recomputing offline"
                      },
                      "source_agreement_cv": {
                        "type": [
                          "number",
                          "null"
                        ],
                        "description": "Multi-source agreement, coefficient of variation (smaller = closer agreement). Present ONLY when two or more CONFIRMED-INDEPENDENT sources measure the same fact at the same time - see sources[].independent. Same source relayed through two channels does not count as independent, and two different time bases (daily mean vs spot) do not count as agreement. Single-source / unconfirmed independence / not applicable -> null"
                      },
                      "record_hash_verifiable": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "{mode:offline|via-endpoint, note}"
                      }
                    },
                    "additionalProperties": true
                  },
                  "description": "CORE DELIVERY of this endpoint: multiple signal readings for the same location. Per-row shape is in items - the single-signal fields live INSIDE items, not at the top level"
                },
                "_citation": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Offline-verifiable citation: {statement_type, not_advice:bool, claim, fact, source, record_hash, signature(Ed25519), key_id, issuer_DID(did:key), verify_url} - the trust root for zero-trust self-verification"
                },
                "provenance": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Data lineage: {served_from, data_as_of, oldest_leg_as_of, data_age_hours (frozen age, reference only), age_hours_now (age computed at request time - the real basis for freshness), freshness(fresh|recent|stale), freshness_basis (the cadence and threshold used for this row, as a string), dead_source (optional: upstream frozen or discontinued), data_lineage:[{signal,traceable_to,uncertainty,record_hash,...}], validation_status}. Freshness is cadence-aware, so monthly/quarterly/annual official lines are not misjudged against a 24h rule; the same basis is used by free /gauge/coverage. Buyers can trace back to the official source"
                },
                "decision_points": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "{count, points:[{tag,current,swappable,how}], note} - decision points you can re-run with a swapped tag (one swapped tag = one call); leave it alone and the original context is the default, at no extra charge"
                }
              },
              "additionalProperties": true,
              "conditionalProperties": {
                "last_fact": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Most recent qualifying fact for this line and entity, attached centrally (may be absent when the line has no qualifying fact yet)"
                },
                "decision_points": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Swappable decision points for this entity, attached centrally: {count, points:[{tag,current,swappable,how}], note}. Present only when the entity has at least one swappable tag in the index, so bundles for entities without one omit it"
                },
                "leg_availability": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Per-leg degradation disclosure: which legs are present, which are degraded and why. Present only when at least one leg is degraded"
                },
                "record_hash_verifiable": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "description": "Whether this response can recompute its own record_hash offline. Present only when the payload carries a top-level record_hash; may be absent on list-shaped deliveries where verifiability is stated per row instead"
                }
              }
            },
            "routeTemplate": "/gauge/precip",
            "priceUsdNumber": 0.005
          }
        },
        "description": "Add-on, precipitation for one location: daily rainfall plus 30-day accumulated wet-dry drought context from ERA5. Descriptive only, never a forecast or advice. No data -> 422 no_charge, not billed. Every record carries an offline-recomputable record_hash. $0.0050 per call.",
        "outputSchema": {
          "input": {
            "type": "http",
            "method": "GET",
            "example": {
              "loc": "us-stlouis"
            },
            "required": [
              "loc"
            ],
            "properties": {
              "loc": {
                "type": "string",
                "examples": [
                  "us-stlouis",
                  "us-memphis",
                  "us-losangeles",
                  "us-fresno",
                  "us-phoenix",
                  "us-denver"
                ],
                "description": "required - location id; full list at free /gauge/preview",
                "x-accepted-values": {
                  "all": "https://api.truthbear.co/schemas/gauge-precip.input.json",
                  "shown": 6,
                  "total": 12
                }
              }
            },
            "queryParams": {
              "loc": "required - location id; full list at free /gauge/preview"
            },
            "discoverable": true,
            "exampleRequest": "/gauge/precip?loc=us-stlouis"
          },
          "output": {
            "type": "object",
            "required": [
              "nature",
              "readings"
            ],
            "properties": {
              "line": {
                "type": "string",
                "description": "The line this bundle belongs to (e.g. airquality)"
              },
              "name": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Human-readable name of the object"
              },
              "note": {
                "type": "string",
                "description": "Conditional - endpoint-specific honest disclosure (limits, granularity, disclaimer); some endpoints omit it"
              },
              "addon": {
                "enum": [
                  "air",
                  "precip"
                ],
                "type": "string",
                "description": "Conditional - returned only by the /gauge/air and /gauge/precip sub-endpoints: the add-on line marker"
              },
              "grade": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Honest data-grade disclosure (e.g. \"screening-level, not decision-grade\")"
              },
              "scope": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Honest statement of scope and limits: monitoring is not forecasting, intelligence is not instruction, and the boundary of what is verifiable"
              },
              "nature": {
                "type": "string",
                "description": "Neutrality statement: GAUGE supplies observations and trend description only - no judgement, no prediction, no recommendation"
              },
              "location": {
                "type": "string",
                "description": "The location key of this bundle - the ?loc= you passed in"
              },
              "readings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "change": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Change, nested per metric: change.<metric> = {delta, direction, direction_reason?}, plus the scalar change.period (e.g. \"vs_previous\"). direction is one of rising/falling/stable/unknown - unknown means the direction CANNOT BE DETERMINED, it does not mean stable; in that case direction_reason carries a machine-readable cause: no-previous-record / metric-absent-in-previous / metric-absent-in-current / non-numeric-value"
                    },
                    "entity": {
                      "type": "string",
                      "description": "Monitored object id (e.g. btc / us / hormuz); full list at free /gauge/catalog or /gauge/preview"
                    },
                    "strata": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Statistical strata: share of each official band over the last 5 same-season years plus the band the current value falls in; null when there are no statistics"
                    },
                    "current": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Current reading. The inner metric structure varies by signal (crypto -> {price_usd, volume_24h, ...}; shipping -> {wind_kmh, wave_height_m, ...}). Units are carried in the field-name suffix; see also standard_ruler.unit"
                    },
                    "sources": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "object"
                      },
                      "description": "Source list [{name, value, weight, as_of, role, independent, relay_of?}]. independent:true = confirmed independent source; false = confirmed relay channel of another source (relay_of names the origin); null = independence unconfirmed (neither denied nor claimed). name/weight/independent/relay_of are record_hash core fields, so tampering with an independence claim breaks self-verification; as_of/value/role drift easily and are not hashed"
                    },
                    "previous": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Previous-period reading (a subset of the metrics in current; or {note} explaining that there is no previous value)"
                    },
                    "trend_7d": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "object"
                      },
                      "description": "Array of the last 7 trend points; [] means this signal has no series yet or the series does not apply - it is not an error"
                    },
                    "lifecycle": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Lifecycle block (state / birth_at / end_at / death_type / context). Part of the record_hash v3 core, so offline recomputation must include it; null for non-lifecycle lines"
                    },
                    "signal_id": {
                      "type": "string",
                      "description": "Signal id in genus.species ASCII binomial form (e.g. crypto.spot / macro.unemployment / shipping.route-disruption); full list at free /gauge/catalog"
                    },
                    "ots_status": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "RETIRED FIELD - always \"pending\" or null; this field is no longer updated and is kept only for older parsers. Anchoring is done per write-batch (previously one root per day): each batch of writes gets a Merkle root stamped via OpenTimestamps, typically confirmed into a Bitcoin block within hours. See GET /gauge/anchor?hash= for the inclusion proof and the block number."
                    },
                    "source_ref": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Official source URL (provenance)"
                    },
                    "stat_ruler": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Statistical ruler: empirical percentile position across the last 5 same-season years; null when there are no statistics"
                    },
                    "summary_zh": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Human-readable one-line summary, IN CHINESE (zh-TW): reading + where it sits on the official ruler + statistical position. This is the HUMAN front-desk copy - machine consumers should read summary_en (English verdict) instead"
                    },
                    "unverified": {
                      "type": "boolean",
                      "description": "true = the source is untiered (source_tier is null); buyers and agents can filter on this"
                    },
                    "entity_name": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Human-readable name of the object"
                    },
                    "observed_at": {
                      "type": "string",
                      "description": "Actual observation time of the data, ISO-8601"
                    },
                    "record_hash": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "sha256:<64hex> (contract A v3, binds the values plus provenance)"
                    },
                    "source_tier": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Source tier: T1 (first-hand official) / T2 or T2-<subtype, e.g. T2-exchange> (observable, curated) / screen-viewpoint; null = untiered (see unverified)"
                    },
                    "snapshot_date": {
                      "type": "string",
                      "description": "ISO-8601 date-time in UTC (e.g. 2026-07-24T00:00:00.000Z; aligned to midnight of that day)"
                    },
                    "data_age_hours": {
                      "type": [
                        "number",
                        "null"
                      ],
                      "description": "Age frozen at collection time (0 = same hour), for reference only - if a collector stalls this field stops moving. For freshness always use provenance.age_hours_now (computed at request time) and provenance.freshness; the threshold basis is in provenance.freshness_basis"
                    },
                    "standard_ruler": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "Official standard ruler (band / thresholds / normalized_index / pct_to_action, with unit and provenance); null when the line has no official ruler. Inner structure varies by signal"
                    },
                    "hash_core_version": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "description": "Core-contract version of record_hash (currently 3); use it to pick the right core composition when recomputing offline"
                    },
                    "source_agreement_cv": {
                      "type": [
                        "number",
                        "null"
                      ],
                      "description": "Multi-source agreement, coefficient of variation (smaller = closer agreement). Present ONLY when two or more CONFIRMED-INDEPENDENT sources measure the same fact at the same time - see sources[].independent. Same source relayed through two channels does not count as independent, and two different time bases (daily mean vs spot) do not count as agreement. Single-source / unconfirmed independence / not applicable -> null"
                    },
                    "record_hash_verifiable": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "description": "{mode:offline|via-endpoint, note}"
                    }
                  },
                  "additionalProperties": true
                },
                "description": "CORE DELIVERY of this endpoint: multiple signal readings for the same location. Per-row shape is in items - the single-signal fields live INSIDE items, not at the top level"
              },
              "_citation": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Offline-verifiable citation: {statement_type, not_advice:bool, claim, fact, source, record_hash, signature(Ed25519), key_id, issuer_DID(did:key), verify_url} - the trust root for zero-trust self-verification"
              },
              "provenance": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Data lineage: {served_from, data_as_of, oldest_leg_as_of, data_age_hours (frozen age, reference only), age_hours_now (age computed at request time - the real basis for freshness), freshness(fresh|recent|stale), freshness_basis (the cadence and threshold used for this row, as a string), dead_source (optional: upstream frozen or discontinued), data_lineage:[{signal,traceable_to,uncertainty,record_hash,...}], validation_status}. Freshness is cadence-aware, so monthly/quarterly/annual official lines are not misjudged against a 24h rule; the same basis is used by free /gauge/coverage. Buyers can trace back to the official source"
              },
              "decision_points": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "{count, points:[{tag,current,swappable,how}], note} - decision points you can re-run with a swapped tag (one swapped tag = one call); leave it alone and the original context is the default, at no extra charge"
              }
            },
            "additionalProperties": true,
            "conditionalProperties": {
              "last_fact": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Most recent qualifying fact for this line and entity, attached centrally (may be absent when the line has no qualifying fact yet)"
              },
              "decision_points": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Swappable decision points for this entity, attached centrally: {count, points:[{tag,current,swappable,how}], note}. Present only when the entity has at least one swappable tag in the index, so bundles for entities without one omit it"
              },
              "leg_availability": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Per-leg degradation disclosure: which legs are present, which are degraded and why. Present only when at least one leg is degraded"
              },
              "record_hash_verifiable": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Whether this response can recompute its own record_hash offline. Present only when the payload carries a top-level record_hash; may be absent on list-shaped deliveries where verifiability is stated per row instead"
              }
            }
          }
        },
        "maxAmountRequired": "5000",
        "maxTimeoutSeconds": 300
      },
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x2d16a243ba9fAcC6AC85519d5efad2149DC4C6c3",
      "scheme": "exact",
      "network": "base",
      "amountAtomic": "5000"
    }
  ]
}
METADATA PROVENANCE

Source catalog records are retained separately from live endpoint observations. Sonar score, uptime, and latency are advisory metrics. CDP indexing is not inferred from validation.