{
  "tier": "free",
  "events": {
    "new_observation": {
      "live": true,
      "since": "2026-11-01",
      "desc": "该 CVIN 有新观测落库（任意 obs_type）"
    },
    "lien.created": {
      "live": true,
      "since": "2026-11-06",
      "desc": "有人在这台设备上登记了抵押权；出现第二个不同出借方即构成重复抵押"
    },
    "lien.released": {
      "live": true,
      "since": "2026-11-06",
      "desc": "抵押权被解除（原记录保留，追加 release）"
    },
    "liveness.gap": {
      "live": true,
      "since": "2026-11-06",
      "desc": "连续 30 天无任何观测（失联前兆）"
    },
    "liveness.dormant": {
      "live": true,
      "since": "2026-11-06",
      "desc": "连续 90 天无观测，判定休眠"
    },
    "asset.relocated": {
      "live": false,
      "since": null,
      "desc": "观测地区发生变化（跨境流转 / 担保物位置）——尚未实现，订阅时不应承诺"
    },
    "attestation.stopped": {
      "live": false,
      "since": null,
      "desc": "签名遥测中断 30 天以上——尚未实现"
    },
    "spec.conflict": {
      "live": false,
      "since": null,
      "desc": "同一 CVIN 出现互相矛盾的规格申报——尚未实现"
    }
  },
  "implemented": [
    "new_observation",
    "lien.created",
    "lien.released",
    "liveness.gap",
    "liveness.dormant"
  ],
  "not_implemented": [
    {
      "event": "asset.relocated",
      "desc": "观测地区发生变化（跨境流转 / 担保物位置）——尚未实现，订阅时不应承诺",
      "note": "公开列出未实现项：定价页不应承诺，订阅方不应依赖。"
    },
    {
      "event": "attestation.stopped",
      "desc": "签名遥测中断 30 天以上——尚未实现",
      "note": "公开列出未实现项：定价页不应承诺，订阅方不应依赖。"
    },
    {
      "event": "spec.conflict",
      "desc": "同一 CVIN 出现互相矛盾的规格申报——尚未实现",
      "note": "公开列出未实现项：定价页不应承诺，订阅方不应依赖。"
    }
  ],
  "signing": {
    "algorithm": "ed25519",
    "key_id": "59f39dabf8fbfe9f",
    "public_key_pem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA8dcK1l0Ts6ZVN5w3NxcAjyRsMCmqskefXaF6QKfMfsc=\n-----END PUBLIC KEY-----",
    "signed_payload": "timestamp + \".\" + raw_body",
    "headers": [
      "x-cvin-signature",
      "x-cvin-timestamp",
      "x-cvin-key-id",
      "x-cvin-delivery",
      "x-cvin-attempt"
    ],
    "verify": "用上面的公钥对 `timestamp + \".\" + 原始请求体` 验签；timestamp 与本地时钟差超过 5 分钟应拒绝（防重放）"
  },
  "retry": {
    "max_attempts": 3,
    "backoff_s": [
      0,
      30,
      300
    ],
    "timeout_s": 6,
    "idempotency": "重试保持同一 x-cvin-delivery，接收方必须按它去重"
  },
  "delivery_log": "GET /v1/watch/deliveries（需订阅密钥，只看得到自己的投递）",
  "self_test": "POST /v1/watch/test（立即发一条测试事件，不消耗配额，不需先付 $0.60/台）",
  "liveness_scan": "服务进程内每 3 小时扫描一次被订阅设备的沉默天数，跨过 30 / 90 天阈值时各推一次（水位记在 watch.alerts，不重复告警）",
  "metering": {
    "unit": "device-day（设备·日）",
    "monthly_usd": 0.6,
    "days_per_month": 30,
    "daily_usd": 0.02,
    "currency": "USD",
    "rules": [
      "按 UTC 日历日计：订阅在某天有任一时刻有效，该天计 1 天；不足一天算一天。",
      "日单价 = 月价 ÷ 30（固定 30 天，不随月份长短浮动）。",
      "金额 = Σ(每订阅当月天数 × 该订阅设备数) × 日单价。",
      "停用不抹账：deactivated_at 记录在订阅上，历史用量与历史投递照旧可查、可复算。"
    ],
    "endpoint": "GET /v1/watch/usage?month=YYYY-MM（需订阅密钥，只看自己的）",
    "settle_endpoint": "POST /v1/watch/usage/settle?month=YYYY-MM（x402 · 按账单余额出挑战 · 链上结算后 statement.settlement 即时更新）",
    "auto_charge": "not_connected",
    "on_demand_settlement": "live",
    "note": "计量已开、金额可自算；自动扣款不接（不会自动划走，也不需要代扣授权），但账单可当场链上结清。写在这里而不是等你发现——第 25 轮删掉「收下但永不触发」用的是同一把尺子。"
  },
  "honesty": "本清单是机器可读的自我陈述。未实现的事件列在 not_implemented 里而不是悄悄缺席——卖监控的人如果不肯说清哪部分没接上，那接了的那部分也不值得信任。"
}