From 33779a70bd89f064cfbabe4c41eb5358140e7bf1 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Tue, 22 Sep 2026 21:29:29 -0400 Subject: [PATCH] Answer a thumbnail miss with the other stored class before the network MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Offline, a grid zoomed past 256px was blank wherever it had not been zoomed over before. The store was asked only for the exact class the cell wanted, and the sweep stores only the grid class, so every zoomed cell missed and went to a server that was not there — with its 256px thumbnail sitting in the store the whole time. Online it cost the same round trip, just without the blank cell at the end of it. The split now tries the other class on a miss. A smaller one stands in and the fetch for the real class still goes out; a larger one answers the request outright, since there is nothing a fetch would improve on. `ThumbnailReady` carries the class its pixels are, and the drain records that rather than the batch's class, so a stand-in is replaced on the next reload instead of being counted as served. `already_served` counts a held large thumbnail as serving the grid class too, so zooming back out does not re-read the store for pixels already on screen. The split moves into `split_by_store` so it can be tested without a worker thread or a network. --- docs/dev/traceability.md | 18 +- ui/dr-ui/src/library/cells.rs | 1 + ui/dr-ui/src/library/thumbnails_gen.rs | 235 ++++++++++++++++++++----- ui/dr-ui/src/library_ui/window.rs | 47 ++++- 4 files changed, 244 insertions(+), 57 deletions(-) diff --git a/docs/dev/traceability.md b/docs/dev/traceability.md index 1d62117..b3c7739 100644 --- a/docs/dev/traceability.md +++ b/docs/dev/traceability.md @@ -36,7 +36,7 @@ _None._ |---|---| | FR-CAT-1 | [`core/dr-catalog/src/scan.rs:1`](../../core/dr-catalog/src/scan.rs#L1), [`core/dr-catalog/src/walk.rs:108`](../../core/dr-catalog/src/walk.rs#L108), [`core/dr-catalog/src/walk.rs:161`](../../core/dr-catalog/src/walk.rs#L161), [`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:206`](../../core/dr-types/src/lib.rs#L206), [`core/dr-types/src/lib.rs:275`](../../core/dr-types/src/lib.rs#L275), [`core/dr-types/src/lib.rs:308`](../../core/dr-types/src/lib.rs#L308), [`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/cards.rs:1`](../../ui/dr-ui/src/cards.rs#L1), [`ui/dr-ui/src/import.rs:1`](../../ui/dr-ui/src/import.rs#L1), [`ui/dr-ui/src/import.rs:345`](../../ui/dr-ui/src/import.rs#L345), [`ui/dr-ui/src/import_ui.rs:1`](../../ui/dr-ui/src/import_ui.rs#L1), [`ui/dr-ui/src/lib.rs:1946`](../../ui/dr-ui/src/lib.rs#L1946), [`ui/dr-ui/ui/import.slint:6`](../../ui/dr-ui/ui/import.slint#L6), [`ui/dr-ui/ui/library.slint:1370`](../../ui/dr-ui/ui/library.slint#L1370), [`ui/dr-ui/ui/library.slint:1424`](../../ui/dr-ui/ui/library.slint#L1424), [`ui/dr-ui/ui/library.slint:1686`](../../ui/dr-ui/ui/library.slint#L1686) | -| 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:1946`](../../ui/dr-ui/src/lib.rs#L1946), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/thumbnails_gen.rs:526`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L526), [`ui/dr-ui/ui/import.slint:6`](../../ui/dr-ui/ui/import.slint#L6) | +| 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:1946`](../../ui/dr-ui/src/lib.rs#L1946), [`ui/dr-ui/src/library/filters.rs:12`](../../ui/dr-ui/src/library/filters.rs#L12), [`ui/dr-ui/src/library/thumbnails_gen.rs:601`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L601), [`ui/dr-ui/ui/import.slint:6`](../../ui/dr-ui/ui/import.slint#L6) | | FR-CAT-11a | [`core/dr-catalog/src/duplicates.rs:1`](../../core/dr-catalog/src/duplicates.rs#L1), [`core/dr-catalog/src/error.rs:110`](../../core/dr-catalog/src/error.rs#L110), [`core/dr-catalog/src/faces.rs:1662`](../../core/dr-catalog/src/faces.rs#L1662), [`core/dr-catalog/src/faces.rs:1680`](../../core/dr-catalog/src/faces.rs#L1680), [`ui/dr-ui/src/duplicates.rs:1`](../../ui/dr-ui/src/duplicates.rs#L1), [`ui/dr-ui/src/duplicates_ui.rs:1`](../../ui/dr-ui/src/duplicates_ui.rs#L1), [`ui/dr-ui/src/duplicates_ui.rs:79`](../../ui/dr-ui/src/duplicates_ui.rs#L79), [`ui/dr-ui/src/lib.rs:1976`](../../ui/dr-ui/src/lib.rs#L1976), [`ui/dr-ui/src/lib.rs:3613`](../../ui/dr-ui/src/lib.rs#L3613), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:671`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L671), [`ui/dr-ui/ui/app.slint:83`](../../ui/dr-ui/ui/app.slint#L83), [`ui/dr-ui/ui/collections.slint:897`](../../ui/dr-ui/ui/collections.slint#L897), [`ui/dr-ui/ui/duplicates.slint:1`](../../ui/dr-ui/ui/duplicates.slint#L1), [`ui/dr-ui/ui/settings.slint:108`](../../ui/dr-ui/ui/settings.slint#L108), [`ui/dr-ui/ui/settings.slint:512`](../../ui/dr-ui/ui/settings.slint#L512) | | 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:875`](../../core/dr-catalog/src/schema.rs#L875), [`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:336`](../../ui/dr-ui/src/library/scan.rs#L336), [`ui/dr-ui/src/library/xmp.rs:10`](../../ui/dr-ui/src/library/xmp.rs#L10), [`ui/dr-ui/src/library/xmp.rs:133`](../../ui/dr-ui/src/library/xmp.rs#L133), [`ui/dr-ui/src/library/xmp.rs:26`](../../ui/dr-ui/src/library/xmp.rs#L26), [`ui/dr-ui/src/library_ui/controller.rs:336`](../../ui/dr-ui/src/library_ui/controller.rs#L336), [`ui/dr-ui/src/library_ui/controller.rs:427`](../../ui/dr-ui/src/library_ui/controller.rs#L427), [`ui/dr-ui/src/library_ui/controller.rs:578`](../../ui/dr-ui/src/library_ui/controller.rs#L578), [`ui/dr-ui/src/library_ui/grid.rs:216`](../../ui/dr-ui/src/library_ui/grid.rs#L216), [`ui/dr-ui/src/library_ui/open.rs:502`](../../ui/dr-ui/src/library_ui/open.rs#L502), [`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:671`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L671), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:700`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L700), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:756`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L756), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:855`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L855), [`ui/dr-ui/src/settings_ui.rs:524`](../../ui/dr-ui/src/settings_ui.rs#L524), [`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:664`](../../ui/dr-ui/ui/app.slint#L664), [`ui/dr-ui/ui/settings.slint:210`](../../ui/dr-ui/ui/settings.slint#L210), [`ui/dr-ui/ui/settings.slint:989`](../../ui/dr-ui/ui/settings.slint#L989) | @@ -47,9 +47,9 @@ _None._ | 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:603`](../../core/dr-catalog/src/schema.rs#L603), [`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/layout.rs:1`](../../ui/dr-ui/src/library_ui/layout.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:495`](../../ui/dr-ui/ui/library.slint#L495) | | 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/name_dates.rs:1`](../../core/dr-catalog/src/name_dates.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:827`](../../core/dr-catalog/src/rating.rs#L827), [`core/dr-catalog/src/rating.rs:851`](../../core/dr-catalog/src/rating.rs#L851), [`core/dr-catalog/src/rating.rs:870`](../../core/dr-catalog/src/rating.rs#L870), [`core/dr-catalog/src/schema.rs:1164`](../../core/dr-catalog/src/schema.rs#L1164), [`core/dr-catalog/src/schema.rs:1751`](../../core/dr-catalog/src/schema.rs#L1751), [`core/dr-catalog/src/schema.rs:359`](../../core/dr-catalog/src/schema.rs#L359), [`core/dr-decode/src/lib.rs:308`](../../core/dr-decode/src/lib.rs#L308), [`core/dr-decode/src/lib.rs:314`](../../core/dr-decode/src/lib.rs#L314), [`core/dr-decode/src/lib.rs:324`](../../core/dr-decode/src/lib.rs#L324), [`core/dr-decode/src/lib.rs:451`](../../core/dr-decode/src/lib.rs#L451), [`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:2876`](../../core/dr-pipeline/src/sidecar.rs#L2876), [`core/dr-pipeline/src/sidecar.rs:2894`](../../core/dr-pipeline/src/sidecar.rs#L2894), [`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:209`](../../ui/dr-ui/src/collections_ui/controller.rs#L209), [`ui/dr-ui/src/collections_ui/controller.rs:418`](../../ui/dr-ui/src/collections_ui/controller.rs#L418), [`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:185`](../../ui/dr-ui/src/decoder_seam.rs#L185), [`ui/dr-ui/src/library/cells.rs:202`](../../ui/dr-ui/src/library/cells.rs#L202), [`ui/dr-ui/src/library/scan.rs:527`](../../ui/dr-ui/src/library/scan.rs#L527), [`ui/dr-ui/src/library/scan.rs:917`](../../ui/dr-ui/src/library/scan.rs#L917), [`ui/dr-ui/src/library_ui/controller.rs:858`](../../ui/dr-ui/src/library_ui/controller.rs#L858), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1154`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1154), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1178`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1178), [`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:1195`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1195), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1401`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1401), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1412`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1412), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1425`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1425), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1440`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1440), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1449`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1449), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:97`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L97), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:177`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L177), [`ui/dr-ui/tests/status_is_not_colour_alone.rs:215`](../../ui/dr-ui/tests/status_is_not_colour_alone.rs#L215), [`ui/dr-ui/ui/app.slint:1678`](../../ui/dr-ui/ui/app.slint#L1678), [`ui/dr-ui/ui/app.slint:2877`](../../ui/dr-ui/ui/app.slint#L2877), [`ui/dr-ui/ui/develop.slint:142`](../../ui/dr-ui/ui/develop.slint#L142), [`ui/dr-ui/ui/develop.slint:48`](../../ui/dr-ui/ui/develop.slint#L48), [`ui/dr-ui/ui/labels.slint:19`](../../ui/dr-ui/ui/labels.slint#L19), [`ui/dr-ui/ui/labels.slint:1`](../../ui/dr-ui/ui/labels.slint#L1), [`ui/dr-ui/ui/labels.slint:40`](../../ui/dr-ui/ui/labels.slint#L40), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1640`](../../ui/dr-ui/ui/library.slint#L1640), [`ui/dr-ui/ui/library.slint:1643`](../../ui/dr-ui/ui/library.slint#L1643), [`ui/dr-ui/ui/library.slint:1794`](../../ui/dr-ui/ui/library.slint#L1794), [`ui/dr-ui/ui/library.slint:1818`](../../ui/dr-ui/ui/library.slint#L1818), [`ui/dr-ui/ui/library.slint:1875`](../../ui/dr-ui/ui/library.slint#L1875), [`ui/dr-ui/ui/library.slint:21`](../../ui/dr-ui/ui/library.slint#L21), [`ui/dr-ui/ui/library.slint:3235`](../../ui/dr-ui/ui/library.slint#L3235), [`ui/dr-ui/ui/library.slint:3242`](../../ui/dr-ui/ui/library.slint#L3242), [`ui/dr-ui/ui/library.slint:3262`](../../ui/dr-ui/ui/library.slint#L3262), [`ui/dr-ui/ui/library.slint:3351`](../../ui/dr-ui/ui/library.slint#L3351), [`ui/dr-ui/ui/library.slint:3967`](../../ui/dr-ui/ui/library.slint#L3967), [`ui/dr-ui/ui/library.slint:467`](../../ui/dr-ui/ui/library.slint#L467), [`ui/dr-ui/ui/library.slint:495`](../../ui/dr-ui/ui/library.slint#L495), [`ui/dr-ui/ui/library.slint:5095`](../../ui/dr-ui/ui/library.slint#L5095), [`ui/dr-ui/ui/library.slint:5111`](../../ui/dr-ui/ui/library.slint#L5111), [`ui/dr-ui/ui/library.slint:522`](../../ui/dr-ui/ui/library.slint#L522), [`ui/dr-ui/ui/library.slint:643`](../../ui/dr-ui/ui/library.slint#L643), [`ui/dr-ui/ui/library.slint:687`](../../ui/dr-ui/ui/library.slint#L687), [`ui/dr-ui/ui/library.slint:693`](../../ui/dr-ui/ui/library.slint#L693), [`ui/dr-ui/ui/library.slint:697`](../../ui/dr-ui/ui/library.slint#L697) | | 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:880`](../../core/dr-catalog/src/rating.rs#L880), [`core/dr-catalog/src/schema.rs:1164`](../../core/dr-catalog/src/schema.rs#L1164), [`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:262`](../../ui/dr-ui/src/library/spans.rs#L262), [`ui/dr-ui/src/library_ui/controller.rs:431`](../../ui/dr-ui/src/library_ui/controller.rs#L431), [`ui/dr-ui/src/library_ui/controller.rs:546`](../../ui/dr-ui/src/library_ui/controller.rs#L546), [`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:841`](../../ui/dr-ui/src/library_ui/filter_bar.rs#L841), [`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:660`](../../ui/dr-ui/ui/app.slint#L660), [`ui/dr-ui/ui/library.slint:113`](../../ui/dr-ui/ui/library.slint#L113), [`ui/dr-ui/ui/library.slint:1962`](../../ui/dr-ui/ui/library.slint#L1962), [`ui/dr-ui/ui/library.slint:1999`](../../ui/dr-ui/ui/library.slint#L1999), [`ui/dr-ui/ui/library.slint:2736`](../../ui/dr-ui/ui/library.slint#L2736), [`ui/dr-ui/ui/library.slint:3262`](../../ui/dr-ui/ui/library.slint#L3262), [`ui/dr-ui/ui/library.slint:495`](../../ui/dr-ui/ui/library.slint#L495), [`ui/dr-ui/ui/library.slint:5095`](../../ui/dr-ui/ui/library.slint#L5095), [`ui/dr-ui/ui/library.slint:643`](../../ui/dr-ui/ui/library.slint#L643), [`ui/dr-ui/ui/library.slint:701`](../../ui/dr-ui/ui/library.slint#L701), [`ui/dr-ui/ui/library.slint:723`](../../ui/dr-ui/ui/library.slint#L723), [`ui/dr-ui/ui/settings.slint:202`](../../ui/dr-ui/ui/settings.slint#L202), [`ui/dr-ui/ui/widgets.slint:271`](../../ui/dr-ui/ui/widgets.slint#L271) | -| FR-CAT-7 | [`core/dr-catalog/src/albums.rs:1`](../../core/dr-catalog/src/albums.rs#L1), [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/dedup_people.rs:1`](../../core/dr-catalog/src/dedup_people.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:263`](../../ui/dr-ui/src/collections_ui/controller.rs#L263), [`ui/dr-ui/src/collections_ui/controller.rs:273`](../../ui/dr-ui/src/collections_ui/controller.rs#L273), [`ui/dr-ui/src/collections_ui/controller.rs:296`](../../ui/dr-ui/src/collections_ui/controller.rs#L296), [`ui/dr-ui/src/collections_ui/controller.rs:317`](../../ui/dr-ui/src/collections_ui/controller.rs#L317), [`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:251`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L251), [`ui/dr-ui/src/collections_ui/tree_sync.rs:322`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L322), [`ui/dr-ui/src/collections_ui/tree_sync.rs:344`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L344), [`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:131`](../../ui/dr-ui/src/library/spans.rs#L131), [`ui/dr-ui/src/library/spans.rs:50`](../../ui/dr-ui/src/library/spans.rs#L50), [`ui/dr-ui/src/library/spans.rs:76`](../../ui/dr-ui/src/library/spans.rs#L76), [`ui/dr-ui/src/library_ui/sync.rs:220`](../../ui/dr-ui/src/library_ui/sync.rs#L220), [`ui/dr-ui/src/library_ui/timeline.rs:510`](../../ui/dr-ui/src/library_ui/timeline.rs#L510), [`ui/dr-ui/src/library_ui/window.rs:388`](../../ui/dr-ui/src/library_ui/window.rs#L388), [`ui/dr-ui/src/library_ui/window.rs:424`](../../ui/dr-ui/src/library_ui/window.rs#L424), [`ui/dr-ui/ui/app.slint:3572`](../../ui/dr-ui/ui/app.slint#L3572), [`ui/dr-ui/ui/collections.slint:1283`](../../ui/dr-ui/ui/collections.slint#L1283), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:616`](../../ui/dr-ui/ui/collections.slint#L616), [`ui/dr-ui/ui/library.slint:1389`](../../ui/dr-ui/ui/library.slint#L1389), [`ui/dr-ui/ui/library.slint:1760`](../../ui/dr-ui/ui/library.slint#L1760), [`ui/dr-ui/ui/library.slint:3716`](../../ui/dr-ui/ui/library.slint#L3716), [`ui/dr-ui/ui/library.slint:495`](../../ui/dr-ui/ui/library.slint#L495), [`ui/dr-ui/ui/library.slint:5073`](../../ui/dr-ui/ui/library.slint#L5073), [`ui/dr-ui/ui/library.slint:5215`](../../ui/dr-ui/ui/library.slint#L5215), [`ui/dr-ui/ui/library.slint:525`](../../ui/dr-ui/ui/library.slint#L525), [`ui/dr-ui/ui/library.slint:581`](../../ui/dr-ui/ui/library.slint#L581), [`ui/dr-ui/ui/library.slint:591`](../../ui/dr-ui/ui/library.slint#L591) | +| FR-CAT-7 | [`core/dr-catalog/src/albums.rs:1`](../../core/dr-catalog/src/albums.rs#L1), [`core/dr-catalog/src/collections.rs:1`](../../core/dr-catalog/src/collections.rs#L1), [`core/dr-catalog/src/dedup_people.rs:1`](../../core/dr-catalog/src/dedup_people.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:263`](../../ui/dr-ui/src/collections_ui/controller.rs#L263), [`ui/dr-ui/src/collections_ui/controller.rs:273`](../../ui/dr-ui/src/collections_ui/controller.rs#L273), [`ui/dr-ui/src/collections_ui/controller.rs:296`](../../ui/dr-ui/src/collections_ui/controller.rs#L296), [`ui/dr-ui/src/collections_ui/controller.rs:317`](../../ui/dr-ui/src/collections_ui/controller.rs#L317), [`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:251`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L251), [`ui/dr-ui/src/collections_ui/tree_sync.rs:322`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L322), [`ui/dr-ui/src/collections_ui/tree_sync.rs:344`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L344), [`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:131`](../../ui/dr-ui/src/library/spans.rs#L131), [`ui/dr-ui/src/library/spans.rs:50`](../../ui/dr-ui/src/library/spans.rs#L50), [`ui/dr-ui/src/library/spans.rs:76`](../../ui/dr-ui/src/library/spans.rs#L76), [`ui/dr-ui/src/library_ui/sync.rs:220`](../../ui/dr-ui/src/library_ui/sync.rs#L220), [`ui/dr-ui/src/library_ui/timeline.rs:510`](../../ui/dr-ui/src/library_ui/timeline.rs#L510), [`ui/dr-ui/src/library_ui/window.rs:400`](../../ui/dr-ui/src/library_ui/window.rs#L400), [`ui/dr-ui/src/library_ui/window.rs:436`](../../ui/dr-ui/src/library_ui/window.rs#L436), [`ui/dr-ui/ui/app.slint:3572`](../../ui/dr-ui/ui/app.slint#L3572), [`ui/dr-ui/ui/collections.slint:1283`](../../ui/dr-ui/ui/collections.slint#L1283), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:616`](../../ui/dr-ui/ui/collections.slint#L616), [`ui/dr-ui/ui/library.slint:1389`](../../ui/dr-ui/ui/library.slint#L1389), [`ui/dr-ui/ui/library.slint:1760`](../../ui/dr-ui/ui/library.slint#L1760), [`ui/dr-ui/ui/library.slint:3716`](../../ui/dr-ui/ui/library.slint#L3716), [`ui/dr-ui/ui/library.slint:495`](../../ui/dr-ui/ui/library.slint#L495), [`ui/dr-ui/ui/library.slint:5073`](../../ui/dr-ui/ui/library.slint#L5073), [`ui/dr-ui/ui/library.slint:5215`](../../ui/dr-ui/ui/library.slint#L5215), [`ui/dr-ui/ui/library.slint:525`](../../ui/dr-ui/ui/library.slint#L525), [`ui/dr-ui/ui/library.slint:581`](../../ui/dr-ui/ui/library.slint#L581), [`ui/dr-ui/ui/library.slint:591`](../../ui/dr-ui/ui/library.slint#L591) | | FR-CAT-8 | [`core/dr-catalog/src/schema.rs:779`](../../core/dr-catalog/src/schema.rs#L779), [`core/dr-pipeline/src/coverage.rs:1`](../../core/dr-pipeline/src/coverage.rs#L1), [`core/dr-pipeline/src/graph.rs:708`](../../core/dr-pipeline/src/graph.rs#L708), [`core/dr-pipeline/src/graph.rs:768`](../../core/dr-pipeline/src/graph.rs#L768), [`core/dr-pipeline/src/ops/curve.rs:137`](../../core/dr-pipeline/src/ops/curve.rs#L137), [`core/dr-pipeline/src/ops/curve.rs:690`](../../core/dr-pipeline/src/ops/curve.rs#L690), [`core/dr-pipeline/src/sidecar.rs:1433`](../../core/dr-pipeline/src/sidecar.rs#L1433), [`core/dr-pipeline/src/sidecar.rs:2275`](../../core/dr-pipeline/src/sidecar.rs#L2275), [`core/dr-pipeline/src/sidecar.rs:99`](../../core/dr-pipeline/src/sidecar.rs#L99), [`core/dr-pipeline/src/state.rs:1`](../../core/dr-pipeline/src/state.rs#L1), [`core/dr-pipeline/src/state.rs:75`](../../core/dr-pipeline/src/state.rs#L75), [`core/dr-pipeline/tests/tone_curve.rs:34`](../../core/dr-pipeline/tests/tone_curve.rs#L34), [`core/dr-sync/src/scan.rs:31`](../../core/dr-sync/src/scan.rs#L31), [`core/dr-sync/src/scan.rs:56`](../../core/dr-sync/src/scan.rs#L56), [`core/dr-sync/src/scan.rs:926`](../../core/dr-sync/src/scan.rs#L926), [`ui/dr-ui/src/develop/mask_ops.rs:1076`](../../ui/dr-ui/src/develop/mask_ops.rs#L1076), [`ui/dr-ui/src/develop/mask_ops.rs:1130`](../../ui/dr-ui/src/develop/mask_ops.rs#L1130), [`ui/dr-ui/src/develop/mask_ops.rs:178`](../../ui/dr-ui/src/develop/mask_ops.rs#L178), [`ui/dr-ui/src/develop/masks.rs:743`](../../ui/dr-ui/src/develop/masks.rs#L743), [`ui/dr-ui/src/develop/session.rs:738`](../../ui/dr-ui/src/develop/session.rs#L738), [`ui/dr-ui/src/develop/session.rs:772`](../../ui/dr-ui/src/develop/session.rs#L772), [`ui/dr-ui/src/export.rs:1312`](../../ui/dr-ui/src/export.rs#L1312), [`ui/dr-ui/src/lib.rs:1274`](../../ui/dr-ui/src/lib.rs#L1274), [`ui/dr-ui/src/lib.rs:1335`](../../ui/dr-ui/src/lib.rs#L1335), [`ui/dr-ui/src/lib.rs:2809`](../../ui/dr-ui/src/lib.rs#L2809), [`ui/dr-ui/src/lib.rs:3015`](../../ui/dr-ui/src/lib.rs#L3015), [`ui/dr-ui/src/lib.rs:810`](../../ui/dr-ui/src/lib.rs#L810), [`ui/dr-ui/src/lib.rs:880`](../../ui/dr-ui/src/lib.rs#L880), [`ui/dr-ui/src/library/scan.rs:227`](../../ui/dr-ui/src/library/scan.rs#L227), [`ui/dr-ui/src/library/scan.rs:262`](../../ui/dr-ui/src/library/scan.rs#L262), [`ui/dr-ui/src/library/scan.rs:35`](../../ui/dr-ui/src/library/scan.rs#L35), [`ui/dr-ui/src/library/sidecar.rs:103`](../../ui/dr-ui/src/library/sidecar.rs#L103), [`ui/dr-ui/src/library/sidecar.rs:12`](../../ui/dr-ui/src/library/sidecar.rs#L12), [`ui/dr-ui/src/library/sidecar.rs:381`](../../ui/dr-ui/src/library/sidecar.rs#L381), [`ui/dr-ui/src/library/sidecar.rs:66`](../../ui/dr-ui/src/library/sidecar.rs#L66), [`ui/dr-ui/src/library/thumbnails_fetch.rs:414`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L414), [`ui/dr-ui/src/library/thumbnails_fetch.rs:549`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L549), [`ui/dr-ui/src/library_ui/grid.rs:825`](../../ui/dr-ui/src/library_ui/grid.rs#L825), [`ui/dr-ui/src/library_ui/open.rs:519`](../../ui/dr-ui/src/library_ui/open.rs#L519), [`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:1221`](../../core/dr-catalog/src/schema.rs#L1221), [`core/dr-catalog/src/walk.rs:1000`](../../core/dr-catalog/src/walk.rs#L1000), [`core/dr-catalog/src/walk.rs:161`](../../core/dr-catalog/src/walk.rs#L161), [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`core/dr-catalog/src/walk.rs:432`](../../core/dr-catalog/src/walk.rs#L432), [`core/dr-catalog/src/walk.rs:695`](../../core/dr-catalog/src/walk.rs#L695), [`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:125`](../../core/dr-types/src/lib.rs#L125), [`ui/dr-ui/src/develop/render.rs:723`](../../ui/dr-ui/src/develop/render.rs#L723), [`ui/dr-ui/src/develop/render.rs:815`](../../ui/dr-ui/src/develop/render.rs#L815), [`ui/dr-ui/src/library/filters.rs:89`](../../ui/dr-ui/src/library/filters.rs#L89), [`ui/dr-ui/src/library/scan.rs:127`](../../ui/dr-ui/src/library/scan.rs#L127), [`ui/dr-ui/src/library/scan.rs:180`](../../ui/dr-ui/src/library/scan.rs#L180), [`ui/dr-ui/src/library/scan.rs:211`](../../ui/dr-ui/src/library/scan.rs#L211), [`ui/dr-ui/src/library/scan.rs:262`](../../ui/dr-ui/src/library/scan.rs#L262), [`ui/dr-ui/src/library/scan.rs:636`](../../ui/dr-ui/src/library/scan.rs#L636), [`ui/dr-ui/src/library/sidecar.rs:103`](../../ui/dr-ui/src/library/sidecar.rs#L103), [`ui/dr-ui/src/library/sidecar.rs:365`](../../ui/dr-ui/src/library/sidecar.rs#L365), [`ui/dr-ui/src/library/sidecar.rs:381`](../../ui/dr-ui/src/library/sidecar.rs#L381), [`ui/dr-ui/src/library/sidecar.rs:435`](../../ui/dr-ui/src/library/sidecar.rs#L435), [`ui/dr-ui/src/library/spans.rs:378`](../../ui/dr-ui/src/library/spans.rs#L378), [`ui/dr-ui/src/library/thumbnails_fetch.rs:394`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L394), [`ui/dr-ui/src/library/thumbnails_fetch.rs:450`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L450), [`ui/dr-ui/src/library/thumbnails_gen.rs:75`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L75), [`ui/dr-ui/src/library_ui/controller.rs:319`](../../ui/dr-ui/src/library_ui/controller.rs#L319), [`ui/dr-ui/src/library_ui/controller.rs:355`](../../ui/dr-ui/src/library_ui/controller.rs#L355), [`ui/dr-ui/src/library_ui/controller.rs:363`](../../ui/dr-ui/src/library_ui/controller.rs#L363), [`ui/dr-ui/src/library_ui/controller.rs:614`](../../ui/dr-ui/src/library_ui/controller.rs#L614), [`ui/dr-ui/src/library_ui/controller.rs:731`](../../ui/dr-ui/src/library_ui/controller.rs#L731), [`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:599`](../../ui/dr-ui/src/library_ui/open.rs#L599), [`ui/dr-ui/src/library_ui/open.rs:679`](../../ui/dr-ui/src/library_ui/open.rs#L679), [`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:890`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L890), [`ui/dr-ui/src/library_ui/sync.rs:272`](../../ui/dr-ui/src/library_ui/sync.rs#L272), [`ui/dr-ui/src/library_ui/sync.rs:406`](../../ui/dr-ui/src/library_ui/sync.rs#L406), [`ui/dr-ui/src/library_ui/sync.rs:84`](../../ui/dr-ui/src/library_ui/sync.rs#L84), [`ui/dr-ui/src/library_ui/window.rs:1107`](../../ui/dr-ui/src/library_ui/window.rs#L1107), [`ui/dr-ui/src/library_ui/window.rs:823`](../../ui/dr-ui/src/library_ui/window.rs#L823), [`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-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:1221`](../../core/dr-catalog/src/schema.rs#L1221), [`core/dr-catalog/src/walk.rs:1000`](../../core/dr-catalog/src/walk.rs#L1000), [`core/dr-catalog/src/walk.rs:161`](../../core/dr-catalog/src/walk.rs#L161), [`core/dr-catalog/src/walk.rs:1`](../../core/dr-catalog/src/walk.rs#L1), [`core/dr-catalog/src/walk.rs:432`](../../core/dr-catalog/src/walk.rs#L432), [`core/dr-catalog/src/walk.rs:695`](../../core/dr-catalog/src/walk.rs#L695), [`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:125`](../../core/dr-types/src/lib.rs#L125), [`ui/dr-ui/src/develop/render.rs:723`](../../ui/dr-ui/src/develop/render.rs#L723), [`ui/dr-ui/src/develop/render.rs:815`](../../ui/dr-ui/src/develop/render.rs#L815), [`ui/dr-ui/src/library/filters.rs:89`](../../ui/dr-ui/src/library/filters.rs#L89), [`ui/dr-ui/src/library/scan.rs:127`](../../ui/dr-ui/src/library/scan.rs#L127), [`ui/dr-ui/src/library/scan.rs:180`](../../ui/dr-ui/src/library/scan.rs#L180), [`ui/dr-ui/src/library/scan.rs:211`](../../ui/dr-ui/src/library/scan.rs#L211), [`ui/dr-ui/src/library/scan.rs:262`](../../ui/dr-ui/src/library/scan.rs#L262), [`ui/dr-ui/src/library/scan.rs:636`](../../ui/dr-ui/src/library/scan.rs#L636), [`ui/dr-ui/src/library/sidecar.rs:103`](../../ui/dr-ui/src/library/sidecar.rs#L103), [`ui/dr-ui/src/library/sidecar.rs:365`](../../ui/dr-ui/src/library/sidecar.rs#L365), [`ui/dr-ui/src/library/sidecar.rs:381`](../../ui/dr-ui/src/library/sidecar.rs#L381), [`ui/dr-ui/src/library/sidecar.rs:435`](../../ui/dr-ui/src/library/sidecar.rs#L435), [`ui/dr-ui/src/library/spans.rs:378`](../../ui/dr-ui/src/library/spans.rs#L378), [`ui/dr-ui/src/library/thumbnails_fetch.rs:394`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L394), [`ui/dr-ui/src/library/thumbnails_fetch.rs:450`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L450), [`ui/dr-ui/src/library/thumbnails_gen.rs:83`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L83), [`ui/dr-ui/src/library_ui/controller.rs:319`](../../ui/dr-ui/src/library_ui/controller.rs#L319), [`ui/dr-ui/src/library_ui/controller.rs:355`](../../ui/dr-ui/src/library_ui/controller.rs#L355), [`ui/dr-ui/src/library_ui/controller.rs:363`](../../ui/dr-ui/src/library_ui/controller.rs#L363), [`ui/dr-ui/src/library_ui/controller.rs:614`](../../ui/dr-ui/src/library_ui/controller.rs#L614), [`ui/dr-ui/src/library_ui/controller.rs:731`](../../ui/dr-ui/src/library_ui/controller.rs#L731), [`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:599`](../../ui/dr-ui/src/library_ui/open.rs#L599), [`ui/dr-ui/src/library_ui/open.rs:679`](../../ui/dr-ui/src/library_ui/open.rs#L679), [`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:890`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L890), [`ui/dr-ui/src/library_ui/sync.rs:272`](../../ui/dr-ui/src/library_ui/sync.rs#L272), [`ui/dr-ui/src/library_ui/sync.rs:406`](../../ui/dr-ui/src/library_ui/sync.rs#L406), [`ui/dr-ui/src/library_ui/sync.rs:84`](../../ui/dr-ui/src/library_ui/sync.rs#L84), [`ui/dr-ui/src/library_ui/window.rs:1122`](../../ui/dr-ui/src/library_ui/window.rs#L1122), [`ui/dr-ui/src/library_ui/window.rs:835`](../../ui/dr-ui/src/library_ui/window.rs#L835), [`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/dedup_people.rs:1`](../../core/dr-catalog/src/dedup_people.rs#L1), [`core/dr-catalog/src/faces.rs:1662`](../../core/dr-catalog/src/faces.rs#L1662), [`core/dr-catalog/src/faces.rs:1680`](../../core/dr-catalog/src/faces.rs#L1680), [`core/dr-catalog/src/faces.rs:1`](../../core/dr-catalog/src/faces.rs#L1), [`core/dr-catalog/src/schema.rs:1050`](../../core/dr-catalog/src/schema.rs#L1050), [`core/dr-catalog/src/schema.rs:642`](../../core/dr-catalog/src/schema.rs#L642), [`core/dr-catalog/src/schema.rs:820`](../../core/dr-catalog/src/schema.rs#L820), [`core/dr-face/src/assign.rs:1`](../../core/dr-face/src/assign.rs#L1), [`core/dr-face/src/neighbours.rs:1`](../../core/dr-face/src/neighbours.rs#L1), [`core/dr-face/src/references.rs:1`](../../core/dr-face/src/references.rs#L1), [`core/dr-types/src/settings.rs:129`](../../core/dr-types/src/settings.rs#L129), [`ui/dr-ui/src/develop/segmentation.rs:104`](../../ui/dr-ui/src/develop/segmentation.rs#L104), [`ui/dr-ui/src/develop/segmentation.rs:170`](../../ui/dr-ui/src/develop/segmentation.rs#L170), [`ui/dr-ui/src/develop/segmentation.rs:590`](../../ui/dr-ui/src/develop/segmentation.rs#L590), [`ui/dr-ui/src/develop/segmentation.rs:95`](../../ui/dr-ui/src/develop/segmentation.rs#L95), [`ui/dr-ui/src/develop/session.rs:23`](../../ui/dr-ui/src/develop/session.rs#L23), [`ui/dr-ui/src/faces.rs:1`](../../ui/dr-ui/src/faces.rs#L1), [`ui/dr-ui/src/identity.rs:1`](../../ui/dr-ui/src/identity.rs#L1), [`ui/dr-ui/src/identity_ui.rs:1472`](../../ui/dr-ui/src/identity_ui.rs#L1472), [`ui/dr-ui/src/identity_ui.rs:1`](../../ui/dr-ui/src/identity_ui.rs#L1), [`ui/dr-ui/src/lib.rs:2987`](../../ui/dr-ui/src/lib.rs#L2987), [`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:469`](../../ui/dr-ui/ui/settings.slint#L469), [`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:1050`](../../core/dr-catalog/src/schema.rs#L1050), [`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) | @@ -87,7 +87,7 @@ _None._ | FR-DEV-3j | [`core/dr-gpu/src/adjust.rs:1301`](../../core/dr-gpu/src/adjust.rs#L1301), [`core/dr-gpu/src/adjust.rs:1539`](../../core/dr-gpu/src/adjust.rs#L1539), [`core/dr-gpu/src/adjust.rs:3396`](../../core/dr-gpu/src/adjust.rs#L3396), [`core/dr-gpu/tests/camera_profile.rs:197`](../../core/dr-gpu/tests/camera_profile.rs#L197), [`core/dr-gpu/tests/scene_referred.rs:145`](../../core/dr-gpu/tests/scene_referred.rs#L145), [`core/dr-gpu/tests/scene_referred.rs:1`](../../core/dr-gpu/tests/scene_referred.rs#L1), [`core/dr-gpu/tests/view_transform.rs:114`](../../core/dr-gpu/tests/view_transform.rs#L114), [`core/dr-gpu/tests/view_transform.rs:137`](../../core/dr-gpu/tests/view_transform.rs#L137), [`core/dr-gpu/tests/view_transform.rs:163`](../../core/dr-gpu/tests/view_transform.rs#L163), [`core/dr-gpu/tests/view_transform.rs:1`](../../core/dr-gpu/tests/view_transform.rs#L1), [`core/dr-gpu/tests/view_transform.rs:201`](../../core/dr-gpu/tests/view_transform.rs#L201), [`core/dr-gpu/tests/view_transform.rs:63`](../../core/dr-gpu/tests/view_transform.rs#L63), [`core/dr-pipeline/src/camera_raw.rs:1`](../../core/dr-pipeline/src/camera_raw.rs#L1), [`core/dr-pipeline/src/camera_raw.rs:56`](../../core/dr-pipeline/src/camera_raw.rs#L56), [`core/dr-pipeline/src/operation.rs:1414`](../../core/dr-pipeline/src/operation.rs#L1414), [`core/dr-pipeline/src/operation.rs:2377`](../../core/dr-pipeline/src/operation.rs#L2377), [`core/dr-pipeline/src/operation.rs:2493`](../../core/dr-pipeline/src/operation.rs#L2493), [`core/dr-pipeline/src/operation.rs:2510`](../../core/dr-pipeline/src/operation.rs#L2510), [`core/dr-pipeline/src/operation.rs:2700`](../../core/dr-pipeline/src/operation.rs#L2700), [`core/dr-pipeline/src/operation.rs:2738`](../../core/dr-pipeline/src/operation.rs#L2738), [`core/dr-pipeline/src/operation.rs:580`](../../core/dr-pipeline/src/operation.rs#L580), [`core/dr-pipeline/src/operation.rs:880`](../../core/dr-pipeline/src/operation.rs#L880), [`core/dr-pipeline/src/operation.rs:930`](../../core/dr-pipeline/src/operation.rs#L930), [`core/dr-pipeline/src/ops/camera_profile.rs:384`](../../core/dr-pipeline/src/ops/camera_profile.rs#L384), [`core/dr-pipeline/src/ops/film_sim.rs:315`](../../core/dr-pipeline/src/ops/film_sim.rs#L315), [`core/dr-pipeline/src/ops/view_transform.rs:1`](../../core/dr-pipeline/src/ops/view_transform.rs#L1), [`core/dr-pipeline/src/ops/view_transform.rs:224`](../../core/dr-pipeline/src/ops/view_transform.rs#L224), [`core/dr-pipeline/src/ops/view_transform.rs:36`](../../core/dr-pipeline/src/ops/view_transform.rs#L36), [`core/dr-pipeline/src/view.rs:195`](../../core/dr-pipeline/src/view.rs#L195), [`core/dr-pipeline/src/view.rs:1`](../../core/dr-pipeline/src/view.rs#L1), [`core/dr-pipeline/src/view.rs:208`](../../core/dr-pipeline/src/view.rs#L208), [`core/dr-pipeline/src/view.rs:222`](../../core/dr-pipeline/src/view.rs#L222), [`core/dr-pipeline/src/view.rs:238`](../../core/dr-pipeline/src/view.rs#L238), [`core/dr-pipeline/src/view.rs:254`](../../core/dr-pipeline/src/view.rs#L254), [`core/dr-pipeline/src/view.rs:265`](../../core/dr-pipeline/src/view.rs#L265), [`core/dr-types/src/tone.rs:1`](../../core/dr-types/src/tone.rs#L1) | | FR-DEV-4 | [`core/dr-gpu/src/adjust.rs:1107`](../../core/dr-gpu/src/adjust.rs#L1107), [`core/dr-gpu/src/lib.rs:370`](../../core/dr-gpu/src/lib.rs#L370), [`ui/dr-ui/ui/crop.slint:1`](../../ui/dr-ui/ui/crop.slint#L1) | | FR-DEV-5 | [`core/dr-pipeline/src/graph.rs:1597`](../../core/dr-pipeline/src/graph.rs#L1597), [`core/dr-pipeline/src/graph.rs:708`](../../core/dr-pipeline/src/graph.rs#L708), [`core/dr-pipeline/src/graph.rs:768`](../../core/dr-pipeline/src/graph.rs#L768), [`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:2515`](../../core/dr-pipeline/src/sidecar.rs#L2515), [`core/dr-pipeline/src/sidecar.rs:2551`](../../core/dr-pipeline/src/sidecar.rs#L2551), [`core/dr-pipeline/src/sidecar.rs:2563`](../../core/dr-pipeline/src/sidecar.rs#L2563), [`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:945`](../../ui/dr-ui/src/develop/framing.rs#L945), [`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:1079`](../../ui/dr-ui/src/develop/render.rs#L1079), [`ui/dr-ui/src/develop/render.rs:1115`](../../ui/dr-ui/src/develop/render.rs#L1115), [`ui/dr-ui/src/develop/render.rs:859`](../../ui/dr-ui/src/develop/render.rs#L859), [`ui/dr-ui/src/develop/session.rs:100`](../../ui/dr-ui/src/develop/session.rs#L100), [`ui/dr-ui/src/develop/session.rs:91`](../../ui/dr-ui/src/develop/session.rs#L91), [`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:852`](../../ui/dr-ui/src/develop_ui.rs#L852), [`ui/dr-ui/src/develop_ui.rs:872`](../../ui/dr-ui/src/develop_ui.rs#L872), [`ui/dr-ui/src/labels.rs:12`](../../ui/dr-ui/src/labels.rs#L12), [`ui/dr-ui/src/labels.rs:310`](../../ui/dr-ui/src/labels.rs#L310), [`ui/dr-ui/src/labels.rs:34`](../../ui/dr-ui/src/labels.rs#L34), [`ui/dr-ui/src/lib.rs:2205`](../../ui/dr-ui/src/lib.rs#L2205), [`ui/dr-ui/src/lib.rs:2210`](../../ui/dr-ui/src/lib.rs#L2210), [`ui/dr-ui/src/lib.rs:2242`](../../ui/dr-ui/src/lib.rs#L2242), [`ui/dr-ui/src/lib.rs:2251`](../../ui/dr-ui/src/lib.rs#L2251), [`ui/dr-ui/src/lib.rs:2268`](../../ui/dr-ui/src/lib.rs#L2268), [`ui/dr-ui/src/library/sidecar.rs:351`](../../ui/dr-ui/src/library/sidecar.rs#L351), [`ui/dr-ui/src/library/sidecar.rs:61`](../../ui/dr-ui/src/library/sidecar.rs#L61), [`ui/dr-ui/src/presets.rs:2076`](../../ui/dr-ui/src/presets.rs#L2076), [`ui/dr-ui/src/presets.rs:373`](../../ui/dr-ui/src/presets.rs#L373), [`ui/dr-ui/src/presets.rs:437`](../../ui/dr-ui/src/presets.rs#L437), [`ui/dr-ui/src/presets.rs:557`](../../ui/dr-ui/src/presets.rs#L557), [`ui/dr-ui/ui/history.slint:192`](../../ui/dr-ui/ui/history.slint#L192), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:219`](../../ui/dr-ui/ui/history.slint#L219), [`ui/dr-ui/ui/history.slint:304`](../../ui/dr-ui/ui/history.slint#L304), [`ui/dr-ui/ui/history.slint:43`](../../ui/dr-ui/ui/history.slint#L43), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53) | -| FR-DEV-6 | [`core/dr-pipeline/src/bundled.rs:1`](../../core/dr-pipeline/src/bundled.rs#L1), [`core/dr-pipeline/src/preset.rs:1293`](../../core/dr-pipeline/src/preset.rs#L1293), [`core/dr-pipeline/src/preset.rs:1303`](../../core/dr-pipeline/src/preset.rs#L1303), [`core/dr-pipeline/src/preset.rs:1312`](../../core/dr-pipeline/src/preset.rs#L1312), [`core/dr-pipeline/src/preset.rs:1328`](../../core/dr-pipeline/src/preset.rs#L1328), [`core/dr-pipeline/src/preset.rs:1340`](../../core/dr-pipeline/src/preset.rs#L1340), [`core/dr-pipeline/src/preset.rs:1356`](../../core/dr-pipeline/src/preset.rs#L1356), [`core/dr-pipeline/src/preset.rs:1382`](../../core/dr-pipeline/src/preset.rs#L1382), [`core/dr-pipeline/src/preset.rs:1404`](../../core/dr-pipeline/src/preset.rs#L1404), [`core/dr-pipeline/src/preset.rs:1418`](../../core/dr-pipeline/src/preset.rs#L1418), [`core/dr-pipeline/src/preset.rs:1436`](../../core/dr-pipeline/src/preset.rs#L1436), [`core/dr-pipeline/src/preset.rs:1529`](../../core/dr-pipeline/src/preset.rs#L1529), [`core/dr-pipeline/src/preset.rs:1544`](../../core/dr-pipeline/src/preset.rs#L1544), [`core/dr-pipeline/src/preset.rs:1`](../../core/dr-pipeline/src/preset.rs#L1), [`core/dr-pipeline/src/preset.rs:501`](../../core/dr-pipeline/src/preset.rs#L501), [`core/dr-pipeline/src/preset.rs:534`](../../core/dr-pipeline/src/preset.rs#L534), [`core/dr-preset-xmp/src/lib.rs:140`](../../core/dr-preset-xmp/src/lib.rs#L140), [`core/dr-preset-xmp/src/lib.rs:1`](../../core/dr-preset-xmp/src/lib.rs#L1), [`core/dr-preset-xmp/src/lib.rs:347`](../../core/dr-preset-xmp/src/lib.rs#L347), [`core/dr-preset-xmp/src/lib.rs:553`](../../core/dr-preset-xmp/src/lib.rs#L553), [`core/dr-preset-xmp/src/lib.rs:575`](../../core/dr-preset-xmp/src/lib.rs#L575), [`core/dr-preset-xmp/src/lib.rs:715`](../../core/dr-preset-xmp/src/lib.rs#L715), [`core/dr-types/src/settings.rs:443`](../../core/dr-types/src/settings.rs#L443), [`ui/dr-ui/src/develop/session.rs:619`](../../ui/dr-ui/src/develop/session.rs#L619), [`ui/dr-ui/src/develop/session.rs:625`](../../ui/dr-ui/src/develop/session.rs#L625), [`ui/dr-ui/src/develop/session.rs:732`](../../ui/dr-ui/src/develop/session.rs#L732), [`ui/dr-ui/src/develop/session.rs:753`](../../ui/dr-ui/src/develop/session.rs#L753), [`ui/dr-ui/src/develop/session.rs:79`](../../ui/dr-ui/src/develop/session.rs#L79), [`ui/dr-ui/src/develop/session.rs:926`](../../ui/dr-ui/src/develop/session.rs#L926), [`ui/dr-ui/src/develop_ui.rs:247`](../../ui/dr-ui/src/develop_ui.rs#L247), [`ui/dr-ui/src/develop_ui.rs:276`](../../ui/dr-ui/src/develop_ui.rs#L276), [`ui/dr-ui/src/export.rs:1322`](../../ui/dr-ui/src/export.rs#L1322), [`ui/dr-ui/src/labels.rs:30`](../../ui/dr-ui/src/labels.rs#L30), [`ui/dr-ui/src/lib.rs:1335`](../../ui/dr-ui/src/lib.rs#L1335), [`ui/dr-ui/src/lib.rs:2662`](../../ui/dr-ui/src/lib.rs#L2662), [`ui/dr-ui/src/lib.rs:337`](../../ui/dr-ui/src/lib.rs#L337), [`ui/dr-ui/src/lib.rs:880`](../../ui/dr-ui/src/lib.rs#L880), [`ui/dr-ui/src/lib.rs:898`](../../ui/dr-ui/src/lib.rs#L898), [`ui/dr-ui/src/library/sidecar.rs:12`](../../ui/dr-ui/src/library/sidecar.rs#L12), [`ui/dr-ui/src/library/sidecar.rs:40`](../../ui/dr-ui/src/library/sidecar.rs#L40), [`ui/dr-ui/src/library/thumbnails_fetch.rs:414`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L414), [`ui/dr-ui/src/library/thumbnails_fetch.rs:549`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L549), [`ui/dr-ui/src/library_ui/controller.rs:699`](../../ui/dr-ui/src/library_ui/controller.rs#L699), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:495`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L495), [`ui/dr-ui/src/library_ui/window.rs:823`](../../ui/dr-ui/src/library_ui/window.rs#L823), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/presets.rs:1892`](../../ui/dr-ui/src/presets.rs#L1892), [`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:746`](../../ui/dr-ui/src/presets.rs#L746), [`ui/dr-ui/src/presets.rs:996`](../../ui/dr-ui/src/presets.rs#L996), [`ui/dr-ui/ui/adjust.slint:937`](../../ui/dr-ui/ui/adjust.slint#L937), [`ui/dr-ui/ui/adjust.slint:962`](../../ui/dr-ui/ui/adjust.slint#L962), [`ui/dr-ui/ui/app.slint:1094`](../../ui/dr-ui/ui/app.slint#L1094), [`ui/dr-ui/ui/app.slint:1518`](../../ui/dr-ui/ui/app.slint#L1518), [`ui/dr-ui/ui/app.slint:1802`](../../ui/dr-ui/ui/app.slint#L1802), [`ui/dr-ui/ui/app.slint:2550`](../../ui/dr-ui/ui/app.slint#L2550), [`ui/dr-ui/ui/app.slint:3483`](../../ui/dr-ui/ui/app.slint#L3483), [`ui/dr-ui/ui/app.slint:3529`](../../ui/dr-ui/ui/app.slint#L3529), [`ui/dr-ui/ui/app.slint:527`](../../ui/dr-ui/ui/app.slint#L527), [`ui/dr-ui/ui/app.slint:538`](../../ui/dr-ui/ui/app.slint#L538), [`ui/dr-ui/ui/app.slint:698`](../../ui/dr-ui/ui/app.slint#L698), [`ui/dr-ui/ui/develop.slint:257`](../../ui/dr-ui/ui/develop.slint#L257), [`ui/dr-ui/ui/icons.slint:390`](../../ui/dr-ui/ui/icons.slint#L390), [`ui/dr-ui/ui/library.slint:2026`](../../ui/dr-ui/ui/library.slint#L2026), [`ui/dr-ui/ui/library.slint:2032`](../../ui/dr-ui/ui/library.slint#L2032), [`ui/dr-ui/ui/library.slint:3229`](../../ui/dr-ui/ui/library.slint#L3229), [`ui/dr-ui/ui/library.slint:5167`](../../ui/dr-ui/ui/library.slint#L5167), [`ui/dr-ui/ui/library.slint:5185`](../../ui/dr-ui/ui/library.slint#L5185), [`ui/dr-ui/ui/presets.slint:114`](../../ui/dr-ui/ui/presets.slint#L114), [`ui/dr-ui/ui/presets.slint:155`](../../ui/dr-ui/ui/presets.slint#L155), [`ui/dr-ui/ui/presets.slint:203`](../../ui/dr-ui/ui/presets.slint#L203), [`ui/dr-ui/ui/presets.slint:211`](../../ui/dr-ui/ui/presets.slint#L211), [`ui/dr-ui/ui/presets.slint:21`](../../ui/dr-ui/ui/presets.slint#L21), [`ui/dr-ui/ui/presets.slint:33`](../../ui/dr-ui/ui/presets.slint#L33), [`ui/dr-ui/ui/presets.slint:394`](../../ui/dr-ui/ui/presets.slint#L394), [`ui/dr-ui/ui/presets.slint:432`](../../ui/dr-ui/ui/presets.slint#L432), [`ui/dr-ui/ui/presets.slint:467`](../../ui/dr-ui/ui/presets.slint#L467), [`ui/dr-ui/ui/presets.slint:62`](../../ui/dr-ui/ui/presets.slint#L62), [`ui/dr-ui/ui/presets.slint:7`](../../ui/dr-ui/ui/presets.slint#L7), [`ui/dr-ui/ui/settings.slint:126`](../../ui/dr-ui/ui/settings.slint#L126), [`ui/dr-ui/ui/settings.slint:690`](../../ui/dr-ui/ui/settings.slint#L690), [`ui/dr-ui/ui/toolrail.slint:123`](../../ui/dr-ui/ui/toolrail.slint#L123), [`ui/dr-ui/ui/toolrail.slint:453`](../../ui/dr-ui/ui/toolrail.slint#L453) | +| FR-DEV-6 | [`core/dr-pipeline/src/bundled.rs:1`](../../core/dr-pipeline/src/bundled.rs#L1), [`core/dr-pipeline/src/preset.rs:1293`](../../core/dr-pipeline/src/preset.rs#L1293), [`core/dr-pipeline/src/preset.rs:1303`](../../core/dr-pipeline/src/preset.rs#L1303), [`core/dr-pipeline/src/preset.rs:1312`](../../core/dr-pipeline/src/preset.rs#L1312), [`core/dr-pipeline/src/preset.rs:1328`](../../core/dr-pipeline/src/preset.rs#L1328), [`core/dr-pipeline/src/preset.rs:1340`](../../core/dr-pipeline/src/preset.rs#L1340), [`core/dr-pipeline/src/preset.rs:1356`](../../core/dr-pipeline/src/preset.rs#L1356), [`core/dr-pipeline/src/preset.rs:1382`](../../core/dr-pipeline/src/preset.rs#L1382), [`core/dr-pipeline/src/preset.rs:1404`](../../core/dr-pipeline/src/preset.rs#L1404), [`core/dr-pipeline/src/preset.rs:1418`](../../core/dr-pipeline/src/preset.rs#L1418), [`core/dr-pipeline/src/preset.rs:1436`](../../core/dr-pipeline/src/preset.rs#L1436), [`core/dr-pipeline/src/preset.rs:1529`](../../core/dr-pipeline/src/preset.rs#L1529), [`core/dr-pipeline/src/preset.rs:1544`](../../core/dr-pipeline/src/preset.rs#L1544), [`core/dr-pipeline/src/preset.rs:1`](../../core/dr-pipeline/src/preset.rs#L1), [`core/dr-pipeline/src/preset.rs:501`](../../core/dr-pipeline/src/preset.rs#L501), [`core/dr-pipeline/src/preset.rs:534`](../../core/dr-pipeline/src/preset.rs#L534), [`core/dr-preset-xmp/src/lib.rs:140`](../../core/dr-preset-xmp/src/lib.rs#L140), [`core/dr-preset-xmp/src/lib.rs:1`](../../core/dr-preset-xmp/src/lib.rs#L1), [`core/dr-preset-xmp/src/lib.rs:347`](../../core/dr-preset-xmp/src/lib.rs#L347), [`core/dr-preset-xmp/src/lib.rs:553`](../../core/dr-preset-xmp/src/lib.rs#L553), [`core/dr-preset-xmp/src/lib.rs:575`](../../core/dr-preset-xmp/src/lib.rs#L575), [`core/dr-preset-xmp/src/lib.rs:715`](../../core/dr-preset-xmp/src/lib.rs#L715), [`core/dr-types/src/settings.rs:443`](../../core/dr-types/src/settings.rs#L443), [`ui/dr-ui/src/develop/session.rs:619`](../../ui/dr-ui/src/develop/session.rs#L619), [`ui/dr-ui/src/develop/session.rs:625`](../../ui/dr-ui/src/develop/session.rs#L625), [`ui/dr-ui/src/develop/session.rs:732`](../../ui/dr-ui/src/develop/session.rs#L732), [`ui/dr-ui/src/develop/session.rs:753`](../../ui/dr-ui/src/develop/session.rs#L753), [`ui/dr-ui/src/develop/session.rs:79`](../../ui/dr-ui/src/develop/session.rs#L79), [`ui/dr-ui/src/develop/session.rs:926`](../../ui/dr-ui/src/develop/session.rs#L926), [`ui/dr-ui/src/develop_ui.rs:247`](../../ui/dr-ui/src/develop_ui.rs#L247), [`ui/dr-ui/src/develop_ui.rs:276`](../../ui/dr-ui/src/develop_ui.rs#L276), [`ui/dr-ui/src/export.rs:1322`](../../ui/dr-ui/src/export.rs#L1322), [`ui/dr-ui/src/labels.rs:30`](../../ui/dr-ui/src/labels.rs#L30), [`ui/dr-ui/src/lib.rs:1335`](../../ui/dr-ui/src/lib.rs#L1335), [`ui/dr-ui/src/lib.rs:2662`](../../ui/dr-ui/src/lib.rs#L2662), [`ui/dr-ui/src/lib.rs:337`](../../ui/dr-ui/src/lib.rs#L337), [`ui/dr-ui/src/lib.rs:880`](../../ui/dr-ui/src/lib.rs#L880), [`ui/dr-ui/src/lib.rs:898`](../../ui/dr-ui/src/lib.rs#L898), [`ui/dr-ui/src/library/sidecar.rs:12`](../../ui/dr-ui/src/library/sidecar.rs#L12), [`ui/dr-ui/src/library/sidecar.rs:40`](../../ui/dr-ui/src/library/sidecar.rs#L40), [`ui/dr-ui/src/library/thumbnails_fetch.rs:414`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L414), [`ui/dr-ui/src/library/thumbnails_fetch.rs:549`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L549), [`ui/dr-ui/src/library_ui/controller.rs:699`](../../ui/dr-ui/src/library_ui/controller.rs#L699), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:495`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L495), [`ui/dr-ui/src/library_ui/window.rs:835`](../../ui/dr-ui/src/library_ui/window.rs#L835), [`ui/dr-ui/src/preset_store.rs:1`](../../ui/dr-ui/src/preset_store.rs#L1), [`ui/dr-ui/src/presets.rs:1892`](../../ui/dr-ui/src/presets.rs#L1892), [`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:746`](../../ui/dr-ui/src/presets.rs#L746), [`ui/dr-ui/src/presets.rs:996`](../../ui/dr-ui/src/presets.rs#L996), [`ui/dr-ui/ui/adjust.slint:937`](../../ui/dr-ui/ui/adjust.slint#L937), [`ui/dr-ui/ui/adjust.slint:962`](../../ui/dr-ui/ui/adjust.slint#L962), [`ui/dr-ui/ui/app.slint:1094`](../../ui/dr-ui/ui/app.slint#L1094), [`ui/dr-ui/ui/app.slint:1518`](../../ui/dr-ui/ui/app.slint#L1518), [`ui/dr-ui/ui/app.slint:1802`](../../ui/dr-ui/ui/app.slint#L1802), [`ui/dr-ui/ui/app.slint:2550`](../../ui/dr-ui/ui/app.slint#L2550), [`ui/dr-ui/ui/app.slint:3483`](../../ui/dr-ui/ui/app.slint#L3483), [`ui/dr-ui/ui/app.slint:3529`](../../ui/dr-ui/ui/app.slint#L3529), [`ui/dr-ui/ui/app.slint:527`](../../ui/dr-ui/ui/app.slint#L527), [`ui/dr-ui/ui/app.slint:538`](../../ui/dr-ui/ui/app.slint#L538), [`ui/dr-ui/ui/app.slint:698`](../../ui/dr-ui/ui/app.slint#L698), [`ui/dr-ui/ui/develop.slint:257`](../../ui/dr-ui/ui/develop.slint#L257), [`ui/dr-ui/ui/icons.slint:390`](../../ui/dr-ui/ui/icons.slint#L390), [`ui/dr-ui/ui/library.slint:2026`](../../ui/dr-ui/ui/library.slint#L2026), [`ui/dr-ui/ui/library.slint:2032`](../../ui/dr-ui/ui/library.slint#L2032), [`ui/dr-ui/ui/library.slint:3229`](../../ui/dr-ui/ui/library.slint#L3229), [`ui/dr-ui/ui/library.slint:5167`](../../ui/dr-ui/ui/library.slint#L5167), [`ui/dr-ui/ui/library.slint:5185`](../../ui/dr-ui/ui/library.slint#L5185), [`ui/dr-ui/ui/presets.slint:114`](../../ui/dr-ui/ui/presets.slint#L114), [`ui/dr-ui/ui/presets.slint:155`](../../ui/dr-ui/ui/presets.slint#L155), [`ui/dr-ui/ui/presets.slint:203`](../../ui/dr-ui/ui/presets.slint#L203), [`ui/dr-ui/ui/presets.slint:211`](../../ui/dr-ui/ui/presets.slint#L211), [`ui/dr-ui/ui/presets.slint:21`](../../ui/dr-ui/ui/presets.slint#L21), [`ui/dr-ui/ui/presets.slint:33`](../../ui/dr-ui/ui/presets.slint#L33), [`ui/dr-ui/ui/presets.slint:394`](../../ui/dr-ui/ui/presets.slint#L394), [`ui/dr-ui/ui/presets.slint:432`](../../ui/dr-ui/ui/presets.slint#L432), [`ui/dr-ui/ui/presets.slint:467`](../../ui/dr-ui/ui/presets.slint#L467), [`ui/dr-ui/ui/presets.slint:62`](../../ui/dr-ui/ui/presets.slint#L62), [`ui/dr-ui/ui/presets.slint:7`](../../ui/dr-ui/ui/presets.slint#L7), [`ui/dr-ui/ui/settings.slint:126`](../../ui/dr-ui/ui/settings.slint#L126), [`ui/dr-ui/ui/settings.slint:690`](../../ui/dr-ui/ui/settings.slint#L690), [`ui/dr-ui/ui/toolrail.slint:123`](../../ui/dr-ui/ui/toolrail.slint#L123), [`ui/dr-ui/ui/toolrail.slint:453`](../../ui/dr-ui/ui/toolrail.slint#L453) | | 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:1115`](../../ui/dr-ui/src/develop/render.rs#L1115), [`ui/dr-ui/src/develop/render.rs:586`](../../ui/dr-ui/src/develop/render.rs#L586), [`ui/dr-ui/src/develop/render.rs:627`](../../ui/dr-ui/src/develop/render.rs#L627), [`ui/dr-ui/src/develop/session.rs:116`](../../ui/dr-ui/src/develop/session.rs#L116), [`ui/dr-ui/src/develop_ui.rs:793`](../../ui/dr-ui/src/develop_ui.rs#L793), [`ui/dr-ui/src/develop_ui.rs:852`](../../ui/dr-ui/src/develop_ui.rs#L852), [`ui/dr-ui/src/develop_ui.rs:924`](../../ui/dr-ui/src/develop_ui.rs#L924), [`ui/dr-ui/src/lib.rs:2251`](../../ui/dr-ui/src/lib.rs#L2251), [`ui/dr-ui/src/lib.rs:2337`](../../ui/dr-ui/src/lib.rs#L2337), [`ui/dr-ui/src/lib.rs:2351`](../../ui/dr-ui/src/lib.rs#L2351), [`ui/dr-ui/src/lib.rs:464`](../../ui/dr-ui/src/lib.rs#L464), [`ui/dr-ui/ui/app.slint:224`](../../ui/dr-ui/ui/app.slint#L224), [`ui/dr-ui/ui/app.slint:2417`](../../ui/dr-ui/ui/app.slint#L2417), [`ui/dr-ui/ui/app.slint:2463`](../../ui/dr-ui/ui/app.slint#L2463), [`ui/dr-ui/ui/app.slint:3027`](../../ui/dr-ui/ui/app.slint#L3027), [`ui/dr-ui/ui/history.slint:103`](../../ui/dr-ui/ui/history.slint#L103), [`ui/dr-ui/ui/history.slint:1`](../../ui/dr-ui/ui/history.slint#L1), [`ui/dr-ui/ui/history.slint:227`](../../ui/dr-ui/ui/history.slint#L227), [`ui/dr-ui/ui/history.slint:53`](../../ui/dr-ui/ui/history.slint#L53), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) | | FR-DEV-8 | [`core/dr-gpu/src/detail.rs:397`](../../core/dr-gpu/src/detail.rs#L397), [`core/dr-gpu/src/detail.rs:609`](../../core/dr-gpu/src/detail.rs#L609), [`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:449`](../../core/dr-pipeline/src/detail.rs#L449), [`core/dr-pipeline/src/detail.rs:491`](../../core/dr-pipeline/src/detail.rs#L491), [`core/dr-pipeline/src/detail.rs:526`](../../core/dr-pipeline/src/detail.rs#L526), [`core/dr-pipeline/src/detail.rs:620`](../../core/dr-pipeline/src/detail.rs#L620), [`core/dr-pipeline/src/graph.rs:122`](../../core/dr-pipeline/src/graph.rs#L122), [`core/dr-pipeline/src/graph.rs:1236`](../../core/dr-pipeline/src/graph.rs#L1236), [`core/dr-pipeline/src/graph.rs:269`](../../core/dr-pipeline/src/graph.rs#L269), [`core/dr-pipeline/src/operation.rs:377`](../../core/dr-pipeline/src/operation.rs#L377), [`core/dr-pipeline/src/operation.rs:869`](../../core/dr-pipeline/src/operation.rs#L869), [`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:244`](../../ui/dr-ui/src/develop/session.rs#L244), [`ui/dr-ui/src/develop_ui.rs:1081`](../../ui/dr-ui/src/develop_ui.rs#L1081), [`ui/dr-ui/src/labels.rs:83`](../../ui/dr-ui/src/labels.rs#L83), [`ui/dr-ui/src/lib.rs:2295`](../../ui/dr-ui/src/lib.rs#L2295), [`ui/dr-ui/src/lib.rs:507`](../../ui/dr-ui/src/lib.rs#L507), [`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:2270`](../../ui/dr-ui/ui/app.slint#L2270), [`ui/dr-ui/ui/app.slint:2513`](../../ui/dr-ui/ui/app.slint#L2513), [`ui/dr-ui/ui/app.slint:3376`](../../ui/dr-ui/ui/app.slint#L3376), [`ui/dr-ui/ui/icons.slint:378`](../../ui/dr-ui/ui/icons.slint#L378), [`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:1107`](../../core/dr-gpu/src/adjust.rs#L1107), [`core/dr-gpu/src/adjust.rs:2883`](../../core/dr-gpu/src/adjust.rs#L2883), [`core/dr-gpu/src/adjust.rs:2960`](../../core/dr-gpu/src/adjust.rs#L2960), [`core/dr-gpu/src/adjust.rs:3045`](../../core/dr-gpu/src/adjust.rs#L3045), [`core/dr-gpu/src/adjust.rs:44`](../../core/dr-gpu/src/adjust.rs#L44), [`core/dr-gpu/src/lib.rs:176`](../../core/dr-gpu/src/lib.rs#L176), [`core/dr-gpu/src/lib.rs:196`](../../core/dr-gpu/src/lib.rs#L196), [`core/dr-gpu/src/lib.rs:74`](../../core/dr-gpu/src/lib.rs#L74), [`core/dr-gpu/src/lib.rs:97`](../../core/dr-gpu/src/lib.rs#L97), [`core/dr-gpu/tests/capture_sharpen.rs:199`](../../core/dr-gpu/tests/capture_sharpen.rs#L199), [`core/dr-gpu/tests/detail_stage.rs:327`](../../core/dr-gpu/tests/detail_stage.rs#L327), [`core/dr-gpu/tests/local_contrast.rs:263`](../../core/dr-gpu/tests/local_contrast.rs#L263), [`core/dr-gpu/tests/noise_reduction.rs:377`](../../core/dr-gpu/tests/noise_reduction.rs#L377), [`core/dr-pipeline/src/detail.rs:142`](../../core/dr-pipeline/src/detail.rs#L142), [`core/dr-pipeline/src/detail.rs:231`](../../core/dr-pipeline/src/detail.rs#L231), [`core/dr-pipeline/src/detail.rs:592`](../../core/dr-pipeline/src/detail.rs#L592), [`core/dr-pipeline/src/detail.rs:980`](../../core/dr-pipeline/src/detail.rs#L980), [`core/dr-pipeline/src/graph.rs:1077`](../../core/dr-pipeline/src/graph.rs#L1077), [`core/dr-pipeline/src/graph.rs:1107`](../../core/dr-pipeline/src/graph.rs#L1107), [`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:628`](../../core/dr-pipeline/src/ops/capture_sharpen.rs#L628), [`core/dr-pipeline/src/ops/dehaze.rs:1`](../../core/dr-pipeline/src/ops/dehaze.rs#L1), [`core/dr-pipeline/src/ops/dehaze.rs:564`](../../core/dr-pipeline/src/ops/dehaze.rs#L564), [`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:970`](../../core/dr-pipeline/src/ops/local_contrast.rs#L970), [`core/dr-pipeline/src/ops/noise_reduction.rs:694`](../../core/dr-pipeline/src/ops/noise_reduction.rs#L694), [`core/dr-pipeline/src/spot.rs:673`](../../core/dr-pipeline/src/spot.rs#L673), [`ui/dr-ui/src/develop/framing.rs:640`](../../ui/dr-ui/src/develop/framing.rs#L640), [`ui/dr-ui/src/develop/mod.rs:57`](../../ui/dr-ui/src/develop/mod.rs#L57), [`ui/dr-ui/src/develop/render.rs:1172`](../../ui/dr-ui/src/develop/render.rs#L1172), [`ui/dr-ui/src/develop/render.rs:1206`](../../ui/dr-ui/src/develop/render.rs#L1206), [`ui/dr-ui/src/develop/render.rs:1344`](../../ui/dr-ui/src/develop/render.rs#L1344), [`ui/dr-ui/src/develop/render.rs:315`](../../ui/dr-ui/src/develop/render.rs#L315), [`ui/dr-ui/src/develop/render.rs:97`](../../ui/dr-ui/src/develop/render.rs#L97), [`ui/dr-ui/src/lib.rs:1137`](../../ui/dr-ui/src/lib.rs#L1137), [`ui/dr-ui/src/lib.rs:118`](../../ui/dr-ui/src/lib.rs#L118) | @@ -99,7 +99,7 @@ _None._ | 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:1541`](../../ui/dr-ui/src/develop/render.rs#L1541), [`ui/dr-ui/src/develop/render.rs:1573`](../../ui/dr-ui/src/develop/render.rs#L1573), [`ui/dr-ui/src/develop/render.rs:378`](../../ui/dr-ui/src/develop/render.rs#L378), [`ui/dr-ui/src/develop/session.rs:144`](../../ui/dr-ui/src/develop/session.rs#L144), [`ui/dr-ui/src/histogram.rs:1`](../../ui/dr-ui/src/histogram.rs#L1), [`ui/dr-ui/src/lib.rs:2399`](../../ui/dr-ui/src/lib.rs#L2399), [`ui/dr-ui/src/lib.rs:484`](../../ui/dr-ui/src/lib.rs#L484), [`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:1305`](../../ui/dr-ui/src/develop/render.rs#L1305), [`ui/dr-ui/src/develop/render.rs:1752`](../../ui/dr-ui/src/develop/render.rs#L1752), [`ui/dr-ui/src/develop/render.rs:1798`](../../ui/dr-ui/src/develop/render.rs#L1798), [`ui/dr-ui/src/develop/render.rs:1817`](../../ui/dr-ui/src/develop/render.rs#L1817), [`ui/dr-ui/src/develop/render.rs:291`](../../ui/dr-ui/src/develop/render.rs#L291), [`ui/dr-ui/src/develop/render.rs:350`](../../ui/dr-ui/src/develop/render.rs#L350), [`ui/dr-ui/src/develop/render.rs:65`](../../ui/dr-ui/src/develop/render.rs#L65), [`ui/dr-ui/src/develop/session.rs:297`](../../ui/dr-ui/src/develop/session.rs#L297), [`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:1357`](../../ui/dr-ui/src/lib.rs#L1357), [`ui/dr-ui/src/lib.rs:2227`](../../ui/dr-ui/src/lib.rs#L2227), [`ui/dr-ui/src/lib.rs:3092`](../../ui/dr-ui/src/lib.rs#L3092), [`ui/dr-ui/src/lib.rs:3115`](../../ui/dr-ui/src/lib.rs#L3115), [`ui/dr-ui/ui/app.slint:130`](../../ui/dr-ui/ui/app.slint#L130), [`ui/dr-ui/ui/app.slint:1849`](../../ui/dr-ui/ui/app.slint#L1849), [`ui/dr-ui/ui/settings.slint:176`](../../ui/dr-ui/ui/settings.slint#L176), [`ui/dr-ui/ui/settings.slint:864`](../../ui/dr-ui/ui/settings.slint#L864) | | 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-10 | [`core/dr-catalog/src/albums.rs:1`](../../core/dr-catalog/src/albums.rs#L1), [`core/dr-types/src/settings.rs:731`](../../core/dr-types/src/settings.rs#L731), [`ui/dr-ui/src/albums_ui.rs:1`](../../ui/dr-ui/src/albums_ui.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:129`](../../ui/dr-ui/src/collections_ui/controller.rs#L129), [`ui/dr-ui/src/collections_ui/controller.rs:432`](../../ui/dr-ui/src/collections_ui/controller.rs#L432), [`ui/dr-ui/src/develop_ui.rs:353`](../../ui/dr-ui/src/develop_ui.rs#L353), [`ui/dr-ui/src/export.rs:100`](../../ui/dr-ui/src/export.rs#L100), [`ui/dr-ui/src/export.rs:240`](../../ui/dr-ui/src/export.rs#L240), [`ui/dr-ui/src/export.rs:679`](../../ui/dr-ui/src/export.rs#L679), [`ui/dr-ui/src/export.rs:949`](../../ui/dr-ui/src/export.rs#L949), [`ui/dr-ui/src/lib.rs:1737`](../../ui/dr-ui/src/lib.rs#L1737), [`ui/dr-ui/src/library_ui/controller.rs:224`](../../ui/dr-ui/src/library_ui/controller.rs#L224), [`ui/dr-ui/src/library_ui/controller.rs:956`](../../ui/dr-ui/src/library_ui/controller.rs#L956), [`ui/dr-ui/src/library_ui/controller.rs:996`](../../ui/dr-ui/src/library_ui/controller.rs#L996), [`ui/dr-ui/src/library_ui/window.rs:388`](../../ui/dr-ui/src/library_ui/window.rs#L388), [`ui/dr-ui/src/saf.rs:1`](../../ui/dr-ui/src/saf.rs#L1), [`ui/dr-ui/ui/albums.slint:1`](../../ui/dr-ui/ui/albums.slint#L1), [`ui/dr-ui/ui/app.slint:3610`](../../ui/dr-ui/ui/app.slint#L3610), [`ui/dr-ui/ui/collections.slint:789`](../../ui/dr-ui/ui/collections.slint#L789), [`ui/dr-ui/ui/export.slint:204`](../../ui/dr-ui/ui/export.slint#L204) | +| FR-EXP-10 | [`core/dr-catalog/src/albums.rs:1`](../../core/dr-catalog/src/albums.rs#L1), [`core/dr-types/src/settings.rs:731`](../../core/dr-types/src/settings.rs#L731), [`ui/dr-ui/src/albums_ui.rs:1`](../../ui/dr-ui/src/albums_ui.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:129`](../../ui/dr-ui/src/collections_ui/controller.rs#L129), [`ui/dr-ui/src/collections_ui/controller.rs:432`](../../ui/dr-ui/src/collections_ui/controller.rs#L432), [`ui/dr-ui/src/develop_ui.rs:353`](../../ui/dr-ui/src/develop_ui.rs#L353), [`ui/dr-ui/src/export.rs:100`](../../ui/dr-ui/src/export.rs#L100), [`ui/dr-ui/src/export.rs:240`](../../ui/dr-ui/src/export.rs#L240), [`ui/dr-ui/src/export.rs:679`](../../ui/dr-ui/src/export.rs#L679), [`ui/dr-ui/src/export.rs:949`](../../ui/dr-ui/src/export.rs#L949), [`ui/dr-ui/src/lib.rs:1737`](../../ui/dr-ui/src/lib.rs#L1737), [`ui/dr-ui/src/library_ui/controller.rs:224`](../../ui/dr-ui/src/library_ui/controller.rs#L224), [`ui/dr-ui/src/library_ui/controller.rs:956`](../../ui/dr-ui/src/library_ui/controller.rs#L956), [`ui/dr-ui/src/library_ui/controller.rs:996`](../../ui/dr-ui/src/library_ui/controller.rs#L996), [`ui/dr-ui/src/library_ui/window.rs:400`](../../ui/dr-ui/src/library_ui/window.rs#L400), [`ui/dr-ui/src/saf.rs:1`](../../ui/dr-ui/src/saf.rs#L1), [`ui/dr-ui/ui/albums.slint:1`](../../ui/dr-ui/ui/albums.slint#L1), [`ui/dr-ui/ui/app.slint:3610`](../../ui/dr-ui/ui/app.slint#L3610), [`ui/dr-ui/ui/collections.slint:789`](../../ui/dr-ui/ui/collections.slint#L789), [`ui/dr-ui/ui/export.slint:204`](../../ui/dr-ui/ui/export.slint#L204) | | 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:3318`](../../core/dr-gpu/src/adjust.rs#L3318), [`core/dr-pipeline/src/graph.rs:990`](../../core/dr-pipeline/src/graph.rs#L990), [`core/dr-pipeline/src/operation.rs:676`](../../core/dr-pipeline/src/operation.rs#L676), [`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:976`](../../core/dr-types/src/settings.rs#L976), [`ui/dr-ui/src/develop/render.rs:1817`](../../ui/dr-ui/src/develop/render.rs#L1817), [`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:1021`](../../core/dr-types/src/settings.rs#L1021), [`core/dr-types/src/settings.rs:1029`](../../core/dr-types/src/settings.rs#L1029), [`core/dr-types/src/settings.rs:1045`](../../core/dr-types/src/settings.rs#L1045), [`core/dr-types/src/settings.rs:1114`](../../core/dr-types/src/settings.rs#L1114), [`core/dr-types/src/settings.rs:1142`](../../core/dr-types/src/settings.rs#L1142), [`core/dr-types/src/settings.rs:1153`](../../core/dr-types/src/settings.rs#L1153), [`core/dr-types/src/settings.rs:1159`](../../core/dr-types/src/settings.rs#L1159), [`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:256`](../../ui/dr-ui/src/settings_ui.rs#L256), [`ui/dr-ui/src/settings_ui.rs:269`](../../ui/dr-ui/src/settings_ui.rs#L269), [`ui/dr-ui/src/settings_ui.rs:288`](../../ui/dr-ui/src/settings_ui.rs#L288), [`ui/dr-ui/src/settings_ui.rs:701`](../../ui/dr-ui/src/settings_ui.rs#L701), [`ui/dr-ui/ui/export.slint:138`](../../ui/dr-ui/ui/export.slint#L138), [`ui/dr-ui/ui/export.slint:148`](../../ui/dr-ui/ui/export.slint#L148) | | 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) | @@ -116,7 +116,7 @@ _None._ | 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:129`](../../core/dr-decode/src/lib.rs#L129), [`core/dr-decode/src/lib.rs:136`](../../core/dr-decode/src/lib.rs#L136), [`core/dr-decode/src/lib.rs:625`](../../core/dr-decode/src/lib.rs#L625), [`core/dr-decode/src/profile.rs:397`](../../core/dr-decode/src/profile.rs#L397), [`core/dr-export/src/dng.rs:1`](../../core/dr-export/src/dng.rs#L1), [`core/dr-gpu/src/demosaic.rs:438`](../../core/dr-gpu/src/demosaic.rs#L438), [`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:174`](../../ui/dr-ui/src/merge.rs#L174), [`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:50`](../../ui/dr-ui/ui/merge.slint#L50) | | FR-MRG-5 | [`core/dr-pano/src/align.rs:1`](../../core/dr-pano/src/align.rs#L1), [`ui/dr-ui/src/merge.rs:1`](../../ui/dr-ui/src/merge.rs#L1), [`ui/dr-ui/src/merge_ui.rs:1`](../../ui/dr-ui/src/merge_ui.rs#L1), [`ui/dr-ui/ui/merge.slint:1`](../../ui/dr-ui/ui/merge.slint#L1) | -| FR-MRG-6 | [`core/dr-pipeline/src/sidecar.rs:1055`](../../core/dr-pipeline/src/sidecar.rs#L1055), [`core/dr-pipeline/src/sidecar.rs:116`](../../core/dr-pipeline/src/sidecar.rs#L116), [`core/dr-pipeline/src/sidecar.rs:126`](../../core/dr-pipeline/src/sidecar.rs#L126), [`core/dr-pipeline/src/sidecar.rs:2284`](../../core/dr-pipeline/src/sidecar.rs#L2284), [`core/dr-pipeline/src/sidecar.rs:860`](../../core/dr-pipeline/src/sidecar.rs#L860), [`core/dr-thumbs/src/lib.rs:75`](../../core/dr-thumbs/src/lib.rs#L75), [`ui/dr-ui/src/export.rs:156`](../../ui/dr-ui/src/export.rs#L156), [`ui/dr-ui/src/export.rs:370`](../../ui/dr-ui/src/export.rs#L370), [`ui/dr-ui/src/export.rs:694`](../../ui/dr-ui/src/export.rs#L694), [`ui/dr-ui/src/lib.rs:2029`](../../ui/dr-ui/src/lib.rs#L2029), [`ui/dr-ui/src/library/cells.rs:353`](../../ui/dr-ui/src/library/cells.rs#L353), [`ui/dr-ui/src/library/cells.rs:374`](../../ui/dr-ui/src/library/cells.rs#L374), [`ui/dr-ui/src/library/cells.rs:56`](../../ui/dr-ui/src/library/cells.rs#L56), [`ui/dr-ui/src/library/composite.rs:1`](../../ui/dr-ui/src/library/composite.rs#L1), [`ui/dr-ui/src/library/sweep.rs:31`](../../ui/dr-ui/src/library/sweep.rs#L31), [`ui/dr-ui/src/library_ui/controller.rs:116`](../../ui/dr-ui/src/library_ui/controller.rs#L116), [`ui/dr-ui/src/library_ui/controller.rs:126`](../../ui/dr-ui/src/library_ui/controller.rs#L126), [`ui/dr-ui/src/library_ui/grid.rs:422`](../../ui/dr-ui/src/library_ui/grid.rs#L422), [`ui/dr-ui/src/library_ui/layout.rs:1`](../../ui/dr-ui/src/library_ui/layout.rs#L1), [`ui/dr-ui/src/library_ui/layout.rs:51`](../../ui/dr-ui/src/library_ui/layout.rs#L51), [`ui/dr-ui/src/library_ui/open.rs:44`](../../ui/dr-ui/src/library_ui/open.rs#L44), [`ui/dr-ui/src/library_ui/window.rs:233`](../../ui/dr-ui/src/library_ui/window.rs#L233), [`ui/dr-ui/src/library_ui/window.rs:476`](../../ui/dr-ui/src/library_ui/window.rs#L476), [`ui/dr-ui/src/library_ui/window.rs:664`](../../ui/dr-ui/src/library_ui/window.rs#L664), [`ui/dr-ui/src/merge.rs:1015`](../../ui/dr-ui/src/merge.rs#L1015), [`ui/dr-ui/src/merge.rs:1058`](../../ui/dr-ui/src/merge.rs#L1058), [`ui/dr-ui/src/merge.rs:258`](../../ui/dr-ui/src/merge.rs#L258), [`ui/dr-ui/src/merge_thumbs.rs:1`](../../ui/dr-ui/src/merge_thumbs.rs#L1), [`ui/dr-ui/src/merge_ui.rs:52`](../../ui/dr-ui/src/merge_ui.rs#L52), [`ui/dr-ui/ui/library.slint:1486`](../../ui/dr-ui/ui/library.slint#L1486), [`ui/dr-ui/ui/library.slint:486`](../../ui/dr-ui/ui/library.slint#L486), [`ui/dr-ui/ui/library.slint:549`](../../ui/dr-ui/ui/library.slint#L549), [`ui/dr-ui/ui/library.slint:637`](../../ui/dr-ui/ui/library.slint#L637) | +| 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:2284`](../../core/dr-pipeline/src/sidecar.rs#L2284), [`core/dr-pipeline/src/sidecar.rs:860`](../../core/dr-pipeline/src/sidecar.rs#L860), [`core/dr-thumbs/src/lib.rs:75`](../../core/dr-thumbs/src/lib.rs#L75), [`ui/dr-ui/src/export.rs:156`](../../ui/dr-ui/src/export.rs#L156), [`ui/dr-ui/src/export.rs:370`](../../ui/dr-ui/src/export.rs#L370), [`ui/dr-ui/src/export.rs:694`](../../ui/dr-ui/src/export.rs#L694), [`ui/dr-ui/src/lib.rs:2029`](../../ui/dr-ui/src/lib.rs#L2029), [`ui/dr-ui/src/library/cells.rs:353`](../../ui/dr-ui/src/library/cells.rs#L353), [`ui/dr-ui/src/library/cells.rs:374`](../../ui/dr-ui/src/library/cells.rs#L374), [`ui/dr-ui/src/library/cells.rs:56`](../../ui/dr-ui/src/library/cells.rs#L56), [`ui/dr-ui/src/library/composite.rs:1`](../../ui/dr-ui/src/library/composite.rs#L1), [`ui/dr-ui/src/library/sweep.rs:31`](../../ui/dr-ui/src/library/sweep.rs#L31), [`ui/dr-ui/src/library_ui/controller.rs:116`](../../ui/dr-ui/src/library_ui/controller.rs#L116), [`ui/dr-ui/src/library_ui/controller.rs:126`](../../ui/dr-ui/src/library_ui/controller.rs#L126), [`ui/dr-ui/src/library_ui/grid.rs:422`](../../ui/dr-ui/src/library_ui/grid.rs#L422), [`ui/dr-ui/src/library_ui/layout.rs:1`](../../ui/dr-ui/src/library_ui/layout.rs#L1), [`ui/dr-ui/src/library_ui/layout.rs:51`](../../ui/dr-ui/src/library_ui/layout.rs#L51), [`ui/dr-ui/src/library_ui/open.rs:44`](../../ui/dr-ui/src/library_ui/open.rs#L44), [`ui/dr-ui/src/library_ui/window.rs:245`](../../ui/dr-ui/src/library_ui/window.rs#L245), [`ui/dr-ui/src/library_ui/window.rs:488`](../../ui/dr-ui/src/library_ui/window.rs#L488), [`ui/dr-ui/src/library_ui/window.rs:676`](../../ui/dr-ui/src/library_ui/window.rs#L676), [`ui/dr-ui/src/merge.rs:1015`](../../ui/dr-ui/src/merge.rs#L1015), [`ui/dr-ui/src/merge.rs:1058`](../../ui/dr-ui/src/merge.rs#L1058), [`ui/dr-ui/src/merge.rs:258`](../../ui/dr-ui/src/merge.rs#L258), [`ui/dr-ui/src/merge_thumbs.rs:1`](../../ui/dr-ui/src/merge_thumbs.rs#L1), [`ui/dr-ui/src/merge_ui.rs:52`](../../ui/dr-ui/src/merge_ui.rs#L52), [`ui/dr-ui/ui/library.slint:1486`](../../ui/dr-ui/ui/library.slint#L1486), [`ui/dr-ui/ui/library.slint:486`](../../ui/dr-ui/ui/library.slint#L486), [`ui/dr-ui/ui/library.slint:549`](../../ui/dr-ui/ui/library.slint#L549), [`ui/dr-ui/ui/library.slint:637`](../../ui/dr-ui/ui/library.slint#L637) | | 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:592`](../../ui/dr-ui/ui/app.slint#L592), [`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:521`](../../ui/dr-ui/src/launch_ui.rs#L521) | @@ -128,7 +128,7 @@ _None._ | 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:238`](../../core/dr-sync/src/lib.rs#L238), [`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:503`](../../ui/dr-ui/src/import.rs#L503) | | 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:1221`](../../core/dr-catalog/src/schema.rs#L1221), [`core/dr-catalog/src/schema.rs:1706`](../../core/dr-catalog/src/schema.rs#L1706), [`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/activity.rs:423`](../../ui/dr-ui/src/activity.rs#L423), [`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:116`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L116), [`ui/dr-ui/src/collections_ui/tree_sync.rs:392`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L392), [`ui/dr-ui/src/collections_ui/tree_sync.rs:43`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L43), [`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:1710`](../../ui/dr-ui/src/lib.rs#L1710), [`ui/dr-ui/src/lib.rs:2379`](../../ui/dr-ui/src/lib.rs#L2379), [`ui/dr-ui/src/lib.rs:2839`](../../ui/dr-ui/src/lib.rs#L2839), [`ui/dr-ui/src/lib.rs:2851`](../../ui/dr-ui/src/lib.rs#L2851), [`ui/dr-ui/src/lib.rs:2896`](../../ui/dr-ui/src/lib.rs#L2896), [`ui/dr-ui/src/lib.rs:2961`](../../ui/dr-ui/src/lib.rs#L2961), [`ui/dr-ui/src/lib.rs:3196`](../../ui/dr-ui/src/lib.rs#L3196), [`ui/dr-ui/src/lib.rs:3197`](../../ui/dr-ui/src/lib.rs#L3197), [`ui/dr-ui/src/lib.rs:3236`](../../ui/dr-ui/src/lib.rs#L3236), [`ui/dr-ui/src/library/thumbnails_fetch.rs:119`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L119), [`ui/dr-ui/src/library/thumbnails_fetch.rs:394`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L394), [`ui/dr-ui/src/library/thumbnails_fetch.rs:607`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L607), [`ui/dr-ui/src/library/thumbnails_fetch.rs:624`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L624), [`ui/dr-ui/src/library/thumbnails_fetch.rs:638`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L638), [`ui/dr-ui/src/library/thumbnails_fetch.rs:792`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L792), [`ui/dr-ui/src/library/thumbnails_fetch.rs:807`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L807), [`ui/dr-ui/src/library/thumbnails_fetch.rs:96`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L96), [`ui/dr-ui/src/library_ui/controller.rs:379`](../../ui/dr-ui/src/library_ui/controller.rs#L379), [`ui/dr-ui/src/library_ui/controller.rs:390`](../../ui/dr-ui/src/library_ui/controller.rs#L390), [`ui/dr-ui/src/library_ui/controller.rs:405`](../../ui/dr-ui/src/library_ui/controller.rs#L405), [`ui/dr-ui/src/library_ui/controller.rs:414`](../../ui/dr-ui/src/library_ui/controller.rs#L414), [`ui/dr-ui/src/library_ui/controller.rs:422`](../../ui/dr-ui/src/library_ui/controller.rs#L422), [`ui/dr-ui/src/library_ui/controller.rs:558`](../../ui/dr-ui/src/library_ui/controller.rs#L558), [`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:583`](../../ui/dr-ui/src/library_ui/controller.rs#L583), [`ui/dr-ui/src/library_ui/controller.rs:630`](../../ui/dr-ui/src/library_ui/controller.rs#L630), [`ui/dr-ui/src/library_ui/controller.rs:645`](../../ui/dr-ui/src/library_ui/controller.rs#L645), [`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:747`](../../ui/dr-ui/src/library_ui/controller.rs#L747), [`ui/dr-ui/src/library_ui/controller.rs:778`](../../ui/dr-ui/src/library_ui/controller.rs#L778), [`ui/dr-ui/src/library_ui/controller.rs:790`](../../ui/dr-ui/src/library_ui/controller.rs#L790), [`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:360`](../../ui/dr-ui/src/library_ui/window.rs#L360), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1), [`ui/dr-ui/src/settings_ui.rs:121`](../../ui/dr-ui/src/settings_ui.rs#L121), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:508`](../../ui/dr-ui/src/settings_ui.rs#L508), [`ui/dr-ui/ui/app.slint:1418`](../../ui/dr-ui/ui/app.slint#L1418), [`ui/dr-ui/ui/app.slint:156`](../../ui/dr-ui/ui/app.slint#L156), [`ui/dr-ui/ui/app.slint:2009`](../../ui/dr-ui/ui/app.slint#L2009), [`ui/dr-ui/ui/app.slint:3473`](../../ui/dr-ui/ui/app.slint#L3473), [`ui/dr-ui/ui/app.slint:483`](../../ui/dr-ui/ui/app.slint#L483), [`ui/dr-ui/ui/collections.slint:1138`](../../ui/dr-ui/ui/collections.slint#L1138), [`ui/dr-ui/ui/collections.slint:1149`](../../ui/dr-ui/ui/collections.slint#L1149), [`ui/dr-ui/ui/collections.slint:1228`](../../ui/dr-ui/ui/collections.slint#L1228), [`ui/dr-ui/ui/collections.slint:1329`](../../ui/dr-ui/ui/collections.slint#L1329), [`ui/dr-ui/ui/collections.slint:1337`](../../ui/dr-ui/ui/collections.slint#L1337), [`ui/dr-ui/ui/collections.slint:290`](../../ui/dr-ui/ui/collections.slint#L290), [`ui/dr-ui/ui/collections.slint:447`](../../ui/dr-ui/ui/collections.slint#L447), [`ui/dr-ui/ui/collections.slint:456`](../../ui/dr-ui/ui/collections.slint#L456), [`ui/dr-ui/ui/collections.slint:459`](../../ui/dr-ui/ui/collections.slint#L459), [`ui/dr-ui/ui/collections.slint:505`](../../ui/dr-ui/ui/collections.slint#L505), [`ui/dr-ui/ui/collections.slint:55`](../../ui/dr-ui/ui/collections.slint#L55), [`ui/dr-ui/ui/collections.slint:764`](../../ui/dr-ui/ui/collections.slint#L764), [`ui/dr-ui/ui/collections.slint:94`](../../ui/dr-ui/ui/collections.slint#L94), [`ui/dr-ui/ui/collections.slint:978`](../../ui/dr-ui/ui/collections.slint#L978), [`ui/dr-ui/ui/icons.slint:263`](../../ui/dr-ui/ui/icons.slint#L263), [`ui/dr-ui/ui/settings.slint:121`](../../ui/dr-ui/ui/settings.slint#L121), [`ui/dr-ui/ui/settings.slint:635`](../../ui/dr-ui/ui/settings.slint#L635) | +| 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:1221`](../../core/dr-catalog/src/schema.rs#L1221), [`core/dr-catalog/src/schema.rs:1706`](../../core/dr-catalog/src/schema.rs#L1706), [`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/activity.rs:423`](../../ui/dr-ui/src/activity.rs#L423), [`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:116`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L116), [`ui/dr-ui/src/collections_ui/tree_sync.rs:392`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L392), [`ui/dr-ui/src/collections_ui/tree_sync.rs:43`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L43), [`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:1710`](../../ui/dr-ui/src/lib.rs#L1710), [`ui/dr-ui/src/lib.rs:2379`](../../ui/dr-ui/src/lib.rs#L2379), [`ui/dr-ui/src/lib.rs:2839`](../../ui/dr-ui/src/lib.rs#L2839), [`ui/dr-ui/src/lib.rs:2851`](../../ui/dr-ui/src/lib.rs#L2851), [`ui/dr-ui/src/lib.rs:2896`](../../ui/dr-ui/src/lib.rs#L2896), [`ui/dr-ui/src/lib.rs:2961`](../../ui/dr-ui/src/lib.rs#L2961), [`ui/dr-ui/src/lib.rs:3196`](../../ui/dr-ui/src/lib.rs#L3196), [`ui/dr-ui/src/lib.rs:3197`](../../ui/dr-ui/src/lib.rs#L3197), [`ui/dr-ui/src/lib.rs:3236`](../../ui/dr-ui/src/lib.rs#L3236), [`ui/dr-ui/src/library/thumbnails_fetch.rs:119`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L119), [`ui/dr-ui/src/library/thumbnails_fetch.rs:394`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L394), [`ui/dr-ui/src/library/thumbnails_fetch.rs:607`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L607), [`ui/dr-ui/src/library/thumbnails_fetch.rs:624`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L624), [`ui/dr-ui/src/library/thumbnails_fetch.rs:638`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L638), [`ui/dr-ui/src/library/thumbnails_fetch.rs:792`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L792), [`ui/dr-ui/src/library/thumbnails_fetch.rs:807`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L807), [`ui/dr-ui/src/library/thumbnails_fetch.rs:96`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L96), [`ui/dr-ui/src/library_ui/controller.rs:379`](../../ui/dr-ui/src/library_ui/controller.rs#L379), [`ui/dr-ui/src/library_ui/controller.rs:390`](../../ui/dr-ui/src/library_ui/controller.rs#L390), [`ui/dr-ui/src/library_ui/controller.rs:405`](../../ui/dr-ui/src/library_ui/controller.rs#L405), [`ui/dr-ui/src/library_ui/controller.rs:414`](../../ui/dr-ui/src/library_ui/controller.rs#L414), [`ui/dr-ui/src/library_ui/controller.rs:422`](../../ui/dr-ui/src/library_ui/controller.rs#L422), [`ui/dr-ui/src/library_ui/controller.rs:558`](../../ui/dr-ui/src/library_ui/controller.rs#L558), [`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:583`](../../ui/dr-ui/src/library_ui/controller.rs#L583), [`ui/dr-ui/src/library_ui/controller.rs:630`](../../ui/dr-ui/src/library_ui/controller.rs#L630), [`ui/dr-ui/src/library_ui/controller.rs:645`](../../ui/dr-ui/src/library_ui/controller.rs#L645), [`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:747`](../../ui/dr-ui/src/library_ui/controller.rs#L747), [`ui/dr-ui/src/library_ui/controller.rs:778`](../../ui/dr-ui/src/library_ui/controller.rs#L778), [`ui/dr-ui/src/library_ui/controller.rs:790`](../../ui/dr-ui/src/library_ui/controller.rs#L790), [`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:372`](../../ui/dr-ui/src/library_ui/window.rs#L372), [`ui/dr-ui/src/settings_store.rs:1`](../../ui/dr-ui/src/settings_store.rs#L1), [`ui/dr-ui/src/settings_ui.rs:121`](../../ui/dr-ui/src/settings_ui.rs#L121), [`ui/dr-ui/src/settings_ui.rs:1`](../../ui/dr-ui/src/settings_ui.rs#L1), [`ui/dr-ui/src/settings_ui.rs:508`](../../ui/dr-ui/src/settings_ui.rs#L508), [`ui/dr-ui/ui/app.slint:1418`](../../ui/dr-ui/ui/app.slint#L1418), [`ui/dr-ui/ui/app.slint:156`](../../ui/dr-ui/ui/app.slint#L156), [`ui/dr-ui/ui/app.slint:2009`](../../ui/dr-ui/ui/app.slint#L2009), [`ui/dr-ui/ui/app.slint:3473`](../../ui/dr-ui/ui/app.slint#L3473), [`ui/dr-ui/ui/app.slint:483`](../../ui/dr-ui/ui/app.slint#L483), [`ui/dr-ui/ui/collections.slint:1138`](../../ui/dr-ui/ui/collections.slint#L1138), [`ui/dr-ui/ui/collections.slint:1149`](../../ui/dr-ui/ui/collections.slint#L1149), [`ui/dr-ui/ui/collections.slint:1228`](../../ui/dr-ui/ui/collections.slint#L1228), [`ui/dr-ui/ui/collections.slint:1329`](../../ui/dr-ui/ui/collections.slint#L1329), [`ui/dr-ui/ui/collections.slint:1337`](../../ui/dr-ui/ui/collections.slint#L1337), [`ui/dr-ui/ui/collections.slint:290`](../../ui/dr-ui/ui/collections.slint#L290), [`ui/dr-ui/ui/collections.slint:447`](../../ui/dr-ui/ui/collections.slint#L447), [`ui/dr-ui/ui/collections.slint:456`](../../ui/dr-ui/ui/collections.slint#L456), [`ui/dr-ui/ui/collections.slint:459`](../../ui/dr-ui/ui/collections.slint#L459), [`ui/dr-ui/ui/collections.slint:505`](../../ui/dr-ui/ui/collections.slint#L505), [`ui/dr-ui/ui/collections.slint:55`](../../ui/dr-ui/ui/collections.slint#L55), [`ui/dr-ui/ui/collections.slint:764`](../../ui/dr-ui/ui/collections.slint#L764), [`ui/dr-ui/ui/collections.slint:94`](../../ui/dr-ui/ui/collections.slint#L94), [`ui/dr-ui/ui/collections.slint:978`](../../ui/dr-ui/ui/collections.slint#L978), [`ui/dr-ui/ui/icons.slint:263`](../../ui/dr-ui/ui/icons.slint#L263), [`ui/dr-ui/ui/settings.slint:121`](../../ui/dr-ui/ui/settings.slint#L121), [`ui/dr-ui/ui/settings.slint:635`](../../ui/dr-ui/ui/settings.slint#L635) | | 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:178`](../../core/dr-sync/src/lib.rs#L178), [`core/dr-sync/src/types.rs:101`](../../core/dr-sync/src/types.rs#L101), [`core/dr-types/src/lib.rs:125`](../../core/dr-types/src/lib.rs#L125), [`core/dr-types/src/lib.rs:207`](../../core/dr-types/src/lib.rs#L207), [`ui/dr-ui/src/activity.rs:1`](../../ui/dr-ui/src/activity.rs#L1), [`ui/dr-ui/src/collections_ui/tree_sync.rs:116`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L116), [`ui/dr-ui/src/collections_ui/tree_sync.rs:392`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L392), [`ui/dr-ui/src/collections_ui/tree_sync.rs:43`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L43), [`ui/dr-ui/src/derived_sync.rs:1181`](../../ui/dr-ui/src/derived_sync.rs#L1181), [`ui/dr-ui/src/derived_sync.rs:669`](../../ui/dr-ui/src/derived_sync.rs#L669), [`ui/dr-ui/src/library/sidecar.rs:539`](../../ui/dr-ui/src/library/sidecar.rs#L539), [`ui/dr-ui/src/library/sweep.rs:713`](../../ui/dr-ui/src/library/sweep.rs#L713), [`ui/dr-ui/src/library/thumbnails_fetch.rs:216`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L216), [`ui/dr-ui/src/library/thumbnails_fetch.rs:306`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L306), [`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:1155`](../../ui/dr-ui/src/repairs.rs#L1155), [`ui/dr-ui/ui/collections.slint:290`](../../ui/dr-ui/ui/collections.slint#L290), [`ui/dr-ui/ui/collections.slint:978`](../../ui/dr-ui/ui/collections.slint#L978), [`ui/dr-ui/ui/icons.slint:263`](../../ui/dr-ui/ui/icons.slint#L263) | | 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) | @@ -148,12 +148,12 @@ _None._ | FR-PLAT-WIN-2 | [`apps/darkroom-desktop/build.rs:1`](../../apps/darkroom-desktop/build.rs#L1), [`apps/darkroom-desktop/src/main.rs:6`](../../apps/darkroom-desktop/src/main.rs#L6), [`ui/dr-ui/src/launch_ui.rs:937`](../../ui/dr-ui/src/launch_ui.rs#L937) | | FR-PLAT-WIN-3 | [`apps/darkroom-desktop/src/main.rs:19`](../../apps/darkroom-desktop/src/main.rs#L19) | | FR-RAW-1 | [`core/dr-decode/src/lib.rs:266`](../../core/dr-decode/src/lib.rs#L266), [`core/dr-types/src/lib.rs:135`](../../core/dr-types/src/lib.rs#L135), [`core/dr-types/src/lib.rs:206`](../../core/dr-types/src/lib.rs#L206) | -| FR-RAW-2 | [`core/dr-decode/src/decoder.rs:1`](../../core/dr-decode/src/decoder.rs#L1), [`core/dr-decode/src/decoder.rs:26`](../../core/dr-decode/src/decoder.rs#L26), [`core/dr-decode/src/decoder.rs:59`](../../core/dr-decode/src/decoder.rs#L59), [`core/dr-decode/src/decoder.rs:95`](../../core/dr-decode/src/decoder.rs#L95), [`ui/dr-ui/src/decoder_seam.rs:185`](../../ui/dr-ui/src/decoder_seam.rs#L185), [`ui/dr-ui/src/decoder_seam.rs:1`](../../ui/dr-ui/src/decoder_seam.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:216`](../../ui/dr-ui/src/decoder_seam.rs#L216), [`ui/dr-ui/src/decoder_seam.rs:257`](../../ui/dr-ui/src/decoder_seam.rs#L257), [`ui/dr-ui/src/export.rs:1238`](../../ui/dr-ui/src/export.rs#L1238), [`ui/dr-ui/src/export.rs:973`](../../ui/dr-ui/src/export.rs#L973), [`ui/dr-ui/src/import.rs:96`](../../ui/dr-ui/src/import.rs#L96), [`ui/dr-ui/src/library/sweep.rs:301`](../../ui/dr-ui/src/library/sweep.rs#L301), [`ui/dr-ui/src/library/sweep.rs:629`](../../ui/dr-ui/src/library/sweep.rs#L629), [`ui/dr-ui/src/library/thumbnails_gen.rs:101`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L101), [`ui/dr-ui/src/merge.rs:119`](../../ui/dr-ui/src/merge.rs#L119), [`ui/dr-ui/src/repairs.rs:243`](../../ui/dr-ui/src/repairs.rs#L243) | +| FR-RAW-2 | [`core/dr-decode/src/decoder.rs:1`](../../core/dr-decode/src/decoder.rs#L1), [`core/dr-decode/src/decoder.rs:26`](../../core/dr-decode/src/decoder.rs#L26), [`core/dr-decode/src/decoder.rs:59`](../../core/dr-decode/src/decoder.rs#L59), [`core/dr-decode/src/decoder.rs:95`](../../core/dr-decode/src/decoder.rs#L95), [`ui/dr-ui/src/decoder_seam.rs:185`](../../ui/dr-ui/src/decoder_seam.rs#L185), [`ui/dr-ui/src/decoder_seam.rs:1`](../../ui/dr-ui/src/decoder_seam.rs#L1), [`ui/dr-ui/src/decoder_seam.rs:216`](../../ui/dr-ui/src/decoder_seam.rs#L216), [`ui/dr-ui/src/decoder_seam.rs:257`](../../ui/dr-ui/src/decoder_seam.rs#L257), [`ui/dr-ui/src/export.rs:1238`](../../ui/dr-ui/src/export.rs#L1238), [`ui/dr-ui/src/export.rs:973`](../../ui/dr-ui/src/export.rs#L973), [`ui/dr-ui/src/import.rs:96`](../../ui/dr-ui/src/import.rs#L96), [`ui/dr-ui/src/library/sweep.rs:301`](../../ui/dr-ui/src/library/sweep.rs#L301), [`ui/dr-ui/src/library/sweep.rs:629`](../../ui/dr-ui/src/library/sweep.rs#L629), [`ui/dr-ui/src/library/thumbnails_gen.rs:109`](../../ui/dr-ui/src/library/thumbnails_gen.rs#L109), [`ui/dr-ui/src/merge.rs:119`](../../ui/dr-ui/src/merge.rs#L119), [`ui/dr-ui/src/repairs.rs:243`](../../ui/dr-ui/src/repairs.rs#L243) | | FR-RAW-3 | [`core/dr-decode/src/lib.rs:162`](../../core/dr-decode/src/lib.rs#L162), [`core/dr-decode/src/lib.rs:564`](../../core/dr-decode/src/lib.rs#L564), [`core/dr-decode/src/locate.rs:1435`](../../core/dr-decode/src/locate.rs#L1435), [`core/dr-gpu/src/demosaic.rs:1063`](../../core/dr-gpu/src/demosaic.rs#L1063), [`core/dr-gpu/src/demosaic.rs:1409`](../../core/dr-gpu/src/demosaic.rs#L1409), [`core/dr-gpu/src/demosaic.rs:868`](../../core/dr-gpu/src/demosaic.rs#L868), [`core/dr-gpu/tests/hot_pixels.rs:1`](../../core/dr-gpu/tests/hot_pixels.rs#L1) | | 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:295`](../../ui/dr-ui/src/lib.rs#L295) | | FR-RAW-5 | [`core/dr-decode/src/lib.rs:190`](../../core/dr-decode/src/lib.rs#L190), [`core/dr-gpu/src/demosaic.rs:1204`](../../core/dr-gpu/src/demosaic.rs#L1204), [`core/dr-gpu/src/demosaic.rs:1283`](../../core/dr-gpu/src/demosaic.rs#L1283), [`core/dr-gpu/src/demosaic.rs:1407`](../../core/dr-gpu/src/demosaic.rs#L1407), [`core/dr-gpu/src/demosaic.rs:34`](../../core/dr-gpu/src/demosaic.rs#L34) | | FR-UI-1 | [`core/dr-types/src/settings.rs:1390`](../../core/dr-types/src/settings.rs#L1390), [`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:284`](../../ui/dr-ui/src/develop_ui.rs#L284), [`ui/dr-ui/src/lib.rs:126`](../../ui/dr-ui/src/lib.rs#L126), [`ui/dr-ui/src/lib.rs:141`](../../ui/dr-ui/src/lib.rs#L141), [`ui/dr-ui/src/lib.rs:163`](../../ui/dr-ui/src/lib.rs#L163), [`ui/dr-ui/src/lib.rs:3387`](../../ui/dr-ui/src/lib.rs#L3387), [`ui/dr-ui/src/lib.rs:3406`](../../ui/dr-ui/src/lib.rs#L3406), [`ui/dr-ui/src/lib.rs:3433`](../../ui/dr-ui/src/lib.rs#L3433), [`ui/dr-ui/src/lib.rs:3484`](../../ui/dr-ui/src/lib.rs#L3484), [`ui/dr-ui/src/lib.rs:3517`](../../ui/dr-ui/src/lib.rs#L3517), [`ui/dr-ui/src/library_ui/grid.rs:242`](../../ui/dr-ui/src/library_ui/grid.rs#L242), [`ui/dr-ui/src/masks_ui.rs:1608`](../../ui/dr-ui/src/masks_ui.rs#L1608), [`ui/dr-ui/src/settings_ui.rs:143`](../../ui/dr-ui/src/settings_ui.rs#L143), [`ui/dr-ui/ui/adjust.slint:1000`](../../ui/dr-ui/ui/adjust.slint#L1000), [`ui/dr-ui/ui/app.slint:3147`](../../ui/dr-ui/ui/app.slint#L3147), [`ui/dr-ui/ui/app.slint:670`](../../ui/dr-ui/ui/app.slint#L670), [`ui/dr-ui/ui/app.slint:815`](../../ui/dr-ui/ui/app.slint#L815), [`ui/dr-ui/ui/identity.slint:249`](../../ui/dr-ui/ui/identity.slint#L249), [`ui/dr-ui/ui/library.slint:1469`](../../ui/dr-ui/ui/library.slint#L1469), [`ui/dr-ui/ui/settings.slint:129`](../../ui/dr-ui/ui/settings.slint#L129), [`ui/dr-ui/ui/settings.slint:660`](../../ui/dr-ui/ui/settings.slint#L660), [`ui/dr-ui/ui/toolrail.slint:180`](../../ui/dr-ui/ui/toolrail.slint#L180), [`ui/dr-ui/ui/toolrail.slint:92`](../../ui/dr-ui/ui/toolrail.slint#L92), [`ui/dr-ui/ui/widgets.slint:1117`](../../ui/dr-ui/ui/widgets.slint#L1117) | -| 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:126`](../../ui/dr-ui/src/lib.rs#L126), [`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/grid.rs:242`](../../ui/dr-ui/src/library_ui/grid.rs#L242), [`ui/dr-ui/src/library_ui/window.rs:1149`](../../ui/dr-ui/src/library_ui/window.rs#L1149), [`ui/dr-ui/tests/scroll_cue.rs:1`](../../ui/dr-ui/tests/scroll_cue.rs#L1), [`ui/dr-ui/ui/app.slint:137`](../../ui/dr-ui/ui/app.slint#L137), [`ui/dr-ui/ui/app.slint:3545`](../../ui/dr-ui/ui/app.slint#L3545), [`ui/dr-ui/ui/app.slint:799`](../../ui/dr-ui/ui/app.slint#L799), [`ui/dr-ui/ui/collections.slint:1354`](../../ui/dr-ui/ui/collections.slint#L1354), [`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:1356`](../../ui/dr-ui/ui/library.slint#L1356), [`ui/dr-ui/ui/library.slint:1389`](../../ui/dr-ui/ui/library.slint#L1389), [`ui/dr-ui/ui/library.slint:1717`](../../ui/dr-ui/ui/library.slint#L1717), [`ui/dr-ui/ui/library.slint:1724`](../../ui/dr-ui/ui/library.slint#L1724), [`ui/dr-ui/ui/library.slint:1825`](../../ui/dr-ui/ui/library.slint#L1825), [`ui/dr-ui/ui/library.slint:3168`](../../ui/dr-ui/ui/library.slint#L3168), [`ui/dr-ui/ui/library.slint:586`](../../ui/dr-ui/ui/library.slint#L586), [`ui/dr-ui/ui/presets.slint:114`](../../ui/dr-ui/ui/presets.slint#L114), [`ui/dr-ui/ui/settings.slint:143`](../../ui/dr-ui/ui/settings.slint#L143), [`ui/dr-ui/ui/widgets.slint:1117`](../../ui/dr-ui/ui/widgets.slint#L1117) | +| 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:126`](../../ui/dr-ui/src/lib.rs#L126), [`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/grid.rs:242`](../../ui/dr-ui/src/library_ui/grid.rs#L242), [`ui/dr-ui/src/library_ui/window.rs:1164`](../../ui/dr-ui/src/library_ui/window.rs#L1164), [`ui/dr-ui/tests/scroll_cue.rs:1`](../../ui/dr-ui/tests/scroll_cue.rs#L1), [`ui/dr-ui/ui/app.slint:137`](../../ui/dr-ui/ui/app.slint#L137), [`ui/dr-ui/ui/app.slint:3545`](../../ui/dr-ui/ui/app.slint#L3545), [`ui/dr-ui/ui/app.slint:799`](../../ui/dr-ui/ui/app.slint#L799), [`ui/dr-ui/ui/collections.slint:1354`](../../ui/dr-ui/ui/collections.slint#L1354), [`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:1356`](../../ui/dr-ui/ui/library.slint#L1356), [`ui/dr-ui/ui/library.slint:1389`](../../ui/dr-ui/ui/library.slint#L1389), [`ui/dr-ui/ui/library.slint:1717`](../../ui/dr-ui/ui/library.slint#L1717), [`ui/dr-ui/ui/library.slint:1724`](../../ui/dr-ui/ui/library.slint#L1724), [`ui/dr-ui/ui/library.slint:1825`](../../ui/dr-ui/ui/library.slint#L1825), [`ui/dr-ui/ui/library.slint:3168`](../../ui/dr-ui/ui/library.slint#L3168), [`ui/dr-ui/ui/library.slint:586`](../../ui/dr-ui/ui/library.slint#L586), [`ui/dr-ui/ui/presets.slint:114`](../../ui/dr-ui/ui/presets.slint#L114), [`ui/dr-ui/ui/settings.slint:143`](../../ui/dr-ui/ui/settings.slint#L143), [`ui/dr-ui/ui/widgets.slint:1117`](../../ui/dr-ui/ui/widgets.slint#L1117) | | FR-UI-3 | [`ui/dr-ui/src/collections_ui/controller.rs:143`](../../ui/dr-ui/src/collections_ui/controller.rs#L143), [`ui/dr-ui/src/collections_ui/controller.rs:348`](../../ui/dr-ui/src/collections_ui/controller.rs#L348), [`ui/dr-ui/src/collections_ui/controller.rs:361`](../../ui/dr-ui/src/collections_ui/controller.rs#L361), [`ui/dr-ui/src/collections_ui/wiring_tree.rs:287`](../../ui/dr-ui/src/collections_ui/wiring_tree.rs#L287), [`ui/dr-ui/src/develop/masks.rs:361`](../../ui/dr-ui/src/develop/masks.rs#L361), [`ui/dr-ui/src/develop/repairs.rs:49`](../../ui/dr-ui/src/develop/repairs.rs#L49), [`ui/dr-ui/src/library_ui/grid.rs:228`](../../ui/dr-ui/src/library_ui/grid.rs#L228), [`ui/dr-ui/src/masks_ui.rs:1700`](../../ui/dr-ui/src/masks_ui.rs#L1700), [`ui/dr-ui/src/masks_ui.rs:1722`](../../ui/dr-ui/src/masks_ui.rs#L1722), [`ui/dr-ui/src/masks_ui.rs:339`](../../ui/dr-ui/src/masks_ui.rs#L339), [`ui/dr-ui/src/spots_ui.rs:19`](../../ui/dr-ui/src/spots_ui.rs#L19), [`ui/dr-ui/ui/app.slint:2356`](../../ui/dr-ui/ui/app.slint#L2356), [`ui/dr-ui/ui/collections.slint:1228`](../../ui/dr-ui/ui/collections.slint#L1228), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/collections.slint:78`](../../ui/dr-ui/ui/collections.slint#L78), [`ui/dr-ui/ui/collections.slint:978`](../../ui/dr-ui/ui/collections.slint#L978), [`ui/dr-ui/ui/masks.slint:1246`](../../ui/dr-ui/ui/masks.slint#L1246), [`ui/dr-ui/ui/widgets.slint:72`](../../ui/dr-ui/ui/widgets.slint#L72) | | FR-UI-4 | [`tools/traceability/src/gestures.rs:1`](../../tools/traceability/src/gestures.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/controller.rs:143`](../../ui/dr-ui/src/collections_ui/controller.rs#L143), [`ui/dr-ui/src/collections_ui/controller.rs:348`](../../ui/dr-ui/src/collections_ui/controller.rs#L348), [`ui/dr-ui/src/collections_ui/controller.rs:361`](../../ui/dr-ui/src/collections_ui/controller.rs#L361), [`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:344`](../../ui/dr-ui/src/collections_ui/tree_sync.rs#L344), [`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:1070`](../../ui/dr-ui/src/develop/framing.rs#L1070), [`ui/dr-ui/src/develop/framing.rs:1110`](../../ui/dr-ui/src/develop/framing.rs#L1110), [`ui/dr-ui/src/develop/framing.rs:1140`](../../ui/dr-ui/src/develop/framing.rs#L1140), [`ui/dr-ui/src/develop/framing.rs:257`](../../ui/dr-ui/src/develop/framing.rs#L257), [`ui/dr-ui/src/develop/framing.rs:591`](../../ui/dr-ui/src/develop/framing.rs#L591), [`ui/dr-ui/src/develop/framing.rs:640`](../../ui/dr-ui/src/develop/framing.rs#L640), [`ui/dr-ui/src/develop/framing.rs:665`](../../ui/dr-ui/src/develop/framing.rs#L665), [`ui/dr-ui/src/develop/framing.rs:676`](../../ui/dr-ui/src/develop/framing.rs#L676), [`ui/dr-ui/src/develop/framing.rs:690`](../../ui/dr-ui/src/develop/framing.rs#L690), [`ui/dr-ui/src/develop/framing.rs:763`](../../ui/dr-ui/src/develop/framing.rs#L763), [`ui/dr-ui/src/develop/framing.rs:893`](../../ui/dr-ui/src/develop/framing.rs#L893), [`ui/dr-ui/src/develop/framing.rs:924`](../../ui/dr-ui/src/develop/framing.rs#L924), [`ui/dr-ui/src/develop/framing.rs:945`](../../ui/dr-ui/src/develop/framing.rs#L945), [`ui/dr-ui/src/develop/render.rs:1257`](../../ui/dr-ui/src/develop/render.rs#L1257), [`ui/dr-ui/src/develop/render.rs:1282`](../../ui/dr-ui/src/develop/render.rs#L1282), [`ui/dr-ui/src/develop/render.rs:1305`](../../ui/dr-ui/src/develop/render.rs#L1305), [`ui/dr-ui/src/develop/render.rs:1344`](../../ui/dr-ui/src/develop/render.rs#L1344), [`ui/dr-ui/src/develop/render.rs:65`](../../ui/dr-ui/src/develop/render.rs#L65), [`ui/dr-ui/src/develop/render.rs:84`](../../ui/dr-ui/src/develop/render.rs#L84), [`ui/dr-ui/src/develop/render.rs:97`](../../ui/dr-ui/src/develop/render.rs#L97), [`ui/dr-ui/src/develop_ui.rs:1001`](../../ui/dr-ui/src/develop_ui.rs#L1001), [`ui/dr-ui/src/duplicates_ui.rs:1`](../../ui/dr-ui/src/duplicates_ui.rs#L1), [`ui/dr-ui/src/gesture_book.rs:3`](../../ui/dr-ui/src/gesture_book.rs#L3), [`ui/dr-ui/src/gestures.rs:127`](../../ui/dr-ui/src/gestures.rs#L127), [`ui/dr-ui/src/gestures.rs:139`](../../ui/dr-ui/src/gestures.rs#L139), [`ui/dr-ui/src/gestures.rs:1`](../../ui/dr-ui/src/gestures.rs#L1), [`ui/dr-ui/src/lib.rs:1376`](../../ui/dr-ui/src/lib.rs#L1376), [`ui/dr-ui/src/lib.rs:1710`](../../ui/dr-ui/src/lib.rs#L1710), [`ui/dr-ui/src/lib.rs:2279`](../../ui/dr-ui/src/lib.rs#L2279), [`ui/dr-ui/src/lib.rs:2668`](../../ui/dr-ui/src/lib.rs#L2668), [`ui/dr-ui/src/lib.rs:2961`](../../ui/dr-ui/src/lib.rs#L2961), [`ui/dr-ui/src/lib.rs:3032`](../../ui/dr-ui/src/lib.rs#L3032), [`ui/dr-ui/src/lib.rs:3197`](../../ui/dr-ui/src/lib.rs#L3197), [`ui/dr-ui/src/lib.rs:3599`](../../ui/dr-ui/src/lib.rs#L3599), [`ui/dr-ui/src/lib.rs:3643`](../../ui/dr-ui/src/lib.rs#L3643), [`ui/dr-ui/src/lib.rs:514`](../../ui/dr-ui/src/lib.rs#L514), [`ui/dr-ui/src/lib.rs:543`](../../ui/dr-ui/src/lib.rs#L543), [`ui/dr-ui/src/library/thumbnails_fetch.rs:792`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L792), [`ui/dr-ui/src/library/thumbnails_fetch.rs:807`](../../ui/dr-ui/src/library/thumbnails_fetch.rs#L807), [`ui/dr-ui/src/library_ui/controller.rs:422`](../../ui/dr-ui/src/library_ui/controller.rs#L422), [`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:673`](../../ui/dr-ui/src/library_ui/controller.rs#L673), [`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:228`](../../ui/dr-ui/src/library_ui/grid.rs#L228), [`ui/dr-ui/src/library_ui/grid.rs:252`](../../ui/dr-ui/src/library_ui/grid.rs#L252), [`ui/dr-ui/src/library_ui/grid.rs:273`](../../ui/dr-ui/src/library_ui/grid.rs#L273), [`ui/dr-ui/src/library_ui/grid.rs:347`](../../ui/dr-ui/src/library_ui/grid.rs#L347), [`ui/dr-ui/src/library_ui/grid.rs:517`](../../ui/dr-ui/src/library_ui/grid.rs#L517), [`ui/dr-ui/src/library_ui/grid.rs:547`](../../ui/dr-ui/src/library_ui/grid.rs#L547), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1178`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1178), [`ui/dr-ui/src/manual.rs:1`](../../ui/dr-ui/src/manual.rs#L1), [`ui/dr-ui/src/settings_ui.rs:121`](../../ui/dr-ui/src/settings_ui.rs#L121), [`ui/dr-ui/src/settings_ui.rs:508`](../../ui/dr-ui/src/settings_ui.rs#L508), [`ui/dr-ui/ui/app.slint:1836`](../../ui/dr-ui/ui/app.slint#L1836), [`ui/dr-ui/ui/app.slint:2044`](../../ui/dr-ui/ui/app.slint#L2044), [`ui/dr-ui/ui/app.slint:2170`](../../ui/dr-ui/ui/app.slint#L2170), [`ui/dr-ui/ui/app.slint:2456`](../../ui/dr-ui/ui/app.slint#L2456), [`ui/dr-ui/ui/app.slint:2618`](../../ui/dr-ui/ui/app.slint#L2618), [`ui/dr-ui/ui/app.slint:2648`](../../ui/dr-ui/ui/app.slint#L2648), [`ui/dr-ui/ui/app.slint:264`](../../ui/dr-ui/ui/app.slint#L264), [`ui/dr-ui/ui/app.slint:2793`](../../ui/dr-ui/ui/app.slint#L2793), [`ui/dr-ui/ui/app.slint:2988`](../../ui/dr-ui/ui/app.slint#L2988), [`ui/dr-ui/ui/app.slint:3545`](../../ui/dr-ui/ui/app.slint#L3545), [`ui/dr-ui/ui/app.slint:3572`](../../ui/dr-ui/ui/app.slint#L3572), [`ui/dr-ui/ui/app.slint:702`](../../ui/dr-ui/ui/app.slint#L702), [`ui/dr-ui/ui/collections.slint:1354`](../../ui/dr-ui/ui/collections.slint#L1354), [`ui/dr-ui/ui/collections.slint:78`](../../ui/dr-ui/ui/collections.slint#L78), [`ui/dr-ui/ui/develop.slint:142`](../../ui/dr-ui/ui/develop.slint#L142), [`ui/dr-ui/ui/develop.slint:328`](../../ui/dr-ui/ui/develop.slint#L328), [`ui/dr-ui/ui/develop.slint:66`](../../ui/dr-ui/ui/develop.slint#L66), [`ui/dr-ui/ui/duplicates.slint:1`](../../ui/dr-ui/ui/duplicates.slint#L1), [`ui/dr-ui/ui/gestures.slint:1`](../../ui/dr-ui/ui/gestures.slint#L1), [`ui/dr-ui/ui/icons.slint:367`](../../ui/dr-ui/ui/icons.slint#L367), [`ui/dr-ui/ui/labels.slint:74`](../../ui/dr-ui/ui/labels.slint#L74), [`ui/dr-ui/ui/library.slint:1356`](../../ui/dr-ui/ui/library.slint#L1356), [`ui/dr-ui/ui/library.slint:1383`](../../ui/dr-ui/ui/library.slint#L1383), [`ui/dr-ui/ui/library.slint:1389`](../../ui/dr-ui/ui/library.slint#L1389), [`ui/dr-ui/ui/library.slint:1444`](../../ui/dr-ui/ui/library.slint#L1444), [`ui/dr-ui/ui/library.slint:1643`](../../ui/dr-ui/ui/library.slint#L1643), [`ui/dr-ui/ui/library.slint:1694`](../../ui/dr-ui/ui/library.slint#L1694), [`ui/dr-ui/ui/library.slint:1717`](../../ui/dr-ui/ui/library.slint#L1717), [`ui/dr-ui/ui/library.slint:1724`](../../ui/dr-ui/ui/library.slint#L1724), [`ui/dr-ui/ui/library.slint:1760`](../../ui/dr-ui/ui/library.slint#L1760), [`ui/dr-ui/ui/library.slint:1818`](../../ui/dr-ui/ui/library.slint#L1818), [`ui/dr-ui/ui/library.slint:1825`](../../ui/dr-ui/ui/library.slint#L1825), [`ui/dr-ui/ui/library.slint:3168`](../../ui/dr-ui/ui/library.slint#L3168), [`ui/dr-ui/ui/library.slint:3273`](../../ui/dr-ui/ui/library.slint#L3273), [`ui/dr-ui/ui/library.slint:3424`](../../ui/dr-ui/ui/library.slint#L3424), [`ui/dr-ui/ui/library.slint:5073`](../../ui/dr-ui/ui/library.slint#L5073), [`ui/dr-ui/ui/library.slint:5111`](../../ui/dr-ui/ui/library.slint#L5111), [`ui/dr-ui/ui/library.slint:5215`](../../ui/dr-ui/ui/library.slint#L5215), [`ui/dr-ui/ui/library.slint:581`](../../ui/dr-ui/ui/library.slint#L581), [`ui/dr-ui/ui/library.slint:591`](../../ui/dr-ui/ui/library.slint#L591), [`ui/dr-ui/ui/library.slint:693`](../../ui/dr-ui/ui/library.slint#L693), [`ui/dr-ui/ui/library.slint:762`](../../ui/dr-ui/ui/library.slint#L762), [`ui/dr-ui/ui/settings.slint:121`](../../ui/dr-ui/ui/settings.slint#L121), [`ui/dr-ui/ui/settings.slint:172`](../../ui/dr-ui/ui/settings.slint#L172), [`ui/dr-ui/ui/settings.slint:635`](../../ui/dr-ui/ui/settings.slint#L635) | | FR-UI-5 | [`core/dr-types/src/place.rs:118`](../../core/dr-types/src/place.rs#L118), [`tools/traceability/src/chord.rs:1`](../../tools/traceability/src/chord.rs#L1), [`tools/traceability/src/keymap.rs:1`](../../tools/traceability/src/keymap.rs#L1), [`ui/dr-ui/src/collections_ui/mod.rs:1`](../../ui/dr-ui/src/collections_ui/mod.rs#L1), [`ui/dr-ui/src/develop_ui.rs:1046`](../../ui/dr-ui/src/develop_ui.rs#L1046), [`ui/dr-ui/src/gestures.rs:139`](../../ui/dr-ui/src/gestures.rs#L139), [`ui/dr-ui/src/identity_ui.rs:1643`](../../ui/dr-ui/src/identity_ui.rs#L1643), [`ui/dr-ui/src/identity_ui.rs:802`](../../ui/dr-ui/src/identity_ui.rs#L802), [`ui/dr-ui/src/lib.rs:3581`](../../ui/dr-ui/src/lib.rs#L3581), [`ui/dr-ui/src/lib.rs:3599`](../../ui/dr-ui/src/lib.rs#L3599), [`ui/dr-ui/src/lib.rs:3613`](../../ui/dr-ui/src/lib.rs#L3613), [`ui/dr-ui/src/lib.rs:3794`](../../ui/dr-ui/src/lib.rs#L3794), [`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/grid.rs:367`](../../ui/dr-ui/src/library_ui/grid.rs#L367), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1035`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1035), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1154`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1154), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1215`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1215), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1285`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1285), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:1311`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L1311), [`ui/dr-ui/src/library_ui/ratings_keywords.rs:464`](../../ui/dr-ui/src/library_ui/ratings_keywords.rs#L464), [`ui/dr-ui/src/masks_ui.rs:1655`](../../ui/dr-ui/src/masks_ui.rs#L1655), [`ui/dr-ui/src/place.rs:331`](../../ui/dr-ui/src/place.rs#L331), [`ui/dr-ui/src/settings_ui.rs:394`](../../ui/dr-ui/src/settings_ui.rs#L394), [`ui/dr-ui/tests/back_closes_the_presets_menu.rs:1`](../../ui/dr-ui/tests/back_closes_the_presets_menu.rs#L1), [`ui/dr-ui/ui/app.slint:1094`](../../ui/dr-ui/ui/app.slint#L1094), [`ui/dr-ui/ui/app.slint:1686`](../../ui/dr-ui/ui/app.slint#L1686), [`ui/dr-ui/ui/app.slint:2456`](../../ui/dr-ui/ui/app.slint#L2456), [`ui/dr-ui/ui/app.slint:2606`](../../ui/dr-ui/ui/app.slint#L2606), [`ui/dr-ui/ui/app.slint:2748`](../../ui/dr-ui/ui/app.slint#L2748), [`ui/dr-ui/ui/app.slint:2793`](../../ui/dr-ui/ui/app.slint#L2793), [`ui/dr-ui/ui/app.slint:2846`](../../ui/dr-ui/ui/app.slint#L2846), [`ui/dr-ui/ui/app.slint:2877`](../../ui/dr-ui/ui/app.slint#L2877), [`ui/dr-ui/ui/app.slint:3510`](../../ui/dr-ui/ui/app.slint#L3510), [`ui/dr-ui/ui/app.slint:3529`](../../ui/dr-ui/ui/app.slint#L3529), [`ui/dr-ui/ui/app.slint:424`](../../ui/dr-ui/ui/app.slint#L424), [`ui/dr-ui/ui/app.slint:691`](../../ui/dr-ui/ui/app.slint#L691), [`ui/dr-ui/ui/app.slint:698`](../../ui/dr-ui/ui/app.slint#L698), [`ui/dr-ui/ui/app.slint:702`](../../ui/dr-ui/ui/app.slint#L702), [`ui/dr-ui/ui/app.slint:708`](../../ui/dr-ui/ui/app.slint#L708), [`ui/dr-ui/ui/app.slint:764`](../../ui/dr-ui/ui/app.slint#L764), [`ui/dr-ui/ui/collections.slint:111`](../../ui/dr-ui/ui/collections.slint#L111), [`ui/dr-ui/ui/collections.slint:4`](../../ui/dr-ui/ui/collections.slint#L4), [`ui/dr-ui/ui/develop.slint:168`](../../ui/dr-ui/ui/develop.slint#L168), [`ui/dr-ui/ui/develop.slint:55`](../../ui/dr-ui/ui/develop.slint#L55), [`ui/dr-ui/ui/export.slint:1`](../../ui/dr-ui/ui/export.slint#L1), [`ui/dr-ui/ui/export.slint:246`](../../ui/dr-ui/ui/export.slint#L246), [`ui/dr-ui/ui/identity.slint:294`](../../ui/dr-ui/ui/identity.slint#L294), [`ui/dr-ui/ui/identity.slint:400`](../../ui/dr-ui/ui/identity.slint#L400), [`ui/dr-ui/ui/keys.slint:1`](../../ui/dr-ui/ui/keys.slint#L1), [`ui/dr-ui/ui/library.slint:1066`](../../ui/dr-ui/ui/library.slint#L1066), [`ui/dr-ui/ui/library.slint:1640`](../../ui/dr-ui/ui/library.slint#L1640), [`ui/dr-ui/ui/library.slint:1649`](../../ui/dr-ui/ui/library.slint#L1649), [`ui/dr-ui/ui/library.slint:1654`](../../ui/dr-ui/ui/library.slint#L1654), [`ui/dr-ui/ui/library.slint:1666`](../../ui/dr-ui/ui/library.slint#L1666), [`ui/dr-ui/ui/library.slint:1914`](../../ui/dr-ui/ui/library.slint#L1914), [`ui/dr-ui/ui/library.slint:2044`](../../ui/dr-ui/ui/library.slint#L2044), [`ui/dr-ui/ui/library.slint:2691`](../../ui/dr-ui/ui/library.slint#L2691), [`ui/dr-ui/ui/library.slint:3134`](../../ui/dr-ui/ui/library.slint#L3134), [`ui/dr-ui/ui/library.slint:3210`](../../ui/dr-ui/ui/library.slint#L3210), [`ui/dr-ui/ui/library.slint:3229`](../../ui/dr-ui/ui/library.slint#L3229), [`ui/dr-ui/ui/library.slint:3235`](../../ui/dr-ui/ui/library.slint#L3235), [`ui/dr-ui/ui/library.slint:3242`](../../ui/dr-ui/ui/library.slint#L3242), [`ui/dr-ui/ui/library.slint:3262`](../../ui/dr-ui/ui/library.slint#L3262), [`ui/dr-ui/ui/library.slint:3273`](../../ui/dr-ui/ui/library.slint#L3273), [`ui/dr-ui/ui/library.slint:3351`](../../ui/dr-ui/ui/library.slint#L3351), [`ui/dr-ui/ui/library.slint:3424`](../../ui/dr-ui/ui/library.slint#L3424), [`ui/dr-ui/ui/library.slint:4031`](../../ui/dr-ui/ui/library.slint#L4031), [`ui/dr-ui/ui/library.slint:5128`](../../ui/dr-ui/ui/library.slint#L5128), [`ui/dr-ui/ui/library.slint:669`](../../ui/dr-ui/ui/library.slint#L669), [`ui/dr-ui/ui/library.slint:687`](../../ui/dr-ui/ui/library.slint#L687), [`ui/dr-ui/ui/library.slint:708`](../../ui/dr-ui/ui/library.slint#L708), [`ui/dr-ui/ui/presets.slint:467`](../../ui/dr-ui/ui/presets.slint#L467), [`ui/dr-ui/ui/session.slint:75`](../../ui/dr-ui/ui/session.slint#L75) | diff --git a/ui/dr-ui/src/library/cells.rs b/ui/dr-ui/src/library/cells.rs index c4babd5..3450134 100644 --- a/ui/dr-ui/src/library/cells.rs +++ b/ui/dr-ui/src/library/cells.rs @@ -1015,6 +1015,7 @@ mod tests { width, height, rgba, + class: dr_thumbs::ThumbSize::Grid, from_cache: true, }; diff --git a/ui/dr-ui/src/library/thumbnails_gen.rs b/ui/dr-ui/src/library/thumbnails_gen.rs index 69eabcc..f2b4cd3 100644 --- a/ui/dr-ui/src/library/thumbnails_gen.rs +++ b/ui/dr-ui/src/library/thumbnails_gen.rs @@ -33,6 +33,11 @@ pub struct ThumbnailReady { pub width: u32, pub height: u32, pub rgba: Vec, + /// Which class these pixels are, which is not always the class asked for: + /// the store answers a miss with the other class where it holds one. The + /// grid records this, so a stand-in is replaced once the real class can be + /// fetched rather than counted as served. + pub class: dr_thumbs::ThumbSize, /// Whether these pixels came off local disk rather than the server. /// /// The grid paints both identically, so this exists solely for @@ -61,6 +66,9 @@ pub enum ThumbnailMessage { cached: usize, fetching: usize, dating: usize, + /// Of `cached`, how many are the other class standing in for one + /// still being fetched. Each of those rows is delivered twice. + standing_in: usize, }, /// One header-only date read is starting. /// @@ -115,46 +123,12 @@ pub fn spawn_thumbnails( // Split the batch before delivering anything, so the plan can be // reported first and the UI knows the shape of the work up front. - // Decoding happens here rather than in the split, because a corrupt - // blob turns a hit into a miss. - let mut hits = Vec::new(); - let mut to_fetch = Vec::new(); - // Images whose thumbnail is cached but whose date is still unknown. - // - // These need a header read even though no pixels are wanted. Without - // this pass an image is dated *only* on the one visit that produced - // its thumbnail — so a library browsed once before the EXIF code - // existed, or synced from another device's shards, stays permanently - // undated and never appears on the timeline. - let mut metadata_only = Vec::new(); - - for req in wanted { - let stored = req - .file_id - .zip(store.as_ref()) - .and_then(|(id, s)| s.get(id, req.thumb_size).ok().flatten()); - - match stored.map(|t| dr_thumbs::decode_rgba(&t.bytes)) { - Some(Ok((width, height, rgba))) => { - if req.needs_metadata { - metadata_only.push(req.clone()); - } - hits.push(ThumbnailReady { - row: req.row, - width, - height, - rgba, - from_cache: true, - }); - } - // A corrupt stored blob is a miss, not a failure. - Some(Err(e)) => { - log::debug!("stored thumbnail unreadable, refetching: {e}"); - to_fetch.push(req); - } - None => to_fetch.push(req), - } - } + let Split { + hits, + to_fetch, + metadata_only, + standing_in, + } = split_by_store(store.as_ref(), wanted); log::info!( "thumbnails: {} from store, {} to fetch{}", @@ -171,6 +145,7 @@ pub fn spawn_thumbnails( cached: hits.len(), fetching: to_fetch.len(), dating: metadata_only.len(), + standing_in, }) .is_err() { @@ -269,6 +244,105 @@ pub fn spawn_thumbnails( rx } +/// A batch divided by what the store can answer. +#[derive(Default)] +struct Split { + /// Decoded off local disk, ready to deliver. + hits: Vec, + /// Needing the network: a miss, or a smaller class standing in. + to_fetch: Vec, + /// Images whose thumbnail is cached but whose date is still unknown. + /// + /// These need a header read even though no pixels are wanted. Without + /// this pass an image is dated *only* on the one visit that produced + /// its thumbnail — so a library browsed once before the EXIF code + /// existed, or synced from another device's shards, stays permanently + /// undated and never appears on the timeline. + metadata_only: Vec, + /// Rows in both `hits` and `to_fetch`: the grid class shown while the + /// large one is fetched. + standing_in: usize, +} + +/// Divide a batch into what the store holds and what must be fetched. +/// +/// Decoding happens here rather than after, because a corrupt blob turns a +/// hit into a miss. +fn split_by_store(store: Option<&ThumbStore>, wanted: Vec) -> Split { + let mut split = Split::default(); + + for req in wanted { + if let Some(hit) = read_stored(store, &req, req.thumb_size) { + if req.needs_metadata { + split.metadata_only.push(req.clone()); + } + split.hits.push(hit); + continue; + } + + // The other class, before the network. The sweep stores only the + // grid class, so a zoomed grid asked the server for every cell it had + // not zoomed over before — and offline, left each one blank with its + // 256px thumbnail sitting in the store. A softer cell is better than + // an empty one, and a sharper one is simply better. + // A wide panorama cell falls back to the grid class too: the sweep + // always stores it, and smaller, it only stands in while the wide + // class is fetched. + let other = match req.thumb_size { + dr_thumbs::ThumbSize::Grid => dr_thumbs::ThumbSize::Large, + dr_thumbs::ThumbSize::Large + | dr_thumbs::ThumbSize::Wide2 + | dr_thumbs::ThumbSize::Wide3 + | dr_thumbs::ThumbSize::Wide4 => dr_thumbs::ThumbSize::Grid, + }; + match read_stored(store, &req, other) { + // Larger than asked for: nothing a fetch would improve on. + Some(hit) if other > req.thumb_size => { + if req.needs_metadata { + split.metadata_only.push(req.clone()); + } + split.hits.push(hit); + } + // Smaller: shown now, and the fetch still goes out to replace it. + // The fetch reads the header, so it dates the image too. + Some(stand_in) => { + split.standing_in += 1; + split.hits.push(stand_in); + split.to_fetch.push(req); + } + None => split.to_fetch.push(req), + } + } + + split +} + +/// A stored thumbnail of one class, decoded for the grid. +/// +/// `None` for a miss, for a request with no file id to key on, and for a +/// corrupt blob — which is a miss, not a failure, and gets refetched. +fn read_stored( + store: Option<&ThumbStore>, + req: &ThumbnailRequest, + class: dr_thumbs::ThumbSize, +) -> Option { + let stored = store?.get(req.file_id?, class).ok().flatten()?; + match dr_thumbs::decode_rgba(&stored.bytes) { + Ok((width, height, rgba)) => Some(ThumbnailReady { + row: req.row, + width, + height, + rgba, + class, + from_cache: true, + }), + Err(e) => { + log::debug!("stored thumbnail unreadable, refetching: {e}"); + None + } + } +} + pub(super) async fn fetch_one( backend: &dyn RemoteBackend, decoder: &dyn dr_decode::Decoder, @@ -302,6 +376,7 @@ pub(super) async fn fetch_one( width: preview.width, height: preview.height, rgba: preview.rgba, + class: req.thumb_size, from_cache: false, })) } @@ -546,6 +621,86 @@ pub fn camera_label(make: Option<&str>, model: Option<&str>) -> Option { mod tests { use super::*; + /// A store holding one image at one class, and a request for it. + fn store_with(tag: &str, file_id: u64, edge: u32, class: dr_thumbs::ThumbSize) -> ThumbStore { + let dir = std::env::temp_dir().join(format!("dr-ui-split-{tag}-{}", std::process::id())); + let _ = std::fs::remove_dir_all(&dir); + let rgba: Vec = std::iter::repeat_n([10u8, 20, 30, 255], (edge * edge) as usize) + .flatten() + .collect(); + let mut store = ThumbStore::open(&dir).unwrap(); + let bytes = dr_thumbs::encode_rgba(edge, edge, &rgba).unwrap(); + store + .put( + file_id, + class, + &dr_thumbs::Thumbnail { + width: edge, + height: edge, + bytes, + }, + ) + .unwrap(); + store + } + + fn asking(file_id: u64, thumb_size: dr_thumbs::ThumbSize) -> ThumbnailRequest { + ThumbnailRequest { + row: 0, + path: "a.CR2".into(), + file_id: Some(file_id), + size: 0, + image_id: 1, + thumb_size, + needs_metadata: false, + full_resolution: false, + } + } + + #[test] + fn a_zoomed_cell_is_drawn_from_the_grid_class_while_the_large_one_is_fetched() { + // The offline symptom: the sweep stores only the grid class, so a grid + // zoomed past 256px found nothing at its class and went to a server + // that was not there — every cell blank, its thumbnail in the store. + use dr_thumbs::ThumbSize::{Grid, Large}; + let store = store_with("standin", 7, 8, Grid); + + let split = split_by_store(Some(&store), vec![asking(7, Large)]); + + assert_eq!(split.hits.len(), 1, "drawn from the store now"); + assert_eq!(split.hits[0].class, Grid, "and recorded as what it is"); + assert_eq!(split.to_fetch.len(), 1, "the large class is still wanted"); + assert_eq!(split.standing_in, 1); + } + + #[test] + fn a_large_thumbnail_answers_a_grid_request_without_a_fetch() { + use dr_thumbs::ThumbSize::{Grid, Large}; + let store = store_with("larger", 7, 16, Large); + + let split = split_by_store(Some(&store), vec![asking(7, Grid)]); + + assert_eq!(split.hits.len(), 1); + assert_eq!(split.hits[0].class, Large); + assert!( + split.to_fetch.is_empty(), + "nothing a fetch would improve on" + ); + assert_eq!(split.standing_in, 0); + } + + #[test] + fn an_exact_hit_is_not_a_stand_in() { + use dr_thumbs::ThumbSize::Large; + let store = store_with("exact", 7, 16, Large); + + let split = split_by_store(Some(&store), vec![asking(7, Large)]); + + assert_eq!(split.hits.len(), 1); + assert!(split.to_fetch.is_empty()); + assert_eq!(split.standing_in, 0); + } + #[test] fn the_thumbnail_pass_asks_only_for_what_is_missing() { // The work list is the whole point of the pass being resumable and of diff --git a/ui/dr-ui/src/library_ui/window.rs b/ui/dr-ui/src/library_ui/window.rs index 5471d4d..1f95f90 100644 --- a/ui/dr-ui/src/library_ui/window.rs +++ b/ui/dr-ui/src/library_ui/window.rs @@ -96,8 +96,20 @@ fn already_served( held: &std::collections::HashMap, ids: impl Iterator, ) -> std::collections::HashSet<(i64, dr_thumbs::ThumbSize)> { - ids.filter_map(|id| Some((id, held.get(&id)?.class?))) - .collect() + use dr_thumbs::ThumbSize; + let mut served = std::collections::HashSet::new(); + for id in ids { + let Some(class) = held.get(&id).and_then(|h| h.class) else { + continue; + }; + served.insert((id, class)); + // The large class is everything the grid class would be, and more: a + // cell the store answered with it has nothing left to ask for. + if class == ThumbSize::Large { + served.insert((id, ThumbSize::Grid)); + } + } + served } /// Where the loaded window starts for a view whose first visible cell is @@ -1014,11 +1026,13 @@ fn drain_thumbnails( cached, fetching, dating, + standing_in, } => { // Date reads produce no cell, so they are counted into // the bar's denominator or it finishes while work is - // still running. - job.add_total(dating); + // still running. A stand-in is delivered once from the + // store and again from the fetch, so it counts twice. + job.add_total(dating + standing_in); let mut parts = Vec::new(); if cached > 0 { @@ -1084,10 +1098,11 @@ fn drain_thumbnails( row.has_thumb = true; model.set_row_data(t.row, row); // What this cell is now showing, so the next reload - // can carry it over and know not to ask again. - if let Some(class) = classes.get(t.row) { - record_class(&ctl_cb, t.row, *class); - } + // can carry it over and know not to ask again. The + // pixels' own class, not the one the row asked for: + // a stand-in recorded as the class it stands in for + // would never be replaced. + record_class(&ctl_cb, t.row, t.class); } } ThumbnailMessage::Unavailable { row, reason } => { @@ -1542,6 +1557,22 @@ mod tests { ); } + #[test] + fn a_large_thumbnail_satisfies_the_grid_class() { + // Zooming out past 256px reloads the window at the grid class. A cell + // already showing the large class has every pixel the small one would + // give, so asking the store for it again is a read for nothing. + let held = hold_thumbnails( + &model_of(&[5], &[5]), + &[5], + &[Some(dr_thumbs::ThumbSize::Large)], + ); + let served = already_served(&held, [5i64].into_iter()); + + assert!(served.contains(&(5, dr_thumbs::ThumbSize::Large))); + assert!(served.contains(&(5, dr_thumbs::ThumbSize::Grid))); + } + #[test] fn a_cell_whose_class_was_never_recorded_is_fetched_again() { // Pixels with no class are pixels from before this bookkeeping existed