diff --git a/docs/dev/traceability.md b/docs/dev/traceability.md
index 1a568a1..435a297 100644
--- a/docs/dev/traceability.md
+++ b/docs/dev/traceability.md
@@ -10,7 +10,7 @@ Denominators are parsed from [`requirements.md`](requirements.md) at run time, n
| Metric | Value |
|---|---|
| Source files scanned | 446 |
-| TRACES tags found | 1755 |
+| TRACES tags found | 1789 |
| Requirements defined | 190 |
| Requirements deferred (post-v1) | 24 |
| Requirements covered | 159 |
@@ -35,76 +35,76 @@ _None._
| ID | Tagged in |
|---|---|
| FR-CAT-1 | [`core/dr-catalog/src/scan.rs:1`](../../core/dr-catalog/src/scan.rs#L1), [`core/dr-catalog/src/walk.rs:109`](../../core/dr-catalog/src/walk.rs#L109), [`core/dr-catalog/src/walk.rs:162`](../../core/dr-catalog/src/walk.rs#L162), [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`core/dr-sync/src/scan.rs:129`](../../core/dr-sync/src/scan.rs#L129), [`core/dr-types/src/lib.rs:203`](../../core/dr-types/src/lib.rs#L203), [`core/dr-types/src/lib.rs:272`](../../core/dr-types/src/lib.rs#L272), [`core/dr-types/src/lib.rs:305`](../../core/dr-types/src/lib.rs#L305), [`platform/dr-plat/src/storage.rs:1`](../../platform/dr-plat/src/storage.rs#L1), [`platform/dr-plat/src/storage.rs:216`](../../platform/dr-plat/src/storage.rs#L216), [`ui/dr-ui/src/activity.rs:1`](../../ui/dr-ui/src/activity.rs#L1), [`ui/dr-ui/src/library/mod.rs:1`](../../ui/dr-ui/src/library/mod.rs#L1) |
-| FR-CAT-10 | [`core/dr-ingest/src/layout.rs:1`](../../core/dr-ingest/src/layout.rs#L1), [`core/dr-ingest/src/lib.rs:1`](../../core/dr-ingest/src/lib.rs#L1), [`core/dr-ingest/src/lib.rs:733`](../../core/dr-ingest/src/lib.rs#L733), [`core/dr-types/src/settings.rs:377`](../../core/dr-types/src/settings.rs#L377), [`platform/dr-plat/src/storage.rs:287`](../../platform/dr-plat/src/storage.rs#L287), [`platform/dr-plat/src/storage.rs:586`](../../platform/dr-plat/src/storage.rs#L586), [`platform/dr-plat/src/volumes.rs:1`](../../platform/dr-plat/src/volumes.rs#L1), [`platform/dr-plat/src/volumes.rs:62`](../../platform/dr-plat/src/volumes.rs#L62), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import.rs:346`](../../ui/dr-ui/src/import.rs#L346), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1818`](../../ui/dr-ui/src/lib.rs#L1818), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5), [`ui/dr-ui/ui/library.slint:1284`](../../ui/dr-ui/ui/library.slint#L1284), [`ui/dr-ui/ui/library.slint:1338`](../../ui/dr-ui/ui/library.slint#L1338), [`ui/dr-ui/ui/library.slint:1580`](../../ui/dr-ui/ui/library.slint#L1580) |
-| FR-CAT-11 | [`core/dr-catalog/src/dedup.rs:1`](../../core/dr-catalog/src/dedup.rs#L1), [`core/dr-ingest/src/lib.rs:1`](../../core/dr-ingest/src/lib.rs#L1), [`core/dr-ingest/src/lib.rs:392`](../../core/dr-ingest/src/lib.rs#L392), [`core/dr-sync/src/upload.rs:40`](../../core/dr-sync/src/upload.rs#L40), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1818`](../../ui/dr-ui/src/lib.rs#L1818), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/thumbnails_gen.rs:524`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L524), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5) |
+| FR-CAT-10 | [`core/dr-ingest/src/layout.rs:1`](../../core/dr-ingest/src/layout.rs#L1), [`core/dr-ingest/src/lib.rs:1`](../../core/dr-ingest/src/lib.rs#L1), [`core/dr-ingest/src/lib.rs:733`](../../core/dr-ingest/src/lib.rs#L733), [`core/dr-types/src/settings.rs:377`](../../core/dr-types/src/settings.rs#L377), [`platform/dr-plat/src/storage.rs:287`](../../platform/dr-plat/src/storage.rs#L287), [`platform/dr-plat/src/storage.rs:586`](../../platform/dr-plat/src/storage.rs#L586), [`platform/dr-plat/src/volumes.rs:1`](../../platform/dr-plat/src/volumes.rs#L1), [`platform/dr-plat/src/volumes.rs:62`](../../platform/dr-plat/src/volumes.rs#L62), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import.rs:346`](../../ui/dr-ui/src/import.rs#L346), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1819`](../../ui/dr-ui/src/lib.rs#L1819), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5), [`ui/dr-ui/ui/library.slint:1288`](../../ui/dr-ui/ui/library.slint#L1288), [`ui/dr-ui/ui/library.slint:1342`](../../ui/dr-ui/ui/library.slint#L1342), [`ui/dr-ui/ui/library.slint:1600`](../../ui/dr-ui/ui/library.slint#L1600) |
+| FR-CAT-11 | [`core/dr-catalog/src/dedup.rs:1`](../../core/dr-catalog/src/dedup.rs#L1), [`core/dr-ingest/src/lib.rs:1`](../../core/dr-ingest/src/lib.rs#L1), [`core/dr-ingest/src/lib.rs:392`](../../core/dr-ingest/src/lib.rs#L392), [`core/dr-sync/src/upload.rs:40`](../../core/dr-sync/src/upload.rs#L40), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1819`](../../ui/dr-ui/src/lib.rs#L1819), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/thumbnails_gen.rs:524`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L524), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5) |
| FR-CAT-12 | [`core/dr-pipeline/src/sidecar.rs:140`](../../core/dr-pipeline/src/sidecar.rs#L140) |
-| FR-CAT-13 | [`core/dr-catalog/src/rating.rs:276`](../../core/dr-catalog/src/rating.rs#L276), [`core/dr-catalog/src/schema.rs:836`](../../core/dr-catalog/src/schema.rs#L836), [`core/dr-sync/src/scan.rs:40`](../../core/dr-sync/src/scan.rs#L40), [`core/dr-sync/src/scan.rs:944`](../../core/dr-sync/src/scan.rs#L944), [`core/dr-types/src/settings.rs:92`](../../core/dr-types/src/settings.rs#L92), [`core/dr-xmp/src/lib.rs:1`](../../core/dr-xmp/src/lib.rs#L1), [`core/dr-xmp/src/lib.rs:331`](../../core/dr-xmp/src/lib.rs#L331), [`core/dr-xmp/src/lib.rs:442`](../../core/dr-xmp/src/lib.rs#L442), [`core/dr-xmp/src/lib.rs:535`](../../core/dr-xmp/src/lib.rs#L535), [`core/dr-xmp/src/lib.rs:733`](../../core/dr-xmp/src/lib.rs#L733), [`core/dr-xmp/src/lib.rs:746`](../../core/dr-xmp/src/lib.rs#L746), [`core/dr-xmp/src/read.rs:1`](../../core/dr-xmp/src/read.rs#L1), [`core/dr-xmp/src/write.rs:1`](../../core/dr-xmp/src/write.rs#L1), [`core/dr-xmp/tests/round_trip.rs:1`](../../core/dr-xmp/tests/round_trip.rs#L1), [`ui/dr-ui/src/library/scan.rs:335`](../../ui/dr-ui/src/library/scan.rs#L335), [`ui/dr-ui/src/library/xmp.rs:132`](../../ui/dr-ui/src/library/xmp.rs#L132), [`ui/dr-ui/src/library/xmp.rs:25`](../../ui/dr-ui/src/library/xmp.rs#L25), [`ui/dr-ui/src/library/xmp.rs:9`](../../ui/dr-ui/src/library/xmp.rs#L9), [`ui/dr-ui/src/library_ui/controller.rs:296`](../../ui/dr-ui/src/library_ui/controller.rs#L296), [`ui/dr-ui/src/library_ui/controller.rs:387`](../../ui/dr-ui/src/library_ui/controller.rs#L387), [`ui/dr-ui/src/library_ui/controller.rs:532`](../../ui/dr-ui/src/library_ui/controller.rs#L532), [`ui/dr-ui/src/library_ui/grid.rs:156`](../../ui/dr-ui/src/library_ui/grid.rs#L156), [`ui/dr-ui/src/library_ui/open.rs:438`](../../ui/dr-ui/src/library_ui/open.rs#L438), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:118`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L118), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:651`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L651), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:707`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L707), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:806`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L806), [`ui/dr-ui/src/settings_ui.rs:632`](../../ui/dr-ui/src/settings_ui.rs#L632), [`ui/dr-ui/src/xmp_sync.rs:1`](../../ui/dr-ui/src/xmp_sync.rs#L1), [`ui/dr-ui/src/xmp_sync.rs:250`](../../ui/dr-ui/src/xmp_sync.rs#L250), [`ui/dr-ui/src/xmp_sync.rs:287`](../../ui/dr-ui/src/xmp_sync.rs#L287), [`ui/dr-ui/src/xmp_sync.rs:324`](../../ui/dr-ui/src/xmp_sync.rs#L324), [`ui/dr-ui/ui/app.slint:616`](../../ui/dr-ui/ui/app.slint#L616), [`ui/dr-ui/ui/settings.slint:204`](../../ui/dr-ui/ui/settings.slint#L204), [`ui/dr-ui/ui/settings.slint:941`](../../ui/dr-ui/ui/settings.slint#L941) |
-| FR-CAT-15 | [`core/dr-catalog/src/schema.rs:1210`](../../core/dr-catalog/src/schema.rs#L1210), [`core/dr-catalog/src/trash.rs:1`](../../core/dr-catalog/src/trash.rs#L1), [`core/dr-sync-nextcloud/src/lib.rs:522`](../../core/dr-sync-nextcloud/src/lib.rs#L522), [`core/dr-sync/src/lib.rs:135`](../../core/dr-sync/src/lib.rs#L135), [`core/dr-sync/src/scan.rs:618`](../../core/dr-sync/src/scan.rs#L618), [`core/dr-sync/src/scan.rs:93`](../../core/dr-sync/src/scan.rs#L93), [`core/dr-thumbs/src/lib.rs:393`](../../core/dr-thumbs/src/lib.rs#L393), [`core/dr-types/src/place.rs:91`](../../core/dr-types/src/place.rs#L91), [`ui/dr-ui/src/collections_ui/trash.rs:84`](../../ui/dr-ui/src/collections_ui/trash.rs#L84), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:819`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L819), [`ui/dr-ui/src/library/cells.rs:158`](../../ui/dr-ui/src/library/cells.rs#L158), [`ui/dr-ui/src/library/cells.rs:192`](../../ui/dr-ui/src/library/cells.rs#L192), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/filters.rs:29`](../../ui/dr-ui/src/library/filters.rs#L29), [`ui/dr-ui/src/library/filters.rs:59`](../../ui/dr-ui/src/library/filters.rs#L59), [`ui/dr-ui/src/library_ui/controller.rs:232`](../../ui/dr-ui/src/library_ui/controller.rs#L232), [`ui/dr-ui/src/library_ui/controller.rs:909`](../../ui/dr-ui/src/library_ui/controller.rs#L909), [`ui/dr-ui/src/trash.rs:1`](../../ui/dr-ui/src/trash.rs#L1), [`ui/dr-ui/ui/collections.slint:1189`](../../ui/dr-ui/ui/collections.slint#L1189), [`ui/dr-ui/ui/collections.slint:752`](../../ui/dr-ui/ui/collections.slint#L752) |
+| FR-CAT-13 | [`core/dr-catalog/src/rating.rs:276`](../../core/dr-catalog/src/rating.rs#L276), [`core/dr-catalog/src/schema.rs:836`](../../core/dr-catalog/src/schema.rs#L836), [`core/dr-sync/src/scan.rs:40`](../../core/dr-sync/src/scan.rs#L40), [`core/dr-sync/src/scan.rs:944`](../../core/dr-sync/src/scan.rs#L944), [`core/dr-types/src/settings.rs:92`](../../core/dr-types/src/settings.rs#L92), [`core/dr-xmp/src/lib.rs:1`](../../core/dr-xmp/src/lib.rs#L1), [`core/dr-xmp/src/lib.rs:331`](../../core/dr-xmp/src/lib.rs#L331), [`core/dr-xmp/src/lib.rs:442`](../../core/dr-xmp/src/lib.rs#L442), [`core/dr-xmp/src/lib.rs:535`](../../core/dr-xmp/src/lib.rs#L535), [`core/dr-xmp/src/lib.rs:733`](../../core/dr-xmp/src/lib.rs#L733), [`core/dr-xmp/src/lib.rs:746`](../../core/dr-xmp/src/lib.rs#L746), [`core/dr-xmp/src/read.rs:1`](../../core/dr-xmp/src/read.rs#L1), [`core/dr-xmp/src/write.rs:1`](../../core/dr-xmp/src/write.rs#L1), [`core/dr-xmp/tests/round_trip.rs:1`](../../core/dr-xmp/tests/round_trip.rs#L1), [`ui/dr-ui/src/library/scan.rs:335`](../../ui/dr-ui/src/library/scan.rs#L335), [`ui/dr-ui/src/library/xmp.rs:132`](../../ui/dr-ui/src/library/xmp.rs#L132), [`ui/dr-ui/src/library/xmp.rs:25`](../../ui/dr-ui/src/library/xmp.rs#L25), [`ui/dr-ui/src/library/xmp.rs:9`](../../ui/dr-ui/src/library/xmp.rs#L9), [`ui/dr-ui/src/library_ui/controller.rs:296`](../../ui/dr-ui/src/library_ui/controller.rs#L296), [`ui/dr-ui/src/library_ui/controller.rs:387`](../../ui/dr-ui/src/library_ui/controller.rs#L387), [`ui/dr-ui/src/library_ui/controller.rs:532`](../../ui/dr-ui/src/library_ui/controller.rs#L532), [`ui/dr-ui/src/library_ui/grid.rs:156`](../../ui/dr-ui/src/library_ui/grid.rs#L156), [`ui/dr-ui/src/library_ui/open.rs:438`](../../ui/dr-ui/src/library_ui/open.rs#L438), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:118`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L118), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:651`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L651), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:707`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L707), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:806`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L806), [`ui/dr-ui/src/settings_ui.rs:632`](../../ui/dr-ui/src/settings_ui.rs#L632), [`ui/dr-ui/src/xmp_sync.rs:1`](../../ui/dr-ui/src/xmp_sync.rs#L1), [`ui/dr-ui/src/xmp_sync.rs:250`](../../ui/dr-ui/src/xmp_sync.rs#L250), [`ui/dr-ui/src/xmp_sync.rs:287`](../../ui/dr-ui/src/xmp_sync.rs#L287), [`ui/dr-ui/src/xmp_sync.rs:324`](../../ui/dr-ui/src/xmp_sync.rs#L324), [`ui/dr-ui/ui/app.slint:619`](../../ui/dr-ui/ui/app.slint#L619), [`ui/dr-ui/ui/settings.slint:204`](../../ui/dr-ui/ui/settings.slint#L204), [`ui/dr-ui/ui/settings.slint:941`](../../ui/dr-ui/ui/settings.slint#L941) |
+| FR-CAT-15 | [`core/dr-catalog/src/schema.rs:1210`](../../core/dr-catalog/src/schema.rs#L1210), [`core/dr-catalog/src/trash.rs:1`](../../core/dr-catalog/src/trash.rs#L1), [`core/dr-sync-nextcloud/src/lib.rs:522`](../../core/dr-sync-nextcloud/src/lib.rs#L522), [`core/dr-sync/src/lib.rs:135`](../../core/dr-sync/src/lib.rs#L135), [`core/dr-sync/src/scan.rs:618`](../../core/dr-sync/src/scan.rs#L618), [`core/dr-sync/src/scan.rs:93`](../../core/dr-sync/src/scan.rs#L93), [`core/dr-thumbs/src/lib.rs:393`](../../core/dr-thumbs/src/lib.rs#L393), [`core/dr-types/src/place.rs:91`](../../core/dr-types/src/place.rs#L91), [`ui/dr-ui/src/collections_ui/trash.rs:84`](../../ui/dr-ui/src/collections_ui/trash.rs#L84), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:819`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L819), [`ui/dr-ui/src/library/cells.rs:158`](../../ui/dr-ui/src/library/cells.rs#L158), [`ui/dr-ui/src/library/cells.rs:192`](../../ui/dr-ui/src/library/cells.rs#L192), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/filters.rs:29`](../../ui/dr-ui/src/library/filters.rs#L29), [`ui/dr-ui/src/library/filters.rs:59`](../../ui/dr-ui/src/library/filters.rs#L59), [`ui/dr-ui/src/library_ui/controller.rs:232`](../../ui/dr-ui/src/library_ui/controller.rs#L232), [`ui/dr-ui/src/library_ui/controller.rs:909`](../../ui/dr-ui/src/library_ui/controller.rs#L909), [`ui/dr-ui/src/trash.rs:1`](../../ui/dr-ui/src/trash.rs#L1), [`ui/dr-ui/ui/collections.slint:1206`](../../ui/dr-ui/ui/collections.slint#L1206), [`ui/dr-ui/ui/collections.slint:769`](../../ui/dr-ui/ui/collections.slint#L769) |
| FR-CAT-1a | [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`core/dr-types/src/lib.rs:56`](../../core/dr-types/src/lib.rs#L56), [`platform/dr-plat/src/storage.rs:1`](../../platform/dr-plat/src/storage.rs#L1), [`platform/dr-plat/src/storage.rs:216`](../../platform/dr-plat/src/storage.rs#L216), [`platform/dr-plat/src/storage.rs:46`](../../platform/dr-plat/src/storage.rs#L46) |
| FR-CAT-2 | [`core/dr-catalog/src/lib.rs:1`](../../core/dr-catalog/src/lib.rs#L1), [`core/dr-catalog/src/schema.rs:1`](../../core/dr-catalog/src/schema.rs#L1) |
-| FR-CAT-3 | [`core/dr-catalog/src/jobs.rs:1`](../../core/dr-catalog/src/jobs.rs#L1), [`core/dr-catalog/src/walk.rs:66`](../../core/dr-catalog/src/walk.rs#L66), [`core/dr-sync/src/scan.rs:105`](../../core/dr-sync/src/scan.rs#L105), [`core/dr-thumbs/src/codec.rs:1`](../../core/dr-thumbs/src/codec.rs#L1), [`core/dr-thumbs/src/lib.rs:1`](../../core/dr-thumbs/src/lib.rs#L1), [`ui/dr-ui/src/derived_sync.rs:1`](../../ui/dr-ui/src/derived_sync.rs#L1), [`ui/dr-ui/src/import.rs:474`](../../ui/dr-ui/src/import.rs#L474), [`ui/dr-ui/src/import.rs:504`](../../ui/dr-ui/src/import.rs#L504), [`ui/dr-ui/src/library/sweep.rs:562`](../../ui/dr-ui/src/library/sweep.rs#L562), [`ui/dr-ui/src/library_ui/controller.rs:171`](../../ui/dr-ui/src/library_ui/controller.rs#L171), [`ui/dr-ui/src/library_ui/grid.rs:479`](../../ui/dr-ui/src/library_ui/grid.rs#L479), [`ui/dr-ui/src/library_ui/sync.rs:385`](../../ui/dr-ui/src/library_ui/sync.rs#L385), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/src/repairs.rs:695`](../../ui/dr-ui/src/repairs.rs#L695), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:765`](../../ui/dr-ui/ui/library.slint#L765), [`ui/dr-ui/ui/settings.slint:366`](../../ui/dr-ui/ui/settings.slint#L366), [`ui/dr-ui/ui/settings.slint:74`](../../ui/dr-ui/ui/settings.slint#L74) |
+| FR-CAT-3 | [`core/dr-catalog/src/jobs.rs:1`](../../core/dr-catalog/src/jobs.rs#L1), [`core/dr-catalog/src/walk.rs:66`](../../core/dr-catalog/src/walk.rs#L66), [`core/dr-sync/src/scan.rs:105`](../../core/dr-sync/src/scan.rs#L105), [`core/dr-thumbs/src/codec.rs:1`](../../core/dr-thumbs/src/codec.rs#L1), [`core/dr-thumbs/src/lib.rs:1`](../../core/dr-thumbs/src/lib.rs#L1), [`ui/dr-ui/src/derived_sync.rs:1`](../../ui/dr-ui/src/derived_sync.rs#L1), [`ui/dr-ui/src/import.rs:474`](../../ui/dr-ui/src/import.rs#L474), [`ui/dr-ui/src/import.rs:504`](../../ui/dr-ui/src/import.rs#L504), [`ui/dr-ui/src/library/sweep.rs:562`](../../ui/dr-ui/src/library/sweep.rs#L562), [`ui/dr-ui/src/library_ui/controller.rs:171`](../../ui/dr-ui/src/library_ui/controller.rs#L171), [`ui/dr-ui/src/library_ui/grid.rs:479`](../../ui/dr-ui/src/library_ui/grid.rs#L479), [`ui/dr-ui/src/library_ui/sync.rs:385`](../../ui/dr-ui/src/library_ui/sync.rs#L385), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/src/repairs.rs:695`](../../ui/dr-ui/src/repairs.rs#L695), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:769`](../../ui/dr-ui/ui/library.slint#L769), [`ui/dr-ui/ui/settings.slint:366`](../../ui/dr-ui/ui/settings.slint#L366), [`ui/dr-ui/ui/settings.slint:74`](../../ui/dr-ui/ui/settings.slint#L74) |
| FR-CAT-4 | [`core/dr-catalog/src/lib.rs:1`](../../core/dr-catalog/src/lib.rs#L1), [`core/dr-catalog/src/query.rs:1`](../../core/dr-catalog/src/query.rs#L1), [`core/dr-catalog/src/schema.rs:564`](../../core/dr-catalog/src/schema.rs#L564), [`ui/dr-ui/src/library/filters.rs:39`](../../ui/dr-ui/src/library/filters.rs#L39), [`ui/dr-ui/src/library/mod.rs:1`](../../ui/dr-ui/src/library/mod.rs#L1), [`ui/dr-ui/src/library_ui/mod.rs:1`](../../ui/dr-ui/src/library_ui/mod.rs#L1), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488) |
-| FR-CAT-5 | [`core/dr-catalog/src/keywords.rs:1`](../../core/dr-catalog/src/keywords.rs#L1), [`core/dr-catalog/src/merge.rs:1`](../../core/dr-catalog/src/merge.rs#L1), [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-catalog/src/rating.rs:396`](../../core/dr-catalog/src/rating.rs#L396), [`core/dr-catalog/src/rating.rs:411`](../../core/dr-catalog/src/rating.rs#L411), [`core/dr-catalog/src/rating.rs:422`](../../core/dr-catalog/src/rating.rs#L422), [`core/dr-catalog/src/rating.rs:449`](../../core/dr-catalog/src/rating.rs#L449), [`core/dr-catalog/src/rating.rs:52`](../../core/dr-catalog/src/rating.rs#L52), [`core/dr-catalog/src/rating.rs:782`](../../core/dr-catalog/src/rating.rs#L782), [`core/dr-catalog/src/rating.rs:806`](../../core/dr-catalog/src/rating.rs#L806), [`core/dr-catalog/src/rating.rs:825`](../../core/dr-catalog/src/rating.rs#L825), [`core/dr-catalog/src/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`core/dr-catalog/src/schema.rs:1682`](../../core/dr-catalog/src/schema.rs#L1682), [`core/dr-decode/src/lib.rs:307`](../../core/dr-decode/src/lib.rs#L307), [`core/dr-decode/src/lib.rs:313`](../../core/dr-decode/src/lib.rs#L313), [`core/dr-decode/src/lib.rs:323`](../../core/dr-decode/src/lib.rs#L323), [`core/dr-decode/src/lib.rs:450`](../../core/dr-decode/src/lib.rs#L450), [`core/dr-export/src/dng.rs:308`](../../core/dr-export/src/dng.rs#L308), [`core/dr-pipeline/src/sidecar.rs:1093`](../../core/dr-pipeline/src/sidecar.rs#L1093), [`core/dr-pipeline/src/sidecar.rs:174`](../../core/dr-pipeline/src/sidecar.rs#L174), [`core/dr-pipeline/src/sidecar.rs:193`](../../core/dr-pipeline/src/sidecar.rs#L193), [`core/dr-pipeline/src/sidecar.rs:2874`](../../core/dr-pipeline/src/sidecar.rs#L2874), [`core/dr-pipeline/src/sidecar.rs:2892`](../../core/dr-pipeline/src/sidecar.rs#L2892), [`core/dr-pipeline/src/sidecar.rs:590`](../../core/dr-pipeline/src/sidecar.rs#L590), [`ui/dr-ui/src/collections_ui/controller.rs:16`](../../ui/dr-ui/src/collections_ui/controller.rs#L16), [`ui/dr-ui/src/collections_ui/controller.rs:204`](../../ui/dr-ui/src/collections_ui/controller.rs#L204), [`ui/dr-ui/src/collections_ui/controller.rs:413`](../../ui/dr-ui/src/collections_ui/controller.rs#L413), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:150`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L150), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:264`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L264), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:323`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L323), [`ui/dr-ui/src/decoder_seam.rs:184`](../../ui/dr-ui/src/decoder_seam.rs#L184), [`ui/dr-ui/src/library/cells.rs:206`](../../ui/dr-ui/src/library/cells.rs#L206), [`ui/dr-ui/src/library/scan.rs:525`](../../ui/dr-ui/src/library/scan.rs#L525), [`ui/dr-ui/src/library/scan.rs:915`](../../ui/dr-ui/src/library/scan.rs#L915), [`ui/dr-ui/src/library_ui/controller.rs:784`](../../ui/dr-ui/src/library_ui/controller.rs#L784), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1085`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1085), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1109`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1109), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1126`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1126), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:118`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L118), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1279`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1279), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1290`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1290), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1303`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1303), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1318`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1318), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1327`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1327), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:97`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L97), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:177`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L177), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:215`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L215), [`ui/dr-ui/ui/app.slint:1521`](../../ui/dr-ui/ui/app.slint#L1521), [`ui/dr-ui/ui/app.slint:2455`](../../ui/dr-ui/ui/app.slint#L2455), [`ui/dr-ui/ui/develop.slint:126`](../../ui/dr-ui/ui/develop.slint#L126), [`ui/dr-ui/ui/develop.slint:47`](../../ui/dr-ui/ui/develop.slint#L47), [`ui/dr-ui/ui/labels.slint:19`](../../ui/dr-ui/ui/labels.slint#L19), [`ui/dr-ui/ui/labels.slint:1`](../../ui/dr-ui/ui/labels.slint#L1), [`ui/dr-ui/ui/labels.slint:40`](../../ui/dr-ui/ui/labels.slint#L40), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1550`](../../ui/dr-ui/ui/library.slint#L1550), [`ui/dr-ui/ui/library.slint:1553`](../../ui/dr-ui/ui/library.slint#L1553), [`ui/dr-ui/ui/library.slint:1692`](../../ui/dr-ui/ui/library.slint#L1692), [`ui/dr-ui/ui/library.slint:1716`](../../ui/dr-ui/ui/library.slint#L1716), [`ui/dr-ui/ui/library.slint:1773`](../../ui/dr-ui/ui/library.slint#L1773), [`ui/dr-ui/ui/library.slint:21`](../../ui/dr-ui/ui/library.slint#L21), [`ui/dr-ui/ui/library.slint:3121`](../../ui/dr-ui/ui/library.slint#L3121), [`ui/dr-ui/ui/library.slint:3195`](../../ui/dr-ui/ui/library.slint#L3195), [`ui/dr-ui/ui/library.slint:3792`](../../ui/dr-ui/ui/library.slint#L3792), [`ui/dr-ui/ui/library.slint:467`](../../ui/dr-ui/ui/library.slint#L467), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4903`](../../ui/dr-ui/ui/library.slint#L4903), [`ui/dr-ui/ui/library.slint:4919`](../../ui/dr-ui/ui/library.slint#L4919), [`ui/dr-ui/ui/library.slint:510`](../../ui/dr-ui/ui/library.slint#L510), [`ui/dr-ui/ui/library.slint:609`](../../ui/dr-ui/ui/library.slint#L609), [`ui/dr-ui/ui/library.slint:649`](../../ui/dr-ui/ui/library.slint#L649), [`ui/dr-ui/ui/library.slint:655`](../../ui/dr-ui/ui/library.slint#L655), [`ui/dr-ui/ui/library.slint:659`](../../ui/dr-ui/ui/library.slint#L659) |
-| FR-CAT-6 | [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/keywords.rs:1`](../../core/dr-catalog/src/keywords.rs#L1), [`core/dr-catalog/src/lib.rs:1`](../../core/dr-catalog/src/lib.rs#L1), [`core/dr-catalog/src/query.rs:1`](../../core/dr-catalog/src/query.rs#L1), [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-catalog/src/rating.rs:449`](../../core/dr-catalog/src/rating.rs#L449), [`core/dr-catalog/src/rating.rs:835`](../../core/dr-catalog/src/rating.rs#L835), [`core/dr-catalog/src/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`core/dr-types/src/place.rs:138`](../../core/dr-types/src/place.rs#L138), [`core/dr-types/src/place.rs:1`](../../core/dr-types/src/place.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`core/dr-types/src/settings.rs:64`](../../core/dr-types/src/settings.rs#L64), [`core/dr-types/src/time.rs:67`](../../core/dr-types/src/time.rs#L67), [`core/dr-types/src/time.rs:90`](../../core/dr-types/src/time.rs#L90), [`ui/dr-ui/src/library/filters.rs:156`](../../ui/dr-ui/src/library/filters.rs#L156), [`ui/dr-ui/src/library/filters.rs:357`](../../ui/dr-ui/src/library/filters.rs#L357), [`ui/dr-ui/src/library/filters.rs:442`](../../ui/dr-ui/src/library/filters.rs#L442), [`ui/dr-ui/src/library/filters.rs:64`](../../ui/dr-ui/src/library/filters.rs#L64), [`ui/dr-ui/src/library/spans.rs:253`](../../ui/dr-ui/src/library/spans.rs#L253), [`ui/dr-ui/src/library_ui/controller.rs:391`](../../ui/dr-ui/src/library_ui/controller.rs#L391), [`ui/dr-ui/src/library_ui/controller.rs:500`](../../ui/dr-ui/src/library_ui/controller.rs#L500), [`ui/dr-ui/src/library_ui/filter_bar.rs:256`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L256), [`ui/dr-ui/src/library_ui/filter_bar.rs:351`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L351), [`ui/dr-ui/src/library_ui/filter_bar.rs:406`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L406), [`ui/dr-ui/src/library_ui/filter_bar.rs:840`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L840), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:85`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L85), [`ui/dr-ui/ui/app.slint:612`](../../ui/dr-ui/ui/app.slint#L612), [`ui/dr-ui/ui/library.slint:113`](../../ui/dr-ui/ui/library.slint#L113), [`ui/dr-ui/ui/library.slint:1860`](../../ui/dr-ui/ui/library.slint#L1860), [`ui/dr-ui/ui/library.slint:1897`](../../ui/dr-ui/ui/library.slint#L1897), [`ui/dr-ui/ui/library.slint:2626`](../../ui/dr-ui/ui/library.slint#L2626), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4903`](../../ui/dr-ui/ui/library.slint#L4903), [`ui/dr-ui/ui/library.slint:609`](../../ui/dr-ui/ui/library.slint#L609), [`ui/dr-ui/ui/library.slint:663`](../../ui/dr-ui/ui/library.slint#L663), [`ui/dr-ui/ui/library.slint:685`](../../ui/dr-ui/ui/library.slint#L685), [`ui/dr-ui/ui/settings.slint:196`](../../ui/dr-ui/ui/settings.slint#L196), [`ui/dr-ui/ui/widgets.slint:271`](../../ui/dr-ui/ui/widgets.slint#L271) |
-| FR-CAT-7 | [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/merge.rs:1`](../../core/dr-catalog/src/merge.rs#L1), [`core/dr-catalog/src/sync.rs:1`](../../core/dr-catalog/src/sync.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:258`](../../ui/dr-ui/src/collections_ui/controller.rs#L258), [`ui/dr-ui/src/collections_ui/controller.rs:268`](../../ui/dr-ui/src/collections_ui/controller.rs#L268), [`ui/dr-ui/src/collections_ui/controller.rs:291`](../../ui/dr-ui/src/collections_ui/controller.rs#L291), [`ui/dr-ui/src/collections_ui/controller.rs:312`](../../ui/dr-ui/src/collections_ui/controller.rs#L312), [`ui/dr-ui/src/collections_ui/controller.rs:46`](../../ui/dr-ui/src/collections_ui/controller.rs#L46), [`ui/dr-ui/src/collections_ui/drag.rs:274`](../../ui/dr-ui/src/collections_ui/drag.rs#L274), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/collections_ui/press.rs:258`](../../ui/dr-ui/src/collections_ui/press.rs#L258), [`ui/dr-ui/src/collections_ui/press.rs:490`](../../ui/dr-ui/src/collections_ui/press.rs#L490), [`ui/dr-ui/src/collections_ui/press.rs:54`](../../ui/dr-ui/src/collections_ui/press.rs#L54), [`ui/dr-ui/src/collections_ui/rename_menu.rs:196`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L196), [`ui/dr-ui/src/collections_ui/rename_menu.rs:21`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L21), [`ui/dr-ui/src/collections_ui/tree_sync.rs:246`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L246), [`ui/dr-ui/src/collections_ui/tree_sync.rs:317`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L317), [`ui/dr-ui/src/collections_ui/tree_sync.rs:339`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L339), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:171`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L171), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:444`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L444), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:522`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L522), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:586`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L586), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:344`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L344), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:394`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L394), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:517`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L517), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:581`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L581), [`ui/dr-ui/src/derived_sync.rs:1`](../../ui/dr-ui/src/derived_sync.rs#L1), [`ui/dr-ui/src/library/spans.rs:139`](../../ui/dr-ui/src/library/spans.rs#L139), [`ui/dr-ui/src/library/spans.rs:58`](../../ui/dr-ui/src/library/spans.rs#L58), [`ui/dr-ui/src/library/spans.rs:84`](../../ui/dr-ui/src/library/spans.rs#L84), [`ui/dr-ui/src/library_ui/sync.rs:235`](../../ui/dr-ui/src/library_ui/sync.rs#L235), [`ui/dr-ui/src/library_ui/timeline.rs:513`](../../ui/dr-ui/src/library_ui/timeline.rs#L513), [`ui/dr-ui/src/library_ui/window.rs:273`](../../ui/dr-ui/src/library_ui/window.rs#L273), [`ui/dr-ui/ui/app.slint:3133`](../../ui/dr-ui/ui/app.slint#L3133), [`ui/dr-ui/ui/collections.slint:1189`](../../ui/dr-ui/ui/collections.slint#L1189), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:594`](../../ui/dr-ui/ui/collections.slint#L594), [`ui/dr-ui/ui/library.slint:1303`](../../ui/dr-ui/ui/library.slint#L1303), [`ui/dr-ui/ui/library.slint:1658`](../../ui/dr-ui/ui/library.slint#L1658), [`ui/dr-ui/ui/library.slint:3551`](../../ui/dr-ui/ui/library.slint#L3551), [`ui/dr-ui/ui/library.slint:4881`](../../ui/dr-ui/ui/library.slint#L4881), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4984`](../../ui/dr-ui/ui/library.slint#L4984), [`ui/dr-ui/ui/library.slint:513`](../../ui/dr-ui/ui/library.slint#L513), [`ui/dr-ui/ui/library.slint:555`](../../ui/dr-ui/ui/library.slint#L555), [`ui/dr-ui/ui/library.slint:565`](../../ui/dr-ui/ui/library.slint#L565) |
-| FR-CAT-8 | [`core/dr-catalog/src/schema.rs:740`](../../core/dr-catalog/src/schema.rs#L740), [`core/dr-pipeline/src/coverage.rs:1`](../../core/dr-pipeline/src/coverage.rs#L1), [`core/dr-pipeline/src/graph.rs:587`](../../core/dr-pipeline/src/graph.rs#L587), [`core/dr-pipeline/src/graph.rs:640`](../../core/dr-pipeline/src/graph.rs#L640), [`core/dr-pipeline/src/ops/curve.rs:137`](../../core/dr-pipeline/src/ops/curve.rs#L137), [`core/dr-pipeline/src/ops/curve.rs:656`](../../core/dr-pipeline/src/ops/curve.rs#L656), [`core/dr-pipeline/src/sidecar.rs:1433`](../../core/dr-pipeline/src/sidecar.rs#L1433), [`core/dr-pipeline/src/sidecar.rs:2273`](../../core/dr-pipeline/src/sidecar.rs#L2273), [`core/dr-pipeline/src/sidecar.rs:99`](../../core/dr-pipeline/src/sidecar.rs#L99), [`core/dr-pipeline/src/state.rs:1`](../../core/dr-pipeline/src/state.rs#L1), [`core/dr-pipeline/src/state.rs:75`](../../core/dr-pipeline/src/state.rs#L75), [`core/dr-pipeline/tests/tone_curve.rs:34`](../../core/dr-pipeline/tests/tone_curve.rs#L34), [`core/dr-sync/src/scan.rs:31`](../../core/dr-sync/src/scan.rs#L31), [`core/dr-sync/src/scan.rs:56`](../../core/dr-sync/src/scan.rs#L56), [`core/dr-sync/src/scan.rs:926`](../../core/dr-sync/src/scan.rs#L926), [`ui/dr-ui/src/develop/mask_ops.rs:1076`](../../ui/dr-ui/src/develop/mask_ops.rs#L1076), [`ui/dr-ui/src/develop/mask_ops.rs:1130`](../../ui/dr-ui/src/develop/mask_ops.rs#L1130), [`ui/dr-ui/src/develop/mask_ops.rs:178`](../../ui/dr-ui/src/develop/mask_ops.rs#L178), [`ui/dr-ui/src/develop/masks.rs:743`](../../ui/dr-ui/src/develop/masks.rs#L743), [`ui/dr-ui/src/develop/session.rs:566`](../../ui/dr-ui/src/develop/session.rs#L566), [`ui/dr-ui/src/develop/session.rs:595`](../../ui/dr-ui/src/develop/session.rs#L595), [`ui/dr-ui/src/export.rs:831`](../../ui/dr-ui/src/export.rs#L831), [`ui/dr-ui/src/lib.rs:1211`](../../ui/dr-ui/src/lib.rs#L1211), [`ui/dr-ui/src/lib.rs:1271`](../../ui/dr-ui/src/lib.rs#L1271), [`ui/dr-ui/src/lib.rs:2714`](../../ui/dr-ui/src/lib.rs#L2714), [`ui/dr-ui/src/lib.rs:2861`](../../ui/dr-ui/src/lib.rs#L2861), [`ui/dr-ui/src/lib.rs:786`](../../ui/dr-ui/src/lib.rs#L786), [`ui/dr-ui/src/library/scan.rs:226`](../../ui/dr-ui/src/library/scan.rs#L226), [`ui/dr-ui/src/library/scan.rs:261`](../../ui/dr-ui/src/library/scan.rs#L261), [`ui/dr-ui/src/library/scan.rs:34`](../../ui/dr-ui/src/library/scan.rs#L34), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:378`](../../ui/dr-ui/src/library/sidecar.rs#L378), [`ui/dr-ui/src/library/sidecar.rs:63`](../../ui/dr-ui/src/library/sidecar.rs#L63), [`ui/dr-ui/src/library/thumbnails_fetch.rs:413`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L413), [`ui/dr-ui/src/library_ui/grid.rs:713`](../../ui/dr-ui/src/library_ui/grid.rs#L713), [`ui/dr-ui/src/library_ui/open.rs:455`](../../ui/dr-ui/src/library_ui/open.rs#L455), [`ui/dr-ui/src/sidecar_cache.rs:1`](../../ui/dr-ui/src/sidecar_cache.rs#L1) |
+| FR-CAT-5 | [`core/dr-catalog/src/keywords.rs:1`](../../core/dr-catalog/src/keywords.rs#L1), [`core/dr-catalog/src/merge.rs:1`](../../core/dr-catalog/src/merge.rs#L1), [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-catalog/src/rating.rs:396`](../../core/dr-catalog/src/rating.rs#L396), [`core/dr-catalog/src/rating.rs:411`](../../core/dr-catalog/src/rating.rs#L411), [`core/dr-catalog/src/rating.rs:422`](../../core/dr-catalog/src/rating.rs#L422), [`core/dr-catalog/src/rating.rs:449`](../../core/dr-catalog/src/rating.rs#L449), [`core/dr-catalog/src/rating.rs:52`](../../core/dr-catalog/src/rating.rs#L52), [`core/dr-catalog/src/rating.rs:782`](../../core/dr-catalog/src/rating.rs#L782), [`core/dr-catalog/src/rating.rs:806`](../../core/dr-catalog/src/rating.rs#L806), [`core/dr-catalog/src/rating.rs:825`](../../core/dr-catalog/src/rating.rs#L825), [`core/dr-catalog/src/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`core/dr-catalog/src/schema.rs:1682`](../../core/dr-catalog/src/schema.rs#L1682), [`core/dr-decode/src/lib.rs:307`](../../core/dr-decode/src/lib.rs#L307), [`core/dr-decode/src/lib.rs:313`](../../core/dr-decode/src/lib.rs#L313), [`core/dr-decode/src/lib.rs:323`](../../core/dr-decode/src/lib.rs#L323), [`core/dr-decode/src/lib.rs:450`](../../core/dr-decode/src/lib.rs#L450), [`core/dr-export/src/dng.rs:308`](../../core/dr-export/src/dng.rs#L308), [`core/dr-pipeline/src/sidecar.rs:1093`](../../core/dr-pipeline/src/sidecar.rs#L1093), [`core/dr-pipeline/src/sidecar.rs:174`](../../core/dr-pipeline/src/sidecar.rs#L174), [`core/dr-pipeline/src/sidecar.rs:193`](../../core/dr-pipeline/src/sidecar.rs#L193), [`core/dr-pipeline/src/sidecar.rs:2874`](../../core/dr-pipeline/src/sidecar.rs#L2874), [`core/dr-pipeline/src/sidecar.rs:2892`](../../core/dr-pipeline/src/sidecar.rs#L2892), [`core/dr-pipeline/src/sidecar.rs:590`](../../core/dr-pipeline/src/sidecar.rs#L590), [`ui/dr-ui/src/collections_ui/controller.rs:16`](../../ui/dr-ui/src/collections_ui/controller.rs#L16), [`ui/dr-ui/src/collections_ui/controller.rs:204`](../../ui/dr-ui/src/collections_ui/controller.rs#L204), [`ui/dr-ui/src/collections_ui/controller.rs:413`](../../ui/dr-ui/src/collections_ui/controller.rs#L413), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:150`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L150), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:264`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L264), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:323`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L323), [`ui/dr-ui/src/decoder_seam.rs:184`](../../ui/dr-ui/src/decoder_seam.rs#L184), [`ui/dr-ui/src/library/cells.rs:206`](../../ui/dr-ui/src/library/cells.rs#L206), [`ui/dr-ui/src/library/scan.rs:525`](../../ui/dr-ui/src/library/scan.rs#L525), [`ui/dr-ui/src/library/scan.rs:915`](../../ui/dr-ui/src/library/scan.rs#L915), [`ui/dr-ui/src/library_ui/controller.rs:784`](../../ui/dr-ui/src/library_ui/controller.rs#L784), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1108`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1108), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1132`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1132), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1149`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1149), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:118`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L118), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1302`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1302), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1313`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1313), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1326`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1326), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1341`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1341), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1350`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1350), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:97`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L97), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:177`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L177), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:215`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L215), [`ui/dr-ui/ui/app.slint:1605`](../../ui/dr-ui/ui/app.slint#L1605), [`ui/dr-ui/ui/app.slint:2711`](../../ui/dr-ui/ui/app.slint#L2711), [`ui/dr-ui/ui/develop.slint:134`](../../ui/dr-ui/ui/develop.slint#L134), [`ui/dr-ui/ui/develop.slint:48`](../../ui/dr-ui/ui/develop.slint#L48), [`ui/dr-ui/ui/labels.slint:19`](../../ui/dr-ui/ui/labels.slint#L19), [`ui/dr-ui/ui/labels.slint:1`](../../ui/dr-ui/ui/labels.slint#L1), [`ui/dr-ui/ui/labels.slint:40`](../../ui/dr-ui/ui/labels.slint#L40), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1554`](../../ui/dr-ui/ui/library.slint#L1554), [`ui/dr-ui/ui/library.slint:1557`](../../ui/dr-ui/ui/library.slint#L1557), [`ui/dr-ui/ui/library.slint:1712`](../../ui/dr-ui/ui/library.slint#L1712), [`ui/dr-ui/ui/library.slint:1736`](../../ui/dr-ui/ui/library.slint#L1736), [`ui/dr-ui/ui/library.slint:1793`](../../ui/dr-ui/ui/library.slint#L1793), [`ui/dr-ui/ui/library.slint:21`](../../ui/dr-ui/ui/library.slint#L21), [`ui/dr-ui/ui/library.slint:3145`](../../ui/dr-ui/ui/library.slint#L3145), [`ui/dr-ui/ui/library.slint:3152`](../../ui/dr-ui/ui/library.slint#L3152), [`ui/dr-ui/ui/library.slint:3172`](../../ui/dr-ui/ui/library.slint#L3172), [`ui/dr-ui/ui/library.slint:3261`](../../ui/dr-ui/ui/library.slint#L3261), [`ui/dr-ui/ui/library.slint:3863`](../../ui/dr-ui/ui/library.slint#L3863), [`ui/dr-ui/ui/library.slint:467`](../../ui/dr-ui/ui/library.slint#L467), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4975`](../../ui/dr-ui/ui/library.slint#L4975), [`ui/dr-ui/ui/library.slint:4991`](../../ui/dr-ui/ui/library.slint#L4991), [`ui/dr-ui/ui/library.slint:510`](../../ui/dr-ui/ui/library.slint#L510), [`ui/dr-ui/ui/library.slint:609`](../../ui/dr-ui/ui/library.slint#L609), [`ui/dr-ui/ui/library.slint:653`](../../ui/dr-ui/ui/library.slint#L653), [`ui/dr-ui/ui/library.slint:659`](../../ui/dr-ui/ui/library.slint#L659), [`ui/dr-ui/ui/library.slint:663`](../../ui/dr-ui/ui/library.slint#L663) |
+| FR-CAT-6 | [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/keywords.rs:1`](../../core/dr-catalog/src/keywords.rs#L1), [`core/dr-catalog/src/lib.rs:1`](../../core/dr-catalog/src/lib.rs#L1), [`core/dr-catalog/src/query.rs:1`](../../core/dr-catalog/src/query.rs#L1), [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-catalog/src/rating.rs:449`](../../core/dr-catalog/src/rating.rs#L449), [`core/dr-catalog/src/rating.rs:835`](../../core/dr-catalog/src/rating.rs#L835), [`core/dr-catalog/src/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`core/dr-types/src/place.rs:138`](../../core/dr-types/src/place.rs#L138), [`core/dr-types/src/place.rs:1`](../../core/dr-types/src/place.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`core/dr-types/src/settings.rs:64`](../../core/dr-types/src/settings.rs#L64), [`core/dr-types/src/time.rs:67`](../../core/dr-types/src/time.rs#L67), [`core/dr-types/src/time.rs:90`](../../core/dr-types/src/time.rs#L90), [`ui/dr-ui/src/library/filters.rs:156`](../../ui/dr-ui/src/library/filters.rs#L156), [`ui/dr-ui/src/library/filters.rs:357`](../../ui/dr-ui/src/library/filters.rs#L357), [`ui/dr-ui/src/library/filters.rs:442`](../../ui/dr-ui/src/library/filters.rs#L442), [`ui/dr-ui/src/library/filters.rs:64`](../../ui/dr-ui/src/library/filters.rs#L64), [`ui/dr-ui/src/library/spans.rs:253`](../../ui/dr-ui/src/library/spans.rs#L253), [`ui/dr-ui/src/library_ui/controller.rs:391`](../../ui/dr-ui/src/library_ui/controller.rs#L391), [`ui/dr-ui/src/library_ui/controller.rs:500`](../../ui/dr-ui/src/library_ui/controller.rs#L500), [`ui/dr-ui/src/library_ui/filter_bar.rs:256`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L256), [`ui/dr-ui/src/library_ui/filter_bar.rs:351`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L351), [`ui/dr-ui/src/library_ui/filter_bar.rs:406`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L406), [`ui/dr-ui/src/library_ui/filter_bar.rs:840`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L840), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:85`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L85), [`ui/dr-ui/ui/app.slint:615`](../../ui/dr-ui/ui/app.slint#L615), [`ui/dr-ui/ui/library.slint:113`](../../ui/dr-ui/ui/library.slint#L113), [`ui/dr-ui/ui/library.slint:1880`](../../ui/dr-ui/ui/library.slint#L1880), [`ui/dr-ui/ui/library.slint:1917`](../../ui/dr-ui/ui/library.slint#L1917), [`ui/dr-ui/ui/library.slint:2646`](../../ui/dr-ui/ui/library.slint#L2646), [`ui/dr-ui/ui/library.slint:3172`](../../ui/dr-ui/ui/library.slint#L3172), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4975`](../../ui/dr-ui/ui/library.slint#L4975), [`ui/dr-ui/ui/library.slint:609`](../../ui/dr-ui/ui/library.slint#L609), [`ui/dr-ui/ui/library.slint:667`](../../ui/dr-ui/ui/library.slint#L667), [`ui/dr-ui/ui/library.slint:689`](../../ui/dr-ui/ui/library.slint#L689), [`ui/dr-ui/ui/settings.slint:196`](../../ui/dr-ui/ui/settings.slint#L196), [`ui/dr-ui/ui/widgets.slint:271`](../../ui/dr-ui/ui/widgets.slint#L271) |
+| FR-CAT-7 | [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/merge.rs:1`](../../core/dr-catalog/src/merge.rs#L1), [`core/dr-catalog/src/sync.rs:1`](../../core/dr-catalog/src/sync.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:258`](../../ui/dr-ui/src/collections_ui/controller.rs#L258), [`ui/dr-ui/src/collections_ui/controller.rs:268`](../../ui/dr-ui/src/collections_ui/controller.rs#L268), [`ui/dr-ui/src/collections_ui/controller.rs:291`](../../ui/dr-ui/src/collections_ui/controller.rs#L291), [`ui/dr-ui/src/collections_ui/controller.rs:312`](../../ui/dr-ui/src/collections_ui/controller.rs#L312), [`ui/dr-ui/src/collections_ui/controller.rs:46`](../../ui/dr-ui/src/collections_ui/controller.rs#L46), [`ui/dr-ui/src/collections_ui/drag.rs:274`](../../ui/dr-ui/src/collections_ui/drag.rs#L274), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/collections_ui/press.rs:258`](../../ui/dr-ui/src/collections_ui/press.rs#L258), [`ui/dr-ui/src/collections_ui/press.rs:490`](../../ui/dr-ui/src/collections_ui/press.rs#L490), [`ui/dr-ui/src/collections_ui/press.rs:54`](../../ui/dr-ui/src/collections_ui/press.rs#L54), [`ui/dr-ui/src/collections_ui/rename_menu.rs:196`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L196), [`ui/dr-ui/src/collections_ui/rename_menu.rs:21`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L21), [`ui/dr-ui/src/collections_ui/tree_sync.rs:246`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L246), [`ui/dr-ui/src/collections_ui/tree_sync.rs:317`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L317), [`ui/dr-ui/src/collections_ui/tree_sync.rs:339`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L339), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:171`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L171), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:444`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L444), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:522`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L522), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:586`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L586), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:344`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L344), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:394`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L394), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:517`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L517), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:581`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L581), [`ui/dr-ui/src/derived_sync.rs:1`](../../ui/dr-ui/src/derived_sync.rs#L1), [`ui/dr-ui/src/library/spans.rs:139`](../../ui/dr-ui/src/library/spans.rs#L139), [`ui/dr-ui/src/library/spans.rs:58`](../../ui/dr-ui/src/library/spans.rs#L58), [`ui/dr-ui/src/library/spans.rs:84`](../../ui/dr-ui/src/library/spans.rs#L84), [`ui/dr-ui/src/library_ui/sync.rs:235`](../../ui/dr-ui/src/library_ui/sync.rs#L235), [`ui/dr-ui/src/library_ui/timeline.rs:513`](../../ui/dr-ui/src/library_ui/timeline.rs#L513), [`ui/dr-ui/src/library_ui/window.rs:273`](../../ui/dr-ui/src/library_ui/window.rs#L273), [`ui/dr-ui/ui/app.slint:3380`](../../ui/dr-ui/ui/app.slint#L3380), [`ui/dr-ui/ui/collections.slint:1206`](../../ui/dr-ui/ui/collections.slint#L1206), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:610`](../../ui/dr-ui/ui/collections.slint#L610), [`ui/dr-ui/ui/library.slint:1307`](../../ui/dr-ui/ui/library.slint#L1307), [`ui/dr-ui/ui/library.slint:1678`](../../ui/dr-ui/ui/library.slint#L1678), [`ui/dr-ui/ui/library.slint:3622`](../../ui/dr-ui/ui/library.slint#L3622), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:4953`](../../ui/dr-ui/ui/library.slint#L4953), [`ui/dr-ui/ui/library.slint:5095`](../../ui/dr-ui/ui/library.slint#L5095), [`ui/dr-ui/ui/library.slint:513`](../../ui/dr-ui/ui/library.slint#L513), [`ui/dr-ui/ui/library.slint:555`](../../ui/dr-ui/ui/library.slint#L555), [`ui/dr-ui/ui/library.slint:565`](../../ui/dr-ui/ui/library.slint#L565) |
+| FR-CAT-8 | [`core/dr-catalog/src/schema.rs:740`](../../core/dr-catalog/src/schema.rs#L740), [`core/dr-pipeline/src/coverage.rs:1`](../../core/dr-pipeline/src/coverage.rs#L1), [`core/dr-pipeline/src/graph.rs:587`](../../core/dr-pipeline/src/graph.rs#L587), [`core/dr-pipeline/src/graph.rs:640`](../../core/dr-pipeline/src/graph.rs#L640), [`core/dr-pipeline/src/ops/curve.rs:137`](../../core/dr-pipeline/src/ops/curve.rs#L137), [`core/dr-pipeline/src/ops/curve.rs:656`](../../core/dr-pipeline/src/ops/curve.rs#L656), [`core/dr-pipeline/src/sidecar.rs:1433`](../../core/dr-pipeline/src/sidecar.rs#L1433), [`core/dr-pipeline/src/sidecar.rs:2273`](../../core/dr-pipeline/src/sidecar.rs#L2273), [`core/dr-pipeline/src/sidecar.rs:99`](../../core/dr-pipeline/src/sidecar.rs#L99), [`core/dr-pipeline/src/state.rs:1`](../../core/dr-pipeline/src/state.rs#L1), [`core/dr-pipeline/src/state.rs:75`](../../core/dr-pipeline/src/state.rs#L75), [`core/dr-pipeline/tests/tone_curve.rs:34`](../../core/dr-pipeline/tests/tone_curve.rs#L34), [`core/dr-sync/src/scan.rs:31`](../../core/dr-sync/src/scan.rs#L31), [`core/dr-sync/src/scan.rs:56`](../../core/dr-sync/src/scan.rs#L56), [`core/dr-sync/src/scan.rs:926`](../../core/dr-sync/src/scan.rs#L926), [`ui/dr-ui/src/develop/mask_ops.rs:1076`](../../ui/dr-ui/src/develop/mask_ops.rs#L1076), [`ui/dr-ui/src/develop/mask_ops.rs:1130`](../../ui/dr-ui/src/develop/mask_ops.rs#L1130), [`ui/dr-ui/src/develop/mask_ops.rs:178`](../../ui/dr-ui/src/develop/mask_ops.rs#L178), [`ui/dr-ui/src/develop/masks.rs:743`](../../ui/dr-ui/src/develop/masks.rs#L743), [`ui/dr-ui/src/develop/session.rs:566`](../../ui/dr-ui/src/develop/session.rs#L566), [`ui/dr-ui/src/develop/session.rs:595`](../../ui/dr-ui/src/develop/session.rs#L595), [`ui/dr-ui/src/export.rs:831`](../../ui/dr-ui/src/export.rs#L831), [`ui/dr-ui/src/lib.rs:1212`](../../ui/dr-ui/src/lib.rs#L1212), [`ui/dr-ui/src/lib.rs:1272`](../../ui/dr-ui/src/lib.rs#L1272), [`ui/dr-ui/src/lib.rs:2715`](../../ui/dr-ui/src/lib.rs#L2715), [`ui/dr-ui/src/lib.rs:2862`](../../ui/dr-ui/src/lib.rs#L2862), [`ui/dr-ui/src/lib.rs:787`](../../ui/dr-ui/src/lib.rs#L787), [`ui/dr-ui/src/library/scan.rs:226`](../../ui/dr-ui/src/library/scan.rs#L226), [`ui/dr-ui/src/library/scan.rs:261`](../../ui/dr-ui/src/library/scan.rs#L261), [`ui/dr-ui/src/library/scan.rs:34`](../../ui/dr-ui/src/library/scan.rs#L34), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:378`](../../ui/dr-ui/src/library/sidecar.rs#L378), [`ui/dr-ui/src/library/sidecar.rs:63`](../../ui/dr-ui/src/library/sidecar.rs#L63), [`ui/dr-ui/src/library/thumbnails_fetch.rs:413`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L413), [`ui/dr-ui/src/library_ui/grid.rs:713`](../../ui/dr-ui/src/library_ui/grid.rs#L713), [`ui/dr-ui/src/library_ui/open.rs:455`](../../ui/dr-ui/src/library_ui/open.rs#L455), [`ui/dr-ui/src/sidecar_cache.rs:1`](../../ui/dr-ui/src/sidecar_cache.rs#L1) |
| FR-CAT-9 | [`core/dr-catalog/src/cache.rs:1`](../../core/dr-catalog/src/cache.rs#L1), [`core/dr-catalog/src/scan.rs:1`](../../core/dr-catalog/src/scan.rs#L1), [`core/dr-catalog/src/schema.rs:1182`](../../core/dr-catalog/src/schema.rs#L1182), [`core/dr-catalog/src/walk.rs:1022`](../../core/dr-catalog/src/walk.rs#L1022), [`core/dr-catalog/src/walk.rs:162`](../../core/dr-catalog/src/walk.rs#L162), [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`core/dr-catalog/src/walk.rs:435`](../../core/dr-catalog/src/walk.rs#L435), [`core/dr-catalog/src/walk.rs:728`](../../core/dr-catalog/src/walk.rs#L728), [`core/dr-sync-nextcloud/src/desktop_client.rs:35`](../../core/dr-sync-nextcloud/src/desktop_client.rs#L35), [`core/dr-sync/src/error.rs:113`](../../core/dr-sync/src/error.rs#L113), [`core/dr-sync/src/reachability.rs:1`](../../core/dr-sync/src/reachability.rs#L1), [`core/dr-sync/src/scan.rs:211`](../../core/dr-sync/src/scan.rs#L211), [`core/dr-sync/src/scan.rs:519`](../../core/dr-sync/src/scan.rs#L519), [`core/dr-types/src/lib.rs:122`](../../core/dr-types/src/lib.rs#L122), [`ui/dr-ui/src/develop/render.rs:666`](../../ui/dr-ui/src/develop/render.rs#L666), [`ui/dr-ui/src/develop/render.rs:709`](../../ui/dr-ui/src/develop/render.rs#L709), [`ui/dr-ui/src/library/filters.rs:89`](../../ui/dr-ui/src/library/filters.rs#L89), [`ui/dr-ui/src/library/scan.rs:126`](../../ui/dr-ui/src/library/scan.rs#L126), [`ui/dr-ui/src/library/scan.rs:179`](../../ui/dr-ui/src/library/scan.rs#L179), [`ui/dr-ui/src/library/scan.rs:210`](../../ui/dr-ui/src/library/scan.rs#L210), [`ui/dr-ui/src/library/scan.rs:261`](../../ui/dr-ui/src/library/scan.rs#L261), [`ui/dr-ui/src/library/scan.rs:624`](../../ui/dr-ui/src/library/scan.rs#L624), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:362`](../../ui/dr-ui/src/library/sidecar.rs#L362), [`ui/dr-ui/src/library/sidecar.rs:378`](../../ui/dr-ui/src/library/sidecar.rs#L378), [`ui/dr-ui/src/library/sidecar.rs:432`](../../ui/dr-ui/src/library/sidecar.rs#L432), [`ui/dr-ui/src/library/spans.rs:361`](../../ui/dr-ui/src/library/spans.rs#L361), [`ui/dr-ui/src/library/thumbnails_fetch.rs:393`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L393), [`ui/dr-ui/src/library/thumbnails_fetch.rs:449`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L449), [`ui/dr-ui/src/library/thumbnails_gen.rs:74`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L74), [`ui/dr-ui/src/library_ui/controller.rs:279`](../../ui/dr-ui/src/library_ui/controller.rs#L279), [`ui/dr-ui/src/library_ui/controller.rs:315`](../../ui/dr-ui/src/library_ui/controller.rs#L315), [`ui/dr-ui/src/library_ui/controller.rs:323`](../../ui/dr-ui/src/library_ui/controller.rs#L323), [`ui/dr-ui/src/library_ui/controller.rs:568`](../../ui/dr-ui/src/library_ui/controller.rs#L568), [`ui/dr-ui/src/library_ui/controller.rs:657`](../../ui/dr-ui/src/library_ui/controller.rs#L657), [`ui/dr-ui/src/library_ui/filter_bar.rs:461`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L461), [`ui/dr-ui/src/library_ui/filter_bar.rs:547`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L547), [`ui/dr-ui/src/library_ui/offline.rs:561`](../../ui/dr-ui/src/library_ui/offline.rs#L561), [`ui/dr-ui/src/library_ui/offline.rs:607`](../../ui/dr-ui/src/library_ui/offline.rs#L607), [`ui/dr-ui/src/library_ui/offline.rs:623`](../../ui/dr-ui/src/library_ui/offline.rs#L623), [`ui/dr-ui/src/library_ui/open.rs:533`](../../ui/dr-ui/src/library_ui/open.rs#L533), [`ui/dr-ui/src/library_ui/open.rs:613`](../../ui/dr-ui/src/library_ui/open.rs#L613), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:75`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L75), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:841`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L841), [`ui/dr-ui/src/library_ui/sync.rs:287`](../../ui/dr-ui/src/library_ui/sync.rs#L287), [`ui/dr-ui/src/library_ui/sync.rs:414`](../../ui/dr-ui/src/library_ui/sync.rs#L414), [`ui/dr-ui/src/library_ui/sync.rs:83`](../../ui/dr-ui/src/library_ui/sync.rs#L83), [`ui/dr-ui/src/library_ui/window.rs:553`](../../ui/dr-ui/src/library_ui/window.rs#L553), [`ui/dr-ui/src/library_ui/window.rs:833`](../../ui/dr-ui/src/library_ui/window.rs#L833), [`ui/dr-ui/src/presets.rs:486`](../../ui/dr-ui/src/presets.rs#L486), [`ui/dr-ui/src/presets.rs:498`](../../ui/dr-ui/src/presets.rs#L498), [`ui/dr-ui/src/sidecar_cache.rs:1`](../../ui/dr-ui/src/sidecar_cache.rs#L1), [`ui/dr-ui/tests/export_ignores_the_viewport.rs:1`](../../ui/dr-ui/tests/export_ignores_the_viewport.rs#L1) |
| FR-CULL-1 | [`core/dr-decode/src/preview.rs:121`](../../core/dr-decode/src/preview.rs#L121) |
-| FR-CULL-10 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:603`](../../core/dr-catalog/src/schema.rs#L603), [`core/dr-catalog/src/schema.rs:781`](../../core/dr-catalog/src/schema.rs#L781), [`core/dr-face/src/assign.rs:1`](../../core/dr-face/src/assign.rs#L1), [`core/dr-face/src/neighbours.rs:1`](../../core/dr-face/src/neighbours.rs#L1), [`core/dr-face/src/references.rs:1`](../../core/dr-face/src/references.rs#L1), [`core/dr-types/src/settings.rs:129`](../../core/dr-types/src/settings.rs#L129), [`ui/dr-ui/src/develop/segmentation.rs:104`](../../ui/dr-ui/src/develop/segmentation.rs#L104), [`ui/dr-ui/src/develop/segmentation.rs:170`](../../ui/dr-ui/src/develop/segmentation.rs#L170), [`ui/dr-ui/src/develop/segmentation.rs:590`](../../ui/dr-ui/src/develop/segmentation.rs#L590), [`ui/dr-ui/src/develop/segmentation.rs:95`](../../ui/dr-ui/src/develop/segmentation.rs#L95), [`ui/dr-ui/src/develop/session.rs:23`](../../ui/dr-ui/src/develop/session.rs#L23), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/identity.rs:1`](../../ui/dr-ui/src/identity.rs#L1), [`ui/dr-ui/src/identity_ui.rs:1434`](../../ui/dr-ui/src/identity_ui.rs#L1434), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/lib.rs:2833`](../../ui/dr-ui/src/lib.rs#L2833), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/ui/identity.slint:1`](../../ui/dr-ui/ui/identity.slint#L1), [`ui/dr-ui/ui/settings.slint:460`](../../ui/dr-ui/ui/settings.slint#L460), [`ui/dr-ui/ui/settings.slint:95`](../../ui/dr-ui/ui/settings.slint#L95) |
+| FR-CULL-10 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:603`](../../core/dr-catalog/src/schema.rs#L603), [`core/dr-catalog/src/schema.rs:781`](../../core/dr-catalog/src/schema.rs#L781), [`core/dr-face/src/assign.rs:1`](../../core/dr-face/src/assign.rs#L1), [`core/dr-face/src/neighbours.rs:1`](../../core/dr-face/src/neighbours.rs#L1), [`core/dr-face/src/references.rs:1`](../../core/dr-face/src/references.rs#L1), [`core/dr-types/src/settings.rs:129`](../../core/dr-types/src/settings.rs#L129), [`ui/dr-ui/src/develop/segmentation.rs:104`](../../ui/dr-ui/src/develop/segmentation.rs#L104), [`ui/dr-ui/src/develop/segmentation.rs:170`](../../ui/dr-ui/src/develop/segmentation.rs#L170), [`ui/dr-ui/src/develop/segmentation.rs:590`](../../ui/dr-ui/src/develop/segmentation.rs#L590), [`ui/dr-ui/src/develop/segmentation.rs:95`](../../ui/dr-ui/src/develop/segmentation.rs#L95), [`ui/dr-ui/src/develop/session.rs:23`](../../ui/dr-ui/src/develop/session.rs#L23), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/identity.rs:1`](../../ui/dr-ui/src/identity.rs#L1), [`ui/dr-ui/src/identity_ui.rs:1472`](../../ui/dr-ui/src/identity_ui.rs#L1472), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/lib.rs:2834`](../../ui/dr-ui/src/lib.rs#L2834), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/ui/identity.slint:1`](../../ui/dr-ui/ui/identity.slint#L1), [`ui/dr-ui/ui/settings.slint:460`](../../ui/dr-ui/ui/settings.slint#L460), [`ui/dr-ui/ui/settings.slint:95`](../../ui/dr-ui/ui/settings.slint#L95) |
| FR-CULL-11 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`ui/dr-ui/src/identity.rs:1`](../../ui/dr-ui/src/identity.rs#L1), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/library/filters.rs:110`](../../ui/dr-ui/src/library/filters.rs#L110), [`ui/dr-ui/src/library/filters.rs:164`](../../ui/dr-ui/src/library/filters.rs#L164), [`ui/dr-ui/ui/identity.slint:1`](../../ui/dr-ui/ui/identity.slint#L1) |
| FR-CULL-12 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:603`](../../core/dr-catalog/src/schema.rs#L603), [`ui/dr-ui/src/identity.rs:1`](../../ui/dr-ui/src/identity.rs#L1), [`ui/dr-ui/ui/identity.slint:1`](../../ui/dr-ui/ui/identity.slint#L1) |
-| FR-CULL-13 | [`core/dr-catalog/src/schema.rs:917`](../../core/dr-catalog/src/schema.rs#L917), [`core/dr-types/src/place.rs:133`](../../core/dr-types/src/place.rs#L133), [`ui/dr-ui/src/identity.rs:104`](../../ui/dr-ui/src/identity.rs#L104), [`ui/dr-ui/src/library/filters.rs:136`](../../ui/dr-ui/src/library/filters.rs#L136), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:806`](../../ui/dr-ui/src/library/filters.rs#L806), [`ui/dr-ui/src/library/filters.rs:844`](../../ui/dr-ui/src/library/filters.rs#L844), [`ui/dr-ui/ui/identity.slint:63`](../../ui/dr-ui/ui/identity.slint#L63), [`ui/dr-ui/ui/library.slint:1852`](../../ui/dr-ui/ui/library.slint#L1852), [`ui/dr-ui/ui/library.slint:719`](../../ui/dr-ui/ui/library.slint#L719) |
+| FR-CULL-13 | [`core/dr-catalog/src/schema.rs:917`](../../core/dr-catalog/src/schema.rs#L917), [`core/dr-types/src/place.rs:133`](../../core/dr-types/src/place.rs#L133), [`ui/dr-ui/src/identity.rs:104`](../../ui/dr-ui/src/identity.rs#L104), [`ui/dr-ui/src/library/filters.rs:136`](../../ui/dr-ui/src/library/filters.rs#L136), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:806`](../../ui/dr-ui/src/library/filters.rs#L806), [`ui/dr-ui/src/library/filters.rs:844`](../../ui/dr-ui/src/library/filters.rs#L844), [`ui/dr-ui/ui/identity.slint:64`](../../ui/dr-ui/ui/identity.slint#L64), [`ui/dr-ui/ui/library.slint:1872`](../../ui/dr-ui/ui/library.slint#L1872), [`ui/dr-ui/ui/library.slint:723`](../../ui/dr-ui/ui/library.slint#L723) |
| FR-CULL-2 | [`core/dr-decode/src/locate.rs:1`](../../core/dr-decode/src/locate.rs#L1), [`core/dr-decode/src/preview.rs:148`](../../core/dr-decode/src/preview.rs#L148), [`ui/dr-ui/src/decoder_seam.rs:215`](../../ui/dr-ui/src/decoder_seam.rs#L215), [`ui/dr-ui/src/import.rs:474`](../../ui/dr-ui/src/import.rs#L474) |
-| FR-CULL-3 | [`core/dr-gpu/src/focus.rs:154`](../../core/dr-gpu/src/focus.rs#L154), [`core/dr-gpu/src/focus.rs:186`](../../core/dr-gpu/src/focus.rs#L186), [`core/dr-gpu/src/focus.rs:1`](../../core/dr-gpu/src/focus.rs#L1), [`core/dr-gpu/src/focus.rs:317`](../../core/dr-gpu/src/focus.rs#L317), [`core/dr-gpu/src/raw_histogram.rs:129`](../../core/dr-gpu/src/raw_histogram.rs#L129), [`core/dr-gpu/src/raw_histogram.rs:1`](../../core/dr-gpu/src/raw_histogram.rs#L1), [`core/dr-gpu/src/raw_histogram.rs:272`](../../core/dr-gpu/src/raw_histogram.rs#L272), [`core/dr-gpu/src/raw_histogram.rs:407`](../../core/dr-gpu/src/raw_histogram.rs#L407), [`core/dr-gpu/src/shaders/focus_peak.wgsl:1`](../../core/dr-gpu/src/shaders/focus_peak.wgsl#L1), [`core/dr-gpu/src/shaders/raw_histogram.wgsl:1`](../../core/dr-gpu/src/shaders/raw_histogram.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:1404`](../../ui/dr-ui/src/develop/render.rs#L1404), [`ui/dr-ui/src/develop/render.rs:1468`](../../ui/dr-ui/src/develop/render.rs#L1468), [`ui/dr-ui/src/develop/render.rs:1491`](../../ui/dr-ui/src/develop/render.rs#L1491), [`ui/dr-ui/src/develop/render.rs:338`](../../ui/dr-ui/src/develop/render.rs#L338), [`ui/dr-ui/src/develop/render.rs:351`](../../ui/dr-ui/src/develop/render.rs#L351), [`ui/dr-ui/src/develop/render.rs:396`](../../ui/dr-ui/src/develop/render.rs#L396), [`ui/dr-ui/src/develop/render.rs:407`](../../ui/dr-ui/src/develop/render.rs#L407), [`ui/dr-ui/src/develop/render.rs:413`](../../ui/dr-ui/src/develop/render.rs#L413), [`ui/dr-ui/src/develop/render.rs:430`](../../ui/dr-ui/src/develop/render.rs#L430), [`ui/dr-ui/src/develop/session.rs:122`](../../ui/dr-ui/src/develop/session.rs#L122), [`ui/dr-ui/src/develop/session.rs:142`](../../ui/dr-ui/src/develop/session.rs#L142), [`ui/dr-ui/src/develop/session.rs:148`](../../ui/dr-ui/src/develop/session.rs#L148), [`ui/dr-ui/src/develop_ui.rs:1319`](../../ui/dr-ui/src/develop_ui.rs#L1319), [`ui/dr-ui/src/histogram.rs:1`](../../ui/dr-ui/src/histogram.rs#L1), [`ui/dr-ui/src/histogram.rs:208`](../../ui/dr-ui/src/histogram.rs#L208), [`ui/dr-ui/src/histogram.rs:228`](../../ui/dr-ui/src/histogram.rs#L228), [`ui/dr-ui/src/histogram.rs:272`](../../ui/dr-ui/src/histogram.rs#L272), [`ui/dr-ui/src/histogram.rs:544`](../../ui/dr-ui/src/histogram.rs#L544), [`ui/dr-ui/src/histogram.rs:565`](../../ui/dr-ui/src/histogram.rs#L565), [`ui/dr-ui/src/histogram.rs:593`](../../ui/dr-ui/src/histogram.rs#L593), [`ui/dr-ui/src/histogram.rs:621`](../../ui/dr-ui/src/histogram.rs#L621), [`ui/dr-ui/src/histogram.rs:658`](../../ui/dr-ui/src/histogram.rs#L658), [`ui/dr-ui/src/lib.rs:1300`](../../ui/dr-ui/src/lib.rs#L1300), [`ui/dr-ui/src/lib.rs:2248`](../../ui/dr-ui/src/lib.rs#L2248), [`ui/dr-ui/src/lib.rs:2378`](../../ui/dr-ui/src/lib.rs#L2378), [`ui/dr-ui/src/lib.rs:2421`](../../ui/dr-ui/src/lib.rs#L2421), [`ui/dr-ui/src/lib.rs:463`](../../ui/dr-ui/src/lib.rs#L463), [`ui/dr-ui/src/peaking.rs:1`](../../ui/dr-ui/src/peaking.rs#L1), [`ui/dr-ui/ui/app.slint:147`](../../ui/dr-ui/ui/app.slint#L147), [`ui/dr-ui/ui/app.slint:1750`](../../ui/dr-ui/ui/app.slint#L1750), [`ui/dr-ui/ui/app.slint:2923`](../../ui/dr-ui/ui/app.slint#L2923), [`ui/dr-ui/ui/peaking.slint:1`](../../ui/dr-ui/ui/peaking.slint#L1), [`ui/dr-ui/ui/peaking.slint:25`](../../ui/dr-ui/ui/peaking.slint#L25), [`ui/dr-ui/ui/peaking.slint:56`](../../ui/dr-ui/ui/peaking.slint#L56), [`ui/dr-ui/ui/peaking.slint:91`](../../ui/dr-ui/ui/peaking.slint#L91) |
-| FR-CULL-4 | [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-pipeline/src/sidecar.rs:174`](../../core/dr-pipeline/src/sidecar.rs#L174), [`core/dr-xmp/src/lib.rs:442`](../../core/dr-xmp/src/lib.rs#L442), [`ui/dr-ui/src/library/filters.rs:64`](../../ui/dr-ui/src/library/filters.rs#L64), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488) |
+| FR-CULL-3 | [`core/dr-gpu/src/focus.rs:154`](../../core/dr-gpu/src/focus.rs#L154), [`core/dr-gpu/src/focus.rs:186`](../../core/dr-gpu/src/focus.rs#L186), [`core/dr-gpu/src/focus.rs:1`](../../core/dr-gpu/src/focus.rs#L1), [`core/dr-gpu/src/focus.rs:317`](../../core/dr-gpu/src/focus.rs#L317), [`core/dr-gpu/src/raw_histogram.rs:129`](../../core/dr-gpu/src/raw_histogram.rs#L129), [`core/dr-gpu/src/raw_histogram.rs:1`](../../core/dr-gpu/src/raw_histogram.rs#L1), [`core/dr-gpu/src/raw_histogram.rs:272`](../../core/dr-gpu/src/raw_histogram.rs#L272), [`core/dr-gpu/src/raw_histogram.rs:407`](../../core/dr-gpu/src/raw_histogram.rs#L407), [`core/dr-gpu/src/shaders/focus_peak.wgsl:1`](../../core/dr-gpu/src/shaders/focus_peak.wgsl#L1), [`core/dr-gpu/src/shaders/raw_histogram.wgsl:1`](../../core/dr-gpu/src/shaders/raw_histogram.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:1404`](../../ui/dr-ui/src/develop/render.rs#L1404), [`ui/dr-ui/src/develop/render.rs:1468`](../../ui/dr-ui/src/develop/render.rs#L1468), [`ui/dr-ui/src/develop/render.rs:1491`](../../ui/dr-ui/src/develop/render.rs#L1491), [`ui/dr-ui/src/develop/render.rs:338`](../../ui/dr-ui/src/develop/render.rs#L338), [`ui/dr-ui/src/develop/render.rs:351`](../../ui/dr-ui/src/develop/render.rs#L351), [`ui/dr-ui/src/develop/render.rs:396`](../../ui/dr-ui/src/develop/render.rs#L396), [`ui/dr-ui/src/develop/render.rs:407`](../../ui/dr-ui/src/develop/render.rs#L407), [`ui/dr-ui/src/develop/render.rs:413`](../../ui/dr-ui/src/develop/render.rs#L413), [`ui/dr-ui/src/develop/render.rs:430`](../../ui/dr-ui/src/develop/render.rs#L430), [`ui/dr-ui/src/develop/session.rs:122`](../../ui/dr-ui/src/develop/session.rs#L122), [`ui/dr-ui/src/develop/session.rs:142`](../../ui/dr-ui/src/develop/session.rs#L142), [`ui/dr-ui/src/develop/session.rs:148`](../../ui/dr-ui/src/develop/session.rs#L148), [`ui/dr-ui/src/develop_ui.rs:1359`](../../ui/dr-ui/src/develop_ui.rs#L1359), [`ui/dr-ui/src/histogram.rs:1`](../../ui/dr-ui/src/histogram.rs#L1), [`ui/dr-ui/src/histogram.rs:208`](../../ui/dr-ui/src/histogram.rs#L208), [`ui/dr-ui/src/histogram.rs:228`](../../ui/dr-ui/src/histogram.rs#L228), [`ui/dr-ui/src/histogram.rs:272`](../../ui/dr-ui/src/histogram.rs#L272), [`ui/dr-ui/src/histogram.rs:544`](../../ui/dr-ui/src/histogram.rs#L544), [`ui/dr-ui/src/histogram.rs:565`](../../ui/dr-ui/src/histogram.rs#L565), [`ui/dr-ui/src/histogram.rs:593`](../../ui/dr-ui/src/histogram.rs#L593), [`ui/dr-ui/src/histogram.rs:621`](../../ui/dr-ui/src/histogram.rs#L621), [`ui/dr-ui/src/histogram.rs:658`](../../ui/dr-ui/src/histogram.rs#L658), [`ui/dr-ui/src/lib.rs:1301`](../../ui/dr-ui/src/lib.rs#L1301), [`ui/dr-ui/src/lib.rs:2249`](../../ui/dr-ui/src/lib.rs#L2249), [`ui/dr-ui/src/lib.rs:2379`](../../ui/dr-ui/src/lib.rs#L2379), [`ui/dr-ui/src/lib.rs:2422`](../../ui/dr-ui/src/lib.rs#L2422), [`ui/dr-ui/src/lib.rs:464`](../../ui/dr-ui/src/lib.rs#L464), [`ui/dr-ui/src/peaking.rs:1`](../../ui/dr-ui/src/peaking.rs#L1), [`ui/dr-ui/ui/app.slint:147`](../../ui/dr-ui/ui/app.slint#L147), [`ui/dr-ui/ui/app.slint:1843`](../../ui/dr-ui/ui/app.slint#L1843), [`ui/dr-ui/ui/app.slint:3179`](../../ui/dr-ui/ui/app.slint#L3179), [`ui/dr-ui/ui/peaking.slint:1`](../../ui/dr-ui/ui/peaking.slint#L1), [`ui/dr-ui/ui/peaking.slint:25`](../../ui/dr-ui/ui/peaking.slint#L25), [`ui/dr-ui/ui/peaking.slint:56`](../../ui/dr-ui/ui/peaking.slint#L56), [`ui/dr-ui/ui/peaking.slint:91`](../../ui/dr-ui/ui/peaking.slint#L91) |
+| FR-CULL-4 | [`core/dr-catalog/src/rating.rs:1`](../../core/dr-catalog/src/rating.rs#L1), [`core/dr-pipeline/src/sidecar.rs:174`](../../core/dr-pipeline/src/sidecar.rs#L174), [`core/dr-xmp/src/lib.rs:442`](../../core/dr-xmp/src/lib.rs#L442), [`ui/dr-ui/src/library/filters.rs:64`](../../ui/dr-ui/src/library/filters.rs#L64), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:989`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L989), [`ui/dr-ui/ui/app.slint:1613`](../../ui/dr-ui/ui/app.slint#L1613), [`ui/dr-ui/ui/app.slint:2680`](../../ui/dr-ui/ui/app.slint#L2680), [`ui/dr-ui/ui/develop.slint:160`](../../ui/dr-ui/ui/develop.slint#L160), [`ui/dr-ui/ui/develop.slint:55`](../../ui/dr-ui/ui/develop.slint#L55), [`ui/dr-ui/ui/library.slint:1563`](../../ui/dr-ui/ui/library.slint#L1563), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488), [`ui/dr-ui/ui/library.slint:5008`](../../ui/dr-ui/ui/library.slint#L5008), [`ui/dr-ui/ui/library.slint:635`](../../ui/dr-ui/ui/library.slint#L635) |
| FR-CULL-5 | [`core/dr-catalog/src/bursts.rs:1`](../../core/dr-catalog/src/bursts.rs#L1), [`core/dr-catalog/src/schema.rs:646`](../../core/dr-catalog/src/schema.rs#L646), [`ui/dr-ui/src/bursts.rs:1`](../../ui/dr-ui/src/bursts.rs#L1), [`ui/dr-ui/src/library/cells.rs:19`](../../ui/dr-ui/src/library/cells.rs#L19), [`ui/dr-ui/src/library/cells.rs:769`](../../ui/dr-ui/src/library/cells.rs#L769), [`ui/dr-ui/ui/library.slint:488`](../../ui/dr-ui/ui/library.slint#L488) |
-| FR-CULL-8 | [`core/dr-catalog/src/face_shard.rs:1`](../../core/dr-catalog/src/face_shard.rs#L1), [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:714`](../../core/dr-catalog/src/schema.rs#L714), [`core/dr-catalog/src/schema.rs:970`](../../core/dr-catalog/src/schema.rs#L970), [`core/dr-face/src/align.rs:296`](../../core/dr-face/src/align.rs#L296), [`core/dr-types/src/settings.rs:176`](../../core/dr-types/src/settings.rs#L176), [`ui/dr-ui/examples/face_detectors.rs:1`](../../ui/dr-ui/examples/face_detectors.rs#L1), [`ui/dr-ui/examples/face_native.rs:1`](../../ui/dr-ui/examples/face_native.rs#L1), [`ui/dr-ui/src/derived_sync.rs:127`](../../ui/dr-ui/src/derived_sync.rs#L127), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/faces.rs:446`](../../ui/dr-ui/src/faces.rs#L446), [`ui/dr-ui/src/faces.rs:462`](../../ui/dr-ui/src/faces.rs#L462), [`ui/dr-ui/src/faces.rs:584`](../../ui/dr-ui/src/faces.rs#L584), [`ui/dr-ui/src/identity_ui.rs:1434`](../../ui/dr-ui/src/identity_ui.rs#L1434), [`ui/dr-ui/src/identity_ui.rs:617`](../../ui/dr-ui/src/identity_ui.rs#L617), [`ui/dr-ui/src/lib.rs:1767`](../../ui/dr-ui/src/lib.rs#L1767), [`ui/dr-ui/src/lib.rs:3121`](../../ui/dr-ui/src/lib.rs#L3121), [`ui/dr-ui/src/library/sweep.rs:242`](../../ui/dr-ui/src/library/sweep.rs#L242), [`ui/dr-ui/src/library/sweep.rs:510`](../../ui/dr-ui/src/library/sweep.rs#L510), [`ui/dr-ui/src/library_ui/controller.rs:401`](../../ui/dr-ui/src/library_ui/controller.rs#L401), [`ui/dr-ui/src/library_ui/controller.rs:488`](../../ui/dr-ui/src/library_ui/controller.rs#L488), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/src/settings_ui.rs:210`](../../ui/dr-ui/src/settings_ui.rs#L210), [`ui/dr-ui/src/settings_ui.rs:645`](../../ui/dr-ui/src/settings_ui.rs#L645), [`ui/dr-ui/ui/app.slint:629`](../../ui/dr-ui/ui/app.slint#L629), [`ui/dr-ui/ui/settings.slint:101`](../../ui/dr-ui/ui/settings.slint#L101), [`ui/dr-ui/ui/settings.slint:398`](../../ui/dr-ui/ui/settings.slint#L398), [`ui/dr-ui/ui/settings.slint:460`](../../ui/dr-ui/ui/settings.slint#L460), [`ui/dr-ui/ui/settings.slint:83`](../../ui/dr-ui/ui/settings.slint#L83), [`ui/dr-ui/ui/settings.slint:95`](../../ui/dr-ui/ui/settings.slint#L95) |
-| FR-CULL-8a | [`core/dr-catalog/src/faces.rs:124`](../../core/dr-catalog/src/faces.rs#L124), [`core/dr-catalog/src/schema.rs:917`](../../core/dr-catalog/src/schema.rs#L917), [`core/dr-face/src/classify.rs:1`](../../core/dr-face/src/classify.rs#L1), [`core/dr-face/src/eyes.rs:1`](../../core/dr-face/src/eyes.rs#L1), [`core/dr-face/src/landmarks.rs:1`](../../core/dr-face/src/landmarks.rs#L1), [`core/dr-types/src/place.rs:133`](../../core/dr-types/src/place.rs#L133), [`ui/dr-ui/src/faces.rs:166`](../../ui/dr-ui/src/faces.rs#L166), [`ui/dr-ui/src/faces.rs:1821`](../../ui/dr-ui/src/faces.rs#L1821), [`ui/dr-ui/src/faces.rs:308`](../../ui/dr-ui/src/faces.rs#L308), [`ui/dr-ui/src/identity.rs:104`](../../ui/dr-ui/src/identity.rs#L104), [`ui/dr-ui/src/library/filters.rs:136`](../../ui/dr-ui/src/library/filters.rs#L136), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:806`](../../ui/dr-ui/src/library/filters.rs#L806), [`ui/dr-ui/src/library/filters.rs:844`](../../ui/dr-ui/src/library/filters.rs#L844), [`ui/dr-ui/src/repairs.rs:579`](../../ui/dr-ui/src/repairs.rs#L579), [`ui/dr-ui/ui/identity.slint:275`](../../ui/dr-ui/ui/identity.slint#L275), [`ui/dr-ui/ui/identity.slint:63`](../../ui/dr-ui/ui/identity.slint#L63), [`ui/dr-ui/ui/library.slint:1852`](../../ui/dr-ui/ui/library.slint#L1852), [`ui/dr-ui/ui/library.slint:719`](../../ui/dr-ui/ui/library.slint#L719) |
-| FR-CULL-9 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:781`](../../core/dr-catalog/src/schema.rs#L781), [`core/dr-face/src/assign.rs:1`](../../core/dr-face/src/assign.rs#L1), [`core/dr-face/src/neighbours.rs:1`](../../core/dr-face/src/neighbours.rs#L1), [`core/dr-types/src/settings.rs:129`](../../core/dr-types/src/settings.rs#L129), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/faces.rs:584`](../../ui/dr-ui/src/faces.rs#L584), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/repairs.rs:525`](../../ui/dr-ui/src/repairs.rs#L525), [`ui/dr-ui/ui/identity.slint:349`](../../ui/dr-ui/ui/identity.slint#L349) |
+| FR-CULL-8 | [`core/dr-catalog/src/face_shard.rs:1`](../../core/dr-catalog/src/face_shard.rs#L1), [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:714`](../../core/dr-catalog/src/schema.rs#L714), [`core/dr-catalog/src/schema.rs:970`](../../core/dr-catalog/src/schema.rs#L970), [`core/dr-face/src/align.rs:296`](../../core/dr-face/src/align.rs#L296), [`core/dr-types/src/settings.rs:176`](../../core/dr-types/src/settings.rs#L176), [`ui/dr-ui/examples/face_detectors.rs:1`](../../ui/dr-ui/examples/face_detectors.rs#L1), [`ui/dr-ui/examples/face_native.rs:1`](../../ui/dr-ui/examples/face_native.rs#L1), [`ui/dr-ui/src/derived_sync.rs:127`](../../ui/dr-ui/src/derived_sync.rs#L127), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/faces.rs:446`](../../ui/dr-ui/src/faces.rs#L446), [`ui/dr-ui/src/faces.rs:462`](../../ui/dr-ui/src/faces.rs#L462), [`ui/dr-ui/src/faces.rs:584`](../../ui/dr-ui/src/faces.rs#L584), [`ui/dr-ui/src/identity_ui.rs:1472`](../../ui/dr-ui/src/identity_ui.rs#L1472), [`ui/dr-ui/src/identity_ui.rs:617`](../../ui/dr-ui/src/identity_ui.rs#L617), [`ui/dr-ui/src/lib.rs:1768`](../../ui/dr-ui/src/lib.rs#L1768), [`ui/dr-ui/src/lib.rs:3122`](../../ui/dr-ui/src/lib.rs#L3122), [`ui/dr-ui/src/library/sweep.rs:242`](../../ui/dr-ui/src/library/sweep.rs#L242), [`ui/dr-ui/src/library/sweep.rs:510`](../../ui/dr-ui/src/library/sweep.rs#L510), [`ui/dr-ui/src/library_ui/controller.rs:401`](../../ui/dr-ui/src/library_ui/controller.rs#L401), [`ui/dr-ui/src/library_ui/controller.rs:488`](../../ui/dr-ui/src/library_ui/controller.rs#L488), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1), [`ui/dr-ui/src/settings_ui.rs:210`](../../ui/dr-ui/src/settings_ui.rs#L210), [`ui/dr-ui/src/settings_ui.rs:645`](../../ui/dr-ui/src/settings_ui.rs#L645), [`ui/dr-ui/ui/app.slint:632`](../../ui/dr-ui/ui/app.slint#L632), [`ui/dr-ui/ui/settings.slint:101`](../../ui/dr-ui/ui/settings.slint#L101), [`ui/dr-ui/ui/settings.slint:398`](../../ui/dr-ui/ui/settings.slint#L398), [`ui/dr-ui/ui/settings.slint:460`](../../ui/dr-ui/ui/settings.slint#L460), [`ui/dr-ui/ui/settings.slint:83`](../../ui/dr-ui/ui/settings.slint#L83), [`ui/dr-ui/ui/settings.slint:95`](../../ui/dr-ui/ui/settings.slint#L95) |
+| FR-CULL-8a | [`core/dr-catalog/src/faces.rs:124`](../../core/dr-catalog/src/faces.rs#L124), [`core/dr-catalog/src/schema.rs:917`](../../core/dr-catalog/src/schema.rs#L917), [`core/dr-face/src/classify.rs:1`](../../core/dr-face/src/classify.rs#L1), [`core/dr-face/src/eyes.rs:1`](../../core/dr-face/src/eyes.rs#L1), [`core/dr-face/src/landmarks.rs:1`](../../core/dr-face/src/landmarks.rs#L1), [`core/dr-types/src/place.rs:133`](../../core/dr-types/src/place.rs#L133), [`ui/dr-ui/src/faces.rs:166`](../../ui/dr-ui/src/faces.rs#L166), [`ui/dr-ui/src/faces.rs:1821`](../../ui/dr-ui/src/faces.rs#L1821), [`ui/dr-ui/src/faces.rs:308`](../../ui/dr-ui/src/faces.rs#L308), [`ui/dr-ui/src/identity.rs:104`](../../ui/dr-ui/src/identity.rs#L104), [`ui/dr-ui/src/library/filters.rs:136`](../../ui/dr-ui/src/library/filters.rs#L136), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:806`](../../ui/dr-ui/src/library/filters.rs#L806), [`ui/dr-ui/src/library/filters.rs:844`](../../ui/dr-ui/src/library/filters.rs#L844), [`ui/dr-ui/src/repairs.rs:579`](../../ui/dr-ui/src/repairs.rs#L579), [`ui/dr-ui/ui/identity.slint:276`](../../ui/dr-ui/ui/identity.slint#L276), [`ui/dr-ui/ui/identity.slint:64`](../../ui/dr-ui/ui/identity.slint#L64), [`ui/dr-ui/ui/library.slint:1872`](../../ui/dr-ui/ui/library.slint#L1872), [`ui/dr-ui/ui/library.slint:723`](../../ui/dr-ui/ui/library.slint#L723) |
+| FR-CULL-9 | [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1011`](../../core/dr-catalog/src/schema.rs#L1011), [`core/dr-catalog/src/schema.rs:781`](../../core/dr-catalog/src/schema.rs#L781), [`core/dr-face/src/assign.rs:1`](../../core/dr-face/src/assign.rs#L1), [`core/dr-face/src/neighbours.rs:1`](../../core/dr-face/src/neighbours.rs#L1), [`core/dr-types/src/settings.rs:129`](../../core/dr-types/src/settings.rs#L129), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/faces.rs:584`](../../ui/dr-ui/src/faces.rs#L584), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/repairs.rs:525`](../../ui/dr-ui/src/repairs.rs#L525), [`ui/dr-ui/ui/identity.slint:355`](../../ui/dr-ui/ui/identity.slint#L355) |
| FR-DEV-1 | [`core/dr-pipeline/src/graph.rs:1`](../../core/dr-pipeline/src/graph.rs#L1), [`core/dr-pipeline/src/sidecar.rs:1`](../../core/dr-pipeline/src/sidecar.rs#L1) |
-| FR-DEV-10 | [`core/dr-gpu/src/mask.rs:1039`](../../core/dr-gpu/src/mask.rs#L1039), [`core/dr-gpu/src/mask.rs:1263`](../../core/dr-gpu/src/mask.rs#L1263), [`core/dr-gpu/src/mask.rs:1522`](../../core/dr-gpu/src/mask.rs#L1522), [`core/dr-gpu/src/mask.rs:422`](../../core/dr-gpu/src/mask.rs#L422), [`core/dr-gpu/src/mask.rs:464`](../../core/dr-gpu/src/mask.rs#L464), [`core/dr-gpu/src/mask.rs:58`](../../core/dr-gpu/src/mask.rs#L58), [`core/dr-gpu/src/mask.rs:60`](../../core/dr-gpu/src/mask.rs#L60), [`core/dr-gpu/src/mask.rs:846`](../../core/dr-gpu/src/mask.rs#L846), [`core/dr-gpu/src/mask.rs:85`](../../core/dr-gpu/src/mask.rs#L85), [`core/dr-gpu/src/mask.rs:925`](../../core/dr-gpu/src/mask.rs#L925), [`core/dr-gpu/src/shaders/mask.wgsl:117`](../../core/dr-gpu/src/shaders/mask.wgsl#L117), [`core/dr-gpu/src/shaders/mask.wgsl:59`](../../core/dr-gpu/src/shaders/mask.wgsl#L59), [`core/dr-gpu/tests/range_masks.rs:119`](../../core/dr-gpu/tests/range_masks.rs#L119), [`core/dr-gpu/tests/range_masks.rs:147`](../../core/dr-gpu/tests/range_masks.rs#L147), [`core/dr-gpu/tests/range_masks.rs:175`](../../core/dr-gpu/tests/range_masks.rs#L175), [`core/dr-gpu/tests/range_masks.rs:1`](../../core/dr-gpu/tests/range_masks.rs#L1), [`core/dr-gpu/tests/range_masks.rs:94`](../../core/dr-gpu/tests/range_masks.rs#L94), [`core/dr-pipeline/src/mask.rs:125`](../../core/dr-pipeline/src/mask.rs#L125), [`core/dr-pipeline/src/mask.rs:2890`](../../core/dr-pipeline/src/mask.rs#L2890), [`core/dr-pipeline/src/mask.rs:2903`](../../core/dr-pipeline/src/mask.rs#L2903), [`core/dr-pipeline/src/mask.rs:2922`](../../core/dr-pipeline/src/mask.rs#L2922), [`core/dr-pipeline/src/mask.rs:2936`](../../core/dr-pipeline/src/mask.rs#L2936), [`core/dr-pipeline/src/mask.rs:2946`](../../core/dr-pipeline/src/mask.rs#L2946), [`core/dr-pipeline/src/mask.rs:710`](../../core/dr-pipeline/src/mask.rs#L710), [`core/dr-pipeline/src/mask.rs:749`](../../core/dr-pipeline/src/mask.rs#L749), [`core/dr-pipeline/src/mask.rs:809`](../../core/dr-pipeline/src/mask.rs#L809), [`core/dr-pipeline/src/mask.rs:828`](../../core/dr-pipeline/src/mask.rs#L828), [`core/dr-pipeline/src/mask.rs:852`](../../core/dr-pipeline/src/mask.rs#L852), [`core/dr-pipeline/src/mask.rs:864`](../../core/dr-pipeline/src/mask.rs#L864), [`core/dr-pipeline/src/mask.rs:876`](../../core/dr-pipeline/src/mask.rs#L876), [`core/dr-pipeline/src/sidecar.rs:1369`](../../core/dr-pipeline/src/sidecar.rs#L1369), [`core/dr-pipeline/src/sidecar.rs:1548`](../../core/dr-pipeline/src/sidecar.rs#L1548), [`core/dr-pipeline/src/sidecar.rs:1637`](../../core/dr-pipeline/src/sidecar.rs#L1637), [`core/dr-pipeline/src/sidecar.rs:1741`](../../core/dr-pipeline/src/sidecar.rs#L1741), [`core/dr-pipeline/src/sidecar.rs:1949`](../../core/dr-pipeline/src/sidecar.rs#L1949), [`core/dr-pipeline/tests/mask_sidecar.rs:1157`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1157), [`core/dr-pipeline/tests/mask_sidecar.rs:1186`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1186), [`core/dr-pipeline/tests/mask_sidecar.rs:1204`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1204), [`core/dr-pipeline/tests/mask_sidecar.rs:1234`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1234), [`ui/dr-ui/src/develop/mask_ops.rs:341`](../../ui/dr-ui/src/develop/mask_ops.rs#L341), [`ui/dr-ui/src/develop/mask_ops.rs:638`](../../ui/dr-ui/src/develop/mask_ops.rs#L638), [`ui/dr-ui/src/develop/mask_ops.rs:665`](../../ui/dr-ui/src/develop/mask_ops.rs#L665), [`ui/dr-ui/src/develop/mask_ops.rs:697`](../../ui/dr-ui/src/develop/mask_ops.rs#L697), [`ui/dr-ui/src/develop/mask_ops.rs:721`](../../ui/dr-ui/src/develop/mask_ops.rs#L721), [`ui/dr-ui/src/develop/mask_ops.rs:727`](../../ui/dr-ui/src/develop/mask_ops.rs#L727), [`ui/dr-ui/src/develop/mask_ops.rs:734`](../../ui/dr-ui/src/develop/mask_ops.rs#L734), [`ui/dr-ui/src/develop/mask_ops.rs:754`](../../ui/dr-ui/src/develop/mask_ops.rs#L754), [`ui/dr-ui/src/labels.rs:63`](../../ui/dr-ui/src/labels.rs#L63), [`ui/dr-ui/src/masks_ui.rs:1216`](../../ui/dr-ui/src/masks_ui.rs#L1216), [`ui/dr-ui/src/masks_ui.rs:797`](../../ui/dr-ui/src/masks_ui.rs#L797) |
+| FR-DEV-10 | [`core/dr-gpu/src/mask.rs:1039`](../../core/dr-gpu/src/mask.rs#L1039), [`core/dr-gpu/src/mask.rs:1263`](../../core/dr-gpu/src/mask.rs#L1263), [`core/dr-gpu/src/mask.rs:1522`](../../core/dr-gpu/src/mask.rs#L1522), [`core/dr-gpu/src/mask.rs:422`](../../core/dr-gpu/src/mask.rs#L422), [`core/dr-gpu/src/mask.rs:464`](../../core/dr-gpu/src/mask.rs#L464), [`core/dr-gpu/src/mask.rs:58`](../../core/dr-gpu/src/mask.rs#L58), [`core/dr-gpu/src/mask.rs:60`](../../core/dr-gpu/src/mask.rs#L60), [`core/dr-gpu/src/mask.rs:846`](../../core/dr-gpu/src/mask.rs#L846), [`core/dr-gpu/src/mask.rs:85`](../../core/dr-gpu/src/mask.rs#L85), [`core/dr-gpu/src/mask.rs:925`](../../core/dr-gpu/src/mask.rs#L925), [`core/dr-gpu/src/shaders/mask.wgsl:117`](../../core/dr-gpu/src/shaders/mask.wgsl#L117), [`core/dr-gpu/src/shaders/mask.wgsl:59`](../../core/dr-gpu/src/shaders/mask.wgsl#L59), [`core/dr-gpu/tests/range_masks.rs:119`](../../core/dr-gpu/tests/range_masks.rs#L119), [`core/dr-gpu/tests/range_masks.rs:147`](../../core/dr-gpu/tests/range_masks.rs#L147), [`core/dr-gpu/tests/range_masks.rs:175`](../../core/dr-gpu/tests/range_masks.rs#L175), [`core/dr-gpu/tests/range_masks.rs:1`](../../core/dr-gpu/tests/range_masks.rs#L1), [`core/dr-gpu/tests/range_masks.rs:94`](../../core/dr-gpu/tests/range_masks.rs#L94), [`core/dr-pipeline/src/mask.rs:125`](../../core/dr-pipeline/src/mask.rs#L125), [`core/dr-pipeline/src/mask.rs:2890`](../../core/dr-pipeline/src/mask.rs#L2890), [`core/dr-pipeline/src/mask.rs:2903`](../../core/dr-pipeline/src/mask.rs#L2903), [`core/dr-pipeline/src/mask.rs:2922`](../../core/dr-pipeline/src/mask.rs#L2922), [`core/dr-pipeline/src/mask.rs:2936`](../../core/dr-pipeline/src/mask.rs#L2936), [`core/dr-pipeline/src/mask.rs:2946`](../../core/dr-pipeline/src/mask.rs#L2946), [`core/dr-pipeline/src/mask.rs:710`](../../core/dr-pipeline/src/mask.rs#L710), [`core/dr-pipeline/src/mask.rs:749`](../../core/dr-pipeline/src/mask.rs#L749), [`core/dr-pipeline/src/mask.rs:809`](../../core/dr-pipeline/src/mask.rs#L809), [`core/dr-pipeline/src/mask.rs:828`](../../core/dr-pipeline/src/mask.rs#L828), [`core/dr-pipeline/src/mask.rs:852`](../../core/dr-pipeline/src/mask.rs#L852), [`core/dr-pipeline/src/mask.rs:864`](../../core/dr-pipeline/src/mask.rs#L864), [`core/dr-pipeline/src/mask.rs:876`](../../core/dr-pipeline/src/mask.rs#L876), [`core/dr-pipeline/src/sidecar.rs:1369`](../../core/dr-pipeline/src/sidecar.rs#L1369), [`core/dr-pipeline/src/sidecar.rs:1548`](../../core/dr-pipeline/src/sidecar.rs#L1548), [`core/dr-pipeline/src/sidecar.rs:1637`](../../core/dr-pipeline/src/sidecar.rs#L1637), [`core/dr-pipeline/src/sidecar.rs:1741`](../../core/dr-pipeline/src/sidecar.rs#L1741), [`core/dr-pipeline/src/sidecar.rs:1949`](../../core/dr-pipeline/src/sidecar.rs#L1949), [`core/dr-pipeline/tests/mask_sidecar.rs:1157`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1157), [`core/dr-pipeline/tests/mask_sidecar.rs:1186`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1186), [`core/dr-pipeline/tests/mask_sidecar.rs:1204`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1204), [`core/dr-pipeline/tests/mask_sidecar.rs:1234`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1234), [`ui/dr-ui/src/develop/mask_ops.rs:341`](../../ui/dr-ui/src/develop/mask_ops.rs#L341), [`ui/dr-ui/src/develop/mask_ops.rs:638`](../../ui/dr-ui/src/develop/mask_ops.rs#L638), [`ui/dr-ui/src/develop/mask_ops.rs:665`](../../ui/dr-ui/src/develop/mask_ops.rs#L665), [`ui/dr-ui/src/develop/mask_ops.rs:697`](../../ui/dr-ui/src/develop/mask_ops.rs#L697), [`ui/dr-ui/src/develop/mask_ops.rs:721`](../../ui/dr-ui/src/develop/mask_ops.rs#L721), [`ui/dr-ui/src/develop/mask_ops.rs:727`](../../ui/dr-ui/src/develop/mask_ops.rs#L727), [`ui/dr-ui/src/develop/mask_ops.rs:734`](../../ui/dr-ui/src/develop/mask_ops.rs#L734), [`ui/dr-ui/src/develop/mask_ops.rs:754`](../../ui/dr-ui/src/develop/mask_ops.rs#L754), [`ui/dr-ui/src/labels.rs:63`](../../ui/dr-ui/src/labels.rs#L63), [`ui/dr-ui/src/masks_ui.rs:1257`](../../ui/dr-ui/src/masks_ui.rs#L1257), [`ui/dr-ui/src/masks_ui.rs:797`](../../ui/dr-ui/src/masks_ui.rs#L797) |
| FR-DEV-12 | [`core/dr-pipeline/ops/colour_grading.yaml:1`](../../core/dr-pipeline/ops/colour_grading.yaml#L1) |
-| FR-DEV-16 | [`tools/traceability/src/chord.rs:1`](../../tools/traceability/src/chord.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/lib.rs:445`](../../ui/dr-ui/src/lib.rs#L445), [`ui/dr-ui/src/masks_ui.rs:713`](../../ui/dr-ui/src/masks_ui.rs#L713), [`ui/dr-ui/ui/adjust.slint:1006`](../../ui/dr-ui/ui/adjust.slint#L1006), [`ui/dr-ui/ui/app.slint:2419`](../../ui/dr-ui/ui/app.slint#L2419), [`ui/dr-ui/ui/app.slint:2431`](../../ui/dr-ui/ui/app.slint#L2431), [`ui/dr-ui/ui/keys.slint:1`](../../ui/dr-ui/ui/keys.slint#L1), [`ui/dr-ui/ui/masks.slint:856`](../../ui/dr-ui/ui/masks.slint#L856) |
-| FR-DEV-17 | [`core/dr-pipeline/src/orphan.rs:142`](../../core/dr-pipeline/src/orphan.rs#L142), [`core/dr-pipeline/src/orphan.rs:1`](../../core/dr-pipeline/src/orphan.rs#L1), [`ui/dr-ui/src/develop/framing.rs:1201`](../../ui/dr-ui/src/develop/framing.rs#L1201), [`ui/dr-ui/src/develop/framing.rs:133`](../../ui/dr-ui/src/develop/framing.rs#L133), [`ui/dr-ui/src/develop/framing.rs:169`](../../ui/dr-ui/src/develop/framing.rs#L169), [`ui/dr-ui/src/develop/framing.rs:235`](../../ui/dr-ui/src/develop/framing.rs#L235), [`ui/dr-ui/src/develop/framing.rs:243`](../../ui/dr-ui/src/develop/framing.rs#L243), [`ui/dr-ui/src/develop/session.rs:110`](../../ui/dr-ui/src/develop/session.rs#L110), [`ui/dr-ui/src/develop_ui.rs:1061`](../../ui/dr-ui/src/develop_ui.rs#L1061), [`ui/dr-ui/src/develop_ui.rs:972`](../../ui/dr-ui/src/develop_ui.rs#L972), [`ui/dr-ui/src/develop_ui.rs:998`](../../ui/dr-ui/src/develop_ui.rs#L998), [`ui/dr-ui/src/lib.rs:2213`](../../ui/dr-ui/src/lib.rs#L2213), [`ui/dr-ui/src/lib.rs:619`](../../ui/dr-ui/src/lib.rs#L619), [`ui/dr-ui/ui/adjust.slint:698`](../../ui/dr-ui/ui/adjust.slint#L698), [`ui/dr-ui/ui/adjust.slint:702`](../../ui/dr-ui/ui/adjust.slint#L702), [`ui/dr-ui/ui/app.slint:2659`](../../ui/dr-ui/ui/app.slint#L2659), [`ui/dr-ui/ui/crop.slint:51`](../../ui/dr-ui/ui/crop.slint#L51) |
+| FR-DEV-16 | [`tools/traceability/src/chord.rs:1`](../../tools/traceability/src/chord.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/develop_ui.rs:415`](../../ui/dr-ui/src/develop_ui.rs#L415), [`ui/dr-ui/src/lib.rs:445`](../../ui/dr-ui/src/lib.rs#L445), [`ui/dr-ui/src/masks_ui.rs:1140`](../../ui/dr-ui/src/masks_ui.rs#L1140), [`ui/dr-ui/src/masks_ui.rs:713`](../../ui/dr-ui/src/masks_ui.rs#L713), [`ui/dr-ui/ui/adjust.slint:1023`](../../ui/dr-ui/ui/adjust.slint#L1023), [`ui/dr-ui/ui/adjust.slint:1028`](../../ui/dr-ui/ui/adjust.slint#L1028), [`ui/dr-ui/ui/adjust.slint:650`](../../ui/dr-ui/ui/adjust.slint#L650), [`ui/dr-ui/ui/app.slint:2452`](../../ui/dr-ui/ui/app.slint#L2452), [`ui/dr-ui/ui/app.slint:2482`](../../ui/dr-ui/ui/app.slint#L2482), [`ui/dr-ui/ui/app.slint:2502`](../../ui/dr-ui/ui/app.slint#L2502), [`ui/dr-ui/ui/app.slint:2520`](../../ui/dr-ui/ui/app.slint#L2520), [`ui/dr-ui/ui/app.slint:2528`](../../ui/dr-ui/ui/app.slint#L2528), [`ui/dr-ui/ui/app.slint:2552`](../../ui/dr-ui/ui/app.slint#L2552), [`ui/dr-ui/ui/app.slint:2635`](../../ui/dr-ui/ui/app.slint#L2635), [`ui/dr-ui/ui/app.slint:2651`](../../ui/dr-ui/ui/app.slint#L2651), [`ui/dr-ui/ui/app.slint:2680`](../../ui/dr-ui/ui/app.slint#L2680), [`ui/dr-ui/ui/app.slint:676`](../../ui/dr-ui/ui/app.slint#L676), [`ui/dr-ui/ui/app.slint:699`](../../ui/dr-ui/ui/app.slint#L699), [`ui/dr-ui/ui/keys.slint:1`](../../ui/dr-ui/ui/keys.slint#L1), [`ui/dr-ui/ui/masks.slint:858`](../../ui/dr-ui/ui/masks.slint#L858), [`ui/dr-ui/ui/masks.slint:884`](../../ui/dr-ui/ui/masks.slint#L884) |
+| FR-DEV-17 | [`core/dr-pipeline/src/orphan.rs:142`](../../core/dr-pipeline/src/orphan.rs#L142), [`core/dr-pipeline/src/orphan.rs:1`](../../core/dr-pipeline/src/orphan.rs#L1), [`ui/dr-ui/src/develop/framing.rs:1201`](../../ui/dr-ui/src/develop/framing.rs#L1201), [`ui/dr-ui/src/develop/framing.rs:133`](../../ui/dr-ui/src/develop/framing.rs#L133), [`ui/dr-ui/src/develop/framing.rs:169`](../../ui/dr-ui/src/develop/framing.rs#L169), [`ui/dr-ui/src/develop/framing.rs:235`](../../ui/dr-ui/src/develop/framing.rs#L235), [`ui/dr-ui/src/develop/framing.rs:243`](../../ui/dr-ui/src/develop/framing.rs#L243), [`ui/dr-ui/src/develop/session.rs:110`](../../ui/dr-ui/src/develop/session.rs#L110), [`ui/dr-ui/src/develop_ui.rs:1012`](../../ui/dr-ui/src/develop_ui.rs#L1012), [`ui/dr-ui/src/develop_ui.rs:1038`](../../ui/dr-ui/src/develop_ui.rs#L1038), [`ui/dr-ui/src/develop_ui.rs:1101`](../../ui/dr-ui/src/develop_ui.rs#L1101), [`ui/dr-ui/src/lib.rs:2214`](../../ui/dr-ui/src/lib.rs#L2214), [`ui/dr-ui/src/lib.rs:620`](../../ui/dr-ui/src/lib.rs#L620), [`ui/dr-ui/ui/adjust.slint:703`](../../ui/dr-ui/ui/adjust.slint#L703), [`ui/dr-ui/ui/adjust.slint:707`](../../ui/dr-ui/ui/adjust.slint#L707), [`ui/dr-ui/ui/app.slint:2502`](../../ui/dr-ui/ui/app.slint#L2502), [`ui/dr-ui/ui/app.slint:2915`](../../ui/dr-ui/ui/app.slint#L2915), [`ui/dr-ui/ui/crop.slint:51`](../../ui/dr-ui/ui/crop.slint#L51) |
| FR-DEV-18 | [`core/dr-pipeline/src/ops/dehaze.rs:1`](../../core/dr-pipeline/src/ops/dehaze.rs#L1), [`core/dr-pipeline/src/ops/dehaze.rs:221`](../../core/dr-pipeline/src/ops/dehaze.rs#L221) |
| FR-DEV-19 | [`core/dr-pipeline/src/mask.rs:1341`](../../core/dr-pipeline/src/mask.rs#L1341) |
-| FR-DEV-19a | [`core/dr-gpu/src/mask.rs:655`](../../core/dr-gpu/src/mask.rs#L655), [`core/dr-gpu/src/mask.rs:773`](../../core/dr-gpu/src/mask.rs#L773), [`core/dr-gpu/tests/local_adjustments.rs:793`](../../core/dr-gpu/tests/local_adjustments.rs#L793), [`core/dr-gpu/tests/local_adjustments.rs:841`](../../core/dr-gpu/tests/local_adjustments.rs#L841), [`core/dr-pipeline/src/mask.rs:1022`](../../core/dr-pipeline/src/mask.rs#L1022), [`core/dr-pipeline/src/mask.rs:1633`](../../core/dr-pipeline/src/mask.rs#L1633), [`core/dr-pipeline/src/mask.rs:2964`](../../core/dr-pipeline/src/mask.rs#L2964), [`core/dr-pipeline/src/mask.rs:3085`](../../core/dr-pipeline/src/mask.rs#L3085), [`core/dr-pipeline/src/mask.rs:3120`](../../core/dr-pipeline/src/mask.rs#L3120), [`core/dr-pipeline/src/mask.rs:929`](../../core/dr-pipeline/src/mask.rs#L929), [`core/dr-pipeline/src/mask.rs:964`](../../core/dr-pipeline/src/mask.rs#L964), [`core/dr-pipeline/src/sidecar.rs:1259`](../../core/dr-pipeline/src/sidecar.rs#L1259), [`core/dr-pipeline/tests/mask_sidecar.rs:1347`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1347), [`core/dr-pipeline/tests/mask_sidecar.rs:1369`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1369), [`core/dr-pipeline/tests/mask_sidecar.rs:1395`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1395), [`ui/dr-ui/src/develop/masks.rs:432`](../../ui/dr-ui/src/develop/masks.rs#L432), [`ui/dr-ui/src/develop/masks.rs:493`](../../ui/dr-ui/src/develop/masks.rs#L493), [`ui/dr-ui/src/develop/masks.rs:512`](../../ui/dr-ui/src/develop/masks.rs#L512), [`ui/dr-ui/src/develop/masks.rs:547`](../../ui/dr-ui/src/develop/masks.rs#L547), [`ui/dr-ui/src/develop/session.rs:192`](../../ui/dr-ui/src/develop/session.rs#L192), [`ui/dr-ui/src/labels.rs:73`](../../ui/dr-ui/src/labels.rs#L73), [`ui/dr-ui/src/masks_ui.rs:1083`](../../ui/dr-ui/src/masks_ui.rs#L1083), [`ui/dr-ui/src/masks_ui.rs:1155`](../../ui/dr-ui/src/masks_ui.rs#L1155), [`ui/dr-ui/src/masks_ui.rs:1514`](../../ui/dr-ui/src/masks_ui.rs#L1514), [`ui/dr-ui/src/masks_ui.rs:1537`](../../ui/dr-ui/src/masks_ui.rs#L1537), [`ui/dr-ui/src/masks_ui.rs:270`](../../ui/dr-ui/src/masks_ui.rs#L270), [`ui/dr-ui/ui/masks.slint:151`](../../ui/dr-ui/ui/masks.slint#L151), [`ui/dr-ui/ui/masks.slint:176`](../../ui/dr-ui/ui/masks.slint#L176), [`ui/dr-ui/ui/masks.slint:339`](../../ui/dr-ui/ui/masks.slint#L339), [`ui/dr-ui/ui/masks.slint:377`](../../ui/dr-ui/ui/masks.slint#L377), [`ui/dr-ui/ui/masks.slint:420`](../../ui/dr-ui/ui/masks.slint#L420), [`ui/dr-ui/ui/masks.slint:466`](../../ui/dr-ui/ui/masks.slint#L466), [`ui/dr-ui/ui/masks.slint:794`](../../ui/dr-ui/ui/masks.slint#L794), [`ui/dr-ui/ui/masks.slint:879`](../../ui/dr-ui/ui/masks.slint#L879) |
-| FR-DEV-19b | [`ui/dr-ui/src/develop/mask_ops.rs:606`](../../ui/dr-ui/src/develop/mask_ops.rs#L606), [`ui/dr-ui/src/develop/masks.rs:595`](../../ui/dr-ui/src/develop/masks.rs#L595), [`ui/dr-ui/src/develop/session.rs:201`](../../ui/dr-ui/src/develop/session.rs#L201), [`ui/dr-ui/src/develop/session.rs:208`](../../ui/dr-ui/src/develop/session.rs#L208), [`ui/dr-ui/src/labels.rs:67`](../../ui/dr-ui/src/labels.rs#L67), [`ui/dr-ui/src/masks_ui.rs:1188`](../../ui/dr-ui/src/masks_ui.rs#L1188), [`ui/dr-ui/src/masks_ui.rs:1407`](../../ui/dr-ui/src/masks_ui.rs#L1407), [`ui/dr-ui/src/masks_ui.rs:1435`](../../ui/dr-ui/src/masks_ui.rs#L1435), [`ui/dr-ui/src/masks_ui.rs:1808`](../../ui/dr-ui/src/masks_ui.rs#L1808), [`ui/dr-ui/src/masks_ui.rs:908`](../../ui/dr-ui/src/masks_ui.rs#L908), [`ui/dr-ui/ui/app.slint:1987`](../../ui/dr-ui/ui/app.slint#L1987), [`ui/dr-ui/ui/app.slint:751`](../../ui/dr-ui/ui/app.slint#L751), [`ui/dr-ui/ui/masks.slint:1150`](../../ui/dr-ui/ui/masks.slint#L1150), [`ui/dr-ui/ui/masks.slint:477`](../../ui/dr-ui/ui/masks.slint#L477), [`ui/dr-ui/ui/masks.slint:798`](../../ui/dr-ui/ui/masks.slint#L798), [`ui/dr-ui/ui/masks.slint:872`](../../ui/dr-ui/ui/masks.slint#L872), [`ui/dr-ui/ui/masks.slint:888`](../../ui/dr-ui/ui/masks.slint#L888) |
-| FR-DEV-19c | [`core/dr-gpu/src/mask.rs:727`](../../core/dr-gpu/src/mask.rs#L727), [`core/dr-gpu/tests/local_adjustments.rs:1000`](../../core/dr-gpu/tests/local_adjustments.rs#L1000), [`core/dr-gpu/tests/local_adjustments.rs:1035`](../../core/dr-gpu/tests/local_adjustments.rs#L1035), [`core/dr-gpu/tests/local_adjustments.rs:1080`](../../core/dr-gpu/tests/local_adjustments.rs#L1080), [`core/dr-gpu/tests/local_adjustments.rs:943`](../../core/dr-gpu/tests/local_adjustments.rs#L943), [`core/dr-pipeline/src/graph.rs:893`](../../core/dr-pipeline/src/graph.rs#L893), [`core/dr-pipeline/src/mask.rs:1841`](../../core/dr-pipeline/src/mask.rs#L1841), [`core/dr-pipeline/src/mask.rs:1867`](../../core/dr-pipeline/src/mask.rs#L1867), [`core/dr-pipeline/src/mask.rs:1882`](../../core/dr-pipeline/src/mask.rs#L1882), [`core/dr-pipeline/src/mask.rs:2002`](../../core/dr-pipeline/src/mask.rs#L2002), [`core/dr-pipeline/src/mask.rs:2050`](../../core/dr-pipeline/src/mask.rs#L2050), [`core/dr-pipeline/src/mask.rs:2194`](../../core/dr-pipeline/src/mask.rs#L2194), [`core/dr-pipeline/src/mask.rs:2431`](../../core/dr-pipeline/src/mask.rs#L2431), [`core/dr-pipeline/src/operation.rs:1752`](../../core/dr-pipeline/src/operation.rs#L1752), [`core/dr-pipeline/src/operation.rs:588`](../../core/dr-pipeline/src/operation.rs#L588), [`core/dr-pipeline/src/operation.rs:867`](../../core/dr-pipeline/src/operation.rs#L867), [`ui/dr-ui/src/develop/mask_ops.rs:1199`](../../ui/dr-ui/src/develop/mask_ops.rs#L1199), [`ui/dr-ui/src/develop/mask_ops.rs:1235`](../../ui/dr-ui/src/develop/mask_ops.rs#L1235), [`ui/dr-ui/src/develop/mask_ops.rs:318`](../../ui/dr-ui/src/develop/mask_ops.rs#L318), [`ui/dr-ui/src/develop/mask_ops.rs:58`](../../ui/dr-ui/src/develop/mask_ops.rs#L58), [`ui/dr-ui/src/develop/masks.rs:12`](../../ui/dr-ui/src/develop/masks.rs#L12), [`ui/dr-ui/src/develop/masks.rs:176`](../../ui/dr-ui/src/develop/masks.rs#L176), [`ui/dr-ui/src/develop/masks.rs:21`](../../ui/dr-ui/src/develop/masks.rs#L21), [`ui/dr-ui/src/develop/masks.rs:43`](../../ui/dr-ui/src/develop/masks.rs#L43), [`ui/dr-ui/src/develop/render.rs:260`](../../ui/dr-ui/src/develop/render.rs#L260), [`ui/dr-ui/src/develop/session.rs:227`](../../ui/dr-ui/src/develop/session.rs#L227), [`ui/dr-ui/src/develop/session.rs:236`](../../ui/dr-ui/src/develop/session.rs#L236), [`ui/dr-ui/src/masks_ui.rs:1024`](../../ui/dr-ui/src/masks_ui.rs#L1024), [`ui/dr-ui/src/masks_ui.rs:1407`](../../ui/dr-ui/src/masks_ui.rs#L1407), [`ui/dr-ui/src/masks_ui.rs:152`](../../ui/dr-ui/src/masks_ui.rs#L152), [`ui/dr-ui/src/masks_ui.rs:1808`](../../ui/dr-ui/src/masks_ui.rs#L1808), [`ui/dr-ui/src/masks_ui.rs:291`](../../ui/dr-ui/src/masks_ui.rs#L291), [`ui/dr-ui/src/masks_ui.rs:317`](../../ui/dr-ui/src/masks_ui.rs#L317), [`ui/dr-ui/src/masks_ui.rs:677`](../../ui/dr-ui/src/masks_ui.rs#L677), [`ui/dr-ui/src/masks_ui.rs:996`](../../ui/dr-ui/src/masks_ui.rs#L996), [`ui/dr-ui/ui/icons.slint:339`](../../ui/dr-ui/ui/icons.slint#L339), [`ui/dr-ui/ui/masks.slint:1115`](../../ui/dr-ui/ui/masks.slint#L1115), [`ui/dr-ui/ui/masks.slint:184`](../../ui/dr-ui/ui/masks.slint#L184), [`ui/dr-ui/ui/masks.slint:294`](../../ui/dr-ui/ui/masks.slint#L294), [`ui/dr-ui/ui/masks.slint:541`](../../ui/dr-ui/ui/masks.slint#L541), [`ui/dr-ui/ui/masks.slint:70`](../../ui/dr-ui/ui/masks.slint#L70), [`ui/dr-ui/ui/masks.slint:806`](../../ui/dr-ui/ui/masks.slint#L806), [`ui/dr-ui/ui/masks.slint:874`](../../ui/dr-ui/ui/masks.slint#L874), [`ui/dr-ui/ui/masks.slint:962`](../../ui/dr-ui/ui/masks.slint#L962) |
+| FR-DEV-19a | [`core/dr-gpu/src/mask.rs:655`](../../core/dr-gpu/src/mask.rs#L655), [`core/dr-gpu/src/mask.rs:773`](../../core/dr-gpu/src/mask.rs#L773), [`core/dr-gpu/tests/local_adjustments.rs:793`](../../core/dr-gpu/tests/local_adjustments.rs#L793), [`core/dr-gpu/tests/local_adjustments.rs:841`](../../core/dr-gpu/tests/local_adjustments.rs#L841), [`core/dr-pipeline/src/mask.rs:1022`](../../core/dr-pipeline/src/mask.rs#L1022), [`core/dr-pipeline/src/mask.rs:1633`](../../core/dr-pipeline/src/mask.rs#L1633), [`core/dr-pipeline/src/mask.rs:2964`](../../core/dr-pipeline/src/mask.rs#L2964), [`core/dr-pipeline/src/mask.rs:3085`](../../core/dr-pipeline/src/mask.rs#L3085), [`core/dr-pipeline/src/mask.rs:3120`](../../core/dr-pipeline/src/mask.rs#L3120), [`core/dr-pipeline/src/mask.rs:929`](../../core/dr-pipeline/src/mask.rs#L929), [`core/dr-pipeline/src/mask.rs:964`](../../core/dr-pipeline/src/mask.rs#L964), [`core/dr-pipeline/src/sidecar.rs:1259`](../../core/dr-pipeline/src/sidecar.rs#L1259), [`core/dr-pipeline/tests/mask_sidecar.rs:1347`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1347), [`core/dr-pipeline/tests/mask_sidecar.rs:1369`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1369), [`core/dr-pipeline/tests/mask_sidecar.rs:1395`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1395), [`ui/dr-ui/src/develop/masks.rs:432`](../../ui/dr-ui/src/develop/masks.rs#L432), [`ui/dr-ui/src/develop/masks.rs:493`](../../ui/dr-ui/src/develop/masks.rs#L493), [`ui/dr-ui/src/develop/masks.rs:512`](../../ui/dr-ui/src/develop/masks.rs#L512), [`ui/dr-ui/src/develop/masks.rs:547`](../../ui/dr-ui/src/develop/masks.rs#L547), [`ui/dr-ui/src/develop/session.rs:192`](../../ui/dr-ui/src/develop/session.rs#L192), [`ui/dr-ui/src/labels.rs:73`](../../ui/dr-ui/src/labels.rs#L73), [`ui/dr-ui/src/masks_ui.rs:1083`](../../ui/dr-ui/src/masks_ui.rs#L1083), [`ui/dr-ui/src/masks_ui.rs:1140`](../../ui/dr-ui/src/masks_ui.rs#L1140), [`ui/dr-ui/src/masks_ui.rs:1196`](../../ui/dr-ui/src/masks_ui.rs#L1196), [`ui/dr-ui/src/masks_ui.rs:1555`](../../ui/dr-ui/src/masks_ui.rs#L1555), [`ui/dr-ui/src/masks_ui.rs:1578`](../../ui/dr-ui/src/masks_ui.rs#L1578), [`ui/dr-ui/src/masks_ui.rs:270`](../../ui/dr-ui/src/masks_ui.rs#L270), [`ui/dr-ui/ui/app.slint:2528`](../../ui/dr-ui/ui/app.slint#L2528), [`ui/dr-ui/ui/masks.slint:151`](../../ui/dr-ui/ui/masks.slint#L151), [`ui/dr-ui/ui/masks.slint:176`](../../ui/dr-ui/ui/masks.slint#L176), [`ui/dr-ui/ui/masks.slint:339`](../../ui/dr-ui/ui/masks.slint#L339), [`ui/dr-ui/ui/masks.slint:379`](../../ui/dr-ui/ui/masks.slint#L379), [`ui/dr-ui/ui/masks.slint:422`](../../ui/dr-ui/ui/masks.slint#L422), [`ui/dr-ui/ui/masks.slint:468`](../../ui/dr-ui/ui/masks.slint#L468), [`ui/dr-ui/ui/masks.slint:796`](../../ui/dr-ui/ui/masks.slint#L796), [`ui/dr-ui/ui/masks.slint:881`](../../ui/dr-ui/ui/masks.slint#L881) |
+| FR-DEV-19b | [`ui/dr-ui/src/develop/mask_ops.rs:606`](../../ui/dr-ui/src/develop/mask_ops.rs#L606), [`ui/dr-ui/src/develop/masks.rs:595`](../../ui/dr-ui/src/develop/masks.rs#L595), [`ui/dr-ui/src/develop/session.rs:201`](../../ui/dr-ui/src/develop/session.rs#L201), [`ui/dr-ui/src/develop/session.rs:208`](../../ui/dr-ui/src/develop/session.rs#L208), [`ui/dr-ui/src/labels.rs:67`](../../ui/dr-ui/src/labels.rs#L67), [`ui/dr-ui/src/masks_ui.rs:1229`](../../ui/dr-ui/src/masks_ui.rs#L1229), [`ui/dr-ui/src/masks_ui.rs:1448`](../../ui/dr-ui/src/masks_ui.rs#L1448), [`ui/dr-ui/src/masks_ui.rs:1476`](../../ui/dr-ui/src/masks_ui.rs#L1476), [`ui/dr-ui/src/masks_ui.rs:1849`](../../ui/dr-ui/src/masks_ui.rs#L1849), [`ui/dr-ui/src/masks_ui.rs:908`](../../ui/dr-ui/src/masks_ui.rs#L908), [`ui/dr-ui/ui/app.slint:2085`](../../ui/dr-ui/ui/app.slint#L2085), [`ui/dr-ui/ui/app.slint:810`](../../ui/dr-ui/ui/app.slint#L810), [`ui/dr-ui/ui/masks.slint:1156`](../../ui/dr-ui/ui/masks.slint#L1156), [`ui/dr-ui/ui/masks.slint:479`](../../ui/dr-ui/ui/masks.slint#L479), [`ui/dr-ui/ui/masks.slint:800`](../../ui/dr-ui/ui/masks.slint#L800), [`ui/dr-ui/ui/masks.slint:874`](../../ui/dr-ui/ui/masks.slint#L874), [`ui/dr-ui/ui/masks.slint:894`](../../ui/dr-ui/ui/masks.slint#L894) |
+| FR-DEV-19c | [`core/dr-gpu/src/mask.rs:727`](../../core/dr-gpu/src/mask.rs#L727), [`core/dr-gpu/tests/local_adjustments.rs:1000`](../../core/dr-gpu/tests/local_adjustments.rs#L1000), [`core/dr-gpu/tests/local_adjustments.rs:1035`](../../core/dr-gpu/tests/local_adjustments.rs#L1035), [`core/dr-gpu/tests/local_adjustments.rs:1080`](../../core/dr-gpu/tests/local_adjustments.rs#L1080), [`core/dr-gpu/tests/local_adjustments.rs:943`](../../core/dr-gpu/tests/local_adjustments.rs#L943), [`core/dr-pipeline/src/graph.rs:893`](../../core/dr-pipeline/src/graph.rs#L893), [`core/dr-pipeline/src/mask.rs:1841`](../../core/dr-pipeline/src/mask.rs#L1841), [`core/dr-pipeline/src/mask.rs:1867`](../../core/dr-pipeline/src/mask.rs#L1867), [`core/dr-pipeline/src/mask.rs:1882`](../../core/dr-pipeline/src/mask.rs#L1882), [`core/dr-pipeline/src/mask.rs:2002`](../../core/dr-pipeline/src/mask.rs#L2002), [`core/dr-pipeline/src/mask.rs:2050`](../../core/dr-pipeline/src/mask.rs#L2050), [`core/dr-pipeline/src/mask.rs:2194`](../../core/dr-pipeline/src/mask.rs#L2194), [`core/dr-pipeline/src/mask.rs:2431`](../../core/dr-pipeline/src/mask.rs#L2431), [`core/dr-pipeline/src/operation.rs:1752`](../../core/dr-pipeline/src/operation.rs#L1752), [`core/dr-pipeline/src/operation.rs:588`](../../core/dr-pipeline/src/operation.rs#L588), [`core/dr-pipeline/src/operation.rs:867`](../../core/dr-pipeline/src/operation.rs#L867), [`ui/dr-ui/src/develop/mask_ops.rs:1199`](../../ui/dr-ui/src/develop/mask_ops.rs#L1199), [`ui/dr-ui/src/develop/mask_ops.rs:1235`](../../ui/dr-ui/src/develop/mask_ops.rs#L1235), [`ui/dr-ui/src/develop/mask_ops.rs:318`](../../ui/dr-ui/src/develop/mask_ops.rs#L318), [`ui/dr-ui/src/develop/mask_ops.rs:58`](../../ui/dr-ui/src/develop/mask_ops.rs#L58), [`ui/dr-ui/src/develop/masks.rs:12`](../../ui/dr-ui/src/develop/masks.rs#L12), [`ui/dr-ui/src/develop/masks.rs:176`](../../ui/dr-ui/src/develop/masks.rs#L176), [`ui/dr-ui/src/develop/masks.rs:21`](../../ui/dr-ui/src/develop/masks.rs#L21), [`ui/dr-ui/src/develop/masks.rs:43`](../../ui/dr-ui/src/develop/masks.rs#L43), [`ui/dr-ui/src/develop/render.rs:260`](../../ui/dr-ui/src/develop/render.rs#L260), [`ui/dr-ui/src/develop/session.rs:227`](../../ui/dr-ui/src/develop/session.rs#L227), [`ui/dr-ui/src/develop/session.rs:236`](../../ui/dr-ui/src/develop/session.rs#L236), [`ui/dr-ui/src/masks_ui.rs:1024`](../../ui/dr-ui/src/masks_ui.rs#L1024), [`ui/dr-ui/src/masks_ui.rs:1448`](../../ui/dr-ui/src/masks_ui.rs#L1448), [`ui/dr-ui/src/masks_ui.rs:152`](../../ui/dr-ui/src/masks_ui.rs#L152), [`ui/dr-ui/src/masks_ui.rs:1849`](../../ui/dr-ui/src/masks_ui.rs#L1849), [`ui/dr-ui/src/masks_ui.rs:291`](../../ui/dr-ui/src/masks_ui.rs#L291), [`ui/dr-ui/src/masks_ui.rs:317`](../../ui/dr-ui/src/masks_ui.rs#L317), [`ui/dr-ui/src/masks_ui.rs:677`](../../ui/dr-ui/src/masks_ui.rs#L677), [`ui/dr-ui/src/masks_ui.rs:996`](../../ui/dr-ui/src/masks_ui.rs#L996), [`ui/dr-ui/ui/icons.slint:339`](../../ui/dr-ui/ui/icons.slint#L339), [`ui/dr-ui/ui/masks.slint:1121`](../../ui/dr-ui/ui/masks.slint#L1121), [`ui/dr-ui/ui/masks.slint:184`](../../ui/dr-ui/ui/masks.slint#L184), [`ui/dr-ui/ui/masks.slint:294`](../../ui/dr-ui/ui/masks.slint#L294), [`ui/dr-ui/ui/masks.slint:543`](../../ui/dr-ui/ui/masks.slint#L543), [`ui/dr-ui/ui/masks.slint:70`](../../ui/dr-ui/ui/masks.slint#L70), [`ui/dr-ui/ui/masks.slint:808`](../../ui/dr-ui/ui/masks.slint#L808), [`ui/dr-ui/ui/masks.slint:876`](../../ui/dr-ui/ui/masks.slint#L876), [`ui/dr-ui/ui/masks.slint:968`](../../ui/dr-ui/ui/masks.slint#L968) |
| FR-DEV-2 | [`core/dr-pipeline/src/operation.rs:403`](../../core/dr-pipeline/src/operation.rs#L403) |
-| FR-DEV-20 | [`core/dr-gpu/src/adjust.rs:1901`](../../core/dr-gpu/src/adjust.rs#L1901), [`core/dr-pipeline/src/framing.rs:1362`](../../core/dr-pipeline/src/framing.rs#L1362), [`core/dr-pipeline/src/framing.rs:170`](../../core/dr-pipeline/src/framing.rs#L170), [`core/dr-pipeline/src/framing.rs:388`](../../core/dr-pipeline/src/framing.rs#L388), [`core/dr-pipeline/src/framing.rs:482`](../../core/dr-pipeline/src/framing.rs#L482), [`core/dr-pipeline/src/framing.rs:639`](../../core/dr-pipeline/src/framing.rs#L639), [`core/dr-pipeline/src/framing.rs:650`](../../core/dr-pipeline/src/framing.rs#L650), [`core/dr-pipeline/src/framing.rs:88`](../../core/dr-pipeline/src/framing.rs#L88), [`core/dr-pipeline/src/framing.rs:925`](../../core/dr-pipeline/src/framing.rs#L925), [`core/dr-pipeline/src/framing.rs:92`](../../core/dr-pipeline/src/framing.rs#L92), [`core/dr-pipeline/src/framing.rs:981`](../../core/dr-pipeline/src/framing.rs#L981), [`core/dr-pipeline/src/preset.rs:824`](../../core/dr-pipeline/src/preset.rs#L824), [`core/dr-pipeline/src/sidecar.rs:2195`](../../core/dr-pipeline/src/sidecar.rs#L2195), [`ui/dr-ui/src/develop/framing.rs:1035`](../../ui/dr-ui/src/develop/framing.rs#L1035), [`ui/dr-ui/src/develop/framing.rs:418`](../../ui/dr-ui/src/develop/framing.rs#L418), [`ui/dr-ui/src/develop/framing.rs:474`](../../ui/dr-ui/src/develop/framing.rs#L474), [`ui/dr-ui/src/develop/framing.rs:480`](../../ui/dr-ui/src/develop/framing.rs#L480), [`ui/dr-ui/src/develop/framing.rs:489`](../../ui/dr-ui/src/develop/framing.rs#L489), [`ui/dr-ui/src/develop_ui.rs:1200`](../../ui/dr-ui/src/develop_ui.rs#L1200), [`ui/dr-ui/src/develop_ui.rs:1233`](../../ui/dr-ui/src/develop_ui.rs#L1233), [`ui/dr-ui/src/labels.rs:277`](../../ui/dr-ui/src/labels.rs#L277), [`ui/dr-ui/ui/adjust.slint:645`](../../ui/dr-ui/ui/adjust.slint#L645), [`ui/dr-ui/ui/adjust.slint:682`](../../ui/dr-ui/ui/adjust.slint#L682), [`ui/dr-ui/ui/adjust.slint:821`](../../ui/dr-ui/ui/adjust.slint#L821) |
-| FR-DEV-3 | [`core/dr-gpu/src/adjust.rs:2499`](../../core/dr-gpu/src/adjust.rs#L2499), [`core/dr-gpu/src/adjust.rs:679`](../../core/dr-gpu/src/adjust.rs#L679), [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/adjust.rs:84`](../../core/dr-gpu/src/adjust.rs#L84), [`core/dr-gpu/tests/tone_curve.rs:1`](../../core/dr-gpu/tests/tone_curve.rs#L1), [`core/dr-pipeline/src/coverage.rs:122`](../../core/dr-pipeline/src/coverage.rs#L122), [`core/dr-pipeline/src/coverage.rs:1`](../../core/dr-pipeline/src/coverage.rs#L1), [`core/dr-pipeline/src/detail.rs:434`](../../core/dr-pipeline/src/detail.rs#L434), [`core/dr-pipeline/src/detail.rs:524`](../../core/dr-pipeline/src/detail.rs#L524), [`core/dr-pipeline/src/framing.rs:1098`](../../core/dr-pipeline/src/framing.rs#L1098), [`core/dr-pipeline/src/framing.rs:251`](../../core/dr-pipeline/src/framing.rs#L251), [`core/dr-pipeline/src/framing.rs:308`](../../core/dr-pipeline/src/framing.rs#L308), [`core/dr-pipeline/src/framing.rs:468`](../../core/dr-pipeline/src/framing.rs#L468), [`core/dr-pipeline/src/framing.rs:704`](../../core/dr-pipeline/src/framing.rs#L704), [`core/dr-pipeline/src/graph.rs:1348`](../../core/dr-pipeline/src/graph.rs#L1348), [`core/dr-pipeline/src/graph.rs:1379`](../../core/dr-pipeline/src/graph.rs#L1379), [`core/dr-pipeline/src/graph.rs:1402`](../../core/dr-pipeline/src/graph.rs#L1402), [`core/dr-pipeline/src/graph.rs:1440`](../../core/dr-pipeline/src/graph.rs#L1440), [`core/dr-pipeline/src/graph.rs:1471`](../../core/dr-pipeline/src/graph.rs#L1471), [`core/dr-pipeline/src/graph.rs:225`](../../core/dr-pipeline/src/graph.rs#L225), [`core/dr-pipeline/src/graph.rs:306`](../../core/dr-pipeline/src/graph.rs#L306), [`core/dr-pipeline/src/graph.rs:344`](../../core/dr-pipeline/src/graph.rs#L344), [`core/dr-pipeline/src/graph.rs:350`](../../core/dr-pipeline/src/graph.rs#L350), [`core/dr-pipeline/src/graph.rs:860`](../../core/dr-pipeline/src/graph.rs#L860), [`core/dr-pipeline/src/graph.rs:952`](../../core/dr-pipeline/src/graph.rs#L952), [`core/dr-pipeline/src/lens.rs:93`](../../core/dr-pipeline/src/lens.rs#L93), [`core/dr-pipeline/src/mask.rs:205`](../../core/dr-pipeline/src/mask.rs#L205), [`core/dr-pipeline/src/mask.rs:558`](../../core/dr-pipeline/src/mask.rs#L558), [`core/dr-pipeline/src/neutral.rs:1`](../../core/dr-pipeline/src/neutral.rs#L1), [`core/dr-pipeline/src/neutral.rs:306`](../../core/dr-pipeline/src/neutral.rs#L306), [`core/dr-pipeline/src/neutral.rs:322`](../../core/dr-pipeline/src/neutral.rs#L322), [`core/dr-pipeline/src/neutral.rs:338`](../../core/dr-pipeline/src/neutral.rs#L338), [`core/dr-pipeline/src/neutral.rs:360`](../../core/dr-pipeline/src/neutral.rs#L360), [`core/dr-pipeline/src/neutral.rs:81`](../../core/dr-pipeline/src/neutral.rs#L81), [`core/dr-pipeline/src/operation.rs:330`](../../core/dr-pipeline/src/operation.rs#L330), [`core/dr-pipeline/src/operation.rs:565`](../../core/dr-pipeline/src/operation.rs#L565), [`core/dr-pipeline/src/operation.rs:637`](../../core/dr-pipeline/src/operation.rs#L637), [`core/dr-pipeline/src/ops/capture_sharpen.rs:1`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L1), [`core/dr-pipeline/src/ops/capture_sharpen.rs:210`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L210), [`core/dr-pipeline/src/ops/curve.rs:100`](../../core/dr-pipeline/src/ops/curve.rs#L100), [`core/dr-pipeline/src/ops/curve.rs:1`](../../core/dr-pipeline/src/ops/curve.rs#L1), [`core/dr-pipeline/src/ops/curve.rs:219`](../../core/dr-pipeline/src/ops/curve.rs#L219), [`core/dr-pipeline/src/ops/curve.rs:635`](../../core/dr-pipeline/src/ops/curve.rs#L635), [`core/dr-pipeline/src/ops/local_contrast.rs:1`](../../core/dr-pipeline/src/ops/local_contrast.rs#L1), [`core/dr-pipeline/src/ops/noise_reduction.rs:1`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L1), [`core/dr-pipeline/src/ops/noise_reduction.rs:273`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L273), [`core/dr-pipeline/src/preset.rs:752`](../../core/dr-pipeline/src/preset.rs#L752), [`core/dr-pipeline/src/sidecar.rs:1433`](../../core/dr-pipeline/src/sidecar.rs#L1433), [`core/dr-pipeline/src/sidecar.rs:206`](../../core/dr-pipeline/src/sidecar.rs#L206), [`core/dr-pipeline/src/sidecar.rs:2273`](../../core/dr-pipeline/src/sidecar.rs#L2273), [`core/dr-pipeline/src/sidecar.rs:2353`](../../core/dr-pipeline/src/sidecar.rs#L2353), [`core/dr-pipeline/tests/tone_curve.rs:1`](../../core/dr-pipeline/tests/tone_curve.rs#L1), [`core/dr-segment/src/refine.rs:937`](../../core/dr-segment/src/refine.rs#L937), [`ui/dr-ui/src/develop/curves.rs:163`](../../ui/dr-ui/src/develop/curves.rs#L163), [`ui/dr-ui/src/develop/framing.rs:10`](../../ui/dr-ui/src/develop/framing.rs#L10), [`ui/dr-ui/src/develop/framing.rs:298`](../../ui/dr-ui/src/develop/framing.rs#L298), [`ui/dr-ui/src/develop/framing.rs:328`](../../ui/dr-ui/src/develop/framing.rs#L328), [`ui/dr-ui/src/develop/framing.rs:394`](../../ui/dr-ui/src/develop/framing.rs#L394), [`ui/dr-ui/src/develop/framing.rs:408`](../../ui/dr-ui/src/develop/framing.rs#L408), [`ui/dr-ui/src/develop/framing.rs:644`](../../ui/dr-ui/src/develop/framing.rs#L644), [`ui/dr-ui/src/develop/framing.rs:71`](../../ui/dr-ui/src/develop/framing.rs#L71), [`ui/dr-ui/src/develop/mask_ops.rs:1076`](../../ui/dr-ui/src/develop/mask_ops.rs#L1076), [`ui/dr-ui/src/develop/mask_ops.rs:1340`](../../ui/dr-ui/src/develop/mask_ops.rs#L1340), [`ui/dr-ui/src/develop/mask_ops.rs:178`](../../ui/dr-ui/src/develop/mask_ops.rs#L178), [`ui/dr-ui/src/develop/mask_ops.rs:969`](../../ui/dr-ui/src/develop/mask_ops.rs#L969), [`ui/dr-ui/src/develop/masks.rs:263`](../../ui/dr-ui/src/develop/masks.rs#L263), [`ui/dr-ui/src/develop/masks.rs:361`](../../ui/dr-ui/src/develop/masks.rs#L361), [`ui/dr-ui/src/develop/masks.rs:743`](../../ui/dr-ui/src/develop/masks.rs#L743), [`ui/dr-ui/src/develop/masks.rs:773`](../../ui/dr-ui/src/develop/masks.rs#L773), [`ui/dr-ui/src/develop/render.rs:1240`](../../ui/dr-ui/src/develop/render.rs#L1240), [`ui/dr-ui/src/develop/rows.rs:106`](../../ui/dr-ui/src/develop/rows.rs#L106), [`ui/dr-ui/src/develop/rows.rs:195`](../../ui/dr-ui/src/develop/rows.rs#L195), [`ui/dr-ui/src/develop/rows.rs:231`](../../ui/dr-ui/src/develop/rows.rs#L231), [`ui/dr-ui/src/develop/rows.rs:679`](../../ui/dr-ui/src/develop/rows.rs#L679), [`ui/dr-ui/src/develop/segmentation.rs:139`](../../ui/dr-ui/src/develop/segmentation.rs#L139), [`ui/dr-ui/src/develop/segmentation.rs:302`](../../ui/dr-ui/src/develop/segmentation.rs#L302), [`ui/dr-ui/src/develop/segmentation.rs:339`](../../ui/dr-ui/src/develop/segmentation.rs#L339), [`ui/dr-ui/src/develop/segmentation.rs:572`](../../ui/dr-ui/src/develop/segmentation.rs#L572), [`ui/dr-ui/src/develop/segmentation.rs:590`](../../ui/dr-ui/src/develop/segmentation.rs#L590), [`ui/dr-ui/src/develop/segmentation.rs:604`](../../ui/dr-ui/src/develop/segmentation.rs#L604), [`ui/dr-ui/src/develop/segmentation.rs:626`](../../ui/dr-ui/src/develop/segmentation.rs#L626), [`ui/dr-ui/src/develop/segmentation.rs:77`](../../ui/dr-ui/src/develop/segmentation.rs#L77), [`ui/dr-ui/src/develop/segmentation.rs:806`](../../ui/dr-ui/src/develop/segmentation.rs#L806), [`ui/dr-ui/src/develop/session.rs:162`](../../ui/dr-ui/src/develop/session.rs#L162), [`ui/dr-ui/src/develop/session.rs:255`](../../ui/dr-ui/src/develop/session.rs#L255), [`ui/dr-ui/src/develop/session.rs:284`](../../ui/dr-ui/src/develop/session.rs#L284), [`ui/dr-ui/src/develop/session.rs:434`](../../ui/dr-ui/src/develop/session.rs#L434), [`ui/dr-ui/src/develop/session.rs:494`](../../ui/dr-ui/src/develop/session.rs#L494), [`ui/dr-ui/src/develop/session.rs:566`](../../ui/dr-ui/src/develop/session.rs#L566), [`ui/dr-ui/src/develop/session.rs:716`](../../ui/dr-ui/src/develop/session.rs#L716), [`ui/dr-ui/src/develop/white_balance.rs:11`](../../ui/dr-ui/src/develop/white_balance.rs#L11), [`ui/dr-ui/src/develop/white_balance.rs:162`](../../ui/dr-ui/src/develop/white_balance.rs#L162), [`ui/dr-ui/src/develop/white_balance.rs:193`](../../ui/dr-ui/src/develop/white_balance.rs#L193), [`ui/dr-ui/src/develop/white_balance.rs:276`](../../ui/dr-ui/src/develop/white_balance.rs#L276), [`ui/dr-ui/src/develop/white_balance.rs:338`](../../ui/dr-ui/src/develop/white_balance.rs#L338), [`ui/dr-ui/src/develop_ui.rs:1013`](../../ui/dr-ui/src/develop_ui.rs#L1013), [`ui/dr-ui/src/develop_ui.rs:1110`](../../ui/dr-ui/src/develop_ui.rs#L1110), [`ui/dr-ui/src/develop_ui.rs:1164`](../../ui/dr-ui/src/develop_ui.rs#L1164), [`ui/dr-ui/src/develop_ui.rs:117`](../../ui/dr-ui/src/develop_ui.rs#L117), [`ui/dr-ui/src/develop_ui.rs:414`](../../ui/dr-ui/src/develop_ui.rs#L414), [`ui/dr-ui/src/develop_ui.rs:634`](../../ui/dr-ui/src/develop_ui.rs#L634), [`ui/dr-ui/src/labels.rs:35`](../../ui/dr-ui/src/labels.rs#L35), [`ui/dr-ui/src/lib.rs:2229`](../../ui/dr-ui/src/lib.rs#L2229), [`ui/dr-ui/src/lib.rs:440`](../../ui/dr-ui/src/lib.rs#L440), [`ui/dr-ui/src/lib.rs:469`](../../ui/dr-ui/src/lib.rs#L469), [`ui/dr-ui/src/lib.rs:577`](../../ui/dr-ui/src/lib.rs#L577), [`ui/dr-ui/src/lib.rs:601`](../../ui/dr-ui/src/lib.rs#L601), [`ui/dr-ui/src/library/sidecar.rs:63`](../../ui/dr-ui/src/library/sidecar.rs#L63), [`ui/dr-ui/src/masks_ui.rs:1567`](../../ui/dr-ui/src/masks_ui.rs#L1567), [`ui/dr-ui/src/masks_ui.rs:1681`](../../ui/dr-ui/src/masks_ui.rs#L1681), [`ui/dr-ui/src/masks_ui.rs:339`](../../ui/dr-ui/src/masks_ui.rs#L339), [`ui/dr-ui/src/masks_ui.rs:44`](../../ui/dr-ui/src/masks_ui.rs#L44), [`ui/dr-ui/src/presets.rs:414`](../../ui/dr-ui/src/presets.rs#L414), [`ui/dr-ui/src/segmentation.rs:117`](../../ui/dr-ui/src/segmentation.rs#L117), [`ui/dr-ui/src/segmentation.rs:353`](../../ui/dr-ui/src/segmentation.rs#L353), [`ui/dr-ui/src/segmentation.rs:369`](../../ui/dr-ui/src/segmentation.rs#L369), [`ui/dr-ui/src/segmentation.rs:499`](../../ui/dr-ui/src/segmentation.rs#L499), [`ui/dr-ui/src/segmentation.rs:527`](../../ui/dr-ui/src/segmentation.rs#L527), [`ui/dr-ui/ui/adjust.slint:1027`](../../ui/dr-ui/ui/adjust.slint#L1027), [`ui/dr-ui/ui/adjust.slint:126`](../../ui/dr-ui/ui/adjust.slint#L126), [`ui/dr-ui/ui/adjust.slint:1504`](../../ui/dr-ui/ui/adjust.slint#L1504), [`ui/dr-ui/ui/adjust.slint:172`](../../ui/dr-ui/ui/adjust.slint#L172), [`ui/dr-ui/ui/adjust.slint:46`](../../ui/dr-ui/ui/adjust.slint#L46), [`ui/dr-ui/ui/adjust.slint:625`](../../ui/dr-ui/ui/adjust.slint#L625), [`ui/dr-ui/ui/adjust.slint:656`](../../ui/dr-ui/ui/adjust.slint#L656), [`ui/dr-ui/ui/adjust.slint:675`](../../ui/dr-ui/ui/adjust.slint#L675), [`ui/dr-ui/ui/adjust.slint:856`](../../ui/dr-ui/ui/adjust.slint#L856), [`ui/dr-ui/ui/adjust.slint:955`](../../ui/dr-ui/ui/adjust.slint#L955), [`ui/dr-ui/ui/app.slint:2052`](../../ui/dr-ui/ui/app.slint#L2052), [`ui/dr-ui/ui/app.slint:207`](../../ui/dr-ui/ui/app.slint#L207), [`ui/dr-ui/ui/app.slint:2114`](../../ui/dr-ui/ui/app.slint#L2114), [`ui/dr-ui/ui/develop.slint:295`](../../ui/dr-ui/ui/develop.slint#L295), [`ui/dr-ui/ui/masks.slint:1240`](../../ui/dr-ui/ui/masks.slint#L1240), [`ui/dr-ui/ui/masks.slint:777`](../../ui/dr-ui/ui/masks.slint#L777), [`ui/dr-ui/ui/masks.slint:836`](../../ui/dr-ui/ui/masks.slint#L836) |
-| FR-DEV-3a | [`core/dr-pipeline/ops/exposure.yaml:1`](../../core/dr-pipeline/ops/exposure.yaml#L1), [`core/dr-pipeline/src/descriptor.rs:212`](../../core/dr-pipeline/src/descriptor.rs#L212), [`core/dr-pipeline/src/descriptor.rs:252`](../../core/dr-pipeline/src/descriptor.rs#L252), [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/descriptor.rs:331`](../../core/dr-pipeline/src/descriptor.rs#L331), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-pipeline/src/graph.rs:25`](../../core/dr-pipeline/src/graph.rs#L25), [`core/dr-pipeline/src/graph.rs:393`](../../core/dr-pipeline/src/graph.rs#L393), [`core/dr-pipeline/src/graph.rs:47`](../../core/dr-pipeline/src/graph.rs#L47), [`core/dr-pipeline/src/graph.rs:534`](../../core/dr-pipeline/src/graph.rs#L534), [`core/dr-pipeline/src/graph.rs:60`](../../core/dr-pipeline/src/graph.rs#L60), [`core/dr-pipeline/src/mask.rs:1744`](../../core/dr-pipeline/src/mask.rs#L1744), [`core/dr-pipeline/src/neutral.rs:1`](../../core/dr-pipeline/src/neutral.rs#L1), [`core/dr-pipeline/src/neutral.rs:378`](../../core/dr-pipeline/src/neutral.rs#L378), [`core/dr-pipeline/src/operation.rs:232`](../../core/dr-pipeline/src/operation.rs#L232), [`core/dr-pipeline/src/operation.rs:365`](../../core/dr-pipeline/src/operation.rs#L365), [`core/dr-pipeline/src/ops/curve.rs:319`](../../core/dr-pipeline/src/ops/curve.rs#L319), [`ui/dr-ui/src/develop/curves.rs:36`](../../ui/dr-ui/src/develop/curves.rs#L36), [`ui/dr-ui/src/develop/rows.rs:118`](../../ui/dr-ui/src/develop/rows.rs#L118), [`ui/dr-ui/src/develop/rows.rs:679`](../../ui/dr-ui/src/develop/rows.rs#L679), [`ui/dr-ui/src/develop/rows.rs:877`](../../ui/dr-ui/src/develop/rows.rs#L877), [`ui/dr-ui/src/lib.rs:908`](../../ui/dr-ui/src/lib.rs#L908), [`ui/dr-ui/tests/ui_names_no_operation.rs:1`](../../ui/dr-ui/tests/ui_names_no_operation.rs#L1), [`ui/dr-ui/ui/app.slint:2367`](../../ui/dr-ui/ui/app.slint#L2367) |
-| FR-DEV-3b | [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-pipeline/src/graph.rs:60`](../../core/dr-pipeline/src/graph.rs#L60), [`core/dr-pipeline/src/operation.rs:365`](../../core/dr-pipeline/src/operation.rs#L365), [`ui/dr-ui/ui/app.slint:2610`](../../ui/dr-ui/ui/app.slint#L2610) |
+| FR-DEV-20 | [`core/dr-gpu/src/adjust.rs:1901`](../../core/dr-gpu/src/adjust.rs#L1901), [`core/dr-pipeline/src/framing.rs:1362`](../../core/dr-pipeline/src/framing.rs#L1362), [`core/dr-pipeline/src/framing.rs:170`](../../core/dr-pipeline/src/framing.rs#L170), [`core/dr-pipeline/src/framing.rs:388`](../../core/dr-pipeline/src/framing.rs#L388), [`core/dr-pipeline/src/framing.rs:482`](../../core/dr-pipeline/src/framing.rs#L482), [`core/dr-pipeline/src/framing.rs:639`](../../core/dr-pipeline/src/framing.rs#L639), [`core/dr-pipeline/src/framing.rs:650`](../../core/dr-pipeline/src/framing.rs#L650), [`core/dr-pipeline/src/framing.rs:88`](../../core/dr-pipeline/src/framing.rs#L88), [`core/dr-pipeline/src/framing.rs:925`](../../core/dr-pipeline/src/framing.rs#L925), [`core/dr-pipeline/src/framing.rs:92`](../../core/dr-pipeline/src/framing.rs#L92), [`core/dr-pipeline/src/framing.rs:981`](../../core/dr-pipeline/src/framing.rs#L981), [`core/dr-pipeline/src/preset.rs:824`](../../core/dr-pipeline/src/preset.rs#L824), [`core/dr-pipeline/src/sidecar.rs:2195`](../../core/dr-pipeline/src/sidecar.rs#L2195), [`ui/dr-ui/src/develop/framing.rs:1035`](../../ui/dr-ui/src/develop/framing.rs#L1035), [`ui/dr-ui/src/develop/framing.rs:418`](../../ui/dr-ui/src/develop/framing.rs#L418), [`ui/dr-ui/src/develop/framing.rs:474`](../../ui/dr-ui/src/develop/framing.rs#L474), [`ui/dr-ui/src/develop/framing.rs:480`](../../ui/dr-ui/src/develop/framing.rs#L480), [`ui/dr-ui/src/develop/framing.rs:489`](../../ui/dr-ui/src/develop/framing.rs#L489), [`ui/dr-ui/src/develop_ui.rs:1240`](../../ui/dr-ui/src/develop_ui.rs#L1240), [`ui/dr-ui/src/develop_ui.rs:1273`](../../ui/dr-ui/src/develop_ui.rs#L1273), [`ui/dr-ui/src/labels.rs:277`](../../ui/dr-ui/src/labels.rs#L277), [`ui/dr-ui/ui/adjust.slint:645`](../../ui/dr-ui/ui/adjust.slint#L645), [`ui/dr-ui/ui/adjust.slint:687`](../../ui/dr-ui/ui/adjust.slint#L687), [`ui/dr-ui/ui/adjust.slint:830`](../../ui/dr-ui/ui/adjust.slint#L830), [`ui/dr-ui/ui/app.slint:2552`](../../ui/dr-ui/ui/app.slint#L2552), [`ui/dr-ui/ui/app.slint:676`](../../ui/dr-ui/ui/app.slint#L676), [`ui/dr-ui/ui/app.slint:699`](../../ui/dr-ui/ui/app.slint#L699) |
+| FR-DEV-3 | [`core/dr-gpu/src/adjust.rs:2499`](../../core/dr-gpu/src/adjust.rs#L2499), [`core/dr-gpu/src/adjust.rs:679`](../../core/dr-gpu/src/adjust.rs#L679), [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/adjust.rs:84`](../../core/dr-gpu/src/adjust.rs#L84), [`core/dr-gpu/tests/tone_curve.rs:1`](../../core/dr-gpu/tests/tone_curve.rs#L1), [`core/dr-pipeline/src/coverage.rs:122`](../../core/dr-pipeline/src/coverage.rs#L122), [`core/dr-pipeline/src/coverage.rs:1`](../../core/dr-pipeline/src/coverage.rs#L1), [`core/dr-pipeline/src/detail.rs:434`](../../core/dr-pipeline/src/detail.rs#L434), [`core/dr-pipeline/src/detail.rs:524`](../../core/dr-pipeline/src/detail.rs#L524), [`core/dr-pipeline/src/framing.rs:1098`](../../core/dr-pipeline/src/framing.rs#L1098), [`core/dr-pipeline/src/framing.rs:251`](../../core/dr-pipeline/src/framing.rs#L251), [`core/dr-pipeline/src/framing.rs:308`](../../core/dr-pipeline/src/framing.rs#L308), [`core/dr-pipeline/src/framing.rs:468`](../../core/dr-pipeline/src/framing.rs#L468), [`core/dr-pipeline/src/framing.rs:704`](../../core/dr-pipeline/src/framing.rs#L704), [`core/dr-pipeline/src/graph.rs:1348`](../../core/dr-pipeline/src/graph.rs#L1348), [`core/dr-pipeline/src/graph.rs:1379`](../../core/dr-pipeline/src/graph.rs#L1379), [`core/dr-pipeline/src/graph.rs:1402`](../../core/dr-pipeline/src/graph.rs#L1402), [`core/dr-pipeline/src/graph.rs:1440`](../../core/dr-pipeline/src/graph.rs#L1440), [`core/dr-pipeline/src/graph.rs:1471`](../../core/dr-pipeline/src/graph.rs#L1471), [`core/dr-pipeline/src/graph.rs:225`](../../core/dr-pipeline/src/graph.rs#L225), [`core/dr-pipeline/src/graph.rs:306`](../../core/dr-pipeline/src/graph.rs#L306), [`core/dr-pipeline/src/graph.rs:344`](../../core/dr-pipeline/src/graph.rs#L344), [`core/dr-pipeline/src/graph.rs:350`](../../core/dr-pipeline/src/graph.rs#L350), [`core/dr-pipeline/src/graph.rs:860`](../../core/dr-pipeline/src/graph.rs#L860), [`core/dr-pipeline/src/graph.rs:952`](../../core/dr-pipeline/src/graph.rs#L952), [`core/dr-pipeline/src/lens.rs:93`](../../core/dr-pipeline/src/lens.rs#L93), [`core/dr-pipeline/src/mask.rs:205`](../../core/dr-pipeline/src/mask.rs#L205), [`core/dr-pipeline/src/mask.rs:558`](../../core/dr-pipeline/src/mask.rs#L558), [`core/dr-pipeline/src/neutral.rs:1`](../../core/dr-pipeline/src/neutral.rs#L1), [`core/dr-pipeline/src/neutral.rs:306`](../../core/dr-pipeline/src/neutral.rs#L306), [`core/dr-pipeline/src/neutral.rs:322`](../../core/dr-pipeline/src/neutral.rs#L322), [`core/dr-pipeline/src/neutral.rs:338`](../../core/dr-pipeline/src/neutral.rs#L338), [`core/dr-pipeline/src/neutral.rs:360`](../../core/dr-pipeline/src/neutral.rs#L360), [`core/dr-pipeline/src/neutral.rs:81`](../../core/dr-pipeline/src/neutral.rs#L81), [`core/dr-pipeline/src/operation.rs:330`](../../core/dr-pipeline/src/operation.rs#L330), [`core/dr-pipeline/src/operation.rs:565`](../../core/dr-pipeline/src/operation.rs#L565), [`core/dr-pipeline/src/operation.rs:637`](../../core/dr-pipeline/src/operation.rs#L637), [`core/dr-pipeline/src/ops/capture_sharpen.rs:1`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L1), [`core/dr-pipeline/src/ops/capture_sharpen.rs:210`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L210), [`core/dr-pipeline/src/ops/curve.rs:100`](../../core/dr-pipeline/src/ops/curve.rs#L100), [`core/dr-pipeline/src/ops/curve.rs:1`](../../core/dr-pipeline/src/ops/curve.rs#L1), [`core/dr-pipeline/src/ops/curve.rs:219`](../../core/dr-pipeline/src/ops/curve.rs#L219), [`core/dr-pipeline/src/ops/curve.rs:635`](../../core/dr-pipeline/src/ops/curve.rs#L635), [`core/dr-pipeline/src/ops/local_contrast.rs:1`](../../core/dr-pipeline/src/ops/local_contrast.rs#L1), [`core/dr-pipeline/src/ops/noise_reduction.rs:1`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L1), [`core/dr-pipeline/src/ops/noise_reduction.rs:273`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L273), [`core/dr-pipeline/src/preset.rs:752`](../../core/dr-pipeline/src/preset.rs#L752), [`core/dr-pipeline/src/sidecar.rs:1433`](../../core/dr-pipeline/src/sidecar.rs#L1433), [`core/dr-pipeline/src/sidecar.rs:206`](../../core/dr-pipeline/src/sidecar.rs#L206), [`core/dr-pipeline/src/sidecar.rs:2273`](../../core/dr-pipeline/src/sidecar.rs#L2273), [`core/dr-pipeline/src/sidecar.rs:2353`](../../core/dr-pipeline/src/sidecar.rs#L2353), [`core/dr-pipeline/tests/tone_curve.rs:1`](../../core/dr-pipeline/tests/tone_curve.rs#L1), [`core/dr-segment/src/refine.rs:937`](../../core/dr-segment/src/refine.rs#L937), [`ui/dr-ui/src/develop/curves.rs:163`](../../ui/dr-ui/src/develop/curves.rs#L163), [`ui/dr-ui/src/develop/framing.rs:10`](../../ui/dr-ui/src/develop/framing.rs#L10), [`ui/dr-ui/src/develop/framing.rs:298`](../../ui/dr-ui/src/develop/framing.rs#L298), [`ui/dr-ui/src/develop/framing.rs:328`](../../ui/dr-ui/src/develop/framing.rs#L328), [`ui/dr-ui/src/develop/framing.rs:394`](../../ui/dr-ui/src/develop/framing.rs#L394), [`ui/dr-ui/src/develop/framing.rs:408`](../../ui/dr-ui/src/develop/framing.rs#L408), [`ui/dr-ui/src/develop/framing.rs:644`](../../ui/dr-ui/src/develop/framing.rs#L644), [`ui/dr-ui/src/develop/framing.rs:71`](../../ui/dr-ui/src/develop/framing.rs#L71), [`ui/dr-ui/src/develop/mask_ops.rs:1076`](../../ui/dr-ui/src/develop/mask_ops.rs#L1076), [`ui/dr-ui/src/develop/mask_ops.rs:1340`](../../ui/dr-ui/src/develop/mask_ops.rs#L1340), [`ui/dr-ui/src/develop/mask_ops.rs:178`](../../ui/dr-ui/src/develop/mask_ops.rs#L178), [`ui/dr-ui/src/develop/mask_ops.rs:969`](../../ui/dr-ui/src/develop/mask_ops.rs#L969), [`ui/dr-ui/src/develop/masks.rs:263`](../../ui/dr-ui/src/develop/masks.rs#L263), [`ui/dr-ui/src/develop/masks.rs:361`](../../ui/dr-ui/src/develop/masks.rs#L361), [`ui/dr-ui/src/develop/masks.rs:743`](../../ui/dr-ui/src/develop/masks.rs#L743), [`ui/dr-ui/src/develop/masks.rs:773`](../../ui/dr-ui/src/develop/masks.rs#L773), [`ui/dr-ui/src/develop/render.rs:1240`](../../ui/dr-ui/src/develop/render.rs#L1240), [`ui/dr-ui/src/develop/rows.rs:106`](../../ui/dr-ui/src/develop/rows.rs#L106), [`ui/dr-ui/src/develop/rows.rs:195`](../../ui/dr-ui/src/develop/rows.rs#L195), [`ui/dr-ui/src/develop/rows.rs:231`](../../ui/dr-ui/src/develop/rows.rs#L231), [`ui/dr-ui/src/develop/rows.rs:679`](../../ui/dr-ui/src/develop/rows.rs#L679), [`ui/dr-ui/src/develop/segmentation.rs:139`](../../ui/dr-ui/src/develop/segmentation.rs#L139), [`ui/dr-ui/src/develop/segmentation.rs:302`](../../ui/dr-ui/src/develop/segmentation.rs#L302), [`ui/dr-ui/src/develop/segmentation.rs:339`](../../ui/dr-ui/src/develop/segmentation.rs#L339), [`ui/dr-ui/src/develop/segmentation.rs:572`](../../ui/dr-ui/src/develop/segmentation.rs#L572), [`ui/dr-ui/src/develop/segmentation.rs:590`](../../ui/dr-ui/src/develop/segmentation.rs#L590), [`ui/dr-ui/src/develop/segmentation.rs:604`](../../ui/dr-ui/src/develop/segmentation.rs#L604), [`ui/dr-ui/src/develop/segmentation.rs:626`](../../ui/dr-ui/src/develop/segmentation.rs#L626), [`ui/dr-ui/src/develop/segmentation.rs:77`](../../ui/dr-ui/src/develop/segmentation.rs#L77), [`ui/dr-ui/src/develop/segmentation.rs:806`](../../ui/dr-ui/src/develop/segmentation.rs#L806), [`ui/dr-ui/src/develop/session.rs:162`](../../ui/dr-ui/src/develop/session.rs#L162), [`ui/dr-ui/src/develop/session.rs:255`](../../ui/dr-ui/src/develop/session.rs#L255), [`ui/dr-ui/src/develop/session.rs:284`](../../ui/dr-ui/src/develop/session.rs#L284), [`ui/dr-ui/src/develop/session.rs:434`](../../ui/dr-ui/src/develop/session.rs#L434), [`ui/dr-ui/src/develop/session.rs:494`](../../ui/dr-ui/src/develop/session.rs#L494), [`ui/dr-ui/src/develop/session.rs:566`](../../ui/dr-ui/src/develop/session.rs#L566), [`ui/dr-ui/src/develop/session.rs:716`](../../ui/dr-ui/src/develop/session.rs#L716), [`ui/dr-ui/src/develop/white_balance.rs:11`](../../ui/dr-ui/src/develop/white_balance.rs#L11), [`ui/dr-ui/src/develop/white_balance.rs:162`](../../ui/dr-ui/src/develop/white_balance.rs#L162), [`ui/dr-ui/src/develop/white_balance.rs:193`](../../ui/dr-ui/src/develop/white_balance.rs#L193), [`ui/dr-ui/src/develop/white_balance.rs:276`](../../ui/dr-ui/src/develop/white_balance.rs#L276), [`ui/dr-ui/src/develop/white_balance.rs:338`](../../ui/dr-ui/src/develop/white_balance.rs#L338), [`ui/dr-ui/src/develop_ui.rs:1053`](../../ui/dr-ui/src/develop_ui.rs#L1053), [`ui/dr-ui/src/develop_ui.rs:1150`](../../ui/dr-ui/src/develop_ui.rs#L1150), [`ui/dr-ui/src/develop_ui.rs:117`](../../ui/dr-ui/src/develop_ui.rs#L117), [`ui/dr-ui/src/develop_ui.rs:1204`](../../ui/dr-ui/src/develop_ui.rs#L1204), [`ui/dr-ui/src/develop_ui.rs:454`](../../ui/dr-ui/src/develop_ui.rs#L454), [`ui/dr-ui/src/develop_ui.rs:674`](../../ui/dr-ui/src/develop_ui.rs#L674), [`ui/dr-ui/src/labels.rs:35`](../../ui/dr-ui/src/labels.rs#L35), [`ui/dr-ui/src/lib.rs:2230`](../../ui/dr-ui/src/lib.rs#L2230), [`ui/dr-ui/src/lib.rs:440`](../../ui/dr-ui/src/lib.rs#L440), [`ui/dr-ui/src/lib.rs:470`](../../ui/dr-ui/src/lib.rs#L470), [`ui/dr-ui/src/lib.rs:578`](../../ui/dr-ui/src/lib.rs#L578), [`ui/dr-ui/src/lib.rs:602`](../../ui/dr-ui/src/lib.rs#L602), [`ui/dr-ui/src/library/sidecar.rs:63`](../../ui/dr-ui/src/library/sidecar.rs#L63), [`ui/dr-ui/src/masks_ui.rs:1608`](../../ui/dr-ui/src/masks_ui.rs#L1608), [`ui/dr-ui/src/masks_ui.rs:1722`](../../ui/dr-ui/src/masks_ui.rs#L1722), [`ui/dr-ui/src/masks_ui.rs:339`](../../ui/dr-ui/src/masks_ui.rs#L339), [`ui/dr-ui/src/masks_ui.rs:44`](../../ui/dr-ui/src/masks_ui.rs#L44), [`ui/dr-ui/src/presets.rs:414`](../../ui/dr-ui/src/presets.rs#L414), [`ui/dr-ui/src/segmentation.rs:117`](../../ui/dr-ui/src/segmentation.rs#L117), [`ui/dr-ui/src/segmentation.rs:353`](../../ui/dr-ui/src/segmentation.rs#L353), [`ui/dr-ui/src/segmentation.rs:369`](../../ui/dr-ui/src/segmentation.rs#L369), [`ui/dr-ui/src/segmentation.rs:499`](../../ui/dr-ui/src/segmentation.rs#L499), [`ui/dr-ui/src/segmentation.rs:527`](../../ui/dr-ui/src/segmentation.rs#L527), [`ui/dr-ui/ui/adjust.slint:1049`](../../ui/dr-ui/ui/adjust.slint#L1049), [`ui/dr-ui/ui/adjust.slint:126`](../../ui/dr-ui/ui/adjust.slint#L126), [`ui/dr-ui/ui/adjust.slint:1526`](../../ui/dr-ui/ui/adjust.slint#L1526), [`ui/dr-ui/ui/adjust.slint:172`](../../ui/dr-ui/ui/adjust.slint#L172), [`ui/dr-ui/ui/adjust.slint:46`](../../ui/dr-ui/ui/adjust.slint#L46), [`ui/dr-ui/ui/adjust.slint:625`](../../ui/dr-ui/ui/adjust.slint#L625), [`ui/dr-ui/ui/adjust.slint:661`](../../ui/dr-ui/ui/adjust.slint#L661), [`ui/dr-ui/ui/adjust.slint:680`](../../ui/dr-ui/ui/adjust.slint#L680), [`ui/dr-ui/ui/adjust.slint:873`](../../ui/dr-ui/ui/adjust.slint#L873), [`ui/dr-ui/ui/adjust.slint:972`](../../ui/dr-ui/ui/adjust.slint#L972), [`ui/dr-ui/ui/app.slint:207`](../../ui/dr-ui/ui/app.slint#L207), [`ui/dr-ui/ui/app.slint:2150`](../../ui/dr-ui/ui/app.slint#L2150), [`ui/dr-ui/ui/app.slint:2212`](../../ui/dr-ui/ui/app.slint#L2212), [`ui/dr-ui/ui/develop.slint:337`](../../ui/dr-ui/ui/develop.slint#L337), [`ui/dr-ui/ui/masks.slint:1246`](../../ui/dr-ui/ui/masks.slint#L1246), [`ui/dr-ui/ui/masks.slint:779`](../../ui/dr-ui/ui/masks.slint#L779), [`ui/dr-ui/ui/masks.slint:838`](../../ui/dr-ui/ui/masks.slint#L838) |
+| FR-DEV-3a | [`core/dr-pipeline/ops/exposure.yaml:1`](../../core/dr-pipeline/ops/exposure.yaml#L1), [`core/dr-pipeline/src/descriptor.rs:212`](../../core/dr-pipeline/src/descriptor.rs#L212), [`core/dr-pipeline/src/descriptor.rs:252`](../../core/dr-pipeline/src/descriptor.rs#L252), [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/descriptor.rs:331`](../../core/dr-pipeline/src/descriptor.rs#L331), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-pipeline/src/graph.rs:25`](../../core/dr-pipeline/src/graph.rs#L25), [`core/dr-pipeline/src/graph.rs:393`](../../core/dr-pipeline/src/graph.rs#L393), [`core/dr-pipeline/src/graph.rs:47`](../../core/dr-pipeline/src/graph.rs#L47), [`core/dr-pipeline/src/graph.rs:534`](../../core/dr-pipeline/src/graph.rs#L534), [`core/dr-pipeline/src/graph.rs:60`](../../core/dr-pipeline/src/graph.rs#L60), [`core/dr-pipeline/src/mask.rs:1744`](../../core/dr-pipeline/src/mask.rs#L1744), [`core/dr-pipeline/src/neutral.rs:1`](../../core/dr-pipeline/src/neutral.rs#L1), [`core/dr-pipeline/src/neutral.rs:378`](../../core/dr-pipeline/src/neutral.rs#L378), [`core/dr-pipeline/src/operation.rs:232`](../../core/dr-pipeline/src/operation.rs#L232), [`core/dr-pipeline/src/operation.rs:365`](../../core/dr-pipeline/src/operation.rs#L365), [`core/dr-pipeline/src/ops/curve.rs:319`](../../core/dr-pipeline/src/ops/curve.rs#L319), [`ui/dr-ui/src/develop/curves.rs:36`](../../ui/dr-ui/src/develop/curves.rs#L36), [`ui/dr-ui/src/develop/rows.rs:118`](../../ui/dr-ui/src/develop/rows.rs#L118), [`ui/dr-ui/src/develop/rows.rs:679`](../../ui/dr-ui/src/develop/rows.rs#L679), [`ui/dr-ui/src/develop/rows.rs:877`](../../ui/dr-ui/src/develop/rows.rs#L877), [`ui/dr-ui/src/lib.rs:909`](../../ui/dr-ui/src/lib.rs#L909), [`ui/dr-ui/tests/ui_names_no_operation.rs:1`](../../ui/dr-ui/tests/ui_names_no_operation.rs#L1), [`ui/dr-ui/ui/app.slint:2582`](../../ui/dr-ui/ui/app.slint#L2582) |
+| FR-DEV-3b | [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-pipeline/src/graph.rs:60`](../../core/dr-pipeline/src/graph.rs#L60), [`core/dr-pipeline/src/operation.rs:365`](../../core/dr-pipeline/src/operation.rs#L365), [`ui/dr-ui/ui/app.slint:2866`](../../ui/dr-ui/ui/app.slint#L2866) |
| FR-DEV-3c | [`core/dr-pipeline/ops/exposure.yaml:1`](../../core/dr-pipeline/ops/exposure.yaml#L1), [`core/dr-pipeline/src/graph.rs:393`](../../core/dr-pipeline/src/graph.rs#L393), [`core/dr-pipeline/src/graph.rs:47`](../../core/dr-pipeline/src/graph.rs#L47), [`core/dr-pipeline/src/mask.rs:1744`](../../core/dr-pipeline/src/mask.rs#L1744), [`core/dr-pipeline/src/preset.rs:752`](../../core/dr-pipeline/src/preset.rs#L752), [`ui/dr-ui/src/develop/rows.rs:928`](../../ui/dr-ui/src/develop/rows.rs#L928) |
| FR-DEV-3d | [`core/dr-gpu/src/adjust.rs:1014`](../../core/dr-gpu/src/adjust.rs#L1014), [`core/dr-gpu/src/adjust.rs:1107`](../../core/dr-gpu/src/adjust.rs#L1107), [`core/dr-gpu/src/adjust.rs:114`](../../core/dr-gpu/src/adjust.rs#L114), [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/adjust.rs:84`](../../core/dr-gpu/src/adjust.rs#L84), [`core/dr-gpu/tests/capture_sharpen.rs:434`](../../core/dr-gpu/tests/capture_sharpen.rs#L434), [`core/dr-gpu/tests/detail_stage.rs:242`](../../core/dr-gpu/tests/detail_stage.rs#L242), [`core/dr-gpu/tests/local_contrast.rs:558`](../../core/dr-gpu/tests/local_contrast.rs#L558), [`core/dr-gpu/tests/noise_reduction.rs:556`](../../core/dr-gpu/tests/noise_reduction.rs#L556), [`core/dr-pipeline/src/framing.rs:468`](../../core/dr-pipeline/src/framing.rs#L468), [`core/dr-pipeline/src/graph.rs:991`](../../core/dr-pipeline/src/graph.rs#L991), [`core/dr-pipeline/src/operation.rs:32`](../../core/dr-pipeline/src/operation.rs#L32), [`core/dr-pipeline/src/operation.rs:403`](../../core/dr-pipeline/src/operation.rs#L403), [`core/dr-pipeline/src/operation.rs:53`](../../core/dr-pipeline/src/operation.rs#L53), [`core/dr-pipeline/src/operation.rs:71`](../../core/dr-pipeline/src/operation.rs#L71) |
| FR-DEV-3e | [`core/dr-decode/src/base_curve.rs:145`](../../core/dr-decode/src/base_curve.rs#L145), [`core/dr-decode/src/base_curve.rs:158`](../../core/dr-decode/src/base_curve.rs#L158), [`core/dr-decode/src/base_curve.rs:1`](../../core/dr-decode/src/base_curve.rs#L1), [`core/dr-decode/src/base_curve.rs:267`](../../core/dr-decode/src/base_curve.rs#L267), [`core/dr-decode/src/base_curve.rs:347`](../../core/dr-decode/src/base_curve.rs#L347), [`core/dr-decode/src/base_curve.rs:55`](../../core/dr-decode/src/base_curve.rs#L55), [`core/dr-decode/src/lib.rs:127`](../../core/dr-decode/src/lib.rs#L127), [`core/dr-decode/src/lib.rs:777`](../../core/dr-decode/src/lib.rs#L777), [`core/dr-decode/src/lib.rs:817`](../../core/dr-decode/src/lib.rs#L817), [`core/dr-decode/src/profile.rs:102`](../../core/dr-decode/src/profile.rs#L102), [`core/dr-decode/src/profile.rs:151`](../../core/dr-decode/src/profile.rs#L151), [`core/dr-decode/src/profile.rs:1`](../../core/dr-decode/src/profile.rs#L1), [`core/dr-decode/src/profile.rs:235`](../../core/dr-decode/src/profile.rs#L235), [`core/dr-decode/src/profile.rs:286`](../../core/dr-decode/src/profile.rs#L286), [`core/dr-decode/src/profile.rs:343`](../../core/dr-decode/src/profile.rs#L343), [`core/dr-decode/src/profile.rs:473`](../../core/dr-decode/src/profile.rs#L473), [`core/dr-decode/src/profile.rs:507`](../../core/dr-decode/src/profile.rs#L507), [`core/dr-decode/src/profile.rs:678`](../../core/dr-decode/src/profile.rs#L678), [`core/dr-gpu/src/adjust.rs:37`](../../core/dr-gpu/src/adjust.rs#L37), [`core/dr-gpu/src/adjust.rs:995`](../../core/dr-gpu/src/adjust.rs#L995), [`core/dr-gpu/src/demosaic.rs:121`](../../core/dr-gpu/src/demosaic.rs#L121), [`core/dr-gpu/src/demosaic.rs:86`](../../core/dr-gpu/src/demosaic.rs#L86), [`core/dr-gpu/tests/base_curve.rs:1`](../../core/dr-gpu/tests/base_curve.rs#L1), [`core/dr-pipeline/src/operation.rs:1989`](../../core/dr-pipeline/src/operation.rs#L1989), [`core/dr-pipeline/src/operation.rs:2070`](../../core/dr-pipeline/src/operation.rs#L2070), [`core/dr-pipeline/src/operation.rs:2095`](../../core/dr-pipeline/src/operation.rs#L2095), [`core/dr-pipeline/src/operation.rs:2110`](../../core/dr-pipeline/src/operation.rs#L2110), [`core/dr-pipeline/src/operation.rs:2134`](../../core/dr-pipeline/src/operation.rs#L2134), [`core/dr-pipeline/src/operation.rs:310`](../../core/dr-pipeline/src/operation.rs#L310), [`core/dr-pipeline/src/operation.rs:471`](../../core/dr-pipeline/src/operation.rs#L471), [`core/dr-pipeline/src/operation.rs:481`](../../core/dr-pipeline/src/operation.rs#L481), [`core/dr-pipeline/src/operation.rs:769`](../../core/dr-pipeline/src/operation.rs#L769) |
-| FR-DEV-3f | [`core/dr-film/src/bake.rs:271`](../../core/dr-film/src/bake.rs#L271), [`core/dr-film/src/bake.rs:62`](../../core/dr-film/src/bake.rs#L62), [`core/dr-film/src/boolean_grain.rs:1`](../../core/dr-film/src/boolean_grain.rs#L1), [`core/dr-film/src/boolean_grain.rs:78`](../../core/dr-film/src/boolean_grain.rs#L78), [`core/dr-film/src/grain.rs:140`](../../core/dr-film/src/grain.rs#L140), [`core/dr-film/src/grain.rs:1`](../../core/dr-film/src/grain.rs#L1), [`core/dr-film/src/grain.rs:302`](../../core/dr-film/src/grain.rs#L302), [`core/dr-film/src/grain.rs:79`](../../core/dr-film/src/grain.rs#L79), [`core/dr-film/src/lib.rs:160`](../../core/dr-film/src/lib.rs#L160), [`core/dr-film/src/lib.rs:1`](../../core/dr-film/src/lib.rs#L1), [`core/dr-film/src/profile.rs:100`](../../core/dr-film/src/profile.rs#L100), [`core/dr-film/src/profile.rs:142`](../../core/dr-film/src/profile.rs#L142), [`core/dr-film/src/profile.rs:182`](../../core/dr-film/src/profile.rs#L182), [`core/dr-film/src/profile.rs:259`](../../core/dr-film/src/profile.rs#L259), [`core/dr-film/src/profile.rs:502`](../../core/dr-film/src/profile.rs#L502), [`core/dr-film/src/profile.rs:73`](../../core/dr-film/src/profile.rs#L73), [`core/dr-gpu/src/adjust.rs:149`](../../core/dr-gpu/src/adjust.rs#L149), [`core/dr-gpu/src/adjust.rs:206`](../../core/dr-gpu/src/adjust.rs#L206), [`core/dr-gpu/src/adjust.rs:381`](../../core/dr-gpu/src/adjust.rs#L381), [`core/dr-gpu/src/adjust.rs:510`](../../core/dr-gpu/src/adjust.rs#L510), [`core/dr-gpu/src/adjust.rs:77`](../../core/dr-gpu/src/adjust.rs#L77), [`core/dr-gpu/tests/film_sim.rs:195`](../../core/dr-gpu/tests/film_sim.rs#L195), [`core/dr-gpu/tests/film_sim.rs:1`](../../core/dr-gpu/tests/film_sim.rs#L1), [`core/dr-pipeline/src/graph.rs:103`](../../core/dr-pipeline/src/graph.rs#L103), [`core/dr-pipeline/src/graph.rs:168`](../../core/dr-pipeline/src/graph.rs#L168), [`core/dr-pipeline/src/graph.rs:566`](../../core/dr-pipeline/src/graph.rs#L566), [`core/dr-pipeline/src/operation.rs:1317`](../../core/dr-pipeline/src/operation.rs#L1317), [`core/dr-pipeline/src/operation.rs:1345`](../../core/dr-pipeline/src/operation.rs#L1345), [`core/dr-pipeline/src/operation.rs:1391`](../../core/dr-pipeline/src/operation.rs#L1391), [`core/dr-pipeline/src/operation.rs:1989`](../../core/dr-pipeline/src/operation.rs#L1989), [`core/dr-pipeline/src/operation.rs:296`](../../core/dr-pipeline/src/operation.rs#L296), [`core/dr-pipeline/src/operation.rs:310`](../../core/dr-pipeline/src/operation.rs#L310), [`core/dr-pipeline/src/ops/film_sim.rs:102`](../../core/dr-pipeline/src/ops/film_sim.rs#L102), [`core/dr-pipeline/src/ops/film_sim.rs:139`](../../core/dr-pipeline/src/ops/film_sim.rs#L139), [`core/dr-pipeline/src/ops/film_sim.rs:163`](../../core/dr-pipeline/src/ops/film_sim.rs#L163), [`core/dr-pipeline/src/ops/film_sim.rs:1`](../../core/dr-pipeline/src/ops/film_sim.rs#L1), [`core/dr-pipeline/src/ops/film_sim.rs:341`](../../core/dr-pipeline/src/ops/film_sim.rs#L341), [`core/dr-pipeline/src/ops/film_sim.rs:43`](../../core/dr-pipeline/src/ops/film_sim.rs#L43), [`core/dr-pipeline/src/ops/film_sim.rs:97`](../../core/dr-pipeline/src/ops/film_sim.rs#L97), [`core/dr-pipeline/src/sidecar.rs:1077`](../../core/dr-pipeline/src/sidecar.rs#L1077), [`core/dr-pipeline/src/sidecar.rs:133`](../../core/dr-pipeline/src/sidecar.rs#L133), [`core/dr-pipeline/src/sidecar.rs:217`](../../core/dr-pipeline/src/sidecar.rs#L217), [`core/dr-pipeline/src/sidecar.rs:2722`](../../core/dr-pipeline/src/sidecar.rs#L2722), [`core/dr-pipeline/src/sidecar.rs:2798`](../../core/dr-pipeline/src/sidecar.rs#L2798), [`core/dr-pipeline/src/sidecar.rs:595`](../../core/dr-pipeline/src/sidecar.rs#L595), [`core/dr-pipeline/src/sidecar.rs:898`](../../core/dr-pipeline/src/sidecar.rs#L898), [`core/dr-pipeline/src/state.rs:100`](../../core/dr-pipeline/src/state.rs#L100), [`core/dr-pipeline/src/state.rs:115`](../../core/dr-pipeline/src/state.rs#L115), [`core/dr-pipeline/src/state.rs:60`](../../core/dr-pipeline/src/state.rs#L60), [`ui/dr-ui/src/develop/render.rs:1252`](../../ui/dr-ui/src/develop/render.rs#L1252), [`ui/dr-ui/src/develop/render.rs:724`](../../ui/dr-ui/src/develop/render.rs#L724), [`ui/dr-ui/src/develop/render.rs:741`](../../ui/dr-ui/src/develop/render.rs#L741), [`ui/dr-ui/src/develop/render.rs:753`](../../ui/dr-ui/src/develop/render.rs#L753), [`ui/dr-ui/src/develop/render.rs:791`](../../ui/dr-ui/src/develop/render.rs#L791), [`ui/dr-ui/src/develop/render.rs:800`](../../ui/dr-ui/src/develop/render.rs#L800), [`ui/dr-ui/src/develop/render.rs:903`](../../ui/dr-ui/src/develop/render.rs#L903), [`ui/dr-ui/src/develop/render.rs:929`](../../ui/dr-ui/src/develop/render.rs#L929), [`ui/dr-ui/src/develop/session.rs:603`](../../ui/dr-ui/src/develop/session.rs#L603), [`ui/dr-ui/src/develop/tabs.rs:80`](../../ui/dr-ui/src/develop/tabs.rs#L80), [`ui/dr-ui/src/develop_ui.rs:386`](../../ui/dr-ui/src/develop_ui.rs#L386), [`ui/dr-ui/src/lib.rs:834`](../../ui/dr-ui/src/lib.rs#L834), [`ui/dr-ui/src/lib.rs:899`](../../ui/dr-ui/src/lib.rs#L899), [`ui/dr-ui/src/library/sidecar.rs:322`](../../ui/dr-ui/src/library/sidecar.rs#L322), [`ui/dr-ui/src/library/sidecar.rs:49`](../../ui/dr-ui/src/library/sidecar.rs#L49), [`ui/dr-ui/src/presets.rs:422`](../../ui/dr-ui/src/presets.rs#L422), [`ui/dr-ui/ui/adjust.slint:1048`](../../ui/dr-ui/ui/adjust.slint#L1048), [`ui/dr-ui/ui/adjust.slint:1058`](../../ui/dr-ui/ui/adjust.slint#L1058), [`ui/dr-ui/ui/adjust.slint:1276`](../../ui/dr-ui/ui/adjust.slint#L1276) |
+| FR-DEV-3f | [`core/dr-film/src/bake.rs:271`](../../core/dr-film/src/bake.rs#L271), [`core/dr-film/src/bake.rs:62`](../../core/dr-film/src/bake.rs#L62), [`core/dr-film/src/boolean_grain.rs:1`](../../core/dr-film/src/boolean_grain.rs#L1), [`core/dr-film/src/boolean_grain.rs:78`](../../core/dr-film/src/boolean_grain.rs#L78), [`core/dr-film/src/grain.rs:140`](../../core/dr-film/src/grain.rs#L140), [`core/dr-film/src/grain.rs:1`](../../core/dr-film/src/grain.rs#L1), [`core/dr-film/src/grain.rs:302`](../../core/dr-film/src/grain.rs#L302), [`core/dr-film/src/grain.rs:79`](../../core/dr-film/src/grain.rs#L79), [`core/dr-film/src/lib.rs:160`](../../core/dr-film/src/lib.rs#L160), [`core/dr-film/src/lib.rs:1`](../../core/dr-film/src/lib.rs#L1), [`core/dr-film/src/profile.rs:100`](../../core/dr-film/src/profile.rs#L100), [`core/dr-film/src/profile.rs:142`](../../core/dr-film/src/profile.rs#L142), [`core/dr-film/src/profile.rs:182`](../../core/dr-film/src/profile.rs#L182), [`core/dr-film/src/profile.rs:259`](../../core/dr-film/src/profile.rs#L259), [`core/dr-film/src/profile.rs:502`](../../core/dr-film/src/profile.rs#L502), [`core/dr-film/src/profile.rs:73`](../../core/dr-film/src/profile.rs#L73), [`core/dr-gpu/src/adjust.rs:149`](../../core/dr-gpu/src/adjust.rs#L149), [`core/dr-gpu/src/adjust.rs:206`](../../core/dr-gpu/src/adjust.rs#L206), [`core/dr-gpu/src/adjust.rs:381`](../../core/dr-gpu/src/adjust.rs#L381), [`core/dr-gpu/src/adjust.rs:510`](../../core/dr-gpu/src/adjust.rs#L510), [`core/dr-gpu/src/adjust.rs:77`](../../core/dr-gpu/src/adjust.rs#L77), [`core/dr-gpu/tests/film_sim.rs:195`](../../core/dr-gpu/tests/film_sim.rs#L195), [`core/dr-gpu/tests/film_sim.rs:1`](../../core/dr-gpu/tests/film_sim.rs#L1), [`core/dr-pipeline/src/graph.rs:103`](../../core/dr-pipeline/src/graph.rs#L103), [`core/dr-pipeline/src/graph.rs:168`](../../core/dr-pipeline/src/graph.rs#L168), [`core/dr-pipeline/src/graph.rs:566`](../../core/dr-pipeline/src/graph.rs#L566), [`core/dr-pipeline/src/operation.rs:1317`](../../core/dr-pipeline/src/operation.rs#L1317), [`core/dr-pipeline/src/operation.rs:1345`](../../core/dr-pipeline/src/operation.rs#L1345), [`core/dr-pipeline/src/operation.rs:1391`](../../core/dr-pipeline/src/operation.rs#L1391), [`core/dr-pipeline/src/operation.rs:1989`](../../core/dr-pipeline/src/operation.rs#L1989), [`core/dr-pipeline/src/operation.rs:296`](../../core/dr-pipeline/src/operation.rs#L296), [`core/dr-pipeline/src/operation.rs:310`](../../core/dr-pipeline/src/operation.rs#L310), [`core/dr-pipeline/src/ops/film_sim.rs:102`](../../core/dr-pipeline/src/ops/film_sim.rs#L102), [`core/dr-pipeline/src/ops/film_sim.rs:139`](../../core/dr-pipeline/src/ops/film_sim.rs#L139), [`core/dr-pipeline/src/ops/film_sim.rs:163`](../../core/dr-pipeline/src/ops/film_sim.rs#L163), [`core/dr-pipeline/src/ops/film_sim.rs:1`](../../core/dr-pipeline/src/ops/film_sim.rs#L1), [`core/dr-pipeline/src/ops/film_sim.rs:341`](../../core/dr-pipeline/src/ops/film_sim.rs#L341), [`core/dr-pipeline/src/ops/film_sim.rs:43`](../../core/dr-pipeline/src/ops/film_sim.rs#L43), [`core/dr-pipeline/src/ops/film_sim.rs:97`](../../core/dr-pipeline/src/ops/film_sim.rs#L97), [`core/dr-pipeline/src/sidecar.rs:1077`](../../core/dr-pipeline/src/sidecar.rs#L1077), [`core/dr-pipeline/src/sidecar.rs:133`](../../core/dr-pipeline/src/sidecar.rs#L133), [`core/dr-pipeline/src/sidecar.rs:217`](../../core/dr-pipeline/src/sidecar.rs#L217), [`core/dr-pipeline/src/sidecar.rs:2722`](../../core/dr-pipeline/src/sidecar.rs#L2722), [`core/dr-pipeline/src/sidecar.rs:2798`](../../core/dr-pipeline/src/sidecar.rs#L2798), [`core/dr-pipeline/src/sidecar.rs:595`](../../core/dr-pipeline/src/sidecar.rs#L595), [`core/dr-pipeline/src/sidecar.rs:898`](../../core/dr-pipeline/src/sidecar.rs#L898), [`core/dr-pipeline/src/state.rs:100`](../../core/dr-pipeline/src/state.rs#L100), [`core/dr-pipeline/src/state.rs:115`](../../core/dr-pipeline/src/state.rs#L115), [`core/dr-pipeline/src/state.rs:60`](../../core/dr-pipeline/src/state.rs#L60), [`ui/dr-ui/src/develop/render.rs:1252`](../../ui/dr-ui/src/develop/render.rs#L1252), [`ui/dr-ui/src/develop/render.rs:724`](../../ui/dr-ui/src/develop/render.rs#L724), [`ui/dr-ui/src/develop/render.rs:741`](../../ui/dr-ui/src/develop/render.rs#L741), [`ui/dr-ui/src/develop/render.rs:753`](../../ui/dr-ui/src/develop/render.rs#L753), [`ui/dr-ui/src/develop/render.rs:791`](../../ui/dr-ui/src/develop/render.rs#L791), [`ui/dr-ui/src/develop/render.rs:800`](../../ui/dr-ui/src/develop/render.rs#L800), [`ui/dr-ui/src/develop/render.rs:903`](../../ui/dr-ui/src/develop/render.rs#L903), [`ui/dr-ui/src/develop/render.rs:929`](../../ui/dr-ui/src/develop/render.rs#L929), [`ui/dr-ui/src/develop/session.rs:603`](../../ui/dr-ui/src/develop/session.rs#L603), [`ui/dr-ui/src/develop/tabs.rs:80`](../../ui/dr-ui/src/develop/tabs.rs#L80), [`ui/dr-ui/src/develop_ui.rs:386`](../../ui/dr-ui/src/develop_ui.rs#L386), [`ui/dr-ui/src/lib.rs:835`](../../ui/dr-ui/src/lib.rs#L835), [`ui/dr-ui/src/lib.rs:900`](../../ui/dr-ui/src/lib.rs#L900), [`ui/dr-ui/src/library/sidecar.rs:322`](../../ui/dr-ui/src/library/sidecar.rs#L322), [`ui/dr-ui/src/library/sidecar.rs:49`](../../ui/dr-ui/src/library/sidecar.rs#L49), [`ui/dr-ui/src/presets.rs:422`](../../ui/dr-ui/src/presets.rs#L422), [`ui/dr-ui/ui/adjust.slint:1070`](../../ui/dr-ui/ui/adjust.slint#L1070), [`ui/dr-ui/ui/adjust.slint:1080`](../../ui/dr-ui/ui/adjust.slint#L1080), [`ui/dr-ui/ui/adjust.slint:1298`](../../ui/dr-ui/ui/adjust.slint#L1298) |
| FR-DEV-3h | [`core/dr-decode/src/lib.rs:450`](../../core/dr-decode/src/lib.rs#L450), [`core/dr-decode/src/preview.rs:29`](../../core/dr-decode/src/preview.rs#L29), [`core/dr-pipeline/src/framing.rs:1477`](../../core/dr-pipeline/src/framing.rs#L1477), [`core/dr-pipeline/src/framing.rs:486`](../../core/dr-pipeline/src/framing.rs#L486), [`core/dr-pipeline/src/framing.rs:704`](../../core/dr-pipeline/src/framing.rs#L704), [`core/dr-types/src/lib.rs:339`](../../core/dr-types/src/lib.rs#L339), [`core/dr-types/src/lib.rs:447`](../../core/dr-types/src/lib.rs#L447), [`core/dr-types/src/lib.rs:459`](../../core/dr-types/src/lib.rs#L459), [`core/dr-types/src/lib.rs:475`](../../core/dr-types/src/lib.rs#L475), [`ui/dr-ui/src/develop/masks.rs:280`](../../ui/dr-ui/src/develop/masks.rs#L280), [`ui/dr-ui/src/develop/segmentation.rs:114`](../../ui/dr-ui/src/develop/segmentation.rs#L114), [`ui/dr-ui/src/segmentation.rs:499`](../../ui/dr-ui/src/segmentation.rs#L499) |
| FR-DEV-3i | [`core/dr-pipeline/src/mask.rs:558`](../../core/dr-pipeline/src/mask.rs#L558), [`core/dr-segment/src/lib.rs:1`](../../core/dr-segment/src/lib.rs#L1), [`ui/dr-ui/src/segmentation.rs:1`](../../ui/dr-ui/src/segmentation.rs#L1) |
| FR-DEV-4 | [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/lib.rs:368`](../../core/dr-gpu/src/lib.rs#L368), [`ui/dr-ui/ui/crop.slint:1`](../../ui/dr-ui/ui/crop.slint#L1) |
-| FR-DEV-5 | [`core/dr-pipeline/src/graph.rs:1440`](../../core/dr-pipeline/src/graph.rs#L1440), [`core/dr-pipeline/src/graph.rs:587`](../../core/dr-pipeline/src/graph.rs#L587), [`core/dr-pipeline/src/graph.rs:640`](../../core/dr-pipeline/src/graph.rs#L640), [`core/dr-pipeline/src/history.rs:102`](../../core/dr-pipeline/src/history.rs#L102), [`core/dr-pipeline/src/history.rs:110`](../../core/dr-pipeline/src/history.rs#L110), [`core/dr-pipeline/src/history.rs:127`](../../core/dr-pipeline/src/history.rs#L127), [`core/dr-pipeline/src/history.rs:184`](../../core/dr-pipeline/src/history.rs#L184), [`core/dr-pipeline/src/history.rs:1`](../../core/dr-pipeline/src/history.rs#L1), [`core/dr-pipeline/src/history.rs:214`](../../core/dr-pipeline/src/history.rs#L214), [`core/dr-pipeline/src/history.rs:234`](../../core/dr-pipeline/src/history.rs#L234), [`core/dr-pipeline/src/history.rs:293`](../../core/dr-pipeline/src/history.rs#L293), [`core/dr-pipeline/src/history.rs:479`](../../core/dr-pipeline/src/history.rs#L479), [`core/dr-pipeline/src/history.rs:489`](../../core/dr-pipeline/src/history.rs#L489), [`core/dr-pipeline/src/history.rs:499`](../../core/dr-pipeline/src/history.rs#L499), [`core/dr-pipeline/src/history.rs:526`](../../core/dr-pipeline/src/history.rs#L526), [`core/dr-pipeline/src/history.rs:86`](../../core/dr-pipeline/src/history.rs#L86), [`core/dr-pipeline/src/sidecar.rs:1067`](../../core/dr-pipeline/src/sidecar.rs#L1067), [`core/dr-pipeline/src/sidecar.rs:147`](../../core/dr-pipeline/src/sidecar.rs#L147), [`core/dr-pipeline/src/sidecar.rs:2513`](../../core/dr-pipeline/src/sidecar.rs#L2513), [`core/dr-pipeline/src/sidecar.rs:2549`](../../core/dr-pipeline/src/sidecar.rs#L2549), [`core/dr-pipeline/src/sidecar.rs:2561`](../../core/dr-pipeline/src/sidecar.rs#L2561), [`core/dr-pipeline/src/sidecar.rs:318`](../../core/dr-pipeline/src/sidecar.rs#L318), [`core/dr-pipeline/src/sidecar.rs:713`](../../core/dr-pipeline/src/sidecar.rs#L713), [`core/dr-pipeline/src/sidecar.rs:729`](../../core/dr-pipeline/src/sidecar.rs#L729), [`core/dr-pipeline/src/sidecar.rs:876`](../../core/dr-pipeline/src/sidecar.rs#L876), [`core/dr-pipeline/src/state.rs:1`](../../core/dr-pipeline/src/state.rs#L1), [`core/dr-pipeline/src/state.rs:75`](../../core/dr-pipeline/src/state.rs#L75), [`ui/dr-ui/src/develop/framing.rs:870`](../../ui/dr-ui/src/develop/framing.rs#L870), [`ui/dr-ui/src/develop/history.rs:11`](../../ui/dr-ui/src/develop/history.rs#L11), [`ui/dr-ui/src/develop/history.rs:152`](../../ui/dr-ui/src/develop/history.rs#L152), [`ui/dr-ui/src/develop/history.rs:165`](../../ui/dr-ui/src/develop/history.rs#L165), [`ui/dr-ui/src/develop/history.rs:178`](../../ui/dr-ui/src/develop/history.rs#L178), [`ui/dr-ui/src/develop/history.rs:190`](../../ui/dr-ui/src/develop/history.rs#L190), [`ui/dr-ui/src/develop/history.rs:206`](../../ui/dr-ui/src/develop/history.rs#L206), [`ui/dr-ui/src/develop/history.rs:238`](../../ui/dr-ui/src/develop/history.rs#L238), [`ui/dr-ui/src/develop/history.rs:242`](../../ui/dr-ui/src/develop/history.rs#L242), [`ui/dr-ui/src/develop/history.rs:261`](../../ui/dr-ui/src/develop/history.rs#L261), [`ui/dr-ui/src/develop/history.rs:277`](../../ui/dr-ui/src/develop/history.rs#L277), [`ui/dr-ui/src/develop/history.rs:299`](../../ui/dr-ui/src/develop/history.rs#L299), [`ui/dr-ui/src/develop/history.rs:29`](../../ui/dr-ui/src/develop/history.rs#L29), [`ui/dr-ui/src/develop/history.rs:359`](../../ui/dr-ui/src/develop/history.rs#L359), [`ui/dr-ui/src/develop/history.rs:68`](../../ui/dr-ui/src/develop/history.rs#L68), [`ui/dr-ui/src/develop/history.rs:82`](../../ui/dr-ui/src/develop/history.rs#L82), [`ui/dr-ui/src/develop/history.rs:93`](../../ui/dr-ui/src/develop/history.rs#L93), [`ui/dr-ui/src/develop/render.rs:753`](../../ui/dr-ui/src/develop/render.rs#L753), [`ui/dr-ui/src/develop/render.rs:929`](../../ui/dr-ui/src/develop/render.rs#L929), [`ui/dr-ui/src/develop/render.rs:965`](../../ui/dr-ui/src/develop/render.rs#L965), [`ui/dr-ui/src/develop/session.rs:80`](../../ui/dr-ui/src/develop/session.rs#L80), [`ui/dr-ui/src/develop/session.rs:89`](../../ui/dr-ui/src/develop/session.rs#L89), [`ui/dr-ui/src/develop/white_balance.rs:11`](../../ui/dr-ui/src/develop/white_balance.rs#L11), [`ui/dr-ui/src/develop/white_balance.rs:162`](../../ui/dr-ui/src/develop/white_balance.rs#L162), [`ui/dr-ui/src/develop_ui.rs:665`](../../ui/dr-ui/src/develop_ui.rs#L665), [`ui/dr-ui/src/develop_ui.rs:685`](../../ui/dr-ui/src/develop_ui.rs#L685), [`ui/dr-ui/src/labels.rs:12`](../../ui/dr-ui/src/labels.rs#L12), [`ui/dr-ui/src/labels.rs:284`](../../ui/dr-ui/src/labels.rs#L284), [`ui/dr-ui/src/labels.rs:31`](../../ui/dr-ui/src/labels.rs#L31), [`ui/dr-ui/src/lib.rs:2155`](../../ui/dr-ui/src/lib.rs#L2155), [`ui/dr-ui/src/lib.rs:2160`](../../ui/dr-ui/src/lib.rs#L2160), [`ui/dr-ui/src/lib.rs:2192`](../../ui/dr-ui/src/lib.rs#L2192), [`ui/dr-ui/src/lib.rs:2201`](../../ui/dr-ui/src/lib.rs#L2201), [`ui/dr-ui/src/lib.rs:2218`](../../ui/dr-ui/src/lib.rs#L2218), [`ui/dr-ui/src/library/sidecar.rs:348`](../../ui/dr-ui/src/library/sidecar.rs#L348), [`ui/dr-ui/src/library/sidecar.rs:58`](../../ui/dr-ui/src/library/sidecar.rs#L58), [`ui/dr-ui/src/presets.rs:1678`](../../ui/dr-ui/src/presets.rs#L1678), [`ui/dr-ui/src/presets.rs:373`](../../ui/dr-ui/src/presets.rs#L373), [`ui/dr-ui/src/presets.rs:437`](../../ui/dr-ui/src/presets.rs#L437), [`ui/dr-ui/src/presets.rs:557`](../../ui/dr-ui/src/presets.rs#L557), [`ui/dr-ui/ui/history.slint:192`](../../ui/dr-ui/ui/history.slint#L192), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:219`](../../ui/dr-ui/ui/history.slint#L219), [`ui/dr-ui/ui/history.slint:304`](../../ui/dr-ui/ui/history.slint#L304), [`ui/dr-ui/ui/history.slint:43`](../../ui/dr-ui/ui/history.slint#L43), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53) |
-| FR-DEV-6 | [`core/dr-pipeline/src/preset.rs:1`](../../core/dr-pipeline/src/preset.rs#L1), [`core/dr-pipeline/src/preset.rs:390`](../../core/dr-pipeline/src/preset.rs#L390), [`core/dr-pipeline/src/preset.rs:423`](../../core/dr-pipeline/src/preset.rs#L423), [`core/dr-pipeline/src/starter.rs:1`](../../core/dr-pipeline/src/starter.rs#L1), [`core/dr-preset-xmp/src/lib.rs:1`](../../core/dr-preset-xmp/src/lib.rs#L1), [`core/dr-types/src/settings.rs:443`](../../core/dr-types/src/settings.rs#L443), [`ui/dr-ui/src/develop/session.rs:560`](../../ui/dr-ui/src/develop/session.rs#L560), [`ui/dr-ui/src/develop/session.rs:581`](../../ui/dr-ui/src/develop/session.rs#L581), [`ui/dr-ui/src/develop_ui.rs:167`](../../ui/dr-ui/src/develop_ui.rs#L167), [`ui/dr-ui/src/develop_ui.rs:196`](../../ui/dr-ui/src/develop_ui.rs#L196), [`ui/dr-ui/src/lib.rs:1271`](../../ui/dr-ui/src/lib.rs#L1271), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:39`](../../ui/dr-ui/src/library/sidecar.rs#L39), [`ui/dr-ui/src/library/thumbnails_fetch.rs:413`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L413), [`ui/dr-ui/src/library_ui/controller.rs:625`](../../ui/dr-ui/src/library_ui/controller.rs#L625), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:474`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L474), [`ui/dr-ui/src/library_ui/window.rs:553`](../../ui/dr-ui/src/library_ui/window.rs#L553), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/presets.rs:1`](../../ui/dr-ui/src/presets.rs#L1), [`ui/dr-ui/src/presets.rs:707`](../../ui/dr-ui/src/presets.rs#L707), [`ui/dr-ui/src/presets.rs:741`](../../ui/dr-ui/src/presets.rs#L741), [`ui/dr-ui/ui/adjust.slint:919`](../../ui/dr-ui/ui/adjust.slint#L919), [`ui/dr-ui/ui/adjust.slint:944`](../../ui/dr-ui/ui/adjust.slint#L944), [`ui/dr-ui/ui/app.slint:1364`](../../ui/dr-ui/ui/app.slint#L1364), [`ui/dr-ui/ui/app.slint:2284`](../../ui/dr-ui/ui/app.slint#L2284), [`ui/dr-ui/ui/app.slint:3049`](../../ui/dr-ui/ui/app.slint#L3049), [`ui/dr-ui/ui/app.slint:3102`](../../ui/dr-ui/ui/app.slint#L3102), [`ui/dr-ui/ui/app.slint:485`](../../ui/dr-ui/ui/app.slint#L485), [`ui/dr-ui/ui/app.slint:496`](../../ui/dr-ui/ui/app.slint#L496), [`ui/dr-ui/ui/app.slint:650`](../../ui/dr-ui/ui/app.slint#L650), [`ui/dr-ui/ui/develop.slint:199`](../../ui/dr-ui/ui/develop.slint#L199), [`ui/dr-ui/ui/library.slint:1924`](../../ui/dr-ui/ui/library.slint#L1924), [`ui/dr-ui/ui/library.slint:1930`](../../ui/dr-ui/ui/library.slint#L1930), [`ui/dr-ui/ui/library.slint:3115`](../../ui/dr-ui/ui/library.slint#L3115), [`ui/dr-ui/ui/library.slint:4936`](../../ui/dr-ui/ui/library.slint#L4936), [`ui/dr-ui/ui/library.slint:4954`](../../ui/dr-ui/ui/library.slint#L4954), [`ui/dr-ui/ui/presets.slint:105`](../../ui/dr-ui/ui/presets.slint#L105), [`ui/dr-ui/ui/presets.slint:113`](../../ui/dr-ui/ui/presets.slint#L113), [`ui/dr-ui/ui/presets.slint:19`](../../ui/dr-ui/ui/presets.slint#L19), [`ui/dr-ui/ui/presets.slint:276`](../../ui/dr-ui/ui/presets.slint#L276), [`ui/dr-ui/ui/presets.slint:297`](../../ui/dr-ui/ui/presets.slint#L297), [`ui/dr-ui/ui/presets.slint:332`](../../ui/dr-ui/ui/presets.slint#L332), [`ui/dr-ui/ui/presets.slint:5`](../../ui/dr-ui/ui/presets.slint#L5), [`ui/dr-ui/ui/presets.slint:60`](../../ui/dr-ui/ui/presets.slint#L60), [`ui/dr-ui/ui/settings.slint:120`](../../ui/dr-ui/ui/settings.slint#L120), [`ui/dr-ui/ui/settings.slint:642`](../../ui/dr-ui/ui/settings.slint#L642) |
-| FR-DEV-7 | [`core/dr-pipeline/src/history.rs:214`](../../core/dr-pipeline/src/history.rs#L214), [`core/dr-pipeline/src/history.rs:499`](../../core/dr-pipeline/src/history.rs#L499), [`core/dr-pipeline/src/history.rs:526`](../../core/dr-pipeline/src/history.rs#L526), [`ui/dr-ui/src/develop/history.rs:107`](../../ui/dr-ui/src/develop/history.rs#L107), [`ui/dr-ui/src/develop/history.rs:124`](../../ui/dr-ui/src/develop/history.rs#L124), [`ui/dr-ui/src/develop/history.rs:206`](../../ui/dr-ui/src/develop/history.rs#L206), [`ui/dr-ui/src/develop/history.rs:238`](../../ui/dr-ui/src/develop/history.rs#L238), [`ui/dr-ui/src/develop/history.rs:359`](../../ui/dr-ui/src/develop/history.rs#L359), [`ui/dr-ui/src/develop/render.rs:535`](../../ui/dr-ui/src/develop/render.rs#L535), [`ui/dr-ui/src/develop/render.rs:576`](../../ui/dr-ui/src/develop/render.rs#L576), [`ui/dr-ui/src/develop/render.rs:965`](../../ui/dr-ui/src/develop/render.rs#L965), [`ui/dr-ui/src/develop/session.rs:105`](../../ui/dr-ui/src/develop/session.rs#L105), [`ui/dr-ui/src/develop_ui.rs:606`](../../ui/dr-ui/src/develop_ui.rs#L606), [`ui/dr-ui/src/develop_ui.rs:665`](../../ui/dr-ui/src/develop_ui.rs#L665), [`ui/dr-ui/src/develop_ui.rs:737`](../../ui/dr-ui/src/develop_ui.rs#L737), [`ui/dr-ui/src/lib.rs:2201`](../../ui/dr-ui/src/lib.rs#L2201), [`ui/dr-ui/src/lib.rs:2278`](../../ui/dr-ui/src/lib.rs#L2278), [`ui/dr-ui/src/lib.rs:2292`](../../ui/dr-ui/src/lib.rs#L2292), [`ui/dr-ui/src/lib.rs:432`](../../ui/dr-ui/src/lib.rs#L432), [`ui/dr-ui/ui/app.slint:189`](../../ui/dr-ui/ui/app.slint#L189), [`ui/dr-ui/ui/app.slint:2175`](../../ui/dr-ui/ui/app.slint#L2175), [`ui/dr-ui/ui/app.slint:2199`](../../ui/dr-ui/ui/app.slint#L2199), [`ui/dr-ui/ui/app.slint:2610`](../../ui/dr-ui/ui/app.slint#L2610), [`ui/dr-ui/ui/history.slint:103`](../../ui/dr-ui/ui/history.slint#L103), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:227`](../../ui/dr-ui/ui/history.slint#L227), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) |
-| FR-DEV-8 | [`core/dr-gpu/src/detail.rs:405`](../../core/dr-gpu/src/detail.rs#L405), [`core/dr-gpu/src/detail.rs:623`](../../core/dr-gpu/src/detail.rs#L623), [`core/dr-gpu/tests/detail_instances.rs:1`](../../core/dr-gpu/tests/detail_instances.rs#L1), [`core/dr-gpu/tests/spot_removal.rs:1`](../../core/dr-gpu/tests/spot_removal.rs#L1), [`core/dr-pipeline/src/detail.rs:410`](../../core/dr-pipeline/src/detail.rs#L410), [`core/dr-pipeline/src/detail.rs:434`](../../core/dr-pipeline/src/detail.rs#L434), [`core/dr-pipeline/src/detail.rs:469`](../../core/dr-pipeline/src/detail.rs#L469), [`core/dr-pipeline/src/detail.rs:555`](../../core/dr-pipeline/src/detail.rs#L555), [`core/dr-pipeline/src/graph.rs:1092`](../../core/dr-pipeline/src/graph.rs#L1092), [`core/dr-pipeline/src/graph.rs:115`](../../core/dr-pipeline/src/graph.rs#L115), [`core/dr-pipeline/src/graph.rs:247`](../../core/dr-pipeline/src/graph.rs#L247), [`core/dr-pipeline/src/operation.rs:330`](../../core/dr-pipeline/src/operation.rs#L330), [`core/dr-pipeline/src/operation.rs:717`](../../core/dr-pipeline/src/operation.rs#L717), [`core/dr-pipeline/src/sidecar.rs:1104`](../../core/dr-pipeline/src/sidecar.rs#L1104), [`core/dr-pipeline/src/sidecar.rs:1158`](../../core/dr-pipeline/src/sidecar.rs#L1158), [`core/dr-pipeline/src/sidecar.rs:1188`](../../core/dr-pipeline/src/sidecar.rs#L1188), [`core/dr-pipeline/src/sidecar.rs:233`](../../core/dr-pipeline/src/sidecar.rs#L233), [`core/dr-pipeline/src/sidecar.rs:410`](../../core/dr-pipeline/src/sidecar.rs#L410), [`core/dr-pipeline/src/sidecar.rs:910`](../../core/dr-pipeline/src/sidecar.rs#L910), [`core/dr-pipeline/src/spot.rs:115`](../../core/dr-pipeline/src/spot.rs#L115), [`core/dr-pipeline/src/spot.rs:151`](../../core/dr-pipeline/src/spot.rs#L151), [`core/dr-pipeline/src/spot.rs:1`](../../core/dr-pipeline/src/spot.rs#L1), [`core/dr-pipeline/src/spot.rs:207`](../../core/dr-pipeline/src/spot.rs#L207), [`core/dr-pipeline/src/spot.rs:387`](../../core/dr-pipeline/src/spot.rs#L387), [`core/dr-pipeline/src/spot.rs:472`](../../core/dr-pipeline/src/spot.rs#L472), [`core/dr-pipeline/src/spot.rs:582`](../../core/dr-pipeline/src/spot.rs#L582), [`core/dr-pipeline/src/spot.rs:673`](../../core/dr-pipeline/src/spot.rs#L673), [`core/dr-pipeline/src/state.rs:103`](../../core/dr-pipeline/src/state.rs#L103), [`core/dr-pipeline/tests/spot_sidecar.rs:1`](../../core/dr-pipeline/tests/spot_sidecar.rs#L1), [`core/dr-pipeline/tests/spots.rs:1`](../../core/dr-pipeline/tests/spots.rs#L1), [`ui/dr-ui/src/develop/repairs.rs:114`](../../ui/dr-ui/src/develop/repairs.rs#L114), [`ui/dr-ui/src/develop/repairs.rs:11`](../../ui/dr-ui/src/develop/repairs.rs#L11), [`ui/dr-ui/src/develop/repairs.rs:197`](../../ui/dr-ui/src/develop/repairs.rs#L197), [`ui/dr-ui/src/develop/repairs.rs:211`](../../ui/dr-ui/src/develop/repairs.rs#L211), [`ui/dr-ui/src/develop/repairs.rs:49`](../../ui/dr-ui/src/develop/repairs.rs#L49), [`ui/dr-ui/src/develop/session.rs:216`](../../ui/dr-ui/src/develop/session.rs#L216), [`ui/dr-ui/src/develop_ui.rs:892`](../../ui/dr-ui/src/develop_ui.rs#L892), [`ui/dr-ui/src/labels.rs:80`](../../ui/dr-ui/src/labels.rs#L80), [`ui/dr-ui/src/lib.rs:2236`](../../ui/dr-ui/src/lib.rs#L2236), [`ui/dr-ui/src/lib.rs:474`](../../ui/dr-ui/src/lib.rs#L474), [`ui/dr-ui/src/spots_ui.rs:19`](../../ui/dr-ui/src/spots_ui.rs#L19), [`ui/dr-ui/src/spots_ui.rs:1`](../../ui/dr-ui/src/spots_ui.rs#L1), [`ui/dr-ui/src/spots_ui.rs:265`](../../ui/dr-ui/src/spots_ui.rs#L265), [`ui/dr-ui/ui/app.slint:2028`](../../ui/dr-ui/ui/app.slint#L2028), [`ui/dr-ui/ui/app.slint:2247`](../../ui/dr-ui/ui/app.slint#L2247), [`ui/dr-ui/ui/app.slint:2955`](../../ui/dr-ui/ui/app.slint#L2955), [`ui/dr-ui/ui/icons.slint:366`](../../ui/dr-ui/ui/icons.slint#L366), [`ui/dr-ui/ui/session.slint:102`](../../ui/dr-ui/ui/session.slint#L102), [`ui/dr-ui/ui/session.slint:52`](../../ui/dr-ui/ui/session.slint#L52), [`ui/dr-ui/ui/spots.slint:191`](../../ui/dr-ui/ui/spots.slint#L191), [`ui/dr-ui/ui/spots.slint:49`](../../ui/dr-ui/ui/spots.slint#L49), [`ui/dr-ui/ui/spots.slint:6`](../../ui/dr-ui/ui/spots.slint#L6), [`ui/dr-ui/ui/spots.slint:91`](../../ui/dr-ui/ui/spots.slint#L91) |
-| FR-DSP-1 | [`core/dr-gpu/src/adjust.rs:2422`](../../core/dr-gpu/src/adjust.rs#L2422), [`core/dr-gpu/src/adjust.rs:2499`](../../core/dr-gpu/src/adjust.rs#L2499), [`core/dr-gpu/src/adjust.rs:2584`](../../core/dr-gpu/src/adjust.rs#L2584), [`core/dr-gpu/src/adjust.rs:54`](../../core/dr-gpu/src/adjust.rs#L54), [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/lib.rs:174`](../../core/dr-gpu/src/lib.rs#L174), [`core/dr-gpu/src/lib.rs:194`](../../core/dr-gpu/src/lib.rs#L194), [`core/dr-gpu/src/lib.rs:72`](../../core/dr-gpu/src/lib.rs#L72), [`core/dr-gpu/src/lib.rs:95`](../../core/dr-gpu/src/lib.rs#L95), [`core/dr-gpu/tests/capture_sharpen.rs:200`](../../core/dr-gpu/tests/capture_sharpen.rs#L200), [`core/dr-gpu/tests/detail_stage.rs:328`](../../core/dr-gpu/tests/detail_stage.rs#L328), [`core/dr-gpu/tests/local_contrast.rs:264`](../../core/dr-gpu/tests/local_contrast.rs#L264), [`core/dr-gpu/tests/noise_reduction.rs:378`](../../core/dr-gpu/tests/noise_reduction.rs#L378), [`core/dr-pipeline/src/detail.rs:136`](../../core/dr-pipeline/src/detail.rs#L136), [`core/dr-pipeline/src/detail.rs:524`](../../core/dr-pipeline/src/detail.rs#L524), [`core/dr-pipeline/src/graph.rs:922`](../../core/dr-pipeline/src/graph.rs#L922), [`core/dr-pipeline/src/graph.rs:952`](../../core/dr-pipeline/src/graph.rs#L952), [`core/dr-pipeline/src/ops/capture_sharpen.rs:1`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L1), [`core/dr-pipeline/src/ops/capture_sharpen.rs:659`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L659), [`core/dr-pipeline/src/ops/dehaze.rs:1`](../../core/dr-pipeline/src/ops/dehaze.rs#L1), [`core/dr-pipeline/src/ops/dehaze.rs:592`](../../core/dr-pipeline/src/ops/dehaze.rs#L592), [`core/dr-pipeline/src/ops/local_contrast.rs:1`](../../core/dr-pipeline/src/ops/local_contrast.rs#L1), [`core/dr-pipeline/src/ops/local_contrast.rs:971`](../../core/dr-pipeline/src/ops/local_contrast.rs#L971), [`core/dr-pipeline/src/ops/noise_reduction.rs:700`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L700), [`core/dr-pipeline/src/spot.rs:673`](../../core/dr-pipeline/src/spot.rs#L673), [`ui/dr-ui/src/develop/framing.rs:594`](../../ui/dr-ui/src/develop/framing.rs#L594), [`ui/dr-ui/src/develop/mod.rs:55`](../../ui/dr-ui/src/develop/mod.rs#L55), [`ui/dr-ui/src/develop/render.rs:1022`](../../ui/dr-ui/src/develop/render.rs#L1022), [`ui/dr-ui/src/develop/render.rs:1056`](../../ui/dr-ui/src/develop/render.rs#L1056), [`ui/dr-ui/src/develop/render.rs:1194`](../../ui/dr-ui/src/develop/render.rs#L1194), [`ui/dr-ui/src/develop/render.rs:217`](../../ui/dr-ui/src/develop/render.rs#L217), [`ui/dr-ui/src/develop/render.rs:79`](../../ui/dr-ui/src/develop/render.rs#L79), [`ui/dr-ui/src/lib.rs:1055`](../../ui/dr-ui/src/lib.rs#L1055), [`ui/dr-ui/src/lib.rs:106`](../../ui/dr-ui/src/lib.rs#L106), [`ui/dr-ui/src/lib.rs:1114`](../../ui/dr-ui/src/lib.rs#L1114) |
+| FR-DEV-5 | [`core/dr-pipeline/src/graph.rs:1440`](../../core/dr-pipeline/src/graph.rs#L1440), [`core/dr-pipeline/src/graph.rs:587`](../../core/dr-pipeline/src/graph.rs#L587), [`core/dr-pipeline/src/graph.rs:640`](../../core/dr-pipeline/src/graph.rs#L640), [`core/dr-pipeline/src/history.rs:102`](../../core/dr-pipeline/src/history.rs#L102), [`core/dr-pipeline/src/history.rs:110`](../../core/dr-pipeline/src/history.rs#L110), [`core/dr-pipeline/src/history.rs:127`](../../core/dr-pipeline/src/history.rs#L127), [`core/dr-pipeline/src/history.rs:184`](../../core/dr-pipeline/src/history.rs#L184), [`core/dr-pipeline/src/history.rs:1`](../../core/dr-pipeline/src/history.rs#L1), [`core/dr-pipeline/src/history.rs:214`](../../core/dr-pipeline/src/history.rs#L214), [`core/dr-pipeline/src/history.rs:234`](../../core/dr-pipeline/src/history.rs#L234), [`core/dr-pipeline/src/history.rs:293`](../../core/dr-pipeline/src/history.rs#L293), [`core/dr-pipeline/src/history.rs:479`](../../core/dr-pipeline/src/history.rs#L479), [`core/dr-pipeline/src/history.rs:489`](../../core/dr-pipeline/src/history.rs#L489), [`core/dr-pipeline/src/history.rs:499`](../../core/dr-pipeline/src/history.rs#L499), [`core/dr-pipeline/src/history.rs:526`](../../core/dr-pipeline/src/history.rs#L526), [`core/dr-pipeline/src/history.rs:86`](../../core/dr-pipeline/src/history.rs#L86), [`core/dr-pipeline/src/sidecar.rs:1067`](../../core/dr-pipeline/src/sidecar.rs#L1067), [`core/dr-pipeline/src/sidecar.rs:147`](../../core/dr-pipeline/src/sidecar.rs#L147), [`core/dr-pipeline/src/sidecar.rs:2513`](../../core/dr-pipeline/src/sidecar.rs#L2513), [`core/dr-pipeline/src/sidecar.rs:2549`](../../core/dr-pipeline/src/sidecar.rs#L2549), [`core/dr-pipeline/src/sidecar.rs:2561`](../../core/dr-pipeline/src/sidecar.rs#L2561), [`core/dr-pipeline/src/sidecar.rs:318`](../../core/dr-pipeline/src/sidecar.rs#L318), [`core/dr-pipeline/src/sidecar.rs:713`](../../core/dr-pipeline/src/sidecar.rs#L713), [`core/dr-pipeline/src/sidecar.rs:729`](../../core/dr-pipeline/src/sidecar.rs#L729), [`core/dr-pipeline/src/sidecar.rs:876`](../../core/dr-pipeline/src/sidecar.rs#L876), [`core/dr-pipeline/src/state.rs:1`](../../core/dr-pipeline/src/state.rs#L1), [`core/dr-pipeline/src/state.rs:75`](../../core/dr-pipeline/src/state.rs#L75), [`ui/dr-ui/src/develop/framing.rs:870`](../../ui/dr-ui/src/develop/framing.rs#L870), [`ui/dr-ui/src/develop/history.rs:11`](../../ui/dr-ui/src/develop/history.rs#L11), [`ui/dr-ui/src/develop/history.rs:152`](../../ui/dr-ui/src/develop/history.rs#L152), [`ui/dr-ui/src/develop/history.rs:165`](../../ui/dr-ui/src/develop/history.rs#L165), [`ui/dr-ui/src/develop/history.rs:178`](../../ui/dr-ui/src/develop/history.rs#L178), [`ui/dr-ui/src/develop/history.rs:190`](../../ui/dr-ui/src/develop/history.rs#L190), [`ui/dr-ui/src/develop/history.rs:206`](../../ui/dr-ui/src/develop/history.rs#L206), [`ui/dr-ui/src/develop/history.rs:238`](../../ui/dr-ui/src/develop/history.rs#L238), [`ui/dr-ui/src/develop/history.rs:242`](../../ui/dr-ui/src/develop/history.rs#L242), [`ui/dr-ui/src/develop/history.rs:261`](../../ui/dr-ui/src/develop/history.rs#L261), [`ui/dr-ui/src/develop/history.rs:277`](../../ui/dr-ui/src/develop/history.rs#L277), [`ui/dr-ui/src/develop/history.rs:299`](../../ui/dr-ui/src/develop/history.rs#L299), [`ui/dr-ui/src/develop/history.rs:29`](../../ui/dr-ui/src/develop/history.rs#L29), [`ui/dr-ui/src/develop/history.rs:359`](../../ui/dr-ui/src/develop/history.rs#L359), [`ui/dr-ui/src/develop/history.rs:68`](../../ui/dr-ui/src/develop/history.rs#L68), [`ui/dr-ui/src/develop/history.rs:82`](../../ui/dr-ui/src/develop/history.rs#L82), [`ui/dr-ui/src/develop/history.rs:93`](../../ui/dr-ui/src/develop/history.rs#L93), [`ui/dr-ui/src/develop/render.rs:753`](../../ui/dr-ui/src/develop/render.rs#L753), [`ui/dr-ui/src/develop/render.rs:929`](../../ui/dr-ui/src/develop/render.rs#L929), [`ui/dr-ui/src/develop/render.rs:965`](../../ui/dr-ui/src/develop/render.rs#L965), [`ui/dr-ui/src/develop/session.rs:80`](../../ui/dr-ui/src/develop/session.rs#L80), [`ui/dr-ui/src/develop/session.rs:89`](../../ui/dr-ui/src/develop/session.rs#L89), [`ui/dr-ui/src/develop/white_balance.rs:11`](../../ui/dr-ui/src/develop/white_balance.rs#L11), [`ui/dr-ui/src/develop/white_balance.rs:162`](../../ui/dr-ui/src/develop/white_balance.rs#L162), [`ui/dr-ui/src/develop_ui.rs:705`](../../ui/dr-ui/src/develop_ui.rs#L705), [`ui/dr-ui/src/develop_ui.rs:725`](../../ui/dr-ui/src/develop_ui.rs#L725), [`ui/dr-ui/src/labels.rs:12`](../../ui/dr-ui/src/labels.rs#L12), [`ui/dr-ui/src/labels.rs:284`](../../ui/dr-ui/src/labels.rs#L284), [`ui/dr-ui/src/labels.rs:31`](../../ui/dr-ui/src/labels.rs#L31), [`ui/dr-ui/src/lib.rs:2156`](../../ui/dr-ui/src/lib.rs#L2156), [`ui/dr-ui/src/lib.rs:2161`](../../ui/dr-ui/src/lib.rs#L2161), [`ui/dr-ui/src/lib.rs:2193`](../../ui/dr-ui/src/lib.rs#L2193), [`ui/dr-ui/src/lib.rs:2202`](../../ui/dr-ui/src/lib.rs#L2202), [`ui/dr-ui/src/lib.rs:2219`](../../ui/dr-ui/src/lib.rs#L2219), [`ui/dr-ui/src/library/sidecar.rs:348`](../../ui/dr-ui/src/library/sidecar.rs#L348), [`ui/dr-ui/src/library/sidecar.rs:58`](../../ui/dr-ui/src/library/sidecar.rs#L58), [`ui/dr-ui/src/presets.rs:1678`](../../ui/dr-ui/src/presets.rs#L1678), [`ui/dr-ui/src/presets.rs:373`](../../ui/dr-ui/src/presets.rs#L373), [`ui/dr-ui/src/presets.rs:437`](../../ui/dr-ui/src/presets.rs#L437), [`ui/dr-ui/src/presets.rs:557`](../../ui/dr-ui/src/presets.rs#L557), [`ui/dr-ui/ui/history.slint:192`](../../ui/dr-ui/ui/history.slint#L192), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:219`](../../ui/dr-ui/ui/history.slint#L219), [`ui/dr-ui/ui/history.slint:304`](../../ui/dr-ui/ui/history.slint#L304), [`ui/dr-ui/ui/history.slint:43`](../../ui/dr-ui/ui/history.slint#L43), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53) |
+| FR-DEV-6 | [`core/dr-pipeline/src/preset.rs:1`](../../core/dr-pipeline/src/preset.rs#L1), [`core/dr-pipeline/src/preset.rs:390`](../../core/dr-pipeline/src/preset.rs#L390), [`core/dr-pipeline/src/preset.rs:423`](../../core/dr-pipeline/src/preset.rs#L423), [`core/dr-pipeline/src/starter.rs:1`](../../core/dr-pipeline/src/starter.rs#L1), [`core/dr-preset-xmp/src/lib.rs:1`](../../core/dr-preset-xmp/src/lib.rs#L1), [`core/dr-types/src/settings.rs:443`](../../core/dr-types/src/settings.rs#L443), [`ui/dr-ui/src/develop/session.rs:560`](../../ui/dr-ui/src/develop/session.rs#L560), [`ui/dr-ui/src/develop/session.rs:581`](../../ui/dr-ui/src/develop/session.rs#L581), [`ui/dr-ui/src/develop_ui.rs:167`](../../ui/dr-ui/src/develop_ui.rs#L167), [`ui/dr-ui/src/develop_ui.rs:196`](../../ui/dr-ui/src/develop_ui.rs#L196), [`ui/dr-ui/src/lib.rs:1272`](../../ui/dr-ui/src/lib.rs#L1272), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:39`](../../ui/dr-ui/src/library/sidecar.rs#L39), [`ui/dr-ui/src/library/thumbnails_fetch.rs:413`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L413), [`ui/dr-ui/src/library_ui/controller.rs:625`](../../ui/dr-ui/src/library_ui/controller.rs#L625), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:474`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L474), [`ui/dr-ui/src/library_ui/window.rs:553`](../../ui/dr-ui/src/library_ui/window.rs#L553), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/presets.rs:1`](../../ui/dr-ui/src/presets.rs#L1), [`ui/dr-ui/src/presets.rs:707`](../../ui/dr-ui/src/presets.rs#L707), [`ui/dr-ui/src/presets.rs:741`](../../ui/dr-ui/src/presets.rs#L741), [`ui/dr-ui/ui/adjust.slint:936`](../../ui/dr-ui/ui/adjust.slint#L936), [`ui/dr-ui/ui/adjust.slint:961`](../../ui/dr-ui/ui/adjust.slint#L961), [`ui/dr-ui/ui/app.slint:1039`](../../ui/dr-ui/ui/app.slint#L1039), [`ui/dr-ui/ui/app.slint:1448`](../../ui/dr-ui/ui/app.slint#L1448), [`ui/dr-ui/ui/app.slint:2384`](../../ui/dr-ui/ui/app.slint#L2384), [`ui/dr-ui/ui/app.slint:3305`](../../ui/dr-ui/ui/app.slint#L3305), [`ui/dr-ui/ui/app.slint:3349`](../../ui/dr-ui/ui/app.slint#L3349), [`ui/dr-ui/ui/app.slint:488`](../../ui/dr-ui/ui/app.slint#L488), [`ui/dr-ui/ui/app.slint:499`](../../ui/dr-ui/ui/app.slint#L499), [`ui/dr-ui/ui/app.slint:653`](../../ui/dr-ui/ui/app.slint#L653), [`ui/dr-ui/ui/develop.slint:241`](../../ui/dr-ui/ui/develop.slint#L241), [`ui/dr-ui/ui/library.slint:1944`](../../ui/dr-ui/ui/library.slint#L1944), [`ui/dr-ui/ui/library.slint:1950`](../../ui/dr-ui/ui/library.slint#L1950), [`ui/dr-ui/ui/library.slint:3139`](../../ui/dr-ui/ui/library.slint#L3139), [`ui/dr-ui/ui/library.slint:5047`](../../ui/dr-ui/ui/library.slint#L5047), [`ui/dr-ui/ui/library.slint:5065`](../../ui/dr-ui/ui/library.slint#L5065), [`ui/dr-ui/ui/presets.slint:105`](../../ui/dr-ui/ui/presets.slint#L105), [`ui/dr-ui/ui/presets.slint:113`](../../ui/dr-ui/ui/presets.slint#L113), [`ui/dr-ui/ui/presets.slint:19`](../../ui/dr-ui/ui/presets.slint#L19), [`ui/dr-ui/ui/presets.slint:276`](../../ui/dr-ui/ui/presets.slint#L276), [`ui/dr-ui/ui/presets.slint:297`](../../ui/dr-ui/ui/presets.slint#L297), [`ui/dr-ui/ui/presets.slint:332`](../../ui/dr-ui/ui/presets.slint#L332), [`ui/dr-ui/ui/presets.slint:5`](../../ui/dr-ui/ui/presets.slint#L5), [`ui/dr-ui/ui/presets.slint:60`](../../ui/dr-ui/ui/presets.slint#L60), [`ui/dr-ui/ui/settings.slint:120`](../../ui/dr-ui/ui/settings.slint#L120), [`ui/dr-ui/ui/settings.slint:642`](../../ui/dr-ui/ui/settings.slint#L642) |
+| FR-DEV-7 | [`core/dr-pipeline/src/history.rs:214`](../../core/dr-pipeline/src/history.rs#L214), [`core/dr-pipeline/src/history.rs:499`](../../core/dr-pipeline/src/history.rs#L499), [`core/dr-pipeline/src/history.rs:526`](../../core/dr-pipeline/src/history.rs#L526), [`ui/dr-ui/src/develop/history.rs:107`](../../ui/dr-ui/src/develop/history.rs#L107), [`ui/dr-ui/src/develop/history.rs:124`](../../ui/dr-ui/src/develop/history.rs#L124), [`ui/dr-ui/src/develop/history.rs:206`](../../ui/dr-ui/src/develop/history.rs#L206), [`ui/dr-ui/src/develop/history.rs:238`](../../ui/dr-ui/src/develop/history.rs#L238), [`ui/dr-ui/src/develop/history.rs:359`](../../ui/dr-ui/src/develop/history.rs#L359), [`ui/dr-ui/src/develop/render.rs:535`](../../ui/dr-ui/src/develop/render.rs#L535), [`ui/dr-ui/src/develop/render.rs:576`](../../ui/dr-ui/src/develop/render.rs#L576), [`ui/dr-ui/src/develop/render.rs:965`](../../ui/dr-ui/src/develop/render.rs#L965), [`ui/dr-ui/src/develop/session.rs:105`](../../ui/dr-ui/src/develop/session.rs#L105), [`ui/dr-ui/src/develop_ui.rs:646`](../../ui/dr-ui/src/develop_ui.rs#L646), [`ui/dr-ui/src/develop_ui.rs:705`](../../ui/dr-ui/src/develop_ui.rs#L705), [`ui/dr-ui/src/develop_ui.rs:777`](../../ui/dr-ui/src/develop_ui.rs#L777), [`ui/dr-ui/src/lib.rs:2202`](../../ui/dr-ui/src/lib.rs#L2202), [`ui/dr-ui/src/lib.rs:2279`](../../ui/dr-ui/src/lib.rs#L2279), [`ui/dr-ui/src/lib.rs:2293`](../../ui/dr-ui/src/lib.rs#L2293), [`ui/dr-ui/src/lib.rs:432`](../../ui/dr-ui/src/lib.rs#L432), [`ui/dr-ui/ui/app.slint:189`](../../ui/dr-ui/ui/app.slint#L189), [`ui/dr-ui/ui/app.slint:2273`](../../ui/dr-ui/ui/app.slint#L2273), [`ui/dr-ui/ui/app.slint:2297`](../../ui/dr-ui/ui/app.slint#L2297), [`ui/dr-ui/ui/app.slint:2866`](../../ui/dr-ui/ui/app.slint#L2866), [`ui/dr-ui/ui/history.slint:103`](../../ui/dr-ui/ui/history.slint#L103), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:227`](../../ui/dr-ui/ui/history.slint#L227), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) |
+| FR-DEV-8 | [`core/dr-gpu/src/detail.rs:405`](../../core/dr-gpu/src/detail.rs#L405), [`core/dr-gpu/src/detail.rs:623`](../../core/dr-gpu/src/detail.rs#L623), [`core/dr-gpu/tests/detail_instances.rs:1`](../../core/dr-gpu/tests/detail_instances.rs#L1), [`core/dr-gpu/tests/spot_removal.rs:1`](../../core/dr-gpu/tests/spot_removal.rs#L1), [`core/dr-pipeline/src/detail.rs:410`](../../core/dr-pipeline/src/detail.rs#L410), [`core/dr-pipeline/src/detail.rs:434`](../../core/dr-pipeline/src/detail.rs#L434), [`core/dr-pipeline/src/detail.rs:469`](../../core/dr-pipeline/src/detail.rs#L469), [`core/dr-pipeline/src/detail.rs:555`](../../core/dr-pipeline/src/detail.rs#L555), [`core/dr-pipeline/src/graph.rs:1092`](../../core/dr-pipeline/src/graph.rs#L1092), [`core/dr-pipeline/src/graph.rs:115`](../../core/dr-pipeline/src/graph.rs#L115), [`core/dr-pipeline/src/graph.rs:247`](../../core/dr-pipeline/src/graph.rs#L247), [`core/dr-pipeline/src/operation.rs:330`](../../core/dr-pipeline/src/operation.rs#L330), [`core/dr-pipeline/src/operation.rs:717`](../../core/dr-pipeline/src/operation.rs#L717), [`core/dr-pipeline/src/sidecar.rs:1104`](../../core/dr-pipeline/src/sidecar.rs#L1104), [`core/dr-pipeline/src/sidecar.rs:1158`](../../core/dr-pipeline/src/sidecar.rs#L1158), [`core/dr-pipeline/src/sidecar.rs:1188`](../../core/dr-pipeline/src/sidecar.rs#L1188), [`core/dr-pipeline/src/sidecar.rs:233`](../../core/dr-pipeline/src/sidecar.rs#L233), [`core/dr-pipeline/src/sidecar.rs:410`](../../core/dr-pipeline/src/sidecar.rs#L410), [`core/dr-pipeline/src/sidecar.rs:910`](../../core/dr-pipeline/src/sidecar.rs#L910), [`core/dr-pipeline/src/spot.rs:115`](../../core/dr-pipeline/src/spot.rs#L115), [`core/dr-pipeline/src/spot.rs:151`](../../core/dr-pipeline/src/spot.rs#L151), [`core/dr-pipeline/src/spot.rs:1`](../../core/dr-pipeline/src/spot.rs#L1), [`core/dr-pipeline/src/spot.rs:207`](../../core/dr-pipeline/src/spot.rs#L207), [`core/dr-pipeline/src/spot.rs:387`](../../core/dr-pipeline/src/spot.rs#L387), [`core/dr-pipeline/src/spot.rs:472`](../../core/dr-pipeline/src/spot.rs#L472), [`core/dr-pipeline/src/spot.rs:582`](../../core/dr-pipeline/src/spot.rs#L582), [`core/dr-pipeline/src/spot.rs:673`](../../core/dr-pipeline/src/spot.rs#L673), [`core/dr-pipeline/src/state.rs:103`](../../core/dr-pipeline/src/state.rs#L103), [`core/dr-pipeline/tests/spot_sidecar.rs:1`](../../core/dr-pipeline/tests/spot_sidecar.rs#L1), [`core/dr-pipeline/tests/spots.rs:1`](../../core/dr-pipeline/tests/spots.rs#L1), [`ui/dr-ui/src/develop/repairs.rs:114`](../../ui/dr-ui/src/develop/repairs.rs#L114), [`ui/dr-ui/src/develop/repairs.rs:11`](../../ui/dr-ui/src/develop/repairs.rs#L11), [`ui/dr-ui/src/develop/repairs.rs:197`](../../ui/dr-ui/src/develop/repairs.rs#L197), [`ui/dr-ui/src/develop/repairs.rs:211`](../../ui/dr-ui/src/develop/repairs.rs#L211), [`ui/dr-ui/src/develop/repairs.rs:49`](../../ui/dr-ui/src/develop/repairs.rs#L49), [`ui/dr-ui/src/develop/session.rs:216`](../../ui/dr-ui/src/develop/session.rs#L216), [`ui/dr-ui/src/develop_ui.rs:932`](../../ui/dr-ui/src/develop_ui.rs#L932), [`ui/dr-ui/src/labels.rs:80`](../../ui/dr-ui/src/labels.rs#L80), [`ui/dr-ui/src/lib.rs:2237`](../../ui/dr-ui/src/lib.rs#L2237), [`ui/dr-ui/src/lib.rs:475`](../../ui/dr-ui/src/lib.rs#L475), [`ui/dr-ui/src/spots_ui.rs:19`](../../ui/dr-ui/src/spots_ui.rs#L19), [`ui/dr-ui/src/spots_ui.rs:1`](../../ui/dr-ui/src/spots_ui.rs#L1), [`ui/dr-ui/src/spots_ui.rs:265`](../../ui/dr-ui/src/spots_ui.rs#L265), [`ui/dr-ui/ui/app.slint:2126`](../../ui/dr-ui/ui/app.slint#L2126), [`ui/dr-ui/ui/app.slint:2347`](../../ui/dr-ui/ui/app.slint#L2347), [`ui/dr-ui/ui/app.slint:3211`](../../ui/dr-ui/ui/app.slint#L3211), [`ui/dr-ui/ui/icons.slint:366`](../../ui/dr-ui/ui/icons.slint#L366), [`ui/dr-ui/ui/session.slint:102`](../../ui/dr-ui/ui/session.slint#L102), [`ui/dr-ui/ui/session.slint:52`](../../ui/dr-ui/ui/session.slint#L52), [`ui/dr-ui/ui/spots.slint:191`](../../ui/dr-ui/ui/spots.slint#L191), [`ui/dr-ui/ui/spots.slint:49`](../../ui/dr-ui/ui/spots.slint#L49), [`ui/dr-ui/ui/spots.slint:6`](../../ui/dr-ui/ui/spots.slint#L6), [`ui/dr-ui/ui/spots.slint:91`](../../ui/dr-ui/ui/spots.slint#L91) |
+| FR-DSP-1 | [`core/dr-gpu/src/adjust.rs:2422`](../../core/dr-gpu/src/adjust.rs#L2422), [`core/dr-gpu/src/adjust.rs:2499`](../../core/dr-gpu/src/adjust.rs#L2499), [`core/dr-gpu/src/adjust.rs:2584`](../../core/dr-gpu/src/adjust.rs#L2584), [`core/dr-gpu/src/adjust.rs:54`](../../core/dr-gpu/src/adjust.rs#L54), [`core/dr-gpu/src/adjust.rs:798`](../../core/dr-gpu/src/adjust.rs#L798), [`core/dr-gpu/src/lib.rs:174`](../../core/dr-gpu/src/lib.rs#L174), [`core/dr-gpu/src/lib.rs:194`](../../core/dr-gpu/src/lib.rs#L194), [`core/dr-gpu/src/lib.rs:72`](../../core/dr-gpu/src/lib.rs#L72), [`core/dr-gpu/src/lib.rs:95`](../../core/dr-gpu/src/lib.rs#L95), [`core/dr-gpu/tests/capture_sharpen.rs:200`](../../core/dr-gpu/tests/capture_sharpen.rs#L200), [`core/dr-gpu/tests/detail_stage.rs:328`](../../core/dr-gpu/tests/detail_stage.rs#L328), [`core/dr-gpu/tests/local_contrast.rs:264`](../../core/dr-gpu/tests/local_contrast.rs#L264), [`core/dr-gpu/tests/noise_reduction.rs:378`](../../core/dr-gpu/tests/noise_reduction.rs#L378), [`core/dr-pipeline/src/detail.rs:136`](../../core/dr-pipeline/src/detail.rs#L136), [`core/dr-pipeline/src/detail.rs:524`](../../core/dr-pipeline/src/detail.rs#L524), [`core/dr-pipeline/src/graph.rs:922`](../../core/dr-pipeline/src/graph.rs#L922), [`core/dr-pipeline/src/graph.rs:952`](../../core/dr-pipeline/src/graph.rs#L952), [`core/dr-pipeline/src/ops/capture_sharpen.rs:1`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L1), [`core/dr-pipeline/src/ops/capture_sharpen.rs:659`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L659), [`core/dr-pipeline/src/ops/dehaze.rs:1`](../../core/dr-pipeline/src/ops/dehaze.rs#L1), [`core/dr-pipeline/src/ops/dehaze.rs:592`](../../core/dr-pipeline/src/ops/dehaze.rs#L592), [`core/dr-pipeline/src/ops/local_contrast.rs:1`](../../core/dr-pipeline/src/ops/local_contrast.rs#L1), [`core/dr-pipeline/src/ops/local_contrast.rs:971`](../../core/dr-pipeline/src/ops/local_contrast.rs#L971), [`core/dr-pipeline/src/ops/noise_reduction.rs:700`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L700), [`core/dr-pipeline/src/spot.rs:673`](../../core/dr-pipeline/src/spot.rs#L673), [`ui/dr-ui/src/develop/framing.rs:594`](../../ui/dr-ui/src/develop/framing.rs#L594), [`ui/dr-ui/src/develop/mod.rs:55`](../../ui/dr-ui/src/develop/mod.rs#L55), [`ui/dr-ui/src/develop/render.rs:1022`](../../ui/dr-ui/src/develop/render.rs#L1022), [`ui/dr-ui/src/develop/render.rs:1056`](../../ui/dr-ui/src/develop/render.rs#L1056), [`ui/dr-ui/src/develop/render.rs:1194`](../../ui/dr-ui/src/develop/render.rs#L1194), [`ui/dr-ui/src/develop/render.rs:217`](../../ui/dr-ui/src/develop/render.rs#L217), [`ui/dr-ui/src/develop/render.rs:79`](../../ui/dr-ui/src/develop/render.rs#L79), [`ui/dr-ui/src/lib.rs:1056`](../../ui/dr-ui/src/lib.rs#L1056), [`ui/dr-ui/src/lib.rs:106`](../../ui/dr-ui/src/lib.rs#L106), [`ui/dr-ui/src/lib.rs:1115`](../../ui/dr-ui/src/lib.rs#L1115) |
| FR-DSP-3 | [`core/dr-gpu/tests/frame_budget.rs:101`](../../core/dr-gpu/tests/frame_budget.rs#L101), [`core/dr-gpu/tests/local_contrast.rs:329`](../../core/dr-gpu/tests/local_contrast.rs#L329), [`core/dr-pipeline/src/ops/local_contrast.rs:447`](../../core/dr-pipeline/src/ops/local_contrast.rs#L447) |
-| FR-DSP-4 | [`ui/dr-ui/src/lib.rs:2301`](../../ui/dr-ui/src/lib.rs#L2301), [`ui/dr-ui/src/lib.rs:2480`](../../ui/dr-ui/src/lib.rs#L2480), [`ui/dr-ui/src/refine.rs:1`](../../ui/dr-ui/src/refine.rs#L1), [`ui/dr-ui/ui/app.slint:103`](../../ui/dr-ui/ui/app.slint#L103), [`ui/dr-ui/ui/app.slint:1682`](../../ui/dr-ui/ui/app.slint#L1682), [`ui/dr-ui/ui/histogram.slint:182`](../../ui/dr-ui/ui/histogram.slint#L182), [`ui/dr-ui/ui/histogram.slint:250`](../../ui/dr-ui/ui/histogram.slint#L250) |
+| FR-DSP-4 | [`ui/dr-ui/src/lib.rs:2302`](../../ui/dr-ui/src/lib.rs#L2302), [`ui/dr-ui/src/lib.rs:2481`](../../ui/dr-ui/src/lib.rs#L2481), [`ui/dr-ui/src/refine.rs:1`](../../ui/dr-ui/src/refine.rs#L1), [`ui/dr-ui/ui/app.slint:103`](../../ui/dr-ui/ui/app.slint#L103), [`ui/dr-ui/ui/app.slint:1775`](../../ui/dr-ui/ui/app.slint#L1775), [`ui/dr-ui/ui/histogram.slint:182`](../../ui/dr-ui/ui/histogram.slint#L182), [`ui/dr-ui/ui/histogram.slint:250`](../../ui/dr-ui/ui/histogram.slint#L250) |
| FR-DSP-5 | [`core/dr-gpu/tests/frame_budget.rs:101`](../../core/dr-gpu/tests/frame_budget.rs#L101), [`core/dr-gpu/tests/zoom_resolution.rs:135`](../../core/dr-gpu/tests/zoom_resolution.rs#L135), [`core/dr-gpu/tests/zoom_resolution.rs:166`](../../core/dr-gpu/tests/zoom_resolution.rs#L166), [`core/dr-gpu/tests/zoom_resolution.rs:1`](../../core/dr-gpu/tests/zoom_resolution.rs#L1), [`core/dr-gpu/tests/zoom_resolution.rs:216`](../../core/dr-gpu/tests/zoom_resolution.rs#L216) |
-| FR-DSP-6 | [`core/dr-pipeline/src/operation.rs:527`](../../core/dr-pipeline/src/operation.rs#L527), [`core/dr-types/src/colour.rs:1`](../../core/dr-types/src/colour.rs#L1), [`ui/dr-ui/src/develop/render.rs:1517`](../../ui/dr-ui/src/develop/render.rs#L1517), [`ui/dr-ui/src/develop/render.rs:252`](../../ui/dr-ui/src/develop/render.rs#L252), [`ui/dr-ui/src/lib.rs:2177`](../../ui/dr-ui/src/lib.rs#L2177), [`ui/dr-ui/src/lib.rs:2952`](../../ui/dr-ui/src/lib.rs#L2952) |
-| FR-DSP-7 | [`core/dr-gpu/src/histogram.rs:147`](../../core/dr-gpu/src/histogram.rs#L147), [`core/dr-gpu/src/histogram.rs:1`](../../core/dr-gpu/src/histogram.rs#L1), [`core/dr-gpu/src/histogram.rs:281`](../../core/dr-gpu/src/histogram.rs#L281), [`core/dr-gpu/src/histogram.rs:50`](../../core/dr-gpu/src/histogram.rs#L50), [`core/dr-gpu/src/shaders/histogram.wgsl:1`](../../core/dr-gpu/src/shaders/histogram.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:1307`](../../ui/dr-ui/src/develop/render.rs#L1307), [`ui/dr-ui/src/develop/render.rs:1339`](../../ui/dr-ui/src/develop/render.rs#L1339), [`ui/dr-ui/src/develop/render.rs:306`](../../ui/dr-ui/src/develop/render.rs#L306), [`ui/dr-ui/src/develop/session.rs:116`](../../ui/dr-ui/src/develop/session.rs#L116), [`ui/dr-ui/src/histogram.rs:1`](../../ui/dr-ui/src/histogram.rs#L1), [`ui/dr-ui/src/lib.rs:2333`](../../ui/dr-ui/src/lib.rs#L2333), [`ui/dr-ui/src/lib.rs:451`](../../ui/dr-ui/src/lib.rs#L451), [`ui/dr-ui/ui/histogram.slint:191`](../../ui/dr-ui/ui/histogram.slint#L191), [`ui/dr-ui/ui/histogram.slint:1`](../../ui/dr-ui/ui/histogram.slint#L1) |
-| FR-DSP-8 | [`platform/dr-plat/src/display.rs:1`](../../platform/dr-plat/src/display.rs#L1), [`platform/dr-plat/src/display/icc.rs:1`](../../platform/dr-plat/src/display/icc.rs#L1), [`platform/dr-plat/src/display/wayland.rs:1`](../../platform/dr-plat/src/display/wayland.rs#L1), [`platform/dr-plat/src/display/x11.rs:1`](../../platform/dr-plat/src/display/x11.rs#L1), [`ui/dr-ui/src/develop/render.rs:1155`](../../ui/dr-ui/src/develop/render.rs#L1155), [`ui/dr-ui/src/develop/render.rs:1517`](../../ui/dr-ui/src/develop/render.rs#L1517), [`ui/dr-ui/src/develop/render.rs:1563`](../../ui/dr-ui/src/develop/render.rs#L1563), [`ui/dr-ui/src/develop/render.rs:1582`](../../ui/dr-ui/src/develop/render.rs#L1582), [`ui/dr-ui/src/develop/render.rs:193`](../../ui/dr-ui/src/develop/render.rs#L193), [`ui/dr-ui/src/develop/render.rs:252`](../../ui/dr-ui/src/develop/render.rs#L252), [`ui/dr-ui/src/develop/render.rs:47`](../../ui/dr-ui/src/develop/render.rs#L47), [`ui/dr-ui/src/develop/session.rs:269`](../../ui/dr-ui/src/develop/session.rs#L269), [`ui/dr-ui/src/display_ui.rs:192`](../../ui/dr-ui/src/display_ui.rs#L192), [`ui/dr-ui/src/display_ui.rs:1`](../../ui/dr-ui/src/display_ui.rs#L1), [`ui/dr-ui/src/display_ui.rs:325`](../../ui/dr-ui/src/display_ui.rs#L325), [`ui/dr-ui/src/display_ui.rs:346`](../../ui/dr-ui/src/display_ui.rs#L346), [`ui/dr-ui/src/display_ui.rs:379`](../../ui/dr-ui/src/display_ui.rs#L379), [`ui/dr-ui/src/lib.rs:1293`](../../ui/dr-ui/src/lib.rs#L1293), [`ui/dr-ui/src/lib.rs:2177`](../../ui/dr-ui/src/lib.rs#L2177), [`ui/dr-ui/src/lib.rs:2929`](../../ui/dr-ui/src/lib.rs#L2929), [`ui/dr-ui/src/lib.rs:2952`](../../ui/dr-ui/src/lib.rs#L2952), [`ui/dr-ui/ui/app.slint:121`](../../ui/dr-ui/ui/app.slint#L121), [`ui/dr-ui/ui/app.slint:1668`](../../ui/dr-ui/ui/app.slint#L1668), [`ui/dr-ui/ui/settings.slint:170`](../../ui/dr-ui/ui/settings.slint#L170), [`ui/dr-ui/ui/settings.slint:816`](../../ui/dr-ui/ui/settings.slint#L816) |
+| FR-DSP-6 | [`core/dr-pipeline/src/operation.rs:527`](../../core/dr-pipeline/src/operation.rs#L527), [`core/dr-types/src/colour.rs:1`](../../core/dr-types/src/colour.rs#L1), [`ui/dr-ui/src/develop/render.rs:1517`](../../ui/dr-ui/src/develop/render.rs#L1517), [`ui/dr-ui/src/develop/render.rs:252`](../../ui/dr-ui/src/develop/render.rs#L252), [`ui/dr-ui/src/lib.rs:2178`](../../ui/dr-ui/src/lib.rs#L2178), [`ui/dr-ui/src/lib.rs:2953`](../../ui/dr-ui/src/lib.rs#L2953) |
+| FR-DSP-7 | [`core/dr-gpu/src/histogram.rs:147`](../../core/dr-gpu/src/histogram.rs#L147), [`core/dr-gpu/src/histogram.rs:1`](../../core/dr-gpu/src/histogram.rs#L1), [`core/dr-gpu/src/histogram.rs:281`](../../core/dr-gpu/src/histogram.rs#L281), [`core/dr-gpu/src/histogram.rs:50`](../../core/dr-gpu/src/histogram.rs#L50), [`core/dr-gpu/src/shaders/histogram.wgsl:1`](../../core/dr-gpu/src/shaders/histogram.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:1307`](../../ui/dr-ui/src/develop/render.rs#L1307), [`ui/dr-ui/src/develop/render.rs:1339`](../../ui/dr-ui/src/develop/render.rs#L1339), [`ui/dr-ui/src/develop/render.rs:306`](../../ui/dr-ui/src/develop/render.rs#L306), [`ui/dr-ui/src/develop/session.rs:116`](../../ui/dr-ui/src/develop/session.rs#L116), [`ui/dr-ui/src/histogram.rs:1`](../../ui/dr-ui/src/histogram.rs#L1), [`ui/dr-ui/src/lib.rs:2334`](../../ui/dr-ui/src/lib.rs#L2334), [`ui/dr-ui/src/lib.rs:452`](../../ui/dr-ui/src/lib.rs#L452), [`ui/dr-ui/ui/histogram.slint:191`](../../ui/dr-ui/ui/histogram.slint#L191), [`ui/dr-ui/ui/histogram.slint:1`](../../ui/dr-ui/ui/histogram.slint#L1) |
+| FR-DSP-8 | [`platform/dr-plat/src/display.rs:1`](../../platform/dr-plat/src/display.rs#L1), [`platform/dr-plat/src/display/icc.rs:1`](../../platform/dr-plat/src/display/icc.rs#L1), [`platform/dr-plat/src/display/wayland.rs:1`](../../platform/dr-plat/src/display/wayland.rs#L1), [`platform/dr-plat/src/display/x11.rs:1`](../../platform/dr-plat/src/display/x11.rs#L1), [`ui/dr-ui/src/develop/render.rs:1155`](../../ui/dr-ui/src/develop/render.rs#L1155), [`ui/dr-ui/src/develop/render.rs:1517`](../../ui/dr-ui/src/develop/render.rs#L1517), [`ui/dr-ui/src/develop/render.rs:1563`](../../ui/dr-ui/src/develop/render.rs#L1563), [`ui/dr-ui/src/develop/render.rs:1582`](../../ui/dr-ui/src/develop/render.rs#L1582), [`ui/dr-ui/src/develop/render.rs:193`](../../ui/dr-ui/src/develop/render.rs#L193), [`ui/dr-ui/src/develop/render.rs:252`](../../ui/dr-ui/src/develop/render.rs#L252), [`ui/dr-ui/src/develop/render.rs:47`](../../ui/dr-ui/src/develop/render.rs#L47), [`ui/dr-ui/src/develop/session.rs:269`](../../ui/dr-ui/src/develop/session.rs#L269), [`ui/dr-ui/src/display_ui.rs:192`](../../ui/dr-ui/src/display_ui.rs#L192), [`ui/dr-ui/src/display_ui.rs:1`](../../ui/dr-ui/src/display_ui.rs#L1), [`ui/dr-ui/src/display_ui.rs:325`](../../ui/dr-ui/src/display_ui.rs#L325), [`ui/dr-ui/src/display_ui.rs:346`](../../ui/dr-ui/src/display_ui.rs#L346), [`ui/dr-ui/src/display_ui.rs:379`](../../ui/dr-ui/src/display_ui.rs#L379), [`ui/dr-ui/src/lib.rs:1294`](../../ui/dr-ui/src/lib.rs#L1294), [`ui/dr-ui/src/lib.rs:2178`](../../ui/dr-ui/src/lib.rs#L2178), [`ui/dr-ui/src/lib.rs:2930`](../../ui/dr-ui/src/lib.rs#L2930), [`ui/dr-ui/src/lib.rs:2953`](../../ui/dr-ui/src/lib.rs#L2953), [`ui/dr-ui/ui/app.slint:121`](../../ui/dr-ui/ui/app.slint#L121), [`ui/dr-ui/ui/app.slint:1761`](../../ui/dr-ui/ui/app.slint#L1761), [`ui/dr-ui/ui/settings.slint:170`](../../ui/dr-ui/ui/settings.slint#L170), [`ui/dr-ui/ui/settings.slint:816`](../../ui/dr-ui/ui/settings.slint#L816) |
| FR-EXP-1 | [`core/dr-export/src/encode.rs:1`](../../core/dr-export/src/encode.rs#L1), [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1) |
| FR-EXP-2 | [`core/dr-export/src/encode.rs:1`](../../core/dr-export/src/encode.rs#L1), [`core/dr-export/src/error.rs:26`](../../core/dr-export/src/error.rs#L26), [`core/dr-export/src/icc.rs:1`](../../core/dr-export/src/icc.rs#L1), [`core/dr-export/src/lib.rs:157`](../../core/dr-export/src/lib.rs#L157), [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-export/src/lib.rs:57`](../../core/dr-export/src/lib.rs#L57), [`core/dr-gpu/src/adjust.rs:2732`](../../core/dr-gpu/src/adjust.rs#L2732), [`core/dr-pipeline/src/graph.rs:835`](../../core/dr-pipeline/src/graph.rs#L835), [`core/dr-pipeline/src/graph.rs:966`](../../core/dr-pipeline/src/graph.rs#L966), [`core/dr-pipeline/src/operation.rs:527`](../../core/dr-pipeline/src/operation.rs#L527), [`core/dr-types/src/colour.rs:1`](../../core/dr-types/src/colour.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`core/dr-types/src/settings.rs:963`](../../core/dr-types/src/settings.rs#L963), [`ui/dr-ui/src/develop/render.rs:1582`](../../ui/dr-ui/src/develop/render.rs#L1582), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1) |
| FR-EXP-3 | [`core/dr-export/src/lib.rs:186`](../../core/dr-export/src/lib.rs#L186), [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-export/src/size.rs:136`](../../core/dr-export/src/size.rs#L136), [`core/dr-export/src/size.rs:1`](../../core/dr-export/src/size.rs#L1), [`core/dr-export/src/size.rs:25`](../../core/dr-export/src/size.rs#L25), [`core/dr-export/src/size.rs:84`](../../core/dr-export/src/size.rs#L84), [`core/dr-types/src/settings.rs:1008`](../../core/dr-types/src/settings.rs#L1008), [`core/dr-types/src/settings.rs:1016`](../../core/dr-types/src/settings.rs#L1016), [`core/dr-types/src/settings.rs:1032`](../../core/dr-types/src/settings.rs#L1032), [`core/dr-types/src/settings.rs:1101`](../../core/dr-types/src/settings.rs#L1101), [`core/dr-types/src/settings.rs:1129`](../../core/dr-types/src/settings.rs#L1129), [`core/dr-types/src/settings.rs:1140`](../../core/dr-types/src/settings.rs#L1140), [`core/dr-types/src/settings.rs:1146`](../../core/dr-types/src/settings.rs#L1146), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:292`](../../ui/dr-ui/src/settings_ui.rs#L292), [`ui/dr-ui/src/settings_ui.rs:305`](../../ui/dr-ui/src/settings_ui.rs#L305), [`ui/dr-ui/src/settings_ui.rs:324`](../../ui/dr-ui/src/settings_ui.rs#L324), [`ui/dr-ui/src/settings_ui.rs:809`](../../ui/dr-ui/src/settings_ui.rs#L809), [`ui/dr-ui/ui/export.slint:159`](../../ui/dr-ui/ui/export.slint#L159), [`ui/dr-ui/ui/export.slint:169`](../../ui/dr-ui/ui/export.slint#L169) |
| FR-EXP-4 | [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-export/src/sharpen.rs:1`](../../core/dr-export/src/sharpen.rs#L1), [`core/dr-export/src/size.rs:1`](../../core/dr-export/src/size.rs#L1), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1) |
| FR-EXP-5 | [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1) |
-| FR-EXP-6 | [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-export/src/name.rs:1`](../../core/dr-export/src/name.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:635`](../../ui/dr-ui/src/lib.rs#L635), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:49`](../../ui/dr-ui/src/settings_ui.rs#L49), [`ui/dr-ui/src/settings_ui.rs:941`](../../ui/dr-ui/src/settings_ui.rs#L941) |
-| FR-EXP-7 | [`ui/dr-ui/src/activity.rs:83`](../../ui/dr-ui/src/activity.rs#L83), [`ui/dr-ui/src/develop_ui.rs:309`](../../ui/dr-ui/src/develop_ui.rs#L309), [`ui/dr-ui/src/export.rs:1024`](../../ui/dr-ui/src/export.rs#L1024), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:283`](../../ui/dr-ui/src/lib.rs#L283), [`ui/dr-ui/src/lib.rs:635`](../../ui/dr-ui/src/lib.rs#L635), [`ui/dr-ui/src/lib.rs:681`](../../ui/dr-ui/src/lib.rs#L681), [`ui/dr-ui/src/lib.rs:709`](../../ui/dr-ui/src/lib.rs#L709), [`ui/dr-ui/src/library_ui/controller.rs:1004`](../../ui/dr-ui/src/library_ui/controller.rs#L1004), [`ui/dr-ui/src/library_ui/controller.rs:1016`](../../ui/dr-ui/src/library_ui/controller.rs#L1016), [`ui/dr-ui/src/library_ui/controller.rs:1028`](../../ui/dr-ui/src/library_ui/controller.rs#L1028), [`ui/dr-ui/src/library_ui/controller.rs:716`](../../ui/dr-ui/src/library_ui/controller.rs#L716), [`ui/dr-ui/src/library_ui/controller.rs:816`](../../ui/dr-ui/src/library_ui/controller.rs#L816), [`ui/dr-ui/src/library_ui/controller.rs:873`](../../ui/dr-ui/src/library_ui/controller.rs#L873), [`ui/dr-ui/src/library_ui/sync.rs:100`](../../ui/dr-ui/src/library_ui/sync.rs#L100), [`ui/dr-ui/src/settings_ui.rs:502`](../../ui/dr-ui/src/settings_ui.rs#L502), [`ui/dr-ui/ui/app.slint:1374`](../../ui/dr-ui/ui/app.slint#L1374), [`ui/dr-ui/ui/app.slint:2340`](../../ui/dr-ui/ui/app.slint#L2340), [`ui/dr-ui/ui/app.slint:3074`](../../ui/dr-ui/ui/app.slint#L3074), [`ui/dr-ui/ui/app.slint:643`](../../ui/dr-ui/ui/app.slint#L643), [`ui/dr-ui/ui/app.slint:834`](../../ui/dr-ui/ui/app.slint#L834), [`ui/dr-ui/ui/export.slint:1`](../../ui/dr-ui/ui/export.slint#L1), [`ui/dr-ui/ui/export.slint:384`](../../ui/dr-ui/ui/export.slint#L384), [`ui/dr-ui/ui/library.slint:1933`](../../ui/dr-ui/ui/library.slint#L1933), [`ui/dr-ui/ui/library.slint:1941`](../../ui/dr-ui/ui/library.slint#L1941), [`ui/dr-ui/ui/library.slint:3096`](../../ui/dr-ui/ui/library.slint#L3096), [`ui/dr-ui/ui/library.slint:5009`](../../ui/dr-ui/ui/library.slint#L5009) |
-| FR-EXP-8 | [`core/dr-decode/src/lib.rs:372`](../../core/dr-decode/src/lib.rs#L372), [`core/dr-decode/src/lib.rs:396`](../../core/dr-decode/src/lib.rs#L396), [`core/dr-decode/src/lib.rs:410`](../../core/dr-decode/src/lib.rs#L410), [`core/dr-decode/src/lib.rs:77`](../../core/dr-decode/src/lib.rs#L77), [`core/dr-decode/src/lib.rs:85`](../../core/dr-decode/src/lib.rs#L85), [`core/dr-decode/src/lib.rs:88`](../../core/dr-decode/src/lib.rs#L88), [`core/dr-decode/src/locate.rs:1233`](../../core/dr-decode/src/locate.rs#L1233), [`core/dr-decode/src/locate.rs:1292`](../../core/dr-decode/src/locate.rs#L1292), [`core/dr-decode/src/locate.rs:359`](../../core/dr-decode/src/locate.rs#L359), [`core/dr-decode/src/locate.rs:556`](../../core/dr-decode/src/locate.rs#L556), [`core/dr-decode/src/locate.rs:640`](../../core/dr-decode/src/locate.rs#L640), [`core/dr-decode/src/locate.rs:653`](../../core/dr-decode/src/locate.rs#L653), [`core/dr-decode/src/locate.rs:736`](../../core/dr-decode/src/locate.rs#L736), [`core/dr-export/examples/export.rs:99`](../../core/dr-export/examples/export.rs#L99), [`core/dr-export/src/encode.rs:117`](../../core/dr-export/src/encode.rs#L117), [`core/dr-export/src/encode.rs:161`](../../core/dr-export/src/encode.rs#L161), [`core/dr-export/src/encode.rs:1`](../../core/dr-export/src/encode.rs#L1), [`core/dr-export/src/encode.rs:206`](../../core/dr-export/src/encode.rs#L206), [`core/dr-export/src/encode.rs:235`](../../core/dr-export/src/encode.rs#L235), [`core/dr-export/src/encode.rs:311`](../../core/dr-export/src/encode.rs#L311), [`core/dr-export/src/encode.rs:325`](../../core/dr-export/src/encode.rs#L325), [`core/dr-export/src/encode.rs:408`](../../core/dr-export/src/encode.rs#L408), [`core/dr-export/src/encode.rs:456`](../../core/dr-export/src/encode.rs#L456), [`core/dr-export/src/encode.rs:70`](../../core/dr-export/src/encode.rs#L70), [`core/dr-export/src/encode.rs:795`](../../core/dr-export/src/encode.rs#L795), [`core/dr-export/src/encode.rs:809`](../../core/dr-export/src/encode.rs#L809), [`core/dr-export/src/encode.rs:850`](../../core/dr-export/src/encode.rs#L850), [`core/dr-export/src/encode.rs:898`](../../core/dr-export/src/encode.rs#L898), [`core/dr-export/src/exif.rs:1`](../../core/dr-export/src/exif.rs#L1), [`core/dr-export/src/lib.rs:140`](../../core/dr-export/src/lib.rs#L140), [`core/dr-export/src/metadata.rs:1`](../../core/dr-export/src/metadata.rs#L1), [`core/dr-export/src/metadata.rs:41`](../../core/dr-export/src/metadata.rs#L41), [`core/dr-export/src/metadata.rs:74`](../../core/dr-export/src/metadata.rs#L74), [`core/dr-types/src/lib.rs:655`](../../core/dr-types/src/lib.rs#L655), [`core/dr-types/src/settings.rs:671`](../../core/dr-types/src/settings.rs#L671), [`ui/dr-ui/src/decoder_seam.rs:256`](../../ui/dr-ui/src/decoder_seam.rs#L256), [`ui/dr-ui/src/develop/session.rs:37`](../../ui/dr-ui/src/develop/session.rs#L37), [`ui/dr-ui/src/develop/session.rs:417`](../../ui/dr-ui/src/develop/session.rs#L417), [`ui/dr-ui/src/develop/session.rs:529`](../../ui/dr-ui/src/develop/session.rs#L529), [`ui/dr-ui/src/export.rs:475`](../../ui/dr-ui/src/export.rs#L475), [`ui/dr-ui/src/export.rs:646`](../../ui/dr-ui/src/export.rs#L646), [`ui/dr-ui/src/export.rs:692`](../../ui/dr-ui/src/export.rs#L692), [`ui/dr-ui/src/export.rs:720`](../../ui/dr-ui/src/export.rs#L720), [`ui/dr-ui/src/export.rs:757`](../../ui/dr-ui/src/export.rs#L757), [`ui/dr-ui/src/export.rs:858`](../../ui/dr-ui/src/export.rs#L858), [`ui/dr-ui/src/export.rs:876`](../../ui/dr-ui/src/export.rs#L876), [`ui/dr-ui/src/lib.rs:283`](../../ui/dr-ui/src/lib.rs#L283), [`ui/dr-ui/src/lib.rs:307`](../../ui/dr-ui/src/lib.rs#L307), [`ui/dr-ui/src/lib.rs:667`](../../ui/dr-ui/src/lib.rs#L667), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1) |
-| FR-EXP-9 | [`core/dr-decode/src/lib.rs:552`](../../core/dr-decode/src/lib.rs#L552), [`core/dr-export/src/lib.rs:132`](../../core/dr-export/src/lib.rs#L132), [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-gpu/src/adjust.rs:1134`](../../core/dr-gpu/src/adjust.rs#L1134), [`ui/dr-ui/examples/face_native.rs:1`](../../ui/dr-ui/examples/face_native.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:256`](../../ui/dr-ui/src/decoder_seam.rs#L256), [`ui/dr-ui/src/develop/mask_ops.rs:1130`](../../ui/dr-ui/src/develop/mask_ops.rs#L1130), [`ui/dr-ui/src/develop/render.rs:628`](../../ui/dr-ui/src/develop/render.rs#L628), [`ui/dr-ui/src/develop/render.rs:666`](../../ui/dr-ui/src/develop/render.rs#L666), [`ui/dr-ui/src/lib.rs:635`](../../ui/dr-ui/src/lib.rs#L635), [`ui/dr-ui/src/library/sweep.rs:510`](../../ui/dr-ui/src/library/sweep.rs#L510), [`ui/dr-ui/tests/export_ignores_the_viewport.rs:1`](../../ui/dr-ui/tests/export_ignores_the_viewport.rs#L1) |
-| FR-INF-1 | [`ui/dr-ui/src/lib.rs:1464`](../../ui/dr-ui/src/lib.rs#L1464), [`ui/dr-ui/ui/settings.slint:776`](../../ui/dr-ui/ui/settings.slint#L776) |
-| FR-MRG-1 | [`core/dr-pano/src/align.rs:1`](../../core/dr-pano/src/align.rs#L1), [`core/dr-pano/src/lib.rs:1`](../../core/dr-pano/src/lib.rs#L1), [`ui/dr-ui/src/lib.rs:1848`](../../ui/dr-ui/src/lib.rs#L1848), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/app.slint:1379`](../../ui/dr-ui/ui/app.slint#L1379), [`ui/dr-ui/ui/app.slint:548`](../../ui/dr-ui/ui/app.slint#L548), [`ui/dr-ui/ui/library.slint:1946`](../../ui/dr-ui/ui/library.slint#L1946), [`ui/dr-ui/ui/library.slint:4966`](../../ui/dr-ui/ui/library.slint#L4966), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) |
+| FR-EXP-6 | [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-export/src/name.rs:1`](../../core/dr-export/src/name.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:636`](../../ui/dr-ui/src/lib.rs#L636), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:49`](../../ui/dr-ui/src/settings_ui.rs#L49), [`ui/dr-ui/src/settings_ui.rs:941`](../../ui/dr-ui/src/settings_ui.rs#L941) |
+| FR-EXP-7 | [`ui/dr-ui/src/activity.rs:83`](../../ui/dr-ui/src/activity.rs#L83), [`ui/dr-ui/src/develop_ui.rs:309`](../../ui/dr-ui/src/develop_ui.rs#L309), [`ui/dr-ui/src/export.rs:1024`](../../ui/dr-ui/src/export.rs#L1024), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:283`](../../ui/dr-ui/src/lib.rs#L283), [`ui/dr-ui/src/lib.rs:636`](../../ui/dr-ui/src/lib.rs#L636), [`ui/dr-ui/src/lib.rs:682`](../../ui/dr-ui/src/lib.rs#L682), [`ui/dr-ui/src/lib.rs:710`](../../ui/dr-ui/src/lib.rs#L710), [`ui/dr-ui/src/library_ui/controller.rs:1004`](../../ui/dr-ui/src/library_ui/controller.rs#L1004), [`ui/dr-ui/src/library_ui/controller.rs:1016`](../../ui/dr-ui/src/library_ui/controller.rs#L1016), [`ui/dr-ui/src/library_ui/controller.rs:1028`](../../ui/dr-ui/src/library_ui/controller.rs#L1028), [`ui/dr-ui/src/library_ui/controller.rs:716`](../../ui/dr-ui/src/library_ui/controller.rs#L716), [`ui/dr-ui/src/library_ui/controller.rs:816`](../../ui/dr-ui/src/library_ui/controller.rs#L816), [`ui/dr-ui/src/library_ui/controller.rs:873`](../../ui/dr-ui/src/library_ui/controller.rs#L873), [`ui/dr-ui/src/library_ui/sync.rs:100`](../../ui/dr-ui/src/library_ui/sync.rs#L100), [`ui/dr-ui/src/settings_ui.rs:502`](../../ui/dr-ui/src/settings_ui.rs#L502), [`ui/dr-ui/ui/app.slint:1039`](../../ui/dr-ui/ui/app.slint#L1039), [`ui/dr-ui/ui/app.slint:1458`](../../ui/dr-ui/ui/app.slint#L1458), [`ui/dr-ui/ui/app.slint:2440`](../../ui/dr-ui/ui/app.slint#L2440), [`ui/dr-ui/ui/app.slint:3330`](../../ui/dr-ui/ui/app.slint#L3330), [`ui/dr-ui/ui/app.slint:646`](../../ui/dr-ui/ui/app.slint#L646), [`ui/dr-ui/ui/app.slint:657`](../../ui/dr-ui/ui/app.slint#L657), [`ui/dr-ui/ui/app.slint:893`](../../ui/dr-ui/ui/app.slint#L893), [`ui/dr-ui/ui/export.slint:1`](../../ui/dr-ui/ui/export.slint#L1), [`ui/dr-ui/ui/export.slint:384`](../../ui/dr-ui/ui/export.slint#L384), [`ui/dr-ui/ui/library.slint:1953`](../../ui/dr-ui/ui/library.slint#L1953), [`ui/dr-ui/ui/library.slint:1961`](../../ui/dr-ui/ui/library.slint#L1961), [`ui/dr-ui/ui/library.slint:3120`](../../ui/dr-ui/ui/library.slint#L3120), [`ui/dr-ui/ui/library.slint:5120`](../../ui/dr-ui/ui/library.slint#L5120) |
+| FR-EXP-8 | [`core/dr-decode/src/lib.rs:372`](../../core/dr-decode/src/lib.rs#L372), [`core/dr-decode/src/lib.rs:396`](../../core/dr-decode/src/lib.rs#L396), [`core/dr-decode/src/lib.rs:410`](../../core/dr-decode/src/lib.rs#L410), [`core/dr-decode/src/lib.rs:77`](../../core/dr-decode/src/lib.rs#L77), [`core/dr-decode/src/lib.rs:85`](../../core/dr-decode/src/lib.rs#L85), [`core/dr-decode/src/lib.rs:88`](../../core/dr-decode/src/lib.rs#L88), [`core/dr-decode/src/locate.rs:1233`](../../core/dr-decode/src/locate.rs#L1233), [`core/dr-decode/src/locate.rs:1292`](../../core/dr-decode/src/locate.rs#L1292), [`core/dr-decode/src/locate.rs:359`](../../core/dr-decode/src/locate.rs#L359), [`core/dr-decode/src/locate.rs:556`](../../core/dr-decode/src/locate.rs#L556), [`core/dr-decode/src/locate.rs:640`](../../core/dr-decode/src/locate.rs#L640), [`core/dr-decode/src/locate.rs:653`](../../core/dr-decode/src/locate.rs#L653), [`core/dr-decode/src/locate.rs:736`](../../core/dr-decode/src/locate.rs#L736), [`core/dr-export/examples/export.rs:99`](../../core/dr-export/examples/export.rs#L99), [`core/dr-export/src/encode.rs:117`](../../core/dr-export/src/encode.rs#L117), [`core/dr-export/src/encode.rs:161`](../../core/dr-export/src/encode.rs#L161), [`core/dr-export/src/encode.rs:1`](../../core/dr-export/src/encode.rs#L1), [`core/dr-export/src/encode.rs:206`](../../core/dr-export/src/encode.rs#L206), [`core/dr-export/src/encode.rs:235`](../../core/dr-export/src/encode.rs#L235), [`core/dr-export/src/encode.rs:311`](../../core/dr-export/src/encode.rs#L311), [`core/dr-export/src/encode.rs:325`](../../core/dr-export/src/encode.rs#L325), [`core/dr-export/src/encode.rs:408`](../../core/dr-export/src/encode.rs#L408), [`core/dr-export/src/encode.rs:456`](../../core/dr-export/src/encode.rs#L456), [`core/dr-export/src/encode.rs:70`](../../core/dr-export/src/encode.rs#L70), [`core/dr-export/src/encode.rs:795`](../../core/dr-export/src/encode.rs#L795), [`core/dr-export/src/encode.rs:809`](../../core/dr-export/src/encode.rs#L809), [`core/dr-export/src/encode.rs:850`](../../core/dr-export/src/encode.rs#L850), [`core/dr-export/src/encode.rs:898`](../../core/dr-export/src/encode.rs#L898), [`core/dr-export/src/exif.rs:1`](../../core/dr-export/src/exif.rs#L1), [`core/dr-export/src/lib.rs:140`](../../core/dr-export/src/lib.rs#L140), [`core/dr-export/src/metadata.rs:1`](../../core/dr-export/src/metadata.rs#L1), [`core/dr-export/src/metadata.rs:41`](../../core/dr-export/src/metadata.rs#L41), [`core/dr-export/src/metadata.rs:74`](../../core/dr-export/src/metadata.rs#L74), [`core/dr-types/src/lib.rs:655`](../../core/dr-types/src/lib.rs#L655), [`core/dr-types/src/settings.rs:671`](../../core/dr-types/src/settings.rs#L671), [`ui/dr-ui/src/decoder_seam.rs:256`](../../ui/dr-ui/src/decoder_seam.rs#L256), [`ui/dr-ui/src/develop/session.rs:37`](../../ui/dr-ui/src/develop/session.rs#L37), [`ui/dr-ui/src/develop/session.rs:417`](../../ui/dr-ui/src/develop/session.rs#L417), [`ui/dr-ui/src/develop/session.rs:529`](../../ui/dr-ui/src/develop/session.rs#L529), [`ui/dr-ui/src/export.rs:475`](../../ui/dr-ui/src/export.rs#L475), [`ui/dr-ui/src/export.rs:646`](../../ui/dr-ui/src/export.rs#L646), [`ui/dr-ui/src/export.rs:692`](../../ui/dr-ui/src/export.rs#L692), [`ui/dr-ui/src/export.rs:720`](../../ui/dr-ui/src/export.rs#L720), [`ui/dr-ui/src/export.rs:757`](../../ui/dr-ui/src/export.rs#L757), [`ui/dr-ui/src/export.rs:858`](../../ui/dr-ui/src/export.rs#L858), [`ui/dr-ui/src/export.rs:876`](../../ui/dr-ui/src/export.rs#L876), [`ui/dr-ui/src/lib.rs:283`](../../ui/dr-ui/src/lib.rs#L283), [`ui/dr-ui/src/lib.rs:307`](../../ui/dr-ui/src/lib.rs#L307), [`ui/dr-ui/src/lib.rs:668`](../../ui/dr-ui/src/lib.rs#L668), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1) |
+| FR-EXP-9 | [`core/dr-decode/src/lib.rs:552`](../../core/dr-decode/src/lib.rs#L552), [`core/dr-export/src/lib.rs:132`](../../core/dr-export/src/lib.rs#L132), [`core/dr-export/src/lib.rs:1`](../../core/dr-export/src/lib.rs#L1), [`core/dr-gpu/src/adjust.rs:1134`](../../core/dr-gpu/src/adjust.rs#L1134), [`ui/dr-ui/examples/face_native.rs:1`](../../ui/dr-ui/examples/face_native.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:256`](../../ui/dr-ui/src/decoder_seam.rs#L256), [`ui/dr-ui/src/develop/mask_ops.rs:1130`](../../ui/dr-ui/src/develop/mask_ops.rs#L1130), [`ui/dr-ui/src/develop/render.rs:628`](../../ui/dr-ui/src/develop/render.rs#L628), [`ui/dr-ui/src/develop/render.rs:666`](../../ui/dr-ui/src/develop/render.rs#L666), [`ui/dr-ui/src/lib.rs:636`](../../ui/dr-ui/src/lib.rs#L636), [`ui/dr-ui/src/library/sweep.rs:510`](../../ui/dr-ui/src/library/sweep.rs#L510), [`ui/dr-ui/tests/export_ignores_the_viewport.rs:1`](../../ui/dr-ui/tests/export_ignores_the_viewport.rs#L1) |
+| FR-INF-1 | [`ui/dr-ui/src/lib.rs:1465`](../../ui/dr-ui/src/lib.rs#L1465), [`ui/dr-ui/ui/settings.slint:776`](../../ui/dr-ui/ui/settings.slint#L776) |
+| FR-MRG-1 | [`core/dr-pano/src/align.rs:1`](../../core/dr-pano/src/align.rs#L1), [`core/dr-pano/src/lib.rs:1`](../../core/dr-pano/src/lib.rs#L1), [`ui/dr-ui/src/lib.rs:1849`](../../ui/dr-ui/src/lib.rs#L1849), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/app.slint:1463`](../../ui/dr-ui/ui/app.slint#L1463), [`ui/dr-ui/ui/app.slint:551`](../../ui/dr-ui/ui/app.slint#L551), [`ui/dr-ui/ui/library.slint:1966`](../../ui/dr-ui/ui/library.slint#L1966), [`ui/dr-ui/ui/library.slint:5077`](../../ui/dr-ui/ui/library.slint#L5077), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) |
| FR-MRG-10 | [`core/dr-gpu/src/merge.rs:1`](../../core/dr-gpu/src/merge.rs#L1), [`core/dr-gpu/src/shaders/merge.wgsl:1`](../../core/dr-gpu/src/shaders/merge.wgsl#L1), [`core/dr-pano/src/lib.rs:1`](../../core/dr-pano/src/lib.rs#L1) |
| FR-MRG-11 | [`core/dr-gpu/src/merge.rs:1`](../../core/dr-gpu/src/merge.rs#L1), [`core/dr-gpu/src/shaders/merge.wgsl:1`](../../core/dr-gpu/src/shaders/merge.wgsl#L1) |
| FR-MRG-2 | [`core/dr-gpu/src/adjust.rs:104`](../../core/dr-gpu/src/adjust.rs#L104), [`core/dr-gpu/src/adjust.rs:1157`](../../core/dr-gpu/src/adjust.rs#L1157), [`core/dr-gpu/src/adjust.rs:1276`](../../core/dr-gpu/src/adjust.rs#L1276), [`core/dr-gpu/src/adjust.rs:316`](../../core/dr-gpu/src/adjust.rs#L316), [`core/dr-pipeline/src/graph.rs:852`](../../core/dr-pipeline/src/graph.rs#L852), [`core/dr-pipeline/src/operation.rs:2187`](../../core/dr-pipeline/src/operation.rs#L2187), [`core/dr-pipeline/src/operation.rs:427`](../../core/dr-pipeline/src/operation.rs#L427), [`core/dr-pipeline/src/operation.rs:612`](../../core/dr-pipeline/src/operation.rs#L612), [`core/dr-pipeline/src/operation.rs:920`](../../core/dr-pipeline/src/operation.rs#L920), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1) |
@@ -112,32 +112,32 @@ _None._
| FR-MRG-4 | [`core/dr-export/src/inscribed.rs:1`](../../core/dr-export/src/inscribed.rs#L1), [`core/dr-pano/src/fill.rs:1`](../../core/dr-pano/src/fill.rs#L1), [`core/dr-pano/src/migan.rs:1`](../../core/dr-pano/src/migan.rs#L1), [`core/dr-pano/src/projection.rs:1`](../../core/dr-pano/src/projection.rs#L1), [`ui/dr-ui/src/library/paths.rs:365`](../../ui/dr-ui/src/library/paths.rs#L365), [`ui/dr-ui/src/library/paths.rs:369`](../../ui/dr-ui/src/library/paths.rs#L369), [`ui/dr-ui/src/merge.rs:147`](../../ui/dr-ui/src/merge.rs#L147), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1), [`ui/dr-ui/ui/merge.slint:46`](../../ui/dr-ui/ui/merge.slint#L46) |
| FR-MRG-5 | [`core/dr-pano/src/align.rs:1`](../../core/dr-pano/src/align.rs#L1), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) |
| FR-MRG-6 | [`core/dr-pipeline/src/sidecar.rs:1055`](../../core/dr-pipeline/src/sidecar.rs#L1055), [`core/dr-pipeline/src/sidecar.rs:116`](../../core/dr-pipeline/src/sidecar.rs#L116), [`core/dr-pipeline/src/sidecar.rs:126`](../../core/dr-pipeline/src/sidecar.rs#L126), [`core/dr-pipeline/src/sidecar.rs:2282`](../../core/dr-pipeline/src/sidecar.rs#L2282), [`core/dr-pipeline/src/sidecar.rs:860`](../../core/dr-pipeline/src/sidecar.rs#L860), [`ui/dr-ui/src/merge.rs:849`](../../ui/dr-ui/src/merge.rs#L849) |
-| FR-MRG-7 | [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/app.slint:548`](../../ui/dr-ui/ui/app.slint#L548), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) |
+| FR-MRG-7 | [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/app.slint:551`](../../ui/dr-ui/ui/app.slint#L551), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) |
| FR-MRG-8 | [`core/dr-pano/src/xfeat.rs:1`](../../core/dr-pano/src/xfeat.rs#L1), [`core/dr-segment/examples/onnx_probe.rs:1`](../../core/dr-segment/examples/onnx_probe.rs#L1) |
| FR-NC-1 | [`core/dr-sync-nextcloud/src/auth.rs:206`](../../core/dr-sync-nextcloud/src/auth.rs#L206), [`core/dr-sync-nextcloud/src/auth.rs:49`](../../core/dr-sync-nextcloud/src/auth.rs#L49), [`core/dr-sync-nextcloud/src/provider.rs:1`](../../core/dr-sync-nextcloud/src/provider.rs#L1), [`core/dr-sync/src/account.rs:375`](../../core/dr-sync/src/account.rs#L375), [`ui/dr-ui/src/launch.rs:316`](../../ui/dr-ui/src/launch.rs#L316), [`ui/dr-ui/src/launch.rs:61`](../../ui/dr-ui/src/launch.rs#L61), [`ui/dr-ui/src/launch_ui.rs:450`](../../ui/dr-ui/src/launch_ui.rs#L450) |
-| FR-NC-10 | [`core/dr-sync/src/account.rs:240`](../../core/dr-sync/src/account.rs#L240), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:709`](../../ui/dr-ui/src/lib.rs#L709), [`ui/dr-ui/src/library/paths.rs:69`](../../ui/dr-ui/src/library/paths.rs#L69), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:432`](../../ui/dr-ui/src/library/sidecar.rs#L432), [`ui/dr-ui/src/library/thumbnails_fetch.rs:449`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L449), [`ui/dr-ui/src/library_ui/controller.rs:657`](../../ui/dr-ui/src/library_ui/controller.rs#L657), [`ui/dr-ui/src/library_ui/offline.rs:623`](../../ui/dr-ui/src/library_ui/offline.rs#L623), [`ui/dr-ui/src/library_ui/sync.rs:100`](../../ui/dr-ui/src/library_ui/sync.rs#L100), [`ui/dr-ui/src/sidecar_cache.rs:1`](../../ui/dr-ui/src/sidecar_cache.rs#L1) |
+| FR-NC-10 | [`core/dr-sync/src/account.rs:240`](../../core/dr-sync/src/account.rs#L240), [`ui/dr-ui/src/export.rs:1`](../../ui/dr-ui/src/export.rs#L1), [`ui/dr-ui/src/lib.rs:710`](../../ui/dr-ui/src/lib.rs#L710), [`ui/dr-ui/src/library/paths.rs:69`](../../ui/dr-ui/src/library/paths.rs#L69), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:432`](../../ui/dr-ui/src/library/sidecar.rs#L432), [`ui/dr-ui/src/library/thumbnails_fetch.rs:449`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L449), [`ui/dr-ui/src/library_ui/controller.rs:657`](../../ui/dr-ui/src/library_ui/controller.rs#L657), [`ui/dr-ui/src/library_ui/offline.rs:623`](../../ui/dr-ui/src/library_ui/offline.rs#L623), [`ui/dr-ui/src/library_ui/sync.rs:100`](../../ui/dr-ui/src/library_ui/sync.rs#L100), [`ui/dr-ui/src/sidecar_cache.rs:1`](../../ui/dr-ui/src/sidecar_cache.rs#L1) |
| FR-NC-12 | [`core/dr-sync-folder/src/lib.rs:1`](../../core/dr-sync-folder/src/lib.rs#L1), [`core/dr-sync-nextcloud/src/lib.rs:1097`](../../core/dr-sync-nextcloud/src/lib.rs#L1097), [`core/dr-sync-nextcloud/src/lib.rs:40`](../../core/dr-sync-nextcloud/src/lib.rs#L40), [`core/dr-sync-nextcloud/src/provider.rs:1`](../../core/dr-sync-nextcloud/src/provider.rs#L1), [`core/dr-sync/src/account.rs:1`](../../core/dr-sync/src/account.rs#L1), [`core/dr-sync/src/account.rs:87`](../../core/dr-sync/src/account.rs#L87), [`core/dr-sync/src/lib.rs:218`](../../core/dr-sync/src/lib.rs#L218), [`core/dr-sync/src/lib.rs:51`](../../core/dr-sync/src/lib.rs#L51), [`core/dr-sync/src/provider.rs:120`](../../core/dr-sync/src/provider.rs#L120), [`core/dr-sync/src/provider.rs:1`](../../core/dr-sync/src/provider.rs#L1), [`core/dr-sync/src/provider.rs:53`](../../core/dr-sync/src/provider.rs#L53), [`core/dr-sync/src/reachability.rs:1`](../../core/dr-sync/src/reachability.rs#L1), [`ui/dr-ui/src/remote.rs:1`](../../ui/dr-ui/src/remote.rs#L1) |
| FR-NC-13 | [`core/dr-sync-folder/src/lib.rs:197`](../../core/dr-sync-folder/src/lib.rs#L197), [`core/dr-sync-folder/src/lib.rs:1`](../../core/dr-sync-folder/src/lib.rs#L1), [`core/dr-sync-folder/src/lib.rs:73`](../../core/dr-sync-folder/src/lib.rs#L73), [`core/dr-sync/src/provider.rs:120`](../../core/dr-sync/src/provider.rs#L120), [`ui/dr-ui/src/launch_ui.rs:349`](../../ui/dr-ui/src/launch_ui.rs#L349), [`ui/dr-ui/src/remote.rs:1`](../../ui/dr-ui/src/remote.rs#L1) |
| FR-NC-2 | [`core/dr-sync/src/account.rs:1`](../../core/dr-sync/src/account.rs#L1), [`core/dr-sync/src/account.rs:318`](../../core/dr-sync/src/account.rs#L318), [`core/dr-sync/src/account.rs:375`](../../core/dr-sync/src/account.rs#L375), [`core/dr-sync/src/account.rs:59`](../../core/dr-sync/src/account.rs#L59), [`platform/dr-plat/src/secrets.rs:82`](../../platform/dr-plat/src/secrets.rs#L82) |
-| FR-NC-3 | [`core/dr-decode/src/locate.rs:1`](../../core/dr-decode/src/locate.rs#L1), [`core/dr-decode/src/preview.rs:148`](../../core/dr-decode/src/preview.rs#L148), [`core/dr-sync/src/capability.rs:85`](../../core/dr-sync/src/capability.rs#L85), [`core/dr-thumbs/src/lib.rs:1`](../../core/dr-thumbs/src/lib.rs#L1), [`core/dr-types/src/place.rs:1`](../../core/dr-types/src/place.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:215`](../../ui/dr-ui/src/decoder_seam.rs#L215), [`ui/dr-ui/src/library/mod.rs:1`](../../ui/dr-ui/src/library/mod.rs#L1), [`ui/dr-ui/src/library/sweep.rs:562`](../../ui/dr-ui/src/library/sweep.rs#L562), [`ui/dr-ui/src/library_ui/grid.rs:479`](../../ui/dr-ui/src/library_ui/grid.rs#L479), [`ui/dr-ui/src/library_ui/mod.rs:1`](../../ui/dr-ui/src/library_ui/mod.rs#L1), [`ui/dr-ui/src/library_ui/sync.rs:385`](../../ui/dr-ui/src/library_ui/sync.rs#L385), [`ui/dr-ui/ui/library.slint:765`](../../ui/dr-ui/ui/library.slint#L765), [`ui/dr-ui/ui/settings.slint:366`](../../ui/dr-ui/ui/settings.slint#L366), [`ui/dr-ui/ui/settings.slint:74`](../../ui/dr-ui/ui/settings.slint#L74) |
+| FR-NC-3 | [`core/dr-decode/src/locate.rs:1`](../../core/dr-decode/src/locate.rs#L1), [`core/dr-decode/src/preview.rs:148`](../../core/dr-decode/src/preview.rs#L148), [`core/dr-sync/src/capability.rs:85`](../../core/dr-sync/src/capability.rs#L85), [`core/dr-thumbs/src/lib.rs:1`](../../core/dr-thumbs/src/lib.rs#L1), [`core/dr-types/src/place.rs:1`](../../core/dr-types/src/place.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:215`](../../ui/dr-ui/src/decoder_seam.rs#L215), [`ui/dr-ui/src/library/mod.rs:1`](../../ui/dr-ui/src/library/mod.rs#L1), [`ui/dr-ui/src/library/sweep.rs:562`](../../ui/dr-ui/src/library/sweep.rs#L562), [`ui/dr-ui/src/library_ui/grid.rs:479`](../../ui/dr-ui/src/library_ui/grid.rs#L479), [`ui/dr-ui/src/library_ui/mod.rs:1`](../../ui/dr-ui/src/library_ui/mod.rs#L1), [`ui/dr-ui/src/library_ui/sync.rs:385`](../../ui/dr-ui/src/library_ui/sync.rs#L385), [`ui/dr-ui/ui/library.slint:769`](../../ui/dr-ui/ui/library.slint#L769), [`ui/dr-ui/ui/settings.slint:366`](../../ui/dr-ui/ui/settings.slint#L366), [`ui/dr-ui/ui/settings.slint:74`](../../ui/dr-ui/ui/settings.slint#L74) |
| FR-NC-4 | [`core/dr-sync-folder/src/lib.rs:197`](../../core/dr-sync-folder/src/lib.rs#L197), [`core/dr-sync-nextcloud/src/propfind.rs:103`](../../core/dr-sync-nextcloud/src/propfind.rs#L103), [`core/dr-sync-nextcloud/src/propfind.rs:51`](../../core/dr-sync-nextcloud/src/propfind.rs#L51), [`core/dr-sync/src/capability.rs:6`](../../core/dr-sync/src/capability.rs#L6), [`core/dr-sync/src/lib.rs:218`](../../core/dr-sync/src/lib.rs#L218), [`core/dr-sync/src/scan.rs:129`](../../core/dr-sync/src/scan.rs#L129), [`ui/dr-ui/src/launch.rs:61`](../../ui/dr-ui/src/launch.rs#L61) |
| FR-NC-5 | [`core/dr-sync-nextcloud/src/propfind.rs:51`](../../core/dr-sync-nextcloud/src/propfind.rs#L51), [`ui/dr-ui/src/import.rs:504`](../../ui/dr-ui/src/import.rs#L504) |
| FR-NC-6 | [`ui/dr-ui/src/activity.rs:1`](../../ui/dr-ui/src/activity.rs#L1) |
-| FR-NC-6a | [`core/dr-catalog/src/cache.rs:1`](../../core/dr-catalog/src/cache.rs#L1), [`core/dr-catalog/src/cache.rs:225`](../../core/dr-catalog/src/cache.rs#L225), [`core/dr-catalog/src/schema.rs:1182`](../../core/dr-catalog/src/schema.rs#L1182), [`core/dr-catalog/src/schema.rs:1637`](../../core/dr-catalog/src/schema.rs#L1637), [`core/dr-sync-folder/src/borrow.rs:1`](../../core/dr-sync-folder/src/borrow.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/collections_ui/rename_menu.rs:75`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L75), [`ui/dr-ui/src/collections_ui/tree_sync.rs:111`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L111), [`ui/dr-ui/src/collections_ui/tree_sync.rs:387`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L387), [`ui/dr-ui/src/collections_ui/tree_sync.rs:38`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L38), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:560`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L560), [`ui/dr-ui/src/lib.rs:1600`](../../ui/dr-ui/src/lib.rs#L1600), [`ui/dr-ui/src/lib.rs:2744`](../../ui/dr-ui/src/lib.rs#L2744), [`ui/dr-ui/src/lib.rs:2815`](../../ui/dr-ui/src/lib.rs#L2815), [`ui/dr-ui/src/lib.rs:3033`](../../ui/dr-ui/src/lib.rs#L3033), [`ui/dr-ui/src/lib.rs:3034`](../../ui/dr-ui/src/lib.rs#L3034), [`ui/dr-ui/src/lib.rs:3073`](../../ui/dr-ui/src/lib.rs#L3073), [`ui/dr-ui/src/library/thumbnails_fetch.rs:118`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L118), [`ui/dr-ui/src/library/thumbnails_fetch.rs:393`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L393), [`ui/dr-ui/src/library/thumbnails_fetch.rs:574`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L574), [`ui/dr-ui/src/library/thumbnails_fetch.rs:718`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L718), [`ui/dr-ui/src/library/thumbnails_fetch.rs:733`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L733), [`ui/dr-ui/src/library/thumbnails_fetch.rs:95`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L95), [`ui/dr-ui/src/library_ui/controller.rs:339`](../../ui/dr-ui/src/library_ui/controller.rs#L339), [`ui/dr-ui/src/library_ui/controller.rs:350`](../../ui/dr-ui/src/library_ui/controller.rs#L350), [`ui/dr-ui/src/library_ui/controller.rs:365`](../../ui/dr-ui/src/library_ui/controller.rs#L365), [`ui/dr-ui/src/library_ui/controller.rs:374`](../../ui/dr-ui/src/library_ui/controller.rs#L374), [`ui/dr-ui/src/library_ui/controller.rs:382`](../../ui/dr-ui/src/library_ui/controller.rs#L382), [`ui/dr-ui/src/library_ui/controller.rs:512`](../../ui/dr-ui/src/library_ui/controller.rs#L512), [`ui/dr-ui/src/library_ui/controller.rs:522`](../../ui/dr-ui/src/library_ui/controller.rs#L522), [`ui/dr-ui/src/library_ui/controller.rs:537`](../../ui/dr-ui/src/library_ui/controller.rs#L537), [`ui/dr-ui/src/library_ui/controller.rs:584`](../../ui/dr-ui/src/library_ui/controller.rs#L584), [`ui/dr-ui/src/library_ui/controller.rs:599`](../../ui/dr-ui/src/library_ui/controller.rs#L599), [`ui/dr-ui/src/library_ui/controller.rs:673`](../../ui/dr-ui/src/library_ui/controller.rs#L673), [`ui/dr-ui/src/library_ui/controller.rs:704`](../../ui/dr-ui/src/library_ui/controller.rs#L704), [`ui/dr-ui/src/library_ui/controller.rs:716`](../../ui/dr-ui/src/library_ui/controller.rs#L716), [`ui/dr-ui/src/library_ui/filter_bar.rs:480`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L480), [`ui/dr-ui/src/library_ui/filter_bar.rs:500`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L500), [`ui/dr-ui/src/library_ui/offline.rs:196`](../../ui/dr-ui/src/library_ui/offline.rs#L196), [`ui/dr-ui/src/library_ui/offline.rs:20`](../../ui/dr-ui/src/library_ui/offline.rs#L20), [`ui/dr-ui/src/library_ui/offline.rs:261`](../../ui/dr-ui/src/library_ui/offline.rs#L261), [`ui/dr-ui/src/library_ui/offline.rs:407`](../../ui/dr-ui/src/library_ui/offline.rs#L407), [`ui/dr-ui/src/library_ui/offline.rs:528`](../../ui/dr-ui/src/library_ui/offline.rs#L528), [`ui/dr-ui/src/library_ui/offline.rs:93`](../../ui/dr-ui/src/library_ui/offline.rs#L93), [`ui/dr-ui/src/library_ui/window.rs:228`](../../ui/dr-ui/src/library_ui/window.rs#L228), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1), [`ui/dr-ui/src/settings_ui.rs:157`](../../ui/dr-ui/src/settings_ui.rs#L157), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:616`](../../ui/dr-ui/src/settings_ui.rs#L616), [`ui/dr-ui/ui/app.slint:1268`](../../ui/dr-ui/ui/app.slint#L1268), [`ui/dr-ui/ui/app.slint:3039`](../../ui/dr-ui/ui/app.slint#L3039), [`ui/dr-ui/ui/app.slint:443`](../../ui/dr-ui/ui/app.slint#L443), [`ui/dr-ui/ui/collections.slint:1044`](../../ui/dr-ui/ui/collections.slint#L1044), [`ui/dr-ui/ui/collections.slint:1055`](../../ui/dr-ui/ui/collections.slint#L1055), [`ui/dr-ui/ui/collections.slint:1134`](../../ui/dr-ui/ui/collections.slint#L1134), [`ui/dr-ui/ui/collections.slint:1235`](../../ui/dr-ui/ui/collections.slint#L1235), [`ui/dr-ui/ui/collections.slint:1243`](../../ui/dr-ui/ui/collections.slint#L1243), [`ui/dr-ui/ui/collections.slint:274`](../../ui/dr-ui/ui/collections.slint#L274), [`ui/dr-ui/ui/collections.slint:431`](../../ui/dr-ui/ui/collections.slint#L431), [`ui/dr-ui/ui/collections.slint:440`](../../ui/dr-ui/ui/collections.slint#L440), [`ui/dr-ui/ui/collections.slint:443`](../../ui/dr-ui/ui/collections.slint#L443), [`ui/dr-ui/ui/collections.slint:489`](../../ui/dr-ui/ui/collections.slint#L489), [`ui/dr-ui/ui/collections.slint:53`](../../ui/dr-ui/ui/collections.slint#L53), [`ui/dr-ui/ui/collections.slint:727`](../../ui/dr-ui/ui/collections.slint#L727), [`ui/dr-ui/ui/collections.slint:884`](../../ui/dr-ui/ui/collections.slint#L884), [`ui/dr-ui/ui/collections.slint:92`](../../ui/dr-ui/ui/collections.slint#L92), [`ui/dr-ui/ui/icons.slint:262`](../../ui/dr-ui/ui/icons.slint#L262), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:587`](../../ui/dr-ui/ui/settings.slint#L587) |
+| FR-NC-6a | [`core/dr-catalog/src/cache.rs:1`](../../core/dr-catalog/src/cache.rs#L1), [`core/dr-catalog/src/cache.rs:225`](../../core/dr-catalog/src/cache.rs#L225), [`core/dr-catalog/src/schema.rs:1182`](../../core/dr-catalog/src/schema.rs#L1182), [`core/dr-catalog/src/schema.rs:1637`](../../core/dr-catalog/src/schema.rs#L1637), [`core/dr-sync-folder/src/borrow.rs:1`](../../core/dr-sync-folder/src/borrow.rs#L1), [`core/dr-types/src/selector.rs:1`](../../core/dr-types/src/selector.rs#L1), [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/collections_ui/rename_menu.rs:75`](../../ui/dr-ui/src/collections_ui/rename_menu.rs#L75), [`ui/dr-ui/src/collections_ui/tree_sync.rs:111`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L111), [`ui/dr-ui/src/collections_ui/tree_sync.rs:387`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L387), [`ui/dr-ui/src/collections_ui/tree_sync.rs:38`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L38), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:560`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L560), [`ui/dr-ui/src/lib.rs:1601`](../../ui/dr-ui/src/lib.rs#L1601), [`ui/dr-ui/src/lib.rs:2745`](../../ui/dr-ui/src/lib.rs#L2745), [`ui/dr-ui/src/lib.rs:2816`](../../ui/dr-ui/src/lib.rs#L2816), [`ui/dr-ui/src/lib.rs:3034`](../../ui/dr-ui/src/lib.rs#L3034), [`ui/dr-ui/src/lib.rs:3035`](../../ui/dr-ui/src/lib.rs#L3035), [`ui/dr-ui/src/lib.rs:3074`](../../ui/dr-ui/src/lib.rs#L3074), [`ui/dr-ui/src/library/thumbnails_fetch.rs:118`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L118), [`ui/dr-ui/src/library/thumbnails_fetch.rs:393`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L393), [`ui/dr-ui/src/library/thumbnails_fetch.rs:574`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L574), [`ui/dr-ui/src/library/thumbnails_fetch.rs:718`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L718), [`ui/dr-ui/src/library/thumbnails_fetch.rs:733`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L733), [`ui/dr-ui/src/library/thumbnails_fetch.rs:95`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L95), [`ui/dr-ui/src/library_ui/controller.rs:339`](../../ui/dr-ui/src/library_ui/controller.rs#L339), [`ui/dr-ui/src/library_ui/controller.rs:350`](../../ui/dr-ui/src/library_ui/controller.rs#L350), [`ui/dr-ui/src/library_ui/controller.rs:365`](../../ui/dr-ui/src/library_ui/controller.rs#L365), [`ui/dr-ui/src/library_ui/controller.rs:374`](../../ui/dr-ui/src/library_ui/controller.rs#L374), [`ui/dr-ui/src/library_ui/controller.rs:382`](../../ui/dr-ui/src/library_ui/controller.rs#L382), [`ui/dr-ui/src/library_ui/controller.rs:512`](../../ui/dr-ui/src/library_ui/controller.rs#L512), [`ui/dr-ui/src/library_ui/controller.rs:522`](../../ui/dr-ui/src/library_ui/controller.rs#L522), [`ui/dr-ui/src/library_ui/controller.rs:537`](../../ui/dr-ui/src/library_ui/controller.rs#L537), [`ui/dr-ui/src/library_ui/controller.rs:584`](../../ui/dr-ui/src/library_ui/controller.rs#L584), [`ui/dr-ui/src/library_ui/controller.rs:599`](../../ui/dr-ui/src/library_ui/controller.rs#L599), [`ui/dr-ui/src/library_ui/controller.rs:673`](../../ui/dr-ui/src/library_ui/controller.rs#L673), [`ui/dr-ui/src/library_ui/controller.rs:704`](../../ui/dr-ui/src/library_ui/controller.rs#L704), [`ui/dr-ui/src/library_ui/controller.rs:716`](../../ui/dr-ui/src/library_ui/controller.rs#L716), [`ui/dr-ui/src/library_ui/filter_bar.rs:480`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L480), [`ui/dr-ui/src/library_ui/filter_bar.rs:500`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L500), [`ui/dr-ui/src/library_ui/offline.rs:196`](../../ui/dr-ui/src/library_ui/offline.rs#L196), [`ui/dr-ui/src/library_ui/offline.rs:20`](../../ui/dr-ui/src/library_ui/offline.rs#L20), [`ui/dr-ui/src/library_ui/offline.rs:261`](../../ui/dr-ui/src/library_ui/offline.rs#L261), [`ui/dr-ui/src/library_ui/offline.rs:407`](../../ui/dr-ui/src/library_ui/offline.rs#L407), [`ui/dr-ui/src/library_ui/offline.rs:528`](../../ui/dr-ui/src/library_ui/offline.rs#L528), [`ui/dr-ui/src/library_ui/offline.rs:93`](../../ui/dr-ui/src/library_ui/offline.rs#L93), [`ui/dr-ui/src/library_ui/window.rs:228`](../../ui/dr-ui/src/library_ui/window.rs#L228), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1), [`ui/dr-ui/src/settings_ui.rs:157`](../../ui/dr-ui/src/settings_ui.rs#L157), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:616`](../../ui/dr-ui/src/settings_ui.rs#L616), [`ui/dr-ui/ui/app.slint:1349`](../../ui/dr-ui/ui/app.slint#L1349), [`ui/dr-ui/ui/app.slint:3295`](../../ui/dr-ui/ui/app.slint#L3295), [`ui/dr-ui/ui/app.slint:446`](../../ui/dr-ui/ui/app.slint#L446), [`ui/dr-ui/ui/collections.slint:1061`](../../ui/dr-ui/ui/collections.slint#L1061), [`ui/dr-ui/ui/collections.slint:1072`](../../ui/dr-ui/ui/collections.slint#L1072), [`ui/dr-ui/ui/collections.slint:1151`](../../ui/dr-ui/ui/collections.slint#L1151), [`ui/dr-ui/ui/collections.slint:1252`](../../ui/dr-ui/ui/collections.slint#L1252), [`ui/dr-ui/ui/collections.slint:1260`](../../ui/dr-ui/ui/collections.slint#L1260), [`ui/dr-ui/ui/collections.slint:288`](../../ui/dr-ui/ui/collections.slint#L288), [`ui/dr-ui/ui/collections.slint:445`](../../ui/dr-ui/ui/collections.slint#L445), [`ui/dr-ui/ui/collections.slint:454`](../../ui/dr-ui/ui/collections.slint#L454), [`ui/dr-ui/ui/collections.slint:457`](../../ui/dr-ui/ui/collections.slint#L457), [`ui/dr-ui/ui/collections.slint:503`](../../ui/dr-ui/ui/collections.slint#L503), [`ui/dr-ui/ui/collections.slint:53`](../../ui/dr-ui/ui/collections.slint#L53), [`ui/dr-ui/ui/collections.slint:744`](../../ui/dr-ui/ui/collections.slint#L744), [`ui/dr-ui/ui/collections.slint:901`](../../ui/dr-ui/ui/collections.slint#L901), [`ui/dr-ui/ui/collections.slint:92`](../../ui/dr-ui/ui/collections.slint#L92), [`ui/dr-ui/ui/icons.slint:262`](../../ui/dr-ui/ui/icons.slint#L262), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:587`](../../ui/dr-ui/ui/settings.slint#L587) |
| FR-NC-6b | [`ui/dr-ui/src/library_ui/offline.rs:261`](../../ui/dr-ui/src/library_ui/offline.rs#L261), [`ui/dr-ui/src/memory.rs:1`](../../ui/dr-ui/src/memory.rs#L1) |
-| FR-NC-6c | [`core/dr-catalog/src/cache.rs:225`](../../core/dr-catalog/src/cache.rs#L225), [`core/dr-sync-folder/src/borrow.rs:1`](../../core/dr-sync-folder/src/borrow.rs#L1), [`core/dr-sync-folder/src/lib.rs:197`](../../core/dr-sync-folder/src/lib.rs#L197), [`core/dr-sync-folder/src/lib.rs:73`](../../core/dr-sync-folder/src/lib.rs#L73), [`core/dr-sync-folder/src/lib.rs:818`](../../core/dr-sync-folder/src/lib.rs#L818), [`core/dr-sync-folder/src/lib.rs:857`](../../core/dr-sync-folder/src/lib.rs#L857), [`core/dr-sync-folder/src/vfs.rs:1`](../../core/dr-sync-folder/src/vfs.rs#L1), [`core/dr-sync-nextcloud/src/desktop_client.rs:172`](../../core/dr-sync-nextcloud/src/desktop_client.rs#L172), [`core/dr-sync-nextcloud/src/desktop_client.rs:35`](../../core/dr-sync-nextcloud/src/desktop_client.rs#L35), [`core/dr-sync/src/capability.rs:41`](../../core/dr-sync/src/capability.rs#L41), [`core/dr-sync/src/error.rs:39`](../../core/dr-sync/src/error.rs#L39), [`core/dr-sync/src/lib.rs:158`](../../core/dr-sync/src/lib.rs#L158), [`core/dr-sync/src/types.rs:101`](../../core/dr-sync/src/types.rs#L101), [`core/dr-types/src/lib.rs:122`](../../core/dr-types/src/lib.rs#L122), [`core/dr-types/src/lib.rs:204`](../../core/dr-types/src/lib.rs#L204), [`ui/dr-ui/src/activity.rs:1`](../../ui/dr-ui/src/activity.rs#L1), [`ui/dr-ui/src/collections_ui/tree_sync.rs:111`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L111), [`ui/dr-ui/src/collections_ui/tree_sync.rs:387`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L387), [`ui/dr-ui/src/collections_ui/tree_sync.rs:38`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L38), [`ui/dr-ui/src/derived_sync.rs:1053`](../../ui/dr-ui/src/derived_sync.rs#L1053), [`ui/dr-ui/src/derived_sync.rs:652`](../../ui/dr-ui/src/derived_sync.rs#L652), [`ui/dr-ui/src/library/sidecar.rs:536`](../../ui/dr-ui/src/library/sidecar.rs#L536), [`ui/dr-ui/src/library/sweep.rs:685`](../../ui/dr-ui/src/library/sweep.rs#L685), [`ui/dr-ui/src/library/thumbnails_fetch.rs:215`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L215), [`ui/dr-ui/src/library/thumbnails_fetch.rs:305`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L305), [`ui/dr-ui/src/library_ui/offline.rs:20`](../../ui/dr-ui/src/library_ui/offline.rs#L20), [`ui/dr-ui/src/library_ui/offline.rs:310`](../../ui/dr-ui/src/library_ui/offline.rs#L310), [`ui/dr-ui/src/library_ui/offline.rs:93`](../../ui/dr-ui/src/library_ui/offline.rs#L93), [`ui/dr-ui/src/remote.rs:40`](../../ui/dr-ui/src/remote.rs#L40), [`ui/dr-ui/src/repairs.rs:1149`](../../ui/dr-ui/src/repairs.rs#L1149), [`ui/dr-ui/ui/collections.slint:274`](../../ui/dr-ui/ui/collections.slint#L274), [`ui/dr-ui/ui/collections.slint:884`](../../ui/dr-ui/ui/collections.slint#L884), [`ui/dr-ui/ui/icons.slint:262`](../../ui/dr-ui/ui/icons.slint#L262) |
+| FR-NC-6c | [`core/dr-catalog/src/cache.rs:225`](../../core/dr-catalog/src/cache.rs#L225), [`core/dr-sync-folder/src/borrow.rs:1`](../../core/dr-sync-folder/src/borrow.rs#L1), [`core/dr-sync-folder/src/lib.rs:197`](../../core/dr-sync-folder/src/lib.rs#L197), [`core/dr-sync-folder/src/lib.rs:73`](../../core/dr-sync-folder/src/lib.rs#L73), [`core/dr-sync-folder/src/lib.rs:818`](../../core/dr-sync-folder/src/lib.rs#L818), [`core/dr-sync-folder/src/lib.rs:857`](../../core/dr-sync-folder/src/lib.rs#L857), [`core/dr-sync-folder/src/vfs.rs:1`](../../core/dr-sync-folder/src/vfs.rs#L1), [`core/dr-sync-nextcloud/src/desktop_client.rs:172`](../../core/dr-sync-nextcloud/src/desktop_client.rs#L172), [`core/dr-sync-nextcloud/src/desktop_client.rs:35`](../../core/dr-sync-nextcloud/src/desktop_client.rs#L35), [`core/dr-sync/src/capability.rs:41`](../../core/dr-sync/src/capability.rs#L41), [`core/dr-sync/src/error.rs:39`](../../core/dr-sync/src/error.rs#L39), [`core/dr-sync/src/lib.rs:158`](../../core/dr-sync/src/lib.rs#L158), [`core/dr-sync/src/types.rs:101`](../../core/dr-sync/src/types.rs#L101), [`core/dr-types/src/lib.rs:122`](../../core/dr-types/src/lib.rs#L122), [`core/dr-types/src/lib.rs:204`](../../core/dr-types/src/lib.rs#L204), [`ui/dr-ui/src/activity.rs:1`](../../ui/dr-ui/src/activity.rs#L1), [`ui/dr-ui/src/collections_ui/tree_sync.rs:111`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L111), [`ui/dr-ui/src/collections_ui/tree_sync.rs:387`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L387), [`ui/dr-ui/src/collections_ui/tree_sync.rs:38`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L38), [`ui/dr-ui/src/derived_sync.rs:1053`](../../ui/dr-ui/src/derived_sync.rs#L1053), [`ui/dr-ui/src/derived_sync.rs:652`](../../ui/dr-ui/src/derived_sync.rs#L652), [`ui/dr-ui/src/library/sidecar.rs:536`](../../ui/dr-ui/src/library/sidecar.rs#L536), [`ui/dr-ui/src/library/sweep.rs:685`](../../ui/dr-ui/src/library/sweep.rs#L685), [`ui/dr-ui/src/library/thumbnails_fetch.rs:215`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L215), [`ui/dr-ui/src/library/thumbnails_fetch.rs:305`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L305), [`ui/dr-ui/src/library_ui/offline.rs:20`](../../ui/dr-ui/src/library_ui/offline.rs#L20), [`ui/dr-ui/src/library_ui/offline.rs:310`](../../ui/dr-ui/src/library_ui/offline.rs#L310), [`ui/dr-ui/src/library_ui/offline.rs:93`](../../ui/dr-ui/src/library_ui/offline.rs#L93), [`ui/dr-ui/src/remote.rs:40`](../../ui/dr-ui/src/remote.rs#L40), [`ui/dr-ui/src/repairs.rs:1149`](../../ui/dr-ui/src/repairs.rs#L1149), [`ui/dr-ui/ui/collections.slint:288`](../../ui/dr-ui/ui/collections.slint#L288), [`ui/dr-ui/ui/collections.slint:901`](../../ui/dr-ui/ui/collections.slint#L901), [`ui/dr-ui/ui/icons.slint:262`](../../ui/dr-ui/ui/icons.slint#L262) |
| FR-NC-6d | [`core/dr-sync-folder/src/borrow.rs:1`](../../core/dr-sync-folder/src/borrow.rs#L1), [`core/dr-sync-folder/src/lib.rs:1`](../../core/dr-sync-folder/src/lib.rs#L1), [`core/dr-sync-folder/src/vfs.rs:1`](../../core/dr-sync-folder/src/vfs.rs#L1) |
| FR-NC-7 | [`core/dr-catalog/src/face_shard.rs:1`](../../core/dr-catalog/src/face_shard.rs#L1), [`core/dr-sync-nextcloud/src/lib.rs:120`](../../core/dr-sync-nextcloud/src/lib.rs#L120), [`ui/dr-ui/src/derived_sync.rs:1`](../../ui/dr-ui/src/derived_sync.rs#L1), [`ui/dr-ui/src/library/sweep.rs:562`](../../ui/dr-ui/src/library/sweep.rs#L562), [`ui/dr-ui/src/library_ui/sync.rs:385`](../../ui/dr-ui/src/library_ui/sync.rs#L385), [`ui/dr-ui/ui/settings.slint:366`](../../ui/dr-ui/ui/settings.slint#L366) |
-| FR-NC-7a | [`core/dr-ingest/src/layout.rs:1`](../../core/dr-ingest/src/layout.rs#L1), [`core/dr-sync/src/upload.rs:1`](../../core/dr-sync/src/upload.rs#L1), [`core/dr-sync/src/upload.rs:40`](../../core/dr-sync/src/upload.rs#L40), [`core/dr-types/src/settings.rs:377`](../../core/dr-types/src/settings.rs#L377), [`ui/dr-ui/src/import.rs:100`](../../ui/dr-ui/src/import.rs#L100), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1818`](../../ui/dr-ui/src/lib.rs#L1818), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5) |
-| FR-NC-7b | [`core/dr-ingest/src/lib.rs:733`](../../core/dr-ingest/src/lib.rs#L733), [`core/dr-sync/src/upload.rs:1`](../../core/dr-sync/src/upload.rs#L1), [`ui/dr-ui/src/import.rs:100`](../../ui/dr-ui/src/import.rs#L100), [`ui/dr-ui/src/import.rs:125`](../../ui/dr-ui/src/import.rs#L125), [`ui/dr-ui/src/import.rs:346`](../../ui/dr-ui/src/import.rs#L346), [`ui/dr-ui/src/import.rs:600`](../../ui/dr-ui/src/import.rs#L600), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1818`](../../ui/dr-ui/src/lib.rs#L1818) |
-| FR-NC-8 | [`core/dr-catalog/src/rating.rs:1086`](../../core/dr-catalog/src/rating.rs#L1086), [`core/dr-catalog/src/rating.rs:210`](../../core/dr-catalog/src/rating.rs#L210), [`core/dr-catalog/src/rating.rs:72`](../../core/dr-catalog/src/rating.rs#L72), [`core/dr-catalog/src/schema.rs:327`](../../core/dr-catalog/src/schema.rs#L327), [`core/dr-pipeline/src/sidecar.rs:140`](../../core/dr-pipeline/src/sidecar.rs#L140), [`core/dr-pipeline/src/sidecar.rs:3064`](../../core/dr-pipeline/src/sidecar.rs#L3064), [`core/dr-pipeline/src/sidecar.rs:679`](../../core/dr-pipeline/src/sidecar.rs#L679), [`core/dr-pipeline/src/sidecar.rs:754`](../../core/dr-pipeline/src/sidecar.rs#L754), [`core/dr-pipeline/src/sidecar.rs:99`](../../core/dr-pipeline/src/sidecar.rs#L99), [`ui/dr-ui/src/lib.rs:2714`](../../ui/dr-ui/src/lib.rs#L2714), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:271`](../../ui/dr-ui/src/library/sidecar.rs#L271), [`ui/dr-ui/src/library/sidecar.rs:578`](../../ui/dr-ui/src/library/sidecar.rs#L578), [`ui/dr-ui/src/library/thumbnails_fetch.rs:504`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L504), [`ui/dr-ui/src/library_ui/controller.rs:625`](../../ui/dr-ui/src/library_ui/controller.rs#L625), [`ui/dr-ui/src/presets.rs:288`](../../ui/dr-ui/src/presets.rs#L288), [`ui/dr-ui/src/presets.rs:336`](../../ui/dr-ui/src/presets.rs#L336) |
+| FR-NC-7a | [`core/dr-ingest/src/layout.rs:1`](../../core/dr-ingest/src/layout.rs#L1), [`core/dr-sync/src/upload.rs:1`](../../core/dr-sync/src/upload.rs#L1), [`core/dr-sync/src/upload.rs:40`](../../core/dr-sync/src/upload.rs#L40), [`core/dr-types/src/settings.rs:377`](../../core/dr-types/src/settings.rs#L377), [`ui/dr-ui/src/import.rs:100`](../../ui/dr-ui/src/import.rs#L100), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1819`](../../ui/dr-ui/src/lib.rs#L1819), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5) |
+| FR-NC-7b | [`core/dr-ingest/src/lib.rs:733`](../../core/dr-ingest/src/lib.rs#L733), [`core/dr-sync/src/upload.rs:1`](../../core/dr-sync/src/upload.rs#L1), [`ui/dr-ui/src/import.rs:100`](../../ui/dr-ui/src/import.rs#L100), [`ui/dr-ui/src/import.rs:125`](../../ui/dr-ui/src/import.rs#L125), [`ui/dr-ui/src/import.rs:346`](../../ui/dr-ui/src/import.rs#L346), [`ui/dr-ui/src/import.rs:600`](../../ui/dr-ui/src/import.rs#L600), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1819`](../../ui/dr-ui/src/lib.rs#L1819) |
+| FR-NC-8 | [`core/dr-catalog/src/rating.rs:1086`](../../core/dr-catalog/src/rating.rs#L1086), [`core/dr-catalog/src/rating.rs:210`](../../core/dr-catalog/src/rating.rs#L210), [`core/dr-catalog/src/rating.rs:72`](../../core/dr-catalog/src/rating.rs#L72), [`core/dr-catalog/src/schema.rs:327`](../../core/dr-catalog/src/schema.rs#L327), [`core/dr-pipeline/src/sidecar.rs:140`](../../core/dr-pipeline/src/sidecar.rs#L140), [`core/dr-pipeline/src/sidecar.rs:3064`](../../core/dr-pipeline/src/sidecar.rs#L3064), [`core/dr-pipeline/src/sidecar.rs:679`](../../core/dr-pipeline/src/sidecar.rs#L679), [`core/dr-pipeline/src/sidecar.rs:754`](../../core/dr-pipeline/src/sidecar.rs#L754), [`core/dr-pipeline/src/sidecar.rs:99`](../../core/dr-pipeline/src/sidecar.rs#L99), [`ui/dr-ui/src/lib.rs:2715`](../../ui/dr-ui/src/lib.rs#L2715), [`ui/dr-ui/src/library/sidecar.rs:11`](../../ui/dr-ui/src/library/sidecar.rs#L11), [`ui/dr-ui/src/library/sidecar.rs:271`](../../ui/dr-ui/src/library/sidecar.rs#L271), [`ui/dr-ui/src/library/sidecar.rs:578`](../../ui/dr-ui/src/library/sidecar.rs#L578), [`ui/dr-ui/src/library/thumbnails_fetch.rs:504`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L504), [`ui/dr-ui/src/library_ui/controller.rs:625`](../../ui/dr-ui/src/library_ui/controller.rs#L625), [`ui/dr-ui/src/presets.rs:288`](../../ui/dr-ui/src/presets.rs#L288), [`ui/dr-ui/src/presets.rs:336`](../../ui/dr-ui/src/presets.rs#L336) |
| FR-NC-9 | [`core/dr-catalog/src/merge.rs:1`](../../core/dr-catalog/src/merge.rs#L1), [`core/dr-catalog/src/rating.rs:1086`](../../core/dr-catalog/src/rating.rs#L1086), [`core/dr-catalog/src/rating.rs:210`](../../core/dr-catalog/src/rating.rs#L210), [`core/dr-catalog/src/rating.rs:72`](../../core/dr-catalog/src/rating.rs#L72), [`core/dr-catalog/src/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`core/dr-catalog/src/schema.rs:327`](../../core/dr-catalog/src/schema.rs#L327), [`core/dr-catalog/src/schema.rs:740`](../../core/dr-catalog/src/schema.rs#L740), [`core/dr-catalog/src/sync.rs:1`](../../core/dr-catalog/src/sync.rs#L1), [`core/dr-pipeline/src/sidecar.rs:206`](../../core/dr-pipeline/src/sidecar.rs#L206), [`core/dr-pipeline/src/sidecar.rs:233`](../../core/dr-pipeline/src/sidecar.rs#L233), [`core/dr-pipeline/src/sidecar.rs:2561`](../../core/dr-pipeline/src/sidecar.rs#L2561), [`core/dr-pipeline/src/sidecar.rs:2798`](../../core/dr-pipeline/src/sidecar.rs#L2798), [`core/dr-pipeline/src/sidecar.rs:3064`](../../core/dr-pipeline/src/sidecar.rs#L3064), [`core/dr-pipeline/src/sidecar.rs:410`](../../core/dr-pipeline/src/sidecar.rs#L410), [`core/dr-pipeline/src/sidecar.rs:508`](../../core/dr-pipeline/src/sidecar.rs#L508), [`core/dr-pipeline/src/sidecar.rs:679`](../../core/dr-pipeline/src/sidecar.rs#L679), [`core/dr-pipeline/src/sidecar.rs:729`](../../core/dr-pipeline/src/sidecar.rs#L729), [`core/dr-pipeline/src/sidecar.rs:754`](../../core/dr-pipeline/src/sidecar.rs#L754), [`core/dr-pipeline/src/spot.rs:245`](../../core/dr-pipeline/src/spot.rs#L245), [`core/dr-pipeline/tests/mask_sidecar.rs:1075`](../../core/dr-pipeline/tests/mask_sidecar.rs#L1075), [`core/dr-pipeline/tests/spot_sidecar.rs:1`](../../core/dr-pipeline/tests/spot_sidecar.rs#L1), [`core/dr-sync-nextcloud/src/lib.rs:139`](../../core/dr-sync-nextcloud/src/lib.rs#L139), [`core/dr-sync/src/scan.rs:31`](../../core/dr-sync/src/scan.rs#L31), [`core/dr-sync/src/scan.rs:56`](../../core/dr-sync/src/scan.rs#L56), [`core/dr-sync/src/scan.rs:926`](../../core/dr-sync/src/scan.rs#L926), [`core/dr-xmp/src/lib.rs:733`](../../core/dr-xmp/src/lib.rs#L733), [`core/dr-xmp/src/lib.rs:746`](../../core/dr-xmp/src/lib.rs#L746), [`ui/dr-ui/src/derived_sync.rs:1081`](../../ui/dr-ui/src/derived_sync.rs#L1081), [`ui/dr-ui/src/derived_sync.rs:623`](../../ui/dr-ui/src/derived_sync.rs#L623), [`ui/dr-ui/src/derived_sync.rs:652`](../../ui/dr-ui/src/derived_sync.rs#L652), [`ui/dr-ui/src/derived_sync.rs:685`](../../ui/dr-ui/src/derived_sync.rs#L685), [`ui/dr-ui/src/derived_sync.rs:832`](../../ui/dr-ui/src/derived_sync.rs#L832), [`ui/dr-ui/src/library/scan.rs:226`](../../ui/dr-ui/src/library/scan.rs#L226), [`ui/dr-ui/src/library/scan.rs:261`](../../ui/dr-ui/src/library/scan.rs#L261), [`ui/dr-ui/src/library/scan.rs:34`](../../ui/dr-ui/src/library/scan.rs#L34), [`ui/dr-ui/src/library/sidecar.rs:271`](../../ui/dr-ui/src/library/sidecar.rs#L271), [`ui/dr-ui/src/library/sidecar.rs:348`](../../ui/dr-ui/src/library/sidecar.rs#L348), [`ui/dr-ui/src/library/sidecar.rs:432`](../../ui/dr-ui/src/library/sidecar.rs#L432), [`ui/dr-ui/src/library/sidecar.rs:578`](../../ui/dr-ui/src/library/sidecar.rs#L578), [`ui/dr-ui/src/library/sidecar.rs:598`](../../ui/dr-ui/src/library/sidecar.rs#L598), [`ui/dr-ui/src/library/thumbnails_fetch.rs:504`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L504), [`ui/dr-ui/src/library_ui/open.rs:455`](../../ui/dr-ui/src/library_ui/open.rs#L455), [`ui/dr-ui/src/presets.rs:288`](../../ui/dr-ui/src/presets.rs#L288), [`ui/dr-ui/src/presets.rs:336`](../../ui/dr-ui/src/presets.rs#L336), [`ui/dr-ui/src/xmp_sync.rs:1`](../../ui/dr-ui/src/xmp_sync.rs#L1), [`ui/dr-ui/src/xmp_sync.rs:287`](../../ui/dr-ui/src/xmp_sync.rs#L287) |
| FR-PLAT-AND-2 | [`core/dr-catalog/src/walk.rs:1022`](../../core/dr-catalog/src/walk.rs#L1022), [`core/dr-catalog/src/walk.rs:435`](../../core/dr-catalog/src/walk.rs#L435), [`core/dr-sync-folder/src/lib.rs:242`](../../core/dr-sync-folder/src/lib.rs#L242), [`core/dr-sync-folder/src/tests.rs:51`](../../core/dr-sync-folder/src/tests.rs#L51), [`core/dr-sync/src/error.rs:113`](../../core/dr-sync/src/error.rs#L113), [`core/dr-sync/src/error.rs:195`](../../core/dr-sync/src/error.rs#L195), [`core/dr-sync/src/scan.rs:211`](../../core/dr-sync/src/scan.rs#L211), [`core/dr-sync/src/scan.rs:519`](../../core/dr-sync/src/scan.rs#L519), [`core/dr-sync/src/scan.rs:545`](../../core/dr-sync/src/scan.rs#L545), [`core/dr-sync/src/scan.rs:574`](../../core/dr-sync/src/scan.rs#L574), [`ui/dr-ui/src/library/scan.rs:126`](../../ui/dr-ui/src/library/scan.rs#L126), [`ui/dr-ui/src/library/scan.rs:179`](../../ui/dr-ui/src/library/scan.rs#L179), [`ui/dr-ui/src/library/scan.rs:210`](../../ui/dr-ui/src/library/scan.rs#L210), [`ui/dr-ui/src/library/scan.rs:624`](../../ui/dr-ui/src/library/scan.rs#L624), [`ui/dr-ui/src/library_ui/controller.rs:323`](../../ui/dr-ui/src/library_ui/controller.rs#L323), [`ui/dr-ui/src/library_ui/controller.rs:568`](../../ui/dr-ui/src/library_ui/controller.rs#L568), [`ui/dr-ui/src/library_ui/offline.rs:569`](../../ui/dr-ui/src/library_ui/offline.rs#L569), [`ui/dr-ui/src/library_ui/open.rs:426`](../../ui/dr-ui/src/library_ui/open.rs#L426), [`ui/dr-ui/src/library_ui/open.rs:533`](../../ui/dr-ui/src/library_ui/open.rs#L533) |
| FR-PLAT-AND-3 | [`core/dr-catalog/src/jobs.rs:1`](../../core/dr-catalog/src/jobs.rs#L1), [`core/dr-catalog/src/runner.rs:1`](../../core/dr-catalog/src/runner.rs#L1) |
| FR-PLAT-AND-4 | [`core/dr-catalog/src/runner.rs:1`](../../core/dr-catalog/src/runner.rs#L1) |
-| FR-PLAT-AND-5 | [`apps/darkroom-android/src/lib.rs:166`](../../apps/darkroom-android/src/lib.rs#L166), [`core/dr-gpu/src/adjust.rs:1057`](../../core/dr-gpu/src/adjust.rs#L1057), [`core/dr-gpu/src/detail.rs:161`](../../core/dr-gpu/src/detail.rs#L161), [`core/dr-gpu/src/detail.rs:547`](../../core/dr-gpu/src/detail.rs#L547), [`core/dr-gpu/tests/detail_stage.rs:417`](../../core/dr-gpu/tests/detail_stage.rs#L417), [`ui/dr-ui/src/develop/render.rs:601`](../../ui/dr-ui/src/develop/render.rs#L601), [`ui/dr-ui/src/identity_ui.rs:125`](../../ui/dr-ui/src/identity_ui.rs#L125), [`ui/dr-ui/src/lib.rs:1245`](../../ui/dr-ui/src/lib.rs#L1245), [`ui/dr-ui/src/lib.rs:1627`](../../ui/dr-ui/src/lib.rs#L1627), [`ui/dr-ui/src/memory.rs:163`](../../ui/dr-ui/src/memory.rs#L163), [`ui/dr-ui/src/memory.rs:1`](../../ui/dr-ui/src/memory.rs#L1) |
+| FR-PLAT-AND-5 | [`apps/darkroom-android/src/lib.rs:166`](../../apps/darkroom-android/src/lib.rs#L166), [`core/dr-gpu/src/adjust.rs:1057`](../../core/dr-gpu/src/adjust.rs#L1057), [`core/dr-gpu/src/detail.rs:161`](../../core/dr-gpu/src/detail.rs#L161), [`core/dr-gpu/src/detail.rs:547`](../../core/dr-gpu/src/detail.rs#L547), [`core/dr-gpu/tests/detail_stage.rs:417`](../../core/dr-gpu/tests/detail_stage.rs#L417), [`ui/dr-ui/src/develop/render.rs:601`](../../ui/dr-ui/src/develop/render.rs#L601), [`ui/dr-ui/src/identity_ui.rs:125`](../../ui/dr-ui/src/identity_ui.rs#L125), [`ui/dr-ui/src/lib.rs:1246`](../../ui/dr-ui/src/lib.rs#L1246), [`ui/dr-ui/src/lib.rs:1628`](../../ui/dr-ui/src/lib.rs#L1628), [`ui/dr-ui/src/memory.rs:163`](../../ui/dr-ui/src/memory.rs#L163), [`ui/dr-ui/src/memory.rs:1`](../../ui/dr-ui/src/memory.rs#L1) |
| FR-PLAT-AND-6 | [`apps/darkroom-android/src/lib.rs:441`](../../apps/darkroom-android/src/lib.rs#L441) |
-| FR-PLAT-LIN-1 | [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`platform/dr-plat/src/dirs.rs:1`](../../platform/dr-plat/src/dirs.rs#L1), [`platform/dr-plat/src/storage.rs:344`](../../platform/dr-plat/src/storage.rs#L344), [`ui/dr-ui/src/lib.rs:1413`](../../ui/dr-ui/src/lib.rs#L1413), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1) |
+| FR-PLAT-LIN-1 | [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`platform/dr-plat/src/dirs.rs:1`](../../platform/dr-plat/src/dirs.rs#L1), [`platform/dr-plat/src/storage.rs:344`](../../platform/dr-plat/src/storage.rs#L344), [`ui/dr-ui/src/lib.rs:1414`](../../ui/dr-ui/src/lib.rs#L1414), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1) |
| FR-PLAT-LIN-2 | [`platform/dr-plat/src/display.rs:1`](../../platform/dr-plat/src/display.rs#L1), [`platform/dr-plat/src/display/wayland.rs:1`](../../platform/dr-plat/src/display/wayland.rs#L1), [`platform/dr-plat/src/display/x11.rs:1`](../../platform/dr-plat/src/display/x11.rs#L1) |
| FR-PLAT-WIN-1 | [`platform/dr-plat/src/dirs.rs:1`](../../platform/dr-plat/src/dirs.rs#L1) |
| FR-PLAT-WIN-2 | [`apps/darkroom-desktop/build.rs:1`](../../apps/darkroom-desktop/build.rs#L1), [`apps/darkroom-desktop/src/main.rs:6`](../../apps/darkroom-desktop/src/main.rs#L6), [`ui/dr-ui/src/launch_ui.rs:875`](../../ui/dr-ui/src/launch_ui.rs#L875) |
@@ -147,26 +147,26 @@ _None._
| FR-RAW-3 | [`core/dr-decode/src/lib.rs:161`](../../core/dr-decode/src/lib.rs#L161), [`core/dr-decode/src/lib.rs:552`](../../core/dr-decode/src/lib.rs#L552), [`core/dr-decode/src/locate.rs:1435`](../../core/dr-decode/src/locate.rs#L1435) |
| FR-RAW-4 | [`core/dr-decode/src/error.rs:1`](../../core/dr-decode/src/error.rs#L1), [`core/dr-decode/src/error.rs:30`](../../core/dr-decode/src/error.rs#L30), [`ui/dr-ui/src/lib.rs:283`](../../ui/dr-ui/src/lib.rs#L283) |
| FR-RAW-5 | [`core/dr-decode/src/lib.rs:189`](../../core/dr-decode/src/lib.rs#L189), [`core/dr-gpu/src/demosaic.rs:34`](../../core/dr-gpu/src/demosaic.rs#L34), [`core/dr-gpu/src/demosaic.rs:734`](../../core/dr-gpu/src/demosaic.rs#L734), [`core/dr-gpu/src/demosaic.rs:813`](../../core/dr-gpu/src/demosaic.rs#L813), [`core/dr-gpu/src/demosaic.rs:937`](../../core/dr-gpu/src/demosaic.rs#L937) |
-| FR-UI-1 | [`core/dr-types/src/settings.rs:1377`](../../core/dr-types/src/settings.rs#L1377), [`core/dr-types/src/settings.rs:492`](../../core/dr-types/src/settings.rs#L492), [`core/dr-types/src/settings.rs:512`](../../core/dr-types/src/settings.rs#L512), [`ui/dr-ui/src/develop_ui.rs:204`](../../ui/dr-ui/src/develop_ui.rs#L204), [`ui/dr-ui/src/lib.rs:114`](../../ui/dr-ui/src/lib.rs#L114), [`ui/dr-ui/src/lib.rs:129`](../../ui/dr-ui/src/lib.rs#L129), [`ui/dr-ui/src/lib.rs:151`](../../ui/dr-ui/src/lib.rs#L151), [`ui/dr-ui/src/lib.rs:3224`](../../ui/dr-ui/src/lib.rs#L3224), [`ui/dr-ui/src/lib.rs:3243`](../../ui/dr-ui/src/lib.rs#L3243), [`ui/dr-ui/src/lib.rs:3270`](../../ui/dr-ui/src/lib.rs#L3270), [`ui/dr-ui/src/lib.rs:3321`](../../ui/dr-ui/src/lib.rs#L3321), [`ui/dr-ui/src/lib.rs:3354`](../../ui/dr-ui/src/lib.rs#L3354), [`ui/dr-ui/src/masks_ui.rs:1567`](../../ui/dr-ui/src/masks_ui.rs#L1567), [`ui/dr-ui/src/settings_ui.rs:179`](../../ui/dr-ui/src/settings_ui.rs#L179), [`ui/dr-ui/ui/adjust.slint:982`](../../ui/dr-ui/ui/adjust.slint#L982), [`ui/dr-ui/ui/app.slint:2730`](../../ui/dr-ui/ui/app.slint#L2730), [`ui/dr-ui/ui/app.slint:622`](../../ui/dr-ui/ui/app.slint#L622), [`ui/dr-ui/ui/app.slint:705`](../../ui/dr-ui/ui/app.slint#L705), [`ui/dr-ui/ui/identity.slint:248`](../../ui/dr-ui/ui/identity.slint#L248), [`ui/dr-ui/ui/library.slint:1383`](../../ui/dr-ui/ui/library.slint#L1383), [`ui/dr-ui/ui/settings.slint:123`](../../ui/dr-ui/ui/settings.slint#L123), [`ui/dr-ui/ui/settings.slint:612`](../../ui/dr-ui/ui/settings.slint#L612), [`ui/dr-ui/ui/toolrail.slint:156`](../../ui/dr-ui/ui/toolrail.slint#L156), [`ui/dr-ui/ui/toolrail.slint:89`](../../ui/dr-ui/ui/toolrail.slint#L89) |
-| FR-UI-2 | [`ui/dr-ui/src/collections_ui/controller.rs:45`](../../ui/dr-ui/src/collections_ui/controller.rs#L45), [`ui/dr-ui/src/collections_ui/controller.rs:83`](../../ui/dr-ui/src/collections_ui/controller.rs#L83), [`ui/dr-ui/src/collections_ui/drag.rs:246`](../../ui/dr-ui/src/collections_ui/drag.rs#L246), [`ui/dr-ui/src/collections_ui/drag.rs:256`](../../ui/dr-ui/src/collections_ui/drag.rs#L256), [`ui/dr-ui/src/collections_ui/press.rs:453`](../../ui/dr-ui/src/collections_ui/press.rs#L453), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:138`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L138), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:415`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L415), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/gestures.rs:1`](../../ui/dr-ui/src/gestures.rs#L1), [`ui/dr-ui/src/lib.rs:114`](../../ui/dr-ui/src/lib.rs#L114), [`ui/dr-ui/src/library_ui/filter_bar.rs:351`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L351), [`ui/dr-ui/src/library_ui/window.rs:875`](../../ui/dr-ui/src/library_ui/window.rs#L875), [`ui/dr-ui/ui/app.slint:128`](../../ui/dr-ui/ui/app.slint#L128), [`ui/dr-ui/ui/app.slint:689`](../../ui/dr-ui/ui/app.slint#L689), [`ui/dr-ui/ui/collections.slint:1260`](../../ui/dr-ui/ui/collections.slint#L1260), [`ui/dr-ui/ui/controls.slint:626`](../../ui/dr-ui/ui/controls.slint#L626), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/library.slint:1270`](../../ui/dr-ui/ui/library.slint#L1270), [`ui/dr-ui/ui/library.slint:1303`](../../ui/dr-ui/ui/library.slint#L1303), [`ui/dr-ui/ui/library.slint:1615`](../../ui/dr-ui/ui/library.slint#L1615), [`ui/dr-ui/ui/library.slint:1622`](../../ui/dr-ui/ui/library.slint#L1622), [`ui/dr-ui/ui/library.slint:1723`](../../ui/dr-ui/ui/library.slint#L1723), [`ui/dr-ui/ui/library.slint:3058`](../../ui/dr-ui/ui/library.slint#L3058), [`ui/dr-ui/ui/library.slint:5046`](../../ui/dr-ui/ui/library.slint#L5046), [`ui/dr-ui/ui/library.slint:560`](../../ui/dr-ui/ui/library.slint#L560), [`ui/dr-ui/ui/presets.slint:19`](../../ui/dr-ui/ui/presets.slint#L19), [`ui/dr-ui/ui/settings.slint:137`](../../ui/dr-ui/ui/settings.slint#L137) |
-| FR-UI-3 | [`ui/dr-ui/src/collections_ui/controller.rs:138`](../../ui/dr-ui/src/collections_ui/controller.rs#L138), [`ui/dr-ui/src/collections_ui/controller.rs:343`](../../ui/dr-ui/src/collections_ui/controller.rs#L343), [`ui/dr-ui/src/collections_ui/controller.rs:356`](../../ui/dr-ui/src/collections_ui/controller.rs#L356), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/develop/masks.rs:361`](../../ui/dr-ui/src/develop/masks.rs#L361), [`ui/dr-ui/src/develop/repairs.rs:49`](../../ui/dr-ui/src/develop/repairs.rs#L49), [`ui/dr-ui/src/library_ui/grid.rs:168`](../../ui/dr-ui/src/library_ui/grid.rs#L168), [`ui/dr-ui/src/masks_ui.rs:1659`](../../ui/dr-ui/src/masks_ui.rs#L1659), [`ui/dr-ui/src/masks_ui.rs:1681`](../../ui/dr-ui/src/masks_ui.rs#L1681), [`ui/dr-ui/src/masks_ui.rs:339`](../../ui/dr-ui/src/masks_ui.rs#L339), [`ui/dr-ui/src/spots_ui.rs:19`](../../ui/dr-ui/src/spots_ui.rs#L19), [`ui/dr-ui/ui/app.slint:2114`](../../ui/dr-ui/ui/app.slint#L2114), [`ui/dr-ui/ui/collections.slint:1134`](../../ui/dr-ui/ui/collections.slint#L1134), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:76`](../../ui/dr-ui/ui/collections.slint#L76), [`ui/dr-ui/ui/collections.slint:884`](../../ui/dr-ui/ui/collections.slint#L884), [`ui/dr-ui/ui/masks.slint:1240`](../../ui/dr-ui/ui/masks.slint#L1240), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) |
-| FR-UI-4 | [`tools/traceability/src/gestures.rs:1`](../../tools/traceability/src/gestures.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:138`](../../ui/dr-ui/src/collections_ui/controller.rs#L138), [`ui/dr-ui/src/collections_ui/controller.rs:343`](../../ui/dr-ui/src/collections_ui/controller.rs#L343), [`ui/dr-ui/src/collections_ui/controller.rs:356`](../../ui/dr-ui/src/collections_ui/controller.rs#L356), [`ui/dr-ui/src/collections_ui/controller.rs:45`](../../ui/dr-ui/src/collections_ui/controller.rs#L45), [`ui/dr-ui/src/collections_ui/controller.rs:46`](../../ui/dr-ui/src/collections_ui/controller.rs#L46), [`ui/dr-ui/src/collections_ui/controller.rs:55`](../../ui/dr-ui/src/collections_ui/controller.rs#L55), [`ui/dr-ui/src/collections_ui/controller.rs:83`](../../ui/dr-ui/src/collections_ui/controller.rs#L83), [`ui/dr-ui/src/collections_ui/drag.rs:246`](../../ui/dr-ui/src/collections_ui/drag.rs#L246), [`ui/dr-ui/src/collections_ui/drag.rs:256`](../../ui/dr-ui/src/collections_ui/drag.rs#L256), [`ui/dr-ui/src/collections_ui/press.rs:258`](../../ui/dr-ui/src/collections_ui/press.rs#L258), [`ui/dr-ui/src/collections_ui/press.rs:278`](../../ui/dr-ui/src/collections_ui/press.rs#L278), [`ui/dr-ui/src/collections_ui/press.rs:453`](../../ui/dr-ui/src/collections_ui/press.rs#L453), [`ui/dr-ui/src/collections_ui/press.rs:490`](../../ui/dr-ui/src/collections_ui/press.rs#L490), [`ui/dr-ui/src/collections_ui/press.rs:54`](../../ui/dr-ui/src/collections_ui/press.rs#L54), [`ui/dr-ui/src/collections_ui/tree_sync.rs:339`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L339), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:138`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L138), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:264`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L264), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:415`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L415), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:444`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L444), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:577`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L577), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:344`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L344), [`ui/dr-ui/src/develop/framing.rs:257`](../../ui/dr-ui/src/develop/framing.rs#L257), [`ui/dr-ui/src/develop/framing.rs:594`](../../ui/dr-ui/src/develop/framing.rs#L594), [`ui/dr-ui/src/develop/framing.rs:619`](../../ui/dr-ui/src/develop/framing.rs#L619), [`ui/dr-ui/src/develop/framing.rs:630`](../../ui/dr-ui/src/develop/framing.rs#L630), [`ui/dr-ui/src/develop/framing.rs:644`](../../ui/dr-ui/src/develop/framing.rs#L644), [`ui/dr-ui/src/develop/framing.rs:818`](../../ui/dr-ui/src/develop/framing.rs#L818), [`ui/dr-ui/src/develop/framing.rs:849`](../../ui/dr-ui/src/develop/framing.rs#L849), [`ui/dr-ui/src/develop/framing.rs:870`](../../ui/dr-ui/src/develop/framing.rs#L870), [`ui/dr-ui/src/develop/framing.rs:995`](../../ui/dr-ui/src/develop/framing.rs#L995), [`ui/dr-ui/src/develop/render.rs:1107`](../../ui/dr-ui/src/develop/render.rs#L1107), [`ui/dr-ui/src/develop/render.rs:1132`](../../ui/dr-ui/src/develop/render.rs#L1132), [`ui/dr-ui/src/develop/render.rs:1155`](../../ui/dr-ui/src/develop/render.rs#L1155), [`ui/dr-ui/src/develop/render.rs:1194`](../../ui/dr-ui/src/develop/render.rs#L1194), [`ui/dr-ui/src/develop/render.rs:47`](../../ui/dr-ui/src/develop/render.rs#L47), [`ui/dr-ui/src/develop/render.rs:66`](../../ui/dr-ui/src/develop/render.rs#L66), [`ui/dr-ui/src/develop/render.rs:79`](../../ui/dr-ui/src/develop/render.rs#L79), [`ui/dr-ui/src/develop_ui.rs:812`](../../ui/dr-ui/src/develop_ui.rs#L812), [`ui/dr-ui/src/gesture_book.rs:3`](../../ui/dr-ui/src/gesture_book.rs#L3), [`ui/dr-ui/src/gestures.rs:1`](../../ui/dr-ui/src/gestures.rs#L1), [`ui/dr-ui/src/lib.rs:1312`](../../ui/dr-ui/src/lib.rs#L1312), [`ui/dr-ui/src/lib.rs:1600`](../../ui/dr-ui/src/lib.rs#L1600), [`ui/dr-ui/src/lib.rs:2596`](../../ui/dr-ui/src/lib.rs#L2596), [`ui/dr-ui/src/lib.rs:2815`](../../ui/dr-ui/src/lib.rs#L2815), [`ui/dr-ui/src/lib.rs:2875`](../../ui/dr-ui/src/lib.rs#L2875), [`ui/dr-ui/src/lib.rs:3034`](../../ui/dr-ui/src/lib.rs#L3034), [`ui/dr-ui/src/lib.rs:3474`](../../ui/dr-ui/src/lib.rs#L3474), [`ui/dr-ui/src/lib.rs:481`](../../ui/dr-ui/src/lib.rs#L481), [`ui/dr-ui/src/lib.rs:510`](../../ui/dr-ui/src/lib.rs#L510), [`ui/dr-ui/src/library/thumbnails_fetch.rs:718`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L718), [`ui/dr-ui/src/library/thumbnails_fetch.rs:733`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L733), [`ui/dr-ui/src/library_ui/controller.rs:382`](../../ui/dr-ui/src/library_ui/controller.rs#L382), [`ui/dr-ui/src/library_ui/controller.rs:522`](../../ui/dr-ui/src/library_ui/controller.rs#L522), [`ui/dr-ui/src/library_ui/controller.rs:599`](../../ui/dr-ui/src/library_ui/controller.rs#L599), [`ui/dr-ui/src/library_ui/filter_bar.rs:500`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L500), [`ui/dr-ui/src/library_ui/grid.rs:168`](../../ui/dr-ui/src/library_ui/grid.rs#L168), [`ui/dr-ui/src/library_ui/grid.rs:182`](../../ui/dr-ui/src/library_ui/grid.rs#L182), [`ui/dr-ui/src/library_ui/grid.rs:203`](../../ui/dr-ui/src/library_ui/grid.rs#L203), [`ui/dr-ui/src/library_ui/grid.rs:277`](../../ui/dr-ui/src/library_ui/grid.rs#L277), [`ui/dr-ui/src/library_ui/grid.rs:414`](../../ui/dr-ui/src/library_ui/grid.rs#L414), [`ui/dr-ui/src/library_ui/grid.rs:444`](../../ui/dr-ui/src/library_ui/grid.rs#L444), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1109`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1109), [`ui/dr-ui/src/manual.rs:1`](../../ui/dr-ui/src/manual.rs#L1), [`ui/dr-ui/src/settings_ui.rs:157`](../../ui/dr-ui/src/settings_ui.rs#L157), [`ui/dr-ui/src/settings_ui.rs:616`](../../ui/dr-ui/src/settings_ui.rs#L616), [`ui/dr-ui/ui/app.slint:1655`](../../ui/dr-ui/ui/app.slint#L1655), [`ui/dr-ui/ui/app.slint:1805`](../../ui/dr-ui/ui/app.slint#L1805), [`ui/dr-ui/ui/app.slint:1928`](../../ui/dr-ui/ui/app.slint#L1928), [`ui/dr-ui/ui/app.slint:229`](../../ui/dr-ui/ui/app.slint#L229), [`ui/dr-ui/ui/app.slint:2411`](../../ui/dr-ui/ui/app.slint#L2411), [`ui/dr-ui/ui/app.slint:2571`](../../ui/dr-ui/ui/app.slint#L2571), [`ui/dr-ui/ui/app.slint:3133`](../../ui/dr-ui/ui/app.slint#L3133), [`ui/dr-ui/ui/collections.slint:1260`](../../ui/dr-ui/ui/collections.slint#L1260), [`ui/dr-ui/ui/collections.slint:76`](../../ui/dr-ui/ui/collections.slint#L76), [`ui/dr-ui/ui/develop.slint:126`](../../ui/dr-ui/ui/develop.slint#L126), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1270`](../../ui/dr-ui/ui/library.slint#L1270), [`ui/dr-ui/ui/library.slint:1297`](../../ui/dr-ui/ui/library.slint#L1297), [`ui/dr-ui/ui/library.slint:1303`](../../ui/dr-ui/ui/library.slint#L1303), [`ui/dr-ui/ui/library.slint:1358`](../../ui/dr-ui/ui/library.slint#L1358), [`ui/dr-ui/ui/library.slint:1553`](../../ui/dr-ui/ui/library.slint#L1553), [`ui/dr-ui/ui/library.slint:1588`](../../ui/dr-ui/ui/library.slint#L1588), [`ui/dr-ui/ui/library.slint:1615`](../../ui/dr-ui/ui/library.slint#L1615), [`ui/dr-ui/ui/library.slint:1622`](../../ui/dr-ui/ui/library.slint#L1622), [`ui/dr-ui/ui/library.slint:1658`](../../ui/dr-ui/ui/library.slint#L1658), [`ui/dr-ui/ui/library.slint:1716`](../../ui/dr-ui/ui/library.slint#L1716), [`ui/dr-ui/ui/library.slint:1723`](../../ui/dr-ui/ui/library.slint#L1723), [`ui/dr-ui/ui/library.slint:3058`](../../ui/dr-ui/ui/library.slint#L3058), [`ui/dr-ui/ui/library.slint:3262`](../../ui/dr-ui/ui/library.slint#L3262), [`ui/dr-ui/ui/library.slint:4881`](../../ui/dr-ui/ui/library.slint#L4881), [`ui/dr-ui/ui/library.slint:4919`](../../ui/dr-ui/ui/library.slint#L4919), [`ui/dr-ui/ui/library.slint:4984`](../../ui/dr-ui/ui/library.slint#L4984), [`ui/dr-ui/ui/library.slint:5046`](../../ui/dr-ui/ui/library.slint#L5046), [`ui/dr-ui/ui/library.slint:555`](../../ui/dr-ui/ui/library.slint#L555), [`ui/dr-ui/ui/library.slint:565`](../../ui/dr-ui/ui/library.slint#L565), [`ui/dr-ui/ui/library.slint:655`](../../ui/dr-ui/ui/library.slint#L655), [`ui/dr-ui/ui/library.slint:724`](../../ui/dr-ui/ui/library.slint#L724), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:166`](../../ui/dr-ui/ui/settings.slint#L166), [`ui/dr-ui/ui/settings.slint:587`](../../ui/dr-ui/ui/settings.slint#L587) |
-| FR-UI-5 | [`core/dr-types/src/place.rs:118`](../../core/dr-types/src/place.rs#L118), [`tools/traceability/src/chord.rs:1`](../../tools/traceability/src/chord.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/develop_ui.rs:857`](../../ui/dr-ui/src/develop_ui.rs#L857), [`ui/dr-ui/src/lib.rs:3418`](../../ui/dr-ui/src/lib.rs#L3418), [`ui/dr-ui/src/lib.rs:3625`](../../ui/dr-ui/src/lib.rs#L3625), [`ui/dr-ui/src/library/filters.rs:79`](../../ui/dr-ui/src/library/filters.rs#L79), [`ui/dr-ui/src/library_ui/filter_bar.rs:57`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L57), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1085`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1085), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1149`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1149), [`ui/dr-ui/src/masks_ui.rs:1614`](../../ui/dr-ui/src/masks_ui.rs#L1614), [`ui/dr-ui/src/place.rs:331`](../../ui/dr-ui/src/place.rs#L331), [`ui/dr-ui/src/settings_ui.rs:502`](../../ui/dr-ui/src/settings_ui.rs#L502), [`ui/dr-ui/ui/app.slint:2340`](../../ui/dr-ui/ui/app.slint#L2340), [`ui/dr-ui/ui/app.slint:2367`](../../ui/dr-ui/ui/app.slint#L2367), [`ui/dr-ui/ui/app.slint:2411`](../../ui/dr-ui/ui/app.slint#L2411), [`ui/dr-ui/ui/app.slint:2455`](../../ui/dr-ui/ui/app.slint#L2455), [`ui/dr-ui/ui/app.slint:3074`](../../ui/dr-ui/ui/app.slint#L3074), [`ui/dr-ui/ui/app.slint:3102`](../../ui/dr-ui/ui/app.slint#L3102), [`ui/dr-ui/ui/app.slint:643`](../../ui/dr-ui/ui/app.slint#L643), [`ui/dr-ui/ui/app.slint:650`](../../ui/dr-ui/ui/app.slint#L650), [`ui/dr-ui/ui/app.slint:654`](../../ui/dr-ui/ui/app.slint#L654), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/export.slint:1`](../../ui/dr-ui/ui/export.slint#L1), [`ui/dr-ui/ui/export.slint:384`](../../ui/dr-ui/ui/export.slint#L384), [`ui/dr-ui/ui/keys.slint:1`](../../ui/dr-ui/ui/keys.slint#L1), [`ui/dr-ui/ui/library.slint:1550`](../../ui/dr-ui/ui/library.slint#L1550), [`ui/dr-ui/ui/library.slint:1560`](../../ui/dr-ui/ui/library.slint#L1560), [`ui/dr-ui/ui/library.slint:1812`](../../ui/dr-ui/ui/library.slint#L1812), [`ui/dr-ui/ui/library.slint:1941`](../../ui/dr-ui/ui/library.slint#L1941), [`ui/dr-ui/ui/library.slint:2581`](../../ui/dr-ui/ui/library.slint#L2581), [`ui/dr-ui/ui/library.slint:3024`](../../ui/dr-ui/ui/library.slint#L3024), [`ui/dr-ui/ui/library.slint:3096`](../../ui/dr-ui/ui/library.slint#L3096), [`ui/dr-ui/ui/library.slint:3115`](../../ui/dr-ui/ui/library.slint#L3115), [`ui/dr-ui/ui/library.slint:3121`](../../ui/dr-ui/ui/library.slint#L3121), [`ui/dr-ui/ui/library.slint:3195`](../../ui/dr-ui/ui/library.slint#L3195), [`ui/dr-ui/ui/library.slint:3262`](../../ui/dr-ui/ui/library.slint#L3262), [`ui/dr-ui/ui/library.slint:3856`](../../ui/dr-ui/ui/library.slint#L3856), [`ui/dr-ui/ui/library.slint:649`](../../ui/dr-ui/ui/library.slint#L649), [`ui/dr-ui/ui/library.slint:670`](../../ui/dr-ui/ui/library.slint#L670), [`ui/dr-ui/ui/presets.slint:332`](../../ui/dr-ui/ui/presets.slint#L332), [`ui/dr-ui/ui/session.slint:75`](../../ui/dr-ui/ui/session.slint#L75) |
+| FR-UI-1 | [`core/dr-types/src/settings.rs:1377`](../../core/dr-types/src/settings.rs#L1377), [`core/dr-types/src/settings.rs:492`](../../core/dr-types/src/settings.rs#L492), [`core/dr-types/src/settings.rs:512`](../../core/dr-types/src/settings.rs#L512), [`ui/dr-ui/src/develop_ui.rs:204`](../../ui/dr-ui/src/develop_ui.rs#L204), [`ui/dr-ui/src/lib.rs:114`](../../ui/dr-ui/src/lib.rs#L114), [`ui/dr-ui/src/lib.rs:129`](../../ui/dr-ui/src/lib.rs#L129), [`ui/dr-ui/src/lib.rs:151`](../../ui/dr-ui/src/lib.rs#L151), [`ui/dr-ui/src/lib.rs:3225`](../../ui/dr-ui/src/lib.rs#L3225), [`ui/dr-ui/src/lib.rs:3244`](../../ui/dr-ui/src/lib.rs#L3244), [`ui/dr-ui/src/lib.rs:3271`](../../ui/dr-ui/src/lib.rs#L3271), [`ui/dr-ui/src/lib.rs:3322`](../../ui/dr-ui/src/lib.rs#L3322), [`ui/dr-ui/src/lib.rs:3355`](../../ui/dr-ui/src/lib.rs#L3355), [`ui/dr-ui/src/masks_ui.rs:1608`](../../ui/dr-ui/src/masks_ui.rs#L1608), [`ui/dr-ui/src/settings_ui.rs:179`](../../ui/dr-ui/src/settings_ui.rs#L179), [`ui/dr-ui/ui/adjust.slint:999`](../../ui/dr-ui/ui/adjust.slint#L999), [`ui/dr-ui/ui/app.slint:2986`](../../ui/dr-ui/ui/app.slint#L2986), [`ui/dr-ui/ui/app.slint:625`](../../ui/dr-ui/ui/app.slint#L625), [`ui/dr-ui/ui/app.slint:764`](../../ui/dr-ui/ui/app.slint#L764), [`ui/dr-ui/ui/identity.slint:249`](../../ui/dr-ui/ui/identity.slint#L249), [`ui/dr-ui/ui/library.slint:1387`](../../ui/dr-ui/ui/library.slint#L1387), [`ui/dr-ui/ui/settings.slint:123`](../../ui/dr-ui/ui/settings.slint#L123), [`ui/dr-ui/ui/settings.slint:612`](../../ui/dr-ui/ui/settings.slint#L612), [`ui/dr-ui/ui/toolrail.slint:156`](../../ui/dr-ui/ui/toolrail.slint#L156), [`ui/dr-ui/ui/toolrail.slint:89`](../../ui/dr-ui/ui/toolrail.slint#L89) |
+| FR-UI-2 | [`ui/dr-ui/src/collections_ui/controller.rs:45`](../../ui/dr-ui/src/collections_ui/controller.rs#L45), [`ui/dr-ui/src/collections_ui/controller.rs:83`](../../ui/dr-ui/src/collections_ui/controller.rs#L83), [`ui/dr-ui/src/collections_ui/drag.rs:246`](../../ui/dr-ui/src/collections_ui/drag.rs#L246), [`ui/dr-ui/src/collections_ui/drag.rs:256`](../../ui/dr-ui/src/collections_ui/drag.rs#L256), [`ui/dr-ui/src/collections_ui/press.rs:453`](../../ui/dr-ui/src/collections_ui/press.rs#L453), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:138`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L138), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:415`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L415), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/gestures.rs:1`](../../ui/dr-ui/src/gestures.rs#L1), [`ui/dr-ui/src/lib.rs:114`](../../ui/dr-ui/src/lib.rs#L114), [`ui/dr-ui/src/library_ui/filter_bar.rs:351`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L351), [`ui/dr-ui/src/library_ui/window.rs:875`](../../ui/dr-ui/src/library_ui/window.rs#L875), [`ui/dr-ui/ui/app.slint:128`](../../ui/dr-ui/ui/app.slint#L128), [`ui/dr-ui/ui/app.slint:748`](../../ui/dr-ui/ui/app.slint#L748), [`ui/dr-ui/ui/collections.slint:1277`](../../ui/dr-ui/ui/collections.slint#L1277), [`ui/dr-ui/ui/controls.slint:626`](../../ui/dr-ui/ui/controls.slint#L626), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/library.slint:1274`](../../ui/dr-ui/ui/library.slint#L1274), [`ui/dr-ui/ui/library.slint:1307`](../../ui/dr-ui/ui/library.slint#L1307), [`ui/dr-ui/ui/library.slint:1635`](../../ui/dr-ui/ui/library.slint#L1635), [`ui/dr-ui/ui/library.slint:1642`](../../ui/dr-ui/ui/library.slint#L1642), [`ui/dr-ui/ui/library.slint:1743`](../../ui/dr-ui/ui/library.slint#L1743), [`ui/dr-ui/ui/library.slint:3078`](../../ui/dr-ui/ui/library.slint#L3078), [`ui/dr-ui/ui/library.slint:5157`](../../ui/dr-ui/ui/library.slint#L5157), [`ui/dr-ui/ui/library.slint:560`](../../ui/dr-ui/ui/library.slint#L560), [`ui/dr-ui/ui/presets.slint:19`](../../ui/dr-ui/ui/presets.slint#L19), [`ui/dr-ui/ui/settings.slint:137`](../../ui/dr-ui/ui/settings.slint#L137) |
+| FR-UI-3 | [`ui/dr-ui/src/collections_ui/controller.rs:138`](../../ui/dr-ui/src/collections_ui/controller.rs#L138), [`ui/dr-ui/src/collections_ui/controller.rs:343`](../../ui/dr-ui/src/collections_ui/controller.rs#L343), [`ui/dr-ui/src/collections_ui/controller.rs:356`](../../ui/dr-ui/src/collections_ui/controller.rs#L356), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/develop/masks.rs:361`](../../ui/dr-ui/src/develop/masks.rs#L361), [`ui/dr-ui/src/develop/repairs.rs:49`](../../ui/dr-ui/src/develop/repairs.rs#L49), [`ui/dr-ui/src/library_ui/grid.rs:168`](../../ui/dr-ui/src/library_ui/grid.rs#L168), [`ui/dr-ui/src/masks_ui.rs:1700`](../../ui/dr-ui/src/masks_ui.rs#L1700), [`ui/dr-ui/src/masks_ui.rs:1722`](../../ui/dr-ui/src/masks_ui.rs#L1722), [`ui/dr-ui/src/masks_ui.rs:339`](../../ui/dr-ui/src/masks_ui.rs#L339), [`ui/dr-ui/src/spots_ui.rs:19`](../../ui/dr-ui/src/spots_ui.rs#L19), [`ui/dr-ui/ui/app.slint:2212`](../../ui/dr-ui/ui/app.slint#L2212), [`ui/dr-ui/ui/collections.slint:1151`](../../ui/dr-ui/ui/collections.slint#L1151), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:76`](../../ui/dr-ui/ui/collections.slint#L76), [`ui/dr-ui/ui/collections.slint:901`](../../ui/dr-ui/ui/collections.slint#L901), [`ui/dr-ui/ui/masks.slint:1246`](../../ui/dr-ui/ui/masks.slint#L1246), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) |
+| FR-UI-4 | [`tools/traceability/src/gestures.rs:1`](../../tools/traceability/src/gestures.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:138`](../../ui/dr-ui/src/collections_ui/controller.rs#L138), [`ui/dr-ui/src/collections_ui/controller.rs:343`](../../ui/dr-ui/src/collections_ui/controller.rs#L343), [`ui/dr-ui/src/collections_ui/controller.rs:356`](../../ui/dr-ui/src/collections_ui/controller.rs#L356), [`ui/dr-ui/src/collections_ui/controller.rs:45`](../../ui/dr-ui/src/collections_ui/controller.rs#L45), [`ui/dr-ui/src/collections_ui/controller.rs:46`](../../ui/dr-ui/src/collections_ui/controller.rs#L46), [`ui/dr-ui/src/collections_ui/controller.rs:55`](../../ui/dr-ui/src/collections_ui/controller.rs#L55), [`ui/dr-ui/src/collections_ui/controller.rs:83`](../../ui/dr-ui/src/collections_ui/controller.rs#L83), [`ui/dr-ui/src/collections_ui/drag.rs:246`](../../ui/dr-ui/src/collections_ui/drag.rs#L246), [`ui/dr-ui/src/collections_ui/drag.rs:256`](../../ui/dr-ui/src/collections_ui/drag.rs#L256), [`ui/dr-ui/src/collections_ui/press.rs:258`](../../ui/dr-ui/src/collections_ui/press.rs#L258), [`ui/dr-ui/src/collections_ui/press.rs:278`](../../ui/dr-ui/src/collections_ui/press.rs#L278), [`ui/dr-ui/src/collections_ui/press.rs:453`](../../ui/dr-ui/src/collections_ui/press.rs#L453), [`ui/dr-ui/src/collections_ui/press.rs:490`](../../ui/dr-ui/src/collections_ui/press.rs#L490), [`ui/dr-ui/src/collections_ui/press.rs:54`](../../ui/dr-ui/src/collections_ui/press.rs#L54), [`ui/dr-ui/src/collections_ui/tree_sync.rs:339`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L339), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:121`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L121), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:138`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L138), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:264`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L264), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:415`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L415), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:444`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L444), [`ui/dr-ui/src/collections_ui/wiring_grid.rs:577`](../../ui/dr-ui/src/collections_ui/wiring_grid.rs#L577), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:344`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L344), [`ui/dr-ui/src/develop/framing.rs:257`](../../ui/dr-ui/src/develop/framing.rs#L257), [`ui/dr-ui/src/develop/framing.rs:594`](../../ui/dr-ui/src/develop/framing.rs#L594), [`ui/dr-ui/src/develop/framing.rs:619`](../../ui/dr-ui/src/develop/framing.rs#L619), [`ui/dr-ui/src/develop/framing.rs:630`](../../ui/dr-ui/src/develop/framing.rs#L630), [`ui/dr-ui/src/develop/framing.rs:644`](../../ui/dr-ui/src/develop/framing.rs#L644), [`ui/dr-ui/src/develop/framing.rs:818`](../../ui/dr-ui/src/develop/framing.rs#L818), [`ui/dr-ui/src/develop/framing.rs:849`](../../ui/dr-ui/src/develop/framing.rs#L849), [`ui/dr-ui/src/develop/framing.rs:870`](../../ui/dr-ui/src/develop/framing.rs#L870), [`ui/dr-ui/src/develop/framing.rs:995`](../../ui/dr-ui/src/develop/framing.rs#L995), [`ui/dr-ui/src/develop/render.rs:1107`](../../ui/dr-ui/src/develop/render.rs#L1107), [`ui/dr-ui/src/develop/render.rs:1132`](../../ui/dr-ui/src/develop/render.rs#L1132), [`ui/dr-ui/src/develop/render.rs:1155`](../../ui/dr-ui/src/develop/render.rs#L1155), [`ui/dr-ui/src/develop/render.rs:1194`](../../ui/dr-ui/src/develop/render.rs#L1194), [`ui/dr-ui/src/develop/render.rs:47`](../../ui/dr-ui/src/develop/render.rs#L47), [`ui/dr-ui/src/develop/render.rs:66`](../../ui/dr-ui/src/develop/render.rs#L66), [`ui/dr-ui/src/develop/render.rs:79`](../../ui/dr-ui/src/develop/render.rs#L79), [`ui/dr-ui/src/develop_ui.rs:852`](../../ui/dr-ui/src/develop_ui.rs#L852), [`ui/dr-ui/src/gesture_book.rs:3`](../../ui/dr-ui/src/gesture_book.rs#L3), [`ui/dr-ui/src/gestures.rs:1`](../../ui/dr-ui/src/gestures.rs#L1), [`ui/dr-ui/src/lib.rs:1313`](../../ui/dr-ui/src/lib.rs#L1313), [`ui/dr-ui/src/lib.rs:1601`](../../ui/dr-ui/src/lib.rs#L1601), [`ui/dr-ui/src/lib.rs:2597`](../../ui/dr-ui/src/lib.rs#L2597), [`ui/dr-ui/src/lib.rs:2816`](../../ui/dr-ui/src/lib.rs#L2816), [`ui/dr-ui/src/lib.rs:2876`](../../ui/dr-ui/src/lib.rs#L2876), [`ui/dr-ui/src/lib.rs:3035`](../../ui/dr-ui/src/lib.rs#L3035), [`ui/dr-ui/src/lib.rs:3437`](../../ui/dr-ui/src/lib.rs#L3437), [`ui/dr-ui/src/lib.rs:3473`](../../ui/dr-ui/src/lib.rs#L3473), [`ui/dr-ui/src/lib.rs:482`](../../ui/dr-ui/src/lib.rs#L482), [`ui/dr-ui/src/lib.rs:511`](../../ui/dr-ui/src/lib.rs#L511), [`ui/dr-ui/src/library/thumbnails_fetch.rs:718`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L718), [`ui/dr-ui/src/library/thumbnails_fetch.rs:733`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L733), [`ui/dr-ui/src/library_ui/controller.rs:382`](../../ui/dr-ui/src/library_ui/controller.rs#L382), [`ui/dr-ui/src/library_ui/controller.rs:522`](../../ui/dr-ui/src/library_ui/controller.rs#L522), [`ui/dr-ui/src/library_ui/controller.rs:599`](../../ui/dr-ui/src/library_ui/controller.rs#L599), [`ui/dr-ui/src/library_ui/filter_bar.rs:500`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L500), [`ui/dr-ui/src/library_ui/grid.rs:168`](../../ui/dr-ui/src/library_ui/grid.rs#L168), [`ui/dr-ui/src/library_ui/grid.rs:182`](../../ui/dr-ui/src/library_ui/grid.rs#L182), [`ui/dr-ui/src/library_ui/grid.rs:203`](../../ui/dr-ui/src/library_ui/grid.rs#L203), [`ui/dr-ui/src/library_ui/grid.rs:277`](../../ui/dr-ui/src/library_ui/grid.rs#L277), [`ui/dr-ui/src/library_ui/grid.rs:414`](../../ui/dr-ui/src/library_ui/grid.rs#L414), [`ui/dr-ui/src/library_ui/grid.rs:444`](../../ui/dr-ui/src/library_ui/grid.rs#L444), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1132`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1132), [`ui/dr-ui/src/manual.rs:1`](../../ui/dr-ui/src/manual.rs#L1), [`ui/dr-ui/src/settings_ui.rs:157`](../../ui/dr-ui/src/settings_ui.rs#L157), [`ui/dr-ui/src/settings_ui.rs:616`](../../ui/dr-ui/src/settings_ui.rs#L616), [`ui/dr-ui/ui/app.slint:1748`](../../ui/dr-ui/ui/app.slint#L1748), [`ui/dr-ui/ui/app.slint:1900`](../../ui/dr-ui/ui/app.slint#L1900), [`ui/dr-ui/ui/app.slint:2026`](../../ui/dr-ui/ui/app.slint#L2026), [`ui/dr-ui/ui/app.slint:229`](../../ui/dr-ui/ui/app.slint#L229), [`ui/dr-ui/ui/app.slint:2452`](../../ui/dr-ui/ui/app.slint#L2452), [`ui/dr-ui/ui/app.slint:2482`](../../ui/dr-ui/ui/app.slint#L2482), [`ui/dr-ui/ui/app.slint:2627`](../../ui/dr-ui/ui/app.slint#L2627), [`ui/dr-ui/ui/app.slint:2827`](../../ui/dr-ui/ui/app.slint#L2827), [`ui/dr-ui/ui/app.slint:3380`](../../ui/dr-ui/ui/app.slint#L3380), [`ui/dr-ui/ui/collections.slint:1277`](../../ui/dr-ui/ui/collections.slint#L1277), [`ui/dr-ui/ui/collections.slint:76`](../../ui/dr-ui/ui/collections.slint#L76), [`ui/dr-ui/ui/develop.slint:134`](../../ui/dr-ui/ui/develop.slint#L134), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1274`](../../ui/dr-ui/ui/library.slint#L1274), [`ui/dr-ui/ui/library.slint:1301`](../../ui/dr-ui/ui/library.slint#L1301), [`ui/dr-ui/ui/library.slint:1307`](../../ui/dr-ui/ui/library.slint#L1307), [`ui/dr-ui/ui/library.slint:1362`](../../ui/dr-ui/ui/library.slint#L1362), [`ui/dr-ui/ui/library.slint:1557`](../../ui/dr-ui/ui/library.slint#L1557), [`ui/dr-ui/ui/library.slint:1608`](../../ui/dr-ui/ui/library.slint#L1608), [`ui/dr-ui/ui/library.slint:1635`](../../ui/dr-ui/ui/library.slint#L1635), [`ui/dr-ui/ui/library.slint:1642`](../../ui/dr-ui/ui/library.slint#L1642), [`ui/dr-ui/ui/library.slint:1678`](../../ui/dr-ui/ui/library.slint#L1678), [`ui/dr-ui/ui/library.slint:1736`](../../ui/dr-ui/ui/library.slint#L1736), [`ui/dr-ui/ui/library.slint:1743`](../../ui/dr-ui/ui/library.slint#L1743), [`ui/dr-ui/ui/library.slint:3078`](../../ui/dr-ui/ui/library.slint#L3078), [`ui/dr-ui/ui/library.slint:3183`](../../ui/dr-ui/ui/library.slint#L3183), [`ui/dr-ui/ui/library.slint:3332`](../../ui/dr-ui/ui/library.slint#L3332), [`ui/dr-ui/ui/library.slint:4953`](../../ui/dr-ui/ui/library.slint#L4953), [`ui/dr-ui/ui/library.slint:4991`](../../ui/dr-ui/ui/library.slint#L4991), [`ui/dr-ui/ui/library.slint:5095`](../../ui/dr-ui/ui/library.slint#L5095), [`ui/dr-ui/ui/library.slint:5157`](../../ui/dr-ui/ui/library.slint#L5157), [`ui/dr-ui/ui/library.slint:555`](../../ui/dr-ui/ui/library.slint#L555), [`ui/dr-ui/ui/library.slint:565`](../../ui/dr-ui/ui/library.slint#L565), [`ui/dr-ui/ui/library.slint:659`](../../ui/dr-ui/ui/library.slint#L659), [`ui/dr-ui/ui/library.slint:728`](../../ui/dr-ui/ui/library.slint#L728), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:166`](../../ui/dr-ui/ui/settings.slint#L166), [`ui/dr-ui/ui/settings.slint:587`](../../ui/dr-ui/ui/settings.slint#L587) |
+| FR-UI-5 | [`core/dr-types/src/place.rs:118`](../../core/dr-types/src/place.rs#L118), [`tools/traceability/src/chord.rs:1`](../../tools/traceability/src/chord.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/develop_ui.rs:897`](../../ui/dr-ui/src/develop_ui.rs#L897), [`ui/dr-ui/src/identity_ui.rs:1643`](../../ui/dr-ui/src/identity_ui.rs#L1643), [`ui/dr-ui/src/identity_ui.rs:802`](../../ui/dr-ui/src/identity_ui.rs#L802), [`ui/dr-ui/src/lib.rs:3419`](../../ui/dr-ui/src/lib.rs#L3419), [`ui/dr-ui/src/lib.rs:3437`](../../ui/dr-ui/src/lib.rs#L3437), [`ui/dr-ui/src/lib.rs:3624`](../../ui/dr-ui/src/lib.rs#L3624), [`ui/dr-ui/src/library/filters.rs:79`](../../ui/dr-ui/src/library/filters.rs#L79), [`ui/dr-ui/src/library_ui/filter_bar.rs:57`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L57), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1108`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1108), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1172`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1172), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:989`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L989), [`ui/dr-ui/src/masks_ui.rs:1655`](../../ui/dr-ui/src/masks_ui.rs#L1655), [`ui/dr-ui/src/place.rs:331`](../../ui/dr-ui/src/place.rs#L331), [`ui/dr-ui/src/settings_ui.rs:502`](../../ui/dr-ui/src/settings_ui.rs#L502), [`ui/dr-ui/ui/app.slint:1039`](../../ui/dr-ui/ui/app.slint#L1039), [`ui/dr-ui/ui/app.slint:1613`](../../ui/dr-ui/ui/app.slint#L1613), [`ui/dr-ui/ui/app.slint:2440`](../../ui/dr-ui/ui/app.slint#L2440), [`ui/dr-ui/ui/app.slint:2582`](../../ui/dr-ui/ui/app.slint#L2582), [`ui/dr-ui/ui/app.slint:2627`](../../ui/dr-ui/ui/app.slint#L2627), [`ui/dr-ui/ui/app.slint:2680`](../../ui/dr-ui/ui/app.slint#L2680), [`ui/dr-ui/ui/app.slint:2711`](../../ui/dr-ui/ui/app.slint#L2711), [`ui/dr-ui/ui/app.slint:3330`](../../ui/dr-ui/ui/app.slint#L3330), [`ui/dr-ui/ui/app.slint:3349`](../../ui/dr-ui/ui/app.slint#L3349), [`ui/dr-ui/ui/app.slint:387`](../../ui/dr-ui/ui/app.slint#L387), [`ui/dr-ui/ui/app.slint:646`](../../ui/dr-ui/ui/app.slint#L646), [`ui/dr-ui/ui/app.slint:653`](../../ui/dr-ui/ui/app.slint#L653), [`ui/dr-ui/ui/app.slint:657`](../../ui/dr-ui/ui/app.slint#L657), [`ui/dr-ui/ui/app.slint:713`](../../ui/dr-ui/ui/app.slint#L713), [`ui/dr-ui/ui/collections.slint:109`](../../ui/dr-ui/ui/collections.slint#L109), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/develop.slint:160`](../../ui/dr-ui/ui/develop.slint#L160), [`ui/dr-ui/ui/develop.slint:55`](../../ui/dr-ui/ui/develop.slint#L55), [`ui/dr-ui/ui/export.slint:1`](../../ui/dr-ui/ui/export.slint#L1), [`ui/dr-ui/ui/export.slint:384`](../../ui/dr-ui/ui/export.slint#L384), [`ui/dr-ui/ui/identity.slint:294`](../../ui/dr-ui/ui/identity.slint#L294), [`ui/dr-ui/ui/identity.slint:400`](../../ui/dr-ui/ui/identity.slint#L400), [`ui/dr-ui/ui/keys.slint:1`](../../ui/dr-ui/ui/keys.slint#L1), [`ui/dr-ui/ui/library.slint:1554`](../../ui/dr-ui/ui/library.slint#L1554), [`ui/dr-ui/ui/library.slint:1563`](../../ui/dr-ui/ui/library.slint#L1563), [`ui/dr-ui/ui/library.slint:1568`](../../ui/dr-ui/ui/library.slint#L1568), [`ui/dr-ui/ui/library.slint:1580`](../../ui/dr-ui/ui/library.slint#L1580), [`ui/dr-ui/ui/library.slint:1832`](../../ui/dr-ui/ui/library.slint#L1832), [`ui/dr-ui/ui/library.slint:1961`](../../ui/dr-ui/ui/library.slint#L1961), [`ui/dr-ui/ui/library.slint:2601`](../../ui/dr-ui/ui/library.slint#L2601), [`ui/dr-ui/ui/library.slint:3044`](../../ui/dr-ui/ui/library.slint#L3044), [`ui/dr-ui/ui/library.slint:3120`](../../ui/dr-ui/ui/library.slint#L3120), [`ui/dr-ui/ui/library.slint:3139`](../../ui/dr-ui/ui/library.slint#L3139), [`ui/dr-ui/ui/library.slint:3145`](../../ui/dr-ui/ui/library.slint#L3145), [`ui/dr-ui/ui/library.slint:3152`](../../ui/dr-ui/ui/library.slint#L3152), [`ui/dr-ui/ui/library.slint:3172`](../../ui/dr-ui/ui/library.slint#L3172), [`ui/dr-ui/ui/library.slint:3183`](../../ui/dr-ui/ui/library.slint#L3183), [`ui/dr-ui/ui/library.slint:3261`](../../ui/dr-ui/ui/library.slint#L3261), [`ui/dr-ui/ui/library.slint:3332`](../../ui/dr-ui/ui/library.slint#L3332), [`ui/dr-ui/ui/library.slint:3927`](../../ui/dr-ui/ui/library.slint#L3927), [`ui/dr-ui/ui/library.slint:5008`](../../ui/dr-ui/ui/library.slint#L5008), [`ui/dr-ui/ui/library.slint:635`](../../ui/dr-ui/ui/library.slint#L635), [`ui/dr-ui/ui/library.slint:653`](../../ui/dr-ui/ui/library.slint#L653), [`ui/dr-ui/ui/library.slint:674`](../../ui/dr-ui/ui/library.slint#L674), [`ui/dr-ui/ui/presets.slint:332`](../../ui/dr-ui/ui/presets.slint#L332), [`ui/dr-ui/ui/session.slint:75`](../../ui/dr-ui/ui/session.slint#L75) |
| FR-UI-6 | [`ui/dr-ui/ui/widgets.slint:1`](../../ui/dr-ui/ui/widgets.slint#L1) |
-| FR-UI-7 | [`core/dr-pipeline/src/descriptor.rs:195`](../../core/dr-pipeline/src/descriptor.rs#L195), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-types/src/settings.rs:492`](../../core/dr-types/src/settings.rs#L492), [`ui/dr-ui/src/develop/rows.rs:118`](../../ui/dr-ui/src/develop/rows.rs#L118), [`ui/dr-ui/src/lib.rs:3243`](../../ui/dr-ui/src/lib.rs#L3243), [`ui/dr-ui/ui/adjust.slint:982`](../../ui/dr-ui/ui/adjust.slint#L982), [`ui/dr-ui/ui/app.slint:2052`](../../ui/dr-ui/ui/app.slint#L2052), [`ui/dr-ui/ui/settings.slint:612`](../../ui/dr-ui/ui/settings.slint#L612), [`ui/dr-ui/ui/toolrail.slint:89`](../../ui/dr-ui/ui/toolrail.slint#L89) |
+| FR-UI-7 | [`core/dr-pipeline/src/descriptor.rs:195`](../../core/dr-pipeline/src/descriptor.rs#L195), [`core/dr-pipeline/src/framing.rs:555`](../../core/dr-pipeline/src/framing.rs#L555), [`core/dr-types/src/settings.rs:492`](../../core/dr-types/src/settings.rs#L492), [`ui/dr-ui/src/develop/rows.rs:118`](../../ui/dr-ui/src/develop/rows.rs#L118), [`ui/dr-ui/src/lib.rs:3244`](../../ui/dr-ui/src/lib.rs#L3244), [`ui/dr-ui/ui/adjust.slint:999`](../../ui/dr-ui/ui/adjust.slint#L999), [`ui/dr-ui/ui/app.slint:2150`](../../ui/dr-ui/ui/app.slint#L2150), [`ui/dr-ui/ui/settings.slint:612`](../../ui/dr-ui/ui/settings.slint#L612), [`ui/dr-ui/ui/toolrail.slint:89`](../../ui/dr-ui/ui/toolrail.slint#L89) |
| FR-UI-8 | [`core/dr-catalog/src/collections.rs:654`](../../core/dr-catalog/src/collections.rs#L654), [`core/dr-catalog/src/collections.rs:675`](../../core/dr-catalog/src/collections.rs#L675), [`core/dr-types/src/place.rs:1`](../../core/dr-types/src/place.rs#L1), [`ui/dr-ui/src/derived_sync.rs:226`](../../ui/dr-ui/src/derived_sync.rs#L226), [`ui/dr-ui/src/derived_sync.rs:84`](../../ui/dr-ui/src/derived_sync.rs#L84), [`ui/dr-ui/src/derived_sync.rs:905`](../../ui/dr-ui/src/derived_sync.rs#L905), [`ui/dr-ui/src/derived_sync.rs:915`](../../ui/dr-ui/src/derived_sync.rs#L915), [`ui/dr-ui/src/derived_sync.rs:997`](../../ui/dr-ui/src/derived_sync.rs#L997), [`ui/dr-ui/src/library/cells.rs:274`](../../ui/dr-ui/src/library/cells.rs#L274), [`ui/dr-ui/src/library/cells.rs:553`](../../ui/dr-ui/src/library/cells.rs#L553), [`ui/dr-ui/src/library/cells.rs:619`](../../ui/dr-ui/src/library/cells.rs#L619), [`ui/dr-ui/src/library/paths.rs:22`](../../ui/dr-ui/src/library/paths.rs#L22), [`ui/dr-ui/src/library_ui/controller.rs:189`](../../ui/dr-ui/src/library_ui/controller.rs#L189), [`ui/dr-ui/src/library_ui/controller.rs:924`](../../ui/dr-ui/src/library_ui/controller.rs#L924), [`ui/dr-ui/src/library_ui/filter_bar.rs:793`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L793), [`ui/dr-ui/src/library_ui/grid.rs:226`](../../ui/dr-ui/src/library_ui/grid.rs#L226), [`ui/dr-ui/src/library_ui/grid.rs:268`](../../ui/dr-ui/src/library_ui/grid.rs#L268), [`ui/dr-ui/src/library_ui/grid.rs:297`](../../ui/dr-ui/src/library_ui/grid.rs#L297), [`ui/dr-ui/src/library_ui/grid.rs:603`](../../ui/dr-ui/src/library_ui/grid.rs#L603), [`ui/dr-ui/src/library_ui/grid.rs:729`](../../ui/dr-ui/src/library_ui/grid.rs#L729), [`ui/dr-ui/src/library_ui/open.rs:118`](../../ui/dr-ui/src/library_ui/open.rs#L118), [`ui/dr-ui/src/library_ui/open.rs:36`](../../ui/dr-ui/src/library_ui/open.rs#L36), [`ui/dr-ui/src/library_ui/open.rs:71`](../../ui/dr-ui/src/library_ui/open.rs#L71), [`ui/dr-ui/src/library_ui/open.rs:836`](../../ui/dr-ui/src/library_ui/open.rs#L836), [`ui/dr-ui/src/library_ui/open.rs:853`](../../ui/dr-ui/src/library_ui/open.rs#L853), [`ui/dr-ui/src/library_ui/open.rs:951`](../../ui/dr-ui/src/library_ui/open.rs#L951), [`ui/dr-ui/src/place.rs:1`](../../ui/dr-ui/src/place.rs#L1) |
-| NFR-A11Y-2 | [`ui/dr-ui/tests/ui_controls_are_accessible.rs:1`](../../ui/dr-ui/tests/ui_controls_are_accessible.rs#L1), [`ui/dr-ui/ui/adjust.slint:172`](../../ui/dr-ui/ui/adjust.slint#L172), [`ui/dr-ui/ui/app.slint:2571`](../../ui/dr-ui/ui/app.slint#L2571), [`ui/dr-ui/ui/app.slint:2610`](../../ui/dr-ui/ui/app.slint#L2610) |
-| NFR-A11Y-3 | [`ui/dr-ui/src/histogram.rs:356`](../../ui/dr-ui/src/histogram.rs#L356), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:1`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L1), [`ui/dr-ui/ui/app.slint:2455`](../../ui/dr-ui/ui/app.slint#L2455), [`ui/dr-ui/ui/develop.slint:126`](../../ui/dr-ui/ui/develop.slint#L126), [`ui/dr-ui/ui/histogram.slint:137`](../../ui/dr-ui/ui/histogram.slint#L137), [`ui/dr-ui/ui/labels.slint:19`](../../ui/dr-ui/ui/labels.slint#L19), [`ui/dr-ui/ui/labels.slint:1`](../../ui/dr-ui/ui/labels.slint#L1), [`ui/dr-ui/ui/labels.slint:40`](../../ui/dr-ui/ui/labels.slint#L40), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1066`](../../ui/dr-ui/ui/library.slint#L1066), [`ui/dr-ui/ui/library.slint:1214`](../../ui/dr-ui/ui/library.slint#L1214), [`ui/dr-ui/ui/library.slint:2626`](../../ui/dr-ui/ui/library.slint#L2626), [`ui/dr-ui/ui/library.slint:3195`](../../ui/dr-ui/ui/library.slint#L3195), [`ui/dr-ui/ui/library.slint:3792`](../../ui/dr-ui/ui/library.slint#L3792), [`ui/dr-ui/ui/peaking.slint:1`](../../ui/dr-ui/ui/peaking.slint#L1), [`ui/dr-ui/ui/widgets.slint:271`](../../ui/dr-ui/ui/widgets.slint#L271) |
+| NFR-A11Y-2 | [`ui/dr-ui/tests/ui_controls_are_accessible.rs:1`](../../ui/dr-ui/tests/ui_controls_are_accessible.rs#L1), [`ui/dr-ui/ui/adjust.slint:172`](../../ui/dr-ui/ui/adjust.slint#L172), [`ui/dr-ui/ui/app.slint:2827`](../../ui/dr-ui/ui/app.slint#L2827), [`ui/dr-ui/ui/app.slint:2866`](../../ui/dr-ui/ui/app.slint#L2866) |
+| NFR-A11Y-3 | [`ui/dr-ui/src/histogram.rs:356`](../../ui/dr-ui/src/histogram.rs#L356), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:1`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L1), [`ui/dr-ui/ui/app.slint:2711`](../../ui/dr-ui/ui/app.slint#L2711), [`ui/dr-ui/ui/develop.slint:134`](../../ui/dr-ui/ui/develop.slint#L134), [`ui/dr-ui/ui/develop.slint:160`](../../ui/dr-ui/ui/develop.slint#L160), [`ui/dr-ui/ui/histogram.slint:137`](../../ui/dr-ui/ui/histogram.slint#L137), [`ui/dr-ui/ui/labels.slint:19`](../../ui/dr-ui/ui/labels.slint#L19), [`ui/dr-ui/ui/labels.slint:1`](../../ui/dr-ui/ui/labels.slint#L1), [`ui/dr-ui/ui/labels.slint:40`](../../ui/dr-ui/ui/labels.slint#L40), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1070`](../../ui/dr-ui/ui/library.slint#L1070), [`ui/dr-ui/ui/library.slint:1218`](../../ui/dr-ui/ui/library.slint#L1218), [`ui/dr-ui/ui/library.slint:2646`](../../ui/dr-ui/ui/library.slint#L2646), [`ui/dr-ui/ui/library.slint:3261`](../../ui/dr-ui/ui/library.slint#L3261), [`ui/dr-ui/ui/library.slint:3863`](../../ui/dr-ui/ui/library.slint#L3863), [`ui/dr-ui/ui/peaking.slint:1`](../../ui/dr-ui/ui/peaking.slint#L1), [`ui/dr-ui/ui/widgets.slint:271`](../../ui/dr-ui/ui/widgets.slint#L271) |
| NFR-ARCH-2 | [`core/dr-catalog/src/jobs.rs:1`](../../core/dr-catalog/src/jobs.rs#L1), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/repairs.rs:1`](../../ui/dr-ui/src/repairs.rs#L1) |
-| NFR-ARCH-3 | [`ui/dr-ui/src/develop_ui.rs:348`](../../ui/dr-ui/src/develop_ui.rs#L348), [`ui/dr-ui/src/export.rs:1842`](../../ui/dr-ui/src/export.rs#L1842), [`ui/dr-ui/src/export.rs:1869`](../../ui/dr-ui/src/export.rs#L1869), [`ui/dr-ui/src/export.rs:420`](../../ui/dr-ui/src/export.rs#L420), [`ui/dr-ui/src/export.rs:446`](../../ui/dr-ui/src/export.rs#L446), [`ui/dr-ui/ui/library.slint:5009`](../../ui/dr-ui/ui/library.slint#L5009), [`ui/dr-ui/ui/library.slint:783`](../../ui/dr-ui/ui/library.slint#L783) |
+| NFR-ARCH-3 | [`ui/dr-ui/src/develop_ui.rs:348`](../../ui/dr-ui/src/develop_ui.rs#L348), [`ui/dr-ui/src/export.rs:1842`](../../ui/dr-ui/src/export.rs#L1842), [`ui/dr-ui/src/export.rs:1869`](../../ui/dr-ui/src/export.rs#L1869), [`ui/dr-ui/src/export.rs:420`](../../ui/dr-ui/src/export.rs#L420), [`ui/dr-ui/src/export.rs:446`](../../ui/dr-ui/src/export.rs#L446), [`ui/dr-ui/ui/library.slint:5120`](../../ui/dr-ui/ui/library.slint#L5120), [`ui/dr-ui/ui/library.slint:787`](../../ui/dr-ui/ui/library.slint#L787) |
| NFR-ARCH-4 | [`core/dr-catalog/src/error.rs:1`](../../core/dr-catalog/src/error.rs#L1), [`core/dr-export/src/error.rs:1`](../../core/dr-export/src/error.rs#L1), [`core/dr-thumbs/src/error.rs:1`](../../core/dr-thumbs/src/error.rs#L1), [`core/dr-xmp/src/lib.rs:798`](../../core/dr-xmp/src/lib.rs#L798), [`platform/dr-plat/src/storage.rs:148`](../../platform/dr-plat/src/storage.rs#L148), [`ui/dr-ui/src/export.rs:526`](../../ui/dr-ui/src/export.rs#L526) |
| NFR-COMPAT-1 | [`core/dr-gpu/src/lib.rs:286`](../../core/dr-gpu/src/lib.rs#L286) |
-| NFR-OPS-1 | [`core/dr-gpu/src/lib.rs:339`](../../core/dr-gpu/src/lib.rs#L339), [`platform/dr-plat/src/diagnostics.rs:1`](../../platform/dr-plat/src/diagnostics.rs#L1), [`platform/dr-plat/src/diagnostics/bundle.rs:1`](../../platform/dr-plat/src/diagnostics/bundle.rs#L1), [`platform/dr-plat/src/state.rs:1`](../../platform/dr-plat/src/state.rs#L1), [`ui/dr-ui/src/lib.rs:1490`](../../ui/dr-ui/src/lib.rs#L1490), [`ui/dr-ui/ui/app.slint:1130`](../../ui/dr-ui/ui/app.slint#L1130), [`ui/dr-ui/ui/app.slint:132`](../../ui/dr-ui/ui/app.slint#L132), [`ui/dr-ui/ui/settings.slint:155`](../../ui/dr-ui/ui/settings.slint#L155), [`ui/dr-ui/ui/settings.slint:863`](../../ui/dr-ui/ui/settings.slint#L863) |
+| NFR-OPS-1 | [`core/dr-gpu/src/lib.rs:339`](../../core/dr-gpu/src/lib.rs#L339), [`platform/dr-plat/src/diagnostics.rs:1`](../../platform/dr-plat/src/diagnostics.rs#L1), [`platform/dr-plat/src/diagnostics/bundle.rs:1`](../../platform/dr-plat/src/diagnostics/bundle.rs#L1), [`platform/dr-plat/src/state.rs:1`](../../platform/dr-plat/src/state.rs#L1), [`ui/dr-ui/src/lib.rs:1491`](../../ui/dr-ui/src/lib.rs#L1491), [`ui/dr-ui/ui/app.slint:1210`](../../ui/dr-ui/ui/app.slint#L1210), [`ui/dr-ui/ui/app.slint:132`](../../ui/dr-ui/ui/app.slint#L132), [`ui/dr-ui/ui/settings.slint:155`](../../ui/dr-ui/ui/settings.slint#L155), [`ui/dr-ui/ui/settings.slint:863`](../../ui/dr-ui/ui/settings.slint#L863) |
| NFR-OPS-2 | [`platform/dr-plat/src/crash.rs:1`](../../platform/dr-plat/src/crash.rs#L1) |
| NFR-OPS-3 | [`core/dr-types/src/settings.rs:1`](../../core/dr-types/src/settings.rs#L1), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1) |
| NFR-P1 | [`core/dr-catalog/src/lib.rs:1`](../../core/dr-catalog/src/lib.rs#L1), [`core/dr-catalog/src/scan.rs:1`](../../core/dr-catalog/src/scan.rs#L1), [`core/dr-catalog/src/walk.rs:162`](../../core/dr-catalog/src/walk.rs#L162), [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`tools/bench/src/catalog_open.rs:1`](../../tools/bench/src/catalog_open.rs#L1) |
| NFR-P13 | [`core/dr-decode/src/preview.rs:121`](../../core/dr-decode/src/preview.rs#L121) |
-| NFR-P14 | [`core/dr-gpu/src/focus.rs:186`](../../core/dr-gpu/src/focus.rs#L186), [`core/dr-gpu/src/focus.rs:1`](../../core/dr-gpu/src/focus.rs#L1), [`core/dr-gpu/src/focus.rs:317`](../../core/dr-gpu/src/focus.rs#L317), [`core/dr-gpu/src/shaders/focus_peak.wgsl:1`](../../core/dr-gpu/src/shaders/focus_peak.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:430`](../../ui/dr-ui/src/develop/render.rs#L430), [`ui/dr-ui/src/lib.rs:2378`](../../ui/dr-ui/src/lib.rs#L2378) |
+| NFR-P14 | [`core/dr-gpu/src/focus.rs:186`](../../core/dr-gpu/src/focus.rs#L186), [`core/dr-gpu/src/focus.rs:1`](../../core/dr-gpu/src/focus.rs#L1), [`core/dr-gpu/src/focus.rs:317`](../../core/dr-gpu/src/focus.rs#L317), [`core/dr-gpu/src/shaders/focus_peak.wgsl:1`](../../core/dr-gpu/src/shaders/focus_peak.wgsl#L1), [`ui/dr-ui/src/develop/render.rs:430`](../../ui/dr-ui/src/develop/render.rs#L430), [`ui/dr-ui/src/lib.rs:2379`](../../ui/dr-ui/src/lib.rs#L2379) |
| NFR-P3 | [`tools/bench/src/thumbnails.rs:1`](../../tools/bench/src/thumbnails.rs#L1) |
| NFR-P5 | [`core/dr-catalog/src/schema.rs:564`](../../core/dr-catalog/src/schema.rs#L564), [`ui/dr-ui/src/library/cells.rs:382`](../../ui/dr-ui/src/library/cells.rs#L382), [`ui/dr-ui/src/library/cells.rs:708`](../../ui/dr-ui/src/library/cells.rs#L708), [`ui/dr-ui/src/library_ui/controller.rs:58`](../../ui/dr-ui/src/library_ui/controller.rs#L58), [`ui/dr-ui/src/library_ui/timeline.rs:382`](../../ui/dr-ui/src/library_ui/timeline.rs#L382) |
| NFR-P9 | [`core/dr-catalog/src/schema.rs:917`](../../core/dr-catalog/src/schema.rs#L917), [`core/dr-face/src/references.rs:1`](../../core/dr-face/src/references.rs#L1), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/export.rs:1024`](../../ui/dr-ui/src/export.rs#L1024), [`ui/dr-ui/src/library/mod.rs:1`](../../ui/dr-ui/src/library/mod.rs#L1), [`ui/dr-ui/src/library_ui/mod.rs:1`](../../ui/dr-ui/src/library_ui/mod.rs#L1), [`ui/dr-ui/src/trash.rs:1`](../../ui/dr-ui/src/trash.rs#L1) |
diff --git a/docs/gestures.md b/docs/gestures.md
index 5942d88..637eb7a 100644
--- a/docs/gestures.md
+++ b/docs/gestures.md
@@ -5,7 +5,7 @@
Every entry here is extracted from the comment beside the code that implements it, so this file cannot describe a gesture the application does not have. Add one by writing a `GESTURE:` block next to the implementation; there is nowhere else to write it.
-58 gestures, in 5 places.
+67 gestures, in 5 places.
## Develop
@@ -23,21 +23,23 @@ Sampling a neutral is the first move of the tonal pass — every colour judgemen
- **Touch** — Pinch it with two fingers
- **Pointer** — The scroll wheel over it
+- **Keyboard** — `Ctrl+=` or `Ctrl+Plus` in, `Ctrl+-` out, about the middle of the view
- **See it** — [in the manual](manual/README.md#looking-closer)
Anchored on the fingers' midpoint, and on the pointer, so the gesture reads as magnifying the picture rather than sliding it about. Double-tap is the way to an exact 1:1; this is the way to everything in between. Past 1:1 the pixels are shown as they are, square and unsmoothed; below it, filtered.
-`ui/dr-ui/ui/app.slint:1792`
+`ui/dr-ui/ui/app.slint:1885`
### Move a magnified photograph about
- **Touch** — Drag it
- **Pointer** — Drag it
+- **Keyboard** — `Shift+←`, `Shift+→`, `Shift+↑` and `Shift+↓`, a fifth of the view at a time
- **See it** — [in the manual](manual/README.md#looking-closer)
Only once there is something outside the viewport to reach, which is why the cursor becomes a hand exactly then. The view is clamped to the frame: panning past the edge would show undefined area beside the photograph, and that reads as a rendering fault rather than as the end of the picture.
-`ui/dr-ui/ui/app.slint:1886`
+`ui/dr-ui/ui/app.slint:1981`
### Paint a mask by hand
@@ -47,7 +49,7 @@ Only once there is something outside the viewport to reach, which is why the cur
A model's mask stops inside a shoulder and leaks into the hair, and no single edge control fixes two errors that go opposite ways. The whole stroke is one step in the history, so taking a mark back costs one press however long it took to make.
-`ui/dr-ui/ui/app.slint:1974`
+`ui/dr-ui/ui/app.slint:2072`
### Take back the last change
@@ -58,16 +60,16 @@ A model's mask stops inside a shoulder and leaks into the hair, and no single ed
A whole drag is one step, so undo takes back a decision rather than a frame of a gesture. The list is there because arriving six steps back costs what arriving from one does.
-`ui/dr-ui/ui/app.slint:2208`
+`ui/dr-ui/ui/app.slint:2306`
### Do it again after taking it back
- **Touch** — Tap the step below the current one in the History list
- **Pointer** — Click it, or press Redo in the History header
-- **Keyboard** — `Ctrl+Shift+Z`
+- **Keyboard** — `Ctrl+Shift+Z`, or `Ctrl+Y`
- **See it** — [in the manual](manual/README.md#history-snapshots-presets)
-`ui/dr-ui/ui/app.slint:2222`
+`ui/dr-ui/ui/app.slint:2320`
### Remove a repair
@@ -75,7 +77,7 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a
- **Pointer** — Click it, then Delete Repair
- **Keyboard** — `Delete` or `Backspace`, while repairing
-`ui/dr-ui/ui/app.slint:2240`
+`ui/dr-ui/ui/app.slint:2340`
### Copy the settings from this photograph
@@ -86,7 +88,7 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a
The button is the copy that has to work: a tablet has no modifier key to hold and no menu bar to hang the action from. The shortcut is an accelerator for a control that is on screen either way.
-`ui/dr-ui/ui/app.slint:2259`
+`ui/dr-ui/ui/app.slint:2359`
### Paste the settings onto this photograph
@@ -97,7 +99,7 @@ The button is the copy that has to work: a tablet has no modifier key to hold an
The button names what would be pasted — "3 adjustments", and whether the crop is coming with it — which the shortcut cannot say. Both paste the same scope.
-`ui/dr-ui/ui/app.slint:2272`
+`ui/dr-ui/ui/app.slint:2372`
### Choose which kinds of edit a copy carries
@@ -108,7 +110,7 @@ The button names what would be pasted — "3 adjustments", and whether the crop
Lightroom's Copy Settings. Pasting a look across a shoot usually means leaving each frame's crop and rotation alone, and that is a choice to make at the moment of copying.
-`ui/dr-ui/ui/app.slint:2290`
+`ui/dr-ui/ui/app.slint:2390`
### Export this photograph as the last one was
@@ -119,7 +121,7 @@ Lightroom's Copy Settings. Pasting a look across a shoot usually means leaving e
Every export runs on the defaults in Settings, so "as the last one was" is what the button already does. The chord is Lightroom's and darktable's, kept so hands that learned it there need not learn it again.
-`ui/dr-ui/ui/app.slint:2315`
+`ui/dr-ui/ui/app.slint:2415`
### Choose how to export, then export
@@ -130,7 +132,35 @@ Every export runs on the defaults in Settings, so "as the last one was" is what
The export sheet is the export defaults alone with an Export button. What is chosen there is kept, so it is also what the next Ctrl+Shift+E uses.
-`ui/dr-ui/ui/app.slint:2328`
+`ui/dr-ui/ui/app.slint:2428`
+
+### Keep a crop that leaves a mask outside
+
+- **Touch** — Press "Keep crop" on the notice, or "Undo crop" to take it back
+- **Pointer** — Press "Keep crop" on the notice, or "Undo crop" to take it back
+- **Keyboard** — `Enter` keeps it; `Ctrl+Z` takes the crop back, like any other step
+
+`ui/dr-ui/ui/app.slint:2493`
+
+### Go back to the grid
+
+- **Touch** — Press "‹ Library" in the top bar
+- **Pointer** — Press "‹ Library" in the top bar
+- **Keyboard** — `G`
+
+Lightroom's key for the grid. Escape gets there too, but a step at a time — out of a mode, then out of a zoom — where this goes straight back.
+
+`ui/dr-ui/ui/app.slint:2510`
+
+### Nudge the control last moved
+
+- **Touch** — Drag its track
+- **Pointer** — Drag its track
+- **Keyboard** — `=` or `Plus` up and `-` down, a hundredth of its travel at a time; hold for more
+
+Lightroom's keys for the selected slider. There is no focus ring on a slider here, so "selected" is the last one moved — the same control `R` puts back — which covers the framing sliders, perspective included, as well as the adjustments.
+
+`ui/dr-ui/ui/app.slint:2539`
### Change which group of adjustments is on screen
@@ -141,18 +171,36 @@ The export sheet is the export defaults alone with an Export button. What is cho
The groups are whatever the operation set declares itself to be about, so there are as many as the pipeline has and no key can be assigned to one of them by name. Stepping is the binding that survives a node being added.
-`ui/dr-ui/ui/app.slint:2352`
+`ui/dr-ui/ui/app.slint:2567`
### Look at the photograph at 1:1
- **Touch** — Double-tap the photograph
- **Pointer** — Double-click it, or press the zoom readout floating over the canvas
-- **Keyboard** — `Z`
+- **Keyboard** — `Z` goes in and back out; `Ctrl+1` goes to 1:1 and `Ctrl+0` back to the whole frame
- **See it** — [in the manual](manual/README.md#looking-closer)
Noise reduction and capture sharpening are judgements about single pixels, and a fitted view averages several of the file's into each one on screen — so the frame looks softer than it is and the correction goes too far. The point and the magnification survive opening the next photograph, which is what makes checking the same eye across forty portraits forty keystrokes rather than forty pans. From 1:1 on the photograph is drawn as its own pixels, each a hard-edged square, rather than smoothed into a blur.
-`ui/dr-ui/ui/app.slint:2388`
+`ui/dr-ui/ui/app.slint:2603`
+
+### Rate this photograph
+
+- **Touch** — Tap a star in the top bar
+- **Pointer** — Click a star in the top bar
+- **Keyboard** — `0`–`5`
+
+`ui/dr-ui/ui/app.slint:2660`
+
+### Pick or reject this photograph
+
+- **Touch** — Press Pick or Reject in the top bar; again to take the flag off
+- **Pointer** — Press Pick or Reject in the top bar; again to take the flag off
+- **Keyboard** — `P` picks, `X` rejects and `U` takes the flag off
+
+The grid's keys, on the photograph that is open (FR-UI-5, 2026-09-19). Judging here does not move on to the next frame: that belongs to culling, and in develop the photograph in front of you is the one being worked on.
+
+`ui/dr-ui/ui/app.slint:2666`
### Give this photograph a colour label
@@ -163,7 +211,7 @@ Noise reduction and capture sharpening are judgements about single pixels, and a
The grid's keys, on the photograph that is open, so labelling while stepping through a folder is one hand's work. The bar names the label in words beside its mark.
-`ui/dr-ui/ui/app.slint:2440`
+`ui/dr-ui/ui/app.slint:2696`
### Move to the next or previous photograph
@@ -174,7 +222,7 @@ The grid's keys, on the photograph that is open, so labelling while stepping thr
The edit on screen is saved on the way out, so stepping through a folder is as much a departure as going back to the grid and loses nothing. A and D as well as the arrows, so the left hand steps along the roll while the right stays on the mouse.
-`ui/dr-ui/ui/app.slint:2465`
+`ui/dr-ui/ui/app.slint:2721`
### See the photograph before you edited it
@@ -185,7 +233,7 @@ The edit on screen is saved on the way out, so stepping through a folder is as m
Held rather than toggled, and no split screen: a split halves the working image on the tablet the column was sized for, and the comparison photographers describe making is a flick back and forth. It takes no history step, so checking whether a frame is overcooked costs nothing to undo afterwards.
-`ui/dr-ui/ui/app.slint:2595`
+`ui/dr-ui/ui/app.slint:2851`
### Put one control back to its default
@@ -242,6 +290,7 @@ A mask is judged by seeing where it falls, and two are judged by seeing where th
- **Touch** — Tap the + / − / ∩ chip on the part's row
- **Pointer** — Click the + / − / ∩ chip on the part's row
+- **Keyboard** — `J` turns the selected part's chip, while masking
- **See it** — [in the manual](manual/README.md#local-adjustments)
A chip that cycles rather than a menu, because a photographer flips a join while looking at the picture, not at the panel: add, take away, keep only where both agree, and round.
@@ -256,7 +305,7 @@ A chip that cycles rather than a menu, because a photographer flips a join while
The question a correction raises is whether it did what it was for — whether the stroke filled the shoulder, whether the subtracted gradient took only the sky. Removing it answers that and loses it. The same ring the layer wears, one row down, because it is the same question about a smaller thing.
-`ui/dr-ui/ui/masks.slint:407`
+`ui/dr-ui/ui/masks.slint:409`
## Everywhere
@@ -268,7 +317,15 @@ The question a correction raises is whether it did what it was for — whether t
One key for "up one", innermost first: a question before the sheet under it, a sheet before the view, a view before the library. Nothing is left behind a dialogue that the key walked straight past.
-`ui/dr-ui/ui/app.slint:916`
+`ui/dr-ui/ui/app.slint:975`
+
+### Do what a sheet offers
+
+- **Touch** — Press its button — Export, or Copy
+- **Pointer** — Press its button — Export, or Copy
+- **Keyboard** — `Enter`, on the export and copy sheets
+
+`ui/dr-ui/ui/app.slint:985`
## Collections sidebar
@@ -280,7 +337,7 @@ One key for "up one", innermost first: a question before the sheet under it, a s
The tree is inside a Flickable, which claims any drag beginning inside it — so with a finger a drag on a row is a scroll until something says otherwise. The hold is that something, and it is what every mobile list already uses to pick a row up. The row lifts the moment it fires, so the gesture says it has been understood before anything moves.
-`ui/dr-ui/ui/collections.slint:337`
+`ui/dr-ui/ui/collections.slint:351`
### Act on a collection — rename, nest, un-nest, delete
@@ -290,7 +347,7 @@ The tree is inside a Flickable, which claims any drag beginning inside it — so
The hold arms a drag and opens this menu, and which one you get is decided by whether you moved — the same fork the grid uses. One menu for everything done to a row, because there is one hold per row: while the hold opened the offline question by itself, nothing else the tree can do had a touch route.
-`ui/dr-ui/ui/collections.slint:349`
+`ui/dr-ui/ui/collections.slint:363`
### Take a collection back out of the one it is nested in
@@ -300,18 +357,18 @@ The hold arms a drag and opens this menu, and which one you get is decided by wh
Nesting is a drag of one row onto another, and its inverse had no gesture at all: "All photographs" refused every drop, which is right for a photograph — it is already in the library — and wrong for a collection, which has a top level to be returned to. Without it a collection dragged into another was in there permanently.
-`ui/dr-ui/ui/collections.slint:360`
+`ui/dr-ui/ui/collections.slint:374`
### Rename a collection
- **Touch** — Hold the collection, then "Rename"
- **Pointer** — Double-click its name, or right-click it and choose "Rename"
-- **Keyboard** — `Escape` while typing abandons the new name
+- **Keyboard** — Type the name and press `Enter`; `Escape` abandons it
- **See it** — [in the manual](manual/README.md#collections)
Double-click is what a file manager and a Lightroom panel use for the same thing, so it needs no discovering — but nothing on screen says so, which is what the menu item is for.
-`ui/dr-ui/ui/collections.slint:374`
+`ui/dr-ui/ui/collections.slint:388`
## People
@@ -323,7 +380,7 @@ Double-click is what a file manager and a Lightroom panel use for the same thing
Grouping over-merges on siblings, on parents and children, and on the same person a decade apart, so splitting is as prominent as merging. A tool that can only merge makes its own errors permanent.
-`ui/dr-ui/ui/identity.slint:188`
+`ui/dr-ui/ui/identity.slint:189`
### Rule on a suggested face
@@ -333,7 +390,25 @@ Grouping over-merges on siblings, on parents and children, and on the same perso
A face is either the system's guess or the user's judgement, and the two are never conflated. A rejection is remembered, so the face is not suggested for that person again. The gesture note above is the whole label: a tick and a cross are only "confirm" and "reject" to someone who can see the suggestion they sit beside, and `IconButton`'s fallback would announce them as "check" and "cross" — two icon names that say nothing about which person is being ruled on.
-`ui/dr-ui/ui/identity.slint:209`
+`ui/dr-ui/ui/identity.slint:210`
+
+### Move between people
+
+- **Touch** — Tap a person on the rail
+- **Pointer** — Click a person on the rail
+- **Keyboard** — `↑` and `↓`, along the rail
+
+`ui/dr-ui/ui/identity.slint:385`
+
+### Name a person
+
+- **Touch** — Tap the name field over their faces, type, and press Enter
+- **Pointer** — Click the name field over their faces, type, and press Enter
+- **Keyboard** — `F2` puts the name field under the keys
+
+The rename key everywhere else. Enter finishes the name and hands the keys back to the rail, so naming a run of people is `Down`, `F2`, a name, Enter, over and over.
+
+`ui/dr-ui/ui/identity.slint:391`
### See a person's photographs
@@ -343,7 +418,7 @@ A face is either the system's guess or the user's judgement, and the two are nev
This is the point of having identified anybody. Without it the screen is a filing cabinet with no drawer handles.
-`ui/dr-ui/ui/identity.slint:637`
+`ui/dr-ui/ui/identity.slint:689`
### Change how faces are grouped
@@ -353,7 +428,7 @@ This is the point of having identified anybody. Without it the screen is a filin
The right match confidence is a property of your library, not of the model. "What would this do?" answers for this library without writing anything; names, confirmations and the groups you have set aside are kept whatever the dials say.
-`ui/dr-ui/ui/identity.slint:675`
+`ui/dr-ui/ui/identity.slint:727`
## Library grid
@@ -365,7 +440,7 @@ The right match confidence is a property of your library, not of the model. "Wha
Touch has no ctrl, so without a mode there is no way to select a second photograph — the first tap would open it. The hold is the fast way in and the button is the one that can be found.
-`ui/dr-ui/ui/library.slint:1630`
+`ui/dr-ui/ui/library.slint:1650`
### Add or remove one photograph
@@ -375,7 +450,7 @@ Touch has no ctrl, so without a mode there is no way to select a second photogra
While selecting, a tap never opens. That is the whole point of the mode: one meaning per gesture at a time. Press Done to get tap-to-open back.
-`ui/dr-ui/ui/library.slint:1640`
+`ui/dr-ui/ui/library.slint:1660`
### Leave selecting
@@ -384,7 +459,7 @@ While selecting, a tap never opens. That is the whole point of the mode: one mea
- **Keyboard** — `Escape`, or `Back`; an open sheet closes first
- **See it** — [in the manual](manual/README.md#selecting-several)
-`ui/dr-ui/ui/library.slint:1649`
+`ui/dr-ui/ui/library.slint:1669`
### Pick a photograph up to drag it
@@ -394,7 +469,7 @@ While selecting, a tap never opens. That is the whole point of the mode: one mea
A finger on a photograph might be starting a scroll, and for the first half-second the grid assumes it is. Holding says otherwise, and the ring is the grid saying it heard — from there the drag cannot be lost to a scroll. A mouse never waits: the cursor is precise enough that a sideways drag is unambiguous from the first pixel.
-`ui/dr-ui/ui/library.slint:1680`
+`ui/dr-ui/ui/library.slint:1700`
### Select a range
@@ -405,7 +480,7 @@ A finger on a photograph might be starting a scroll, and for the first half-seco
This replaced a double tap, which had no visible state and could take forty photographs by accident. The run is resolved by the catalog rather than by what is on screen, so the grid can scroll between the two taps — the ranges that hurt on a tablet are longer than a screenful, which is exactly where a finger sweep runs out.
-`ui/dr-ui/ui/library.slint:1746`
+`ui/dr-ui/ui/library.slint:1766`
### Take the blinks out of a burst
@@ -415,7 +490,7 @@ This replaced a double tap, which had no visible state and could take forty phot
Face indexing reads each face's eyes. The chip drops frames where the chosen people are caught blinking, and leaves sunglasses and eyes it could not read alone.
-`ui/dr-ui/ui/library.slint:2463`
+`ui/dr-ui/ui/library.slint:2483`
### Find photographs with two people in them
@@ -425,7 +500,7 @@ Face indexing reads each face's eyes. The chip drops frames where the chosen peo
"Any of them" is a union and "all of them" is an intersection. The tray is where both terms and the choice between them live, because a filter belongs on the filter bar.
-`ui/dr-ui/ui/library.slint:2493`
+`ui/dr-ui/ui/library.slint:2513`
### Show only photographs with one colour label
@@ -435,7 +510,7 @@ Face indexing reads each face's eyes. The chip drops frames where the chosen peo
Each chip is the label's mark and its name, so the one you want is found by reading it; tap the lit chip again to show every label.
-`ui/dr-ui/ui/library.slint:2617`
+`ui/dr-ui/ui/library.slint:2637`
### Export the selection as the last export was
@@ -446,7 +521,7 @@ Each chip is the label's mark and its name, so the one you want is found by read
Lightroom's and darktable's chords. Every export runs on the saved defaults, so the plain chord opens them beside an Export button and the shifted one skips straight to exporting.
-`ui/dr-ui/ui/library.slint:3083`
+`ui/dr-ui/ui/library.slint:3107`
### Paste copied settings onto the selection
@@ -455,7 +530,17 @@ Lightroom's and darktable's chords. Every export runs on the saved defaults, so
- **Keyboard** — `Ctrl+V`
- **See it** — [in the manual](manual/README.md#copying-settings)
-`ui/dr-ui/ui/library.slint:3107`
+`ui/dr-ui/ui/library.slint:3131`
+
+### Keyword the selection
+
+- **Touch** — Select them, then Keywords in the selection bar
+- **Pointer** — Select them, then Keywords in the selection bar
+- **Keyboard** — `Ctrl+K`
+
+Lightroom's keywording chord. The sheet opens with its field ready for typing, so the keys that judge in the grid are out of the way until it closes.
+
+`ui/dr-ui/ui/library.slint:3160`
### Show only photographs with some number of stars
@@ -466,7 +551,7 @@ Lightroom's and darktable's chords. Every export runs on the saved defaults, so
The chips say "this many or more". A range with a ceiling — the twos and threes still to be decided — is the keyboard's alone, and the bar says so in words while it holds.
-`ui/dr-ui/ui/library.slint:3128`
+`ui/dr-ui/ui/library.slint:3194`
### Give photographs a colour label
@@ -477,15 +562,17 @@ The chips say "this many or more". A range with a ceiling — the twos and three
Lightroom's keys, so hands that learned them there need not learn them again. Purple has no key there either, and is on the bar. Every mark carries its label's initial, so the label is read without telling the colours apart.
-`ui/dr-ui/ui/library.slint:3178`
+`ui/dr-ui/ui/library.slint:3244`
### Pick or reject a photograph
+- **Touch** — Select them, then Flag in the selection bar and Pick, Reject or No flag
+- **Pointer** — Select them, then Flag in the selection bar and Pick, Reject or No flag
- **Keyboard** — `P` picks, `X` rejects and `U` takes the flag off, with the pointer over it or on the selection
The keys every culling tool uses, so muscle memory built elsewhere works here.
-`ui/dr-ui/ui/library.slint:3202`
+`ui/dr-ui/ui/library.slint:3268`
### Move photographs to the trash
@@ -495,7 +582,7 @@ The keys every culling tool uses, so muscle memory built elsewhere works here.
The bin acts on one photograph, so a stray click cannot trash a selection; the key acts on the selection because that is what every file manager's Delete does. Both are undone from the trash view.
-`ui/dr-ui/ui/library.slint:3225`
+`ui/dr-ui/ui/library.slint:3295`
### Open this list
@@ -503,7 +590,7 @@ The bin acts on one photograph, so a stray click cannot trash a selection; the k
- **Pointer** — Press Help in the header
- **Keyboard** — `F1`
-`ui/dr-ui/ui/library.slint:3250`
+`ui/dr-ui/ui/library.slint:3320`
### Rename the collection the grid is showing
@@ -511,7 +598,7 @@ The bin acts on one photograph, so a stray click cannot trash a selection; the k
- **Pointer** — Double-click it in the sidebar
- **Keyboard** — `F2`
-`ui/dr-ui/ui/library.slint:3256`
+`ui/dr-ui/ui/library.slint:3326`
### Move through the grid
@@ -521,17 +608,18 @@ The bin acts on one photograph, so a stray click cannot trash a selection; the k
The cursor selects what it lands on, so walking and judging are one hand's work.
-`ui/dr-ui/ui/library.slint:3276`
+`ui/dr-ui/ui/library.slint:3346`
### Resize the thumbnails
- **Touch** — Pinch the grid with two fingers
- **Pointer** — Ctrl and the scroll wheel
+- **Keyboard** — `=` or `Plus` for larger, `-` for smaller
- **See it** — [in the manual](manual/README.md#getting-about)
There is no wheel on a tablet, so without the pinch the cell size could only be changed by a control a finger cannot reach.
-`ui/dr-ui/ui/library.slint:3403`
+`ui/dr-ui/ui/library.slint:3473`
### File photographs in a collection
@@ -541,7 +629,7 @@ There is no wheel on a tablet, so without the pinch the cell size could only be
The selection is what the drag carries, which is why selecting several is worth the mode: forty photographs file in one gesture.
-`ui/dr-ui/ui/library.slint:3601`
+`ui/dr-ui/ui/library.slint:3672`
### Open a photograph
@@ -552,7 +640,7 @@ The selection is what the drag carries, which is why selecting several is worth
A tap opens; a tap that *moved* does not. Travel is what separates a deliberate tap from a hand brushing past, and it is the only thing that does: the two are the same length. An earlier version required the finger to dwell 120 ms instead, and that rejected ordinary taps — a real tap is often quicker than a brush.
-`ui/dr-ui/ui/library.slint:3898`
+`ui/dr-ui/ui/library.slint:3969`
### Rate a photograph without opening it
@@ -563,7 +651,7 @@ A tap opens; a tap that *moved* does not. Travel is what separates a deliberate
A star has to take the press without it also reaching the cell, or every rating throws the user into develop.
-`ui/dr-ui/ui/library.slint:4021`
+`ui/dr-ui/ui/library.slint:4092`
### Choose the frame a folded burst shows
@@ -573,17 +661,18 @@ A star has to take the press without it also reaching the cell, or every rating
A folded burst draws its earliest frame, which is a fact about the clock and not a judgement about the photograph — nothing in this application ranks a frame (FR-CULL-5). But the point of a burst is that one of the twelve is better than the other eleven, and the photographer is the only one who knows which. So the choice is offered on the frames themselves, while they are open and side by side, which is the one moment the alternatives are on screen to be compared.
-`ui/dr-ui/ui/library.slint:4154`
+`ui/dr-ui/ui/library.slint:4225`
### Drop the selection but keep selecting
- **Touch** — Press Clear in the selection strip
- **Pointer** — Press Clear in the selection strip
+- **Keyboard** — `Ctrl+D` or `Ctrl+Shift+A`
- **See it** — [in the manual](manual/README.md#selecting-several)
Distinct from Done, which leaves the mode entirely. Clearing keeps it, so the next selection can start straight away.
-`ui/dr-ui/ui/library.slint:4831`
+`ui/dr-ui/ui/library.slint:4902`
### Select everything the grid is showing
@@ -594,7 +683,7 @@ Distinct from Done, which leaves the mode entirely. Clearing keeps it, so the ne
A scoped grid of two hundred frames is two hundred taps otherwise, and "all of them, except those three" is a far more common shape than the taps it took to say it.
-`ui/dr-ui/ui/library.slint:4849`
+`ui/dr-ui/ui/library.slint:4921`
### Take photographs out of a collection
@@ -604,4 +693,4 @@ A scoped grid of two hundred frames is two hundred taps otherwise, and "all of t
The badge on a cell says a photograph is filed in three collections and never which. This is the sheet that names them, and the only way out of one the grid is not currently scoped to.
-`ui/dr-ui/ui/library.slint:4991`
+`ui/dr-ui/ui/library.slint:5102`
diff --git a/ui/dr-ui/src/develop_ui.rs b/ui/dr-ui/src/develop_ui.rs
index 26161d1..c901730 100644
--- a/ui/dr-ui/src/develop_ui.rs
+++ b/ui/dr-ui/src/develop_ui.rs
@@ -411,6 +411,46 @@ fn wire_adjustments(window: &AppWindow, w: &DevelopWiring) {
redraw(&w);
});
}
+ {
+ // TRACES: FR-DEV-16
+ // The nudge keys, on the control last moved: a hundredth of its
+ // travel, which is the step the slider's own increment takes. Read
+ // off the row on screen rather than the descriptor, because the row
+ // is what the photographer is looking at — with masks selected it is
+ // the layer's value, not the global one.
+ //
+ // Scalars only. A switch or a choice has no "a little more", and a
+ // curve's points are not one number.
+ let weak = window.as_weak();
+ let session = session.clone();
+ let redraw = redraw.clone();
+ let rows = rows.clone();
+ window
+ .global::()
+ .on_param_nudged(move |op, param, direction| {
+ use slint::Model as _;
+ let Some(w) = weak.upgrade() else { return };
+ let shown = w.global::().get_rows();
+ let Some(row) = shown
+ .iter()
+ .find(|r| r.op_index == op && r.param_index == param)
+ else {
+ return;
+ };
+ if row.kind != "scalar" || row.maximum <= row.minimum {
+ return;
+ }
+ let step = (row.maximum - row.minimum) / 100.0;
+ let value =
+ (row.value + direction.signum() as f32 * step).clamp(row.minimum, row.maximum);
+ if let Some(s) = session.borrow_mut().as_mut() {
+ s.set_param(op, param, value);
+ s.rebake_film_if_affected(op);
+ }
+ sync_rows(&w, &rows, &session);
+ redraw(&w);
+ });
+ }
// TRACES: FR-DEV-3
// The local-adjustment panel. Wired as a block rather than inline because
// it is a dozen callbacks that all say the same three things, and they
diff --git a/ui/dr-ui/src/gesture_book.rs b/ui/dr-ui/src/gesture_book.rs
index a4917fb..418aad7 100644
--- a/ui/dr-ui/src/gesture_book.rs
+++ b/ui/dr-ui/src/gesture_book.rs
@@ -37,7 +37,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Develop",
touch: "Pinch it with two fingers",
pointer: "The scroll wheel over it",
- keys: "",
+ keys: "Ctrl+= or Ctrl+Plus in, Ctrl+- out, about the middle of the view",
manual: "looking-closer",
},
Gesture {
@@ -45,7 +45,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Develop",
touch: "Drag it",
pointer: "Drag it",
- keys: "",
+ keys: "Shift+←, Shift+→, Shift+↑ and Shift+↓, a fifth of the view at a time",
manual: "looking-closer",
},
Gesture {
@@ -69,7 +69,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Develop",
touch: "Tap the step below the current one in the History list",
pointer: "Click it, or press Redo in the History header",
- keys: "Ctrl+Shift+Z",
+ keys: "Ctrl+Shift+Z, or Ctrl+Y",
manual: "history-snapshots-presets",
},
Gesture {
@@ -120,6 +120,30 @@ pub const GESTURES: &[Gesture] = &[
keys: "Ctrl+E",
manual: "export",
},
+ Gesture {
+ title: "Keep a crop that leaves a mask outside",
+ section: "Develop",
+ touch: "Press \"Keep crop\" on the notice, or \"Undo crop\" to take it back",
+ pointer: "Press \"Keep crop\" on the notice, or \"Undo crop\" to take it back",
+ keys: "Enter keeps it; Ctrl+Z takes the crop back, like any other step",
+ manual: "",
+ },
+ Gesture {
+ title: "Go back to the grid",
+ section: "Develop",
+ touch: "Press \"‹ Library\" in the top bar",
+ pointer: "Press \"‹ Library\" in the top bar",
+ keys: "G",
+ manual: "",
+ },
+ Gesture {
+ title: "Nudge the control last moved",
+ section: "Develop",
+ touch: "Drag its track",
+ pointer: "Drag its track",
+ keys: "= or Plus up and - down, a hundredth of its travel at a time; hold for more",
+ manual: "",
+ },
Gesture {
title: "Change which group of adjustments is on screen",
section: "Develop",
@@ -133,9 +157,25 @@ pub const GESTURES: &[Gesture] = &[
section: "Develop",
touch: "Double-tap the photograph",
pointer: "Double-click it, or press the zoom readout floating over the canvas",
- keys: "Z",
+ keys: "Z goes in and back out; Ctrl+1 goes to 1:1 and Ctrl+0 back to the whole frame",
manual: "looking-closer",
},
+ Gesture {
+ title: "Rate this photograph",
+ section: "Develop",
+ touch: "Tap a star in the top bar",
+ pointer: "Click a star in the top bar",
+ keys: "0–5",
+ manual: "",
+ },
+ Gesture {
+ title: "Pick or reject this photograph",
+ section: "Develop",
+ touch: "Press Pick or Reject in the top bar; again to take the flag off",
+ pointer: "Press Pick or Reject in the top bar; again to take the flag off",
+ keys: "P picks, X rejects and U takes the flag off",
+ manual: "",
+ },
Gesture {
title: "Give this photograph a colour label",
section: "Develop",
@@ -205,7 +245,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Develop",
touch: "Tap the + / − / ∩ chip on the part's row",
pointer: "Click the + / − / ∩ chip on the part's row",
- keys: "",
+ keys: "J turns the selected part's chip, while masking",
manual: "local-adjustments",
},
Gesture {
@@ -224,6 +264,14 @@ pub const GESTURES: &[Gesture] = &[
keys: "Escape, or Back where the device has one",
manual: "",
},
+ Gesture {
+ title: "Do what a sheet offers",
+ section: "Everywhere",
+ touch: "Press its button — Export, or Copy",
+ pointer: "Press its button — Export, or Copy",
+ keys: "Enter, on the export and copy sheets",
+ manual: "",
+ },
Gesture {
title: "Pick a collection up to rearrange the tree",
section: "Collections sidebar",
@@ -253,7 +301,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Collections sidebar",
touch: "Hold the collection, then \"Rename\"",
pointer: "Double-click its name, or right-click it and choose \"Rename\"",
- keys: "Escape while typing abandons the new name",
+ keys: "Type the name and press Enter; Escape abandons it",
manual: "collections",
},
Gesture {
@@ -272,6 +320,22 @@ pub const GESTURES: &[Gesture] = &[
keys: "",
manual: "people",
},
+ Gesture {
+ title: "Move between people",
+ section: "People",
+ touch: "Tap a person on the rail",
+ pointer: "Click a person on the rail",
+ keys: "↑ and ↓, along the rail",
+ manual: "",
+ },
+ Gesture {
+ title: "Name a person",
+ section: "People",
+ touch: "Tap the name field over their faces, type, and press Enter",
+ pointer: "Click the name field over their faces, type, and press Enter",
+ keys: "F2 puts the name field under the keys",
+ manual: "",
+ },
Gesture {
title: "See a person's photographs",
section: "People",
@@ -368,6 +432,14 @@ pub const GESTURES: &[Gesture] = &[
keys: "Ctrl+V",
manual: "copying-settings",
},
+ Gesture {
+ title: "Keyword the selection",
+ section: "Library grid",
+ touch: "Select them, then Keywords in the selection bar",
+ pointer: "Select them, then Keywords in the selection bar",
+ keys: "Ctrl+K",
+ manual: "",
+ },
Gesture {
title: "Show only photographs with some number of stars",
section: "Library grid",
@@ -387,8 +459,8 @@ pub const GESTURES: &[Gesture] = &[
Gesture {
title: "Pick or reject a photograph",
section: "Library grid",
- touch: "",
- pointer: "",
+ touch: "Select them, then Flag in the selection bar and Pick, Reject or No flag",
+ pointer: "Select them, then Flag in the selection bar and Pick, Reject or No flag",
keys: "P picks, X rejects and U takes the flag off, with the pointer over it or on the selection",
manual: "",
},
@@ -429,7 +501,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Library grid",
touch: "Pinch the grid with two fingers",
pointer: "Ctrl and the scroll wheel",
- keys: "",
+ keys: "= or Plus for larger, - for smaller",
manual: "getting-about",
},
Gesture {
@@ -469,7 +541,7 @@ pub const GESTURES: &[Gesture] = &[
section: "Library grid",
touch: "Press Clear in the selection strip",
pointer: "Press Clear in the selection strip",
- keys: "",
+ keys: "Ctrl+D or Ctrl+Shift+A",
manual: "selecting-several",
},
Gesture {
diff --git a/ui/dr-ui/src/identity_ui.rs b/ui/dr-ui/src/identity_ui.rs
index 4a862a6..907d32b 100644
--- a/ui/dr-ui/src/identity_ui.rs
+++ b/ui/dr-ui/src/identity_ui.rs
@@ -798,6 +798,44 @@ fn wire_navigation(
reset_name_field(&w);
});
}
+
+ // TRACES: FR-UI-5
+ // Up and down the rail from the keyboard. The rail's order is the model's
+ // order, so the neighbour is found there and then picked exactly as a
+ // click on it would pick it — one path for selecting a person, whichever
+ // way it was asked for. Stops at either end rather than wrapping: a rail
+ // of two thousand people that jumped from the last to the first would
+ // lose the user's place.
+ {
+ let weak = window.as_weak();
+ window.on_identity_person_stepped(move |delta| {
+ let Some(w) = weak.upgrade() else { return };
+ let people = w.get_identity_people();
+ let ids: Vec = people.iter().map(|p| p.id).collect();
+ if let Some(id) = stepped_person(&ids, w.get_identity_selected(), delta) {
+ w.invoke_identity_person_picked(id);
+ }
+ });
+ }
+}
+
+/// The person `delta` places along the rail from `selected`, or `None` where
+/// that is off either end or the rail is empty. With nobody selected, the
+/// first key down the rail takes the first person and up takes the last.
+fn stepped_person(ids: &[i32], selected: i32, delta: i32) -> Option {
+ let last = ids.len().checked_sub(1)?;
+ let next = match ids.iter().position(|id| *id == selected) {
+ Some(at) => {
+ let to = at as i64 + delta.signum() as i64;
+ if to < 0 || to > last as i64 {
+ return None;
+ }
+ to as usize
+ }
+ None if delta < 0 => last,
+ None => 0,
+ };
+ ids.get(next).copied()
}
/// Renaming a person, and the namesake merge offer a rename can raise.
@@ -1600,6 +1638,21 @@ fn park_cover_timer(timer: Option) {
#[cfg(test)]
mod tests {
+ use super::stepped_person;
+
+ /// TRACES: FR-UI-5
+ #[test]
+ fn stepping_the_rail_stops_at_either_end() {
+ let rail = [7, 3, 9];
+ assert_eq!(stepped_person(&rail, 3, 1), Some(9));
+ assert_eq!(stepped_person(&rail, 3, -1), Some(7));
+ assert_eq!(stepped_person(&rail, 9, 1), None);
+ assert_eq!(stepped_person(&rail, 7, -1), None);
+ assert_eq!(stepped_person(&rail, -1, 1), Some(7));
+ assert_eq!(stepped_person(&rail, -1, -1), Some(9));
+ assert_eq!(stepped_person(&[], -1, 1), None);
+ }
+
use super::*;
#[test]
diff --git a/ui/dr-ui/src/lib.rs b/ui/dr-ui/src/lib.rs
index 0eddea3..240a585 100644
--- a/ui/dr-ui/src/lib.rs
+++ b/ui/dr-ui/src/lib.rs
@@ -448,6 +448,7 @@ fn reset_view_state(window: &AppWindow) {
// would land on whichever control happens to share them.
window.global::().set_touched_op(-1);
window.global::().set_touched_param(-1);
+ window.global::().set_touched(0);
// TRACES: FR-DSP-7
// Emptied rather than left standing: the previous photograph's histogram
// beside the next one's filename is a confident, precise lie, and the gap
@@ -3433,19 +3434,17 @@ fn apply_layout_class(
/// the activity — the behaviour every application there has, and the reason
/// this answers with a bool rather than swallowing the gesture.
fn back_one_step(w: &AppWindow) -> bool {
+ // TRACES: FR-UI-5 | FR-UI-4
// The Identity screen has no representation in `NavState`: nothing here
// records which view it replaced, only `identity_ui`'s own
- // `came_from_library`, which this function has no reason to reach for
- // over one screen. Before this refactor, back queued nothing behind
- // Identity opened from the library (show-library stayed true, unread by
- // anything) and queued `ToLibrary` behind Identity opened from develop —
- // but `ToLibrary` only ever set `show-library`, a property
- // `IdentityScreen`'s own `if` never read, so both cases looked the same
- // on screen: nothing happened. Swallowing the gesture here keeps that:
- // falling into the general case below would instead write `active-view`,
- // which `IdentityScreen`'s `if` *does* read, and close the screen as a
- // side effect nobody asked for.
+ // `came_from_library`. So back leaves it the way its own "‹ Library" /
+ // "‹ Develop" button does, through `identity-close`, which knows where it
+ // came from — rather than through the general case below, which would
+ // write `active-view` without that knowledge. It used to swallow the key
+ // and do nothing, which left Escape and Android's Back dead on a whole
+ // screen.
if w.get_active_view() == View::Identity {
+ w.invoke_identity_close();
return true;
}
diff --git a/ui/dr-ui/src/library_ui/ratings_keywords.rs b/ui/dr-ui/src/library_ui/ratings_keywords.rs
index 0eeb67c..d3571ec 100644
--- a/ui/dr-ui/src/library_ui/ratings_keywords.rs
+++ b/ui/dr-ui/src/library_ui/ratings_keywords.rs
@@ -986,6 +986,29 @@ pub(super) fn wire_ratings_and_flags(
});
}
+ // TRACES: FR-UI-5 | FR-CULL-4
+ // The flag of one photograph by row: develop's Pick and Reject, and its
+ // P, X and U. The open photograph only, for the reason a star clicked in
+ // the grid rates only its own cell — develop is working on one frame, and
+ // a selection left behind in the grid is not what is in front of it.
+ {
+ let weak = window.as_weak();
+ let ctl = ctl.clone();
+ window
+ .global::()
+ .on_library_cell_flagged(move |row, flag| {
+ let Some(w) = weak.upgrade() else { return };
+ let id = ctl
+ .image_ids
+ .borrow()
+ .get(row as usize)
+ .map(|id| dr_types::ImageId(*id as u64));
+ let Some(id) = id else { return };
+
+ apply_judgement(&w, &ctl, &[id], None, Some(flag_from_code(flag)));
+ });
+ }
+
// Fold a burst up, or open it out (FR-CULL-5). A reload rather than a repaint, because
// it changes what the grid's query returns — see [`crate::bursts::toggle`].
{
diff --git a/ui/dr-ui/src/masks_ui.rs b/ui/dr-ui/src/masks_ui.rs
index 9cdaf21..ae1938a 100644
--- a/ui/dr-ui/src/masks_ui.rs
+++ b/ui/dr-ui/src/masks_ui.rs
@@ -1136,6 +1136,47 @@ fn wire_layers_parts(
redraw(&w);
});
}
+ {
+ // TRACES: FR-DEV-16 | FR-DEV-19a
+ // The keyboard's turn of the join chip: the part the tools point at,
+ // on the one layer being edited, one step round the chip's own cycle.
+ // Nothing with several layers selected — a part belongs to one — and
+ // nothing on the base part, which joins nothing.
+ let weak = window.as_weak();
+ let session = session.clone();
+ let redraw = redraw.clone();
+ window
+ .global::()
+ .on_selected_part_join_cycled(move || {
+ let Some(w) = weak.upgrade() else { return };
+ {
+ let mut slot = session.borrow_mut();
+ let Some(s) = slot.as_mut() else { return };
+ let [id] = s.active_masks() else { return };
+ let id = id.clone();
+ let index = s.active_part();
+ if index == 0 {
+ return;
+ }
+ let Some(join) = s
+ .masks()
+ .get(&id)
+ .and_then(|l| l.part(index))
+ .map(|p| p.join)
+ else {
+ return;
+ };
+ let at = dr_pipeline::mask::Join::ALL
+ .iter()
+ .position(|j| *j == join)
+ .unwrap_or(0);
+ let next = (at + 1) % dr_pipeline::mask::Join::ALL.len();
+ s.set_mask_part_join(&id, index, next);
+ }
+ sync(&w, &session);
+ redraw(&w);
+ });
+ }
{
let weak = window.as_weak();
let session = session.clone();
diff --git a/ui/dr-ui/ui/adjust.slint b/ui/dr-ui/ui/adjust.slint
index 8f75115..4b2ae97 100644
--- a/ui/dr-ui/ui/adjust.slint
+++ b/ui/dr-ui/ui/adjust.slint
@@ -647,6 +647,11 @@ export global Framing {
in property keystone-v: 0.0;
in property keystone-h: 0.0;
in property max-keystone: 100.0;
+ /// TRACES: FR-DEV-16
+ /// Which framing slider was moved last — 1 straighten, 2 vertical,
+ /// 3 horizontal — or 0 when the last control moved was an adjustment
+ /// (see `Adjustments.touched-op`). What `R` and the nudge keys act on.
+ in-out property touched: 0;
/// Any of crop, angle, keystone, rotation or flips differs from neutral — what
/// lights the section's dot and enables its reset. Distinct from the crop
/// rect being non-full: a rotation or a flip is an edit with the crop
@@ -813,7 +818,11 @@ export component ComposePanel inherits Rectangle {
minimum: -Framing.max-straighten;
maximum: Framing.max-straighten;
unit: "°";
- changed(v) => { Framing.angle-changed(v); }
+ changed(v) => {
+ Framing.touched = 1;
+ Adjustments.touched-op = -1;
+ Framing.angle-changed(v);
+ }
committed(v) => { Framing.angle-committed(v); }
reset => { Framing.angle-changed(0); }
}
@@ -831,7 +840,11 @@ export component ComposePanel inherits Rectangle {
minimum: -Framing.max-keystone;
maximum: Framing.max-keystone;
unit: "";
- changed(v) => { Framing.keystone-v-changed(v); }
+ changed(v) => {
+ Framing.touched = 2;
+ Adjustments.touched-op = -1;
+ Framing.keystone-v-changed(v);
+ }
committed(v) => { Framing.keystone-committed(); }
reset => {
Framing.keystone-v-changed(0);
@@ -845,7 +858,11 @@ export component ComposePanel inherits Rectangle {
minimum: -Framing.max-keystone;
maximum: Framing.max-keystone;
unit: "";
- changed(v) => { Framing.keystone-h-changed(v); }
+ changed(v) => {
+ Framing.touched = 3;
+ Adjustments.touched-op = -1;
+ Framing.keystone-h-changed(v);
+ }
committed(v) => { Framing.keystone-committed(); }
reset => {
Framing.keystone-h-changed(0);
@@ -1004,6 +1021,11 @@ export global Adjustments {
callback param-changed(int, int, float);
callback param-reset(int, int);
/// TRACES: FR-DEV-16
+ /// Move one scalar control a hundredth of its travel, up for a positive
+ /// direction — the nudge keys, on the control last moved. Rust reads the
+ /// range off the row, where it is.
+ callback param-nudged(int, int, int);
+ /// TRACES: FR-DEV-16
/// The control last moved, so a key can put it back.
///
/// The generated rows have no focus: they are a model the repeater
@@ -1531,6 +1553,7 @@ export component AdjustPanel inherits Rectangle {
curve-channel: Adjustments.curve-channel;
drag-changed(on) => { root.slider-dragging = on; }
param-changed(op, param, v) => {
+ Framing.touched = 0;
Adjustments.touched-op = op;
Adjustments.touched-param = param;
Adjustments.param-changed(op, param, v);
diff --git a/ui/dr-ui/ui/app.slint b/ui/dr-ui/ui/app.slint
index 2d65458..d204167 100644
--- a/ui/dr-ui/ui/app.slint
+++ b/ui/dr-ui/ui/app.slint
@@ -384,6 +384,9 @@ export component AppWindow inherits Window {
callback identity-open();
callback identity-close();
+ /// TRACES: FR-UI-5
+ /// Up or down the people rail by one, from the keyboard.
+ callback identity-person-stepped(int);
callback identity-person-picked(int);
callback identity-rename(string);
callback identity-merge-accept();
@@ -651,6 +654,62 @@ export component AppWindow inherits Window {
/// The copy sheet: which kinds of edit a copy carries, and Copy. Ctrl+Shift+C.
in-out property copy-sheet-open: false;
+ /// TRACES: FR-EXP-7 | FR-UI-5
+ /// Whether the export sheet's button would do anything — the develop
+ /// view's photograph, or the grid's selection. One definition for the
+ /// button and for Enter, so the key cannot export what the greyed button
+ /// would not.
+ property export-sheet-can-export: root.active-view == View.develop
+ ? !root.export-busy && root.total > 0
+ : !Library.library-exporting && Library.library-selected-count > 0;
+
+ /// What the export sheet's button does.
+ function export-from-sheet() {
+ root.export-sheet-open = false;
+ if (root.active-view == View.develop) {
+ root.export-image();
+ } else {
+ Library.library-export-selection();
+ }
+ }
+
+ /// TRACES: FR-DEV-16 | FR-DEV-20
+ /// The framing slider moved last, nudged a hundredth of its travel — the
+ /// step its own increment takes — and committed, because one keystroke is
+ /// a whole gesture and the refit of the crop hangs off the end of one.
+ function framing-nudged(direction: int) {
+ if (Framing.touched == 1) {
+ Framing.angle-changed(clamp(
+ Framing.angle + direction * Framing.max-straighten / 50,
+ -Framing.max-straighten, Framing.max-straighten));
+ Framing.angle-committed(Framing.angle);
+ } else if (Framing.touched == 2) {
+ Framing.keystone-v-changed(clamp(
+ Framing.keystone-v + direction * Framing.max-keystone / 50,
+ -Framing.max-keystone, Framing.max-keystone));
+ Framing.keystone-committed();
+ } else if (Framing.touched == 3) {
+ Framing.keystone-h-changed(clamp(
+ Framing.keystone-h + direction * Framing.max-keystone / 50,
+ -Framing.max-keystone, Framing.max-keystone));
+ Framing.keystone-committed();
+ }
+ }
+
+ /// TRACES: FR-DEV-16 | FR-DEV-20
+ /// The framing slider moved last, back to level — what its own reset does.
+ function framing-reset-touched() {
+ if (Framing.touched == 1) {
+ Framing.angle-changed(0);
+ } else if (Framing.touched == 2) {
+ Framing.keystone-v-changed(0);
+ Framing.keystone-committed();
+ } else if (Framing.touched == 3) {
+ Framing.keystone-h-changed(0);
+ Framing.keystone-committed();
+ }
+ }
+
/// TRACES: FR-UI-5
/// One photograph along, from the keyboard.
///
@@ -923,6 +982,12 @@ in property panel-visible: true;
// view before the library. Nothing is left behind a
// dialogue that the key walked straight past.
//
+ // GESTURE: Do what a sheet offers
+ // where: Everywhere
+ // touch: Press its button — Export, or Copy
+ // pointer: Press its button — Export, or Copy
+ // keys: `Enter`, on the export and copy sheets
+ //
// KEYMAP: Everywhere
key-pressed(event) => {
// Escape alongside Back: the same "go up one" on a keyboard, and
@@ -971,6 +1036,21 @@ in property panel-visible: true;
}
return root.back-requested() ? accept : reject;
}
+ // TRACES: FR-UI-5 | FR-EXP-7 | FR-DEV-6
+ // Enter does what the sheet's own button does. A text field in
+ // the sheet that has focus takes Enter first, so typing a folder
+ // name and pressing it does not export from under the typing.
+ if (Keys.chord(event) == "Enter") {
+ if (root.export-sheet-open && root.export-sheet-can-export) {
+ root.export-from-sheet();
+ return accept;
+ }
+ if (root.copy-sheet-open && root.total > 0 && root.load-error == "") {
+ root.copy-sheet-open = false;
+ Transfer.copy();
+ return accept;
+ }
+ }
return reject;
}
@@ -1195,6 +1275,7 @@ in property panel-visible: true;
check-coverage() => { root.identity-check-coverage(); }
delete-all-face-data() => { root.identity-delete-all(); }
close() => { root.identity-close(); }
+ person-stepped(d) => { root.identity-person-stepped(d); }
}
// The launch screen replaces the whole window rather than overlaying it:
@@ -1292,6 +1373,9 @@ in property panel-visible: true;
Collections.collection-rename-commit(id, name);
}
rename-cancel() => { Collections.collection-rename-cancel(); }
+ // The name field took the keyboard; when a key
+ // finished the name, the grid gets it back.
+ keys-released() => { library-grid.take-keys(); }
trash-count: Collections.trash-count;
trash-label: Collections.trash-label;
selected-count: Library.library-selected-count;
@@ -1305,7 +1389,7 @@ in property panel-visible: true;
}
}
- LibraryGrid {
+ library-grid := LibraryGrid {
horizontal-stretch: 1;
// FR-UI-1: the header collapses its actions behind a
// disclosure below the breakpoint. A tablet in portrait is
@@ -1526,6 +1610,15 @@ in property panel-visible: true;
label-picked(code) => {
Library.library-cell-labelled(Library.library-roll-current, code, false);
}
+ // TRACES: FR-UI-5 | FR-CULL-4
+ // The open photograph's stars and flag, read from its cell as
+ // the label is; -1 with no library to hold them.
+ rating: Library.library-total > 0 && Library.library-roll-current >= 0
+ ? Library.library-cells[Library.library-roll-current].rating : -1;
+ flag: Library.library-total > 0 && Library.library-roll-current >= 0
+ ? Library.library-cells[Library.library-roll-current].flag : 0;
+ rated(n) => { Library.library-cell-rated(Library.library-roll-current, n); }
+ flagged(f) => { Library.library-cell-flagged(Library.library-roll-current, f); }
position: root.total > 0 ? root.index + 1 + " / " + root.total : "";
// Only where a library was opened; command-line files have no
// grid to return to.
@@ -1793,6 +1886,8 @@ in property panel-visible: true;
// where: Develop
// touch: Pinch it with two fingers
// pointer: The scroll wheel over it
+ // keys: `Ctrl+=` or `Ctrl+Plus` in, `Ctrl+-` out,
+ // about the middle of the view
// why: Anchored on the fingers' midpoint, and on the
// pointer, so the gesture reads as magnifying
// the picture rather than sliding it about.
@@ -1887,6 +1982,9 @@ in property panel-visible: true;
// where: Develop
// touch: Drag it
// pointer: Drag it
+ // keys: `Shift+Left`, `Shift+Right`, `Shift+Up`
+ // and `Shift+Down`, a fifth of the view
+ // at a time
// why: Only once there is something outside the
// viewport to reach, which is why the
// cursor becomes a hand exactly then. The
@@ -2225,15 +2323,17 @@ in property panel-visible: true;
// the History list
// pointer: Click it, or press Redo in the
// History header
- // keys: `Ctrl+Shift+Z`
+ // keys: `Ctrl+Shift+Z`, or `Ctrl+Y`
// manual: history-snapshots-presets
//
- // Ctrl+Z and Ctrl+Shift+Z (FR-DEV-5).
+ // Ctrl+Z and Ctrl+Shift+Z (FR-DEV-5), and Ctrl+Y for
+ // hands that learned redo on Windows.
if (Keys.chord(event) == "Ctrl+Z") {
Steps.undo();
return accept;
}
- if (Keys.chord(event) == "Ctrl+Shift+Z") {
+ if (Keys.chord(event) == "Ctrl+Shift+Z"
+ || Keys.chord(event) == "Ctrl+Y") {
Steps.redo();
return accept;
}
@@ -2349,6 +2449,121 @@ in property panel-visible: true;
root.export-options-open();
return accept;
}
+ // TRACES: FR-UI-4 | FR-DEV-16
+ // Magnification from the keyboard: in and out about
+ // the middle of the view, the fit and the 1:1 by
+ // name. Photoshop's and Lightroom's chords. Not while
+ // composing, which drops the zoom on the way in so
+ // the crop handles stay on screen; the wheel and the
+ // pinch stand down there too.
+ if (!Develop.cropping) {
+ if (Keys.chord(event) == "Ctrl+=" || Keys.chord(event) == "Ctrl+Plus") {
+ root.zoom-at(1.25, 0.5, 0.5);
+ return accept;
+ }
+ if (Keys.chord(event) == "Ctrl+-") {
+ root.zoom-at(0.8, 0.5, 0.5);
+ return accept;
+ }
+ // The toggle goes out to fit from any zoom, so fit is
+ // the toggle when zoomed and nothing when not; and
+ // 1:1 is the toggle from fit — twice from a zoom
+ // that is not 1:1, once out and once back in.
+ if (Keys.chord(event) == "Ctrl+0") {
+ if (root.zoomed) { root.inspect-toggled(-1, -1); }
+ return accept;
+ }
+ if (Keys.chord(event) == "Ctrl+1") {
+ if (root.zoomed) { root.inspect-toggled(-1, -1); }
+ root.inspect-toggled(-1, -1);
+ return accept;
+ }
+ }
+ // TRACES: FR-UI-4 | FR-DEV-16
+ // Shift and an arrow move a magnified view by a fifth
+ // of itself — see "Move a magnified photograph about"
+ // above. Only while magnified, as the drag is: at fit
+ // there is nothing outside the view to move to.
+ if (root.zoomed) {
+ if (Keys.chord(event) == "Shift+Left") { root.pan-by(-0.2, 0); return accept; }
+ if (Keys.chord(event) == "Shift+Right") { root.pan-by(0.2, 0); return accept; }
+ if (Keys.chord(event) == "Shift+Up") { root.pan-by(0, -0.2); return accept; }
+ if (Keys.chord(event) == "Shift+Down") { root.pan-by(0, 0.2); return accept; }
+ }
+ // GESTURE: Keep a crop that leaves a mask outside
+ // where: Develop
+ // touch: Press "Keep crop" on the notice, or "Undo
+ // crop" to take it back
+ // pointer: Press "Keep crop" on the notice, or "Undo
+ // crop" to take it back
+ // keys: `Enter` keeps it; `Ctrl+Z` takes the crop
+ // back, like any other step
+ //
+ // TRACES: FR-DEV-17 | FR-DEV-16
+ // Only while the notice is up: Enter means nothing
+ // else here, and a key that dismissed a notice nobody
+ // could see would be a key that did nothing visible.
+ if (Framing.hidden-masks > 0 && Keys.chord(event) == "Enter") {
+ Framing.hidden-masks-kept();
+ return accept;
+ }
+ // GESTURE: Go back to the grid
+ // where: Develop
+ // touch: Press "‹ Library" in the top bar
+ // pointer: Press "‹ Library" in the top bar
+ // keys: `G`
+ // why: Lightroom's key for the grid. Escape gets
+ // there too, but a step at a time — out of a
+ // mode, then out of a zoom — where this goes
+ // straight back.
+ //
+ // TRACES: FR-DEV-16
+ // Only where there is a grid: files named on the
+ // command line have none, which is also when the bar
+ // hides its button.
+ if (Library.library-total > 0 && Keys.chord(event) == "G") {
+ root.back-to-library();
+ return accept;
+ }
+ // TRACES: FR-DEV-19a | FR-DEV-16
+ // J turns the selected part's join chip — see "Change
+ // how a part joins its mask" in masks.slint.
+ // The chip's own cycle, on the part the brush and
+ // the edge controls point at. Rust resolves which that
+ // is, and does nothing on a base part, which joins
+ // nothing.
+ if (Develop.local-mode && Keys.chord(event) == "J") {
+ Masking.selected-part-join-cycled();
+ return accept;
+ }
+ // GESTURE: Nudge the control last moved
+ // where: Develop
+ // touch: Drag its track
+ // pointer: Drag its track
+ // keys: `=` or `Plus` up and `-` down, a hundredth
+ // of its travel at a time; hold for more
+ // why: Lightroom's keys for the selected slider.
+ // There is no focus ring on a slider here, so
+ // "selected" is the last one moved — the same
+ // control `R` puts back — which covers the
+ // framing sliders, perspective included, as
+ // well as the adjustments.
+ //
+ // TRACES: FR-DEV-16 | FR-DEV-20
+ // A framing slider moved last takes the key; Rust
+ // works out an adjustment's step from its row, where
+ // the range is.
+ if (Keys.chord(event) == "=" || Keys.chord(event) == "Plus"
+ || Keys.chord(event) == "-") {
+ if (Framing.touched > 0) {
+ root.framing-nudged(Keys.chord(event) == "-" ? -1 : 1);
+ } else if (Adjustments.touched-op >= 0) {
+ Adjustments.param-nudged(
+ Adjustments.touched-op, Adjustments.touched-param,
+ Keys.chord(event) == "-" ? -1 : 1);
+ }
+ return accept;
+ }
// GESTURE: Change which group of adjustments is on screen
// where: Develop
// touch: Tap a group in the rail down the left
@@ -2390,7 +2605,8 @@ in property panel-visible: true;
// touch: Double-tap the photograph
// pointer: Double-click it, or press the zoom
// readout floating over the canvas
- // keys: `Z`
+ // keys: `Z` goes in and back out; `Ctrl+1` goes to
+ // 1:1 and `Ctrl+0` back to the whole frame
// why: Noise reduction and capture
// sharpening are judgements about
// single pixels, and a fitted view
@@ -2421,6 +2637,10 @@ in property panel-visible: true;
// been moved on this photograph until something
// has, so the key is silent until then rather than
// resetting a control nobody named.
+ if (Keys.chord(event) == "R" && Framing.touched > 0) {
+ root.framing-reset-touched();
+ return accept;
+ }
if (Keys.chord(event) == "R"
&& Adjustments.touched-op >= 0) {
Adjustments.param-reset(
@@ -2437,6 +2657,42 @@ in property panel-visible: true;
Masking.selected-toggled();
return accept;
}
+ // GESTURE: Rate this photograph
+ // where: Develop
+ // touch: Tap a star in the top bar
+ // pointer: Click a star in the top bar
+ // keys: `0`–`5`
+ //
+ // GESTURE: Pick or reject this photograph
+ // where: Develop
+ // touch: Press Pick or Reject in the top bar; again
+ // to take the flag off
+ // pointer: Press Pick or Reject in the top bar; again
+ // to take the flag off
+ // keys: `P` picks, `X` rejects and `U` takes the
+ // flag off
+ // why: The grid's keys, on the photograph that is
+ // open (FR-UI-5, 2026-09-19). Judging here does
+ // not move on to the next frame: that belongs
+ // to culling, and in develop the photograph in
+ // front of you is the one being worked on.
+ //
+ // TRACES: FR-UI-5 | FR-CULL-4 | FR-DEV-16
+ // Only with a library, like the labels below: a file
+ // named on the command line has no catalog to hold a
+ // rating.
+ if (Library.library-total > 0
+ && Library.library-roll-current >= 0) {
+ if (Keys.chord(event) == "0") { Library.library-cell-rated(Library.library-roll-current, 0); return accept; }
+ if (Keys.chord(event) == "1") { Library.library-cell-rated(Library.library-roll-current, 1); return accept; }
+ if (Keys.chord(event) == "2") { Library.library-cell-rated(Library.library-roll-current, 2); return accept; }
+ if (Keys.chord(event) == "3") { Library.library-cell-rated(Library.library-roll-current, 3); return accept; }
+ if (Keys.chord(event) == "4") { Library.library-cell-rated(Library.library-roll-current, 4); return accept; }
+ if (Keys.chord(event) == "5") { Library.library-cell-rated(Library.library-roll-current, 5); return accept; }
+ if (Keys.chord(event) == "P") { Library.library-cell-flagged(Library.library-roll-current, 1); return accept; }
+ if (Keys.chord(event) == "X") { Library.library-cell-flagged(Library.library-roll-current, 2); return accept; }
+ if (Keys.chord(event) == "U") { Library.library-cell-flagged(Library.library-roll-current, 0); return accept; }
+ }
// GESTURE: Give this photograph a colour label
// where: Develop
// touch: Tap Label in the top bar, then a
@@ -3085,17 +3341,8 @@ in property panel-visible: true;
: (root.export-to-server
? "Export " + Library.library-selected-count + " to the library"
: "Export " + Library.library-selected-count);
- can-export: root.active-view == View.develop
- ? !root.export-busy && root.total > 0
- : !Library.library-exporting && Library.library-selected-count > 0;
- export => {
- root.export-sheet-open = false;
- if (root.active-view == View.develop) {
- root.export-image();
- } else {
- Library.library-export-selection();
- }
- }
+ can-export: root.export-sheet-can-export;
+ export => { root.export-from-sheet(); }
dismiss => { root.export-sheet-open = false; }
}
diff --git a/ui/dr-ui/ui/collections.slint b/ui/dr-ui/ui/collections.slint
index 3fc7e82..ba3aaf7 100644
--- a/ui/dr-ui/ui/collections.slint
+++ b/ui/dr-ui/ui/collections.slint
@@ -106,6 +106,11 @@ component TreeRow inherits Rectangle {
callback rename-committed(string);
/// Renaming abandoned with Escape; the old name stands.
callback rename-cancelled();
+ /// TRACES: FR-UI-5
+ /// Enter or Escape finished the name, and the keyboard should go back to
+ /// whatever had it. Not raised when the name is committed by clicking
+ /// away: the click has already put focus where the user wanted it.
+ callback keys-released();
height: Theme.row-height;
@@ -255,6 +260,15 @@ component TreeRow inherits Rectangle {
// the input has focus and consumes it.
if (Keys.chord(event) == "Escape") {
root.rename-cancelled();
+ root.keys-released();
+ return accept;
+ }
+ // Enter keeps the name. The input's own `accepted`
+ // would do the same; answering it here is what puts the
+ // key where the checker can see it bound.
+ if (Keys.chord(event) == "Enter") {
+ root.rename-committed(self.text);
+ root.keys-released();
return accept;
}
return reject;
@@ -375,7 +389,7 @@ component TreeRow inherits Rectangle {
// where: Collections sidebar
// touch: Hold the collection, then "Rename"
// pointer: Double-click its name, or right-click it and choose "Rename"
- // keys: `Escape` while typing abandons the new name
+ // keys: Type the name and press `Enter`; `Escape` abandons it
// why: Double-click is what a file manager and a Lightroom panel use
// for the same thing, so it needs no discovering — but nothing
// on screen says so, which is what the menu item is for.
@@ -506,6 +520,8 @@ export component CollectionsPanel inherits Rectangle {
callback rename-commit(int, string);
/// Renaming was abandoned.
callback rename-cancel();
+ /// A key finished a rename; see `CollectionRow.keys-released`.
+ callback keys-released();
// --- trash (FR-CAT-15) ---
//
@@ -698,6 +714,7 @@ export component CollectionsPanel inherits Rectangle {
rename-requested => { root.rename-start(row.id); }
rename-committed(name) => { root.rename-commit(row.id, name); }
rename-cancelled => { root.rename-cancel(); }
+ keys-released => { root.keys-released(); }
}
}
diff --git a/ui/dr-ui/ui/develop.slint b/ui/dr-ui/ui/develop.slint
index feb6dc3..bffb5b1 100644
--- a/ui/dr-ui/ui/develop.slint
+++ b/ui/dr-ui/ui/develop.slint
@@ -12,6 +12,7 @@ import { Develop } from "session.slint";
import { Transfer } from "adjust.slint";
import { Button, PanelHeading, Label, Value, Caption, Panel } from "widgets.slint";
import { Labels, LabelMark, LabelPicker } from "labels.slint";
+import { StarStrip } from "library.slint";
// Status strip — surfaces the GPU backend and adapter, which matters during
// v0.1 because assumption A1 is exactly "does this compositing path work on
@@ -51,6 +52,13 @@ export component StatusBar inherits Rectangle {
/// Whether the label choices are open in the strip.
property picking-label: false;
callback label-picked(int);
+ /// TRACES: FR-UI-5 | FR-CULL-4
+ /// The open photograph's stars, or -1 where there is no library to hold
+ /// them, and its flag: 0 none, 1 pick, 2 reject.
+ in property rating: -1;
+ in property flag: 0;
+ callback rated(int);
+ callback flagged(int);
callback back-to-library();
callback open-people();
@@ -149,6 +157,40 @@ export component StatusBar inherits Rectangle {
}
}
+ // TRACES: FR-UI-5 | FR-CULL-4 | NFR-A11Y-3
+ // The judgement, shown and set on the photograph that is open — the
+ // pointer and touch half of the rating and flag keys, which a tablet
+ // has no number row for (FR-UI-5, amended 2026-09-19). The grid's own
+ // stars, so a rating looks the same in both places; the star already
+ // set clears it, as there.
+ StarStrip {
+ rating: max(0, root.rating);
+ show-empty: true;
+ can-trash: false;
+ visible: root.rating >= 0;
+ y: (parent.height - self.height) / 2;
+ rate(n) => { root.rated(n); }
+ }
+
+ // Pressed again, a flag comes off: two buttons that each toggle,
+ // rather than a third for "none" that is only ever pressed to undo
+ // one of the other two.
+ Button {
+ text: root.flag == 1 ? "Picked" : "Pick";
+ active: root.flag == 1;
+ visible: root.rating >= 0;
+ y: (parent.height - self.height) / 2;
+ clicked => { root.flagged(root.flag == 1 ? 0 : 1); }
+ }
+
+ Button {
+ text: root.flag == 2 ? "Rejected" : "Reject";
+ active: root.flag == 2;
+ visible: root.rating >= 0;
+ y: (parent.height - self.height) / 2;
+ clicked => { root.flagged(root.flag == 2 ? 0 : 2); }
+ }
+
Rectangle { horizontal-stretch: 1; }
// --- instrumentation lives in Settings now ------------------------
diff --git a/ui/dr-ui/ui/identity.slint b/ui/dr-ui/ui/identity.slint
index 7dc5c07..c42e038 100644
--- a/ui/dr-ui/ui/identity.slint
+++ b/ui/dr-ui/ui/identity.slint
@@ -15,6 +15,7 @@
// the confirm/reject pair sits on the face itself rather than behind a menu.
import { Theme } from "theme.slint";
+import { Keys } from "keys.slint";
import { Panel, Button, IconButton, Field, ListView } from "widgets.slint";
import { SliderRow } from "controls.slint";
import { Icon } from "icons.slint";
@@ -290,6 +291,11 @@ export component IdentityScreen inherits Rectangle {
in property back-label: "‹ Library";
callback person-picked(int);
+ /// TRACES: FR-UI-5
+ /// The person above (-1) or below (1) the selected one on the rail — the
+ /// arrow keys. Rust walks the rail, because the selection is an id and
+ /// only Rust can find it in the list.
+ callback person-stepped(int);
callback rename(string);
callback confirm-face(int);
callback reject-face(int);
@@ -376,6 +382,50 @@ export component IdentityScreen inherits Rectangle {
name-field.text = root.selected-name;
}
+ // GESTURE: Move between people
+ // where: People
+ // touch: Tap a person on the rail
+ // pointer: Click a person on the rail
+ // keys: `Up` and `Down`, along the rail
+ //
+ // GESTURE: Name a person
+ // where: People
+ // touch: Tap the name field over their faces, type, and press Enter
+ // pointer: Click the name field over their faces, type, and press Enter
+ // keys: `F2` puts the name field under the keys
+ // why: The rename key everywhere else. Enter finishes the name and
+ // hands the keys back to the rail, so naming a run of people
+ // is `Down`, `F2`, a name, Enter, over and over.
+ //
+ // TRACES: FR-UI-5
+ // The screen's keys, on a holder of no size that takes focus on show, as
+ // the grid's judgement keys do: without a focus item nothing on this
+ // screen hears a key at all — Escape included, which bubbles from here to
+ // the shell and leaves. Not an ancestor of the name field, so the arrows
+ // move the caret there rather than the selection.
+ screen-keys := FocusScope {
+ width: 0px;
+ height: 0px;
+ init => { self.focus(); }
+
+ // KEYMAP: People
+ key-pressed(event) => {
+ if (Keys.chord(event) == "Up") {
+ root.person-stepped(-1);
+ return accept;
+ }
+ if (Keys.chord(event) == "Down") {
+ root.person-stepped(1);
+ return accept;
+ }
+ if (Keys.chord(event) == "F2" && root.selected-person >= 0) {
+ name-field.take-focus();
+ return accept;
+ }
+ return reject;
+ }
+ }
+
HorizontalLayout {
// ── the people rail ───────────────────────────────────────────────
Panel {
@@ -570,7 +620,9 @@ export component IdentityScreen inherits Rectangle {
// and the screen looks stuck.
accepted(t) => {
root.rename(t);
- name-field.release-focus();
+ // To the screen's keys rather than to nothing, so
+ // the arrows walk the rail again straight away.
+ screen-keys.focus();
}
}
if root.selected-person < 0: Text {
diff --git a/ui/dr-ui/ui/library.slint b/ui/dr-ui/ui/library.slint
index b8339aa..0e00959 100644
--- a/ui/dr-ui/ui/library.slint
+++ b/ui/dr-ui/ui/library.slint
@@ -632,6 +632,10 @@ export global Library {
// own rather than a zero score.
/// A star was clicked on a cell: row, then the rating 0..5.
callback library-cell-rated(int, int);
+ /// TRACES: FR-UI-5 | FR-CULL-4
+ /// Pick (1), reject (2) or clear the flag (0) of one photograph by row —
+ /// the one open in develop.
+ callback library-cell-flagged(int, int);
/// The trash target was clicked on one cell, by row.
callback library-cell-trashed(int);
/// The burst mark was clicked on one cell, by row (FR-CULL-5).
@@ -1556,6 +1560,22 @@ export component LibraryGrid inherits Rectangle {
/// Whether the selection bar's label picker is open. Local, like
/// `keywording`.
property labelling: false;
+ /// TRACES: FR-UI-5 | FR-CULL-4
+ /// Whether the selection bar's pick / reject choices are open. Local,
+ /// like `labelling`.
+ property flagging: false;
+
+ /// TRACES: FR-UI-5
+ /// Give the keyboard back to the grid.
+ ///
+ /// For a field outside the grid that has just finished — a collection's
+ /// name in the sidebar. The field took focus to be typed into and then
+ /// went away with it, and from there no key reached anything: the arrows,
+ /// the judgement keys and Escape were all dead until something was
+ /// clicked.
+ public function take-keys() {
+ judge-keys.focus();
+ }
/// TRACES: FR-UI-5
/// The library ordinal of the cell under the pointer, -1 when none.
@@ -3070,6 +3090,10 @@ export component LibraryGrid inherits Rectangle {
root.labelling = false;
return accept;
}
+ if (root.flagging) {
+ root.flagging = false;
+ return accept;
+ }
if (root.filing) {
root.filing = false;
return accept;
@@ -3125,6 +3149,48 @@ export component LibraryGrid inherits Rectangle {
root.select-all();
return accept;
}
+ // TRACES: FR-CAT-5 | FR-UI-5
+ // Lightroom's two chords for "select none". Clears, and
+ // stays in select mode, as the strip's Clear does.
+ if (Keys.chord(event) == "Ctrl+D"
+ || Keys.chord(event) == "Ctrl+Shift+A") {
+ root.clear-selection();
+ return accept;
+ }
+ // GESTURE: Keyword the selection
+ // where: Library grid
+ // touch: Select them, then Keywords in the selection
+ // bar
+ // pointer: Select them, then Keywords in the selection
+ // bar
+ // keys: `Ctrl+K`
+ // why: Lightroom's keywording chord. The sheet opens
+ // with its field ready for typing, so the
+ // keys that judge in the grid are out of the
+ // way until it closes.
+ //
+ // TRACES: FR-CAT-5 | FR-CAT-6 | FR-UI-5
+ // What the Keywords button does, and only when it is on
+ // the bar: with nothing selected there is nothing to
+ // keyword.
+ if (Keys.chord(event) == "Ctrl+K") {
+ if (root.selected-count > 0) {
+ root.keywords-opened();
+ root.keywording = true;
+ }
+ return accept;
+ }
+ // TRACES: FR-UI-4 | FR-UI-5
+ // Lightroom's grid keys for the thumbnail size, the same
+ // step as a notch of Ctrl and the wheel.
+ if (Keys.chord(event) == "=" || Keys.chord(event) == "Plus") {
+ root.zoom-cells(1);
+ return accept;
+ }
+ if (Keys.chord(event) == "-") {
+ root.zoom-cells(-1);
+ return accept;
+ }
// GESTURE: Show only photographs with some number of stars
// where: Library grid
// touch: Tap a star chip in the filter bar
@@ -3201,6 +3267,10 @@ export component LibraryGrid inherits Rectangle {
if (Keys.chord(event) == "9") { root.labelled(4, root.hover-ordinal); return accept; }
// GESTURE: Pick or reject a photograph
// where: Library grid
+ // touch: Select them, then Flag in the selection bar
+ // and Pick, Reject or No flag
+ // pointer: Select them, then Flag in the selection bar
+ // and Pick, Reject or No flag
// keys: `P` picks, `X` rejects and `U` takes the flag
// off, with the pointer over it or on the
// selection
@@ -3404,6 +3474,7 @@ export component LibraryGrid inherits Rectangle {
// where: Library grid
// touch: Pinch the grid with two fingers
// pointer: Ctrl and the scroll wheel
+ // keys: `=` or `Plus` for larger, `-` for smaller
// why: There is no wheel on a tablet, so without the
// pinch the cell size could only be changed by a
// control a finger cannot reach.
@@ -4832,6 +4903,7 @@ export component LibraryGrid inherits Rectangle {
// where: Library grid
// touch: Press Clear in the selection strip
// pointer: Press Clear in the selection strip
+ // keys: `Ctrl+D` or `Ctrl+Shift+A`
// why: Distinct from Done, which leaves the mode
// entirely. Clearing keeps it, so the next
// selection can start straight away.
@@ -4933,6 +5005,45 @@ export component LibraryGrid inherits Rectangle {
}
}
+ // TRACES: FR-UI-5 | FR-CULL-4
+ // Pick or reject the selection. Until this the flag had no route
+ // but `P`, `X` and `U`, which a tablet does not have. Opened like
+ // Label, so the three choices take room on the bar only while
+ // they are being made.
+ if !root.ranging && root.selected-count > 0: Button {
+ text: "Flag";
+ active: root.flagging;
+ y: (parent.height - self.height) / 2;
+ clicked => { root.flagging = !root.flagging; }
+ }
+
+ if !root.ranging && root.selected-count > 0 && root.flagging: Button {
+ text: "Pick";
+ y: (parent.height - self.height) / 2;
+ clicked => {
+ root.judged(-1, 1, -1);
+ root.flagging = false;
+ }
+ }
+
+ if !root.ranging && root.selected-count > 0 && root.flagging: Button {
+ text: "Reject";
+ y: (parent.height - self.height) / 2;
+ clicked => {
+ root.judged(-1, 2, -1);
+ root.flagging = false;
+ }
+ }
+
+ if !root.ranging && root.selected-count > 0 && root.flagging: Button {
+ text: "No flag";
+ y: (parent.height - self.height) / 2;
+ clicked => {
+ root.judged(-1, 0, -1);
+ root.flagging = false;
+ }
+ }
+
// TRACES: FR-DEV-6
// Paste the copied edit onto the selection. One of the things a
// selection can have done to it, like filing it in a collection,
diff --git a/ui/dr-ui/ui/masks.slint b/ui/dr-ui/ui/masks.slint
index 5a017c8..ff5647b 100644
--- a/ui/dr-ui/ui/masks.slint
+++ b/ui/dr-ui/ui/masks.slint
@@ -368,6 +368,8 @@ component MaskEntry inherits Rectangle {
// where: Develop
// touch: Tap the + / − / ∩ chip on the part's row
// pointer: Click the + / − / ∩ chip on the part's row
+ // keys: `J` turns the selected part's chip, while
+ // masking
// why: A chip that cycles rather than a menu, because
// a photographer flips a join while looking at
// the picture, not at the panel: add, take
@@ -879,6 +881,10 @@ export global Masking {
/// TRACES: FR-DEV-19a
callback part-selected(string, int);
callback part-join-picked(string, int, int);
+ /// TRACES: FR-DEV-16
+ /// The selected part's join chip, turned once — the keyboard's copy of
+ /// tapping it. Rust knows which part the tools point at.
+ callback selected-part-join-cycled();
/// Whether the part at this index is left out of the build.
callback part-hidden-toggled(string, int, bool);
callback part-removed(string, int);