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