Files
DarkRoom/docs/traceability.md
T
dtourolle cc1c5c892d Support requesting VFS hydration; fix Android TLS cross-compilation
Correcting the previous commit: I claimed VFS placeholders could not be
downloaded. That was wrong. The desktop client exposes a socket at
$XDG_RUNTIME_DIR/Nextcloud/socket speaking newline-delimited
COMMAND:argument, and MAKE_AVAILABLE_LOCALLY:<path> does fetch the file.
Verified against client 4.0.7: a 1-byte stub became a real 2.8MB file in
2.8 seconds.

Implemented as dr-sync-nextcloud::desktop_client, deliberately optional.
Android has no desktop client, no XDG_RUNTIME_DIR socket and no
placeholders, so detect() returns None there and callers fall back to the
connector. It earns its place only because it is ~30 lines with no
dependencies: where a library already lives in a VFS folder, asking the
client to fetch beats downloading a second copy over WebDAV and leaving
the client's placeholder state inconsistent.

What this does not change: hydration is whole-file, so it suits the
original tier and never browsing. Filling a grid this way downloads the
entire library. Range extraction remains the only mechanism satisfying
FR-NC-3, and ARCH §9.0 now says so precisely.

Also fixes two real Android build failures found by cross-compiling:

  - reqwest's `rustls` feature defaults to aws-lc-rs, whose aws-lc-sys
    crate is C and fails under the NDK — exactly the pain D1 chose Rust
    to avoid. Switched to rustls-no-provider + ring, installing the
    provider in the constructor so no caller can build a client that
    panics on first use.
  - ring itself needs CC/AR per target; cargo-ndk sets only the linker.
    Added them to the container.

87 tests passing. dr-sync-nextcloud cross-compiles for aarch64-linux-android.
2026-08-09 10:10:29 +02:00

5.9 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 25
TRACES tags found 31
Requirements defined 143
Requirements covered 32
Coverage 22.4% (32/143)

By type

Type Covered Defined
FR 23 90
NFR 7 47
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 tools/traceability/src/lib.rs:473, tools/traceability/src/lib.rs:505
FR-CAT-1a core/dr-types/src/lib.rs:23
FR-CAT-2 tools/traceability/src/lib.rs:473
FR-CAT-5 core/dr-decode/src/lib.rs:125
FR-CAT-9 core/dr-sync-nextcloud/src/desktop_client.rs:30, core/dr-types/src/lib.rs:80
FR-CULL-1 core/dr-decode/src/preview.rs:96
FR-CULL-2 core/dr-decode/src/preview.rs:123
FR-DEV-4 core/dr-gpu/src/lib.rs:119
FR-DSP-1 ui/dr-ui/src/lib.rs:21
FR-EXP-9 core/dr-decode/src/lib.rs:151
FR-NC-1 core/dr-sync-nextcloud/src/auth.rs:132, core/dr-sync-nextcloud/src/auth.rs:44
FR-NC-12 core/dr-sync-nextcloud/src/lib.rs:32, core/dr-sync/src/lib.rs:128, core/dr-sync/src/lib.rs:34
FR-NC-3 core/dr-decode/src/preview.rs:123, core/dr-sync/src/capability.rs:41
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:128
FR-NC-5 core/dr-sync-nextcloud/src/propfind.rs:51
FR-NC-6c core/dr-sync-nextcloud/src/desktop_client.rs:30, core/dr-types/src/lib.rs:131, core/dr-types/src/lib.rs:80
FR-PLAT-AND-1 core/dr-types/src/lib.rs:23
FR-RAW-1 core/dr-decode/src/lib.rs:83, core/dr-types/src/lib.rs:90
FR-RAW-3 core/dr-decode/src/lib.rs:151
FR-RAW-4 core/dr-decode/src/error.rs:1
FR-RAW-5 core/dr-decode/src/lib.rs:62
FR-UI-1 ui/dr-ui/src/lib.rs:29
FR-UI-2 ui/dr-ui/src/lib.rs:29
NFR-OPS-1 tools/traceability/src/lib.rs:266
NFR-P1 tools/traceability/src/lib.rs:473
NFR-P13 core/dr-decode/src/preview.rs:96
NFR-R7 core/dr-gpu/src/error.rs:1
NFR-R8 core/dr-gpu/src/error.rs:1
NFR-RES-1 ui/dr-ui/src/lib.rs:21
NFR-SEC-1 core/dr-decode/src/error.rs:1
R1 tools/traceability/src/lib.rs:489, tools/traceability/src/lib.rs:493
R4 core/dr-gpu/src/lib.rs:119

Not yet tagged

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

Show untagged requirements
  • FR-CAT-10
  • FR-CAT-11
  • FR-CAT-12
  • FR-CAT-13
  • FR-CAT-14
  • FR-CAT-3
  • FR-CAT-4
  • FR-CAT-6
  • FR-CAT-7
  • FR-CAT-8
  • FR-CULL-3
  • FR-CULL-4
  • FR-CULL-5
  • FR-CULL-6
  • FR-CULL-7
  • FR-DEV-1
  • FR-DEV-2
  • FR-DEV-3
  • FR-DEV-3a
  • FR-DEV-3b
  • FR-DEV-3c
  • FR-DEV-3d
  • FR-DEV-3e
  • FR-DEV-3f
  • FR-DEV-3g
  • FR-DEV-5
  • FR-DEV-6
  • FR-DEV-7
  • FR-DEV-8
  • FR-DSP-2
  • FR-DSP-3
  • FR-DSP-4
  • FR-DSP-5
  • FR-DSP-6
  • FR-DSP-7
  • FR-DSP-8
  • FR-EXP-1
  • FR-EXP-2
  • FR-EXP-3
  • FR-EXP-4
  • FR-EXP-5
  • FR-EXP-6
  • FR-EXP-7
  • FR-EXP-8
  • FR-NC-10
  • FR-NC-11
  • FR-NC-2
  • FR-NC-6
  • FR-NC-6a
  • FR-NC-6b
  • FR-NC-7
  • FR-NC-8
  • FR-NC-9
  • FR-PLAT-AND-2
  • FR-PLAT-AND-3
  • FR-PLAT-AND-4
  • FR-PLAT-AND-5
  • FR-PLAT-AND-6
  • FR-PLAT-LIN-1
  • FR-PLAT-LIN-2
  • FR-PLAT-LIN-3
  • FR-RAW-2
  • FR-UI-3
  • FR-UI-4
  • FR-UI-5
  • FR-UI-6
  • FR-UI-7
  • NFR-A11Y-1
  • NFR-A11Y-2
  • NFR-A11Y-3
  • NFR-ARCH-1
  • NFR-ARCH-2
  • NFR-ARCH-3
  • NFR-ARCH-4
  • 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-P9
  • NFR-PORT-1
  • NFR-PORT-2
  • NFR-PORT-3
  • NFR-R1
  • NFR-R2
  • NFR-R3
  • NFR-R4
  • NFR-R5
  • NFR-R6
  • NFR-RES-2
  • NFR-RES-3
  • NFR-RES-4
  • NFR-SEC-2
  • NFR-SEC-3
  • NFR-SEC-4
  • R2
  • R3
  • R5
  • R6