Robustness checklist

The behaviours most likely to surprise a first integration, collected in one
place:

  • 1m means one month. There is no one-minute range on either time-series
    endpoint.
  • Time-series values are strings. Parse the second element of every sample
    pair, including for integer-valued series.
  • /dataplane-stats is stateful. One collector only, or use the cumulative
    byte counters instead.
  • GET /api/bng/events mutates. One collector, sane interval.
  • /setup-wizard/apply always returns 200. Inspect every per-section ok.
  • /audit/export degrades to partial. Verify the row count.
  • Restore is not transactional. Handle 207.
  • An invalid step or limit does not error — it silently falls back to the
    default. Only an invalid range, an unknown metric, and a missing required
    ip return 400.
  • Never retry a 403. Honour Retry-After on 429. Re-mint before retrying
    a 401.
  • A flat time series may mean sampling stopped, not that the value fell to
    zero. Cross-check health or the scrape liveness.

Boundaries and Stability