Files
DarkRoom/docs/traceability.md
T
dtourolleandClaude Opus 5 c8c6368542 Index the whole library by fetching what it has not seen
"Index faces in the whole library" could not. Its work list was intersected
with the thumbnail store at `ThumbSize::Large`, and nothing fills that class for
a whole library — `SWEEP_THUMB_SIZE` is deliberately `Grid`, because the large
class is ~860 MB of shards against ~200 MB and every syncing device pays it. So
the only images with a large proxy were the ones the user had personally zoomed
into or opened in the loupe. On this library that was 220 of 23,529.

The comment defending it misread the requirement:

    // Requesting one here would put face indexing on the network path,
    // which FR-CULL-8 explicitly keeps it off.

FR-CULL-8 keeps indexing off the **full decode**, not the network, and then says
the opposite in the same paragraph: "where no proxy exists, the job requests one
at background priority rather than decoding inline". faces.md §7 repeats it.
Neither was implemented.

So the pass fetches. Same two-stage route the thumbnail sweep uses — the header,
then the located preview's own byte range (FR-NC-3) — so no whole file is pulled
and no RAW is decoded, because an embedded preview is a JPEG. The work list is
now every visible image with no `face_index` row for the model: 23,308 here,
against nearly none before.

**It indexes at the resolution the preview actually has**, not the 1024 the old
tier would have given. `locate_preview` already picks the largest embedded
preview, and the thumbnail sweep was decoding it and throwing the detail away at
`downscale_to(256)`. A face 2% across the frame is 5 px on a grid thumbnail and
~61 px at the cap here — and 112 is what the embedder samples, so this is the
difference between an upsampled crop and a real one. `crop_px` records which,
per face, as §7 intended.

Capped at 3072 rather than truly full: `index_proxy` needs packed `f32` RGB at
12 bytes a pixel, so a 24 MP frame is ~288 MB and the fetch lanes hold one each.
The constant is named and sits next to the reason.

Orientation is applied **before** detection, not after downscaling. That costs a
permutation of a larger buffer — ~15 ms against a ~150 ms decode — and buys the
entire class of bug this codebase keeps having: detection then runs on the
photograph rather than the sensor, so every box and landmark is already in the
space the catalog stores and the overlay draws, with no second mapping to get
backwards.

One detector and one embedder serve every lane. The lanes are concurrent futures
on a single thread, not threads, and inference contains no await, so a `RefCell`
borrow never overlaps another — a pair per lane would duplicate ~16 MB of
weights for no parallelism.

Images with no face in them are recorded too. `face_index` records that
detection *ran*, and zero is its most valuable value: without the row every
landscape and document scan returns on every pass, for ever, and in a personal
library that is most of it (§7a).

The old store-only pass survives as `spawn_store_face_sweep` for
`examples/face_index.rs`, which indexes a local store with no network. The
settings copy no longer claims indexing reads "the photographs already
thumbnailed above", and the audit line says "to fetch" rather than "awaiting a
proxy", which had become a blocker that no longer blocks.

Verified against the real catalog: the new work list returns 23,308 where the
old one returned effectively nothing. 469 tests pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 18:51:53 +02:00

76 KiB

Requirements traceability matrix

Denominators are parsed from requirements.md at run time, never hardcoded. Coverage is the intersection of tagged and defined IDs over defined IDs, so it cannot exceed 100%.

Summary

Metric Value
Source files scanned 254
TRACES tags found 734
Requirements defined 177
Requirements covered 98
Coverage 55.4% (98/177)

By type

Type Covered Defined
FR 78 122
NFR 18 49
R 2 6

Orphan tags

A tag naming an ID requirements.md does not define — what renumbering produces, and what a typo produces.

None.

Tagged requirements

ID Tagged in
FR-CAT-1 core/dr-catalog/src/scan.rs:1, core/dr-catalog/src/walk.rs:109, core/dr-catalog/src/walk.rs:162, core/dr-catalog/src/walk.rs:1, core/dr-sync/src/scan.rs:93, core/dr-types/src/lib.rs:200, core/dr-types/src/lib.rs:269, core/dr-types/src/lib.rs:302, tools/traceability/src/lib.rs:479, tools/traceability/src/lib.rs:511, ui/dr-ui/src/activity.rs:1, ui/dr-ui/src/library.rs:1
FR-CAT-10 core/dr-ingest/src/layout.rs:1, core/dr-ingest/src/lib.rs:1, core/dr-ingest/src/lib.rs:733, core/dr-types/src/settings.rs:116, ui/dr-ui/src/import.rs:1, ui/dr-ui/src/import.rs:337, ui/dr-ui/src/import_ui.rs:1, ui/dr-ui/src/lib.rs:1107, ui/dr-ui/ui/import.slint:5, ui/dr-ui/ui/library.slint:1008, ui/dr-ui/ui/library.slint:1170, ui/dr-ui/ui/library.slint:857
FR-CAT-11 core/dr-catalog/src/dedup.rs:1, core/dr-ingest/src/lib.rs:1, core/dr-ingest/src/lib.rs:392, core/dr-sync/src/upload.rs:40, ui/dr-ui/src/import.rs:1, ui/dr-ui/src/import_ui.rs:1, ui/dr-ui/src/lib.rs:1107, ui/dr-ui/src/library.rs:163, ui/dr-ui/src/library.rs:2162, ui/dr-ui/ui/import.slint:5
FR-CAT-12 core/dr-pipeline/src/sidecar.rs:118
FR-CAT-13 core/dr-catalog/src/keywords.rs:1
FR-CAT-15 core/dr-catalog/src/schema.rs:583, core/dr-catalog/src/trash.rs:1, core/dr-sync-nextcloud/src/lib.rs:447, core/dr-sync/src/lib.rs:124, core/dr-sync/src/scan.rs:426, core/dr-sync/src/scan.rs:57, core/dr-thumbs/src/lib.rs:376, ui/dr-ui/src/collections_ui.rs:1225, ui/dr-ui/src/collections_ui.rs:1995, ui/dr-ui/src/library.rs:163, ui/dr-ui/src/library.rs:180, ui/dr-ui/src/library.rs:209, ui/dr-ui/src/library.rs:3430, ui/dr-ui/src/library.rs:3464, ui/dr-ui/src/library_ui.rs:184, ui/dr-ui/src/library_ui.rs:757, ui/dr-ui/src/trash.rs:1, ui/dr-ui/ui/collections.slint:572
FR-CAT-1a core/dr-catalog/src/walk.rs:1, core/dr-types/src/lib.rs:53
FR-CAT-2 core/dr-catalog/src/lib.rs:1, core/dr-catalog/src/schema.rs:1, tools/traceability/src/lib.rs:479
FR-CAT-3 core/dr-catalog/src/jobs.rs:1, core/dr-catalog/src/walk.rs:66, core/dr-sync/src/scan.rs:69, core/dr-thumbs/src/codec.rs:1, core/dr-thumbs/src/lib.rs:1, ui/dr-ui/src/derived_sync.rs:1, ui/dr-ui/src/import.rs:464, ui/dr-ui/src/import.rs:489, ui/dr-ui/src/library.rs:2639, ui/dr-ui/src/library.rs:2964, ui/dr-ui/src/library_ui.rs:171, ui/dr-ui/src/library_ui.rs:3626, ui/dr-ui/src/library_ui.rs:4592, ui/dr-ui/ui/app.slint:540, ui/dr-ui/ui/settings.slint:353, ui/dr-ui/ui/settings.slint:72
FR-CAT-4 core/dr-catalog/src/lib.rs:1, core/dr-catalog/src/query.rs:1, core/dr-catalog/src/schema.rs:304, ui/dr-ui/src/library.rs:190, ui/dr-ui/src/library.rs:1, ui/dr-ui/src/library_ui.rs:1
FR-CAT-5 core/dr-catalog/src/keywords.rs:1, core/dr-catalog/src/merge.rs:1, core/dr-catalog/src/rating.rs:1, core/dr-catalog/src/schema.rs:1001, core/dr-catalog/src/schema.rs:498, core/dr-decode/src/lib.rs:285, core/dr-decode/src/lib.rs:404, core/dr-pipeline/src/sidecar.rs:135, ui/dr-ui/src/collections_ui.rs:1578, ui/dr-ui/src/collections_ui.rs:1597, ui/dr-ui/src/collections_ui.rs:243, ui/dr-ui/src/collections_ui.rs:340, ui/dr-ui/src/collections_ui.rs:89, ui/dr-ui/src/library.rs:3478, ui/dr-ui/src/library_ui.rs:6273, ui/dr-ui/src/library_ui.rs:6284, ui/dr-ui/src/library_ui.rs:628, ui/dr-ui/src/library_ui.rs:6297, ui/dr-ui/src/library_ui.rs:6312, ui/dr-ui/src/library_ui.rs:6321, ui/dr-ui/ui/app.slint:485, ui/dr-ui/ui/app.slint:658, ui/dr-ui/ui/library.slint:1219, ui/dr-ui/ui/library.slint:1222, ui/dr-ui/ui/library.slint:18, ui/dr-ui/ui/library.slint:850, ui/dr-ui/ui/library.slint:902
FR-CAT-6 core/dr-catalog/src/collections.rs:1, core/dr-catalog/src/keywords.rs:1, core/dr-catalog/src/lib.rs:1, core/dr-catalog/src/query.rs:1, core/dr-catalog/src/rating.rs:1, core/dr-catalog/src/schema.rs:498, core/dr-types/src/selector.rs:1, core/dr-types/src/settings.rs:63, core/dr-types/src/time.rs:67, core/dr-types/src/time.rs:90, ui/dr-ui/src/library.rs:214, ui/dr-ui/src/library.rs:3724, ui/dr-ui/src/library_ui.rs:315, ui/dr-ui/src/library_ui.rs:387, ui/dr-ui/src/library_ui.rs:5142, ui/dr-ui/src/library_ui.rs:5195, ui/dr-ui/src/library_ui.rs:6413, ui/dr-ui/ui/app.slint:488, ui/dr-ui/ui/app.slint:658, ui/dr-ui/ui/app.slint:897, ui/dr-ui/ui/library.slint:109, ui/dr-ui/ui/library.slint:1288, ui/dr-ui/ui/library.slint:902, ui/dr-ui/ui/settings.slint:128
FR-CAT-7 core/dr-catalog/src/collections.rs:1, core/dr-catalog/src/merge.rs:1, core/dr-catalog/src/sync.rs:1, core/dr-types/src/selector.rs:1, ui/dr-ui/src/collections_ui.rs:1693, ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/derived_sync.rs:1, ui/dr-ui/src/library_ui.rs:3484, ui/dr-ui/src/library_ui.rs:4182, ui/dr-ui/ui/app.slint:653, ui/dr-ui/ui/collections.slint:4, ui/dr-ui/ui/library.slint:2528, ui/dr-ui/ui/library.slint:873, ui/dr-ui/ui/library.slint:892
FR-CAT-8 core/dr-pipeline/src/graph.rs:345, core/dr-pipeline/src/graph.rs:384, core/dr-pipeline/src/ops/curve.rs:136, core/dr-pipeline/src/ops/curve.rs:652, core/dr-pipeline/src/sidecar.rs:1627, core/dr-pipeline/src/sidecar.rs:92, core/dr-pipeline/src/state.rs:1, core/dr-pipeline/src/state.rs:75, core/dr-pipeline/tests/tone_curve.rs:34, ui/dr-ui/src/develop.rs:3287, ui/dr-ui/src/develop.rs:3316, ui/dr-ui/src/export.rs:752, ui/dr-ui/src/lib.rs:1368, ui/dr-ui/src/lib.rs:1741, ui/dr-ui/src/lib.rs:1877, ui/dr-ui/src/lib.rs:480, ui/dr-ui/src/lib.rs:905, ui/dr-ui/src/library.rs:1571, ui/dr-ui/src/library.rs:375, ui/dr-ui/src/library.rs:422, ui/dr-ui/src/library.rs:459, ui/dr-ui/src/library.rs:707, ui/dr-ui/src/library_ui.rs:4884, ui/dr-ui/src/sidecar_cache.rs:1
FR-CAT-9 core/dr-catalog/src/cache.rs:1, core/dr-catalog/src/scan.rs:1, core/dr-catalog/src/schema.rs:555, core/dr-catalog/src/walk.rs:162, core/dr-catalog/src/walk.rs:1, core/dr-catalog/src/walk.rs:435, core/dr-catalog/src/walk.rs:704, core/dr-sync-nextcloud/src/desktop_client.rs:30, core/dr-sync/src/reachability.rs:1, core/dr-types/src/lib.rs:119, ui/dr-ui/src/develop.rs:2812, ui/dr-ui/src/library.rs:149, ui/dr-ui/src/library.rs:1531, ui/dr-ui/src/library.rs:1608, ui/dr-ui/src/library.rs:231, ui/dr-ui/src/library.rs:3831, ui/dr-ui/src/library.rs:459, ui/dr-ui/src/library.rs:691, ui/dr-ui/src/library.rs:707, ui/dr-ui/src/library.rs:761, ui/dr-ui/src/library_ui.rs:1564, ui/dr-ui/src/library_ui.rs:1590, ui/dr-ui/src/library_ui.rs:1606, ui/dr-ui/src/library_ui.rs:1700, ui/dr-ui/src/library_ui.rs:226, ui/dr-ui/src/library_ui.rs:2316, ui/dr-ui/src/library_ui.rs:259, ui/dr-ui/src/library_ui.rs:2754, ui/dr-ui/src/library_ui.rs:2978, ui/dr-ui/src/library_ui.rs:3259, ui/dr-ui/src/library_ui.rs:3347, ui/dr-ui/src/library_ui.rs:3535, ui/dr-ui/src/library_ui.rs:3653, ui/dr-ui/src/library_ui.rs:440, ui/dr-ui/src/library_ui.rs:498, ui/dr-ui/src/library_ui.rs:5240, ui/dr-ui/src/library_ui.rs:5355, ui/dr-ui/src/presets.rs:326, ui/dr-ui/src/presets.rs:338, ui/dr-ui/src/sidecar_cache.rs:1
FR-CULL-1 core/dr-decode/src/preview.rs:121
FR-CULL-10 core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/develop.rs:119, ui/dr-ui/src/develop.rs:128, ui/dr-ui/src/develop.rs:1776, ui/dr-ui/src/develop.rs:194, ui/dr-ui/src/develop.rs:589, ui/dr-ui/src/faces.rs:1, ui/dr-ui/src/identity.rs:1, ui/dr-ui/src/identity_ui.rs:1, ui/dr-ui/src/lib.rs:1849, ui/dr-ui/ui/identity.slint:1
FR-CULL-11 core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/identity.rs:1, ui/dr-ui/src/identity_ui.rs:1, ui/dr-ui/ui/identity.slint:1
FR-CULL-12 core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/identity.rs:1, ui/dr-ui/ui/identity.slint:1
FR-CULL-2 core/dr-decode/src/locate.rs:1, core/dr-decode/src/preview.rs:148, ui/dr-ui/src/import.rs:464
FR-CULL-4 core/dr-catalog/src/rating.rs:1, core/dr-pipeline/src/sidecar.rs:135, ui/dr-ui/src/library.rs:214, ui/dr-ui/src/library.rs:375
FR-CULL-8 core/dr-catalog/src/face_shard.rs:1, core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:343, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/faces.rs:1, ui/dr-ui/src/library.rs:2640, ui/dr-ui/src/library.rs:2685, ui/dr-ui/ui/settings.slint:385, ui/dr-ui/ui/settings.slint:81
FR-CULL-9 core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/faces.rs:1, ui/dr-ui/src/identity_ui.rs:1
FR-DEV-2 core/dr-pipeline/src/operation.rs:352
FR-DEV-3 core/dr-gpu/src/adjust.rs:2165, core/dr-gpu/src/adjust.rs:651, core/dr-gpu/src/adjust.rs:770, core/dr-gpu/src/adjust.rs:84, core/dr-gpu/tests/tone_curve.rs:1, core/dr-pipeline/src/detail.rs:387, core/dr-pipeline/src/detail.rs:465, core/dr-pipeline/src/framing.rs:188, core/dr-pipeline/src/framing.rs:362, core/dr-pipeline/src/framing.rs:617, core/dr-pipeline/src/graph.rs:169, core/dr-pipeline/src/graph.rs:573, core/dr-pipeline/src/mask.rs:120, core/dr-pipeline/src/operation.rs:299, core/dr-pipeline/src/operation.rs:479, core/dr-pipeline/src/ops/capture_sharpen.rs:1, core/dr-pipeline/src/ops/capture_sharpen.rs:207, core/dr-pipeline/src/ops/curve.rs:1, core/dr-pipeline/src/ops/curve.rs:218, core/dr-pipeline/src/ops/curve.rs:631, core/dr-pipeline/src/ops/curve.rs:99, core/dr-pipeline/src/ops/local_contrast.rs:1, core/dr-pipeline/src/ops/noise_reduction.rs:1, core/dr-pipeline/src/ops/noise_reduction.rs:270, core/dr-pipeline/src/sidecar.rs:156, core/dr-pipeline/src/sidecar.rs:1627, core/dr-pipeline/src/sidecar.rs:1687, core/dr-pipeline/tests/tone_curve.rs:1, ui/dr-ui/src/develop.rs:101, ui/dr-ui/src/develop.rs:1280, ui/dr-ui/src/develop.rs:163, ui/dr-ui/src/develop.rs:1758, ui/dr-ui/src/develop.rs:1776, ui/dr-ui/src/develop.rs:1790, ui/dr-ui/src/develop.rs:1812, ui/dr-ui/src/develop.rs:1958, ui/dr-ui/src/develop.rs:2056, ui/dr-ui/src/develop.rs:326, ui/dr-ui/src/develop.rs:3287, ui/dr-ui/src/develop.rs:363, ui/dr-ui/src/develop.rs:3851, ui/dr-ui/src/develop.rs:3905, ui/dr-ui/src/develop.rs:3949, ui/dr-ui/src/develop.rs:3999, ui/dr-ui/src/develop.rs:628, ui/dr-ui/src/develop.rs:675, ui/dr-ui/src/lib.rs:1425, ui/dr-ui/src/lib.rs:2127, ui/dr-ui/src/lib.rs:301, ui/dr-ui/src/library.rs:422, ui/dr-ui/src/masks_ui.rs:218, ui/dr-ui/src/masks_ui.rs:41, ui/dr-ui/src/masks_ui.rs:816, ui/dr-ui/src/masks_ui.rs:930, ui/dr-ui/src/segmentation.rs:219, ui/dr-ui/src/segmentation.rs:322, ui/dr-ui/src/segmentation.rs:350, ui/dr-ui/ui/app.slint:2105, ui/dr-ui/ui/app.slint:984
FR-DEV-3a core/dr-pipeline/build.rs:1807, core/dr-pipeline/ops/exposure.yaml:1, core/dr-pipeline/src/descriptor.rs:117, core/dr-pipeline/src/descriptor.rs:157, core/dr-pipeline/src/descriptor.rs:177, core/dr-pipeline/src/descriptor.rs:232, core/dr-pipeline/src/framing.rs:259, core/dr-pipeline/src/graph.rs:23, core/dr-pipeline/src/graph.rs:250, core/dr-pipeline/src/graph.rs:45, core/dr-pipeline/src/graph.rs:58, core/dr-pipeline/src/mask.rs:954, core/dr-pipeline/src/operation.rs:328, core/dr-pipeline/src/ops/curve.rs:318, ui/dr-ui/src/develop.rs:1177, ui/dr-ui/src/lib.rs:595
FR-DEV-3b core/dr-pipeline/src/descriptor.rs:177, core/dr-pipeline/src/framing.rs:259, core/dr-pipeline/src/graph.rs:58, core/dr-pipeline/src/operation.rs:328
FR-DEV-3c core/dr-pipeline/build.rs:1807, core/dr-pipeline/ops/exposure.yaml:1, core/dr-pipeline/src/graph.rs:250, core/dr-pipeline/src/graph.rs:45, core/dr-pipeline/src/mask.rs:954, ui/dr-ui/src/develop.rs:4578
FR-DEV-3d core/dr-gpu/src/adjust.rs:1041, core/dr-gpu/src/adjust.rs:104, core/dr-gpu/src/adjust.rs:770, core/dr-gpu/src/adjust.rs:84, core/dr-gpu/src/adjust.rs:986, core/dr-gpu/tests/capture_sharpen.rs:434, core/dr-gpu/tests/detail_stage.rs:242, core/dr-gpu/tests/local_contrast.rs:476, core/dr-gpu/tests/noise_reduction.rs:556, core/dr-pipeline/src/framing.rs:188, core/dr-pipeline/src/graph.rs:612, core/dr-pipeline/src/operation.rs:31, core/dr-pipeline/src/operation.rs:352, core/dr-pipeline/src/operation.rs:52, core/dr-pipeline/src/operation.rs:70
FR-DEV-3e core/dr-decode/src/base_curve.rs:145, core/dr-decode/src/base_curve.rs:158, core/dr-decode/src/base_curve.rs:1, core/dr-decode/src/base_curve.rs:267, core/dr-decode/src/base_curve.rs:347, core/dr-decode/src/base_curve.rs:55, core/dr-decode/src/lib.rs:121, core/dr-decode/src/lib.rs:708, core/dr-decode/src/lib.rs:748, core/dr-decode/src/profile.rs:102, core/dr-decode/src/profile.rs:151, core/dr-decode/src/profile.rs:1, core/dr-decode/src/profile.rs:235, core/dr-decode/src/profile.rs:286, core/dr-decode/src/profile.rs:343, core/dr-decode/src/profile.rs:458, core/dr-decode/src/profile.rs:492, core/dr-decode/src/profile.rs:630, core/dr-gpu/src/adjust.rs:37, core/dr-gpu/src/adjust.rs:967, core/dr-gpu/src/demosaic.rs:121, core/dr-gpu/src/demosaic.rs:86, core/dr-gpu/tests/base_curve.rs:1, core/dr-pipeline/src/operation.rs:1424, core/dr-pipeline/src/operation.rs:1505, core/dr-pipeline/src/operation.rs:1530, core/dr-pipeline/src/operation.rs:1545, core/dr-pipeline/src/operation.rs:1569, core/dr-pipeline/src/operation.rs:279, core/dr-pipeline/src/operation.rs:403, core/dr-pipeline/src/operation.rs:413, core/dr-pipeline/src/operation.rs:563
FR-DEV-3f core/dr-film/src/bake.rs:271, core/dr-film/src/bake.rs:62, core/dr-film/src/boolean_grain.rs:1, core/dr-film/src/boolean_grain.rs:78, core/dr-film/src/grain.rs:140, core/dr-film/src/grain.rs:1, core/dr-film/src/grain.rs:302, core/dr-film/src/grain.rs:79, core/dr-film/src/lib.rs:160, core/dr-film/src/lib.rs:1, core/dr-film/src/profile.rs:100, core/dr-film/src/profile.rs:142, core/dr-film/src/profile.rs:182, core/dr-film/src/profile.rs:259, core/dr-film/src/profile.rs:502, core/dr-film/src/profile.rs:73, core/dr-gpu/src/adjust.rs:139, core/dr-gpu/src/adjust.rs:196, core/dr-gpu/src/adjust.rs:357, core/dr-gpu/src/adjust.rs:483, core/dr-gpu/src/adjust.rs:77, core/dr-gpu/tests/film_sim.rs:191, core/dr-gpu/tests/film_sim.rs:1, core/dr-pipeline/src/graph.rs:101, core/dr-pipeline/src/graph.rs:124, core/dr-pipeline/src/graph.rs:324, core/dr-pipeline/src/operation.rs:1028, core/dr-pipeline/src/operation.rs:1057, core/dr-pipeline/src/operation.rs:1424, core/dr-pipeline/src/operation.rs:265, core/dr-pipeline/src/operation.rs:279, core/dr-pipeline/src/ops/film_sim.rs:126, core/dr-pipeline/src/ops/film_sim.rs:150, core/dr-pipeline/src/ops/film_sim.rs:1, core/dr-pipeline/src/ops/film_sim.rs:328, core/dr-pipeline/src/ops/film_sim.rs:42, core/dr-pipeline/src/ops/film_sim.rs:85, core/dr-pipeline/src/ops/film_sim.rs:90, core/dr-pipeline/src/sidecar.rs:111, core/dr-pipeline/src/sidecar.rs:167, core/dr-pipeline/src/sidecar.rs:1948, core/dr-pipeline/src/sidecar.rs:2024, core/dr-pipeline/src/sidecar.rs:533, core/dr-pipeline/src/sidecar.rs:660, core/dr-pipeline/src/sidecar.rs:792, core/dr-pipeline/src/state.rs:100, core/dr-pipeline/src/state.rs:115, core/dr-pipeline/src/state.rs:60, ui/dr-ui/src/develop.rs:2827, ui/dr-ui/src/develop.rs:2844, ui/dr-ui/src/develop.rs:2856, ui/dr-ui/src/develop.rs:2894, ui/dr-ui/src/develop.rs:2903, ui/dr-ui/src/develop.rs:3006, ui/dr-ui/src/develop.rs:3324, ui/dr-ui/src/develop.rs:3339, ui/dr-ui/src/lib.rs:2101, ui/dr-ui/src/lib.rs:528, ui/dr-ui/src/lib.rs:586, ui/dr-ui/src/library.rs:413, ui/dr-ui/src/library.rs:662, ui/dr-ui/src/presets.rs:275, ui/dr-ui/ui/adjust.slint:889, ui/dr-ui/ui/adjust.slint:959, ui/dr-ui/ui/app.slint:2717, ui/dr-ui/ui/app.slint:778
FR-DEV-3h core/dr-decode/src/lib.rs:404, core/dr-decode/src/preview.rs:29, core/dr-pipeline/src/framing.rs:202, core/dr-pipeline/src/framing.rs:362, core/dr-pipeline/src/framing.rs:924, core/dr-types/src/lib.rs:336, core/dr-types/src/lib.rs:444, core/dr-types/src/lib.rs:456, core/dr-types/src/lib.rs:472, ui/dr-ui/src/develop.rs:138, ui/dr-ui/src/develop.rs:1975, ui/dr-ui/src/segmentation.rs:322
FR-DEV-4 core/dr-gpu/src/adjust.rs:770, core/dr-gpu/src/lib.rs:217
FR-DEV-5 core/dr-pipeline/src/graph.rs:345, core/dr-pipeline/src/graph.rs:384, core/dr-pipeline/src/history.rs:102, core/dr-pipeline/src/history.rs:110, core/dr-pipeline/src/history.rs:127, core/dr-pipeline/src/history.rs:184, core/dr-pipeline/src/history.rs:1, core/dr-pipeline/src/history.rs:214, core/dr-pipeline/src/history.rs:234, core/dr-pipeline/src/history.rs:293, core/dr-pipeline/src/history.rs:479, core/dr-pipeline/src/history.rs:489, core/dr-pipeline/src/history.rs:499, core/dr-pipeline/src/history.rs:526, core/dr-pipeline/src/history.rs:86, core/dr-pipeline/src/state.rs:1, core/dr-pipeline/src/state.rs:75, ui/dr-ui/src/develop.rs:2856, ui/dr-ui/src/develop.rs:3339, ui/dr-ui/src/develop.rs:3369, ui/dr-ui/src/develop.rs:3382, ui/dr-ui/src/develop.rs:3394, ui/dr-ui/src/develop.rs:3410, ui/dr-ui/src/develop.rs:3442, ui/dr-ui/src/develop.rs:3446, ui/dr-ui/src/develop.rs:3465, ui/dr-ui/src/develop.rs:3481, ui/dr-ui/src/develop.rs:610, ui/dr-ui/src/labels.rs:12, ui/dr-ui/src/labels.rs:215, ui/dr-ui/src/lib.rs:1389, ui/dr-ui/src/lib.rs:1403, ui/dr-ui/src/lib.rs:1411, ui/dr-ui/src/lib.rs:2297, ui/dr-ui/ui/history.slint:1
FR-DEV-6 core/dr-pipeline/src/preset.rs:1, core/dr-types/src/settings.rs:182, ui/dr-ui/src/develop.rs:3281, ui/dr-ui/src/develop.rs:3302, ui/dr-ui/src/lib.rs:1368, ui/dr-ui/src/library.rs:1571, ui/dr-ui/src/library.rs:375, ui/dr-ui/src/library.rs:403, ui/dr-ui/src/library_ui.rs:2576, ui/dr-ui/src/library_ui.rs:2978, ui/dr-ui/src/library_ui.rs:466, ui/dr-ui/src/presets.rs:1, ui/dr-ui/src/settings_ui.rs:547, ui/dr-ui/ui/adjust.slint:598, ui/dr-ui/ui/library.slint:1315, ui/dr-ui/ui/library.slint:831, ui/dr-ui/ui/library.slint:913, ui/dr-ui/ui/settings.slint:100
FR-DEV-7 core/dr-pipeline/src/history.rs:214, core/dr-pipeline/src/history.rs:499, core/dr-pipeline/src/history.rs:526, ui/dr-ui/src/develop.rs:3410, ui/dr-ui/src/develop.rs:3442, ui/dr-ui/src/lib.rs:1411, ui/dr-ui/src/lib.rs:2297, ui/dr-ui/ui/history.slint:1
FR-DEV-8 core/dr-gpu/src/detail.rs:252, core/dr-gpu/src/detail.rs:434, core/dr-gpu/tests/detail_instances.rs:1, core/dr-gpu/tests/spot_removal.rs:1, core/dr-pipeline/src/detail.rs:363, core/dr-pipeline/src/detail.rs:387, core/dr-pipeline/src/detail.rs:422, core/dr-pipeline/src/detail.rs:496, core/dr-pipeline/src/graph.rs:113, core/dr-pipeline/src/graph.rs:191, core/dr-pipeline/src/graph.rs:681, core/dr-pipeline/src/operation.rs:299, core/dr-pipeline/src/operation.rs:517, core/dr-pipeline/src/sidecar.rs:183, core/dr-pipeline/src/sidecar.rs:352, core/dr-pipeline/src/sidecar.rs:672, core/dr-pipeline/src/sidecar.rs:808, core/dr-pipeline/src/sidecar.rs:862, core/dr-pipeline/src/sidecar.rs:892, core/dr-pipeline/src/spot.rs:115, core/dr-pipeline/src/spot.rs:151, core/dr-pipeline/src/spot.rs:1, core/dr-pipeline/src/spot.rs:207, core/dr-pipeline/src/spot.rs:387, core/dr-pipeline/src/spot.rs:472, core/dr-pipeline/src/spot.rs:582, core/dr-pipeline/src/spot.rs:673, core/dr-pipeline/src/state.rs:103, core/dr-pipeline/tests/spot_sidecar.rs:1, core/dr-pipeline/tests/spots.rs:1, ui/dr-ui/src/develop.rs:2127, ui/dr-ui/src/develop.rs:2165, ui/dr-ui/src/develop.rs:2230, ui/dr-ui/src/develop.rs:2313, ui/dr-ui/src/develop.rs:2327, ui/dr-ui/src/develop.rs:658, ui/dr-ui/src/labels.rs:52, ui/dr-ui/src/lib.rs:1432, ui/dr-ui/src/lib.rs:2394, ui/dr-ui/src/lib.rs:306, ui/dr-ui/src/spots_ui.rs:19, ui/dr-ui/src/spots_ui.rs:1, ui/dr-ui/src/spots_ui.rs:265, ui/dr-ui/ui/adjust.slint:676, ui/dr-ui/ui/app.slint:1840, ui/dr-ui/ui/app.slint:2357, ui/dr-ui/ui/app.slint:2623, ui/dr-ui/ui/app.slint:332, ui/dr-ui/ui/spots.slint:48, ui/dr-ui/ui/spots.slint:5
FR-DSP-1 core/dr-gpu/src/adjust.rs:2088, core/dr-gpu/src/adjust.rs:2165, core/dr-gpu/src/adjust.rs:2250, core/dr-gpu/src/adjust.rs:54, core/dr-gpu/src/adjust.rs:770, core/dr-gpu/src/lib.rs:54, core/dr-gpu/src/lib.rs:94, core/dr-gpu/tests/capture_sharpen.rs:200, core/dr-gpu/tests/detail_stage.rs:328, core/dr-gpu/tests/local_contrast.rs:263, core/dr-gpu/tests/noise_reduction.rs:378, core/dr-pipeline/src/detail.rs:136, core/dr-pipeline/src/detail.rs:465, core/dr-pipeline/src/graph.rs:543, core/dr-pipeline/src/graph.rs:573, core/dr-pipeline/src/ops/capture_sharpen.rs:1, core/dr-pipeline/src/ops/capture_sharpen.rs:654, core/dr-pipeline/src/ops/local_contrast.rs:1, core/dr-pipeline/src/ops/local_contrast.rs:662, core/dr-pipeline/src/ops/noise_reduction.rs:695, core/dr-pipeline/src/spot.rs:673, ui/dr-ui/src/develop.rs:2627, ui/dr-ui/src/develop.rs:3640, ui/dr-ui/src/develop.rs:4123, ui/dr-ui/src/develop.rs:4157, ui/dr-ui/src/lib.rs:70, ui/dr-ui/src/lib.rs:736, ui/dr-ui/src/lib.rs:795
FR-DSP-6 core/dr-pipeline/src/operation.rs:446, core/dr-types/src/colour.rs:1
FR-DSP-7 core/dr-gpu/src/histogram.rs:147, core/dr-gpu/src/histogram.rs:1, core/dr-gpu/src/histogram.rs:281, core/dr-gpu/src/histogram.rs:50, core/dr-gpu/src/shaders/histogram.wgsl:1, ui/dr-ui/src/develop.rs:2693, ui/dr-ui/src/develop.rs:5225, ui/dr-ui/src/develop.rs:5257, ui/dr-ui/src/develop.rs:621, ui/dr-ui/src/histogram.rs:1, ui/dr-ui/src/lib.rs:1488, ui/dr-ui/src/lib.rs:296, ui/dr-ui/ui/app.slint:292, ui/dr-ui/ui/histogram.slint:122, ui/dr-ui/ui/histogram.slint:1
FR-EXP-1 core/dr-export/src/encode.rs:1, core/dr-export/src/lib.rs:1, core/dr-types/src/settings.rs:1, ui/dr-ui/src/settings_ui.rs:1
FR-EXP-2 core/dr-export/src/encode.rs:1, core/dr-export/src/error.rs:26, core/dr-export/src/icc.rs:1, core/dr-export/src/lib.rs:153, core/dr-export/src/lib.rs:1, core/dr-export/src/lib.rs:53, core/dr-gpu/src/adjust.rs:2398, core/dr-pipeline/src/graph.rs:533, core/dr-pipeline/src/graph.rs:587, core/dr-pipeline/src/operation.rs:446, core/dr-types/src/colour.rs:1, core/dr-types/src/settings.rs:1, core/dr-types/src/settings.rs:595, ui/dr-ui/src/settings_ui.rs:1
FR-EXP-3 core/dr-export/src/lib.rs:1, core/dr-export/src/size.rs:1, core/dr-export/src/size.rs:25, core/dr-types/src/settings.rs:1, ui/dr-ui/src/settings_ui.rs:1
FR-EXP-4 core/dr-export/src/lib.rs:1, core/dr-export/src/sharpen.rs:1, core/dr-export/src/size.rs:1, ui/dr-ui/src/settings_ui.rs:1
FR-EXP-5 ui/dr-ui/src/settings_store.rs:1
FR-EXP-6 core/dr-export/src/lib.rs:1, core/dr-export/src/name.rs:1, core/dr-types/src/settings.rs:1, ui/dr-ui/src/export.rs:1, ui/dr-ui/src/lib.rs:344, ui/dr-ui/src/settings_ui.rs:1, ui/dr-ui/src/settings_ui.rs:48, ui/dr-ui/src/settings_ui.rs:602
FR-EXP-7 ui/dr-ui/src/activity.rs:83, ui/dr-ui/src/export.rs:1, ui/dr-ui/src/export.rs:944, ui/dr-ui/src/lib.rs:186, ui/dr-ui/src/lib.rs:2043, ui/dr-ui/src/lib.rs:344, ui/dr-ui/src/lib.rs:379, ui/dr-ui/src/lib.rs:406, ui/dr-ui/src/library_ui.rs:3364, ui/dr-ui/src/library_ui.rs:557, ui/dr-ui/src/library_ui.rs:6255, ui/dr-ui/src/library_ui.rs:6332, ui/dr-ui/src/library_ui.rs:6344, ui/dr-ui/src/library_ui.rs:660, ui/dr-ui/src/library_ui.rs:717, ui/dr-ui/ui/app.slint:1120, ui/dr-ui/ui/app.slint:1548, ui/dr-ui/ui/library.slint:1323, ui/dr-ui/ui/library.slint:835, ui/dr-ui/ui/library.slint:928
FR-EXP-8 core/dr-decode/src/lib.rs:326, core/dr-decode/src/lib.rs:350, core/dr-decode/src/lib.rs:364, core/dr-decode/src/lib.rs:71, core/dr-decode/src/lib.rs:79, core/dr-decode/src/lib.rs:82, core/dr-decode/src/locate.rs:1164, core/dr-decode/src/locate.rs:1223, core/dr-decode/src/locate.rs:316, core/dr-decode/src/locate.rs:487, core/dr-decode/src/locate.rs:571, core/dr-decode/src/locate.rs:584, core/dr-decode/src/locate.rs:667, core/dr-export/examples/export.rs:99, core/dr-export/src/encode.rs:117, core/dr-export/src/encode.rs:161, core/dr-export/src/encode.rs:1, core/dr-export/src/encode.rs:206, core/dr-export/src/encode.rs:235, core/dr-export/src/encode.rs:311, core/dr-export/src/encode.rs:325, core/dr-export/src/encode.rs:408, core/dr-export/src/encode.rs:456, core/dr-export/src/encode.rs:70, core/dr-export/src/encode.rs:795, core/dr-export/src/encode.rs:809, core/dr-export/src/encode.rs:850, core/dr-export/src/encode.rs:898, core/dr-export/src/exif.rs:1, core/dr-export/src/lib.rs:136, core/dr-export/src/metadata.rs:1, core/dr-export/src/metadata.rs:41, core/dr-export/src/metadata.rs:74, core/dr-types/src/lib.rs:652, core/dr-types/src/settings.rs:313, ui/dr-ui/src/export.rs:620, ui/dr-ui/src/export.rs:648, ui/dr-ui/src/export.rs:779, ui/dr-ui/src/export.rs:796, ui/dr-ui/src/settings_ui.rs:1
FR-EXP-9 core/dr-decode/src/lib.rs:506, core/dr-export/src/lib.rs:128, core/dr-export/src/lib.rs:1, core/dr-gpu/src/adjust.rs:1068, ui/dr-ui/src/develop.rs:2771, ui/dr-ui/src/lib.rs:344
FR-NC-1 core/dr-sync-nextcloud/src/auth.rs:132, core/dr-sync-nextcloud/src/auth.rs:44, core/dr-sync-nextcloud/src/session.rs:128, ui/dr-ui/src/launch.rs:256, ui/dr-ui/src/launch.rs:49, ui/dr-ui/src/launch_ui.rs:344
FR-NC-10 ui/dr-ui/src/export.rs:1, ui/dr-ui/src/lib.rs:406, ui/dr-ui/src/library.rs:1608, ui/dr-ui/src/library.rs:459, ui/dr-ui/src/library.rs:761, ui/dr-ui/src/library.rs:964, ui/dr-ui/src/library_ui.rs:1606, ui/dr-ui/src/library_ui.rs:3364, ui/dr-ui/src/library_ui.rs:498, ui/dr-ui/src/sidecar_cache.rs:1
FR-NC-12 core/dr-sync-nextcloud/src/lib.rs:34, core/dr-sync-nextcloud/src/lib.rs:892, core/dr-sync/src/lib.rs:157, core/dr-sync/src/lib.rs:40, core/dr-sync/src/reachability.rs:1
FR-NC-2 core/dr-sync-nextcloud/src/session.rs:128, core/dr-sync-nextcloud/src/session.rs:34
FR-NC-3 core/dr-decode/src/locate.rs:1, core/dr-decode/src/preview.rs:148, core/dr-sync/src/capability.rs:41, core/dr-thumbs/src/lib.rs:1, ui/dr-ui/src/library.rs:1, ui/dr-ui/src/library.rs:2639, ui/dr-ui/src/library.rs:2964, ui/dr-ui/src/library_ui.rs:1, ui/dr-ui/src/library_ui.rs:3626, ui/dr-ui/src/library_ui.rs:4592, ui/dr-ui/ui/app.slint:540, ui/dr-ui/ui/settings.slint:353, ui/dr-ui/ui/settings.slint:72
FR-NC-4 core/dr-sync-nextcloud/src/propfind.rs:100, core/dr-sync-nextcloud/src/propfind.rs:51, core/dr-sync/src/capability.rs:6, core/dr-sync/src/lib.rs:157, core/dr-sync/src/scan.rs:93, ui/dr-ui/src/launch.rs:49
FR-NC-5 core/dr-sync-nextcloud/src/propfind.rs:51, ui/dr-ui/src/import.rs:489
FR-NC-6 ui/dr-ui/src/activity.rs:1
FR-NC-6a core/dr-catalog/src/cache.rs:1, core/dr-catalog/src/schema.rs:555, core/dr-catalog/src/schema.rs:956, core/dr-types/src/selector.rs:1, core/dr-types/src/settings.rs:1, ui/dr-ui/src/collections_ui.rs:3195, ui/dr-ui/src/collections_ui.rs:621, ui/dr-ui/src/collections_ui.rs:683, ui/dr-ui/src/lib.rs:1772, ui/dr-ui/src/lib.rs:2650, ui/dr-ui/src/library.rs:1350, ui/dr-ui/src/library.rs:1373, ui/dr-ui/src/library.rs:1531, ui/dr-ui/src/library_ui.rs:1065, ui/dr-ui/src/library_ui.rs:1138, ui/dr-ui/src/library_ui.rs:1239, ui/dr-ui/src/library_ui.rs:1294, ui/dr-ui/src/library_ui.rs:1412, ui/dr-ui/src/library_ui.rs:1531, ui/dr-ui/src/library_ui.rs:2058, ui/dr-ui/src/library_ui.rs:267, ui/dr-ui/src/library_ui.rs:278, ui/dr-ui/src/library_ui.rs:286, ui/dr-ui/src/library_ui.rs:298, ui/dr-ui/src/library_ui.rs:307, ui/dr-ui/src/library_ui.rs:399, ui/dr-ui/src/library_ui.rs:409, ui/dr-ui/src/library_ui.rs:451, ui/dr-ui/src/library_ui.rs:514, ui/dr-ui/src/library_ui.rs:5257, ui/dr-ui/src/library_ui.rs:5275, ui/dr-ui/src/library_ui.rs:5287, ui/dr-ui/src/library_ui.rs:545, ui/dr-ui/src/library_ui.rs:557, ui/dr-ui/src/settings_store.rs:1, ui/dr-ui/src/settings_ui.rs:1, ui/dr-ui/ui/app.slint:2796, ui/dr-ui/ui/app.slint:647, ui/dr-ui/ui/collections.slint:249, ui/dr-ui/ui/collections.slint:369, ui/dr-ui/ui/collections.slint:52, ui/dr-ui/ui/collections.slint:682, ui/dr-ui/ui/collections.slint:84, ui/dr-ui/ui/icons.slint:260, ui/dr-ui/ui/library.slint:974
FR-NC-6b ui/dr-ui/src/library_ui.rs:1294
FR-NC-6c core/dr-sync-nextcloud/src/desktop_client.rs:30, core/dr-types/src/lib.rs:119, core/dr-types/src/lib.rs:201, ui/dr-ui/src/activity.rs:1, ui/dr-ui/src/collections_ui.rs:3195, ui/dr-ui/src/collections_ui.rs:621, ui/dr-ui/src/collections_ui.rs:683, ui/dr-ui/src/library_ui.rs:1065, ui/dr-ui/src/library_ui.rs:1138, ui/dr-ui/ui/collections.slint:249, ui/dr-ui/ui/collections.slint:682, ui/dr-ui/ui/icons.slint:260
FR-NC-7 core/dr-catalog/src/face_shard.rs:1, core/dr-sync-nextcloud/src/lib.rs:95, ui/dr-ui/src/derived_sync.rs:1, ui/dr-ui/src/library.rs:2964, ui/dr-ui/src/library_ui.rs:3626, ui/dr-ui/ui/settings.slint:353
FR-NC-7a core/dr-ingest/src/layout.rs:1, core/dr-sync/src/upload.rs:1, core/dr-sync/src/upload.rs:40, core/dr-types/src/settings.rs:116, ui/dr-ui/src/import.rs:1, ui/dr-ui/src/import.rs:97, ui/dr-ui/src/import_ui.rs:1, ui/dr-ui/src/lib.rs:1107, ui/dr-ui/ui/import.slint:5
FR-NC-7b core/dr-ingest/src/lib.rs:733, core/dr-sync/src/upload.rs:1, ui/dr-ui/src/import.rs:123, ui/dr-ui/src/import.rs:337, ui/dr-ui/src/import.rs:585, ui/dr-ui/src/import.rs:97, ui/dr-ui/src/import_ui.rs:1, ui/dr-ui/src/lib.rs:1107
FR-NC-8 core/dr-pipeline/src/sidecar.rs:118, core/dr-pipeline/src/sidecar.rs:92, ui/dr-ui/src/lib.rs:1741, ui/dr-ui/src/library.rs:375, ui/dr-ui/src/library_ui.rs:466
FR-NC-9 core/dr-catalog/src/merge.rs:1, core/dr-catalog/src/schema.rs:498, core/dr-catalog/src/sync.rs:1, core/dr-pipeline/src/sidecar.rs:156, core/dr-pipeline/src/sidecar.rs:183, core/dr-pipeline/src/sidecar.rs:2024, core/dr-pipeline/src/sidecar.rs:352, core/dr-pipeline/src/sidecar.rs:450, core/dr-pipeline/src/spot.rs:245, core/dr-pipeline/tests/spot_sidecar.rs:1, ui/dr-ui/src/library.rs:761, ui/dr-ui/src/library.rs:891
FR-PLAT-AND-1 core/dr-types/src/lib.rs:53
FR-PLAT-AND-3 core/dr-catalog/src/jobs.rs:1
FR-PLAT-LIN-1 core/dr-types/src/settings.rs:1, ui/dr-ui/src/lib.rs:845, ui/dr-ui/src/settings_store.rs:1
FR-RAW-1 core/dr-decode/src/lib.rs:243, core/dr-types/src/lib.rs:129, core/dr-types/src/lib.rs:200
FR-RAW-3 core/dr-decode/src/lib.rs:139, core/dr-decode/src/lib.rs:506, core/dr-decode/src/locate.rs:1366
FR-RAW-4 core/dr-decode/src/error.rs:1, ui/dr-ui/src/lib.rs:186
FR-RAW-5 core/dr-decode/src/lib.rs:167, core/dr-gpu/src/demosaic.rs:34, core/dr-gpu/src/demosaic.rs:602, core/dr-gpu/src/demosaic.rs:681, core/dr-gpu/src/demosaic.rs:805
FR-UI-1 ui/dr-ui/src/lib.rs:2732, ui/dr-ui/src/lib.rs:78, ui/dr-ui/src/masks_ui.rs:816, ui/dr-ui/ui/library.slint:1040
FR-UI-2 ui/dr-ui/src/collections_ui.rs:1005, ui/dr-ui/src/collections_ui.rs:118, ui/dr-ui/src/collections_ui.rs:1508, ui/dr-ui/src/collections_ui.rs:1522, ui/dr-ui/src/collections_ui.rs:1568, ui/dr-ui/src/collections_ui.rs:159, ui/dr-ui/src/collections_ui.rs:1666, ui/dr-ui/src/collections_ui.rs:485, ui/dr-ui/src/collections_ui.rs:514, ui/dr-ui/src/collections_ui.rs:995, ui/dr-ui/src/lib.rs:78, ui/dr-ui/src/library_ui.rs:286, ui/dr-ui/src/library_ui.rs:5142, ui/dr-ui/src/library_ui.rs:5287, ui/dr-ui/src/library_ui.rs:6363, ui/dr-ui/ui/app.slint:2463, ui/dr-ui/ui/app.slint:278, ui/dr-ui/ui/app.slint:677, ui/dr-ui/ui/app.slint:684, ui/dr-ui/ui/library.slint:1196, ui/dr-ui/ui/library.slint:1203, ui/dr-ui/ui/library.slint:1209, ui/dr-ui/ui/library.slint:2278, ui/dr-ui/ui/library.slint:823, ui/dr-ui/ui/library.slint:873, ui/dr-ui/ui/settings.slint:106
FR-UI-3 ui/dr-ui/src/develop.rs:2056, ui/dr-ui/src/develop.rs:2165, ui/dr-ui/src/library_ui.rs:4387, ui/dr-ui/src/masks_ui.rs:218, ui/dr-ui/src/masks_ui.rs:908, ui/dr-ui/src/masks_ui.rs:930, ui/dr-ui/src/spots_ui.rs:19, ui/dr-ui/ui/app.slint:2105, ui/dr-ui/ui/collections.slint:4, ui/dr-ui/ui/collections.slint:682
FR-UI-4 ui/dr-ui/src/collections_ui.rs:1005, ui/dr-ui/src/collections_ui.rs:118, ui/dr-ui/src/collections_ui.rs:131, ui/dr-ui/src/collections_ui.rs:1508, ui/dr-ui/src/collections_ui.rs:1522, ui/dr-ui/src/collections_ui.rs:1568, ui/dr-ui/src/collections_ui.rs:159, ui/dr-ui/src/collections_ui.rs:1666, ui/dr-ui/src/collections_ui.rs:1693, ui/dr-ui/src/collections_ui.rs:485, ui/dr-ui/src/collections_ui.rs:514, ui/dr-ui/src/collections_ui.rs:582, ui/dr-ui/src/collections_ui.rs:995, ui/dr-ui/src/library_ui.rs:4387, ui/dr-ui/src/library_ui.rs:4432, ui/dr-ui/src/library_ui.rs:4535, ui/dr-ui/src/library_ui.rs:4563, ui/dr-ui/src/library_ui.rs:5275, ui/dr-ui/src/library_ui.rs:5287, ui/dr-ui/ui/app.slint:1777, ui/dr-ui/ui/app.slint:653, ui/dr-ui/ui/app.slint:684, ui/dr-ui/ui/library.slint:1196, ui/dr-ui/ui/library.slint:1203, ui/dr-ui/ui/library.slint:1209, ui/dr-ui/ui/library.slint:2278, ui/dr-ui/ui/library.slint:823, ui/dr-ui/ui/library.slint:873, ui/dr-ui/ui/library.slint:892
FR-UI-5 ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/lib.rs:2359, ui/dr-ui/src/lib.rs:2766, ui/dr-ui/src/lib.rs:2951, ui/dr-ui/src/masks_ui.rs:863, ui/dr-ui/ui/app.slint:313, ui/dr-ui/ui/collections.slint:4
FR-UI-7 core/dr-pipeline/src/descriptor.rs:100, core/dr-pipeline/src/framing.rs:259
NFR-ARCH-2 core/dr-catalog/src/jobs.rs:1, ui/dr-ui/src/faces.rs:1, ui/dr-ui/src/library.rs:2685
NFR-ARCH-3 ui/dr-ui/src/export.rs:1555, ui/dr-ui/src/export.rs:1581, ui/dr-ui/src/export.rs:410, ui/dr-ui/src/export.rs:436, ui/dr-ui/src/lib.rs:2077, ui/dr-ui/ui/app.slint:1131, ui/dr-ui/ui/library.slint:928
NFR-ARCH-4 core/dr-catalog/src/error.rs:1, core/dr-export/src/error.rs:1, core/dr-thumbs/src/error.rs:1, ui/dr-ui/src/export.rs:500
NFR-OPS-1 tools/traceability/src/lib.rs:266
NFR-P1 core/dr-catalog/src/lib.rs:1, core/dr-catalog/src/scan.rs:1, core/dr-catalog/src/walk.rs:162, core/dr-catalog/src/walk.rs:1, tools/traceability/src/lib.rs:479
NFR-P13 core/dr-decode/src/preview.rs:121
NFR-P5 core/dr-catalog/src/schema.rs:304, ui/dr-ui/src/library.rs:3564, ui/dr-ui/src/library.rs:4337, ui/dr-ui/src/library_ui.rs:4072, ui/dr-ui/src/library_ui.rs:64
NFR-P9 ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/export.rs:944, ui/dr-ui/src/library.rs:1, ui/dr-ui/src/library_ui.rs:1, ui/dr-ui/src/trash.rs:1
NFR-PORT-1 core/dr-catalog/src/walk.rs:1, core/dr-types/src/lib.rs:269, core/dr-types/src/lib.rs:302
NFR-R1 core/dr-catalog/src/sync.rs:1, ui/dr-ui/src/library.rs:964
NFR-R2 core/dr-catalog/src/trash.rs:1
NFR-R5 core/dr-catalog/src/collections.rs:1, core/dr-catalog/src/error.rs:1, core/dr-catalog/src/keywords.rs:1, core/dr-catalog/src/schema.rs:1
NFR-R7 core/dr-gpu/src/error.rs:1
NFR-R8 core/dr-gpu/src/error.rs:1
NFR-RES-1 core/dr-pipeline/src/history.rs:86, ui/dr-ui/src/lib.rs:70
NFR-RES-4 core/dr-catalog/src/cache.rs:1, core/dr-catalog/src/face_shard.rs:1, core/dr-catalog/src/schema.rs:555, core/dr-thumbs/src/codec.rs:1, core/dr-thumbs/src/lib.rs:1, core/dr-thumbs/src/lib.rs:376, ui/dr-ui/src/library.rs:2639
NFR-SEC-1 core/dr-decode/src/error.rs:1
NFR-SEC-5 core/dr-catalog/src/faces.rs:1, core/dr-catalog/src/schema.rs:384, ui/dr-ui/src/faces.rs:1, ui/dr-ui/src/identity.rs:1, ui/dr-ui/src/identity_ui.rs:1, ui/dr-ui/ui/identity.slint:1
R1 tools/traceability/src/lib.rs:495, tools/traceability/src/lib.rs:499
R4 core/dr-gpu/src/lib.rs:217

Not yet tagged

79 of 177 requirements have no implementation tag. Expected while the codebase is young; each should gain one as it is built.

Show untagged requirements
  • FR-CAT-14
  • FR-CULL-3
  • FR-CULL-5
  • FR-CULL-6
  • FR-CULL-7
  • FR-DEV-1
  • FR-DEV-3g
  • FR-DSP-2
  • FR-DSP-3
  • FR-DSP-4
  • FR-DSP-5
  • FR-DSP-8
  • FR-NC-11
  • FR-PLAT-AND-2
  • FR-PLAT-AND-4
  • FR-PLAT-AND-5
  • FR-PLAT-AND-6
  • FR-PLAT-LIN-2
  • FR-PLAT-LIN-3
  • FR-PLG-1
  • FR-PLG-10
  • FR-PLG-11
  • FR-PLG-12
  • FR-PLG-1a
  • FR-PLG-2
  • FR-PLG-2a
  • FR-PLG-2b
  • FR-PLG-2c
  • FR-PLG-2d
  • FR-PLG-3
  • FR-PLG-3a
  • FR-PLG-4
  • FR-PLG-4a
  • FR-PLG-5
  • FR-PLG-5a
  • FR-PLG-5b
  • FR-PLG-5c
  • FR-PLG-6
  • FR-PLG-6a
  • FR-PLG-7
  • FR-PLG-8
  • FR-PLG-9
  • FR-RAW-2
  • FR-UI-6
  • NFR-A11Y-1
  • NFR-A11Y-2
  • NFR-A11Y-3
  • NFR-ARCH-1
  • NFR-COMPAT-1
  • NFR-COMPAT-2
  • NFR-OPS-2
  • NFR-OPS-3
  • NFR-OPS-4
  • NFR-P10
  • NFR-P11
  • NFR-P12
  • NFR-P14
  • NFR-P15
  • NFR-P2
  • NFR-P3
  • NFR-P4
  • NFR-P6
  • NFR-P7
  • NFR-P8
  • NFR-PORT-2
  • NFR-PORT-3
  • NFR-R3
  • NFR-R4
  • NFR-R6
  • NFR-RES-2
  • NFR-RES-3
  • NFR-SEC-2
  • NFR-SEC-3
  • NFR-SEC-4
  • NFR-SEC-6
  • R2
  • R3
  • R5
  • R6