Status for the two changes just landed, plus the consequence AR-004's fix has for the scene join. The annotator's old comment said blocking there was safe because the branches are independent. That stopped being true when the fanout became lossless: it now stops popping once one branch stops taking, so a starved detector and a waiting annotator would wedge. What actually makes it safe is join depth -- the fanout can run the dense branch ahead by the whole of the sampled branch's buffering, which at kSceneJoinDepth 256 and sample_fps 5 against a 25 fps source is ~1200 dense frames against TransNetV2's 100-frame window. Cutting kSceneJoinDepth below the window would reintroduce the wedge, so it is now a correctness precondition rather than a tuning knob. TRACES: AR-004, AR-010, AR-028, AR-029 | VR-015 | SR-002
72 KiB
Requirements traceability matrix
Generated: 2026-08-05T12:38:33+00:00
Denominators are read from requirements.md at run time, never hardcoded. Coverage counts a requirement only when it is tagged in source and has a verification tier this repo's CI host can execute (T1, T2, T3, static).
Summary
| Metric | Value |
|---|---|
| Source files scanned | 117 |
| TRACES tags found | 195 |
| EXCEPTION tags found | 0 |
| Requirements defined | 70 |
| Requirements covered | 42 |
| Coverage | 60.0% (42/70) |
| Coverage of CI-executable scope | 75.0% (42/56) |
| Tagged but unexecuted in CI | 9 |
| Orphan tags | 0 |
By type
| Type | Covered | Tagged but unexecuted | Defined |
|---|---|---|---|
| AR | 26 | 1 | 30 |
| DP | 2 | 0 | 8 |
| IR | 8 | 0 | 8 |
| GR | 5 | 0 | 9 |
| VR | 1 | 8 | 15 |
- UT tags present (separate taxonomy, not counted in coverage): UT-001, UT-002, UT-003, UT-004, UT-005, UT-101, UT-102, UT-103, UT-104, UT-105, UT-106, UT-107, UT-108, UT-120, UT-121, UT-122, UT-123, UT-124, UT-130, UT-131, UT-132, UT-133, UT-134, UT-135, UT-136, UT-137, UT-138, UT-139, UT-140, UT-141
- IT tags present (separate taxonomy, not counted in coverage): IT-001
- PR tags present (separate taxonomy, not counted in coverage): PR-002, PR-004
- SR tags present (separate taxonomy, not counted in coverage): SR-001, SR-002, SR-003, SR-005
Not executable in CI
These requirements have no verification tier this repo's CI host can run, so a tag on them is evidence of intent, not of verification. They are never counted as covered.
| ID | Tiers | Tagged in source | Requirement |
|---|---|---|---|
| AR-027 | T4 | yes | Throughput acceptable for arbitrary gallery size |
| VR-001 | out-of-ci | yes | HDF5 post-inference dump at the embedded-frame boundary |
| VR-002 | out-of-ci | yes | Replay drives the real KPN nodes, not a reimplementation |
| VR-003 | out-of-ci | yes | Scoring: micro-F1 against X-Ray, precision/recall logged at every eva… |
| VR-004 | out-of-ci | yes | Reproducible validation corpus with ground truth |
| VR-005 | out-of-ci | yes | Minimum face size study — TPI/FPI vs probe size, gallery held at nati… |
| VR-006 | out-of-ci | no | Re-tune scene_threshold once native-rate decode lands |
| VR-007 | out-of-ci | no | Expansion band, clustering threshold, and deferred-pass ablation |
| VR-008 | out-of-ci | no | Gallery scaling benchmark — throughput vs gallery size |
| VR-010 | out-of-ci | yes | Dump provenance attributes — embedder model, detector settings, `dens… |
| VR-011 | out-of-ci | no | Rewrite the replay harness for the post-AR-012 output contract |
| VR-012 | T4, out-of-ci | no | Quality-knee study — TPI/FPI vs sharpness and vs pose, as VR-005 did … |
| VR-013 | T4, out-of-ci | yes | Cross-source identification probe — gallery from one recording, probe… |
| VR-015 | out-of-ci | yes | Per-node cost and bottleneck attribution for a run — where the time a… |
Tagged but unexecuted: AR-027, VR-001, VR-002, VR-003, VR-004, VR-005, VR-010, VR-013, VR-015 — a test exists and is tagged, but this CI host cannot run it. Report those runs separately.
Orphan tags
A tag naming an ID requirements.md does not define. This is what renumbering produces, and what a typo produces.
None.
Requirements tracing up to nothing
A register row whose Traces to cell names no parent. Work serving no stated goal is how scope creeps in, and it is invisible unless something looks.
None.
Recorded exceptions
Deliberate, documented departures from an invariant (EXCEPTION: XX-nnn <reason>). Reported separately and never counted as coverage — an exception is a decision to be reviewed, not evidence a requirement is met.
None.
Register
| ID | Status | Tier | Traces to | Trace state | Tagged in | Requirement |
|---|---|---|---|---|---|---|
| AR-001 | Done | T3 | SR-002 | covered | src/nodes/face_detector_node.hpp |
Detect faces in sampled frames; emit bbox, confidence, 5-point landma… |
| AR-002 | Done — `FaceDet… | T2 | SR-002 | covered | src/nodes/face_detector_node.hpp, tests/test_face_detector_node.cpp, tests/test_replay_fixtures.cpp |
Minimum face size 40×40 px (VR-013 measured end to end; VR-005's … |
| AR-003 | Done — `max_fac… | T1, T2, T4 | SR-002 | covered | src/config.hpp, src/nodes/face_detector_node.hpp, src/nodes/identity_matcher_node.hpp |
No fixed per-frame face cap — crowd scenes must not lose background c… |
| AR-004 | Mostly — node o… | T1, T4 | SR-002 | covered | src/benchmark.hpp, src/main.cpp, src/nodes/identity_matcher_node.hpp, tests/test_replay_fixtures.cpp |
Backpressure: unbounded faces/frame absorbed by slowing, never by dro… |
| AR-005 | Done — `umeyama… | T1, T3 | SR-002 | covered | src/face_utils.hpp, src/nodes/face_aligner_node.hpp, tests/test_face_utils.cpp |
Align to 112×112 via ArcFace 5-point similarity transform, fitted by … |
| AR-006 | Done | T3 | SR-002 | covered | src/nodes/embedder_node.hpp |
512-d L2-normalised embeddings, batched |
| AR-007 | Done — `track_a… | T2 | SR-002 | covered | src/config.hpp, src/main.cpp, src/nodes/face_tracker_node.hpp, tests/test_face_tracker.cpp |
Associate detections by IoU + embedding, with frame-dependent wei… |
| AR-008 | Done — one pool… | T2 | SR-002 | covered | src/config.hpp, src/main.cpp, src/nodes/face_tracker_node.hpp, tests/test_face_tracker.cpp |
One track pool keyed on last_seen; no separate revival path |
| AR-009 | Done | T2 | SR-002 | covered | src/nodes/camera_position_change_detector_node.hpp |
Camera-cut detection (histogram) as an association hint |
| AR-010 | Done — decode b… | T2 | SR-002 | covered | src/main.cpp, src/nodes/scene_boundary_annotator_node.hpp, src/nodes/scene_detector_node.hpp, src/scene_boundaries.hpp |
Scene-boundary detection (TransNetV2) as an association hint |
| AR-011 | Done — both vio… | T1, T2 | SR-002 | covered | src/config.hpp, src/nodes/scene_detector_node.hpp, tests/test_scene_detector_node.cpp |
Every model is fed the input it was trained for — cost reduced by… |
| AR-012 | Done — `src/tra… | T2 | SR-002 | covered | src/main.cpp, src/nodes/identity_matcher_node.hpp, src/nodes/result_sink_node.hpp, src/track_registry.hpp, tests/test_replay_fixtures.cpp, tests/test_track_registry.cpp |
Presence follows track extent, not per-frame recognition |
| AR-013 | Done — `last_se… | T2 | SR-002 | covered | src/track_registry.hpp, tests/test_replay_fixtures.cpp, tests/test_track_registry.cpp |
last_seen optional state machine; window ends at last sighting, nev… |
| AR-014 | Done — swap clo… | T2 | SR-002 | covered | src/track_registry.hpp, tests/test_track_registry.cpp |
Belief swap A→B terminates the track and starts a new one |
| AR-015 | Done — reverse … | T2 | SR-002 | covered | src/track_registry.hpp, tests/test_track_registry.cpp |
Two live tracks owned by one actor ⇒ treat as a detected cut, re-asso… |
| AR-016 | Done — `flush()… | T2 | SR-002 | covered | src/main.cpp, src/nodes/result_sink_node.hpp, src/track_registry.hpp, tests/test_track_registry.cpp |
All tracks closed at EOF — a film ends with faces on screen |
| AR-017 | Done — `DeadTra… | T1, T2 | SR-002 | covered | src/nodes/result_sink_node.hpp, src/track_registry.hpp, tests/test_track_registry.cpp |
Every presence claim carries its belief and identification route |
| AR-018 | Done — banded a… | T1, T2 | SR-005 | covered | src/config.hpp, src/gallery/track_gallery.hpp, src/nodes/identity_matcher_node.hpp, tests/test_track_gallery.cpp |
Per-subject embedding store with banded admission (novel enough, safe… |
| AR-019 | Done — all thre… | T2 | SR-005 | covered | src/gallery/track_gallery.hpp, src/nodes/identity_matcher_node.hpp, tests/test_track_gallery.cpp |
Per-film gallery annex from owned tracks; acquires the non-frontal vi… |
| AR-020 | Planned | T2 | SR-005 | untagged | - | Deferred re-identification of unknown tracks against the final expand… |
| AR-021 | Planned | T2 | SR-005 | untagged | - | Cluster unknown tracks into one entity per person, under temporal can… |
| AR-022 | Planned | T1, T2 | §4 | untagged | - | Capture still-unidentified tracks: embeddings, metadata, **context cr… |
| AR-023 | Done | T1 | SR-002 | covered | src/gallery/gallery_calibration.hpp, src/nodes/identity_matcher_node.hpp, tests/test_calibration.cpp |
Fit sigmoid calibration from intra/inter similarity distributions |
| AR-024 | Done — associat… | T1, static | SR-002 | covered | src/config.hpp, src/evidence_discount.hpp, src/gallery/gallery_calibration.hpp, src/gallery/track_gallery.hpp, src/main.cpp, src/nodes/face_tracker_node.hpp, src/nodes/identity_matcher_node.hpp, tests/test_track_gallery.cpp |
Always the calibrated probability, never a raw cosine — exception… |
| AR-025 | Done — log-odds… | T1 | SR-002 | covered | src/evidence_discount.hpp, src/nodes/identity_matcher_node.hpp |
Per-track Bayesian accumulation in log-odds, with correlated-observat… |
| AR-026 | In Progress — t… | T1, T4 | SR-001 | covered | src/backends/gemm_backend.cpp, src/gallery/track_gallery.hpp, src/inference/similarity.hpp, src/nodes/identity_matcher_node.hpp, tests/test_similarity.cpp, tests/test_track_gallery.cpp |
All similarity computed as GEMM, including annex and deferred pass |
| AR-027 | Planned | T4 | SR-001 | tagged, unexecuted | src/backends/gemm_backend.cpp |
Throughput acceptable for arbitrary gallery size |
| AR-028 | Done — filled i… | T2 | SR-002 | covered | scripts/optimizer/replay.py, src/nodes/embedding_dump_node.hpp, src/nodes/face_aligner_node.hpp, src/types.hpp, tests/test_embedding_dump.cpp, tests/test_face_utils.cpp |
Embedding input quality assessed and carried — every face scored … |
| AR-029 | Done — `crop_sh… | T1 | SR-002 | covered | src/face_utils.hpp, src/nodes/face_aligner_node.hpp, tests/test_face_utils.cpp |
Sharpness measure on the aligned crop (scale-normalised, so it ca… |
| AR-030 | In Progress — m… | T1 | SR-002 | covered | src/face_utils.hpp, src/nodes/face_aligner_node.hpp, tests/test_face_utils.cpp |
Visibility measure from the AR-001 5-point landmarks — extreme pose o… |
| DP-001 | Done | T1, manual | PR-004 | covered | src/main.cpp |
One analysis core; modes are front-ends and must not fork pipeline lo… |
| DP-002 | Done | T1, manual | PR-004 | covered | src/main.cpp |
Batch CLI over one title |
| DP-003 | Planned | T1, manual | PR-004 | untagged | - | On-demand resident service with bounded, observable queue |
| DP-004 | Planned | T1, manual | PR-004 | untagged | - | Opportunistic/idle mode: external trigger, hard stop, implicit re-que… |
| DP-005 | Planned | T1, manual | PR-004 | untagged | - | Native installer, no Docker; Fedora + Arch |
| DP-006 | Planned | T1, manual | PR-003 | untagged | - | Background incremental gallery refresh on a timer |
| DP-007 | Planned | T1, manual | PR-004 | untagged | - | CI builder image, CPU-only, pinned by tag in the Gitea container regi… |
| DP-008 | Planned | T1, manual | PR-004 | untagged | - | Builder images + release jobs per backend (cpu / cuda / rocm); ship b… |
| IR-001 | Done | T1 | SR-003 | covered | src/nodes/result_sink_node.hpp |
Emit the JRay truth format as sibling .jray.json |
| IR-002 | Done — `schema_… | T1 | SR-003 | covered | src/config.hpp, src/main.cpp, src/nodes/result_sink_node.hpp |
Windows carry belief + route; extraction.* carries extinction_sec… |
| IR-003 | In Progress — s… | T1 | SR-003 | covered | src/main.cpp |
Output written after the deferred pass, not at EOF |
| IR-004 | Done — `src/aud… | T1 | SR-003 | covered | scripts/validation/test_audio_offset.py, src/audio_bindings.cpp, src/audio_signature.cpp, src/audio_signature.hpp, tests/test_audio_signature.cpp |
Compute the audio signature exactly per server spec §3 |
| IR-005 | Done — `tests/f… | T1 | SR-003 | covered | src/audio_bindings.cpp, src/audio_signature.cpp, src/audio_signature.hpp, tests/test_audio_signature.cpp |
Golden-vector fixture shared with the plugin repo to prove bit-exactn… |
| IR-006 | Done | T1, manual | SR-001 | covered | scripts/run_from_jellyfin.py |
Jellyfin round-trip: pull pending queue, push complete results only |
| IR-007 | Done | T1 | SR-003 | covered | src/audio_signature.cpp, src/audio_signature.hpp, tests/test_audio_signature.cpp |
Media < 120 s: emit no signature, apply no sync offset — identical ru… |
| IR-008 | Done | T1 | SR-003 | covered | src/audio_signature.cpp, src/audio_signature.hpp, tests/test_audio_signature.cpp |
Emit and honour the signature's own v1: version prefix |
| GR-001 | Done | T1, T3 | SR-001, SR-005 | covered | scripts/make_jellyfin_gallery.py |
Build gallery from Jellyfin library cast, TMDB profile fallback |
| GR-002 | Done | T1, T3 | PR-003 | covered | scripts/make_jellyfin_gallery.py |
Incremental --merge refresh without re-embedding known actors |
| GR-003 | Done — `gallery… | T1, T3 | SR-001 | covered | src/build_gallery.cpp, src/gallery/gallery_calibration.hpp, src/gallery/gallery_report.hpp, tests/test_calibration.cpp |
Report coverage: zero-image actors, under-referenced actors, dedup, c… |
| GR-004 | Done — basename… | T1, T3 | SR-001 | covered | scripts/filter_gallery.py, scripts/make_gallery.py, scripts/make_jellyfin_gallery.py, scripts/movienet_eval.py, scripts/optimizer/fetch_missing_actors.py, scripts/optimizer/optimize.py, scripts/optimizer/reembed_gallery.py, scripts/optimizer/replay.py, scripts/sae_embed_loader.py, scripts/sae_gallery.py, scripts/sae_stamp.py, scripts/stamp_gallery.py, src/config.hpp, src/gallery/embedder_stamp.cpp, src/gallery/embedder_stamp.hpp, src/gallery/gallery_builder.cpp, src/gallery/gallery_store.cpp, src/kpn_bindings.cpp, src/main.cpp, src/nodes/embedding_dump_node.hpp, src/scene_preview.cpp, src/types.hpp, tests/test_gallery_store.cpp |
Stamp embedder identity into the gallery; hard startup error on m… |
| GR-005 | Done | T1, T3 | SR-005 | covered | src/gallery/gallery_store.hpp |
Gallery data never leaves the instance |
| GR-006 | Planned | T1 | SR-005 | untagged | - | Provenance tiers: baked / harvested / confirmed, distinguishable per … |
| GR-007 | Planned | T1 | SR-005 | untagged | - | Persist harvested embeddings flagged and reviewable, never silent… |
| GR-008 | Planned | T1 | SR-005 | untagged | - | Flag distributional outliers among an actor's references (poisoning g… |
| GR-009 | TBD | T1 | §4 | untagged | - | Human-confirmed associations persist and improve future extractions |
| VR-001 | Done | out-of-ci | PR-002 | tagged, unexecuted | src/nodes/embedding_dump_node.hpp, tests/test_embedding_dump.cpp, tests/test_replay_fixtures.cpp |
HDF5 post-inference dump at the embedded-frame boundary |
| VR-002 | Done — replay d… | out-of-ci | PR-002 | tagged, unexecuted | scripts/optimizer/replay.py, tests/test_replay_fixtures.cpp |
Replay drives the real KPN nodes, not a reimplementation |
| VR-003 | Done | out-of-ci | PR-002 | tagged, unexecuted | scripts/optimizer/second_score.py |
Scoring: micro-F1 against X-Ray, precision/recall logged at every eva… |
| VR-004 | Done | out-of-ci | PR-002 | tagged, unexecuted | scripts/validation/ground_truth.py |
Reproducible validation corpus with ground truth |
| VR-005 | Done — knee at … | out-of-ci | PR-002 | tagged, unexecuted | scripts/validation/min_face_size.py |
Minimum face size study — TPI/FPI vs probe size, gallery held at nati… |
| VR-006 | **Planned, now unbl… | out-of-ci | PR-002 | untagged | - | Re-tune scene_threshold once native-rate decode lands |
| VR-007 | Planned | out-of-ci | PR-002 | untagged | - | Expansion band, clustering threshold, and deferred-pass ablation |
| VR-008 | Planned | out-of-ci | PR-002 | untagged | - | Gallery scaling benchmark — throughput vs gallery size |
| VR-009 | Planned | T1, out-of-ci | PR-002 | untagged | - | Verify accumulated posteriors are calibrated against held-out tracks |
| VR-010 | Planned | out-of-ci | PR-002 | tagged, unexecuted | src/nodes/embedding_dump_node.hpp |
Dump provenance attributes — embedder model, detector settings, `dens… |
| VR-011 | Planned | out-of-ci | PR-002 | untagged | - | Rewrite the replay harness for the post-AR-012 output contract |
| VR-012 | Planned | T4, out-of-ci | PR-002 | untagged | - | Quality-knee study — TPI/FPI vs sharpness and vs pose, as VR-005 did … |
| VR-013 | In Progress — h… | T4, out-of-ci | PR-002 | tagged, unexecuted | experiments/xsource/resolution_sweep.py, experiments/xsource/verify_labels.py |
Cross-source identification probe — gallery from one recording, probe… |
| VR-014 | Done — 40 rando… | T2, out-of-ci | PR-002 | covered | scripts/validation/test_audio_offset.py |
Audio-signature offset recovery on real content — a known trim re… |
| VR-015 | Done — `--bench… | out-of-ci | PR-004 | tagged, unexecuted | src/backends/trt_backend.cpp, src/benchmark.hpp, src/config.hpp, src/main.cpp, tests/test_benchmark.cpp |
Per-node cost and bottleneck attribution for a run — where the time a… |
Detailed mapping
AR-001
Locations: 1
src/nodes/face_detector_node.hpp:2—Unknown
AR-002
Locations: 3
src/nodes/face_detector_node.hpp:26—explicit FaceDetectorFunc(const Config& cfg)tests/test_face_detector_node.cpp:3—Unknowntests/test_replay_fixtures.cpp:3—Unknown
AR-003
Locations: 3
src/config.hpp:52—Unknownsrc/nodes/face_detector_node.hpp:64—private:src/nodes/identity_matcher_node.hpp:173—std::vector<float> host_query(static_cast<size_t>(kMaxFaces) * 512);
AR-004
Locations: 9
src/benchmark.hpp:176—Unknownsrc/benchmark.hpp:472—void print(std::ostream& os, double film_sec) constsrc/benchmark.hpp:522—else if (c.in_fill_pct > 50.0)src/main.cpp:97—static constexpr std::size_t kSceneJoinDepth = 256;src/main.cpp:109—static std::shared_ptr<SceneBoundaries> scene_stats;src/main.cpp:380—Unknownsrc/main.cpp:423—std::ofstream bf(cfg.benchmark_path);src/nodes/identity_matcher_node.hpp:173—std::vector<float> host_query(static_cast<size_t>(kMaxFaces) * 512);tests/test_replay_fixtures.cpp:3—Unknown
AR-005
Locations: 3
src/face_utils.hpp:2—Unknownsrc/nodes/face_aligner_node.hpp:8—Unknowntests/test_face_utils.cpp:1—Unknown
AR-006
Locations: 1
src/nodes/embedder_node.hpp:21—struct EmbedderFunc
AR-007
Locations: 4
src/config.hpp:127—Unknownsrc/main.cpp:255—reg_cfg, EvidenceDiscounter(same_person));src/nodes/face_tracker_node.hpp:2—Unknowntests/test_face_tracker.cpp:1—Unknown
AR-008
Locations: 4
src/config.hpp:127—Unknownsrc/main.cpp:255—reg_cfg, EvidenceDiscounter(same_person));src/nodes/face_tracker_node.hpp:2—Unknowntests/test_face_tracker.cpp:1—Unknown
AR-009
Locations: 1
src/nodes/camera_position_change_detector_node.hpp:30—struct CameraPositionChangeDetectorFunc
AR-010
Locations: 9
src/main.cpp:97—static constexpr std::size_t kSceneJoinDepth = 256;src/main.cpp:433—Unknownsrc/main.cpp:503—return run_net(std::move(net));src/main.cpp:535—Unknownsrc/nodes/scene_boundary_annotator_node.hpp:2—Unknownsrc/nodes/scene_detector_node.hpp:36—static constexpr std::string_view label() { return "scene_detector"; }src/nodes/scene_detector_node.hpp:147—void flush_remaining()src/nodes/scene_detector_node.hpp:181—void write_output()src/scene_boundaries.hpp:2—Unknown
AR-011
Locations: 4
src/config.hpp:105—Unknownsrc/nodes/scene_detector_node.hpp:70—void operator()(Frame f)src/nodes/scene_detector_node.hpp:93—Unknowntests/test_scene_detector_node.cpp:4—Unknown
AR-012
Locations: 9
src/main.cpp:255—reg_cfg, EvidenceDiscounter(same_person));src/main.cpp:272—reg_cfg, EvidenceDiscounter(same_person));src/nodes/identity_matcher_node.hpp:132—const GalleryCalibration& calibration() const { return cal_; }src/nodes/identity_matcher_node.hpp:280—Unknownsrc/nodes/result_sink_node.hpp:49—static constexpr std::string_view label() { return "result_sink"; }src/nodes/result_sink_node.hpp:161—struct ActorMeta { std::string name, imdb_id, tmdb_id, jellyfin_id; };src/track_registry.hpp:2—Unknowntests/test_replay_fixtures.cpp:3—Unknowntests/test_track_registry.cpp:3—Unknown
AR-013
Locations: 3
src/track_registry.hpp:2—Unknowntests/test_replay_fixtures.cpp:3—Unknowntests/test_track_registry.cpp:3—Unknown
AR-014
Locations: 2
src/track_registry.hpp:2—Unknowntests/test_track_registry.cpp:3—Unknown
AR-015
Locations: 2
src/track_registry.hpp:2—Unknowntests/test_track_registry.cpp:3—Unknown
AR-016
Locations: 4
src/main.cpp:272—reg_cfg, EvidenceDiscounter(same_person));src/nodes/result_sink_node.hpp:63—void set_pre_write_hook(std::function<void(double)> fn) { pre_write_ = std::move(fn); }src/track_registry.hpp:2—Unknowntests/test_track_registry.cpp:3—Unknown
AR-017
Locations: 3
src/nodes/result_sink_node.hpp:49—static constexpr std::string_view label() { return "result_sink"; }src/track_registry.hpp:2—Unknowntests/test_track_registry.cpp:3—Unknown
AR-018
Locations: 5
src/config.hpp:171—Unknownsrc/gallery/track_gallery.hpp:196—struct TrackStatesrc/gallery/track_gallery.hpp:309—static int plurality_actor(const TrackState& ts)src/nodes/identity_matcher_node.hpp:117—std::vector<float> host_gallery(static_cast<size_t>(n_gallery_) * 512);tests/test_track_gallery.cpp:1—Unknown
AR-019
Locations: 4
src/gallery/track_gallery.hpp:155—void forget(int track_id) { tracks_.erase(track_id); }src/nodes/identity_matcher_node.hpp:154—MatchedSceneFrame operator()(TrackedSceneFrame tf)src/nodes/identity_matcher_node.hpp:293—Unknowntests/test_track_gallery.cpp:1—Unknown
AR-023
Locations: 4
src/gallery/gallery_calibration.hpp:2—Unknownsrc/gallery/gallery_calibration.hpp:53—float boundary_at(float p = 0.5f, float log_prior_odds = 0.f) constsrc/nodes/identity_matcher_node.hpp:124—const GalleryCalibration& calibration() const { return cal_; }tests/test_calibration.cpp:1—Unknown
AR-024
Locations: 12
src/config.hpp:127—Unknownsrc/config.hpp:171—Unknownsrc/evidence_discount.hpp:2—Unknownsrc/gallery/gallery_calibration.hpp:53—float boundary_at(float p = 0.5f, float log_prior_odds = 0.f) constsrc/gallery/track_gallery.hpp:165—void set_calibration(std::function<float(float)> c) { calibrate_ = std::move(c); }src/gallery/track_gallery.hpp:196—struct TrackStatesrc/gallery/track_gallery.hpp:309—static int plurality_actor(const TrackState& ts)src/main.cpp:255—reg_cfg, EvidenceDiscounter(same_person));src/nodes/face_tracker_node.hpp:2—Unknownsrc/nodes/identity_matcher_node.hpp:117—std::vector<float> host_gallery(static_cast<size_t>(n_gallery_) * 512);src/nodes/identity_matcher_node.hpp:124—const GalleryCalibration& calibration() const { return cal_; }tests/test_track_gallery.cpp:1—Unknown
AR-025
Locations: 3
src/evidence_discount.hpp:2—Unknownsrc/nodes/identity_matcher_node.hpp:132—const GalleryCalibration& calibration() const { return cal_; }src/nodes/identity_matcher_node.hpp:280—Unknown
AR-026
Locations: 17
src/backends/gemm_backend.cpp:44—constexpr int kDim = 512;src/backends/gemm_backend.cpp:80—int n_gallery() const override { return n_gallery_; }src/backends/gemm_backend.cpp:256—int n_gallery() const override { return n_gallery_; }src/gallery/track_gallery.hpp:49—struct TrackGallerysrc/gallery/track_gallery.hpp:84—bool enabled() const { return enabled_; }src/gallery/track_gallery.hpp:99—const float* annex_row(int i) constsrc/gallery/track_gallery.hpp:357—static constexpr int kEmbDim = 512;src/inference/similarity.hpp:19—struct ISimilarityEnginesrc/inference/similarity.hpp:39—virtual int n_gallery() const = 0;src/nodes/identity_matcher_node.hpp:43—struct IdentityMatcherFuncsrc/nodes/identity_matcher_node.hpp:193—std::vector<float> host_query(static_cast<size_t>(kMaxFaces) * 512);src/nodes/identity_matcher_node.hpp:316—private:tests/test_similarity.cpp:1—Unknowntests/test_similarity.cpp:85—Unknowntests/test_track_gallery.cpp:1—Unknowntests/test_track_gallery.cpp:48—Embedding annex_view(const TrackGallery& tg, int row)tests/test_track_gallery.cpp:341—TrackGallery tg(expand_cfg());
AR-027
Locations: 1
src/backends/gemm_backend.cpp:44—constexpr int kDim = 512;
AR-028
Locations: 8
src/nodes/embedding_dump_node.hpp:2—Unknownsrc/nodes/embedding_dump_node.hpp:181—Unknownsrc/nodes/embedding_dump_node.hpp:296—Unknownsrc/nodes/face_aligner_node.hpp:8—Unknownsrc/types.hpp:62—struct DetectedFacetests/test_embedding_dump.cpp:1—Unknowntests/test_face_utils.cpp:1—Unknownscripts/optimizer/replay.py:66—for i in range(len(ts)):
AR-029
Locations: 4
src/face_utils.hpp:2—Unknownsrc/face_utils.hpp:147—Unknownsrc/nodes/face_aligner_node.hpp:8—Unknowntests/test_face_utils.cpp:1—Unknown
AR-030
Locations: 3
src/face_utils.hpp:2—Unknownsrc/nodes/face_aligner_node.hpp:8—Unknowntests/test_face_utils.cpp:1—Unknown
DP-001
Locations: 1
src/main.cpp:3—Unknown
DP-002
Locations: 1
src/main.cpp:3—Unknown
GR-001
Locations: 1
scripts/make_jellyfin_gallery.py:4—Unknown
GR-002
Locations: 1
scripts/make_jellyfin_gallery.py:4—Unknown
GR-003
Locations: 16
src/build_gallery.cpp:87—Unknownsrc/gallery/gallery_calibration.hpp:80—struct GalleryCalibrationStatssrc/gallery/gallery_calibration.hpp:145—std::vector<bool> actor_eligible(n_actors, false);src/gallery/gallery_calibration.hpp:294—Unknownsrc/gallery/gallery_report.hpp:2—Unknownsrc/gallery/gallery_report.hpp:52—struct GalleryBuildAuditsrc/gallery/gallery_report.hpp:73—struct GalleryReportsrc/gallery/gallery_report.hpp:154—inline GalleryReport build_gallery_report(const ActorGallery& gallery,src/gallery/gallery_report.hpp:295—inline nlohmann::json gallery_report_to_json(const GalleryReport& r)src/gallery/gallery_report.hpp:361—inline GalleryReport gallery_report_from_json(const nlohmann::json& j)src/gallery/gallery_report.hpp:446—inline void save_gallery_report(const std::string& path, const GalleryReport& r)src/gallery/gallery_report.hpp:454—inline GalleryReport load_gallery_report(const std::string& path)src/gallery/gallery_report.hpp:464—return gallery_report_from_json(j);tests/test_calibration.cpp:192—Embedding unit_axis(int slot)tests/test_calibration.cpp:222—Unknowntests/test_calibration.cpp:248—Unknown
GR-004
Locations: 44
src/config.hpp:62—Unknownsrc/gallery/embedder_stamp.cpp:1—Unknownsrc/gallery/embedder_stamp.hpp:2—Unknownsrc/gallery/gallery_builder.cpp:45—ActorGallery build_gallery(const BuildConfig& cfg)src/gallery/gallery_store.cpp:82—H5::StrType str(H5::PredType::C_S1, H5T_VARIABLE);src/gallery/gallery_store.cpp:167—H5::DataSpace scalar(H5S_SCALAR);src/gallery/gallery_store.cpp:219—Unknownsrc/kpn_bindings.cpp:186—Unknownsrc/kpn_bindings.cpp:236—Unknownsrc/main.cpp:230—Unknownsrc/nodes/embedding_dump_node.hpp:127—static constexpr std::string_view label() { return "embedding_dump"; }src/nodes/embedding_dump_node.hpp:257—H5::H5File file(path_, H5F_ACC_TRUNC);src/scene_preview.cpp:133—int main(int argc, char** argv)src/types.hpp:173—struct Actortests/test_gallery_store.cpp:182—TempFile tf("gallery_stamped.h5");tests/test_gallery_store.cpp:201—TempFile tf("gallery_stamped.h5");tests/test_gallery_store.cpp:219—TempFile tf("gallery_unstamped.h5");tests/test_gallery_store.cpp:240—TempFile tf("gallery_json_stamp.json");tests/test_gallery_store.cpp:252—Unknowntests/test_gallery_store.cpp:268—Unknowntests/test_gallery_store.cpp:300—Unknowntests/test_gallery_store.cpp:309—Unknowntests/test_gallery_store.cpp:333—Unknowntests/test_gallery_store.cpp:348—Unknowntests/test_gallery_store.cpp:367—Unknowntests/test_gallery_store.cpp:384—TempFile tf("fake_model.onnx");scripts/filter_gallery.py:80—if actor_jellyfin_id(a) in cast_ids]scripts/make_gallery.py:181—Unknownscripts/make_jellyfin_gallery.py:448—Unknownscripts/make_jellyfin_gallery.py:456—Unknownscripts/movienet_eval.py:65—with open(args.gt) as f:scripts/optimizer/fetch_missing_actors.py:62—def fetch(missing_path, out_path, token, build_dir, models_dir, arcface,scripts/optimizer/fetch_missing_actors.py:109—def merge(base_path, add_path, out_path):scripts/optimizer/fetch_missing_actors.py:124—def merge(base_path, add_path, out_path):scripts/optimizer/optimize.py:186—Unknownscripts/optimizer/optimize.py:202—if not Path(f["dump"]).exists():scripts/optimizer/reembed_gallery.py:62—for i, a in enumerate(ref["actors"], 1):scripts/optimizer/replay.py:125—Unknownscripts/optimizer/replay.py:265—Unknownscripts/sae_embed_loader.py:23—def resolve_arcface(models_dir: str, arcface: str \| None = None) -> str:scripts/sae_gallery.py:171—if not _stamp_empty(embedder):scripts/sae_gallery.py:200—for a in range(len(offset)):scripts/sae_stamp.py:3—Unknownscripts/stamp_gallery.py:4—Unknown
GR-005
Locations: 1
src/gallery/gallery_store.hpp:15—Unknown
IR-001
Locations: 1
src/nodes/result_sink_node.hpp:2—Unknown
IR-002
Locations: 5
src/config.hpp:20—struct Configsrc/main.cpp:272—reg_cfg, EvidenceDiscounter(same_person));src/nodes/result_sink_node.hpp:49—static constexpr std::string_view label() { return "result_sink"; }src/nodes/result_sink_node.hpp:122—void write_output()src/nodes/result_sink_node.hpp:161—struct ActorMeta { std::string name, imdb_id, tmdb_id, jellyfin_id; };
IR-003
Locations: 1
src/main.cpp:272—reg_cfg, EvidenceDiscounter(same_person));
IR-004
Locations: 18
src/audio_bindings.cpp:3—Unknownsrc/audio_signature.cpp:3—Unknownsrc/audio_signature.cpp:265—std::vector<std::uint8_t> pack_frames(const std::vector<float>& mono)src/audio_signature.cpp:320—std::optional<std::string> signature_from_mono(const std::vector<float>& mono)src/audio_signature.cpp:327—std::optional<std::vector<float>> decode_centre_window(const std::string& path)src/audio_signature.cpp:421—std::optional<std::string> compute_signature(const std::string& path)src/audio_signature.hpp:4—Unknowntests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:129—Unknowntests/test_audio_signature.cpp:151—Unknowntests/test_audio_signature.cpp:167—Unknowntests/test_audio_signature.cpp:236—Unknowntests/test_audio_signature.cpp:263—TempWav w("centred300");tests/test_audio_signature.cpp:301—Unknowntests/test_audio_signature.cpp:314—kNumBands * std::log10(1000.0 / kBandLoHz) / std::log10(kBandHiHz / kBandLoHz)));tests/test_audio_signature.cpp:328—std::vector<float> a(kWindowSamples / 50);tests/test_audio_signature.cpp:344—return base64_encode(reinterpret_cast<const std::uint8_t*>(s.data()), s.size());scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
IR-005
Locations: 6
src/audio_bindings.cpp:3—Unknownsrc/audio_signature.cpp:421—std::optional<std::string> compute_signature(const std::string& path)src/audio_signature.hpp:4—Unknowntests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:129—Unknowntests/test_audio_signature.cpp:138—Unknown
IR-006
Locations: 1
scripts/run_from_jellyfin.py:4—Unknown
IR-007
Locations: 8
src/audio_signature.cpp:3—Unknownsrc/audio_signature.cpp:327—std::optional<std::vector<float>> decode_centre_window(const std::string& path)src/audio_signature.cpp:421—std::optional<std::string> compute_signature(const std::string& path)src/audio_signature.hpp:4—Unknowntests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:201—TempWav w("short30");tests/test_audio_signature.cpp:219—TempWav w("exact120");tests/test_audio_signature.cpp:229—TempWav w("exact120");
IR-008
Locations: 7
src/audio_signature.cpp:3—Unknownsrc/audio_signature.cpp:320—std::optional<std::string> signature_from_mono(const std::vector<float>& mono)src/audio_signature.cpp:421—std::optional<std::string> compute_signature(const std::string& path)src/audio_signature.hpp:4—Unknowntests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:129—Unknowntests/test_audio_signature.cpp:167—Unknown
IT-001
Locations: 1
tests/test_replay_fixtures.cpp:3—Unknown
PR-002
Locations: 10
src/nodes/embedding_dump_node.hpp:2—Unknownsrc/nodes/embedding_dump_node.hpp:18—Unknownsrc/nodes/embedding_dump_node.hpp:133—static constexpr std::string_view label() { return "embedding_dump"; }src/nodes/embedding_dump_node.hpp:159—void operator()(EmbeddedSceneFrame ef)src/nodes/embedding_dump_node.hpp:261—H5::H5File file(path_, H5F_ACC_TRUNC);scripts/optimizer/replay.py:5—Reads an embedding dump (scripts/optimizer/SCHEMA.md), feeds each frame as anscripts/optimizer/second_score.py:5—Unknownscripts/validation/ground_truth.py:24—Unknownexperiments/xsource/resolution_sweep.py:4—Unknownexperiments/xsource/verify_labels.py:4—Unknown
PR-004
Locations: 22
src/backends/trt_backend.cpp:49—throw CudaError(std::string(what) + ": " + cudaGetErrorString(e));src/benchmark.hpp:2—Unknownsrc/benchmark.hpp:86—namespace sae::benchsrc/benchmark.hpp:107—struct ChannelOccupancysrc/benchmark.hpp:141—struct NodeCostsrc/benchmark.hpp:176—Unknownsrc/benchmark.hpp:185—Unknownsrc/benchmark.hpp:267—inline std::string verdict(const std::vector<NodeCost>& costs)src/benchmark.hpp:315—class BenchmarkRecordersrc/benchmark.hpp:384—return attribute_cost(final_.nodes, channels(), final_.elapsed_s);src/benchmark.hpp:465—void print(std::ostream& os, double film_sec) constsrc/benchmark.hpp:472—void print(std::ostream& os, double film_sec) constsrc/benchmark.hpp:522—else if (c.in_fill_pct > 50.0)src/config.hpp:35—Unknownsrc/main.cpp:3—Unknownsrc/main.cpp:109—static std::shared_ptr<SceneBoundaries> scene_stats;src/main.cpp:203—int main(int argc, char** argv)src/main.cpp:280—Unknownsrc/main.cpp:354—std::lock_guard<std::mutex> lk(event_mtx);src/main.cpp:380—Unknownsrc/main.cpp:393—Unknowntests/test_benchmark.cpp:3—Unknown
SR-001
Locations: 79
src/backends/gemm_backend.cpp:44—constexpr int kDim = 512;src/backends/gemm_backend.cpp:80—int n_gallery() const override { return n_gallery_; }src/backends/gemm_backend.cpp:256—int n_gallery() const override { return n_gallery_; }src/build_gallery.cpp:87—Unknownsrc/config.hpp:62—Unknownsrc/gallery/embedder_stamp.cpp:1—Unknownsrc/gallery/embedder_stamp.hpp:2—Unknownsrc/gallery/gallery_builder.cpp:45—ActorGallery build_gallery(const BuildConfig& cfg)src/gallery/gallery_calibration.hpp:80—struct GalleryCalibrationStatssrc/gallery/gallery_calibration.hpp:145—std::vector<bool> actor_eligible(n_actors, false);src/gallery/gallery_calibration.hpp:294—Unknownsrc/gallery/gallery_report.hpp:2—Unknownsrc/gallery/gallery_report.hpp:52—struct GalleryBuildAuditsrc/gallery/gallery_report.hpp:73—struct GalleryReportsrc/gallery/gallery_report.hpp:154—inline GalleryReport build_gallery_report(const ActorGallery& gallery,src/gallery/gallery_report.hpp:295—inline nlohmann::json gallery_report_to_json(const GalleryReport& r)src/gallery/gallery_report.hpp:361—inline GalleryReport gallery_report_from_json(const nlohmann::json& j)src/gallery/gallery_report.hpp:446—inline void save_gallery_report(const std::string& path, const GalleryReport& r)src/gallery/gallery_report.hpp:454—inline GalleryReport load_gallery_report(const std::string& path)src/gallery/gallery_report.hpp:464—return gallery_report_from_json(j);src/gallery/gallery_store.cpp:82—H5::StrType str(H5::PredType::C_S1, H5T_VARIABLE);src/gallery/gallery_store.cpp:167—H5::DataSpace scalar(H5S_SCALAR);src/gallery/gallery_store.cpp:219—Unknownsrc/gallery/track_gallery.hpp:49—struct TrackGallerysrc/gallery/track_gallery.hpp:84—bool enabled() const { return enabled_; }src/gallery/track_gallery.hpp:99—const float* annex_row(int i) constsrc/gallery/track_gallery.hpp:357—static constexpr int kEmbDim = 512;src/inference/similarity.hpp:19—struct ISimilarityEnginesrc/inference/similarity.hpp:39—virtual int n_gallery() const = 0;src/kpn_bindings.cpp:186—Unknownsrc/kpn_bindings.cpp:236—Unknownsrc/main.cpp:230—Unknownsrc/nodes/embedding_dump_node.hpp:127—static constexpr std::string_view label() { return "embedding_dump"; }src/nodes/embedding_dump_node.hpp:257—H5::H5File file(path_, H5F_ACC_TRUNC);src/nodes/identity_matcher_node.hpp:43—struct IdentityMatcherFuncsrc/nodes/identity_matcher_node.hpp:193—std::vector<float> host_query(static_cast<size_t>(kMaxFaces) * 512);src/nodes/identity_matcher_node.hpp:316—private:src/scene_preview.cpp:133—int main(int argc, char** argv)src/types.hpp:173—struct Actortests/test_calibration.cpp:192—Embedding unit_axis(int slot)tests/test_calibration.cpp:222—Unknowntests/test_calibration.cpp:248—Unknowntests/test_gallery_store.cpp:182—TempFile tf("gallery_stamped.h5");tests/test_gallery_store.cpp:201—TempFile tf("gallery_stamped.h5");tests/test_gallery_store.cpp:219—TempFile tf("gallery_unstamped.h5");tests/test_gallery_store.cpp:240—TempFile tf("gallery_json_stamp.json");tests/test_gallery_store.cpp:252—Unknowntests/test_gallery_store.cpp:268—Unknowntests/test_gallery_store.cpp:300—Unknowntests/test_gallery_store.cpp:309—Unknowntests/test_gallery_store.cpp:333—Unknowntests/test_gallery_store.cpp:348—Unknowntests/test_gallery_store.cpp:367—Unknowntests/test_gallery_store.cpp:384—TempFile tf("fake_model.onnx");tests/test_similarity.cpp:1—Unknowntests/test_similarity.cpp:85—Unknowntests/test_track_gallery.cpp:1—Unknowntests/test_track_gallery.cpp:48—Embedding annex_view(const TrackGallery& tg, int row)tests/test_track_gallery.cpp:341—TrackGallery tg(expand_cfg());scripts/filter_gallery.py:80—if actor_jellyfin_id(a) in cast_ids]scripts/make_gallery.py:181—Unknownscripts/make_jellyfin_gallery.py:4—Unknownscripts/make_jellyfin_gallery.py:448—Unknownscripts/make_jellyfin_gallery.py:456—Unknownscripts/movienet_eval.py:65—with open(args.gt) as f:scripts/optimizer/fetch_missing_actors.py:62—def fetch(missing_path, out_path, token, build_dir, models_dir, arcface,scripts/optimizer/fetch_missing_actors.py:109—def merge(base_path, add_path, out_path):scripts/optimizer/fetch_missing_actors.py:124—def merge(base_path, add_path, out_path):scripts/optimizer/optimize.py:186—Unknownscripts/optimizer/optimize.py:202—if not Path(f["dump"]).exists():scripts/optimizer/reembed_gallery.py:62—for i, a in enumerate(ref["actors"], 1):scripts/optimizer/replay.py:125—Unknownscripts/optimizer/replay.py:265—Unknownscripts/run_from_jellyfin.py:4—Unknownscripts/sae_embed_loader.py:23—def resolve_arcface(models_dir: str, arcface: str \| None = None) -> str:scripts/sae_gallery.py:171—if not _stamp_empty(embedder):scripts/sae_gallery.py:200—for a in range(len(offset)):scripts/sae_stamp.py:3—Unknownscripts/stamp_gallery.py:4—Unknown
SR-002
Locations: 47
src/config.hpp:52—Unknownsrc/config.hpp:105—Unknownsrc/config.hpp:127—Unknownsrc/evidence_discount.hpp:2—Unknownsrc/face_utils.hpp:2—Unknownsrc/face_utils.hpp:147—Unknownsrc/gallery/gallery_calibration.hpp:2—Unknownsrc/gallery/gallery_calibration.hpp:53—float boundary_at(float p = 0.5f, float log_prior_odds = 0.f) constsrc/main.cpp:97—static constexpr std::size_t kSceneJoinDepth = 256;src/main.cpp:255—reg_cfg, EvidenceDiscounter(same_person));src/main.cpp:272—reg_cfg, EvidenceDiscounter(same_person));src/main.cpp:423—std::ofstream bf(cfg.benchmark_path);src/main.cpp:433—Unknownsrc/main.cpp:503—return run_net(std::move(net));src/main.cpp:535—Unknownsrc/nodes/camera_position_change_detector_node.hpp:30—struct CameraPositionChangeDetectorFuncsrc/nodes/embedder_node.hpp:21—struct EmbedderFuncsrc/nodes/embedding_dump_node.hpp:181—Unknownsrc/nodes/embedding_dump_node.hpp:296—Unknownsrc/nodes/face_aligner_node.hpp:8—Unknownsrc/nodes/face_detector_node.hpp:2—Unknownsrc/nodes/face_detector_node.hpp:26—explicit FaceDetectorFunc(const Config& cfg)src/nodes/face_detector_node.hpp:64—private:src/nodes/face_tracker_node.hpp:2—Unknownsrc/nodes/identity_matcher_node.hpp:124—const GalleryCalibration& calibration() const { return cal_; }src/nodes/identity_matcher_node.hpp:132—const GalleryCalibration& calibration() const { return cal_; }src/nodes/identity_matcher_node.hpp:173—std::vector<float> host_query(static_cast<size_t>(kMaxFaces) * 512);src/nodes/identity_matcher_node.hpp:280—Unknownsrc/nodes/result_sink_node.hpp:49—static constexpr std::string_view label() { return "result_sink"; }src/nodes/result_sink_node.hpp:63—void set_pre_write_hook(std::function<void(double)> fn) { pre_write_ = std::move(fn); }src/nodes/result_sink_node.hpp:161—struct ActorMeta { std::string name, imdb_id, tmdb_id, jellyfin_id; };src/nodes/scene_boundary_annotator_node.hpp:2—Unknownsrc/nodes/scene_detector_node.hpp:36—static constexpr std::string_view label() { return "scene_detector"; }src/nodes/scene_detector_node.hpp:70—void operator()(Frame f)src/nodes/scene_detector_node.hpp:93—Unknownsrc/nodes/scene_detector_node.hpp:147—void flush_remaining()src/nodes/scene_detector_node.hpp:181—void write_output()src/scene_boundaries.hpp:2—Unknownsrc/track_registry.hpp:2—Unknownsrc/types.hpp:62—struct DetectedFacetests/test_calibration.cpp:1—Unknowntests/test_embedding_dump.cpp:1—Unknowntests/test_face_detector_node.cpp:3—Unknowntests/test_face_tracker.cpp:1—Unknowntests/test_face_utils.cpp:1—Unknowntests/test_scene_detector_node.cpp:4—Unknownscripts/optimizer/replay.py:66—for i in range(len(ts)):
SR-003
Locations: 7
src/audio_bindings.cpp:3—Unknownsrc/audio_signature.cpp:3—Unknownsrc/audio_signature.hpp:4—Unknownsrc/config.hpp:20—struct Configsrc/nodes/result_sink_node.hpp:2—Unknownsrc/nodes/result_sink_node.hpp:49—static constexpr std::string_view label() { return "result_sink"; }src/nodes/result_sink_node.hpp:122—void write_output()
SR-005
Locations: 11
src/config.hpp:171—Unknownsrc/gallery/gallery_store.hpp:15—Unknownsrc/gallery/track_gallery.hpp:155—void forget(int track_id) { tracks_.erase(track_id); }src/gallery/track_gallery.hpp:165—void set_calibration(std::function<float(float)> c) { calibrate_ = std::move(c); }src/gallery/track_gallery.hpp:196—struct TrackStatesrc/gallery/track_gallery.hpp:309—static int plurality_actor(const TrackState& ts)src/nodes/identity_matcher_node.hpp:117—std::vector<float> host_gallery(static_cast<size_t>(n_gallery_) * 512);src/nodes/identity_matcher_node.hpp:154—MatchedSceneFrame operator()(TrackedSceneFrame tf)src/nodes/identity_matcher_node.hpp:293—Unknowntests/test_track_gallery.cpp:1—Unknownscripts/make_jellyfin_gallery.py:4—Unknown
UT-001
Locations: 1
tests/test_track_registry.cpp:3—Unknown
UT-002
Locations: 1
tests/test_face_detector_node.cpp:3—Unknown
UT-003
Locations: 1
tests/test_scene_detector_node.cpp:4—Unknown
UT-004
Locations: 2
tests/test_similarity.cpp:1—Unknowntests/test_similarity.cpp:85—Unknown
UT-005
Locations: 2
tests/test_track_gallery.cpp:1—Unknowntests/test_track_gallery.cpp:341—TrackGallery tg(expand_cfg());
UT-101
Locations: 5
tests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:129—Unknowntests/test_audio_signature.cpp:138—Unknowntests/test_audio_signature.cpp:151—Unknowntests/test_audio_signature.cpp:167—Unknown
UT-102
Locations: 5
tests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:201—TempWav w("short30");tests/test_audio_signature.cpp:219—TempWav w("exact120");tests/test_audio_signature.cpp:229—TempWav w("exact120");tests/test_audio_signature.cpp:236—Unknown
UT-103
Locations: 2
tests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:263—TempWav w("centred300");
UT-104
Locations: 5
tests/test_audio_signature.cpp:3—Unknowntests/test_audio_signature.cpp:301—Unknowntests/test_audio_signature.cpp:314—kNumBands * std::log10(1000.0 / kBandLoHz) / std::log10(kBandHiHz / kBandLoHz)));tests/test_audio_signature.cpp:328—std::vector<float> a(kWindowSamples / 50);tests/test_audio_signature.cpp:344—return base64_encode(reinterpret_cast<const std::uint8_t*>(s.data()), s.size());
UT-105
Locations: 1
scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
UT-106
Locations: 1
scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
UT-107
Locations: 1
scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
UT-108
Locations: 1
scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
UT-120
Locations: 1
tests/test_benchmark.cpp:3—Unknown
UT-121
Locations: 1
tests/test_benchmark.cpp:3—Unknown
UT-122
Locations: 1
tests/test_benchmark.cpp:3—Unknown
UT-123
Locations: 1
tests/test_benchmark.cpp:3—Unknown
UT-124
Locations: 1
tests/test_benchmark.cpp:3—Unknown
UT-130
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-131
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-132
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-133
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-134
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-135
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-136
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-137
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-138
Locations: 1
tests/test_face_utils.cpp:1—Unknown
UT-139
Locations: 1
tests/test_embedding_dump.cpp:1—Unknown
UT-140
Locations: 1
tests/test_embedding_dump.cpp:1—Unknown
UT-141
Locations: 1
tests/test_embedding_dump.cpp:1—Unknown
VR-001
Locations: 3
src/nodes/embedding_dump_node.hpp:2—Unknowntests/test_embedding_dump.cpp:1—Unknowntests/test_replay_fixtures.cpp:3—Unknown
VR-002
Locations: 2
tests/test_replay_fixtures.cpp:3—Unknownscripts/optimizer/replay.py:5—Reads an embedding dump (scripts/optimizer/SCHEMA.md), feeds each frame as an
VR-003
Locations: 1
scripts/optimizer/second_score.py:5—Unknown
VR-004
Locations: 1
scripts/validation/ground_truth.py:24—Unknown
VR-005
Locations: 1
scripts/validation/min_face_size.py:5—Unknown
VR-010
Locations: 5
src/nodes/embedding_dump_node.hpp:2—Unknownsrc/nodes/embedding_dump_node.hpp:18—Unknownsrc/nodes/embedding_dump_node.hpp:133—static constexpr std::string_view label() { return "embedding_dump"; }src/nodes/embedding_dump_node.hpp:159—void operator()(EmbeddedSceneFrame ef)src/nodes/embedding_dump_node.hpp:261—H5::H5File file(path_, H5F_ACC_TRUNC);
VR-013
Locations: 2
experiments/xsource/resolution_sweep.py:4—Unknownexperiments/xsource/verify_labels.py:4—Unknown
VR-014
Locations: 1
scripts/validation/test_audio_offset.py:5—The golden vector (IR-005) proves the *arithmetic* is identical in both
VR-015
Locations: 21
src/backends/trt_backend.cpp:49—throw CudaError(std::string(what) + ": " + cudaGetErrorString(e));src/benchmark.hpp:2—Unknownsrc/benchmark.hpp:86—namespace sae::benchsrc/benchmark.hpp:107—struct ChannelOccupancysrc/benchmark.hpp:141—struct NodeCostsrc/benchmark.hpp:176—Unknownsrc/benchmark.hpp:185—Unknownsrc/benchmark.hpp:267—inline std::string verdict(const std::vector<NodeCost>& costs)src/benchmark.hpp:315—class BenchmarkRecordersrc/benchmark.hpp:384—return attribute_cost(final_.nodes, channels(), final_.elapsed_s);src/benchmark.hpp:465—void print(std::ostream& os, double film_sec) constsrc/benchmark.hpp:472—void print(std::ostream& os, double film_sec) constsrc/benchmark.hpp:522—else if (c.in_fill_pct > 50.0)src/config.hpp:35—Unknownsrc/main.cpp:109—static std::shared_ptr<SceneBoundaries> scene_stats;src/main.cpp:203—int main(int argc, char** argv)src/main.cpp:280—Unknownsrc/main.cpp:354—std::lock_guard<std::mutex> lk(event_mtx);src/main.cpp:380—Unknownsrc/main.cpp:393—Unknowntests/test_benchmark.cpp:3—Unknown
Tag diagnostics
Groups mixing requirement types (pipe separates types):
src/benchmark.hpp:176— {'group': ['VR-015', 'AR-004']}src/benchmark.hpp:472— {'group': ['VR-015', 'AR-004']}src/benchmark.hpp:522— {'group': ['VR-015', 'AR-004']}src/main.cpp:109— {'group': ['VR-015', 'AR-004']}src/main.cpp:380— {'group': ['VR-015', 'AR-004']}