Files
DarkRoom/docs/traceability.md
T
dtourolleandClaude Opus 5 6d18517d28 Ship every stock that exists, black and white included
Three profiles was what the first cut needed to prove the model. This is
the rest of the open data: 23 camera stocks and 9 papers, which is all of
spektrafilm.

Black and white was the gap, and it turned out not to be a gap in the
data -- it was a gap in where I looked. Upstream's `main` has 28 colour
profiles and nothing monochrome; `dev` has three more, and they are
Tri-X, Double-X and the 2302 print film they go onto. So the answer to
"do we have B&W" was yes all along, and it needed the dev branch rather
than a fortnight digitising Ilford's datasheet graphs by eye. Those three
are pinned to `dev` per stock; the colour stocks stay on the released
branch.

A monochrome profile is single-channel -- one emulsion, not three -- and
spreading that one layer across all three is exact rather than an
approximation: three layers with identical sensitivity and identical
curves respond identically, which is what one layer does. The dye is the
trap. The renderer *sums* the three layers' contributions, so replicating
it unchanged renders every frame three times too dense -- neutrally, and
therefore plausibly. A third each reconstructs the single emulsion, and
two tests hold both halves: that the densities stay equal, and that they
sum to one emulsion and not three.

Double-X and 2302 ship five curves apiece, measured at five development
times -- 4 to 12 minutes for Double-X. That is push and pull processing as
measured data. The standard 6.5 minutes is what ships; the rest is in the
upstream file waiting for a control to ask for it.

Two stocks are `support: film` and are nevertheless what a negative is
printed *onto*: the cine projection films 2383 and 2393, which the
Vision3 stocks print to. Filtering the picker on support alone offered a
projection stock as something to load in a camera, so it filters on stage,
with a test saying so.

The picker had to change shape twice over. Chips were right for three
stocks and off the edge of a 280px column at twenty-four, and the column
that replaced them was a thousand pixels standing between the
photographer and every slider below. It is a disclosure now: one row
carrying the answer, opened to change it, closed again on choosing. That
is the opposite of the argument this panel used to take the lids off its
sliders, and deliberately so -- an instrument you compare wants to be
visible, and a list you consult once wants to be out of the way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 20:30:11 +02:00

63 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 221
TRACES tags found 599
Requirements defined 177
Requirements covered 90
Coverage 50.8% (90/177)

By type

Type Covered Defined
FR 72 122
NFR 16 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:998, ui/dr-ui/ui/import.slint:5, ui/dr-ui/ui/library.slint:1007, ui/dr-ui/ui/library.slint:1161, 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:998, ui/dr-ui/src/library.rs:152, ui/dr-ui/src/library.rs:2122, ui/dr-ui/ui/import.slint:5
FR-CAT-12 core/dr-pipeline/src/sidecar.rs:120
FR-CAT-13 core/dr-catalog/src/keywords.rs:1
FR-CAT-15 core/dr-catalog/src/schema.rs:365, 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:3003, ui/dr-ui/src/library.rs:3035, ui/dr-ui/src/library_ui.rs:151, ui/dr-ui/src/library_ui.rs:722, 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:2598, ui/dr-ui/src/library.rs:2624, ui/dr-ui/src/library_ui.rs:138, ui/dr-ui/src/library_ui.rs:3544, ui/dr-ui/src/library_ui.rs:4475, ui/dr-ui/ui/app.slint:513, ui/dr-ui/ui/settings.slint:340, ui/dr-ui/ui/settings.slint:72
FR-CAT-4 core/dr-catalog/src/lib.rs:1, core/dr-catalog/src/query.rs:1, 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:280, core/dr-catalog/src/schema.rs:783, core/dr-decode/src/lib.rs:285, core/dr-decode/src/lib.rs:404, core/dr-pipeline/src/sidecar.rs:137, 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:3049, ui/dr-ui/src/library_ui.rs:593, ui/dr-ui/src/library_ui.rs:6156, ui/dr-ui/src/library_ui.rs:6167, ui/dr-ui/src/library_ui.rs:6180, ui/dr-ui/src/library_ui.rs:6195, ui/dr-ui/src/library_ui.rs:6204, ui/dr-ui/ui/app.slint:458, ui/dr-ui/ui/app.slint:587, ui/dr-ui/ui/library.slint:1209, ui/dr-ui/ui/library.slint:1212, ui/dr-ui/ui/library.slint:18, ui/dr-ui/ui/library.slint:850, ui/dr-ui/ui/library.slint:901
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:280, 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:3226, ui/dr-ui/src/library_ui.rs:282, ui/dr-ui/src/library_ui.rs:352, ui/dr-ui/src/library_ui.rs:5025, ui/dr-ui/src/library_ui.rs:5078, ui/dr-ui/src/library_ui.rs:6296, ui/dr-ui/ui/app.slint:461, ui/dr-ui/ui/app.slint:587, ui/dr-ui/ui/app.slint:826, ui/dr-ui/ui/library.slint:109, ui/dr-ui/ui/library.slint:1278, ui/dr-ui/ui/library.slint:901, ui/dr-ui/ui/settings.slint:115
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:3402, ui/dr-ui/src/library_ui.rs:4065, ui/dr-ui/ui/app.slint:582, ui/dr-ui/ui/collections.slint:4, ui/dr-ui/ui/library.slint:2516, ui/dr-ui/ui/library.slint:872, ui/dr-ui/ui/library.slint:891
FR-CAT-8 core/dr-pipeline/src/ops/curve.rs:136, core/dr-pipeline/src/ops/curve.rs:652, core/dr-pipeline/src/sidecar.rs:1343, core/dr-pipeline/src/sidecar.rs:90, core/dr-pipeline/tests/tone_curve.rs:33, ui/dr-ui/src/develop.rs:2733, ui/dr-ui/src/develop.rs:2761, ui/dr-ui/src/export.rs:749, ui/dr-ui/src/lib.rs:1235, ui/dr-ui/src/lib.rs:1575, ui/dr-ui/src/lib.rs:1680, ui/dr-ui/src/lib.rs:464, ui/dr-ui/src/lib.rs:845, ui/dr-ui/src/library.rs:1545, 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:4767, 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:337, 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:2325, ui/dr-ui/src/library.rs:138, ui/dr-ui/src/library.rs:1505, ui/dr-ui/src/library.rs:1582, ui/dr-ui/src/library.rs:220, ui/dr-ui/src/library.rs:3333, 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:1529, ui/dr-ui/src/library_ui.rs:1555, ui/dr-ui/src/library_ui.rs:1571, ui/dr-ui/src/library_ui.rs:1665, ui/dr-ui/src/library_ui.rs:193, ui/dr-ui/src/library_ui.rs:2252, ui/dr-ui/src/library_ui.rs:226, ui/dr-ui/src/library_ui.rs:2690, ui/dr-ui/src/library_ui.rs:2912, ui/dr-ui/src/library_ui.rs:3193, ui/dr-ui/src/library_ui.rs:3265, ui/dr-ui/src/library_ui.rs:3453, ui/dr-ui/src/library_ui.rs:3571, ui/dr-ui/src/library_ui.rs:405, ui/dr-ui/src/library_ui.rs:463, ui/dr-ui/src/library_ui.rs:5123, ui/dr-ui/src/library_ui.rs:5238, ui/dr-ui/src/presets.rs:325, ui/dr-ui/src/presets.rs:337, ui/dr-ui/src/sidecar_cache.rs:1
FR-CULL-1 core/dr-decode/src/preview.rs:134
FR-CULL-2 core/dr-decode/src/locate.rs:1, core/dr-decode/src/preview.rs:161, ui/dr-ui/src/import.rs:464
FR-CULL-4 core/dr-catalog/src/rating.rs:1, core/dr-pipeline/src/sidecar.rs:137, ui/dr-ui/src/library.rs:203, ui/dr-ui/src/library.rs:364
FR-DEV-2 core/dr-pipeline/src/operation.rs:352
FR-DEV-3 core/dr-gpu/src/adjust.rs:2150, core/dr-gpu/src/adjust.rs:632, core/dr-gpu/src/adjust.rs:751, core/dr-gpu/src/adjust.rs:84, core/dr-gpu/tests/tone_curve.rs:1, core/dr-pipeline/src/detail.rs:364, core/dr-pipeline/src/detail.rs:439, core/dr-pipeline/src/framing.rs:188, core/dr-pipeline/src/framing.rs:602, core/dr-pipeline/src/graph.rs:154, core/dr-pipeline/src/graph.rs:457, core/dr-pipeline/src/mask.rs:120, core/dr-pipeline/src/operation.rs:299, core/dr-pipeline/src/operation.rs:473, 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:1343, core/dr-pipeline/src/sidecar.rs:1399, core/dr-pipeline/src/sidecar.rs:158, core/dr-pipeline/tests/tone_curve.rs:1, ui/dr-ui/src/develop.rs:101, ui/dr-ui/src/develop.rs:1111, ui/dr-ui/src/develop.rs:132, ui/dr-ui/src/develop.rs:1584, ui/dr-ui/src/develop.rs:1599, ui/dr-ui/src/develop.rs:1621, ui/dr-ui/src/develop.rs:1753, ui/dr-ui/src/develop.rs:1831, ui/dr-ui/src/develop.rs:238, ui/dr-ui/src/develop.rs:270, ui/dr-ui/src/develop.rs:2733, ui/dr-ui/src/develop.rs:3147, ui/dr-ui/src/develop.rs:3201, ui/dr-ui/src/develop.rs:3245, ui/dr-ui/src/develop.rs:3295, ui/dr-ui/src/develop.rs:506, ui/dr-ui/src/develop.rs:544, ui/dr-ui/src/lib.rs:1271, ui/dr-ui/src/lib.rs:1930, ui/dr-ui/src/lib.rs:290, 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:218, ui/dr-ui/ui/app.slint:1915, ui/dr-ui/ui/app.slint:913
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:18, core/dr-pipeline/src/graph.rs:218, core/dr-pipeline/src/graph.rs:40, core/dr-pipeline/src/graph.rs:53, 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:1008, ui/dr-ui/src/lib.rs:575
FR-DEV-3b core/dr-pipeline/src/descriptor.rs:177, core/dr-pipeline/src/framing.rs:259, core/dr-pipeline/src/graph.rs:53, 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:218, core/dr-pipeline/src/graph.rs:40, core/dr-pipeline/src/mask.rs:954, ui/dr-ui/src/develop.rs:3874
FR-DEV-3d core/dr-gpu/src/adjust.rs:1022, core/dr-gpu/src/adjust.rs:104, core/dr-gpu/src/adjust.rs:751, core/dr-gpu/src/adjust.rs:84, core/dr-gpu/src/adjust.rs:967, core/dr-gpu/tests/capture_sharpen.rs:429, core/dr-gpu/tests/detail_stage.rs:241, core/dr-gpu/tests/local_contrast.rs:475, core/dr-gpu/tests/noise_reduction.rs:555, core/dr-pipeline/src/framing.rs:188, core/dr-pipeline/src/graph.rs:486, 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:948, 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:1390, core/dr-pipeline/src/operation.rs:1468, core/dr-pipeline/src/operation.rs:1493, core/dr-pipeline/src/operation.rs:1508, core/dr-pipeline/src/operation.rs:1532, 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:549
FR-DEV-3f core/dr-film/src/lib.rs:1, core/dr-film/src/profile.rs:73, core/dr-gpu/src/adjust.rs:139, core/dr-gpu/src/adjust.rs:191, core/dr-gpu/src/adjust.rs:346, core/dr-gpu/src/adjust.rs:464, core/dr-gpu/src/adjust.rs:77, core/dr-gpu/tests/film_sim.rs:1, core/dr-pipeline/src/graph.rs:110, core/dr-pipeline/src/graph.rs:292, core/dr-pipeline/src/graph.rs:96, core/dr-pipeline/src/operation.rs:1390, core/dr-pipeline/src/operation.rs:265, core/dr-pipeline/src/operation.rs:279, core/dr-pipeline/src/ops/film_sim.rs:113, core/dr-pipeline/src/ops/film_sim.rs:1, core/dr-pipeline/src/sidecar.rs:109, core/dr-pipeline/src/sidecar.rs:1647, core/dr-pipeline/src/sidecar.rs:169, core/dr-pipeline/src/sidecar.rs:1716, core/dr-pipeline/src/sidecar.rs:415, core/dr-pipeline/src/sidecar.rs:555, core/dr-pipeline/src/sidecar.rs:678, ui/dr-ui/src/develop.rs:2340, ui/dr-ui/src/develop.rs:2359, ui/dr-ui/src/develop.rs:2456, ui/dr-ui/src/develop.rs:2770, ui/dr-ui/src/lib.rs:1904, ui/dr-ui/src/lib.rs:512, ui/dr-ui/src/lib.rs:566, 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:879, ui/dr-ui/ui/adjust.slint:949, ui/dr-ui/ui/app.slint:2370, ui/dr-ui/ui/app.slint:707
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-types/src/lib.rs:336
FR-DEV-4 core/dr-gpu/src/adjust.rs:751, core/dr-gpu/src/lib.rs:217
FR-DEV-5 core/dr-pipeline/src/history.rs:124, core/dr-pipeline/src/history.rs:1, core/dr-pipeline/src/history.rs:55, core/dr-pipeline/src/history.rs:71, core/dr-pipeline/src/history.rs:79, ui/dr-ui/src/develop.rs:2788, ui/dr-ui/src/develop.rs:2798, ui/dr-ui/src/develop.rs:488, ui/dr-ui/src/lib.rs:1263
FR-DEV-6 core/dr-pipeline/src/preset.rs:1, core/dr-types/src/settings.rs:182, ui/dr-ui/src/develop.rs:2727, ui/dr-ui/src/develop.rs:2748, ui/dr-ui/src/lib.rs:1235, ui/dr-ui/src/library.rs:1545, ui/dr-ui/src/library.rs:364, ui/dr-ui/src/library.rs:392, ui/dr-ui/src/library_ui.rs:2512, ui/dr-ui/src/library_ui.rs:2912, ui/dr-ui/src/library_ui.rs:431, ui/dr-ui/src/presets.rs:1, ui/dr-ui/src/settings_ui.rs:535, ui/dr-ui/ui/adjust.slint:598, ui/dr-ui/ui/library.slint:1305, ui/dr-ui/ui/library.slint:831, ui/dr-ui/ui/library.slint:912, ui/dr-ui/ui/settings.slint:87
FR-DEV-8 core/dr-pipeline/src/detail.rs:364, core/dr-pipeline/src/operation.rs:299
FR-DSP-1 core/dr-gpu/src/adjust.rs:2073, core/dr-gpu/src/adjust.rs:2150, core/dr-gpu/src/adjust.rs:2235, core/dr-gpu/src/adjust.rs:54, core/dr-gpu/src/adjust.rs:751, core/dr-gpu/src/lib.rs:54, core/dr-gpu/src/lib.rs:94, core/dr-gpu/tests/capture_sharpen.rs:199, core/dr-gpu/tests/detail_stage.rs:327, core/dr-gpu/tests/local_contrast.rs:262, core/dr-gpu/tests/noise_reduction.rs:377, core/dr-pipeline/src/detail.rs:136, core/dr-pipeline/src/detail.rs:439, core/dr-pipeline/src/graph.rs:427, core/dr-pipeline/src/graph.rs:457, core/dr-pipeline/src/ops/capture_sharpen.rs:1, core/dr-pipeline/src/ops/capture_sharpen.rs:647, core/dr-pipeline/src/ops/local_contrast.rs:1, core/dr-pipeline/src/ops/local_contrast.rs:658, core/dr-pipeline/src/ops/noise_reduction.rs:691, ui/dr-ui/src/develop.rs:2161, ui/dr-ui/src/develop.rs:2936, ui/dr-ui/src/develop.rs:3419, ui/dr-ui/src/develop.rs:3453, ui/dr-ui/src/lib.rs:59, ui/dr-ui/src/lib.rs:716
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:2206, ui/dr-ui/src/develop.rs:4521, ui/dr-ui/src/develop.rs:4553, ui/dr-ui/src/develop.rs:499, ui/dr-ui/src/histogram.rs:1, ui/dr-ui/src/lib.rs:1322, ui/dr-ui/src/lib.rs:285, ui/dr-ui/ui/app.slint:276, 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:2383, core/dr-pipeline/src/graph.rs:417, core/dr-pipeline/src/graph.rs:470, 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:328, ui/dr-ui/src/settings_ui.rs:1, ui/dr-ui/src/settings_ui.rs:48, ui/dr-ui/src/settings_ui.rs:590
FR-EXP-7 ui/dr-ui/src/activity.rs:83, ui/dr-ui/src/export.rs:1, ui/dr-ui/src/export.rs:941, ui/dr-ui/src/lib.rs:175, ui/dr-ui/src/lib.rs:1846, ui/dr-ui/src/lib.rs:328, ui/dr-ui/src/lib.rs:363, ui/dr-ui/src/lib.rs:390, ui/dr-ui/src/library_ui.rs:3282, ui/dr-ui/src/library_ui.rs:522, ui/dr-ui/src/library_ui.rs:6138, ui/dr-ui/src/library_ui.rs:6215, ui/dr-ui/src/library_ui.rs:6227, ui/dr-ui/src/library_ui.rs:625, ui/dr-ui/src/library_ui.rs:682, ui/dr-ui/ui/app.slint:1004, ui/dr-ui/ui/app.slint:1384, ui/dr-ui/ui/library.slint:1313, ui/dr-ui/ui/library.slint:835, ui/dr-ui/ui/library.slint:927
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:1222, 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:444, 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:776, ui/dr-ui/src/export.rs:793, 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:1049, ui/dr-ui/src/develop.rs:2284, ui/dr-ui/src/lib.rs:328
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:390, ui/dr-ui/src/library.rs:1582, ui/dr-ui/src/library.rs:448, ui/dr-ui/src/library.rs:750, ui/dr-ui/src/library.rs:947, ui/dr-ui/src/library_ui.rs:1571, ui/dr-ui/src/library_ui.rs:3282, ui/dr-ui/src/library_ui.rs:463, 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:161, 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:2598, ui/dr-ui/src/library.rs:2624, ui/dr-ui/src/library_ui.rs:1, ui/dr-ui/src/library_ui.rs:3544, ui/dr-ui/src/library_ui.rs:4475, ui/dr-ui/ui/app.slint:513, ui/dr-ui/ui/settings.slint:340, 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:337, core/dr-catalog/src/schema.rs:738, 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:1606, ui/dr-ui/src/lib.rs:2403, ui/dr-ui/src/library.rs:1324, ui/dr-ui/src/library.rs:1347, ui/dr-ui/src/library.rs:1505, ui/dr-ui/src/library_ui.rs:1030, ui/dr-ui/src/library_ui.rs:1103, ui/dr-ui/src/library_ui.rs:1204, ui/dr-ui/src/library_ui.rs:1259, ui/dr-ui/src/library_ui.rs:1377, ui/dr-ui/src/library_ui.rs:1496, ui/dr-ui/src/library_ui.rs:2007, ui/dr-ui/src/library_ui.rs:234, ui/dr-ui/src/library_ui.rs:245, ui/dr-ui/src/library_ui.rs:253, ui/dr-ui/src/library_ui.rs:265, ui/dr-ui/src/library_ui.rs:274, ui/dr-ui/src/library_ui.rs:364, ui/dr-ui/src/library_ui.rs:374, ui/dr-ui/src/library_ui.rs:416, ui/dr-ui/src/library_ui.rs:479, ui/dr-ui/src/library_ui.rs:510, ui/dr-ui/src/library_ui.rs:5140, ui/dr-ui/src/library_ui.rs:5158, ui/dr-ui/src/library_ui.rs:5170, ui/dr-ui/src/library_ui.rs:522, ui/dr-ui/src/settings_store.rs:1, ui/dr-ui/src/settings_ui.rs:1, ui/dr-ui/ui/app.slint:2420, ui/dr-ui/ui/app.slint:576, 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:973
FR-NC-6b ui/dr-ui/src/library_ui.rs:1259
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:1030, ui/dr-ui/src/library_ui.rs:1103, 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-sync-nextcloud/src/lib.rs:95, ui/dr-ui/src/derived_sync.rs:1, ui/dr-ui/src/library.rs:2624, ui/dr-ui/src/library_ui.rs:3544, ui/dr-ui/ui/settings.slint:340
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:998, 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:998
FR-NC-8 core/dr-pipeline/src/sidecar.rs:120, core/dr-pipeline/src/sidecar.rs:90, ui/dr-ui/src/lib.rs:1575, ui/dr-ui/src/library.rs:364, ui/dr-ui/src/library_ui.rs:431
FR-NC-9 core/dr-catalog/src/merge.rs:1, core/dr-catalog/src/schema.rs:280, core/dr-catalog/src/sync.rs:1, core/dr-pipeline/src/sidecar.rs:158, core/dr-pipeline/src/sidecar.rs:1716, core/dr-pipeline/src/sidecar.rs:332, 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:785, 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:1365
FR-RAW-4 core/dr-decode/src/error.rs:1, ui/dr-ui/src/lib.rs:175
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:2485, ui/dr-ui/src/lib.rs:67, ui/dr-ui/src/masks_ui.rs:816, ui/dr-ui/ui/library.slint:1031
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:67, ui/dr-ui/src/library_ui.rs:253, ui/dr-ui/src/library_ui.rs:5025, ui/dr-ui/src/library_ui.rs:5170, ui/dr-ui/src/library_ui.rs:6246, ui/dr-ui/ui/app.slint:2142, ui/dr-ui/ui/app.slint:262, ui/dr-ui/ui/app.slint:606, ui/dr-ui/ui/app.slint:613, ui/dr-ui/ui/library.slint:1186, ui/dr-ui/ui/library.slint:1193, ui/dr-ui/ui/library.slint:1199, ui/dr-ui/ui/library.slint:2266, ui/dr-ui/ui/library.slint:823, ui/dr-ui/ui/library.slint:872, ui/dr-ui/ui/settings.slint:93
FR-UI-3 ui/dr-ui/src/develop.rs:1831, ui/dr-ui/src/library_ui.rs:4270, 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/ui/app.slint:1915, 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:4270, ui/dr-ui/src/library_ui.rs:4315, ui/dr-ui/src/library_ui.rs:4418, ui/dr-ui/src/library_ui.rs:4446, ui/dr-ui/src/library_ui.rs:5158, ui/dr-ui/src/library_ui.rs:5170, ui/dr-ui/ui/app.slint:1611, ui/dr-ui/ui/app.slint:582, ui/dr-ui/ui/app.slint:613, ui/dr-ui/ui/library.slint:1186, ui/dr-ui/ui/library.slint:1193, ui/dr-ui/ui/library.slint:1199, ui/dr-ui/ui/library.slint:2266, ui/dr-ui/ui/library.slint:823, ui/dr-ui/ui/library.slint:872, ui/dr-ui/ui/library.slint:891
FR-UI-5 ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/lib.rs:2130, ui/dr-ui/src/lib.rs:2519, ui/dr-ui/src/lib.rs:2704, ui/dr-ui/src/masks_ui.rs:863, ui/dr-ui/ui/app.slint:297, 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
NFR-ARCH-3 ui/dr-ui/src/export.rs:1552, ui/dr-ui/src/export.rs:1578, ui/dr-ui/src/export.rs:410, ui/dr-ui/src/export.rs:436, ui/dr-ui/src/lib.rs:1880, ui/dr-ui/ui/app.slint:1015, ui/dr-ui/ui/library.slint:927
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:134
NFR-P9 ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/export.rs:941, 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:947
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:55, ui/dr-ui/src/lib.rs:59
NFR-RES-4 core/dr-catalog/src/cache.rs:1, core/dr-catalog/src/schema.rs:337, 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:2598
NFR-SEC-1 core/dr-decode/src/error.rs: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

87 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-10
  • FR-CULL-11
  • FR-CULL-12
  • FR-CULL-3
  • FR-CULL-5
  • FR-CULL-6
  • FR-CULL-7
  • FR-CULL-8
  • FR-CULL-9
  • FR-DEV-1
  • FR-DEV-3g
  • FR-DEV-7
  • 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-P5
  • 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-5
  • NFR-SEC-6
  • R2
  • R3
  • R5
  • R6