Project schema versioning, safe automatic migrations, and a stable per-feature identity (fiberq_uuid).
New
- Schema version marker — every project records its data schema version (currently
1.0), saved into the QGIS project and mirrored into the GeoPackage, so future releases can recognise and upgrade older projects. - Automatic on-load migration — opening a project from an earlier FiberQ version upgrades it in place (e.g. schema
0 → 1.0), losslessly and idempotently, with a summary in the QGIS log. Blank / non-FiberQ projects are left untouched; a project stamped newer than your plugin is never downgraded; the marker is only written when the upgrade actually persists. fiberq_uuididentity invariant — every FiberQ feature gets a stable, globally-unique ID that survives edits, exports, and round-trips. New features get one on creation across every tool; older projects are backfilled on load. Splitting a feature (Cut infrastructure) gives each half a fresh UUID.
Fixes
- Cable "Number of fibers" no longer freezes at an intermediate value while typing.
- Objects draw tools (3-point / N-point / ortho / digitize) no longer raise
ImportError. - "Cut infrastructure" no longer fails to save on a duplicate primary key; the halves get fresh feature ids and fresh UUIDs.
- Optical Schematic View now draws pipes in the legend orange for English-named layers (previously grey).
- Renamed the mislabeled "FiberQ web browser" action to "Preview Map".
Compatibility & hardening
- Qt6 / QGIS 4: scoped all 251 QGIS enum accesses (e.g.
QgsWkbTypes.PointGeometry→QgsWkbTypes.GeometryType.PointGeometry, plus render-unit, writer, marker, placement, WKB-type, feature-request and provider-capability enums). Required for PyQt6; behaviour unchanged on QGIS 3 / Qt5. - Security scan: previously-silent exception handlers now log at debug level instead of swallowing errors, and the local lint gate runs Bandit at all severities to match the plugins.qgis.org Security & Quality scanner.
Quality
- The maintainer manually reviewed the entire plugin source — every Python module — ahead of this release.
- Clean scan: flake8 + Bandit (all severities) → 0; Qt6 Check → 0.
- Test suite green on QGIS 3 / Qt5 and QGIS 4 / Qt6.
- Docs:
docs/project-versioning-guide.md(user guide) anddocs/schema.md(schema reference).
Targets QGIS 3.22 LTR → QGIS 4 / Qt6.
Developed with support from the NLnet NGI0 Commons Fund.