{"name": "PlanX", "package_name": "planx", "version": "4.10.1", "experimental": false, "qgis_min": "3.28.0", "qgis_max": "4.99.0", "downloads": 255, "uploaded_by": "geo140195philo", "upload_datetime": "2026-07-14T18:56:17.520051", "changelog": "## [4.10.1] - 2026-07-15\r\n\r\nQGIS 4 / Qt6 readiness and a fully clean security scan. No functional change.\r\n\r\n### Changed\r\n- **Scoped every Processing and geometry enum** (`QgsProcessing.SourceType.*`, `QgsProcessingParameterNumber.Type.*`, `QgsProcessingParameterField.DataType.*`, `QgsWkbTypes.Type.*` / `.GeometryType.*`, `QgsFeatureSink.Flag.*`, `QgsProcessingParameterDefinition.Flag.*`, `QgsProcessingParameterFile.Behavior.*`, `QgsVectorDataProvider.Capability.*`) across all algorithms so the QGIS Hub Qt6 compatibility check reports zero issues. These resolve and run identically on QGIS 3.28+ (Qt5) and QGIS 4.x (Qt6); minimum QGIS is now **3.28**.\r\n- **Fully \"Validated\" security scan**: the betweenness source-sampling `random` call (Bandit B311) is replaced by a self-contained seeded generator and the `.bandit` config was removed, so the Hub scan passes with no developer-supplied suppressions. Sampling stays deterministic per seed.\r\n\r\n## [4.10.0] - 2026-07-15\r\n\r\nNetwork resilience: Link Criticality tool.\r\n\r\n### Added\r\n- **Link Criticality (Network Robustness) algorithm** (`planx:linkcriticality` / `algorithms/alg_link_criticality.py`): ranks every street segment by how badly the network would suffer if it were lost - the road-network vulnerability view (Network Robustness Index; Scott et al. 2006 / Jenelius et al. 2006). Over a supplied origin-destination demand (or all pairs among the origins), it routes the intact network, removes each segment in turn and re-routes, and reports the extra travel cost forced (`criticality` as a fraction of baseline, `extra_cost` in absolute units), the demand it severs (`n_disconnected`) and how many shortest paths run over it (`used_by`); only segments carrying a shortest path are re-tested. Outputs a per-segment criticality map to style for a network-vulnerability picture.\r\n- **Network robustness engine** (`engine/robustness.py`): pure NumPy on the embedded predecessor-tracking Dijkstra; edge-removal is a CSR mask so no external routing plugin or graph rebuild is needed.\r\n- **New tool icon**: `tool_linkcriticality.png`.\r\n\r\n### Improved\r\n- OD Routes, OD Cost Matrix and Nearest Facility Allocation help now spells out the cost-field contract: the router minimises the SUM of the chosen network-layer column, so it must be an additive per-segment quantity (a time or weighted length, never a speed - conversion formula included); net_cost, CUTOFF and k-nearest inherit the column's units; NULL costs read as 0 (free segments) and values must be non-negative; Walking Slope Comfort's time_fwd_min is the ready-made slope-aware cost; the detour ratio is a pure ratio only under the default length cost.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/planx/version/4.10.1/download/"}