Changelog
nemetonshiny (development version)
Changes — F1 soil fertility
-
F1 now uses the absolute SoilGrids CEC scoring path from the core package.
compute_single_indicator()passessource = "soilgrids"toindicateur_f1_fertilite(), which streams the 250 m CEC topsoil raster on demand vianemeton::load_raster_source()and appliesnemeton::cec_to_fertility_score()(absolute 0-100). Scores are now comparable across projects instead of being min-maxed per AOI. -
Removed the duplicated
download_soilgrids_cec()and its entry inDATA_SOURCES$rasters$soil. The core package owns the download path (ADR-009), so the app no longer stages a SoilGrids layer inlayers$rasters$soil. One less pre-compute step surfaces in the progress UI. -
Bumped the
nemetondependency to>= 0.17.0.9000(the dev version introducingload_raster_source(),source = "soilgrids", and the UTS → fertility crosswalk).
nemetonshiny 0.16.0
First release targeting the v0.17.0 nemeton core. End-to-end integration of the Open-Canopy CHM pipeline, live per-step progress feedback, and a consolidated i18n layer.
New Features — CHM / Open-Canopy
-
Auto-detected Open-Canopy CHM — the UI no longer forces the user to pick “CHM: none / Open-Canopy” before every run. The pipeline fires automatically when the
opencanopypackage is installed, unless the user opts out viaoptions(nemetonshiny.chm = "none")orNEMETONSHINY_DISABLE_CHM=1. Each synthesis view gets two provenance badges:- ⚡ Hauteur ML — CHM was consumed by height-aware indicators (C1, B2, R2, P2).
- 📋 Inventaire estimé ML — P1 / P3 / E1 ran, meaning
dbh/densitywere synthesised from the CHM vianemeton::ensure_inventory_fields()(Charru 2012 self-thinning).
-
BD Forêt enrichment for P2 — UGFs are enriched with
species/agefrom BD Forêt V2 once up-front vianemeton::enrich_parcels_bdforet()whenindicateur_p2_stationis scheduled, so the CHM mode can run instead of falling back on the legacyfertility/climatepath that never had its inputs.
New Features — progress UX
-
Live step-by-step status replaces the “frozen on Inférence CHM” ~8-minute silence on large AOIs. The task toast now paints:
- “Étape 1/5 : chargement de l’AOI…”
- “Étape 2/5 : téléchargement ortho IGN…” + “Téléchargement ortho IGN RVB : tuile 5/28…” per WMS tile
- “Étape 3/5 : configuration Python + téléchargement modèle…”
- “Étape 4/5 : inférence du modèle pvtv2…” + “Inférence CHM : tuile 2/3…” per inference tile
- “Étape 5/5 : export des résultats…”
- Initialisation spinner — the toast paints ⚙ + “Initialisation des calculs…” the moment the user clicks “Lancer les calculs” or “Réessayer”, so the 1-3 s gap before the async worker writes its first progress event is no longer silent.
-
Task translator unified —
mod_progress.Rno longer ships its own partialtranslate_task(); it delegates to the canonicaltranslate_task_message()inutils_i18n.R, so every new task prefix is routed to its label in one place.
New Features — i18n
-
Single source of truth — the
TRANSLATIONSlist inR/utils_i18n.Ris now the only runtime dictionary. The staleinst/app/i18n/{fr,en}.jsonfiles (339 keys, 19 behind the R list) have been removed and the unusedshiny.i18nsuggested dependency dropped.export_translations_json()remains available for one-way R → JSON exports to external translators.
Bug Fixes
-
download_chm_opencanopy()— unwraps the bareSpatRaster/sfreturned bydownload_{raster,vector}_source()instead of chasing a$objectattribute that didn’t exist. The previous code called[[on aSpatRasterlooking for a layer named “object” and triggered a terra[subset] invalid name(s)error that aborted the whole CHM pipeline and forced P2 back into legacy mode. -
Open-Canopy pipeline resume — the retry and recompute paths now reset the project to “draft” and wait for the user to re- launch the run, instead of silently firing a new
compute_taskinvocation. One entry point is the confirmation modal. -
Resume from a legacy progress file —
translate_task_message()now maps the pre-e74bdccliteral"download:source_chm_opencanopy"to the new"chm_inference_opencanopy"label so re-opening an older project no longer spams “Translation key not found: source_chm_opencanopy”. -
Tests —
NEMETONSHINY_DISABLE_CHM=1is now scoped to the test run viawithr::local_envvar(.local_envir = testthat::teardown_env())in a dedicatedsetup-chm.R, sodevtools::test()in an interactive session no longer leaves the CHM pipeline silently disabled.