# Optional Engines and Cross-Platform Portability

## Capability table

Optional engines remain optional. Missing packages are reported explicitly rather than changing the scientific task or silently selecting another model.

    capabilities <- gp3ml_engine_capabilities(
      check_keras_backend = FALSE
    )
    capabilities
    #>   engine package classification regression probability package_available
    #>      glm    <NA>           TRUE      FALSE        TRUE              TRUE
    #>       lm    <NA>          FALSE       TRUE       FALSE              TRUE
    #>   ranger  ranger           TRUE       TRUE        TRUE              TRUE
    #>  xgboost xgboost           TRUE       TRUE        TRUE              TRUE
    #>     nnet    nnet           TRUE       TRUE        TRUE              TRUE
    #>   keras3  keras3           TRUE       TRUE        TRUE              TRUE
    #>   custom    <NA>           TRUE       TRUE          NA              TRUE
    #>  backend backend_ready             status
    #>     <NA>            NA          available
    #>     <NA>            NA          available
    #>     <NA>            NA          available
    #>     <NA>            NA          available
    #>     <NA>            NA          available
    #>     <NA>            NA backend_unverified
    #>     <NA>            NA          available
    #>                                                                      notes
    #>                                                       Base-R binomial GLM.
    #>                                                       Base-R linear model.
    #>                                        Optional package; governed wrapper.
    #>                                        Optional package; governed wrapper.
    #>                                   Recommended R package; governed wrapper.
    #>  Optional package plus configured backend; deep learning remains explicit.
    #>                   Externally supplied engine requires safety declarations.
    plot(capabilities)

`glm` and `lm` are always available. `ranger`, `xgboost`, `nnet`, and `keras3` are exercised by a dedicated GitHub Actions matrix. Keras backend readiness is queried only when explicitly requested.

    assert_gp3ml_engine_available("glm")
    assert_gp3ml_engine_available("lm")

Engine availability is not a model-selection rule. Candidate selection remains explicit, metric-declared, direction-declared, and reviewable.