Behaviour changes

Read these before upgrading. None is a bug fix; each changes what the box does.

Licence enforcement for add-ons is now LIVE

This is the most consequential change in the release.

The console read licence entitlements from a field named features. The
controller reports them as grants and has never sent features, so every
entitlement resolved as unknown — and unknown failed open. Add-ons installed
regardless of licence
, while the console reported that enforcement was not
active.

This is corrected. The consequence: a paid add-on on a box whose licence does
not grant it is now denied.
No existing deployment is affected, because the
only add-on shipped to date is the Grafana dashboard pack, which is published as
permanently free and is permitted by name rather than by grant.

Two related changes:

  • The licensing API response field features is now grants, carrying a
    map of name to value rather than a list of names, so an entitlement can
    express a quantity as well as a yes or no.
  • Add-on entitlements are named under *`addon.`**.

Idle timeout now defaults to 1 hour [controller]

Raised from 5 minutes, sized for always-on subscribers so that an ordinary
traffic lull no longer reclaims a live session. Any value can still be set per
subscriber.

The Subscriber column is removed from the sessions table

It could not work on controller 1.4.0. GET /bng/sessions returns no
subscriber_id and no circuit_id/remote_id, so the column's join had nothing
to join on and every session rendered "unprovisioned." A column that is
always wrong is worse than no column: it actively tells the operator their fleet
is unprovisioned.

It returns in 1.5.0, joined on subscriber_id, which the controller adds to the
session summary in that release.