Files
DarkRoom/docs/traceability.md
T
dtourolleandClaude Opus 5 0cd3ef1b3f Run a node declaration without compiling it
`ops/*.yaml` plus `build.rs` has been the class-1 plugin format since the
declarative nodes landed — it was simply resolved at build time. Nothing about
a declaration requires the compiler: everything it produces is data plus a
WGSL string, and the composer already assembles WGSL at run time from whatever
operations are active. So this is not a new mechanism. It is the existing one,
loaded later (FR-PLG-2).

`DeclaredOp` implements `Operation` from an owned `Declaration` — one
interpreter over many declarations, where `build.rs` emits generated code per
node. The generated path stays, as FR-PLG-2 says it should: a generated
`match` is faster than an interpreted one, the built-ins' declared `tests:`
have to run under `cargo test`, and generated source is inspectable in a way
an interpreter's state is not.

**The reader is now one file, read by both.** `src/declared/decl.rs` and
`src/declared/expr.rs` are `#[path]`-included by `build.rs` as well as being
modules of the crate, and they produce a neutral `Declaration` that names no
Rust type. The build script's job is reduced to *rendering* that declaration
as Rust; `DeclaredOp` converts the same declaration into descriptors and
`Expr::eval` walks the same tree the renderer writes out. There is one
grammar, one set of validations and one set of error messages, so "a plugin is
the same kind of thing as a built-in" is structural rather than aspirational.

What remains genuinely written twice is the pair of backends — an arithmetic
node rendered as Rust here and evaluated there — and that is what the parity
test stands between. `tests/declared_parity.rs` parses every built-in
declaration at run time and asserts the composed WGSL is byte-for-byte what
the generated implementation produces, with the uniform block bit-for-bit
identical, at both ends of every parameter's range and at four interior
points; then again over the whole develop chain with the declared nodes
swapped in, which is what covers uniform slot ordering and helper
de-duplication between operations. A third test asserts the declared and
hand-written nodes partition `ops/` between them, so coverage cannot shrink
silently.

Bit-for-bit rather than within a tolerance, because a tolerance is where a
real divergence hides. The one thing that had to be got right for that to hold
is number literals: `expr::as_f32` rounds a decimal exactly once, through the
same shortest-round-trip text the compiler is handed, rather than rounding an
`f64` a second time.

Not in scope, and deliberately untagged: load-time WGSL validation
(FR-PLG-11), id namespacing, a plugin directory read at startup, and pass
nodes (FR-PLG-2a). Those are separate work, and tagging them from here would
be the overstatement the spec's own §7 warns about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 19:08:34 +02:00

78 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 258
TRACES tags found 751
Requirements defined 177
Requirements covered 100
Coverage 56.5% (100/177)

By type

Type Covered Defined
FR 80 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:1104, 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:1104, ui/dr-ui/src/library.rs:152, ui/dr-ui/src/library.rs:2128, 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:152, ui/dr-ui/src/library.rs:169, ui/dr-ui/src/library.rs:198, ui/dr-ui/src/library.rs:3062, ui/dr-ui/src/library.rs:3096, 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:2604, ui/dr-ui/src/library.rs:2630, ui/dr-ui/src/library_ui.rs:171, ui/dr-ui/src/library_ui.rs:3624, ui/dr-ui/src/library_ui.rs:4590, 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:179, 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:3110, ui/dr-ui/src/library_ui.rs:6271, ui/dr-ui/src/library_ui.rs:6282, ui/dr-ui/src/library_ui.rs:628, ui/dr-ui/src/library_ui.rs:6295, ui/dr-ui/src/library_ui.rs:6310, ui/dr-ui/src/library_ui.rs:6319, ui/dr-ui/ui/app.slint:485, ui/dr-ui/ui/app.slint:655, 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:203, ui/dr-ui/src/library.rs:3356, ui/dr-ui/src/library_ui.rs:315, ui/dr-ui/src/library_ui.rs:387, ui/dr-ui/src/library_ui.rs:5140, ui/dr-ui/src/library_ui.rs:5193, ui/dr-ui/src/library_ui.rs:6411, ui/dr-ui/ui/app.slint:488, ui/dr-ui/ui/app.slint:655, ui/dr-ui/ui/app.slint:894, 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:3482, ui/dr-ui/src/library_ui.rs:4180, ui/dr-ui/ui/app.slint:650, 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:137, core/dr-pipeline/src/ops/curve.rs:656, core/dr-pipeline/src/sidecar.rs:1636, 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:1365, ui/dr-ui/src/lib.rs:1738, ui/dr-ui/src/lib.rs:1874, ui/dr-ui/src/lib.rs:480, ui/dr-ui/src/lib.rs:905, ui/dr-ui/src/library.rs:1551, ui/dr-ui/src/library.rs:364, ui/dr-ui/src/library.rs:411, ui/dr-ui/src/library.rs:448, ui/dr-ui/src/library.rs:696, ui/dr-ui/src/library_ui.rs:4882, 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:138, ui/dr-ui/src/library.rs:1511, ui/dr-ui/src/library.rs:1588, ui/dr-ui/src/library.rs:220, ui/dr-ui/src/library.rs:3463, ui/dr-ui/src/library.rs:448, ui/dr-ui/src/library.rs:680, ui/dr-ui/src/library.rs:696, ui/dr-ui/src/library.rs:750, 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:2976, ui/dr-ui/src/library_ui.rs:3257, ui/dr-ui/src/library_ui.rs:3345, ui/dr-ui/src/library_ui.rs:3533, ui/dr-ui/src/library_ui.rs:3651, ui/dr-ui/src/library_ui.rs:440, ui/dr-ui/src/library_ui.rs:498, ui/dr-ui/src/library_ui.rs:5238, ui/dr-ui/src/library_ui.rs:5353, 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:1846, 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:203, ui/dr-ui/src/library.rs:364
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/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:389
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:191, core/dr-pipeline/src/framing.rs:365, core/dr-pipeline/src/framing.rs:620, core/dr-pipeline/src/graph.rs:169, core/dr-pipeline/src/graph.rs:577, core/dr-pipeline/src/mask.rs:121, core/dr-pipeline/src/operation.rs:330, core/dr-pipeline/src/operation.rs:516, core/dr-pipeline/src/ops/capture_sharpen.rs:1, core/dr-pipeline/src/ops/capture_sharpen.rs:210, core/dr-pipeline/src/ops/curve.rs:100, core/dr-pipeline/src/ops/curve.rs:1, core/dr-pipeline/src/ops/curve.rs:219, core/dr-pipeline/src/ops/curve.rs:635, 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:273, core/dr-pipeline/src/sidecar.rs:156, core/dr-pipeline/src/sidecar.rs:1636, core/dr-pipeline/src/sidecar.rs:1696, 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:1422, ui/dr-ui/src/lib.rs:2124, ui/dr-ui/src/lib.rs:301, ui/dr-ui/src/library.rs:411, 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:2100, ui/dr-ui/ui/app.slint:981
FR-DEV-3a core/dr-pipeline/build.rs:756, core/dr-pipeline/ops/exposure.yaml:1, core/dr-pipeline/src/descriptor.rs:194, core/dr-pipeline/src/descriptor.rs:234, core/dr-pipeline/src/descriptor.rs:258, core/dr-pipeline/src/descriptor.rs:313, core/dr-pipeline/src/framing.rs:262, 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:955, core/dr-pipeline/src/operation.rs:232, core/dr-pipeline/src/operation.rs:365, core/dr-pipeline/src/ops/curve.rs:319, ui/dr-ui/src/develop.rs:1177, ui/dr-ui/src/lib.rs:595
FR-DEV-3b core/dr-pipeline/src/descriptor.rs:258, core/dr-pipeline/src/framing.rs:262, core/dr-pipeline/src/graph.rs:58, core/dr-pipeline/src/operation.rs:365
FR-DEV-3c core/dr-pipeline/build.rs:756, 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:955, 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:191, core/dr-pipeline/src/graph.rs:616, core/dr-pipeline/src/operation.rs:32, core/dr-pipeline/src/operation.rs:389, core/dr-pipeline/src/operation.rs:53, core/dr-pipeline/src/operation.rs:71
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:1495, core/dr-pipeline/src/operation.rs:1576, core/dr-pipeline/src/operation.rs:1601, core/dr-pipeline/src/operation.rs:1616, core/dr-pipeline/src/operation.rs:1640, core/dr-pipeline/src/operation.rs:310, core/dr-pipeline/src/operation.rs:440, core/dr-pipeline/src/operation.rs:450, core/dr-pipeline/src/operation.rs:600
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:1065, core/dr-pipeline/src/operation.rs:1094, core/dr-pipeline/src/operation.rs:1495, core/dr-pipeline/src/operation.rs:296, core/dr-pipeline/src/operation.rs:310, core/dr-pipeline/src/ops/film_sim.rs:129, core/dr-pipeline/src/ops/film_sim.rs:153, core/dr-pipeline/src/ops/film_sim.rs:1, core/dr-pipeline/src/ops/film_sim.rs:331, core/dr-pipeline/src/ops/film_sim.rs:43, core/dr-pipeline/src/ops/film_sim.rs:87, core/dr-pipeline/src/ops/film_sim.rs:92, core/dr-pipeline/src/sidecar.rs:111, core/dr-pipeline/src/sidecar.rs:167, core/dr-pipeline/src/sidecar.rs:1957, core/dr-pipeline/src/sidecar.rs:2033, 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:2098, ui/dr-ui/src/lib.rs:528, ui/dr-ui/src/lib.rs:586, ui/dr-ui/src/library.rs:402, ui/dr-ui/src/library.rs:651, 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:2712, ui/dr-ui/ui/app.slint:775
FR-DEV-3h core/dr-decode/src/lib.rs:404, core/dr-decode/src/preview.rs:29, core/dr-pipeline/src/framing.rs:205, core/dr-pipeline/src/framing.rs:365, core/dr-pipeline/src/framing.rs:927, 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:1386, ui/dr-ui/src/lib.rs:1400, ui/dr-ui/src/lib.rs:1408, ui/dr-ui/src/lib.rs:2294, 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:1365, ui/dr-ui/src/library.rs:1551, ui/dr-ui/src/library.rs:364, ui/dr-ui/src/library.rs:392, ui/dr-ui/src/library_ui.rs:2576, ui/dr-ui/src/library_ui.rs:2976, 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:1408, ui/dr-ui/src/lib.rs:2294, 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:685, core/dr-pipeline/src/operation.rs:330, core/dr-pipeline/src/operation.rs:554, 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:1429, ui/dr-ui/src/lib.rs:2391, 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:1835, ui/dr-ui/ui/app.slint:2352, ui/dr-ui/ui/app.slint:2618, 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:547, core/dr-pipeline/src/graph.rs:577, core/dr-pipeline/src/ops/capture_sharpen.rs:1, core/dr-pipeline/src/ops/capture_sharpen.rs:657, core/dr-pipeline/src/ops/local_contrast.rs:1, core/dr-pipeline/src/ops/local_contrast.rs:672, core/dr-pipeline/src/ops/noise_reduction.rs:698, 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:483, 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:1485, 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:537, core/dr-pipeline/src/graph.rs:591, core/dr-pipeline/src/operation.rs:483, 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:2040, 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:3362, ui/dr-ui/src/library_ui.rs:557, ui/dr-ui/src/library_ui.rs:6253, ui/dr-ui/src/library_ui.rs:6330, ui/dr-ui/src/library_ui.rs:6342, ui/dr-ui/src/library_ui.rs:660, ui/dr-ui/src/library_ui.rs:717, ui/dr-ui/ui/app.slint:1117, ui/dr-ui/ui/app.slint:1543, 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:1588, ui/dr-ui/src/library.rs:448, ui/dr-ui/src/library.rs:750, ui/dr-ui/src/library.rs:953, ui/dr-ui/src/library_ui.rs:1606, ui/dr-ui/src/library_ui.rs:3362, 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:2604, ui/dr-ui/src/library.rs:2630, ui/dr-ui/src/library_ui.rs:1, ui/dr-ui/src/library_ui.rs:3624, ui/dr-ui/src/library_ui.rs:4590, 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:1769, ui/dr-ui/src/lib.rs:2647, ui/dr-ui/src/library.rs:1330, ui/dr-ui/src/library.rs:1353, ui/dr-ui/src/library.rs:1511, 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:5255, ui/dr-ui/src/library_ui.rs:5273, ui/dr-ui/src/library_ui.rs:5285, 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:2791, ui/dr-ui/ui/app.slint:644, 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:2630, ui/dr-ui/src/library_ui.rs:3624, 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:1104, 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:1104
FR-NC-8 core/dr-pipeline/src/sidecar.rs:118, core/dr-pipeline/src/sidecar.rs:92, ui/dr-ui/src/lib.rs:1738, ui/dr-ui/src/library.rs:364, 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:2033, 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:750, ui/dr-ui/src/library.rs:880
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-PLG-2 core/dr-pipeline/src/declared/decl.rs:1, core/dr-pipeline/src/declared/expr.rs:152, core/dr-pipeline/src/declared/expr.rs:1, core/dr-pipeline/src/declared/mod.rs:1, core/dr-pipeline/src/declared/mod.rs:82, core/dr-pipeline/src/descriptor.rs:15, core/dr-pipeline/src/descriptor.rs:635, core/dr-pipeline/src/operation.rs:232, core/dr-pipeline/tests/declared_parity.rs:1, core/dr-pipeline/tests/declared_parity.rs:240, core/dr-pipeline/tests/declared_parity.rs:305, core/dr-pipeline/tests/declared_parity.rs:358, core/dr-pipeline/tests/declared_parity.rs:416
FR-PLG-2d core/dr-pipeline/src/declared/decl.rs:112, core/dr-pipeline/src/declared/decl.rs:152, core/dr-pipeline/src/declared/decl.rs:1, core/dr-pipeline/src/declared/decl.rs:420, core/dr-pipeline/src/declared/decl.rs:67, core/dr-pipeline/src/declared/mod.rs:1, core/dr-pipeline/src/declared/mod.rs:384, core/dr-pipeline/src/declared/mod.rs:403
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:2729, 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:5140, ui/dr-ui/src/library_ui.rs:5285, ui/dr-ui/src/library_ui.rs:6361, ui/dr-ui/ui/app.slint:2458, ui/dr-ui/ui/app.slint:278, ui/dr-ui/ui/app.slint:674, ui/dr-ui/ui/app.slint:681, 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:4385, 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:2100, 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:4385, ui/dr-ui/src/library_ui.rs:4430, ui/dr-ui/src/library_ui.rs:4533, ui/dr-ui/src/library_ui.rs:4561, ui/dr-ui/src/library_ui.rs:5273, ui/dr-ui/src/library_ui.rs:5285, ui/dr-ui/ui/app.slint:1772, ui/dr-ui/ui/app.slint:650, ui/dr-ui/ui/app.slint:681, 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:2356, ui/dr-ui/src/lib.rs:2763, ui/dr-ui/src/lib.rs:2948, 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:177, core/dr-pipeline/src/framing.rs:262
NFR-ARCH-2 core/dr-catalog/src/jobs.rs:1, ui/dr-ui/src/faces.rs:1
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:2074, ui/dr-ui/ui/app.slint:1128, 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:3196, ui/dr-ui/src/library.rs:3969, ui/dr-ui/src/library_ui.rs:4070, 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:953
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:2604
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

77 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-2a
  • FR-PLG-2b
  • FR-PLG-2c
  • 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