From 46f5b95828699561a8af25c853341860bf7d5801 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Thu, 24 Sep 2026 21:22:39 -0400 Subject: [PATCH] Show and set colour labels in the grid and develop, and filter by them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Colour labels could be read from a Lightroom sidecar and queried by the selector, but nothing drew one or set one, so the only labels a library held were ones another program had written. Every mark carries its label's initial on its colour — R, Y, G, B, P — so a label is read without telling red from green, which is what NFR-A11Y-3 asks of colour labels by name. A grid cell shows the mark before its filename. In the grid, 6, 7, 8 and 9 set red, yellow, green and blue as Lightroom's keys do, on the photograph under the pointer or on the selection by the rule the star keys follow; the same key again takes the label off, and over a mixed selection it sets it on all. The selection bar gains Label, which opens the six choices — each a mark and a name — and purple, which has no key, is there. In develop the top bar says "Label: Green" beside the mark, opens the same choices, and 6-9 label the open photograph. Each gesture is one catalog transaction, then the grid, the counts and both sidecars are written as a rating's are. The filter bar gains a chip per label, its mark and its name with a count, one at a time; the filter is one SQL term, travels in the place record, and "All" clears it. --- core/dr-catalog/src/rating.rs | 5 +- core/dr-types/src/place.rs | 4 + docs/dev/traceability.md | 110 +++++----- docs/gestures.md | 125 +++++++++-- ui/dr-ui/src/gesture_book.rs | 21 ++ ui/dr-ui/src/library/filters.rs | 43 ++++ ui/dr-ui/src/library/scan.rs | 15 +- ui/dr-ui/src/library_ui/filter_bar.rs | 18 ++ ui/dr-ui/src/library_ui/ratings_keywords.rs | 218 +++++++++++++++++++- ui/dr-ui/src/library_ui/timeline.rs | 5 + ui/dr-ui/src/library_ui/window.rs | 4 +- ui/dr-ui/src/place.rs | 4 + ui/dr-ui/style.yaml | 15 ++ ui/dr-ui/ui/app.slint | 40 ++++ ui/dr-ui/ui/develop.slint | 34 +++ ui/dr-ui/ui/labels.slint | 131 ++++++++++++ ui/dr-ui/ui/library.slint | 141 ++++++++++++- ui/dr-ui/ui/widgets.slint | 13 ++ 18 files changed, 860 insertions(+), 86 deletions(-) create mode 100644 ui/dr-ui/ui/labels.slint diff --git a/core/dr-catalog/src/rating.rs b/core/dr-catalog/src/rating.rs index 04b4e30..25ec3e5 100644 --- a/core/dr-catalog/src/rating.rs +++ b/core/dr-catalog/src/rating.rs @@ -814,7 +814,10 @@ mod tests { assert!(all .iter() .all(|id| found[id].label == Some(ColourLabel::Blue))); - assert_eq!(label_histogram(cat.connection()).unwrap(), [0, 0, 0, 0, 4, 0]); + assert_eq!( + label_histogram(cat.connection()).unwrap(), + [0, 0, 0, 0, 4, 0] + ); } #[test] diff --git a/core/dr-types/src/place.rs b/core/dr-types/src/place.rs index 82d1e1a..9e79a79 100644 --- a/core/dr-types/src/place.rs +++ b/core/dr-types/src/place.rs @@ -135,6 +135,10 @@ pub struct StoredFilter { /// Travels: it is a narrowing like `local_only`, and a record without it /// — from a build before it existed — reads as off. pub eyes_open: bool, + /// TRACES: FR-CAT-6 + /// The colour label the grid was narrowed to. A record without it reads + /// as none, as every term added after the first does. + pub label: Option, } /// Where the photographer was, at the moment they were there. diff --git a/docs/dev/traceability.md b/docs/dev/traceability.md index 2b6658c..c77079c 100644 --- a/docs/dev/traceability.md +++ b/docs/dev/traceability.md @@ -9,8 +9,8 @@ Denominators are parsed from [`requirements.md`](requirements.md) at run time, n | Metric | Value | |---|---| -| Source files scanned | 439 | -| TRACES tags found | 1674 | +| Source files scanned | 440 | +| TRACES tags found | 1722 | | Requirements defined | 189 | | Requirements deferred (post-v1) | 24 | | Requirements covered | 158 | @@ -35,103 +35,103 @@ _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:1812`](../../ui/dr-ui/src/lib.rs#L1812), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5), [`ui/dr-ui/ui/library.slint:1256`](../../ui/dr-ui/ui/library.slint#L1256), [`ui/dr-ui/ui/library.slint:1310`](../../ui/dr-ui/ui/library.slint#L1310), [`ui/dr-ui/ui/library.slint:1543`](../../ui/dr-ui/ui/library.slint#L1543) | +| 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:1812`](../../ui/dr-ui/src/lib.rs#L1812), [`ui/dr-ui/ui/import.slint:5`](../../ui/dr-ui/ui/import.slint#L5), [`ui/dr-ui/ui/library.slint:1281`](../../ui/dr-ui/ui/library.slint#L1281), [`ui/dr-ui/ui/library.slint:1335`](../../ui/dr-ui/ui/library.slint#L1335), [`ui/dr-ui/ui/library.slint:1577`](../../ui/dr-ui/ui/library.slint#L1577) | | 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:1812`](../../ui/dr-ui/src/lib.rs#L1812), [`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:137`](../../core/dr-pipeline/src/sidecar.rs#L137) | -| FR-CAT-13 | [`core/dr-catalog/src/rating.rs:278`](../../core/dr-catalog/src/rating.rs#L278), [`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:529`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L529), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:585`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L585), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:683`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L683), [`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:615`](../../ui/dr-ui/ui/app.slint#L615), [`ui/dr-ui/ui/settings.slint:200`](../../ui/dr-ui/ui/settings.slint#L200), [`ui/dr-ui/ui/settings.slint:919`](../../ui/dr-ui/ui/settings.slint#L919) | +| 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:615`](../../ui/dr-ui/ui/app.slint#L615), [`ui/dr-ui/ui/settings.slint:200`](../../ui/dr-ui/ui/settings.slint#L200), [`ui/dr-ui/ui/settings.slint:919`](../../ui/dr-ui/ui/settings.slint#L919) | | 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:1182`](../../ui/dr-ui/ui/collections.slint#L1182), [`ui/dr-ui/ui/collections.slint:745`](../../ui/dr-ui/ui/collections.slint#L745) | | 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:458`](../../ui/dr-ui/src/library_ui/grid.rs#L458), [`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:482`](../../ui/dr-ui/ui/library.slint#L482), [`ui/dr-ui/ui/library.slint:737`](../../ui/dr-ui/ui/library.slint#L737), [`ui/dr-ui/ui/settings.slint:362`](../../ui/dr-ui/ui/settings.slint#L362), [`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:482`](../../ui/dr-ui/ui/library.slint#L482) | -| 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/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:171`](../../core/dr-pipeline/src/sidecar.rs#L171), [`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_ui/controller.rs:784`](../../ui/dr-ui/src/library_ui/controller.rs#L784), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1062`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1062), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1073`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1073), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1086`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1086), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1101`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1101), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1110`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1110), [`ui/dr-ui/ui/library.slint:1649`](../../ui/dr-ui/ui/library.slint#L1649), [`ui/dr-ui/ui/library.slint:1673`](../../ui/dr-ui/ui/library.slint#L1673), [`ui/dr-ui/ui/library.slint:1726`](../../ui/dr-ui/ui/library.slint#L1726), [`ui/dr-ui/ui/library.slint:19`](../../ui/dr-ui/ui/library.slint#L19), [`ui/dr-ui/ui/library.slint:3031`](../../ui/dr-ui/ui/library.slint#L3031), [`ui/dr-ui/ui/library.slint:4721`](../../ui/dr-ui/ui/library.slint#L4721), [`ui/dr-ui/ui/library.slint:482`](../../ui/dr-ui/ui/library.slint#L482), [`ui/dr-ui/ui/library.slint:504`](../../ui/dr-ui/ui/library.slint#L504), [`ui/dr-ui/ui/library.slint:603`](../../ui/dr-ui/ui/library.slint#L603) | -| 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/schema.rs:1125`](../../core/dr-catalog/src/schema.rs#L1125), [`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: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:333`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L333), [`ui/dr-ui/src/library_ui/filter_bar.rs:388`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L388), [`ui/dr-ui/src/library_ui/filter_bar.rs:822`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L822), [`ui/dr-ui/ui/app.slint:611`](../../ui/dr-ui/ui/app.slint#L611), [`ui/dr-ui/ui/library.slint:111`](../../ui/dr-ui/ui/library.slint#L111), [`ui/dr-ui/ui/library.slint:1845`](../../ui/dr-ui/ui/library.slint#L1845), [`ui/dr-ui/ui/library.slint:4721`](../../ui/dr-ui/ui/library.slint#L4721), [`ui/dr-ui/ui/library.slint:482`](../../ui/dr-ui/ui/library.slint#L482), [`ui/dr-ui/ui/library.slint:603`](../../ui/dr-ui/ui/library.slint#L603), [`ui/dr-ui/ui/library.slint:659`](../../ui/dr-ui/ui/library.slint#L659), [`ui/dr-ui/ui/settings.slint:192`](../../ui/dr-ui/ui/settings.slint#L192) | -| 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:3075`](../../ui/dr-ui/ui/app.slint#L3075), [`ui/dr-ui/ui/collections.slint:1182`](../../ui/dr-ui/ui/collections.slint#L1182), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:587`](../../ui/dr-ui/ui/collections.slint#L587), [`ui/dr-ui/ui/library.slint:1275`](../../ui/dr-ui/ui/library.slint#L1275), [`ui/dr-ui/ui/library.slint:1616`](../../ui/dr-ui/ui/library.slint#L1616), [`ui/dr-ui/ui/library.slint:3392`](../../ui/dr-ui/ui/library.slint#L3392), [`ui/dr-ui/ui/library.slint:4699`](../../ui/dr-ui/ui/library.slint#L4699), [`ui/dr-ui/ui/library.slint:4785`](../../ui/dr-ui/ui/library.slint#L4785), [`ui/dr-ui/ui/library.slint:482`](../../ui/dr-ui/ui/library.slint#L482), [`ui/dr-ui/ui/library.slint:507`](../../ui/dr-ui/ui/library.slint#L507), [`ui/dr-ui/ui/library.slint:549`](../../ui/dr-ui/ui/library.slint#L549), [`ui/dr-ui/ui/library.slint:559`](../../ui/dr-ui/ui/library.slint#L559) | -| 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:1400`](../../core/dr-pipeline/src/sidecar.rs#L1400), [`core/dr-pipeline/src/sidecar.rs:2232`](../../core/dr-pipeline/src/sidecar.rs#L2232), [`core/dr-pipeline/src/sidecar.rs:96`](../../core/dr-pipeline/src/sidecar.rs#L96), [`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:742`](../../ui/dr-ui/src/develop/masks.rs#L742), [`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:1205`](../../ui/dr-ui/src/lib.rs#L1205), [`ui/dr-ui/src/lib.rs:1265`](../../ui/dr-ui/src/lib.rs#L1265), [`ui/dr-ui/src/lib.rs:2708`](../../ui/dr-ui/src/lib.rs#L2708), [`ui/dr-ui/src/lib.rs:2855`](../../ui/dr-ui/src/lib.rs#L2855), [`ui/dr-ui/src/lib.rs:780`](../../ui/dr-ui/src/lib.rs#L780), [`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:373`](../../ui/dr-ui/src/library/sidecar.rs#L373), [`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:692`](../../ui/dr-ui/src/library_ui/grid.rs#L692), [`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:605`](../../ui/dr-ui/src/library/scan.rs#L605), [`ui/dr-ui/src/library/sidecar.rs:100`](../../ui/dr-ui/src/library/sidecar.rs#L100), [`ui/dr-ui/src/library/sidecar.rs:357`](../../ui/dr-ui/src/library/sidecar.rs#L357), [`ui/dr-ui/src/library/sidecar.rs:373`](../../ui/dr-ui/src/library/sidecar.rs#L373), [`ui/dr-ui/src/library/sidecar.rs:427`](../../ui/dr-ui/src/library/sidecar.rs#L427), [`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:443`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L443), [`ui/dr-ui/src/library_ui/filter_bar.rs:529`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L529), [`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:718`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L718), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:71`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L71), [`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:551`](../../ui/dr-ui/src/library_ui/window.rs#L551), [`ui/dr-ui/src/library_ui/window.rs:831`](../../ui/dr-ui/src/library_ui/window.rs#L831), [`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-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:458`](../../ui/dr-ui/src/library_ui/grid.rs#L458), [`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:487`](../../ui/dr-ui/ui/library.slint#L487), [`ui/dr-ui/ui/library.slint:762`](../../ui/dr-ui/ui/library.slint#L762), [`ui/dr-ui/ui/settings.slint:362`](../../ui/dr-ui/ui/settings.slint#L362), [`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:487`](../../ui/dr-ui/ui/library.slint#L487) | +| 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:2866`](../../core/dr-pipeline/src/sidecar.rs#L2866), [`core/dr-pipeline/src/sidecar.rs:2884`](../../core/dr-pipeline/src/sidecar.rs#L2884), [`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/ui/app.slint:1507`](../../ui/dr-ui/ui/app.slint#L1507), [`ui/dr-ui/ui/app.slint:2434`](../../ui/dr-ui/ui/app.slint#L2434), [`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:1547`](../../ui/dr-ui/ui/library.slint#L1547), [`ui/dr-ui/ui/library.slint:1550`](../../ui/dr-ui/ui/library.slint#L1550), [`ui/dr-ui/ui/library.slint:1683`](../../ui/dr-ui/ui/library.slint#L1683), [`ui/dr-ui/ui/library.slint:1707`](../../ui/dr-ui/ui/library.slint#L1707), [`ui/dr-ui/ui/library.slint:1760`](../../ui/dr-ui/ui/library.slint#L1760), [`ui/dr-ui/ui/library.slint:20`](../../ui/dr-ui/ui/library.slint#L20), [`ui/dr-ui/ui/library.slint:3103`](../../ui/dr-ui/ui/library.slint#L3103), [`ui/dr-ui/ui/library.slint:3176`](../../ui/dr-ui/ui/library.slint#L3176), [`ui/dr-ui/ui/library.slint:3727`](../../ui/dr-ui/ui/library.slint#L3727), [`ui/dr-ui/ui/library.slint:466`](../../ui/dr-ui/ui/library.slint#L466), [`ui/dr-ui/ui/library.slint:4831`](../../ui/dr-ui/ui/library.slint#L4831), [`ui/dr-ui/ui/library.slint:4847`](../../ui/dr-ui/ui/library.slint#L4847), [`ui/dr-ui/ui/library.slint:487`](../../ui/dr-ui/ui/library.slint#L487), [`ui/dr-ui/ui/library.slint:509`](../../ui/dr-ui/ui/library.slint#L509), [`ui/dr-ui/ui/library.slint:608`](../../ui/dr-ui/ui/library.slint#L608), [`ui/dr-ui/ui/library.slint:648`](../../ui/dr-ui/ui/library.slint#L648), [`ui/dr-ui/ui/library.slint:654`](../../ui/dr-ui/ui/library.slint#L654), [`ui/dr-ui/ui/library.slint:658`](../../ui/dr-ui/ui/library.slint#L658) | +| 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:611`](../../ui/dr-ui/ui/app.slint#L611), [`ui/dr-ui/ui/library.slint:112`](../../ui/dr-ui/ui/library.slint#L112), [`ui/dr-ui/ui/library.slint:1847`](../../ui/dr-ui/ui/library.slint#L1847), [`ui/dr-ui/ui/library.slint:1884`](../../ui/dr-ui/ui/library.slint#L1884), [`ui/dr-ui/ui/library.slint:2610`](../../ui/dr-ui/ui/library.slint#L2610), [`ui/dr-ui/ui/library.slint:4831`](../../ui/dr-ui/ui/library.slint#L4831), [`ui/dr-ui/ui/library.slint:487`](../../ui/dr-ui/ui/library.slint#L487), [`ui/dr-ui/ui/library.slint:608`](../../ui/dr-ui/ui/library.slint#L608), [`ui/dr-ui/ui/library.slint:662`](../../ui/dr-ui/ui/library.slint#L662), [`ui/dr-ui/ui/library.slint:684`](../../ui/dr-ui/ui/library.slint#L684), [`ui/dr-ui/ui/settings.slint:192`](../../ui/dr-ui/ui/settings.slint#L192), [`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:3115`](../../ui/dr-ui/ui/app.slint#L3115), [`ui/dr-ui/ui/collections.slint:1182`](../../ui/dr-ui/ui/collections.slint#L1182), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:587`](../../ui/dr-ui/ui/collections.slint#L587), [`ui/dr-ui/ui/library.slint:1300`](../../ui/dr-ui/ui/library.slint#L1300), [`ui/dr-ui/ui/library.slint:1650`](../../ui/dr-ui/ui/library.slint#L1650), [`ui/dr-ui/ui/library.slint:3487`](../../ui/dr-ui/ui/library.slint#L3487), [`ui/dr-ui/ui/library.slint:4809`](../../ui/dr-ui/ui/library.slint#L4809), [`ui/dr-ui/ui/library.slint:487`](../../ui/dr-ui/ui/library.slint#L487), [`ui/dr-ui/ui/library.slint:4912`](../../ui/dr-ui/ui/library.slint#L4912), [`ui/dr-ui/ui/library.slint:512`](../../ui/dr-ui/ui/library.slint#L512), [`ui/dr-ui/ui/library.slint:554`](../../ui/dr-ui/ui/library.slint#L554), [`ui/dr-ui/ui/library.slint:564`](../../ui/dr-ui/ui/library.slint#L564) | +| 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:2265`](../../core/dr-pipeline/src/sidecar.rs#L2265), [`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:742`](../../ui/dr-ui/src/develop/masks.rs#L742), [`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:1205`](../../ui/dr-ui/src/lib.rs#L1205), [`ui/dr-ui/src/lib.rs:1265`](../../ui/dr-ui/src/lib.rs#L1265), [`ui/dr-ui/src/lib.rs:2708`](../../ui/dr-ui/src/lib.rs#L2708), [`ui/dr-ui/src/lib.rs:2855`](../../ui/dr-ui/src/lib.rs#L2855), [`ui/dr-ui/src/lib.rs:780`](../../ui/dr-ui/src/lib.rs#L780), [`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:692`](../../ui/dr-ui/src/library_ui/grid.rs#L692), [`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:2827`](../../ui/dr-ui/src/lib.rs#L2827), [`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:456`](../../ui/dr-ui/ui/settings.slint#L456), [`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:160`](../../ui/dr-ui/src/library/filters.rs#L160), [`ui/dr-ui/ui/identity.slint:1`](../../ui/dr-ui/ui/identity.slint#L1) | +| 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:720`](../../ui/dr-ui/src/library/filters.rs#L720), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:801`](../../ui/dr-ui/src/library/filters.rs#L801), [`ui/dr-ui/ui/identity.slint:63`](../../ui/dr-ui/ui/identity.slint#L63), [`ui/dr-ui/ui/library.slint:1805`](../../ui/dr-ui/ui/library.slint#L1805), [`ui/dr-ui/ui/library.slint:693`](../../ui/dr-ui/ui/library.slint#L693) | +| 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:1839`](../../ui/dr-ui/ui/library.slint#L1839), [`ui/dr-ui/ui/library.slint:718`](../../ui/dr-ui/ui/library.slint#L718) | | 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:1269`](../../ui/dr-ui/src/develop_ui.rs#L1269), [`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:1294`](../../ui/dr-ui/src/lib.rs#L1294), [`ui/dr-ui/src/lib.rs:2242`](../../ui/dr-ui/src/lib.rs#L2242), [`ui/dr-ui/src/lib.rs:2372`](../../ui/dr-ui/src/lib.rs#L2372), [`ui/dr-ui/src/lib.rs:2415`](../../ui/dr-ui/src/lib.rs#L2415), [`ui/dr-ui/src/lib.rs:459`](../../ui/dr-ui/src/lib.rs#L459), [`ui/dr-ui/src/peaking.rs:1`](../../ui/dr-ui/src/peaking.rs#L1), [`ui/dr-ui/ui/app.slint:146`](../../ui/dr-ui/ui/app.slint#L146), [`ui/dr-ui/ui/app.slint:1721`](../../ui/dr-ui/ui/app.slint#L1721), [`ui/dr-ui/ui/app.slint:2865`](../../ui/dr-ui/ui/app.slint#L2865), [`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:171`](../../core/dr-pipeline/src/sidecar.rs#L171), [`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:482`](../../ui/dr-ui/ui/library.slint#L482) | -| 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:482`](../../ui/dr-ui/ui/library.slint#L482) | +| 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:1269`](../../ui/dr-ui/src/develop_ui.rs#L1269), [`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:1294`](../../ui/dr-ui/src/lib.rs#L1294), [`ui/dr-ui/src/lib.rs:2242`](../../ui/dr-ui/src/lib.rs#L2242), [`ui/dr-ui/src/lib.rs:2372`](../../ui/dr-ui/src/lib.rs#L2372), [`ui/dr-ui/src/lib.rs:2415`](../../ui/dr-ui/src/lib.rs#L2415), [`ui/dr-ui/src/lib.rs:459`](../../ui/dr-ui/src/lib.rs#L459), [`ui/dr-ui/src/peaking.rs:1`](../../ui/dr-ui/src/peaking.rs#L1), [`ui/dr-ui/ui/app.slint:146`](../../ui/dr-ui/ui/app.slint#L146), [`ui/dr-ui/ui/app.slint:1736`](../../ui/dr-ui/ui/app.slint#L1736), [`ui/dr-ui/ui/app.slint:2905`](../../ui/dr-ui/ui/app.slint#L2905), [`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:487`](../../ui/dr-ui/ui/library.slint#L487) | +| 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:487`](../../ui/dr-ui/ui/library.slint#L487) | | 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:1761`](../../ui/dr-ui/src/lib.rs#L1761), [`ui/dr-ui/src/lib.rs:3115`](../../ui/dr-ui/src/lib.rs#L3115), [`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:628`](../../ui/dr-ui/ui/app.slint#L628), [`ui/dr-ui/ui/settings.slint:101`](../../ui/dr-ui/ui/settings.slint#L101), [`ui/dr-ui/ui/settings.slint:394`](../../ui/dr-ui/ui/settings.slint#L394), [`ui/dr-ui/ui/settings.slint:456`](../../ui/dr-ui/ui/settings.slint#L456), [`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:720`](../../ui/dr-ui/src/library/filters.rs#L720), [`ui/dr-ui/src/library/filters.rs:763`](../../ui/dr-ui/src/library/filters.rs#L763), [`ui/dr-ui/src/library/filters.rs:801`](../../ui/dr-ui/src/library/filters.rs#L801), [`ui/dr-ui/src/repairs.rs:579`](../../ui/dr-ui/src/repairs.rs#L579), [`ui/dr-ui/ui/identity.slint:273`](../../ui/dr-ui/ui/identity.slint#L273), [`ui/dr-ui/ui/identity.slint:63`](../../ui/dr-ui/ui/identity.slint#L63), [`ui/dr-ui/ui/library.slint:1805`](../../ui/dr-ui/ui/library.slint#L1805), [`ui/dr-ui/ui/library.slint:693`](../../ui/dr-ui/ui/library.slint#L693) | +| 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:273`](../../ui/dr-ui/ui/identity.slint#L273), [`ui/dr-ui/ui/identity.slint:63`](../../ui/dr-ui/ui/identity.slint#L63), [`ui/dr-ui/ui/library.slint:1839`](../../ui/dr-ui/ui/library.slint#L1839), [`ui/dr-ui/ui/library.slint:718`](../../ui/dr-ui/ui/library.slint#L718) | | 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:347`](../../ui/dr-ui/ui/identity.slint#L347) | | 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:1336`](../../core/dr-pipeline/src/sidecar.rs#L1336), [`core/dr-pipeline/src/sidecar.rs:1515`](../../core/dr-pipeline/src/sidecar.rs#L1515), [`core/dr-pipeline/src/sidecar.rs:1604`](../../core/dr-pipeline/src/sidecar.rs#L1604), [`core/dr-pipeline/src/sidecar.rs:1708`](../../core/dr-pipeline/src/sidecar.rs#L1708), [`core/dr-pipeline/src/sidecar.rs:1916`](../../core/dr-pipeline/src/sidecar.rs#L1916), [`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: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-12 | [`core/dr-pipeline/ops/colour_grading.yaml:1`](../../core/dr-pipeline/ops/colour_grading.yaml#L1) | -| FR-DEV-16 | [`ui/dr-ui/src/lib.rs:441`](../../ui/dr-ui/src/lib.rs#L441), [`ui/dr-ui/src/masks_ui.rs:713`](../../ui/dr-ui/src/masks_ui.rs#L713), [`ui/dr-ui/ui/adjust.slint:956`](../../ui/dr-ui/ui/adjust.slint#L956), [`ui/dr-ui/ui/app.slint:2383`](../../ui/dr-ui/ui/app.slint#L2383), [`ui/dr-ui/ui/app.slint:2396`](../../ui/dr-ui/ui/app.slint#L2396), [`ui/dr-ui/ui/masks.slint:853`](../../ui/dr-ui/ui/masks.slint#L853) | -| FR-DEV-17 | [`core/dr-pipeline/src/orphan.rs:145`](../../core/dr-pipeline/src/orphan.rs#L145), [`core/dr-pipeline/src/orphan.rs:1`](../../core/dr-pipeline/src/orphan.rs#L1), [`ui/dr-ui/src/develop/framing.rs:1109`](../../ui/dr-ui/src/develop/framing.rs#L1109), [`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:2207`](../../ui/dr-ui/src/lib.rs#L2207), [`ui/dr-ui/src/lib.rs:613`](../../ui/dr-ui/src/lib.rs#L613), [`ui/dr-ui/ui/adjust.slint:683`](../../ui/dr-ui/ui/adjust.slint#L683), [`ui/dr-ui/ui/adjust.slint:687`](../../ui/dr-ui/ui/adjust.slint#L687), [`ui/dr-ui/ui/app.slint:2601`](../../ui/dr-ui/ui/app.slint#L2601), [`ui/dr-ui/ui/crop.slint:51`](../../ui/dr-ui/ui/crop.slint#L51) | +| FR-DEV-16 | [`ui/dr-ui/src/lib.rs:441`](../../ui/dr-ui/src/lib.rs#L441), [`ui/dr-ui/src/masks_ui.rs:713`](../../ui/dr-ui/src/masks_ui.rs#L713), [`ui/dr-ui/ui/adjust.slint:956`](../../ui/dr-ui/ui/adjust.slint#L956), [`ui/dr-ui/ui/app.slint:2398`](../../ui/dr-ui/ui/app.slint#L2398), [`ui/dr-ui/ui/app.slint:2411`](../../ui/dr-ui/ui/app.slint#L2411), [`ui/dr-ui/ui/masks.slint:853`](../../ui/dr-ui/ui/masks.slint#L853) | +| FR-DEV-17 | [`core/dr-pipeline/src/orphan.rs:145`](../../core/dr-pipeline/src/orphan.rs#L145), [`core/dr-pipeline/src/orphan.rs:1`](../../core/dr-pipeline/src/orphan.rs#L1), [`ui/dr-ui/src/develop/framing.rs:1109`](../../ui/dr-ui/src/develop/framing.rs#L1109), [`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:2207`](../../ui/dr-ui/src/lib.rs#L2207), [`ui/dr-ui/src/lib.rs:613`](../../ui/dr-ui/src/lib.rs#L613), [`ui/dr-ui/ui/adjust.slint:683`](../../ui/dr-ui/ui/adjust.slint#L683), [`ui/dr-ui/ui/adjust.slint:687`](../../ui/dr-ui/ui/adjust.slint#L687), [`ui/dr-ui/ui/app.slint:2641`](../../ui/dr-ui/ui/app.slint#L2641), [`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:1226`](../../core/dr-pipeline/src/sidecar.rs#L1226), [`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:431`](../../ui/dr-ui/src/develop/masks.rs#L431), [`ui/dr-ui/src/develop/masks.rs:492`](../../ui/dr-ui/src/develop/masks.rs#L492), [`ui/dr-ui/src/develop/masks.rs:511`](../../ui/dr-ui/src/develop/masks.rs#L511), [`ui/dr-ui/src/develop/masks.rs:546`](../../ui/dr-ui/src/develop/masks.rs#L546), [`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:338`](../../ui/dr-ui/ui/masks.slint#L338), [`ui/dr-ui/ui/masks.slint:375`](../../ui/dr-ui/ui/masks.slint#L375), [`ui/dr-ui/ui/masks.slint:417`](../../ui/dr-ui/ui/masks.slint#L417), [`ui/dr-ui/ui/masks.slint:463`](../../ui/dr-ui/ui/masks.slint#L463), [`ui/dr-ui/ui/masks.slint:791`](../../ui/dr-ui/ui/masks.slint#L791), [`ui/dr-ui/ui/masks.slint:876`](../../ui/dr-ui/ui/masks.slint#L876) | -| 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:594`](../../ui/dr-ui/src/develop/masks.rs#L594), [`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:1955`](../../ui/dr-ui/ui/app.slint#L1955), [`ui/dr-ui/ui/app.slint:750`](../../ui/dr-ui/ui/app.slint#L750), [`ui/dr-ui/ui/masks.slint:1147`](../../ui/dr-ui/ui/masks.slint#L1147), [`ui/dr-ui/ui/masks.slint:474`](../../ui/dr-ui/ui/masks.slint#L474), [`ui/dr-ui/ui/masks.slint:795`](../../ui/dr-ui/ui/masks.slint#L795), [`ui/dr-ui/ui/masks.slint:869`](../../ui/dr-ui/ui/masks.slint#L869), [`ui/dr-ui/ui/masks.slint:885`](../../ui/dr-ui/ui/masks.slint#L885) | +| 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:431`](../../ui/dr-ui/src/develop/masks.rs#L431), [`ui/dr-ui/src/develop/masks.rs:492`](../../ui/dr-ui/src/develop/masks.rs#L492), [`ui/dr-ui/src/develop/masks.rs:511`](../../ui/dr-ui/src/develop/masks.rs#L511), [`ui/dr-ui/src/develop/masks.rs:546`](../../ui/dr-ui/src/develop/masks.rs#L546), [`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:338`](../../ui/dr-ui/ui/masks.slint#L338), [`ui/dr-ui/ui/masks.slint:375`](../../ui/dr-ui/ui/masks.slint#L375), [`ui/dr-ui/ui/masks.slint:417`](../../ui/dr-ui/ui/masks.slint#L417), [`ui/dr-ui/ui/masks.slint:463`](../../ui/dr-ui/ui/masks.slint#L463), [`ui/dr-ui/ui/masks.slint:791`](../../ui/dr-ui/ui/masks.slint#L791), [`ui/dr-ui/ui/masks.slint:876`](../../ui/dr-ui/ui/masks.slint#L876) | +| 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:594`](../../ui/dr-ui/src/develop/masks.rs#L594), [`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:1970`](../../ui/dr-ui/ui/app.slint#L1970), [`ui/dr-ui/ui/app.slint:750`](../../ui/dr-ui/ui/app.slint#L750), [`ui/dr-ui/ui/masks.slint:1147`](../../ui/dr-ui/ui/masks.slint#L1147), [`ui/dr-ui/ui/masks.slint:474`](../../ui/dr-ui/ui/masks.slint#L474), [`ui/dr-ui/ui/masks.slint:795`](../../ui/dr-ui/ui/masks.slint#L795), [`ui/dr-ui/ui/masks.slint:869`](../../ui/dr-ui/ui/masks.slint#L869), [`ui/dr-ui/ui/masks.slint:885`](../../ui/dr-ui/ui/masks.slint#L885) | | 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:1748`](../../core/dr-pipeline/src/operation.rs#L1748), [`core/dr-pipeline/src/operation.rs:588`](../../core/dr-pipeline/src/operation.rs#L588), [`core/dr-pipeline/src/operation.rs:863`](../../core/dr-pipeline/src/operation.rs#L863), [`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:1112`](../../ui/dr-ui/ui/masks.slint#L1112), [`ui/dr-ui/ui/masks.slint:184`](../../ui/dr-ui/ui/masks.slint#L184), [`ui/dr-ui/ui/masks.slint:293`](../../ui/dr-ui/ui/masks.slint#L293), [`ui/dr-ui/ui/masks.slint:538`](../../ui/dr-ui/ui/masks.slint#L538), [`ui/dr-ui/ui/masks.slint:70`](../../ui/dr-ui/ui/masks.slint#L70), [`ui/dr-ui/ui/masks.slint:803`](../../ui/dr-ui/ui/masks.slint#L803), [`ui/dr-ui/ui/masks.slint:871`](../../ui/dr-ui/ui/masks.slint#L871), [`ui/dr-ui/ui/masks.slint:959`](../../ui/dr-ui/ui/masks.slint#L959) | | FR-DEV-2 | [`core/dr-pipeline/src/operation.rs:403`](../../core/dr-pipeline/src/operation.rs#L403) | -| FR-DEV-3 | [`core/dr-gpu/src/adjust.rs:2443`](../../core/dr-gpu/src/adjust.rs#L2443), [`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:177`](../../core/dr-pipeline/src/framing.rs#L177), [`core/dr-pipeline/src/framing.rs:234`](../../core/dr-pipeline/src/framing.rs#L234), [`core/dr-pipeline/src/framing.rs:314`](../../core/dr-pipeline/src/framing.rs#L314), [`core/dr-pipeline/src/framing.rs:498`](../../core/dr-pipeline/src/framing.rs#L498), [`core/dr-pipeline/src/framing.rs:753`](../../core/dr-pipeline/src/framing.rs#L753), [`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:751`](../../core/dr-pipeline/src/preset.rs#L751), [`core/dr-pipeline/src/sidecar.rs:1400`](../../core/dr-pipeline/src/sidecar.rs#L1400), [`core/dr-pipeline/src/sidecar.rs:192`](../../core/dr-pipeline/src/sidecar.rs#L192), [`core/dr-pipeline/src/sidecar.rs:2232`](../../core/dr-pipeline/src/sidecar.rs#L2232), [`core/dr-pipeline/src/sidecar.rs:2312`](../../core/dr-pipeline/src/sidecar.rs#L2312), [`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:610`](../../ui/dr-ui/src/develop/framing.rs#L610), [`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:262`](../../ui/dr-ui/src/develop/masks.rs#L262), [`ui/dr-ui/src/develop/masks.rs:360`](../../ui/dr-ui/src/develop/masks.rs#L360), [`ui/dr-ui/src/develop/masks.rs:742`](../../ui/dr-ui/src/develop/masks.rs#L742), [`ui/dr-ui/src/develop/masks.rs:772`](../../ui/dr-ui/src/develop/masks.rs#L772), [`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:2223`](../../ui/dr-ui/src/lib.rs#L2223), [`ui/dr-ui/src/lib.rs:436`](../../ui/dr-ui/src/lib.rs#L436), [`ui/dr-ui/src/lib.rs:465`](../../ui/dr-ui/src/lib.rs#L465), [`ui/dr-ui/src/lib.rs:571`](../../ui/dr-ui/src/lib.rs#L571), [`ui/dr-ui/src/lib.rs:595`](../../ui/dr-ui/src/lib.rs#L595), [`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:126`](../../ui/dr-ui/ui/adjust.slint#L126), [`ui/dr-ui/ui/adjust.slint:1454`](../../ui/dr-ui/ui/adjust.slint#L1454), [`ui/dr-ui/ui/adjust.slint:171`](../../ui/dr-ui/ui/adjust.slint#L171), [`ui/dr-ui/ui/adjust.slint:46`](../../ui/dr-ui/ui/adjust.slint#L46), [`ui/dr-ui/ui/adjust.slint:624`](../../ui/dr-ui/ui/adjust.slint#L624), [`ui/dr-ui/ui/adjust.slint:650`](../../ui/dr-ui/ui/adjust.slint#L650), [`ui/dr-ui/ui/adjust.slint:669`](../../ui/dr-ui/ui/adjust.slint#L669), [`ui/dr-ui/ui/adjust.slint:806`](../../ui/dr-ui/ui/adjust.slint#L806), [`ui/dr-ui/ui/adjust.slint:905`](../../ui/dr-ui/ui/adjust.slint#L905), [`ui/dr-ui/ui/adjust.slint:977`](../../ui/dr-ui/ui/adjust.slint#L977), [`ui/dr-ui/ui/app.slint:2020`](../../ui/dr-ui/ui/app.slint#L2020), [`ui/dr-ui/ui/app.slint:206`](../../ui/dr-ui/ui/app.slint#L206), [`ui/dr-ui/ui/app.slint:2082`](../../ui/dr-ui/ui/app.slint#L2082), [`ui/dr-ui/ui/develop.slint:261`](../../ui/dr-ui/ui/develop.slint#L261), [`ui/dr-ui/ui/masks.slint:1237`](../../ui/dr-ui/ui/masks.slint#L1237), [`ui/dr-ui/ui/masks.slint:774`](../../ui/dr-ui/ui/masks.slint#L774), [`ui/dr-ui/ui/masks.slint:833`](../../ui/dr-ui/ui/masks.slint#L833) | -| 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:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:902`](../../ui/dr-ui/src/lib.rs#L902), [`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:2329`](../../ui/dr-ui/ui/app.slint#L2329) | -| FR-DEV-3b | [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/framing.rs:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:2552`](../../ui/dr-ui/ui/app.slint#L2552) | +| FR-DEV-3 | [`core/dr-gpu/src/adjust.rs:2443`](../../core/dr-gpu/src/adjust.rs#L2443), [`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:177`](../../core/dr-pipeline/src/framing.rs#L177), [`core/dr-pipeline/src/framing.rs:234`](../../core/dr-pipeline/src/framing.rs#L234), [`core/dr-pipeline/src/framing.rs:314`](../../core/dr-pipeline/src/framing.rs#L314), [`core/dr-pipeline/src/framing.rs:498`](../../core/dr-pipeline/src/framing.rs#L498), [`core/dr-pipeline/src/framing.rs:753`](../../core/dr-pipeline/src/framing.rs#L753), [`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:751`](../../core/dr-pipeline/src/preset.rs#L751), [`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:2265`](../../core/dr-pipeline/src/sidecar.rs#L2265), [`core/dr-pipeline/src/sidecar.rs:2345`](../../core/dr-pipeline/src/sidecar.rs#L2345), [`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:610`](../../ui/dr-ui/src/develop/framing.rs#L610), [`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:262`](../../ui/dr-ui/src/develop/masks.rs#L262), [`ui/dr-ui/src/develop/masks.rs:360`](../../ui/dr-ui/src/develop/masks.rs#L360), [`ui/dr-ui/src/develop/masks.rs:742`](../../ui/dr-ui/src/develop/masks.rs#L742), [`ui/dr-ui/src/develop/masks.rs:772`](../../ui/dr-ui/src/develop/masks.rs#L772), [`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:2223`](../../ui/dr-ui/src/lib.rs#L2223), [`ui/dr-ui/src/lib.rs:436`](../../ui/dr-ui/src/lib.rs#L436), [`ui/dr-ui/src/lib.rs:465`](../../ui/dr-ui/src/lib.rs#L465), [`ui/dr-ui/src/lib.rs:571`](../../ui/dr-ui/src/lib.rs#L571), [`ui/dr-ui/src/lib.rs:595`](../../ui/dr-ui/src/lib.rs#L595), [`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:126`](../../ui/dr-ui/ui/adjust.slint#L126), [`ui/dr-ui/ui/adjust.slint:1454`](../../ui/dr-ui/ui/adjust.slint#L1454), [`ui/dr-ui/ui/adjust.slint:171`](../../ui/dr-ui/ui/adjust.slint#L171), [`ui/dr-ui/ui/adjust.slint:46`](../../ui/dr-ui/ui/adjust.slint#L46), [`ui/dr-ui/ui/adjust.slint:624`](../../ui/dr-ui/ui/adjust.slint#L624), [`ui/dr-ui/ui/adjust.slint:650`](../../ui/dr-ui/ui/adjust.slint#L650), [`ui/dr-ui/ui/adjust.slint:669`](../../ui/dr-ui/ui/adjust.slint#L669), [`ui/dr-ui/ui/adjust.slint:806`](../../ui/dr-ui/ui/adjust.slint#L806), [`ui/dr-ui/ui/adjust.slint:905`](../../ui/dr-ui/ui/adjust.slint#L905), [`ui/dr-ui/ui/adjust.slint:977`](../../ui/dr-ui/ui/adjust.slint#L977), [`ui/dr-ui/ui/app.slint:2035`](../../ui/dr-ui/ui/app.slint#L2035), [`ui/dr-ui/ui/app.slint:206`](../../ui/dr-ui/ui/app.slint#L206), [`ui/dr-ui/ui/app.slint:2097`](../../ui/dr-ui/ui/app.slint#L2097), [`ui/dr-ui/ui/develop.slint:295`](../../ui/dr-ui/ui/develop.slint#L295), [`ui/dr-ui/ui/masks.slint:1237`](../../ui/dr-ui/ui/masks.slint#L1237), [`ui/dr-ui/ui/masks.slint:774`](../../ui/dr-ui/ui/masks.slint#L774), [`ui/dr-ui/ui/masks.slint:833`](../../ui/dr-ui/ui/masks.slint#L833) | +| 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:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:902`](../../ui/dr-ui/src/lib.rs#L902), [`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:2344`](../../ui/dr-ui/ui/app.slint#L2344) | +| FR-DEV-3b | [`core/dr-pipeline/src/descriptor.rs:276`](../../core/dr-pipeline/src/descriptor.rs#L276), [`core/dr-pipeline/src/framing.rs:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:2592`](../../ui/dr-ui/ui/app.slint#L2592) | | 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:751`](../../core/dr-pipeline/src/preset.rs#L751), [`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:314`](../../core/dr-pipeline/src/framing.rs#L314), [`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:1985`](../../core/dr-pipeline/src/operation.rs#L1985), [`core/dr-pipeline/src/operation.rs:2066`](../../core/dr-pipeline/src/operation.rs#L2066), [`core/dr-pipeline/src/operation.rs:2091`](../../core/dr-pipeline/src/operation.rs#L2091), [`core/dr-pipeline/src/operation.rs:2106`](../../core/dr-pipeline/src/operation.rs#L2106), [`core/dr-pipeline/src/operation.rs:2130`](../../core/dr-pipeline/src/operation.rs#L2130), [`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:1313`](../../core/dr-pipeline/src/operation.rs#L1313), [`core/dr-pipeline/src/operation.rs:1341`](../../core/dr-pipeline/src/operation.rs#L1341), [`core/dr-pipeline/src/operation.rs:1387`](../../core/dr-pipeline/src/operation.rs#L1387), [`core/dr-pipeline/src/operation.rs:1985`](../../core/dr-pipeline/src/operation.rs#L1985), [`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:1055`](../../core/dr-pipeline/src/sidecar.rs#L1055), [`core/dr-pipeline/src/sidecar.rs:130`](../../core/dr-pipeline/src/sidecar.rs#L130), [`core/dr-pipeline/src/sidecar.rs:203`](../../core/dr-pipeline/src/sidecar.rs#L203), [`core/dr-pipeline/src/sidecar.rs:2681`](../../core/dr-pipeline/src/sidecar.rs#L2681), [`core/dr-pipeline/src/sidecar.rs:2757`](../../core/dr-pipeline/src/sidecar.rs#L2757), [`core/dr-pipeline/src/sidecar.rs:576`](../../core/dr-pipeline/src/sidecar.rs#L576), [`core/dr-pipeline/src/sidecar.rs:876`](../../core/dr-pipeline/src/sidecar.rs#L876), [`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:828`](../../ui/dr-ui/src/lib.rs#L828), [`ui/dr-ui/src/lib.rs:893`](../../ui/dr-ui/src/lib.rs#L893), [`ui/dr-ui/src/library/sidecar.rs:317`](../../ui/dr-ui/src/library/sidecar.rs#L317), [`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:1008`](../../ui/dr-ui/ui/adjust.slint#L1008), [`ui/dr-ui/ui/adjust.slint:1226`](../../ui/dr-ui/ui/adjust.slint#L1226), [`ui/dr-ui/ui/adjust.slint:998`](../../ui/dr-ui/ui/adjust.slint#L998) | +| 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:1313`](../../core/dr-pipeline/src/operation.rs#L1313), [`core/dr-pipeline/src/operation.rs:1341`](../../core/dr-pipeline/src/operation.rs#L1341), [`core/dr-pipeline/src/operation.rs:1387`](../../core/dr-pipeline/src/operation.rs#L1387), [`core/dr-pipeline/src/operation.rs:1985`](../../core/dr-pipeline/src/operation.rs#L1985), [`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:2714`](../../core/dr-pipeline/src/sidecar.rs#L2714), [`core/dr-pipeline/src/sidecar.rs:2790`](../../core/dr-pipeline/src/sidecar.rs#L2790), [`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:828`](../../ui/dr-ui/src/lib.rs#L828), [`ui/dr-ui/src/lib.rs:893`](../../ui/dr-ui/src/lib.rs#L893), [`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:1008`](../../ui/dr-ui/ui/adjust.slint#L1008), [`ui/dr-ui/ui/adjust.slint:1226`](../../ui/dr-ui/ui/adjust.slint#L1226), [`ui/dr-ui/ui/adjust.slint:998`](../../ui/dr-ui/ui/adjust.slint#L998) | | 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:1067`](../../core/dr-pipeline/src/framing.rs#L1067), [`core/dr-pipeline/src/framing.rs:328`](../../core/dr-pipeline/src/framing.rs#L328), [`core/dr-pipeline/src/framing.rs:498`](../../core/dr-pipeline/src/framing.rs#L498), [`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:279`](../../ui/dr-ui/src/develop/masks.rs#L279), [`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:1045`](../../core/dr-pipeline/src/sidecar.rs#L1045), [`core/dr-pipeline/src/sidecar.rs:144`](../../core/dr-pipeline/src/sidecar.rs#L144), [`core/dr-pipeline/src/sidecar.rs:2472`](../../core/dr-pipeline/src/sidecar.rs#L2472), [`core/dr-pipeline/src/sidecar.rs:2508`](../../core/dr-pipeline/src/sidecar.rs#L2508), [`core/dr-pipeline/src/sidecar.rs:2520`](../../core/dr-pipeline/src/sidecar.rs#L2520), [`core/dr-pipeline/src/sidecar.rs:303`](../../core/dr-pipeline/src/sidecar.rs#L303), [`core/dr-pipeline/src/sidecar.rs:694`](../../core/dr-pipeline/src/sidecar.rs#L694), [`core/dr-pipeline/src/sidecar.rs:710`](../../core/dr-pipeline/src/sidecar.rs#L710), [`core/dr-pipeline/src/sidecar.rs:857`](../../core/dr-pipeline/src/sidecar.rs#L857), [`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:836`](../../ui/dr-ui/src/develop/framing.rs#L836), [`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:278`](../../ui/dr-ui/src/labels.rs#L278), [`ui/dr-ui/src/labels.rs:31`](../../ui/dr-ui/src/labels.rs#L31), [`ui/dr-ui/src/lib.rs:2149`](../../ui/dr-ui/src/lib.rs#L2149), [`ui/dr-ui/src/lib.rs:2154`](../../ui/dr-ui/src/lib.rs#L2154), [`ui/dr-ui/src/lib.rs:2186`](../../ui/dr-ui/src/lib.rs#L2186), [`ui/dr-ui/src/lib.rs:2195`](../../ui/dr-ui/src/lib.rs#L2195), [`ui/dr-ui/src/lib.rs:2212`](../../ui/dr-ui/src/lib.rs#L2212), [`ui/dr-ui/src/library/sidecar.rs:343`](../../ui/dr-ui/src/library/sidecar.rs#L343), [`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:191`](../../ui/dr-ui/ui/history.slint#L191), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:218`](../../ui/dr-ui/ui/history.slint#L218), [`ui/dr-ui/ui/history.slint:303`](../../ui/dr-ui/ui/history.slint#L303), [`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:1265`](../../ui/dr-ui/src/lib.rs#L1265), [`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:353`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L353), [`ui/dr-ui/src/library_ui/window.rs:551`](../../ui/dr-ui/src/library_ui/window.rs#L551), [`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:869`](../../ui/dr-ui/ui/adjust.slint#L869), [`ui/dr-ui/ui/adjust.slint:894`](../../ui/dr-ui/ui/adjust.slint#L894), [`ui/dr-ui/ui/app.slint:1351`](../../ui/dr-ui/ui/app.slint#L1351), [`ui/dr-ui/ui/app.slint:2243`](../../ui/dr-ui/ui/app.slint#L2243), [`ui/dr-ui/ui/app.slint:2991`](../../ui/dr-ui/ui/app.slint#L2991), [`ui/dr-ui/ui/app.slint:3044`](../../ui/dr-ui/ui/app.slint#L3044), [`ui/dr-ui/ui/app.slint:484`](../../ui/dr-ui/ui/app.slint#L484), [`ui/dr-ui/ui/app.slint:495`](../../ui/dr-ui/ui/app.slint#L495), [`ui/dr-ui/ui/app.slint:649`](../../ui/dr-ui/ui/app.slint#L649), [`ui/dr-ui/ui/develop.slint:165`](../../ui/dr-ui/ui/develop.slint#L165), [`ui/dr-ui/ui/library.slint:1872`](../../ui/dr-ui/ui/library.slint#L1872), [`ui/dr-ui/ui/library.slint:1878`](../../ui/dr-ui/ui/library.slint#L1878), [`ui/dr-ui/ui/library.slint:3024`](../../ui/dr-ui/ui/library.slint#L3024), [`ui/dr-ui/ui/library.slint:4737`](../../ui/dr-ui/ui/library.slint#L4737), [`ui/dr-ui/ui/library.slint:4755`](../../ui/dr-ui/ui/library.slint#L4755), [`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:638`](../../ui/dr-ui/ui/settings.slint#L638) | -| 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:2195`](../../ui/dr-ui/src/lib.rs#L2195), [`ui/dr-ui/src/lib.rs:2272`](../../ui/dr-ui/src/lib.rs#L2272), [`ui/dr-ui/src/lib.rs:2286`](../../ui/dr-ui/src/lib.rs#L2286), [`ui/dr-ui/src/lib.rs:428`](../../ui/dr-ui/src/lib.rs#L428), [`ui/dr-ui/ui/app.slint:188`](../../ui/dr-ui/ui/app.slint#L188), [`ui/dr-ui/ui/app.slint:2142`](../../ui/dr-ui/ui/app.slint#L2142), [`ui/dr-ui/ui/app.slint:2165`](../../ui/dr-ui/ui/app.slint#L2165), [`ui/dr-ui/ui/app.slint:2552`](../../ui/dr-ui/ui/app.slint#L2552), [`ui/dr-ui/ui/history.slint:102`](../../ui/dr-ui/ui/history.slint#L102), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:226`](../../ui/dr-ui/ui/history.slint#L226), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53), [`ui/dr-ui/ui/widgets.slint:71`](../../ui/dr-ui/ui/widgets.slint#L71) | -| 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:1071`](../../core/dr-pipeline/src/sidecar.rs#L1071), [`core/dr-pipeline/src/sidecar.rs:1125`](../../core/dr-pipeline/src/sidecar.rs#L1125), [`core/dr-pipeline/src/sidecar.rs:1155`](../../core/dr-pipeline/src/sidecar.rs#L1155), [`core/dr-pipeline/src/sidecar.rs:219`](../../core/dr-pipeline/src/sidecar.rs#L219), [`core/dr-pipeline/src/sidecar.rs:395`](../../core/dr-pipeline/src/sidecar.rs#L395), [`core/dr-pipeline/src/sidecar.rs:888`](../../core/dr-pipeline/src/sidecar.rs#L888), [`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:2230`](../../ui/dr-ui/src/lib.rs#L2230), [`ui/dr-ui/src/lib.rs:470`](../../ui/dr-ui/src/lib.rs#L470), [`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:1996`](../../ui/dr-ui/ui/app.slint#L1996), [`ui/dr-ui/ui/app.slint:2208`](../../ui/dr-ui/ui/app.slint#L2208), [`ui/dr-ui/ui/app.slint:2897`](../../ui/dr-ui/ui/app.slint#L2897), [`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-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:2505`](../../core/dr-pipeline/src/sidecar.rs#L2505), [`core/dr-pipeline/src/sidecar.rs:2541`](../../core/dr-pipeline/src/sidecar.rs#L2541), [`core/dr-pipeline/src/sidecar.rs:2553`](../../core/dr-pipeline/src/sidecar.rs#L2553), [`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:836`](../../ui/dr-ui/src/develop/framing.rs#L836), [`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:278`](../../ui/dr-ui/src/labels.rs#L278), [`ui/dr-ui/src/labels.rs:31`](../../ui/dr-ui/src/labels.rs#L31), [`ui/dr-ui/src/lib.rs:2149`](../../ui/dr-ui/src/lib.rs#L2149), [`ui/dr-ui/src/lib.rs:2154`](../../ui/dr-ui/src/lib.rs#L2154), [`ui/dr-ui/src/lib.rs:2186`](../../ui/dr-ui/src/lib.rs#L2186), [`ui/dr-ui/src/lib.rs:2195`](../../ui/dr-ui/src/lib.rs#L2195), [`ui/dr-ui/src/lib.rs:2212`](../../ui/dr-ui/src/lib.rs#L2212), [`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:191`](../../ui/dr-ui/ui/history.slint#L191), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:218`](../../ui/dr-ui/ui/history.slint#L218), [`ui/dr-ui/ui/history.slint:303`](../../ui/dr-ui/ui/history.slint#L303), [`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:1265`](../../ui/dr-ui/src/lib.rs#L1265), [`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:869`](../../ui/dr-ui/ui/adjust.slint#L869), [`ui/dr-ui/ui/adjust.slint:894`](../../ui/dr-ui/ui/adjust.slint#L894), [`ui/dr-ui/ui/app.slint:1351`](../../ui/dr-ui/ui/app.slint#L1351), [`ui/dr-ui/ui/app.slint:2258`](../../ui/dr-ui/ui/app.slint#L2258), [`ui/dr-ui/ui/app.slint:3031`](../../ui/dr-ui/ui/app.slint#L3031), [`ui/dr-ui/ui/app.slint:3084`](../../ui/dr-ui/ui/app.slint#L3084), [`ui/dr-ui/ui/app.slint:484`](../../ui/dr-ui/ui/app.slint#L484), [`ui/dr-ui/ui/app.slint:495`](../../ui/dr-ui/ui/app.slint#L495), [`ui/dr-ui/ui/app.slint:649`](../../ui/dr-ui/ui/app.slint#L649), [`ui/dr-ui/ui/develop.slint:199`](../../ui/dr-ui/ui/develop.slint#L199), [`ui/dr-ui/ui/library.slint:1911`](../../ui/dr-ui/ui/library.slint#L1911), [`ui/dr-ui/ui/library.slint:1917`](../../ui/dr-ui/ui/library.slint#L1917), [`ui/dr-ui/ui/library.slint:3096`](../../ui/dr-ui/ui/library.slint#L3096), [`ui/dr-ui/ui/library.slint:4864`](../../ui/dr-ui/ui/library.slint#L4864), [`ui/dr-ui/ui/library.slint:4882`](../../ui/dr-ui/ui/library.slint#L4882), [`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:638`](../../ui/dr-ui/ui/settings.slint#L638) | +| 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:2195`](../../ui/dr-ui/src/lib.rs#L2195), [`ui/dr-ui/src/lib.rs:2272`](../../ui/dr-ui/src/lib.rs#L2272), [`ui/dr-ui/src/lib.rs:2286`](../../ui/dr-ui/src/lib.rs#L2286), [`ui/dr-ui/src/lib.rs:428`](../../ui/dr-ui/src/lib.rs#L428), [`ui/dr-ui/ui/app.slint:188`](../../ui/dr-ui/ui/app.slint#L188), [`ui/dr-ui/ui/app.slint:2157`](../../ui/dr-ui/ui/app.slint#L2157), [`ui/dr-ui/ui/app.slint:2180`](../../ui/dr-ui/ui/app.slint#L2180), [`ui/dr-ui/ui/app.slint:2592`](../../ui/dr-ui/ui/app.slint#L2592), [`ui/dr-ui/ui/history.slint:102`](../../ui/dr-ui/ui/history.slint#L102), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:226`](../../ui/dr-ui/ui/history.slint#L226), [`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:2230`](../../ui/dr-ui/src/lib.rs#L2230), [`ui/dr-ui/src/lib.rs:470`](../../ui/dr-ui/src/lib.rs#L470), [`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:2011`](../../ui/dr-ui/ui/app.slint#L2011), [`ui/dr-ui/ui/app.slint:2223`](../../ui/dr-ui/ui/app.slint#L2223), [`ui/dr-ui/ui/app.slint:2937`](../../ui/dr-ui/ui/app.slint#L2937), [`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:2366`](../../core/dr-gpu/src/adjust.rs#L2366), [`core/dr-gpu/src/adjust.rs:2443`](../../core/dr-gpu/src/adjust.rs#L2443), [`core/dr-gpu/src/adjust.rs:2528`](../../core/dr-gpu/src/adjust.rs#L2528), [`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:560`](../../ui/dr-ui/src/develop/framing.rs#L560), [`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:1049`](../../ui/dr-ui/src/lib.rs#L1049), [`ui/dr-ui/src/lib.rs:105`](../../ui/dr-ui/src/lib.rs#L105), [`ui/dr-ui/src/lib.rs:1108`](../../ui/dr-ui/src/lib.rs#L1108) | | 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:2295`](../../ui/dr-ui/src/lib.rs#L2295), [`ui/dr-ui/src/lib.rs:2474`](../../ui/dr-ui/src/lib.rs#L2474), [`ui/dr-ui/src/refine.rs:1`](../../ui/dr-ui/src/refine.rs#L1), [`ui/dr-ui/ui/app.slint:102`](../../ui/dr-ui/ui/app.slint#L102), [`ui/dr-ui/ui/app.slint:1653`](../../ui/dr-ui/ui/app.slint#L1653), [`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:2295`](../../ui/dr-ui/src/lib.rs#L2295), [`ui/dr-ui/src/lib.rs:2474`](../../ui/dr-ui/src/lib.rs#L2474), [`ui/dr-ui/src/refine.rs:1`](../../ui/dr-ui/src/refine.rs#L1), [`ui/dr-ui/ui/app.slint:102`](../../ui/dr-ui/ui/app.slint#L102), [`ui/dr-ui/ui/app.slint:1668`](../../ui/dr-ui/ui/app.slint#L1668), [`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:2171`](../../ui/dr-ui/src/lib.rs#L2171), [`ui/dr-ui/src/lib.rs:2946`](../../ui/dr-ui/src/lib.rs#L2946) | | 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:2327`](../../ui/dr-ui/src/lib.rs#L2327), [`ui/dr-ui/src/lib.rs:447`](../../ui/dr-ui/src/lib.rs#L447), [`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:1287`](../../ui/dr-ui/src/lib.rs#L1287), [`ui/dr-ui/src/lib.rs:2171`](../../ui/dr-ui/src/lib.rs#L2171), [`ui/dr-ui/src/lib.rs:2923`](../../ui/dr-ui/src/lib.rs#L2923), [`ui/dr-ui/src/lib.rs:2946`](../../ui/dr-ui/src/lib.rs#L2946), [`ui/dr-ui/ui/app.slint:120`](../../ui/dr-ui/ui/app.slint#L120), [`ui/dr-ui/ui/app.slint:1639`](../../ui/dr-ui/ui/app.slint#L1639), [`ui/dr-ui/ui/settings.slint:166`](../../ui/dr-ui/ui/settings.slint#L166), [`ui/dr-ui/ui/settings.slint:794`](../../ui/dr-ui/ui/settings.slint#L794) | +| 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:1287`](../../ui/dr-ui/src/lib.rs#L1287), [`ui/dr-ui/src/lib.rs:2171`](../../ui/dr-ui/src/lib.rs#L2171), [`ui/dr-ui/src/lib.rs:2923`](../../ui/dr-ui/src/lib.rs#L2923), [`ui/dr-ui/src/lib.rs:2946`](../../ui/dr-ui/src/lib.rs#L2946), [`ui/dr-ui/ui/app.slint:120`](../../ui/dr-ui/ui/app.slint#L120), [`ui/dr-ui/ui/app.slint:1654`](../../ui/dr-ui/ui/app.slint#L1654), [`ui/dr-ui/ui/settings.slint:166`](../../ui/dr-ui/ui/settings.slint#L166), [`ui/dr-ui/ui/settings.slint:794`](../../ui/dr-ui/ui/settings.slint#L794) | | 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:2676`](../../core/dr-gpu/src/adjust.rs#L2676), [`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:629`](../../ui/dr-ui/src/lib.rs#L629), [`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:282`](../../ui/dr-ui/src/lib.rs#L282), [`ui/dr-ui/src/lib.rs:629`](../../ui/dr-ui/src/lib.rs#L629), [`ui/dr-ui/src/lib.rs:675`](../../ui/dr-ui/src/lib.rs#L675), [`ui/dr-ui/src/lib.rs:703`](../../ui/dr-ui/src/lib.rs#L703), [`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:1361`](../../ui/dr-ui/ui/app.slint#L1361), [`ui/dr-ui/ui/app.slint:2301`](../../ui/dr-ui/ui/app.slint#L2301), [`ui/dr-ui/ui/app.slint:3016`](../../ui/dr-ui/ui/app.slint#L3016), [`ui/dr-ui/ui/app.slint:642`](../../ui/dr-ui/ui/app.slint#L642), [`ui/dr-ui/ui/app.slint:833`](../../ui/dr-ui/ui/app.slint#L833), [`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:1881`](../../ui/dr-ui/ui/library.slint#L1881), [`ui/dr-ui/ui/library.slint:1889`](../../ui/dr-ui/ui/library.slint#L1889), [`ui/dr-ui/ui/library.slint:3005`](../../ui/dr-ui/ui/library.slint#L3005), [`ui/dr-ui/ui/library.slint:4809`](../../ui/dr-ui/ui/library.slint#L4809) | +| 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:282`](../../ui/dr-ui/src/lib.rs#L282), [`ui/dr-ui/src/lib.rs:629`](../../ui/dr-ui/src/lib.rs#L629), [`ui/dr-ui/src/lib.rs:675`](../../ui/dr-ui/src/lib.rs#L675), [`ui/dr-ui/src/lib.rs:703`](../../ui/dr-ui/src/lib.rs#L703), [`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:1361`](../../ui/dr-ui/ui/app.slint#L1361), [`ui/dr-ui/ui/app.slint:2316`](../../ui/dr-ui/ui/app.slint#L2316), [`ui/dr-ui/ui/app.slint:3056`](../../ui/dr-ui/ui/app.slint#L3056), [`ui/dr-ui/ui/app.slint:642`](../../ui/dr-ui/ui/app.slint#L642), [`ui/dr-ui/ui/app.slint:833`](../../ui/dr-ui/ui/app.slint#L833), [`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:1920`](../../ui/dr-ui/ui/library.slint#L1920), [`ui/dr-ui/ui/library.slint:1928`](../../ui/dr-ui/ui/library.slint#L1928), [`ui/dr-ui/ui/library.slint:3077`](../../ui/dr-ui/ui/library.slint#L3077), [`ui/dr-ui/ui/library.slint:4936`](../../ui/dr-ui/ui/library.slint#L4936) | | 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:282`](../../ui/dr-ui/src/lib.rs#L282), [`ui/dr-ui/src/lib.rs:306`](../../ui/dr-ui/src/lib.rs#L306), [`ui/dr-ui/src/lib.rs:661`](../../ui/dr-ui/src/lib.rs#L661), [`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:629`](../../ui/dr-ui/src/lib.rs#L629), [`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:1458`](../../ui/dr-ui/src/lib.rs#L1458), [`ui/dr-ui/ui/settings.slint:754`](../../ui/dr-ui/ui/settings.slint#L754) | -| 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:1842`](../../ui/dr-ui/src/lib.rs#L1842), [`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:1366`](../../ui/dr-ui/ui/app.slint#L1366), [`ui/dr-ui/ui/app.slint:547`](../../ui/dr-ui/ui/app.slint#L547), [`ui/dr-ui/ui/library.slint:1894`](../../ui/dr-ui/ui/library.slint#L1894), [`ui/dr-ui/ui/library.slint:4767`](../../ui/dr-ui/ui/library.slint#L4767), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) | +| 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:1842`](../../ui/dr-ui/src/lib.rs#L1842), [`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:1366`](../../ui/dr-ui/ui/app.slint#L1366), [`ui/dr-ui/ui/app.slint:547`](../../ui/dr-ui/ui/app.slint#L547), [`ui/dr-ui/ui/library.slint:1933`](../../ui/dr-ui/ui/library.slint#L1933), [`ui/dr-ui/ui/library.slint:4894`](../../ui/dr-ui/ui/library.slint#L4894), [`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:2183`](../../core/dr-pipeline/src/operation.rs#L2183), [`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:916`](../../core/dr-pipeline/src/operation.rs#L916), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1) | | FR-MRG-3 | [`core/dr-decode/examples/linear_dng.rs:1`](../../core/dr-decode/examples/linear_dng.rs#L1), [`core/dr-decode/src/lib.rs:143`](../../core/dr-decode/src/lib.rs#L143), [`core/dr-decode/src/lib.rs:150`](../../core/dr-decode/src/lib.rs#L150), [`core/dr-decode/src/lib.rs:604`](../../core/dr-decode/src/lib.rs#L604), [`core/dr-decode/src/profile.rs:395`](../../core/dr-decode/src/profile.rs#L395), [`core/dr-export/src/dng.rs:1`](../../core/dr-export/src/dng.rs#L1), [`core/dr-gpu/src/demosaic.rs:254`](../../core/dr-gpu/src/demosaic.rs#L254), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1) | | 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:1033`](../../core/dr-pipeline/src/sidecar.rs#L1033), [`core/dr-pipeline/src/sidecar.rs:113`](../../core/dr-pipeline/src/sidecar.rs#L113), [`core/dr-pipeline/src/sidecar.rs:123`](../../core/dr-pipeline/src/sidecar.rs#L123), [`core/dr-pipeline/src/sidecar.rs:2241`](../../core/dr-pipeline/src/sidecar.rs#L2241), [`core/dr-pipeline/src/sidecar.rs:841`](../../core/dr-pipeline/src/sidecar.rs#L841), [`ui/dr-ui/src/merge.rs:849`](../../ui/dr-ui/src/merge.rs#L849) | +| 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:2274`](../../core/dr-pipeline/src/sidecar.rs#L2274), [`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:547`](../../ui/dr-ui/ui/app.slint#L547), [`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:703`](../../ui/dr-ui/src/lib.rs#L703), [`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:427`](../../ui/dr-ui/src/library/sidecar.rs#L427), [`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:703`](../../ui/dr-ui/src/lib.rs#L703), [`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:458`](../../ui/dr-ui/src/library_ui/grid.rs#L458), [`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:737`](../../ui/dr-ui/ui/library.slint#L737), [`ui/dr-ui/ui/settings.slint:362`](../../ui/dr-ui/ui/settings.slint#L362), [`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:458`](../../ui/dr-ui/src/library_ui/grid.rs#L458), [`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:762`](../../ui/dr-ui/ui/library.slint#L762), [`ui/dr-ui/ui/settings.slint:362`](../../ui/dr-ui/ui/settings.slint#L362), [`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:1594`](../../ui/dr-ui/src/lib.rs#L1594), [`ui/dr-ui/src/lib.rs:2738`](../../ui/dr-ui/src/lib.rs#L2738), [`ui/dr-ui/src/lib.rs:2809`](../../ui/dr-ui/src/lib.rs#L2809), [`ui/dr-ui/src/lib.rs:3027`](../../ui/dr-ui/src/lib.rs#L3027), [`ui/dr-ui/src/lib.rs:3028`](../../ui/dr-ui/src/lib.rs#L3028), [`ui/dr-ui/src/lib.rs:3067`](../../ui/dr-ui/src/lib.rs#L3067), [`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:462`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L462), [`ui/dr-ui/src/library_ui/filter_bar.rs:482`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L482), [`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:1255`](../../ui/dr-ui/ui/app.slint#L1255), [`ui/dr-ui/ui/app.slint:2981`](../../ui/dr-ui/ui/app.slint#L2981), [`ui/dr-ui/ui/app.slint:442`](../../ui/dr-ui/ui/app.slint#L442), [`ui/dr-ui/ui/collections.slint:1037`](../../ui/dr-ui/ui/collections.slint#L1037), [`ui/dr-ui/ui/collections.slint:1048`](../../ui/dr-ui/ui/collections.slint#L1048), [`ui/dr-ui/ui/collections.slint:1127`](../../ui/dr-ui/ui/collections.slint#L1127), [`ui/dr-ui/ui/collections.slint:1228`](../../ui/dr-ui/ui/collections.slint#L1228), [`ui/dr-ui/ui/collections.slint:1236`](../../ui/dr-ui/ui/collections.slint#L1236), [`ui/dr-ui/ui/collections.slint:272`](../../ui/dr-ui/ui/collections.slint#L272), [`ui/dr-ui/ui/collections.slint:424`](../../ui/dr-ui/ui/collections.slint#L424), [`ui/dr-ui/ui/collections.slint:433`](../../ui/dr-ui/ui/collections.slint#L433), [`ui/dr-ui/ui/collections.slint:436`](../../ui/dr-ui/ui/collections.slint#L436), [`ui/dr-ui/ui/collections.slint:482`](../../ui/dr-ui/ui/collections.slint#L482), [`ui/dr-ui/ui/collections.slint:52`](../../ui/dr-ui/ui/collections.slint#L52), [`ui/dr-ui/ui/collections.slint:720`](../../ui/dr-ui/ui/collections.slint#L720), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`ui/dr-ui/ui/collections.slint:91`](../../ui/dr-ui/ui/collections.slint#L91), [`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:583`](../../ui/dr-ui/ui/settings.slint#L583) | +| 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:1594`](../../ui/dr-ui/src/lib.rs#L1594), [`ui/dr-ui/src/lib.rs:2738`](../../ui/dr-ui/src/lib.rs#L2738), [`ui/dr-ui/src/lib.rs:2809`](../../ui/dr-ui/src/lib.rs#L2809), [`ui/dr-ui/src/lib.rs:3027`](../../ui/dr-ui/src/lib.rs#L3027), [`ui/dr-ui/src/lib.rs:3028`](../../ui/dr-ui/src/lib.rs#L3028), [`ui/dr-ui/src/lib.rs:3067`](../../ui/dr-ui/src/lib.rs#L3067), [`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:1255`](../../ui/dr-ui/ui/app.slint#L1255), [`ui/dr-ui/ui/app.slint:3021`](../../ui/dr-ui/ui/app.slint#L3021), [`ui/dr-ui/ui/app.slint:442`](../../ui/dr-ui/ui/app.slint#L442), [`ui/dr-ui/ui/collections.slint:1037`](../../ui/dr-ui/ui/collections.slint#L1037), [`ui/dr-ui/ui/collections.slint:1048`](../../ui/dr-ui/ui/collections.slint#L1048), [`ui/dr-ui/ui/collections.slint:1127`](../../ui/dr-ui/ui/collections.slint#L1127), [`ui/dr-ui/ui/collections.slint:1228`](../../ui/dr-ui/ui/collections.slint#L1228), [`ui/dr-ui/ui/collections.slint:1236`](../../ui/dr-ui/ui/collections.slint#L1236), [`ui/dr-ui/ui/collections.slint:272`](../../ui/dr-ui/ui/collections.slint#L272), [`ui/dr-ui/ui/collections.slint:424`](../../ui/dr-ui/ui/collections.slint#L424), [`ui/dr-ui/ui/collections.slint:433`](../../ui/dr-ui/ui/collections.slint#L433), [`ui/dr-ui/ui/collections.slint:436`](../../ui/dr-ui/ui/collections.slint#L436), [`ui/dr-ui/ui/collections.slint:482`](../../ui/dr-ui/ui/collections.slint#L482), [`ui/dr-ui/ui/collections.slint:52`](../../ui/dr-ui/ui/collections.slint#L52), [`ui/dr-ui/ui/collections.slint:720`](../../ui/dr-ui/ui/collections.slint#L720), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`ui/dr-ui/ui/collections.slint:91`](../../ui/dr-ui/ui/collections.slint#L91), [`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:583`](../../ui/dr-ui/ui/settings.slint#L583) | | 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:531`](../../ui/dr-ui/src/library/sidecar.rs#L531), [`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:272`](../../ui/dr-ui/ui/collections.slint#L272), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`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:272`](../../ui/dr-ui/ui/collections.slint#L272), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`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:362`](../../ui/dr-ui/ui/settings.slint#L362) | | 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:1812`](../../ui/dr-ui/src/lib.rs#L1812), [`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:1812`](../../ui/dr-ui/src/lib.rs#L1812) | -| FR-NC-8 | [`core/dr-catalog/src/rating.rs:204`](../../core/dr-catalog/src/rating.rs#L204), [`core/dr-catalog/src/rating.rs:66`](../../core/dr-catalog/src/rating.rs#L66), [`core/dr-catalog/src/rating.rs:929`](../../core/dr-catalog/src/rating.rs#L929), [`core/dr-catalog/src/schema.rs:327`](../../core/dr-catalog/src/schema.rs#L327), [`core/dr-pipeline/src/sidecar.rs:137`](../../core/dr-pipeline/src/sidecar.rs#L137), [`core/dr-pipeline/src/sidecar.rs:2991`](../../core/dr-pipeline/src/sidecar.rs#L2991), [`core/dr-pipeline/src/sidecar.rs:660`](../../core/dr-pipeline/src/sidecar.rs#L660), [`core/dr-pipeline/src/sidecar.rs:735`](../../core/dr-pipeline/src/sidecar.rs#L735), [`core/dr-pipeline/src/sidecar.rs:96`](../../core/dr-pipeline/src/sidecar.rs#L96), [`ui/dr-ui/src/lib.rs:2708`](../../ui/dr-ui/src/lib.rs#L2708), [`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:573`](../../ui/dr-ui/src/library/sidecar.rs#L573), [`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:204`](../../core/dr-catalog/src/rating.rs#L204), [`core/dr-catalog/src/rating.rs:66`](../../core/dr-catalog/src/rating.rs#L66), [`core/dr-catalog/src/rating.rs:929`](../../core/dr-catalog/src/rating.rs#L929), [`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:192`](../../core/dr-pipeline/src/sidecar.rs#L192), [`core/dr-pipeline/src/sidecar.rs:219`](../../core/dr-pipeline/src/sidecar.rs#L219), [`core/dr-pipeline/src/sidecar.rs:2520`](../../core/dr-pipeline/src/sidecar.rs#L2520), [`core/dr-pipeline/src/sidecar.rs:2757`](../../core/dr-pipeline/src/sidecar.rs#L2757), [`core/dr-pipeline/src/sidecar.rs:2991`](../../core/dr-pipeline/src/sidecar.rs#L2991), [`core/dr-pipeline/src/sidecar.rs:395`](../../core/dr-pipeline/src/sidecar.rs#L395), [`core/dr-pipeline/src/sidecar.rs:493`](../../core/dr-pipeline/src/sidecar.rs#L493), [`core/dr-pipeline/src/sidecar.rs:660`](../../core/dr-pipeline/src/sidecar.rs#L660), [`core/dr-pipeline/src/sidecar.rs:710`](../../core/dr-pipeline/src/sidecar.rs#L710), [`core/dr-pipeline/src/sidecar.rs:735`](../../core/dr-pipeline/src/sidecar.rs#L735), [`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:343`](../../ui/dr-ui/src/library/sidecar.rs#L343), [`ui/dr-ui/src/library/sidecar.rs:427`](../../ui/dr-ui/src/library/sidecar.rs#L427), [`ui/dr-ui/src/library/sidecar.rs:573`](../../ui/dr-ui/src/library/sidecar.rs#L573), [`ui/dr-ui/src/library/sidecar.rs:593`](../../ui/dr-ui/src/library/sidecar.rs#L593), [`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:605`](../../ui/dr-ui/src/library/scan.rs#L605), [`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-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:3056`](../../core/dr-pipeline/src/sidecar.rs#L3056), [`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:2708`](../../ui/dr-ui/src/lib.rs#L2708), [`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:2553`](../../core/dr-pipeline/src/sidecar.rs#L2553), [`core/dr-pipeline/src/sidecar.rs:2790`](../../core/dr-pipeline/src/sidecar.rs#L2790), [`core/dr-pipeline/src/sidecar.rs:3056`](../../core/dr-pipeline/src/sidecar.rs#L3056), [`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:1239`](../../ui/dr-ui/src/lib.rs#L1239), [`ui/dr-ui/src/lib.rs:1621`](../../ui/dr-ui/src/lib.rs#L1621), [`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) | @@ -146,18 +146,18 @@ _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:282`](../../ui/dr-ui/src/lib.rs#L282) | | 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:113`](../../ui/dr-ui/src/lib.rs#L113), [`ui/dr-ui/src/lib.rs:128`](../../ui/dr-ui/src/lib.rs#L128), [`ui/dr-ui/src/lib.rs:150`](../../ui/dr-ui/src/lib.rs#L150), [`ui/dr-ui/src/lib.rs:3218`](../../ui/dr-ui/src/lib.rs#L3218), [`ui/dr-ui/src/lib.rs:3237`](../../ui/dr-ui/src/lib.rs#L3237), [`ui/dr-ui/src/lib.rs:3264`](../../ui/dr-ui/src/lib.rs#L3264), [`ui/dr-ui/src/lib.rs:3315`](../../ui/dr-ui/src/lib.rs#L3315), [`ui/dr-ui/src/lib.rs:3348`](../../ui/dr-ui/src/lib.rs#L3348), [`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:932`](../../ui/dr-ui/ui/adjust.slint#L932), [`ui/dr-ui/ui/app.slint:2672`](../../ui/dr-ui/ui/app.slint#L2672), [`ui/dr-ui/ui/app.slint:621`](../../ui/dr-ui/ui/app.slint#L621), [`ui/dr-ui/ui/app.slint:704`](../../ui/dr-ui/ui/app.slint#L704), [`ui/dr-ui/ui/identity.slint:246`](../../ui/dr-ui/ui/identity.slint#L246), [`ui/dr-ui/ui/library.slint:1355`](../../ui/dr-ui/ui/library.slint#L1355), [`ui/dr-ui/ui/settings.slint:123`](../../ui/dr-ui/ui/settings.slint#L123), [`ui/dr-ui/ui/settings.slint:608`](../../ui/dr-ui/ui/settings.slint#L608), [`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:113`](../../ui/dr-ui/src/lib.rs#L113), [`ui/dr-ui/src/library_ui/filter_bar.rs:333`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L333), [`ui/dr-ui/src/library_ui/window.rs:873`](../../ui/dr-ui/src/library_ui/window.rs#L873), [`ui/dr-ui/ui/app.slint:127`](../../ui/dr-ui/ui/app.slint#L127), [`ui/dr-ui/ui/app.slint:688`](../../ui/dr-ui/ui/app.slint#L688), [`ui/dr-ui/ui/collections.slint:1253`](../../ui/dr-ui/ui/collections.slint#L1253), [`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:1242`](../../ui/dr-ui/ui/library.slint#L1242), [`ui/dr-ui/ui/library.slint:1275`](../../ui/dr-ui/ui/library.slint#L1275), [`ui/dr-ui/ui/library.slint:1576`](../../ui/dr-ui/ui/library.slint#L1576), [`ui/dr-ui/ui/library.slint:1583`](../../ui/dr-ui/ui/library.slint#L1583), [`ui/dr-ui/ui/library.slint:1680`](../../ui/dr-ui/ui/library.slint#L1680), [`ui/dr-ui/ui/library.slint:2972`](../../ui/dr-ui/ui/library.slint#L2972), [`ui/dr-ui/ui/library.slint:4846`](../../ui/dr-ui/ui/library.slint#L4846), [`ui/dr-ui/ui/library.slint:554`](../../ui/dr-ui/ui/library.slint#L554), [`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:360`](../../ui/dr-ui/src/develop/masks.rs#L360), [`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:2082`](../../ui/dr-ui/ui/app.slint#L2082), [`ui/dr-ui/ui/collections.slint:1127`](../../ui/dr-ui/ui/collections.slint#L1127), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:75`](../../ui/dr-ui/ui/collections.slint#L75), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`ui/dr-ui/ui/masks.slint:1237`](../../ui/dr-ui/ui/masks.slint#L1237), [`ui/dr-ui/ui/widgets.slint:71`](../../ui/dr-ui/ui/widgets.slint#L71) | -| FR-UI-4 | [`tools/traceability/src/gestures.rs:1`](../../tools/traceability/src/gestures.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:560`](../../ui/dr-ui/src/develop/framing.rs#L560), [`ui/dr-ui/src/develop/framing.rs:585`](../../ui/dr-ui/src/develop/framing.rs#L585), [`ui/dr-ui/src/develop/framing.rs:596`](../../ui/dr-ui/src/develop/framing.rs#L596), [`ui/dr-ui/src/develop/framing.rs:610`](../../ui/dr-ui/src/develop/framing.rs#L610), [`ui/dr-ui/src/develop/framing.rs:784`](../../ui/dr-ui/src/develop/framing.rs#L784), [`ui/dr-ui/src/develop/framing.rs:815`](../../ui/dr-ui/src/develop/framing.rs#L815), [`ui/dr-ui/src/develop/framing.rs:836`](../../ui/dr-ui/src/develop/framing.rs#L836), [`ui/dr-ui/src/develop/framing.rs:961`](../../ui/dr-ui/src/develop/framing.rs#L961), [`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:1306`](../../ui/dr-ui/src/lib.rs#L1306), [`ui/dr-ui/src/lib.rs:1594`](../../ui/dr-ui/src/lib.rs#L1594), [`ui/dr-ui/src/lib.rs:2590`](../../ui/dr-ui/src/lib.rs#L2590), [`ui/dr-ui/src/lib.rs:2809`](../../ui/dr-ui/src/lib.rs#L2809), [`ui/dr-ui/src/lib.rs:2869`](../../ui/dr-ui/src/lib.rs#L2869), [`ui/dr-ui/src/lib.rs:3028`](../../ui/dr-ui/src/lib.rs#L3028), [`ui/dr-ui/src/lib.rs:3468`](../../ui/dr-ui/src/lib.rs#L3468), [`ui/dr-ui/src/lib.rs:477`](../../ui/dr-ui/src/lib.rs#L477), [`ui/dr-ui/src/lib.rs:506`](../../ui/dr-ui/src/lib.rs#L506), [`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:482`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L482), [`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:256`](../../ui/dr-ui/src/library_ui/grid.rs#L256), [`ui/dr-ui/src/library_ui/grid.rs:393`](../../ui/dr-ui/src/library_ui/grid.rs#L393), [`ui/dr-ui/src/library_ui/grid.rs:423`](../../ui/dr-ui/src/library_ui/grid.rs#L423), [`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:1626`](../../ui/dr-ui/ui/app.slint#L1626), [`ui/dr-ui/ui/app.slint:1775`](../../ui/dr-ui/ui/app.slint#L1775), [`ui/dr-ui/ui/app.slint:1897`](../../ui/dr-ui/ui/app.slint#L1897), [`ui/dr-ui/ui/app.slint:228`](../../ui/dr-ui/ui/app.slint#L228), [`ui/dr-ui/ui/app.slint:2372`](../../ui/dr-ui/ui/app.slint#L2372), [`ui/dr-ui/ui/app.slint:2514`](../../ui/dr-ui/ui/app.slint#L2514), [`ui/dr-ui/ui/app.slint:3075`](../../ui/dr-ui/ui/app.slint#L3075), [`ui/dr-ui/ui/collections.slint:1253`](../../ui/dr-ui/ui/collections.slint#L1253), [`ui/dr-ui/ui/collections.slint:75`](../../ui/dr-ui/ui/collections.slint#L75), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/library.slint:1242`](../../ui/dr-ui/ui/library.slint#L1242), [`ui/dr-ui/ui/library.slint:1269`](../../ui/dr-ui/ui/library.slint#L1269), [`ui/dr-ui/ui/library.slint:1275`](../../ui/dr-ui/ui/library.slint#L1275), [`ui/dr-ui/ui/library.slint:1330`](../../ui/dr-ui/ui/library.slint#L1330), [`ui/dr-ui/ui/library.slint:1551`](../../ui/dr-ui/ui/library.slint#L1551), [`ui/dr-ui/ui/library.slint:1576`](../../ui/dr-ui/ui/library.slint#L1576), [`ui/dr-ui/ui/library.slint:1583`](../../ui/dr-ui/ui/library.slint#L1583), [`ui/dr-ui/ui/library.slint:1616`](../../ui/dr-ui/ui/library.slint#L1616), [`ui/dr-ui/ui/library.slint:1673`](../../ui/dr-ui/ui/library.slint#L1673), [`ui/dr-ui/ui/library.slint:1680`](../../ui/dr-ui/ui/library.slint#L1680), [`ui/dr-ui/ui/library.slint:2972`](../../ui/dr-ui/ui/library.slint#L2972), [`ui/dr-ui/ui/library.slint:3115`](../../ui/dr-ui/ui/library.slint#L3115), [`ui/dr-ui/ui/library.slint:4699`](../../ui/dr-ui/ui/library.slint#L4699), [`ui/dr-ui/ui/library.slint:4785`](../../ui/dr-ui/ui/library.slint#L4785), [`ui/dr-ui/ui/library.slint:4846`](../../ui/dr-ui/ui/library.slint#L4846), [`ui/dr-ui/ui/library.slint:549`](../../ui/dr-ui/ui/library.slint#L549), [`ui/dr-ui/ui/library.slint:559`](../../ui/dr-ui/ui/library.slint#L559), [`ui/dr-ui/ui/library.slint:698`](../../ui/dr-ui/ui/library.slint#L698), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:583`](../../ui/dr-ui/ui/settings.slint#L583) | -| FR-UI-5 | [`core/dr-types/src/place.rs:118`](../../core/dr-types/src/place.rs#L118), [`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:3412`](../../ui/dr-ui/src/lib.rs#L3412), [`ui/dr-ui/src/lib.rs:3619`](../../ui/dr-ui/src/lib.rs#L3619), [`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:963`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L963), [`ui/dr-ui/src/masks_ui.rs:1614`](../../ui/dr-ui/src/masks_ui.rs#L1614), [`ui/dr-ui/src/place.rs:327`](../../ui/dr-ui/src/place.rs#L327), [`ui/dr-ui/src/settings_ui.rs:502`](../../ui/dr-ui/src/settings_ui.rs#L502), [`ui/dr-ui/ui/app.slint:2301`](../../ui/dr-ui/ui/app.slint#L2301), [`ui/dr-ui/ui/app.slint:2329`](../../ui/dr-ui/ui/app.slint#L2329), [`ui/dr-ui/ui/app.slint:2372`](../../ui/dr-ui/ui/app.slint#L2372), [`ui/dr-ui/ui/app.slint:3016`](../../ui/dr-ui/ui/app.slint#L3016), [`ui/dr-ui/ui/app.slint:3044`](../../ui/dr-ui/ui/app.slint#L3044), [`ui/dr-ui/ui/app.slint:642`](../../ui/dr-ui/ui/app.slint#L642), [`ui/dr-ui/ui/app.slint:649`](../../ui/dr-ui/ui/app.slint#L649), [`ui/dr-ui/ui/app.slint:653`](../../ui/dr-ui/ui/app.slint#L653), [`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/library.slint:1523`](../../ui/dr-ui/ui/library.slint#L1523), [`ui/dr-ui/ui/library.slint:1765`](../../ui/dr-ui/ui/library.slint#L1765), [`ui/dr-ui/ui/library.slint:1889`](../../ui/dr-ui/ui/library.slint#L1889), [`ui/dr-ui/ui/library.slint:2525`](../../ui/dr-ui/ui/library.slint#L2525), [`ui/dr-ui/ui/library.slint:2940`](../../ui/dr-ui/ui/library.slint#L2940), [`ui/dr-ui/ui/library.slint:3005`](../../ui/dr-ui/ui/library.slint#L3005), [`ui/dr-ui/ui/library.slint:3024`](../../ui/dr-ui/ui/library.slint#L3024), [`ui/dr-ui/ui/library.slint:3031`](../../ui/dr-ui/ui/library.slint#L3031), [`ui/dr-ui/ui/library.slint:3115`](../../ui/dr-ui/ui/library.slint#L3115), [`ui/dr-ui/ui/library.slint:3681`](../../ui/dr-ui/ui/library.slint#L3681), [`ui/dr-ui/ui/library.slint:644`](../../ui/dr-ui/ui/library.slint#L644), [`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:113`](../../ui/dr-ui/src/lib.rs#L113), [`ui/dr-ui/src/lib.rs:128`](../../ui/dr-ui/src/lib.rs#L128), [`ui/dr-ui/src/lib.rs:150`](../../ui/dr-ui/src/lib.rs#L150), [`ui/dr-ui/src/lib.rs:3218`](../../ui/dr-ui/src/lib.rs#L3218), [`ui/dr-ui/src/lib.rs:3237`](../../ui/dr-ui/src/lib.rs#L3237), [`ui/dr-ui/src/lib.rs:3264`](../../ui/dr-ui/src/lib.rs#L3264), [`ui/dr-ui/src/lib.rs:3315`](../../ui/dr-ui/src/lib.rs#L3315), [`ui/dr-ui/src/lib.rs:3348`](../../ui/dr-ui/src/lib.rs#L3348), [`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:932`](../../ui/dr-ui/ui/adjust.slint#L932), [`ui/dr-ui/ui/app.slint:2712`](../../ui/dr-ui/ui/app.slint#L2712), [`ui/dr-ui/ui/app.slint:621`](../../ui/dr-ui/ui/app.slint#L621), [`ui/dr-ui/ui/app.slint:704`](../../ui/dr-ui/ui/app.slint#L704), [`ui/dr-ui/ui/identity.slint:246`](../../ui/dr-ui/ui/identity.slint#L246), [`ui/dr-ui/ui/library.slint:1380`](../../ui/dr-ui/ui/library.slint#L1380), [`ui/dr-ui/ui/settings.slint:123`](../../ui/dr-ui/ui/settings.slint#L123), [`ui/dr-ui/ui/settings.slint:608`](../../ui/dr-ui/ui/settings.slint#L608), [`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:113`](../../ui/dr-ui/src/lib.rs#L113), [`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:127`](../../ui/dr-ui/ui/app.slint#L127), [`ui/dr-ui/ui/app.slint:688`](../../ui/dr-ui/ui/app.slint#L688), [`ui/dr-ui/ui/collections.slint:1253`](../../ui/dr-ui/ui/collections.slint#L1253), [`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:1267`](../../ui/dr-ui/ui/library.slint#L1267), [`ui/dr-ui/ui/library.slint:1300`](../../ui/dr-ui/ui/library.slint#L1300), [`ui/dr-ui/ui/library.slint:1610`](../../ui/dr-ui/ui/library.slint#L1610), [`ui/dr-ui/ui/library.slint:1617`](../../ui/dr-ui/ui/library.slint#L1617), [`ui/dr-ui/ui/library.slint:1714`](../../ui/dr-ui/ui/library.slint#L1714), [`ui/dr-ui/ui/library.slint:3040`](../../ui/dr-ui/ui/library.slint#L3040), [`ui/dr-ui/ui/library.slint:4973`](../../ui/dr-ui/ui/library.slint#L4973), [`ui/dr-ui/ui/library.slint:559`](../../ui/dr-ui/ui/library.slint#L559), [`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:360`](../../ui/dr-ui/src/develop/masks.rs#L360), [`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:2097`](../../ui/dr-ui/ui/app.slint#L2097), [`ui/dr-ui/ui/collections.slint:1127`](../../ui/dr-ui/ui/collections.slint#L1127), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:75`](../../ui/dr-ui/ui/collections.slint#L75), [`ui/dr-ui/ui/collections.slint:877`](../../ui/dr-ui/ui/collections.slint#L877), [`ui/dr-ui/ui/masks.slint:1237`](../../ui/dr-ui/ui/masks.slint#L1237), [`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), [`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:560`](../../ui/dr-ui/src/develop/framing.rs#L560), [`ui/dr-ui/src/develop/framing.rs:585`](../../ui/dr-ui/src/develop/framing.rs#L585), [`ui/dr-ui/src/develop/framing.rs:596`](../../ui/dr-ui/src/develop/framing.rs#L596), [`ui/dr-ui/src/develop/framing.rs:610`](../../ui/dr-ui/src/develop/framing.rs#L610), [`ui/dr-ui/src/develop/framing.rs:784`](../../ui/dr-ui/src/develop/framing.rs#L784), [`ui/dr-ui/src/develop/framing.rs:815`](../../ui/dr-ui/src/develop/framing.rs#L815), [`ui/dr-ui/src/develop/framing.rs:836`](../../ui/dr-ui/src/develop/framing.rs#L836), [`ui/dr-ui/src/develop/framing.rs:961`](../../ui/dr-ui/src/develop/framing.rs#L961), [`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:1306`](../../ui/dr-ui/src/lib.rs#L1306), [`ui/dr-ui/src/lib.rs:1594`](../../ui/dr-ui/src/lib.rs#L1594), [`ui/dr-ui/src/lib.rs:2590`](../../ui/dr-ui/src/lib.rs#L2590), [`ui/dr-ui/src/lib.rs:2809`](../../ui/dr-ui/src/lib.rs#L2809), [`ui/dr-ui/src/lib.rs:2869`](../../ui/dr-ui/src/lib.rs#L2869), [`ui/dr-ui/src/lib.rs:3028`](../../ui/dr-ui/src/lib.rs#L3028), [`ui/dr-ui/src/lib.rs:3468`](../../ui/dr-ui/src/lib.rs#L3468), [`ui/dr-ui/src/lib.rs:477`](../../ui/dr-ui/src/lib.rs#L477), [`ui/dr-ui/src/lib.rs:506`](../../ui/dr-ui/src/lib.rs#L506), [`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:256`](../../ui/dr-ui/src/library_ui/grid.rs#L256), [`ui/dr-ui/src/library_ui/grid.rs:393`](../../ui/dr-ui/src/library_ui/grid.rs#L393), [`ui/dr-ui/src/library_ui/grid.rs:423`](../../ui/dr-ui/src/library_ui/grid.rs#L423), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1109`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1109), [`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:1641`](../../ui/dr-ui/ui/app.slint#L1641), [`ui/dr-ui/ui/app.slint:1790`](../../ui/dr-ui/ui/app.slint#L1790), [`ui/dr-ui/ui/app.slint:1912`](../../ui/dr-ui/ui/app.slint#L1912), [`ui/dr-ui/ui/app.slint:228`](../../ui/dr-ui/ui/app.slint#L228), [`ui/dr-ui/ui/app.slint:2387`](../../ui/dr-ui/ui/app.slint#L2387), [`ui/dr-ui/ui/app.slint:2554`](../../ui/dr-ui/ui/app.slint#L2554), [`ui/dr-ui/ui/app.slint:3115`](../../ui/dr-ui/ui/app.slint#L3115), [`ui/dr-ui/ui/collections.slint:1253`](../../ui/dr-ui/ui/collections.slint#L1253), [`ui/dr-ui/ui/collections.slint:75`](../../ui/dr-ui/ui/collections.slint#L75), [`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:1267`](../../ui/dr-ui/ui/library.slint#L1267), [`ui/dr-ui/ui/library.slint:1294`](../../ui/dr-ui/ui/library.slint#L1294), [`ui/dr-ui/ui/library.slint:1300`](../../ui/dr-ui/ui/library.slint#L1300), [`ui/dr-ui/ui/library.slint:1355`](../../ui/dr-ui/ui/library.slint#L1355), [`ui/dr-ui/ui/library.slint:1550`](../../ui/dr-ui/ui/library.slint#L1550), [`ui/dr-ui/ui/library.slint:1585`](../../ui/dr-ui/ui/library.slint#L1585), [`ui/dr-ui/ui/library.slint:1610`](../../ui/dr-ui/ui/library.slint#L1610), [`ui/dr-ui/ui/library.slint:1617`](../../ui/dr-ui/ui/library.slint#L1617), [`ui/dr-ui/ui/library.slint:1650`](../../ui/dr-ui/ui/library.slint#L1650), [`ui/dr-ui/ui/library.slint:1707`](../../ui/dr-ui/ui/library.slint#L1707), [`ui/dr-ui/ui/library.slint:1714`](../../ui/dr-ui/ui/library.slint#L1714), [`ui/dr-ui/ui/library.slint:3040`](../../ui/dr-ui/ui/library.slint#L3040), [`ui/dr-ui/ui/library.slint:3210`](../../ui/dr-ui/ui/library.slint#L3210), [`ui/dr-ui/ui/library.slint:4809`](../../ui/dr-ui/ui/library.slint#L4809), [`ui/dr-ui/ui/library.slint:4847`](../../ui/dr-ui/ui/library.slint#L4847), [`ui/dr-ui/ui/library.slint:4912`](../../ui/dr-ui/ui/library.slint#L4912), [`ui/dr-ui/ui/library.slint:4973`](../../ui/dr-ui/ui/library.slint#L4973), [`ui/dr-ui/ui/library.slint:554`](../../ui/dr-ui/ui/library.slint#L554), [`ui/dr-ui/ui/library.slint:564`](../../ui/dr-ui/ui/library.slint#L564), [`ui/dr-ui/ui/library.slint:654`](../../ui/dr-ui/ui/library.slint#L654), [`ui/dr-ui/ui/library.slint:723`](../../ui/dr-ui/ui/library.slint#L723), [`ui/dr-ui/ui/settings.slint:115`](../../ui/dr-ui/ui/settings.slint#L115), [`ui/dr-ui/ui/settings.slint:583`](../../ui/dr-ui/ui/settings.slint#L583) | +| FR-UI-5 | [`core/dr-types/src/place.rs:118`](../../core/dr-types/src/place.rs#L118), [`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:3412`](../../ui/dr-ui/src/lib.rs#L3412), [`ui/dr-ui/src/lib.rs:3619`](../../ui/dr-ui/src/lib.rs#L3619), [`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:2316`](../../ui/dr-ui/ui/app.slint#L2316), [`ui/dr-ui/ui/app.slint:2344`](../../ui/dr-ui/ui/app.slint#L2344), [`ui/dr-ui/ui/app.slint:2387`](../../ui/dr-ui/ui/app.slint#L2387), [`ui/dr-ui/ui/app.slint:2434`](../../ui/dr-ui/ui/app.slint#L2434), [`ui/dr-ui/ui/app.slint:3056`](../../ui/dr-ui/ui/app.slint#L3056), [`ui/dr-ui/ui/app.slint:3084`](../../ui/dr-ui/ui/app.slint#L3084), [`ui/dr-ui/ui/app.slint:642`](../../ui/dr-ui/ui/app.slint#L642), [`ui/dr-ui/ui/app.slint:649`](../../ui/dr-ui/ui/app.slint#L649), [`ui/dr-ui/ui/app.slint:653`](../../ui/dr-ui/ui/app.slint#L653), [`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/library.slint:1547`](../../ui/dr-ui/ui/library.slint#L1547), [`ui/dr-ui/ui/library.slint:1557`](../../ui/dr-ui/ui/library.slint#L1557), [`ui/dr-ui/ui/library.slint:1799`](../../ui/dr-ui/ui/library.slint#L1799), [`ui/dr-ui/ui/library.slint:1928`](../../ui/dr-ui/ui/library.slint#L1928), [`ui/dr-ui/ui/library.slint:2566`](../../ui/dr-ui/ui/library.slint#L2566), [`ui/dr-ui/ui/library.slint:3008`](../../ui/dr-ui/ui/library.slint#L3008), [`ui/dr-ui/ui/library.slint:3077`](../../ui/dr-ui/ui/library.slint#L3077), [`ui/dr-ui/ui/library.slint:3096`](../../ui/dr-ui/ui/library.slint#L3096), [`ui/dr-ui/ui/library.slint:3103`](../../ui/dr-ui/ui/library.slint#L3103), [`ui/dr-ui/ui/library.slint:3176`](../../ui/dr-ui/ui/library.slint#L3176), [`ui/dr-ui/ui/library.slint:3210`](../../ui/dr-ui/ui/library.slint#L3210), [`ui/dr-ui/ui/library.slint:3791`](../../ui/dr-ui/ui/library.slint#L3791), [`ui/dr-ui/ui/library.slint:648`](../../ui/dr-ui/ui/library.slint#L648), [`ui/dr-ui/ui/library.slint:669`](../../ui/dr-ui/ui/library.slint#L669), [`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:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:3237`](../../ui/dr-ui/src/lib.rs#L3237), [`ui/dr-ui/ui/adjust.slint:932`](../../ui/dr-ui/ui/adjust.slint#L932), [`ui/dr-ui/ui/app.slint:2020`](../../ui/dr-ui/ui/app.slint#L2020), [`ui/dr-ui/ui/settings.slint:608`](../../ui/dr-ui/ui/settings.slint#L608), [`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:775`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L775), [`ui/dr-ui/src/library_ui/grid.rs:205`](../../ui/dr-ui/src/library_ui/grid.rs#L205), [`ui/dr-ui/src/library_ui/grid.rs:247`](../../ui/dr-ui/src/library_ui/grid.rs#L247), [`ui/dr-ui/src/library_ui/grid.rs:276`](../../ui/dr-ui/src/library_ui/grid.rs#L276), [`ui/dr-ui/src/library_ui/grid.rs:582`](../../ui/dr-ui/src/library_ui/grid.rs#L582), [`ui/dr-ui/src/library_ui/grid.rs:708`](../../ui/dr-ui/src/library_ui/grid.rs#L708), [`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:171`](../../ui/dr-ui/ui/adjust.slint#L171), [`ui/dr-ui/ui/app.slint:2514`](../../ui/dr-ui/ui/app.slint#L2514), [`ui/dr-ui/ui/app.slint:2552`](../../ui/dr-ui/ui/app.slint#L2552) | -| NFR-A11Y-3 | [`ui/dr-ui/src/histogram.rs:356`](../../ui/dr-ui/src/histogram.rs#L356), [`ui/dr-ui/ui/histogram.slint:137`](../../ui/dr-ui/ui/histogram.slint#L137), [`ui/dr-ui/ui/library.slint:1038`](../../ui/dr-ui/ui/library.slint#L1038), [`ui/dr-ui/ui/library.slint:1186`](../../ui/dr-ui/ui/library.slint#L1186), [`ui/dr-ui/ui/peaking.slint:1`](../../ui/dr-ui/ui/peaking.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:395`](../../core/dr-pipeline/src/framing.rs#L395), [`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:3237`](../../ui/dr-ui/src/lib.rs#L3237), [`ui/dr-ui/ui/adjust.slint:932`](../../ui/dr-ui/ui/adjust.slint#L932), [`ui/dr-ui/ui/app.slint:2035`](../../ui/dr-ui/ui/app.slint#L2035), [`ui/dr-ui/ui/settings.slint:608`](../../ui/dr-ui/ui/settings.slint#L608), [`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:205`](../../ui/dr-ui/src/library_ui/grid.rs#L205), [`ui/dr-ui/src/library_ui/grid.rs:247`](../../ui/dr-ui/src/library_ui/grid.rs#L247), [`ui/dr-ui/src/library_ui/grid.rs:276`](../../ui/dr-ui/src/library_ui/grid.rs#L276), [`ui/dr-ui/src/library_ui/grid.rs:582`](../../ui/dr-ui/src/library_ui/grid.rs#L582), [`ui/dr-ui/src/library_ui/grid.rs:708`](../../ui/dr-ui/src/library_ui/grid.rs#L708), [`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:171`](../../ui/dr-ui/ui/adjust.slint#L171), [`ui/dr-ui/ui/app.slint:2554`](../../ui/dr-ui/ui/app.slint#L2554), [`ui/dr-ui/ui/app.slint:2592`](../../ui/dr-ui/ui/app.slint#L2592) | +| NFR-A11Y-3 | [`ui/dr-ui/src/histogram.rs:356`](../../ui/dr-ui/src/histogram.rs#L356), [`ui/dr-ui/ui/app.slint:2434`](../../ui/dr-ui/ui/app.slint#L2434), [`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:1063`](../../ui/dr-ui/ui/library.slint#L1063), [`ui/dr-ui/ui/library.slint:1211`](../../ui/dr-ui/ui/library.slint#L1211), [`ui/dr-ui/ui/library.slint:2610`](../../ui/dr-ui/ui/library.slint#L2610), [`ui/dr-ui/ui/library.slint:3176`](../../ui/dr-ui/ui/library.slint#L3176), [`ui/dr-ui/ui/library.slint:3727`](../../ui/dr-ui/ui/library.slint#L3727), [`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:4809`](../../ui/dr-ui/ui/library.slint#L4809), [`ui/dr-ui/ui/library.slint:755`](../../ui/dr-ui/ui/library.slint#L755) | +| 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:4936`](../../ui/dr-ui/ui/library.slint#L4936), [`ui/dr-ui/ui/library.slint:780`](../../ui/dr-ui/ui/library.slint#L780) | | 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:1484`](../../ui/dr-ui/src/lib.rs#L1484), [`ui/dr-ui/ui/app.slint:1118`](../../ui/dr-ui/ui/app.slint#L1118), [`ui/dr-ui/ui/app.slint:131`](../../ui/dr-ui/ui/app.slint#L131), [`ui/dr-ui/ui/settings.slint:155`](../../ui/dr-ui/ui/settings.slint#L155), [`ui/dr-ui/ui/settings.slint:841`](../../ui/dr-ui/ui/settings.slint#L841) | @@ -175,7 +175,7 @@ _None._ | NFR-R1 | [`core/dr-catalog/src/schema.rs:361`](../../core/dr-catalog/src/schema.rs#L361), [`core/dr-catalog/src/sync.rs:1`](../../core/dr-catalog/src/sync.rs#L1), [`core/dr-gpu/src/lib.rs:194`](../../core/dr-gpu/src/lib.rs#L194), [`core/dr-sync/src/account.rs:240`](../../core/dr-sync/src/account.rs#L240), [`ui/dr-ui/src/library/paths.rs:69`](../../ui/dr-ui/src/library/paths.rs#L69) | | NFR-R2 | [`core/dr-catalog/src/recovery.rs:1`](../../core/dr-catalog/src/recovery.rs#L1), [`core/dr-catalog/src/recovery.rs:222`](../../core/dr-catalog/src/recovery.rs#L222), [`core/dr-catalog/src/sync.rs:61`](../../core/dr-catalog/src/sync.rs#L61), [`core/dr-catalog/src/trash.rs:1`](../../core/dr-catalog/src/trash.rs#L1), [`ui/dr-ui/src/derived_sync.rs:623`](../../ui/dr-ui/src/derived_sync.rs#L623), [`ui/dr-ui/src/derived_sync.rs:746`](../../ui/dr-ui/src/derived_sync.rs#L746), [`ui/dr-ui/src/library_ui/sync.rs:22`](../../ui/dr-ui/src/library_ui/sync.rs#L22), [`ui/dr-ui/src/library_ui/sync.rs:362`](../../ui/dr-ui/src/library_ui/sync.rs#L362) | | NFR-R3 | [`core/dr-decode/src/error.rs:30`](../../core/dr-decode/src/error.rs#L30) | -| NFR-R4 | [`core/dr-types/src/settings.rs:92`](../../core/dr-types/src/settings.rs#L92), [`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: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/ratings_keywords.rs:529`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L529), [`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/ui/settings.slint:200`](../../ui/dr-ui/ui/settings.slint#L200), [`ui/dr-ui/ui/settings.slint:919`](../../ui/dr-ui/ui/settings.slint#L919) | +| NFR-R4 | [`core/dr-types/src/settings.rs:92`](../../core/dr-types/src/settings.rs#L92), [`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: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/ratings_keywords.rs:651`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L651), [`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/ui/settings.slint:200`](../../ui/dr-ui/ui/settings.slint#L200), [`ui/dr-ui/ui/settings.slint:919`](../../ui/dr-ui/ui/settings.slint#L919) | | NFR-R5 | [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/error.rs:1`](../../core/dr-catalog/src/error.rs#L1), [`core/dr-catalog/src/keywords.rs:1`](../../core/dr-catalog/src/keywords.rs#L1), [`core/dr-catalog/src/schema.rs:1`](../../core/dr-catalog/src/schema.rs#L1) | | NFR-R6 | [`core/dr-catalog/src/error.rs:1`](../../core/dr-catalog/src/error.rs#L1), [`core/dr-catalog/src/lib.rs:255`](../../core/dr-catalog/src/lib.rs#L255), [`core/dr-catalog/src/recovery.rs:1`](../../core/dr-catalog/src/recovery.rs#L1) | | NFR-R7 | [`core/dr-gpu/src/error.rs:1`](../../core/dr-gpu/src/error.rs#L1) | @@ -218,7 +218,7 @@ Defined in `requirements.md` and marked `(post-v1)` on the defining line. Not in - FR-PLG-6 - FR-PLG-6a - FR-PLG-7 -- FR-PLG-8 — tagged in [`core/dr-pipeline/src/sidecar.rs:2345`](../../core/dr-pipeline/src/sidecar.rs#L2345), [`core/dr-pipeline/src/sidecar.rs:2378`](../../core/dr-pipeline/src/sidecar.rs#L2378) +- FR-PLG-8 — tagged in [`core/dr-pipeline/src/sidecar.rs:2378`](../../core/dr-pipeline/src/sidecar.rs#L2378), [`core/dr-pipeline/src/sidecar.rs:2411`](../../core/dr-pipeline/src/sidecar.rs#L2411) - FR-PLG-9 - NFR-SEC-6 diff --git a/docs/gestures.md b/docs/gestures.md index 02cf140..3082d6e 100644 --- a/docs/gestures.md +++ b/docs/gestures.md @@ -5,7 +5,11 @@ 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. +<<<<<<< HEAD 48 gestures, in 4 places. +======= +50 gestures, in 4 places. +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ## Develop @@ -25,6 +29,7 @@ Sampling a neutral is the first move of the tonal pass — every colour judgemen 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. +<<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD `ui/dr-ui/ui/app.slint:1715` @@ -34,6 +39,9 @@ Anchored on the fingers' midpoint, and on the pointer, so the gesture reads as m ======= `ui/dr-ui/ui/app.slint:1755` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:1722` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Move a magnified photograph about @@ -42,6 +50,7 @@ Anchored on the fingers' midpoint, and on the pointer, so the gesture reads as m 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. +<<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD `ui/dr-ui/ui/app.slint:1808` @@ -51,6 +60,9 @@ Only once there is something outside the viewport to reach, which is why the cur ======= `ui/dr-ui/ui/app.slint:1846` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:1813` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Paint a mask by hand @@ -59,6 +71,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. +<<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD `ui/dr-ui/ui/app.slint:1895` @@ -68,6 +81,9 @@ A model's mask stops inside a shoulder and leaks into the hair, and no single ed ======= `ui/dr-ui/ui/app.slint:1933` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:1900` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Take back the last change @@ -80,6 +96,7 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2123` ======= `ui/dr-ui/ui/app.slint:2116` @@ -90,6 +107,9 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a ======= `ui/dr-ui/ui/app.slint:2161` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2128` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Do it again after taking it back @@ -100,6 +120,7 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2136` ======= `ui/dr-ui/ui/app.slint:2129` @@ -110,6 +131,9 @@ A whole drag is one step, so undo takes back a decision rather than a frame of a ======= `ui/dr-ui/ui/app.slint:2174` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2141` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Copy the settings from this photograph @@ -122,6 +146,7 @@ The button is the copy that has to work: a tablet has no modifier key to hold an <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2169` ======= `ui/dr-ui/ui/app.slint:2162` @@ -132,6 +157,9 @@ The button is the copy that has to work: a tablet has no modifier key to hold an ======= `ui/dr-ui/ui/app.slint:2207` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2174` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Paste the settings onto this photograph @@ -144,6 +172,7 @@ The button names what would be pasted — "3 adjustments", and whether the crop <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2181` ======= `ui/dr-ui/ui/app.slint:2174` @@ -154,6 +183,9 @@ The button names what would be pasted — "3 adjustments", and whether the crop ======= `ui/dr-ui/ui/app.slint:2219` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2186` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Choose which kinds of edit a copy carries @@ -166,6 +198,7 @@ Lightroom's Copy Settings. Pasting a look across a shoot usually means leaving e <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2198` ======= `ui/dr-ui/ui/app.slint:2191` @@ -176,6 +209,9 @@ Lightroom's Copy Settings. Pasting a look across a shoot usually means leaving e ======= `ui/dr-ui/ui/app.slint:2236` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2203` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Export this photograph as the last one was @@ -188,6 +224,7 @@ Every export runs on the defaults in Settings, so "as the last one was" is what <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2227` ======= `ui/dr-ui/ui/app.slint:2220` @@ -198,6 +235,9 @@ Every export runs on the defaults in Settings, so "as the last one was" is what ======= `ui/dr-ui/ui/app.slint:2265` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2232` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Choose how to export, then export @@ -210,6 +250,7 @@ The export sheet is the export defaults alone with an Export button. What is cho <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2239` ======= `ui/dr-ui/ui/app.slint:2232` @@ -220,6 +261,9 @@ The export sheet is the export defaults alone with an Export button. What is cho ======= `ui/dr-ui/ui/app.slint:2277` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2244` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Change which group of adjustments is on screen @@ -232,6 +276,7 @@ The groups are whatever the operation set declares itself to be about, so there <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2264` ======= `ui/dr-ui/ui/app.slint:2257` @@ -242,6 +287,9 @@ The groups are whatever the operation set declares itself to be about, so there ======= `ui/dr-ui/ui/app.slint:2302` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2269` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Look at the photograph at 1:1 @@ -254,6 +302,7 @@ Noise reduction and capture sharpening are judgements about single pixels, and a <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2299` ======= `ui/dr-ui/ui/app.slint:2292` @@ -264,6 +313,19 @@ Noise reduction and capture sharpening are judgements about single pixels, and a ======= `ui/dr-ui/ui/app.slint:2337` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2304` + +### Give this photograph a colour label + +- **Touch** — Tap Label in the top bar, then a colour +- **Pointer** — Click Label in the top bar, then a colour +- **Keyboard** — 6 red, 7 yellow, 8 green, 9 blue; the same key again takes it off + +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:2356` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Move to the next or previous photograph @@ -276,6 +338,7 @@ The edit on screen is saved on the way out, so stepping through a folder is as m <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2354` ======= `ui/dr-ui/ui/app.slint:2344` @@ -286,6 +349,9 @@ The edit on screen is saved on the way out, so stepping through a folder is as m ======= `ui/dr-ui/ui/app.slint:2389` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2381` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### See the photograph before you edited it @@ -298,6 +364,7 @@ Held rather than toggled, and no split screen: a split halves the working image <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD `ui/dr-ui/ui/app.slint:2487` ======= `ui/dr-ui/ui/app.slint:2477` @@ -308,6 +375,9 @@ Held rather than toggled, and no split screen: a split halves the working image ======= `ui/dr-ui/ui/app.slint:2522` >>>>>>> 3f5f735 (Fade the draft into the sharp frame when a drag settles) +======= +`ui/dr-ui/ui/app.slint:2514` +>>>>>>> b2428ce (Show and set colour labels in the grid and develop, and filter by them) ### Put one control back to its default @@ -459,7 +529,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:1591` +`ui/dr-ui/ui/library.slint:1625` ### Add or remove one photograph @@ -468,7 +538,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:1600` +`ui/dr-ui/ui/library.slint:1634` ### Leave selecting @@ -476,7 +546,7 @@ While selecting, a tap never opens. That is the whole point of the mode: one mea - **Pointer** — Press Done in the header - **Keyboard** — Escape -`ui/dr-ui/ui/library.slint:1608` +`ui/dr-ui/ui/library.slint:1642` ### Pick a photograph up to drag it @@ -485,7 +555,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:1638` +`ui/dr-ui/ui/library.slint:1672` ### Select a range @@ -494,7 +564,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:1703` +`ui/dr-ui/ui/library.slint:1737` ### Take the blinks out of a burst @@ -503,7 +573,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:2411` +`ui/dr-ui/ui/library.slint:2450` ### Find photographs with two people in them @@ -512,7 +582,16 @@ 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:2440` +`ui/dr-ui/ui/library.slint:2479` + +### Show only photographs with one colour label + +- **Touch** — Tap its chip in the filter bar +- **Pointer** — Click its chip in the filter bar + +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:2602` ### Export the selection as the last export was @@ -522,7 +601,7 @@ Face indexing reads each face's eyes. The chip drops frames where the chosen peo 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:2993` +`ui/dr-ui/ui/library.slint:3065` ### Paste copied settings onto the selection @@ -530,7 +609,7 @@ Lightroom's and darktable's chords. Every export runs on the saved defaults, so - **Pointer** — Select them, then "Paste to N" - **Keyboard** — Ctrl+V -`ui/dr-ui/ui/library.slint:3017` +`ui/dr-ui/ui/library.slint:3089` ### Show only photographs with some number of stars @@ -540,7 +619,17 @@ 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:3039` +`ui/dr-ui/ui/library.slint:3111` + +### Give photographs a colour label + +- **Touch** — Select them, then Label in the selection bar and tap a colour +- **Pointer** — Select them, then Label in the selection bar and click a colour +- **Keyboard** — 6 red, 7 yellow, 8 green, 9 blue, with the pointer over it or on the selection; the same key again takes the label off + +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:3160` ### Resize the thumbnails @@ -549,7 +638,7 @@ The chips say "this many or more". A range with a ceiling — the twos and three 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:3245` +`ui/dr-ui/ui/library.slint:3340` ### File photographs in a collection @@ -558,7 +647,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:3442` +`ui/dr-ui/ui/library.slint:3537` ### Open a photograph @@ -567,7 +656,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:3723` +`ui/dr-ui/ui/library.slint:3833` ### Rate a photograph without opening it @@ -577,7 +666,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:3843` +`ui/dr-ui/ui/library.slint:3953` ### Choose the frame a folded burst shows @@ -586,7 +675,7 @@ 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:3975` +`ui/dr-ui/ui/library.slint:4085` ### Drop the selection but keep selecting @@ -595,7 +684,7 @@ A folded burst draws its earliest frame, which is a fact about the clock and not 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:4651` +`ui/dr-ui/ui/library.slint:4761` ### Select everything the grid is showing @@ -605,7 +694,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:4668` +`ui/dr-ui/ui/library.slint:4778` ### Take photographs out of a collection @@ -614,4 +703,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:4792` +`ui/dr-ui/ui/library.slint:4919` diff --git a/ui/dr-ui/src/gesture_book.rs b/ui/dr-ui/src/gesture_book.rs index 78a0093..3251c09 100644 --- a/ui/dr-ui/src/gesture_book.rs +++ b/ui/dr-ui/src/gesture_book.rs @@ -113,6 +113,13 @@ pub const GESTURES: &[Gesture] = &[ pointer: "Double-click it, or press the zoom readout floating over the canvas", keys: "Z", }, + Gesture { + title: "Give this photograph a colour label", + section: "Develop", + touch: "Tap Label in the top bar, then a colour", + pointer: "Click Label in the top bar, then a colour", + keys: "6 red, 7 yellow, 8 green, 9 blue; the same key again takes it off", + }, Gesture { title: "Move to the next or previous photograph", section: "Develop", @@ -281,6 +288,13 @@ pub const GESTURES: &[Gesture] = &[ pointer: "Open the People chip on the filter bar, click each name, then switch the chip beside them to \"all of them\"", keys: "", }, + Gesture { + title: "Show only photographs with one colour label", + section: "Library grid", + touch: "Tap its chip in the filter bar", + pointer: "Click its chip in the filter bar", + keys: "", + }, Gesture { title: "Export the selection as the last export was", section: "Library grid", @@ -302,6 +316,13 @@ pub const GESTURES: &[Gesture] = &[ pointer: "Click a star chip in the filter bar", keys: "Hold F and tap a digit for exactly that many stars, or two digits for everything between them; tap F alone to show every rating again", }, + Gesture { + title: "Give photographs a colour label", + section: "Library grid", + touch: "Select them, then Label in the selection bar and tap a colour", + pointer: "Select them, then Label in the selection bar and click a colour", + keys: "6 red, 7 yellow, 8 green, 9 blue, with the pointer over it or on the selection; the same key again takes the label off", + }, Gesture { title: "Resize the thumbnails", section: "Library grid", diff --git a/ui/dr-ui/src/library/filters.rs b/ui/dr-ui/src/library/filters.rs index 184f9bf..531a5b3 100644 --- a/ui/dr-ui/src/library/filters.rs +++ b/ui/dr-ui/src/library/filters.rs @@ -153,6 +153,10 @@ pub struct RatingFilter { /// a star count does, and nothing here rejects or rates a frame — the /// line §3.9.1 draws. pub eyes_open: bool, + /// TRACES: FR-CAT-6 + /// Only photographs carrying this colour label. One at a time, as the + /// flag is: the chips are a choice of one pile, not a set of them. + pub label: Option, } /// How several people combine when the grid is narrowed by identity. @@ -188,6 +192,7 @@ impl RatingFilter { && self.captured_to.is_none() && self.people.is_empty() && !self.eyes_open + && self.label.is_none() } /// Whether a date range is narrowing the grid. @@ -349,6 +354,19 @@ impl RatingFilter { )); } + // TRACES: FR-CAT-6 + // A code this module owns, formatted in like the flag above. No + // coalesce: an unlabelled image's NULL never equals a code, which is + // the answer. + if let Some(label) = self.label { + terms.push(format!( + "(SELECT dv.label FROM versions dv + WHERE dv.image_id = i.id AND dv.is_default = 1 + LIMIT 1) = {}", + dr_catalog::rating::label_code(label) + )); + } + if self.local_only { // `tier_actual`, not `tier_desired`: the question is what is // *here*, not what a pin has promised will be. An image queued for @@ -419,6 +437,31 @@ mod tests { assert_eq!(local_original_count(&catalog).unwrap(), 3); } + #[test] + fn a_label_chip_shows_that_label_and_nothing_else() { + // TRACES: FR-CAT-6 + let catalog = with_images(4); + let ids = image_ids(&catalog); + let c = catalog.connection(); + dr_catalog::rating::set_label(c, ids[0], Some(dr_types::ColourLabel::Red)).unwrap(); + dr_catalog::rating::set_label(c, ids[1], Some(dr_types::ColourLabel::Red)).unwrap(); + dr_catalog::rating::set_label(c, ids[2], Some(dr_types::ColourLabel::Green)).unwrap(); + + let red = RatingFilter { + label: Some(dr_types::ColourLabel::Red), + ..Default::default() + }; + assert!(!red.is_unfiltered()); + assert_eq!(read_cells_all(&catalog, &red, 0, 120).unwrap().len(), 2); + assert_eq!(total_images_filtered(&catalog, &red).unwrap(), 2); + + let purple = RatingFilter { + label: Some(dr_types::ColourLabel::Purple), + ..Default::default() + }; + assert_eq!(total_images_filtered(&catalog, &purple).unwrap(), 0); + } + #[test] fn a_cached_preview_is_not_a_local_original() { // The filter answers "can I open this in develop right now", and a diff --git a/ui/dr-ui/src/library/scan.rs b/ui/dr-ui/src/library/scan.rs index d1ee2a2..cfaa16e 100644 --- a/ui/dr-ui/src/library/scan.rs +++ b/ui/dr-ui/src/library/scan.rs @@ -914,15 +914,24 @@ mod tests { fn a_label_from_another_device_reaches_the_catalog_and_none_clears_nothing() { // TRACES: FR-CAT-5 let cat = library(&["2026/a.CR2"]); - assert_eq!(apply_judgement(cat.connection(), 1, "2026/a.drsc", 0, 0, 4).unwrap(), 1); + assert_eq!( + apply_judgement(cat.connection(), 1, "2026/a.drsc", 0, 0, 4).unwrap(), + 1 + ); let label = |cat: &Catalog| -> Option { cat.connection() - .query_row("SELECT label FROM versions WHERE is_default = 1", [], |r| r.get(0)) + .query_row("SELECT label FROM versions WHERE is_default = 1", [], |r| { + r.get(0) + }) .unwrap() }; assert_eq!(label(&cat), Some(4)); apply_judgement(cat.connection(), 1, "2026/a.drsc", 3, 0, 0).unwrap(); - assert_eq!(label(&cat), Some(4), "a sidecar with no label left it alone"); + assert_eq!( + label(&cat), + Some(4), + "a sidecar with no label left it alone" + ); } /// The regression, in one line: a rating in a sidecar reaches the grid. diff --git a/ui/dr-ui/src/library_ui/filter_bar.rs b/ui/dr-ui/src/library_ui/filter_bar.rs index 2700fc9..0589796 100644 --- a/ui/dr-ui/src/library_ui/filter_bar.rs +++ b/ui/dr-ui/src/library_ui/filter_bar.rs @@ -252,6 +252,24 @@ pub(super) fn wire_filter_ratings_and_people(window: &AppWindow, ctl: &Rc() + .on_library_filter_label_changed(move |code| { + let Some(w) = weak.upgrade() else { return }; + let label = dr_catalog::rating::label_from_code(Some(code as i64)); + ctl.filter.borrow_mut().label = label; + w.global::() + .set_library_filter_label(label.map_or(0, |_| code)); + refilter(&w, &ctl); + }); + } } /// The date-range filter: turned on from the timeline's own visible span, diff --git a/ui/dr-ui/src/library_ui/ratings_keywords.rs b/ui/dr-ui/src/library_ui/ratings_keywords.rs index 79a4b98..0eeb67c 100644 --- a/ui/dr-ui/src/library_ui/ratings_keywords.rs +++ b/ui/dr-ui/src/library_ui/ratings_keywords.rs @@ -45,11 +45,15 @@ pub fn sync_ratings(window: &AppWindow, catalog: &Catalog, ids: &[dr_types::Imag // Absent means unrated, which is a real state rather than missing data. let j = found.get(id).copied().unwrap_or_default(); let (rating, flag) = (j.rating as i32, flag_code(j.flag)); + let label = j + .label + .map_or(0, |l| dr_catalog::rating::label_code(l) as i32); if let Some(mut cell) = model.row_data(row) { - if cell.rating != rating || cell.flag != flag { + if cell.rating != rating || cell.flag != flag || cell.label != label { cell.rating = rating; cell.flag = flag; + cell.label = label; model.set_row_data(row, cell); } } @@ -78,6 +82,123 @@ pub(super) fn refresh_rating_counts(window: &AppWindow, catalog: &Catalog) { .set_library_local_count(library::local_original_count(catalog).unwrap_or(0) as i32); } +/// TRACES: FR-CAT-6 +/// Refresh the label chips' counts. Separate from the star counts because +/// the two change on different events: a star key cannot move a label count, +/// so a cull does not pay for this read on every keystroke. +pub(super) fn refresh_label_counts(window: &AppWindow, catalog: &Catalog) { + let counts = dr_catalog::rating::label_histogram(catalog.connection()).unwrap_or_default(); + let as_i32: Vec = counts.iter().map(|n| *n as i32).collect(); + window + .global::() + .set_library_label_counts(slint::ModelRc::new(slint::VecModel::from(as_i32))); +} + +/// TRACES: FR-CAT-5 +/// What a label gesture asks for: a key toggles, the picker names the answer. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum LabelGesture { + Toggle(dr_types::ColourLabel), + Set(Option), +} + +impl LabelGesture { + /// From Slint's code and whether it came from a key. A code with no + /// colour is "none" for the picker, and nothing at all for a key. + fn from_code(code: i32, toggle: bool) -> Option { + let label = dr_catalog::rating::label_from_code(Some(code as i64)); + match (toggle, label) { + (true, Some(l)) => Some(Self::Toggle(l)), + (true, None) => None, + (false, l) => Some(Self::Set(l)), + } + } +} + +/// TRACES: FR-CAT-5 | FR-CAT-13 +/// Label a set of images: catalog first, in one transaction, then the grid, +/// the chips and both sidecars — the order and the reasons of +/// [`apply_judgement`]. +fn apply_label( + window: &AppWindow, + ctl: &Rc, + images: &[dr_types::ImageId], + gesture: LabelGesture, +) { + if images.is_empty() { + window + .global::() + .set_library_status("Select an image first".into()); + return; + } + + let writes = { + let borrow = ctl.catalog.borrow(); + let Some(catalog) = borrow.as_ref() else { + return; + }; + let conn = catalog.connection(); + let label = match gesture { + LabelGesture::Set(l) => l, + // One read of what they carry now, for the whole set. + LabelGesture::Toggle(pressed) => { + let now = dr_catalog::rating::judgements(conn, images).unwrap_or_default(); + dr_catalog::rating::toggled_label( + images.iter().map(|id| now.get(id).and_then(|j| j.label)), + pressed, + ) + } + }; + if let Err(e) = dr_catalog::rating::set_label_many(conn, images, label) { + window + .global::() + .set_library_error(format!("recording label: {e}").into()); + return; + } + window + .global::() + .set_library_status(label_summary(images.len(), label).into()); + + let visible = ctl.visible_ids(); + sync_ratings(window, catalog, &visible); + refresh_label_counts(window, catalog); + collect_sidecar_writes(catalog, images) + }; + + // A grid narrowed to red no longer holds a frame just made green. + if !ctl.filter.borrow().is_unfiltered() { + load_window(window, ctl); + } + + start_sidecar_writes(window, ctl, writes); + start_xmp_writes(window, ctl, images); +} + +/// What the status line says about a label that just landed — in words, as +/// every other judgement is reported. +fn label_summary(n: usize, label: Option) -> String { + let what = match label { + Some(l) => format!("{} label", label_name(l).to_lowercase()), + None => "no label".to_string(), + }; + if n == 1 { + what[..1].to_uppercase() + &what[1..] + } else { + format!("{n} images · {what}") + } +} + +/// A label's name, as the chips and the picker spell it. +fn label_name(l: dr_types::ColourLabel) -> &'static str { + match l { + dr_types::ColourLabel::Red => "Red", + dr_types::ColourLabel::Yellow => "Yellow", + dr_types::ColourLabel::Green => "Green", + dr_types::ColourLabel::Blue => "Blue", + dr_types::ColourLabel::Purple => "Purple", + } +} + // --- keywords (FR-CAT-5, FR-CAT-6) --------------------------------------- // // `dr_catalog::keywords` owns the data rules — the vocabulary, the many-to-many @@ -672,6 +793,7 @@ fn drain_xmp( if let Some(catalog) = ctl.catalog.borrow().as_ref() { sync_ratings(&w, catalog, &visible); refresh_rating_counts(&w, catalog); + refresh_label_counts(&w, catalog); } refresh_xmp_conflicts(&w, ctl); } @@ -959,6 +1081,69 @@ pub(super) fn wire_ratings_and_flags( } }); } + + // TRACES: FR-CAT-5 | FR-UI-5 + // A label key in the grid: the photographs a rating key would reach, + // toggled as one set. + { + let weak = window.as_weak(); + let ctl = ctl.clone(); + let coll_for_keys = coll_ctl.clone(); + window + .global::() + .on_library_labelled(move |code, hovered| { + let Some(w) = weak.upgrade() else { return }; + let Some(gesture) = LabelGesture::from_code(code, true) else { + return; + }; + let offset = w.global::().get_library_offset().max(0) as usize; + let under_pointer = usize::try_from(hovered) + .ok() + .and_then(|ordinal| ordinal.checked_sub(offset)) + .and_then(|row| ctl.visible_ids().get(row).copied()); + let chosen = judged_images(coll_for_keys.selected(), under_pointer); + apply_label(&w, &ctl, &chosen, gesture); + }); + } + + // TRACES: FR-CAT-5 | FR-UI-4 + // The selection bar's picker: the selection, set outright. + { + let weak = window.as_weak(); + let ctl = ctl.clone(); + let coll = coll_ctl.clone(); + window + .global::() + .on_library_label_chosen(move |code| { + let Some(w) = weak.upgrade() else { return }; + let Some(gesture) = LabelGesture::from_code(code, false) else { + return; + }; + apply_label(&w, &ctl, &coll.selected(), gesture); + }); + } + + // TRACES: FR-CAT-5 + // One photograph by row — the one open in develop. + { + let weak = window.as_weak(); + let ctl = ctl.clone(); + window + .global::() + .on_library_cell_labelled(move |row, code, toggle| { + let Some(w) = weak.upgrade() else { return }; + let Some(gesture) = LabelGesture::from_code(code, toggle) 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_label(&w, &ctl, &[id], gesture); + }); + } } /// TRACES: FR-UI-5 @@ -1054,6 +1239,37 @@ mod tests { assert_eq!(judged_images(vec![], None), vec![]); } + // --- colour labels (FR-CAT-5) ----------------------------------------- + + #[test] + fn a_label_key_toggles_and_the_picker_sets() { + use dr_types::ColourLabel::*; + assert_eq!( + LabelGesture::from_code(1, true), + Some(LabelGesture::Toggle(Red)) + ); + // A key with no colour behind it does nothing rather than clearing. + assert_eq!(LabelGesture::from_code(0, true), None); + assert_eq!( + LabelGesture::from_code(0, false), + Some(LabelGesture::Set(None)) + ); + assert_eq!( + LabelGesture::from_code(5, false), + Some(LabelGesture::Set(Some(Purple))) + ); + } + + #[test] + fn a_label_is_reported_by_name() { + // The status line names the label in words, never only by its mark. + assert_eq!( + label_summary(1, Some(dr_types::ColourLabel::Green)), + "Green label" + ); + assert_eq!(label_summary(3, None), "3 images · no label"); + } + // --- what the status line says about a keyword (FR-CAT-5) ------------- // // Split out from the callback for the same reason `decide_drop` is: the diff --git a/ui/dr-ui/src/library_ui/timeline.rs b/ui/dr-ui/src/library_ui/timeline.rs index d3f9224..515088e 100644 --- a/ui/dr-ui/src/library_ui/timeline.rs +++ b/ui/dr-ui/src/library_ui/timeline.rs @@ -927,6 +927,11 @@ fn push_filter(window: &AppWindow, ctl: &Rc) { window .global::() .set_library_filter_eyes_open(filter.eyes_open); + window.global::().set_library_filter_label( + filter + .label + .map_or(0, |l| dr_catalog::rating::label_code(l) as i32), + ); push_people_chips(window, ctl); } diff --git a/ui/dr-ui/src/library_ui/window.rs b/ui/dr-ui/src/library_ui/window.rs index 222e808..af2b90e 100644 --- a/ui/dr-ui/src/library_ui/window.rs +++ b/ui/dr-ui/src/library_ui/window.rs @@ -19,7 +19,7 @@ use crate::{AppWindow, Library, LibraryCell}; use super::controller::{stop, LibraryController, LibraryFacts}; use super::filter_bar::period_headings; use super::offline::{collection_images, refresh_offline, scope_is_pinned}; -use super::ratings_keywords::{refresh_rating_counts, sync_ratings}; +use super::ratings_keywords::{refresh_label_counts, refresh_rating_counts, sync_ratings}; use super::sync::start_sweep; use super::timeline::{civil_from_unix, format_date, refresh_timeline, restore_position}; @@ -367,6 +367,7 @@ pub(super) fn load_window(window: &AppWindow, ctl: &Rc) { // window, not one per cell. rating: 0, flag: 0, + label: 0, // And by `bursts::sync_badges`, in one more query for the // window. Zero is "not in a burst", which is what almost every // photograph in a library is. @@ -424,6 +425,7 @@ pub(super) fn load_window(window: &AppWindow, ctl: &Rc) { // so a cull still watches its own chips move. if describes_something_new { refresh_rating_counts(window, catalog); + refresh_label_counts(window, catalog); } // The library got shorter while the view was looking at it — a delete. diff --git a/ui/dr-ui/src/place.rs b/ui/dr-ui/src/place.rs index 6d44ca2..cafa800 100644 --- a/ui/dr-ui/src/place.rs +++ b/ui/dr-ui/src/place.rs @@ -33,6 +33,7 @@ impl From<&RatingFilter> for StoredFilter { people: f.people.clone(), people_all: matches!(f.people_mode, PeopleMode::All), eyes_open: f.eyes_open, + label: f.label, } } } @@ -54,6 +55,7 @@ impl From<&StoredFilter> for RatingFilter { PeopleMode::Any }, eyes_open: s.eyes_open, + label: s.label, } } } @@ -189,6 +191,7 @@ mod tests { people: vec![7, 9], people_all: true, eyes_open: true, + label: Some(dr_types::ColourLabel::Green), }, } } @@ -312,6 +315,7 @@ mod tests { people: vec![3, 5, 8], people_mode: PeopleMode::All, eyes_open: true, + label: Some(dr_types::ColourLabel::Purple), }; let back: RatingFilter = (&StoredFilter::from(&original)).into(); assert_eq!(back, original); diff --git a/ui/dr-ui/style.yaml b/ui/dr-ui/style.yaml index 1295526..46837f9 100644 --- a/ui/dr-ui/style.yaml +++ b/ui/dr-ui/style.yaml @@ -142,6 +142,21 @@ colors: and a hue would imply it were one series among four rather than the one the other three are decomposing. + _labels: + section: colour labels + note: | + The five colour labels (FR-CAT-5). The same exception the plot series + take: a label's name *is* a colour, so its mark is filled with it. Held + to mid-tones so one dark ink reads on every fill — the mark carries the + label's initial in `ground`, which is what keeps it legible without hue + (NFR-A11Y-3). + + label-red: "#D0666E" + label-yellow: "#D6B84E" + label-green: "#72B06E" + label-blue: "#6A96D4" + label-purple: "#A988D0" + lengths: _gaps: { break: true } gap-sm: 6 diff --git a/ui/dr-ui/ui/app.slint b/ui/dr-ui/ui/app.slint index 087c9d7..bd01b50 100644 --- a/ui/dr-ui/ui/app.slint +++ b/ui/dr-ui/ui/app.slint @@ -1461,6 +1461,13 @@ in property panel-visible: true; // for one fact is how they come to disagree. viewing-trash: root.collection-selected == -1; judged(rating, flag, at) => { Library.library-judged(rating, flag, at); } + labelled(code, at) => { Library.library-labelled(code, at); } + label-chosen(code) => { Library.library-label-chosen(code); } + filter-label: Library.library-filter-label; + label-counts: Library.library-label-counts; + filter-label-changed(code) => { + Library.library-filter-label-changed(code); + } // `F2` renames whatever the grid is scoped to. Answered from // the sidebar's selection rather than a second property, for // the same reason `viewing-trash` above is: one fact, one @@ -1497,6 +1504,14 @@ in property panel-visible: true; fps: root.fps; expanded: root.expanded; filename: root.filename; + // TRACES: FR-CAT-5 + // The open photograph's label, read from its grid cell so the + // bar and the grid cannot disagree; -1 with no library. + colour-label: Library.library-total > 0 && Library.library-roll-current >= 0 + ? Library.library-cells[Library.library-roll-current].label : -1; + label-picked(code) => { + Library.library-cell-labelled(Library.library-roll-current, code, false); + } position: root.total > 0 ? root.index + 1 + " / " + root.total : ""; // Only where a library was opened; command-line files have no // grid to return to. @@ -2402,6 +2417,31 @@ in property panel-visible: true; Masking.selected-toggled(); return accept; } + // GESTURE: Give this photograph a colour label + // where: Develop + // touch: Tap Label in the top bar, then a + // colour + // pointer: Click Label in the top bar, then a + // colour + // keys: 6 red, 7 yellow, 8 green, 9 blue; the + // same key again takes it off + // why: 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. + // + // TRACES: FR-CAT-5 | FR-UI-5 | NFR-A11Y-3 + // Only with a library: a file named on the command + // line has no catalog to hold a label. + if (Library.library-total > 0 + && Library.library-roll-current >= 0 + && !event.modifiers.control) { + if (event.text == "6") { Library.library-cell-labelled(Library.library-roll-current, 1, true); return accept; } + if (event.text == "7") { Library.library-cell-labelled(Library.library-roll-current, 2, true); return accept; } + if (event.text == "8") { Library.library-cell-labelled(Library.library-roll-current, 3, true); return accept; } + if (event.text == "9") { Library.library-cell-labelled(Library.library-roll-current, 4, true); return accept; } + } // GESTURE: Move to the next or previous photograph // where: Develop // touch: Tap a frame in the roll along the diff --git a/ui/dr-ui/ui/develop.slint b/ui/dr-ui/ui/develop.slint index 50eb419..feb6dc3 100644 --- a/ui/dr-ui/ui/develop.slint +++ b/ui/dr-ui/ui/develop.slint @@ -11,6 +11,7 @@ import { Theme } from "theme.slint"; 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"; // Status strip — surfaces the GPU backend and adapter, which matters during // v0.1 because assumption A1 is exactly "does this compositing path work on @@ -43,6 +44,13 @@ export component StatusBar inherits Rectangle { /// Whether the edit can be stepped either way (FR-DEV-5). in property can-undo: false; in property can-redo: false; + /// TRACES: FR-CAT-5 + /// The open photograph's colour label code, 0 for none, -1 where there + /// is no library to hold one (files named on the command line). + in property colour-label: -1; + /// Whether the label choices are open in the strip. + property picking-label: false; + callback label-picked(int); callback back-to-library(); callback open-people(); @@ -115,6 +123,32 @@ export component StatusBar inherits Rectangle { Caption { text: root.position; } + // TRACES: FR-CAT-5 | FR-UI-4 | NFR-A11Y-3 + // The label, shown and set here. The button says the label's name + // beside its mark, so the strip reads "Label: Green" in words; with + // none it offers "Label". Pressing it opens the six choices in the + // strip, which close on the one chosen. + Button { + text: root.colour-label > 0 ? "Label: " + Labels.names[root.colour-label] : "Label"; + active: root.picking-label; + visible: root.colour-label >= 0; + y: (parent.height - self.height) / 2; + clicked => { root.picking-label = !root.picking-label; } + } + + if root.colour-label > 0: LabelMark { + code: root.colour-label; + y: (parent.height - self.height) / 2; + } + + if root.picking-label && root.colour-label >= 0: LabelPicker { + current: root.colour-label; + chosen(code) => { + root.label-picked(code); + root.picking-label = false; + } + } + Rectangle { horizontal-stretch: 1; } // --- instrumentation lives in Settings now ------------------------ diff --git a/ui/dr-ui/ui/labels.slint b/ui/dr-ui/ui/labels.slint new file mode 100644 index 0000000..f1577fe --- /dev/null +++ b/ui/dr-ui/ui/labels.slint @@ -0,0 +1,131 @@ +// TRACES: FR-CAT-5 | NFR-A11Y-3 +// Colour labels: the mark that shows one, and the row that chooses one. +// +// **A label is named, not only tinted.** NFR-A11Y-3 names colour labels as +// the first thing that must not be told apart by hue alone, and a colour +// label is the one status here whose *name* is a colour — so the temptation +// is exactly a swatch. Every mark therefore carries the label's initial +// (R, Y, G, B, P) in dark ink on the fill, and every place a label can be +// chosen or filtered on says its name in words. Red and green are the pair +// the commonest colour-vision deficiency merges, and they are "R" and "G" +// here before they are anything else. +// +// The integers are `versions.label`'s own codes (`dr_catalog::rating:: +// label_code`): 0 for none, 1 red, 2 yellow, 3 green, 4 blue, 5 purple. One +// numbering from the column to the pixel, so nothing translates between them. + +import { Theme } from "theme.slint"; + +/// TRACES: FR-CAT-5 | NFR-A11Y-3 +/// What each label code is called, and the letter its mark carries. +export global Labels { + /// Indexed by code. "None" at 0 is what the picker's clearing choice says. + out property <[string]> names: ["None", "Red", "Yellow", "Green", "Blue", "Purple"]; + /// The glyph on the mark, indexed by code. Distinct for every label: this + /// is what carries the label for an eye that does not separate the fills. + out property <[string]> letters: ["", "R", "Y", "G", "B", "P"]; + + /// The fill for a code. Data rather than chrome, the same exception the + /// histogram's traces take (see `style.yaml`): the label *is* a colour. + public pure function fill(code: int) -> color { + if (code == 1) { return Theme.label-red; } + if (code == 2) { return Theme.label-yellow; } + if (code == 3) { return Theme.label-green; } + if (code == 4) { return Theme.label-blue; } + if (code == 5) { return Theme.label-purple; } + return transparent; + } +} + +/// TRACES: FR-CAT-5 | NFR-A11Y-3 +/// One label, drawn: a rounded tag in the label's colour with its initial +/// on it. Invisible for code 0, so a caller can place it unconditionally. +export component LabelMark inherits Rectangle { + in property code: 0; + in property size: 16px; + + accessible-role: text; + accessible-label: Labels.names[root.code] + " label"; + + visible: root.code > 0 && root.code <= 5; + width: root.size; + height: root.size; + border-radius: root.size / 4; + background: Labels.fill(root.code); + // A rim in the ground colour, so a yellow tag on a pale sky still has an + // edge. + border-width: 1px; + border-color: Theme.ground; + + Text { + // The letter is the label. Dark ink on every fill: the fills are held + // to mid-tones in `style.yaml` so one ink reads on all five. + text: Labels.letters[root.code]; + color: Theme.ground; + font-size: root.size * 0.62; + font-weight: 800; + width: 100%; + height: 100%; + horizontal-alignment: center; + vertical-alignment: center; + } +} + +/// TRACES: FR-CAT-5 | FR-UI-4 | NFR-A11Y-3 +/// The six choices — none, then the five labels — each a mark and a word. +/// +/// Inline rather than a popup: it opens in the bar that asked for it, where +/// a finger already is, and there is no second surface to dismiss. +export component LabelPicker inherits HorizontalLayout { + /// The code currently carried, drawn as pressed. -1 where the photographs + /// being labelled disagree, so nothing is shown as chosen. + in property current: -1; + + callback chosen(int); + + spacing: 4px; + + for code in [0, 1, 2, 3, 4, 5]: Rectangle { + accessible-role: button; + accessible-label: code == 0 ? "No label" : Labels.names[code] + " label"; + accessible-checkable: true; + accessible-checked: root.current == code; + accessible-action-default => { root.chosen(code); } + + height: Theme.control-height - 4px; + width: row.preferred-width + 2 * Theme.gap-sm; + y: (parent.height - self.height) / 2; + border-radius: Theme.radius; + border-width: 1px; + border-color: root.current == code ? Theme.active : Theme.rule; + background: touch.pressed ? Theme.pressed + : (touch.has-hover ? Theme.hover : Theme.surface-raised); + + touch := TouchArea { + width: 100%; + height: max(parent.height, Theme.touch-target); + y: (parent.height - self.height) / 2; + mouse-cursor: pointer; + clicked => { root.chosen(code); } + } + + row := HorizontalLayout { + padding-left: Theme.gap-sm; + padding-right: Theme.gap-sm; + spacing: 4px; + + if code > 0: LabelMark { + code: code; + size: 14px; + y: (parent.height - self.height) / 2; + } + + Text { + text: Labels.names[code]; + color: Theme.ink; + font-size: Theme.text-sm; + vertical-alignment: center; + } + } + } +} diff --git a/ui/dr-ui/ui/library.slint b/ui/dr-ui/ui/library.slint index 5f842b0..3cc6bde 100644 --- a/ui/dr-ui/ui/library.slint +++ b/ui/dr-ui/ui/library.slint @@ -15,6 +15,7 @@ import { Button, IconButton, Label, Value, Caption, EmptyState, FilterChip, Prog // too many. import { CollectionRow } from "collections.slint"; import { GestureSheet, GestureRow } from "gestures.slint"; +import { Labels, LabelMark, LabelPicker } from "labels.slint"; // TRACES: FR-CAT-5 // One keyword in the keywording sheet, already answered against the selection. @@ -462,6 +463,10 @@ export struct LibraryCell { // 0 unflagged, 1 pick, 2 reject. Independent of the stars: rejecting a // four-star frame is a normal thing to do mid-cull. flag: int, + // TRACES: FR-CAT-5 + // The colour label: 0 none, 1..5 red, yellow, green, blue, purple — + // `versions.label`'s own codes (see labels.slint). + label: int, // Frames in the burst this cell belongs to (FR-CULL-5), itself included; 0 where it // belongs to none, which is most of a library. A burst that is collapsed // draws only its representative, so on that cell this is the count of what @@ -640,6 +645,26 @@ export global Library { /// cell under the pointer, or -1: Rust applies the key to that photograph /// alone unless it is part of the selection (darktable's rule). callback library-judged(int, int, int); + /// TRACES: FR-CAT-5 | FR-UI-5 + /// A label key (6-9) was pressed in the grid: the label code, then the + /// ordinal under the pointer or -1, which reaches the same photographs a + /// rating key would. The key toggles — see `dr_catalog::rating:: + /// toggled_label`. + callback library-labelled(int, int); + /// TRACES: FR-CAT-5 | FR-UI-4 + /// A label was chosen from the selection bar's picker, 0 for none. Sets + /// rather than toggles: the picker names the answer outright. + callback library-label-chosen(int); + /// TRACES: FR-CAT-5 + /// One photograph by row, from develop: the code, and whether it toggles + /// (a key) or sets (the picker). + callback library-cell-labelled(int, int, bool); + /// TRACES: FR-CAT-6 + /// The label the grid is narrowed to, 0 for none; and the images behind + /// each label, index 0 unlabelled, for the chips. + in property library-filter-label: 0; + in-out property <[int]> library-label-counts; + callback library-filter-label-changed(int); in property library-filter-min-rating: 0; /// TRACES: FR-UI-5 /// The top of a star range, 5 where there is none, and the F chord that @@ -1519,6 +1544,15 @@ export component LibraryGrid inherits Rectangle { /// star, so neither axis is disturbed by a press on the other. The third /// is `hover-ordinal`: which photograph the pointer is over, if any. callback judged(int, int, int); + /// TRACES: FR-CAT-5 | FR-UI-5 + /// A label key, with `hover-ordinal` as for `judged`. + callback labelled(int, int); + /// TRACES: FR-CAT-5 | FR-UI-4 + /// A label chosen from the selection bar, 0 for none. + callback label-chosen(int); + /// Whether the selection bar's label picker is open. Local, like + /// `keywording`. + property labelling: false; /// TRACES: FR-UI-5 /// The library ordinal of the cell under the pointer, -1 when none. @@ -1810,6 +1844,11 @@ export component LibraryGrid inherits Rectangle { callback filter-min-rating-changed(int); callback filter-unjudged-toggled(bool); callback filter-flag-changed(int); + /// TRACES: FR-CAT-6 + /// The colour label narrowed to, 0 for none, and each label's count. + in property filter-label: 0; + in property <[int]> label-counts; + callback filter-label-changed(int); // --- offline (FR-CAT-9) ------------------------------------------------- // @@ -2342,7 +2381,7 @@ export component LibraryGrid inherits Rectangle { // Hidden while there is nothing to filter: an empty library offering // six rating buttons is chrome describing data that does not exist. if root.total > 0 || root.filter-min-rating > 0 || root.filter-unjudged - || root.filter-flag > 0 || root.filter-people.length > 0 + || root.filter-flag > 0 || root.filter-label > 0 || root.filter-people.length > 0 || root.filter-eyes-open: Rectangle { height: 34px; background: Theme.surface; @@ -2481,12 +2520,14 @@ export component LibraryGrid inherits Rectangle { FilterChip { label: "All"; active: root.filter-min-rating == 0 && root.filter-max-rating >= 5 - && !root.filter-unjudged && root.filter-flag == 0; + && !root.filter-unjudged && root.filter-flag == 0 + && root.filter-label == 0; y: (parent.height - self.height) / 2; clicked => { root.filter-rating-range(0, 5); root.filter-unjudged-toggled(false); root.filter-flag-changed(0); + root.filter-label-changed(0); } } @@ -2558,6 +2599,32 @@ export component LibraryGrid inherits Rectangle { Rectangle { width: Theme.gap; } + // GESTURE: Show only photographs with one colour label + // where: Library grid + // touch: Tap its chip in the filter bar + // pointer: Click its chip in the filter bar + // why: 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. + // + // TRACES: FR-CAT-6 | NFR-A11Y-3 + // One chip per colour label, each the cell's own mark and the + // label's name — never a bare swatch, which is the control + // NFR-A11Y-3 was written against. One label at a time, and + // pressing the lit one clears it, as the flag chips do. + for n in [1, 2, 3, 4, 5]: FilterChip { + colour-label: n; + label: Labels.names[n]; + count: root.label-counts.length > n ? root.label-counts[n] : -1; + active: root.filter-label == n; + y: (parent.height - self.height) / 2; + clicked => { + root.filter-label-changed(root.filter-label == n ? 0 : n); + } + } + + Rectangle { width: Theme.gap; } + // Locally-stored originals. Always offered, not only when // offline: "what can I actually work on right now" is a fair // question on a slow connection too, and a control that @@ -2597,7 +2664,8 @@ export component LibraryGrid inherits Rectangle { // single most confusing state a filter can leave behind. Caption { text: (root.filter-min-rating > 0 || root.filter-unjudged - || root.filter-flag > 0 || root.local-only + || root.filter-flag > 0 || root.filter-label > 0 + || root.local-only || root.filter-eyes-open) ? "filtered" : ""; emphasised: true; @@ -2980,6 +3048,10 @@ export component LibraryGrid inherits Rectangle { root.keywording = false; return accept; } + if (root.labelling) { + root.labelling = false; + return accept; + } if (root.filing) { root.filing = false; return accept; @@ -3085,6 +3157,29 @@ export component LibraryGrid inherits Rectangle { if (event.text == "3") { root.judged(3, -1, root.hover-ordinal); return accept; } if (event.text == "4") { root.judged(4, -1, root.hover-ordinal); return accept; } if (event.text == "5") { root.judged(5, -1, root.hover-ordinal); return accept; } + // GESTURE: Give photographs a colour label + // where: Library grid + // touch: Select them, then Label in the selection bar + // and tap a colour + // pointer: Select them, then Label in the selection bar + // and click a colour + // keys: 6 red, 7 yellow, 8 green, 9 blue, with the + // pointer over it or on the selection; the + // same key again takes the label off + // why: 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. + // + // TRACES: FR-CAT-5 | FR-UI-5 | NFR-A11Y-3 + // After the F chord above, which has returned for its own + // digits (0-5 only), so these never filter. + if (event.text == "6") { root.labelled(1, root.hover-ordinal); return accept; } + if (event.text == "7") { root.labelled(2, root.hover-ordinal); return accept; } + if (event.text == "8") { root.labelled(3, root.hover-ordinal); return accept; } + if (event.text == "9") { root.labelled(4, root.hover-ordinal); return accept; } // Case-insensitive: caps lock during a long cull must not // silently stop the keys working. if (event.text == "p" || event.text == "P") { @@ -3629,10 +3724,25 @@ export component LibraryGrid inherits Rectangle { } - Label { - text: cell.name; - emphasised: cell.selected; - overflow: elide; + // TRACES: FR-CAT-5 | NFR-A11Y-3 + // The colour label leads the caption: on the + // photograph it would compete with the flag and the + // badges for four corners, and here it is read with + // the name, in the row every cell already has. + HorizontalLayout { + spacing: 4px; + + if cell.label > 0: LabelMark { + code: cell.label; + size: 14px; + y: (parent.height - self.height) / 2; + } + + Label { + text: cell.name; + emphasised: cell.selected; + overflow: elide; + } } } @@ -4734,6 +4844,23 @@ export component LibraryGrid inherits Rectangle { } } + // TRACES: FR-CAT-5 | FR-UI-4 + // Label the selection. Opens the six choices in the bar itself — + // a mark and a name each — and closes on the one chosen. + if !root.ranging && root.selected-count > 0: Button { + text: "Label"; + active: root.labelling; + y: (parent.height - self.height) / 2; + clicked => { root.labelling = !root.labelling; } + } + + if !root.ranging && root.selected-count > 0 && root.labelling: LabelPicker { + chosen(code) => { + root.label-chosen(code); + root.labelling = 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/widgets.slint b/ui/dr-ui/ui/widgets.slint index 205f299..3fbfd9a 100644 --- a/ui/dr-ui/ui/widgets.slint +++ b/ui/dr-ui/ui/widgets.slint @@ -31,6 +31,7 @@ import { Theme } from "theme.slint"; import { Icon } from "icons.slint"; +import { LabelMark } from "labels.slint"; export { Icon } @@ -267,6 +268,12 @@ export component FilterChip inherits Rectangle { /// Drawn rather than prefixed to `label`, because a symbol inside a string /// is exactly the thing [`Icon`] exists to stop (see icons.slint). in property icon; + /// TRACES: FR-CAT-6 | NFR-A11Y-3 + /// A colour label's mark before the word, for the label chips — the + /// same mark the grid cell carries, so the chip and the photographs it + /// narrows to are visibly one thing. 0 for none. The word stays: the + /// mark's letter is the fallback for the eye, the name is the chip. + in property colour-label: 0; callback clicked(); @@ -323,6 +330,12 @@ export component FilterChip inherits Rectangle { y: (parent.height - self.height) / 2; } + if root.colour-label > 0: LabelMark { + code: root.colour-label; + size: 14px; + y: (parent.height - self.height) / 2; + } + Text { text: root.label; // Dark on the active fill, which is near-white — the same