Records that id was asked for and is not available, and notifies subscribers.
Idempotent per id — the first motif wins.
Capability id.
Why it is unavailable, in one sentence.
Subscribes to capability-unavailable facts. Fires immediately for every fact already recorded, then for each new one — a host that subscribes after boot loses nothing.
Called once per distinct unavailable capability.
An unsubscribe function.
The public
GeoLeaf.Capabilitiesnamespace — how a host learns that a capability it needed was not there.Why a subscription and not a query
Plugins register capabilities lazily and into the same registry as the preset, so a capability may register long after boot — or never. "Is X absent?" therefore has no defined answer at any instant, and a synchronous verdict would accuse every lazy capability that had not yet loaded. What can be stated is narrower: this caller asked for X and nothing provided it. Hence: declare the fact, subscribe to the facts.
⚠️ Two members, and the shape is frozen — public API on a published major, which
I4forbids removing or deprecating. The implementation lives inkernel/api/unavailable-capabilities.ts; the facade isapi/geoleaf.capabilities.ts.