Files
DarkRoom/docs/traceability.md
T
dtourolleandClaude Opus 5 33847a0bbc
Build and test / Desktop (Linux) (push) Failing after 9m18s
Build and test / Layer separation (push) Successful in 26s
Traceability / Requirement traces (push) Failing after 25s
🐳 Android image / Build and push (push) Successful in 3s
Build and test / android-image (push) Successful in 3s
Build and test / Android (aarch64) (push) Failing after 22m46s
Open one GPU device for the tests, and stop the checkout dying over LFS
Two CI failures, unrelated except that both were mine.

**The test binary faulted under parallel threads.** Every GPU test opened its
own `GpuContext`, and `cargo test` runs on as many threads as there are cores —
so a full run asked the driver to bring up a dozen Vulkan devices at once and
died with SIGSEGV. Serially it passed, which made it look like flakiness rather
than a fault in the harness. One device now, behind a `OnceLock`: a
`GpuContext` is an `Arc<Device>` and an `Arc<Queue>`, so sharing it is a
refcount, and the losers of the race block until the winner is done. 416 tests
now pass in parallel, in half the time twenty-six devices took.

**`lfs: true` on the checkout made the checkout fail.** The intent was right —
the model is in LFS, a plain checkout writes a 133-byte pointer, and the build
script panics on it — but on this server `git lfs fetch` is rejected at
`/info/lfs/objects/<oid>` with a client error: the credential `actions/checkout`
installs for git is not one the LFS endpoint accepts. So a fetch problem
presented as a checkout problem and took the whole job with it.

The object is on the server; a clean clone over SSH with `git lfs install
--local` pulls all 11 MB of it. It is now its own step with an explicit token,
and `continue-on-error` so a credential problem cannot masquerade as a broken
checkout — if it fails, the build still runs and fails with the build script's
own message, which names the real problem.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-24 19:36:34 +02:00

60 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 180
TRACES tags found 561
Requirements defined 177
Requirements covered 89
Coverage 50.3% (89/177)

By type

Type Covered Defined
FR 71 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:949, 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:949, ui/dr-ui/src/library.rs:152, ui/dr-ui/src/library.rs:2105, ui/dr-ui/ui/import.slint:5
FR-CAT-12 core/dr-pipeline/src/sidecar.rs:109
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:1218, ui/dr-ui/src/collections_ui.rs:1988, 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:2986, ui/dr-ui/src/library.rs:3018, 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:2581, ui/dr-ui/src/library.rs:2607, ui/dr-ui/src/library_ui.rs:138, ui/dr-ui/src/library_ui.rs:3539, ui/dr-ui/src/library_ui.rs:4470, 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:126, ui/dr-ui/src/collections_ui.rs:1571, ui/dr-ui/src/collections_ui.rs:1590, ui/dr-ui/src/collections_ui.rs:236, ui/dr-ui/src/collections_ui.rs:333, ui/dr-ui/src/library.rs:3032, ui/dr-ui/src/library_ui.rs:593, ui/dr-ui/src/library_ui.rs:6151, ui/dr-ui/src/library_ui.rs:6162, ui/dr-ui/src/library_ui.rs:6175, ui/dr-ui/src/library_ui.rs:6190, ui/dr-ui/src/library_ui.rs:6199, 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:3209, ui/dr-ui/src/library_ui.rs:282, ui/dr-ui/src/library_ui.rs:352, ui/dr-ui/src/library_ui.rs:5020, ui/dr-ui/src/library_ui.rs:5073, ui/dr-ui/src/library_ui.rs:6291, ui/dr-ui/ui/app.slint:461, ui/dr-ui/ui/app.slint:587, ui/dr-ui/ui/app.slint:816, 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:1686, ui/dr-ui/src/collections_ui.rs:1, ui/dr-ui/src/derived_sync.rs:1, ui/dr-ui/src/library_ui.rs:3397, ui/dr-ui/src/library_ui.rs:4060, 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:1273, core/dr-pipeline/src/sidecar.rs:90, core/dr-pipeline/tests/tone_curve.rs:33, ui/dr-ui/src/develop.rs:2600, ui/dr-ui/src/develop.rs:2628, ui/dr-ui/src/export.rs:749, ui/dr-ui/src/lib.rs:1186, ui/dr-ui/src/lib.rs:1526, ui/dr-ui/src/lib.rs:1631, ui/dr-ui/src/lib.rs:464, ui/dr-ui/src/lib.rs:796, ui/dr-ui/src/library.rs:1528, ui/dr-ui/src/library.rs:364, ui/dr-ui/src/library.rs:402, ui/dr-ui/src/library.rs:439, ui/dr-ui/src/library.rs:679, ui/dr-ui/src/library_ui.rs:4762, 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:1488, ui/dr-ui/src/library.rs:1565, ui/dr-ui/src/library.rs:220, ui/dr-ui/src/library.rs:3316, ui/dr-ui/src/library.rs:439, ui/dr-ui/src/library.rs:663, ui/dr-ui/src/library.rs:679, ui/dr-ui/src/library.rs:733, 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:2685, ui/dr-ui/src/library_ui.rs:2907, ui/dr-ui/src/library_ui.rs:3188, ui/dr-ui/src/library_ui.rs:3260, ui/dr-ui/src/library_ui.rs:3448, ui/dr-ui/src/library_ui.rs:3566, ui/dr-ui/src/library_ui.rs:405, ui/dr-ui/src/library_ui.rs:463, ui/dr-ui/src/library_ui.rs:5118, ui/dr-ui/src/library_ui.rs:5233, ui/dr-ui/src/presets.rs:309, ui/dr-ui/src/presets.rs:321, 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:126, ui/dr-ui/src/library.rs:203, ui/dr-ui/src/library.rs:364
FR-DEV-2 core/dr-pipeline/src/operation.rs:318
FR-DEV-3 core/dr-gpu/src/adjust.rs:1860, core/dr-gpu/src/adjust.rs:395, core/dr-gpu/src/adjust.rs:506, core/dr-gpu/src/adjust.rs:77, 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:120, core/dr-pipeline/src/graph.rs:397, core/dr-pipeline/src/mask.rs:120, core/dr-pipeline/src/operation.rs:265, core/dr-pipeline/src/operation.rs:439, 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:1273, core/dr-pipeline/src/sidecar.rs:1329, core/dr-pipeline/src/sidecar.rs:147, 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:2600, ui/dr-ui/src/develop.rs:270, ui/dr-ui/src/develop.rs:3003, ui/dr-ui/src/develop.rs:3057, ui/dr-ui/src/develop.rs:3101, ui/dr-ui/src/develop.rs:3151, ui/dr-ui/src/develop.rs:506, ui/dr-ui/src/develop.rs:544, ui/dr-ui/src/lib.rs:1222, ui/dr-ui/src/lib.rs:1874, ui/dr-ui/src/lib.rs:290, ui/dr-ui/src/library.rs:402, 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:1905, ui/dr-ui/ui/app.slint:903
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:184, core/dr-pipeline/src/graph.rs:18, 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:294, core/dr-pipeline/src/ops/curve.rs:318, ui/dr-ui/src/develop.rs:1008, ui/dr-ui/src/lib.rs:526
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:294
FR-DEV-3c core/dr-pipeline/build.rs:1807, core/dr-pipeline/ops/exposure.yaml:1, core/dr-pipeline/src/graph.rs:184, core/dr-pipeline/src/graph.rs:40, core/dr-pipeline/src/mask.rs:954, ui/dr-ui/src/develop.rs:3730
FR-DEV-3d core/dr-gpu/src/adjust.rs:506, core/dr-gpu/src/adjust.rs:709, core/dr-gpu/src/adjust.rs:764, core/dr-gpu/src/adjust.rs:77, core/dr-gpu/src/adjust.rs:97, 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:426, core/dr-pipeline/src/operation.rs:318, core/dr-pipeline/src/operation.rs:31, 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:690, 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:1341, core/dr-pipeline/src/operation.rs:1366, core/dr-pipeline/src/operation.rs:1381, core/dr-pipeline/src/operation.rs:1405, core/dr-pipeline/src/operation.rs:369, core/dr-pipeline/src/operation.rs:379, core/dr-pipeline/src/operation.rs:510
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:506, 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:2644, ui/dr-ui/src/develop.rs:2654, ui/dr-ui/src/develop.rs:488, ui/dr-ui/src/lib.rs:1214
FR-DEV-6 core/dr-pipeline/src/preset.rs:1, core/dr-types/src/settings.rs:182, ui/dr-ui/src/develop.rs:2594, ui/dr-ui/src/develop.rs:2615, ui/dr-ui/src/lib.rs:1186, ui/dr-ui/src/library.rs:1528, 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:2907, 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:265
FR-DSP-1 core/dr-gpu/src/adjust.rs:1783, core/dr-gpu/src/adjust.rs:1860, core/dr-gpu/src/adjust.rs:1945, core/dr-gpu/src/adjust.rs:506, core/dr-gpu/src/adjust.rs:54, 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:367, core/dr-pipeline/src/graph.rs:397, 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:2792, ui/dr-ui/src/develop.rs:3275, ui/dr-ui/src/develop.rs:3309, ui/dr-ui/src/lib.rs:59, ui/dr-ui/src/lib.rs:667
FR-DSP-6 core/dr-pipeline/src/operation.rs:412, 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:4377, ui/dr-ui/src/develop.rs:4409, ui/dr-ui/src/develop.rs:499, ui/dr-ui/src/histogram.rs:1, ui/dr-ui/src/lib.rs:1273, 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:2093, core/dr-pipeline/src/graph.rs:357, core/dr-pipeline/src/graph.rs:410, core/dr-pipeline/src/operation.rs:412, 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:1797, 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:3277, ui/dr-ui/src/library_ui.rs:522, ui/dr-ui/src/library_ui.rs:6133, ui/dr-ui/src/library_ui.rs:6210, ui/dr-ui/src/library_ui.rs:6222, ui/dr-ui/src/library_ui.rs:625, ui/dr-ui/src/library_ui.rs:682, ui/dr-ui/ui/app.slint:1374, ui/dr-ui/ui/app.slint:994, 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:791, 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:1565, ui/dr-ui/src/library.rs:439, ui/dr-ui/src/library.rs:733, ui/dr-ui/src/library.rs:930, ui/dr-ui/src/library_ui.rs:1571, ui/dr-ui/src/library_ui.rs:3277, 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:2581, ui/dr-ui/src/library.rs:2607, ui/dr-ui/src/library_ui.rs:1, ui/dr-ui/src/library_ui.rs:3539, ui/dr-ui/src/library_ui.rs:4470, 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:3188, ui/dr-ui/src/collections_ui.rs:614, ui/dr-ui/src/collections_ui.rs:676, ui/dr-ui/src/lib.rs:1557, ui/dr-ui/src/lib.rs:2297, ui/dr-ui/src/library.rs:1307, ui/dr-ui/src/library.rs:1330, ui/dr-ui/src/library.rs:1488, 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:5135, ui/dr-ui/src/library_ui.rs:5153, ui/dr-ui/src/library_ui.rs:5165, 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:2403, 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:3188, ui/dr-ui/src/collections_ui.rs:614, ui/dr-ui/src/collections_ui.rs:676, 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:2607, ui/dr-ui/src/library_ui.rs:3539, 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:949, 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:949
FR-NC-8 core/dr-pipeline/src/sidecar.rs:109, core/dr-pipeline/src/sidecar.rs:90, ui/dr-ui/src/lib.rs:1526, 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:147, core/dr-pipeline/src/sidecar.rs:301, ui/dr-ui/src/library.rs:733, ui/dr-ui/src/library.rs:863
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:736, 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:2379, 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:111, ui/dr-ui/src/collections_ui.rs:1501, ui/dr-ui/src/collections_ui.rs:1515, ui/dr-ui/src/collections_ui.rs:152, ui/dr-ui/src/collections_ui.rs:1561, ui/dr-ui/src/collections_ui.rs:1659, ui/dr-ui/src/collections_ui.rs:478, ui/dr-ui/src/collections_ui.rs:507, ui/dr-ui/src/collections_ui.rs:988, ui/dr-ui/src/collections_ui.rs:998, ui/dr-ui/src/lib.rs:67, ui/dr-ui/src/library_ui.rs:253, ui/dr-ui/src/library_ui.rs:5020, ui/dr-ui/src/library_ui.rs:5165, ui/dr-ui/src/library_ui.rs:6241, ui/dr-ui/ui/app.slint:2132, 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:4265, 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:1905, ui/dr-ui/ui/collections.slint:4, ui/dr-ui/ui/collections.slint:682
FR-UI-4 ui/dr-ui/src/collections_ui.rs:111, ui/dr-ui/src/collections_ui.rs:124, ui/dr-ui/src/collections_ui.rs:1501, ui/dr-ui/src/collections_ui.rs:1515, ui/dr-ui/src/collections_ui.rs:152, ui/dr-ui/src/collections_ui.rs:1561, ui/dr-ui/src/collections_ui.rs:1659, ui/dr-ui/src/collections_ui.rs:1686, ui/dr-ui/src/collections_ui.rs:478, ui/dr-ui/src/collections_ui.rs:507, ui/dr-ui/src/collections_ui.rs:575, ui/dr-ui/src/collections_ui.rs:988, ui/dr-ui/src/collections_ui.rs:998, ui/dr-ui/src/library_ui.rs:4265, ui/dr-ui/src/library_ui.rs:4310, ui/dr-ui/src/library_ui.rs:4413, ui/dr-ui/src/library_ui.rs:4441, ui/dr-ui/src/library_ui.rs:5153, ui/dr-ui/src/library_ui.rs:5165, ui/dr-ui/ui/app.slint:1601, 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:2024, ui/dr-ui/src/lib.rs:2413, ui/dr-ui/src/lib.rs:2598, 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:1831, ui/dr-ui/ui/app.slint:1005, 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:930
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:2581
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

88 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-3f
  • 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