§62's "applications may declare required and optional capabilities", as
the declaration resolveRenderer accepts (WP-R1.9).
required gates selection. "auto" skips a backend that does not
answer every required name true (reported through
RendererResolveOptions.onFallback with reason
"missing-capability"), and an explicitly named backend that cannot
fails fast with RENDERER_INITIALIZATION_FAILED — §62's own
"rather than silently downgrading", extended from starting to
sufficing.
optional never gates selection. Each optional name the selected
backend does not answer true is reported through
RendererResolveOptions.onCapabilityShortfall, so an application
configures its fallback path from one report instead of probing fields.
The tri-state honesty rule
RendererCapabilities answers each member true, false, or
undefined — and undefined means "this backend has not been taught to
answer", which is not a yes. A required capability is therefore satisfied
only by an affirmative true: treating silence as satisfaction would
hand an application a backend on the strength of a question never answered,
which is precisely the confident wrong answer the record's documentation
warns costs a crash. The shortfall report distinguishes the two non-answers
(answer: false vs answer: undefined) so a diagnostics channel can tell
"cannot" from "did not say".
The check runs afterRenderer.initialize, because §61 lets a
backend publish its real record only once it has queried a device; under
"auto" a backend skipped for a missing capability is disposed exactly as
one whose initialization rejected.
§62's "applications may declare required and optional capabilities", as the declaration resolveRenderer accepts (WP-R1.9).
requiredgates selection."auto"skips a backend that does not answer every required nametrue(reported through RendererResolveOptions.onFallback with reason"missing-capability"), and an explicitly named backend that cannot fails fast withRENDERER_INITIALIZATION_FAILED— §62's own "rather than silently downgrading", extended from starting to sufficing.optionalnever gates selection. Each optional name the selected backend does not answertrueis reported through RendererResolveOptions.onCapabilityShortfall, so an application configures its fallback path from one report instead of probing fields.The tri-state honesty rule
RendererCapabilities answers each member
true,false, orundefined— andundefinedmeans "this backend has not been taught to answer", which is not a yes. A required capability is therefore satisfied only by an affirmativetrue: treating silence as satisfaction would hand an application a backend on the strength of a question never answered, which is precisely the confident wrong answer the record's documentation warns costs a crash. The shortfall report distinguishes the two non-answers (answer: falsevsanswer: undefined) so a diagnostics channel can tell "cannot" from "did not say".The check runs after Renderer.initialize, because §61 lets a backend publish its real record only once it has queried a device; under
"auto"a backend skipped for a missing capability is disposed exactly as one whose initialization rejected.