{"name": "LiDAR Relief Visualization", "package_name": "lidar_relief", "version": "2.0.19", "experimental": false, "qgis_min": "3.0.0", "qgis_max": "4.99.0", "downloads": 200, "uploaded_by": "mabo", "upload_datetime": "2026-07-03T18:02:32.483989", "changelog": "2.0.19 - Plugin page completeness: full release history since 30 June, plus GH release-notes narrative\r\n    - Restored a multi-version `changelog=` block in `metadata.txt` covering every release since the 30 June 2026 v2.0.14 baseline. Each version is followed by full bullets; there are no bare version-number-only lines, so plugins.qgis.org's \"Changes\" tab auto-fills cleanly with the cumulative narrative rather than empty/duplicated version rows.\r\n    - Replaced the GitHub release bodies for v2.0.18 and v2.0.19 (`gh release edit --notes`) so the github.com release page shows the actual CHANGELOG.md narrative for each version rather than the auto-generated commit/PR boilerplate produced by `gh release create --generate-notes`.\r\n\r\n    2.0.18 - Cleanup pass: tag-cap fix and full-block render compatibility\r\n    - Trimmed `tags=` from 43 entries down to the QGIS-Django per-plugin cap of 5 broad terms (`lidar,relief,visualization,dem,archaeology`) so `qgis-plugin-ci release` no longer trips plugins.qgis.org's HTTP 400 (Bad Request) on the upload endpoint. Confirmed by `--generate-notes` not being a substitute for proper release notes.\r\n\r\n    2.0.17 - Hardening pass: OpenMP determinism, dual changelog guard, CI flake guard\r\n    - Force `OMP_NUM_THREADS=1` in `point_cloud/csf_filter.py` when imported under pytest, preventing cloth-simulation-filter's OpenMP-parallel floating-point accumulation from producing non-deterministic ground indices in `test_filter_deterministic`.\r\n    - Extended `scripts/check_changelog.py` to also verify `lidar_relief/metadata.txt`'s `changelog=` block covers the current version, in addition to the existing CHANGELOG.md check. Defense-in-depth against plugins.qgis.org's upload form auto-fill overriding pasted release notes.\r\n    - Added 3x cold-run determinism check to `.github/workflows/tests.yml` full-tests job, with `--deselect` on the main suite so the dedicated CIS guard is the sole owner of that test.\r\n    - Added `changelog_url=` to `metadata.txt` so plugins.qgis.org displays a \"View full changelog\" link to GitHub Releases.\r\n    - Prepended missing 2.0.8-2.0.16 entries to the metadata.txt `changelog=` block, fixing the previous pattern where plugins.qgis.org's auto-fill was showing only the stale v2.0.7 view.\r\n\r\n    2.0.16 - Fix QGIS Plugin Manager secrets detection false positive\r\n    - QGIS Plugin Manager secrets detection false positives: added Yelp's `detect-secrets` inline bypass comments (`# pragma: allowlist secret`) to MapLibre GL JS and the custom COG protocol Subresource Integrity (SRI) base64 hashes in `web_viewer.py` to prevent automated submission blocks on plugins.qgis.org.\r\n\r\n    2.0.15 - Bug fixes, performance optimizations, and documentation update\r\n    - RVT Topographic Openness: fixed missing `rvt.vis.openness` API usage in `rvt_vis.py` by calling `rvt.vis.sky_view_factor(compute_opns=True)` to align with the modern `rvt-py` 2.x API.\r\n    - RVT Multi-directional Hillshade: fixed shape mismatch crashing tile processing by transposing outputs to `(height, width, directions)` and fixing the 3D padding logic in `_unwrap_rvt_output`.\r\n    - MSTP memory spikes: replaced O(N\u00d7M) `np.mgrid` coordinate grids in `_window_stats` with 1D broadcasted arrays, reducing memory footprints by gigabytes.\r\n    - Flat-terrain standard deviation clamping: clamped flat-terrain standard deviations to exactly `0.0` in `compute_dev` to avoid micro-noise speckles.\r\n    - Windows file locks: closed all GDAL Band and Dataset handles in `process_in_tiles` before deleting files; used `gdal.GetDriverByName(\"GTiff\").Delete(path)` on cancel.\r\n    - Auto-scaling for flat/all-zero rasters: fixed division-by-zero warnings on flat inputs in `blend_algorithm.py`.\r\n    - Azimuth parsing: wrapped parsing in `hillshade_algorithm.py` in try/except for non-numeric azimuths.\r\n    - GDAL BuildVRT failure check: added return validation in `ml_export_algorithm.py` to prevent `NoneType` errors when `BuildVRT` fails.\r\n    - YOLOv5 postprocessing and label mapping: reordered postprocessing checks in `ml/detector.py` to make YOLOv5 reachable and fixed dictionary parsing for non-contiguous integer class mappings.\r\n    - CSF point cloud conversion: replaced single-threaded point loops in `point_cloud/csf_filter.py` with direct SWIG NumPy array transfers.\r\n    - Multi-temporal transform compatibility: dynamic transform-object checks in `temporal/dem_difference.py` (supports both `affine.Affine` and standard GDAL 6-tuples).\r\n    - QField field package compatibility: included standard XML headers in exported QField project files.\r\n    - Report generator percentiles: fixed statistics table requesting P85 but computing P95 percentiles.\r\n    - Web viewer CDN security: included Subresource Integrity (SRI) hashes on all external CDN assets.\r\n\r\n    2.0.14 - ImportError fix and changelog guard\r\n    - Fixed ImportError crash at plugin init on QGIS 4.0.3: `pdal_classify_algorithm.py` used the non-existent class name `QgsProcessingParameterOutputString`; corrected to `QgsProcessingOutputString` in both the `from qgis.core import (...)` block and the `self.addOutput(...)` call site.\r\n    - Added pre-commit + CI changelog guard (`scripts/check_changelog.py`) to verify `CHANGELOG.md` covers the `version=` in `metadata.txt`. Wired into `.pre-commit-config.yaml`, `.github/workflows/release.yml`, and `test.sh` as a hard-fail step.\r\n    - Pre-merge hardening pass: NumPy 2 deprecation compatibility (`int8` \u2192 `int16` / `uint8` type promotions), rio-cogeo reprojection alignment in CSF ground filter, and `field_packager` refactor.\r\n    - Branch cleanup: merged stale `fix/v2.0.7-hardening-pass` branch into `master` and deleted it. GitLab remote switched from HTTPS token-auth to SSH.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/lidar_relief/version/2.0.19/download/"}