Files
jellytau/docs/traceability.md
T
dtourolle f49e6e4648 fix(boundary): detect item-type arrays anywhere in src/ (DR-094)
check:boundary passed on the very leak it was written for. The pattern was
anchored to `includeItemTypes:` at the query site, so searchScope.ts
assigning the same array to a named const and dereferencing it one
indirection away was invisible — through every green CI run.

The check now matches an array literal naming two or more Jellyfin item
types anywhere in src/, catching a const, a Record value, a function
return, and an inline query alike. Deliberate limits kept: two adjacent
literals required (single-type presentation stays legal), string literals
required (item.type === "Audio" is display logic), explicit type list
(so ["High","Low"] produces no noise).

Verified all five cases: reintroducing the original SCOPE_ITEM_TYPES
fails; a new const ["Movie","Series"] fails; the same array in a
.test.ts passes; itemType: "Movie" / item.type === / ["High","Low"] pass;
a 5th allowlist entry fails on the new cap.

Allowlist 1→3 entries, capped at 4 so the next exception forces a
conversation rather than a one-line append:
- GenericMediaListPage: grid styling over a self-declared itemType —
  presentation, changes only with a UI redesign.
- DownloadedBrowse: borderline, leans domain (the container set grows
  when Jellyfin adds a container type). Allowlisted with a TODO for a
  backend MediaItem.isContainer flag.

The header now names what the check still cannot see — run-time-built
sets, types split across variables, switch/|| taxonomy — and CLAUDE.md
states that a green check:boundary is not proof. That matters given this
check passed on its own founding violation for months.

Also: both gates wired into test-all.sh, which called `bun run test`
without --run and would have hung in watch mode. Corrected the Dockerfile
comment describing the Windows toolchain as mingw/GNU — it is MSVC via
cargo-xwin (GNU cannot bundle NSIS from Linux).
2026-07-30 10:30:55 +02:00

159 KiB

Code Traceability Matrix

Generated: 7/28/2026, 11:52:49 PM

Summary

  • Total Files Scanned: 302
  • Total TRACES Found: 322
  • Requirements Covered:
    • User Requirements (UR): 58
    • Integration Requirements (IR): 15
    • Development Requirements (DR): 85
    • Jellyfin API Requirements (JA): 24

Requirements by Type

User Requirements (UR)

UR-002, UR-003, UR-004, UR-005, UR-007, UR-008, UR-009, UR-010, UR-011, UR-012, UR-013, UR-014, UR-015, UR-016, UR-017, UR-018, UR-019, UR-020, UR-021, UR-022, UR-023, UR-024, UR-025, UR-026, UR-027, UR-028, UR-029, UR-030, UR-031, UR-032, UR-033, UR-034, UR-035, UR-036, UR-038, UR-039, UR-040, UR-041, UR-042, UR-043, UR-044, UR-045, UR-046, UR-047, UR-048, UR-049, UR-050, UR-051, UR-052, UR-053, UR-054, UR-055, UR-056, UR-057, UR-058, UR-059, UR-060, UR-061

Integration Requirements (IR)

IR-003, IR-004, IR-009, IR-010, IR-011, IR-012, IR-013, IR-014, IR-015, IR-020, IR-023, IR-025, IR-026, IR-027, IR-028

Development Requirements (DR)

DR-001, DR-002, DR-003, DR-004, DR-005, DR-006, DR-007, DR-009, DR-010, DR-011, DR-012, DR-013, DR-014, DR-015, DR-016, DR-017, DR-018, DR-020, DR-021, DR-022, DR-023, DR-024, DR-025, DR-026, DR-027, DR-028, DR-029, DR-030, DR-032, DR-033, DR-034, DR-035, DR-036, DR-037, DR-038, DR-039, DR-040, DR-041, DR-043, DR-044, DR-045, DR-047, DR-048, DR-049, DR-050, DR-051, DR-052, DR-053, DR-054, DR-055, DR-056, DR-057, DR-058, DR-059, DR-060, DR-061, DR-062, DR-063, DR-064, DR-065, DR-066, DR-067, DR-068, DR-069, DR-070, DR-074, DR-075, DR-076, DR-077, DR-078, DR-079, DR-080, DR-081, DR-082, DR-083, DR-084, DR-085, DR-086, DR-087, DR-088, DR-089, DR-090, DR-091, DR-092, DR-093

Jellyfin API Requirements (JA)

JA-001, JA-002, JA-003, JA-004, JA-005, JA-007, JA-010, JA-011, JA-012, JA-016, JA-017, JA-019, JA-020, JA-021, JA-022, JA-023, JA-024, JA-025, JA-026, JA-028, JA-029, JA-030, JA-031, JA-032

Detailed Mapping

IR-003

Locations: 2 file(s)

IR-004

Locations: 1 file(s)

IR-009

Locations: 6 file(s)

IR-010

Locations: 2 file(s)

IR-011

Locations: 1 file(s)

IR-012

Locations: 2 file(s)

IR-013

Locations: 3 file(s)

IR-014

Locations: 6 file(s)

IR-015

Locations: 1 file(s)

IR-020

Locations: 8 file(s)

IR-023

Locations: 1 file(s)

IR-025

Locations: 2 file(s)

IR-026

Locations: 1 file(s)

IR-027

Locations: 1 file(s)

IR-028

Locations: 1 file(s)

DR-001

Locations: 17 file(s)

DR-002

Locations: 2 file(s)

DR-003

Locations: 2 file(s)

DR-004

Locations: 9 file(s)

DR-005

Locations: 13 file(s)

DR-006

Locations: 2 file(s)

DR-007

Locations: 9 file(s)

DR-009

Locations: 12 file(s)

DR-010

Locations: 1 file(s)

DR-011

Locations: 9 file(s)

DR-012

Locations: 7 file(s)

DR-013

Locations: 5 file(s)

DR-014

Locations: 4 file(s)

DR-015

Locations: 6 file(s)

DR-016

Locations: 3 file(s)

DR-017

Locations: 3 file(s)

DR-018

Locations: 1 file(s)

DR-020

Locations: 8 file(s)

DR-021

Locations: 2 file(s)

DR-022

Locations: 1 file(s)

DR-023

Locations: 3 file(s)

DR-024

Locations: 4 file(s)

DR-025

Locations: 1 file(s)

DR-026

Locations: 2 file(s)

DR-027

Locations: 2 file(s)

DR-028

Locations: 18 file(s)

DR-029

Locations: 10 file(s)

DR-030

Locations: 18 file(s)

DR-032

Locations: 1 file(s)

DR-033

Locations: 2 file(s)

DR-034

Locations: 2 file(s)

DR-035

Locations: 7 file(s)

DR-036

Locations: 12 file(s)

DR-037

Locations: 12 file(s)

DR-038

Locations: 9 file(s)

DR-039

Locations: 8 file(s)

DR-040

Locations: 3 file(s)

DR-041

Locations: 2 file(s)

DR-043

Locations: 1 file(s)

DR-044

Locations: 1 file(s)

DR-045

Locations: 1 file(s)

DR-047

Locations: 13 file(s)

DR-048

Locations: 6 file(s)

DR-049

Locations: 1 file(s)

DR-050

Locations: 1 file(s)

DR-051

Locations: 3 file(s)

DR-052

Locations: 10 file(s)

DR-053

Locations: 1 file(s)

DR-054

Locations: 1 file(s)

DR-055

Locations: 2 file(s)

DR-056

Locations: 1 file(s)

DR-057

Locations: 1 file(s)

DR-058

Locations: 1 file(s)

DR-059

Locations: 1 file(s)

DR-060

Locations: 1 file(s)

DR-061

Locations: 1 file(s)

DR-062

Locations: 3 file(s)

DR-063

Locations: 8 file(s)

DR-064

Locations: 3 file(s)

DR-065

Locations: 2 file(s)

DR-066

Locations: 5 file(s)

DR-067

Locations: 3 file(s)

DR-068

Locations: 1 file(s)

DR-069

Locations: 1 file(s)

DR-070

Locations: 1 file(s)

DR-074

Locations: 17 file(s)

DR-075

Locations: 1 file(s)

DR-076

Locations: 2 file(s)

DR-077

Locations: 2 file(s)

DR-078

Locations: 6 file(s)

DR-079

Locations: 2 file(s)

DR-080

Locations: 2 file(s)

DR-081

Locations: 2 file(s)

DR-082

Locations: 20 file(s)

DR-083

Locations: 19 file(s)

DR-084

Locations: 2 file(s)

DR-085

Locations: 15 file(s)

DR-086

Locations: 1 file(s)

DR-087

Locations: 4 file(s)

DR-088

Locations: 2 file(s)

DR-089

Locations: 4 file(s)

DR-090

Locations: 1 file(s)

DR-091

Locations: 2 file(s)

DR-092

Locations: 2 file(s)

DR-093

Locations: 4 file(s)

JA-001

Locations: 1 file(s)

JA-002

Locations: 2 file(s)

JA-003

Locations: 1 file(s)

JA-004

Locations: 3 file(s)

JA-005

Locations: 1 file(s)

JA-007

Locations: 1 file(s)

JA-010

Locations: 2 file(s)

JA-011

Locations: 2 file(s)

JA-012

Locations: 2 file(s)

JA-016

Locations: 1 file(s)

JA-017

Locations: 1 file(s)

JA-019

Locations: 1 file(s)

JA-020

Locations: 1 file(s)

JA-021

Locations: 6 file(s)

JA-022

Locations: 3 file(s)

JA-023

Locations: 3 file(s)

JA-024

Locations: 2 file(s)

JA-025

Locations: 4 file(s)

JA-026

Locations: 3 file(s)

JA-028

Locations: 1 file(s)

JA-029

Locations: 3 file(s)

JA-030

Locations: 2 file(s)

JA-031

Locations: 2 file(s)

JA-032

Locations: 10 file(s)

UR-002

Locations: 16 file(s)

UR-003

Locations: 20 file(s)

UR-004

Locations: 15 file(s)

UR-005

Locations: 60 file(s)

UR-007

Locations: 15 file(s)

UR-009

Locations: 15 file(s)

UR-011

Locations: 11 file(s)

UR-014

Locations: 1 file(s)

UR-017

Locations: 9 file(s)

UR-019

Locations: 12 file(s)

UR-020

Locations: 4 file(s)

UR-021

Locations: 5 file(s)

UR-023

Locations: 21 file(s)

UR-026

Locations: 17 file(s)

UR-027

Locations: 23 file(s)

UR-028

Locations: 2 file(s)

UR-029

Locations: 5 file(s)

UR-034

Locations: 10 file(s)

UR-035

Locations: 5 file(s)

UR-038

Locations: 1 file(s)

UR-040

Locations: 22 file(s)

UR-041

Locations: 1 file(s)

UR-048

Locations: 3 file(s)

UR-049

Locations: 13 file(s)

UR-053

Locations: 17 file(s)

UR-055

Locations: 27 file(s)

UR-056

Locations: 17 file(s)

UR-057

Locations: 1 file(s)

UR-058

Locations: 4 file(s)

IT-003

Locations: 1 file(s)

IT-004

Locations: 1 file(s)

IT-013

Locations: 4 file(s)

IT-016

Locations: 1 file(s)

IT-017

Locations: 1 file(s)

UT-003

Locations: 1 file(s)

UT-004

Locations: 1 file(s)

UT-005

Locations: 1 file(s)

UT-012

Locations: 1 file(s)

UT-014

Locations: 2 file(s)

UT-015

Locations: 2 file(s)

UT-016

Locations: 2 file(s)

UT-017

Locations: 2 file(s)

UT-018

Locations: 2 file(s)

UT-019

Locations: 2 file(s)

UT-020

Locations: 2 file(s)

UT-021

Locations: 2 file(s)

UT-022

Locations: 2 file(s)

UT-023

Locations: 2 file(s)

UT-025

Locations: 2 file(s)

UT-026

Locations: 2 file(s)

UT-027

Locations: 1 file(s)

UT-028

Locations: 1 file(s)

UT-030

Locations: 1 file(s)

UT-031

Locations: 1 file(s)

UT-032

Locations: 1 file(s)

UT-051

Locations: 1 file(s)

UT-059

Locations: 3 file(s)

UT-060

Locations: 2 file(s)

UT-061

Locations: 9 file(s)

UR-061

Locations: 2 file(s)

UT-062

Locations: 1 file(s)

UT-067

Locations: 1 file(s)

UT-071

Locations: 1 file(s)

UT-085

Locations: 2 file(s)

UT-086

Locations: 2 file(s)

UT-087

Locations: 2 file(s)

UT-088

Locations: 1 file(s)

UR-008

Locations: 2 file(s)

UR-010

Locations: 15 file(s)

UR-012

Locations: 9 file(s)

UR-013

Locations: 2 file(s)

UR-015

Locations: 13 file(s)

UR-016

Locations: 2 file(s)

UR-018

Locations: 3 file(s)

UR-024

Locations: 2 file(s)

UR-025

Locations: 16 file(s)

UR-030

Locations: 2 file(s)

UR-032

Locations: 7 file(s)

UR-033

Locations: 12 file(s)

UR-036

Locations: 3 file(s)

UR-039

Locations: 1 file(s)

UR-042

Locations: 1 file(s)

UR-043

Locations: 2 file(s)

UR-050

Locations: 7 file(s)

UR-051

Locations: 2 file(s)

UR-052

Locations: 10 file(s)

UR-054

Locations: 3 file(s)

UT-010

Locations: 1 file(s)

UT-024

Locations: 1 file(s)

UT-052

Locations: 1 file(s)

UR-059

Locations: 6 file(s)

UR-060

Locations: 3 file(s)

UT-029

Locations: 1 file(s)

UT-033

Locations: 1 file(s)

UT-042

Locations: 1 file(s)

UT-043

Locations: 1 file(s)

UT-044

Locations: 1 file(s)

UT-066

Locations: 1 file(s)

UT-072

Locations: 1 file(s)

UT-073

Locations: 1 file(s)

UT-074

Locations: 1 file(s)

UT-075

Locations: 1 file(s)

UT-076

Locations: 1 file(s)

UT-077

Locations: 1 file(s)

UT-078

Locations: 1 file(s)

UT-079

Locations: 1 file(s)

UT-080

Locations: 1 file(s)

UT-081

Locations: 1 file(s)

UT-082

Locations: 1 file(s)

UT-083

Locations: 1 file(s)

UT-084

Locations: 1 file(s)

UR-022

Locations: 1 file(s)

UR-031

Locations: 2 file(s)

UR-044

Locations: 1 file(s)

UR-045

Locations: 1 file(s)

UR-046

Locations: 1 file(s)

UR-047

Locations: 1 file(s)