{
  "schema_version": 1,
  "agent_api": {
    "openapi": "/openapi.json",
    "catalog": "/api/v1/catalog",
    "changes": "/api/v1/changes",
    "compact_alerts": "/api/v1/alerts/history",
    "schemas": "/schemas/v1/node.json"
  },
  "discovery_version": "1.0.0",
  "canonical_origin": "https://angeloi.net",
  "registry": "/registry.json",
  "node_template": "/nodes/{permanent-id}",
  "json_suffix": ".json",
  "definition_fields": {
    "meaning": "Exact measure; consult metric_key and publisher.",
    "measure_type": "Kind of quantity; never compare an index level to a rate.",
    "geography": "Coverage or null when unspecified.",
    "seasonal_adjustment": "Published adjustment or null when unspecified/not applicable.",
    "index_base": "Index reference base or null when not applicable.",
    "value_encoding": "Decimal string; use decimal arithmetic for exact calculations.",
    "reference_time": "Meaning of source_date/source_period.",
    "publication_time": "Publication timestamps are not inferred.",
    "freshness_limit_hours": "Policy limit, not a promise of new data at every poll."
  },
  "related_nodes": {
    "relation": "complementary_context or same_oracle",
    "reason": "Why this link may be useful",
    "caution": "Comparability constraint",
    "collection_enabled": "Collection configuration, not evidence of current health"
  },
  "rules": [
    "Read status and reasons before using an observation. HTTP 503 can contain last verified data or no observation; do not present it as a fresh success.",
    "null means unavailable or unspecified, not zero.",
    "Compare units, geography, adjustment, base and reference periods before combining measures.",
    "Use history, revisions and the original hash-addressed receipt for evidence. A receipt hash verifies retained bytes, not publisher truth.",
    "Related links are editorial navigation aids, not computed findings or causal assertions.",
    "Public reads never trigger upstream collection."
  ],
  "measurement": {
    "traffic": "Daily aggregate route/status/client-class counts; no visitor identity or navigation sessions.",
    "limitations": "Includes probes and operator requests. User-agent categories are self-declared; counters do not prove agent navigation, synthesis or answer inclusion.",
    "controlled_tests": "Separate local SBL-1 protocol and evidence bundles; no tracking IDs, cookies or experiment query parameters added to public requests."
  }
}