docs: audit findings, verification tiers, CI image, artifact storage
Corrections from the dump audit and the completed agent work: - AR-010 is not started, not in progress: is_scene_boundary has no producer anywhere. SceneDetectorFunc is a terminal sink writing scenes.json and never annotates the frame, so the field is permanently false and the dump column a constant 0. A replay test of the frame-dependent track_alpha would pass vacuously — the worst failure mode for a verification gate. - T1 (functor-level) becomes the primary verification tier, not T2. KPN node functors are plain callables constructed outside the network, so a node is tested by calling operator() with hand-built inputs. That removes four hazards at once: fixture provenance, replay-from-frame-0, cross-test state leakage, and replay-harness nondeterminism. It also means a dead upstream producer no longer blocks testing its consumer. - VR-010 (dump provenance) and VR-011 (replay harness rewrite) added. A dump made with LVFace is currently byte-indistinguishable from one made with w600k-R50 — the GR-004 problem again, in the dump. - Four requirements had no verification tier at all; the traceability gate found them. - DP-007: CI builder image, CPU-only, pinned by tag in the Gitea container registry. Corpus fixtures go to the package registry rather than LFS: LFS is pulled on clone and would tax every developer for data only CI reads. - IR-004/005/007/008 marked done; the v1 DSP parameters they had to pin are now normative in the server spec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> TRACES: AR-010, DP-007, IR-004, IR-005, IR-007, IR-008, VR-001, VR-010, VR-011 | SR-002, SR-003
This commit is contained in:
@@ -154,6 +154,26 @@ Two distinct signals, deliberately kept separate:
|
||||
- **`is_scene_boundary`** — opt-in (`--scene-detect`). TransNetV2 over a densely
|
||||
decoded, downscaled stream flags a *true shot/scene boundary*.
|
||||
|
||||
> **`is_scene_boundary` currently has no producer.** `grep -rn is_scene_boundary
|
||||
> src/` finds no assignment anywhere: `SceneDetectorFunc` is a *terminal sink*
|
||||
> (`main.cpp:298-300`, `kpn::out<>`) that writes `scenes.json` and never
|
||||
> annotates the `Frame` flowing to the face pipeline. The field is therefore
|
||||
> always `false`, and the dump column (`embedding_dump_node.hpp:38`) is a
|
||||
> constant 0. Compounding it, `main.cpp:280` returns from the
|
||||
> `--dump-embeddings` branch *before* the `scene_detect` branch at `:296`, so no
|
||||
> dump-producing path even instantiates the detector.
|
||||
>
|
||||
> This makes AR-010 **not implemented**, not "in progress" — and it means a T2
|
||||
> test of the frame-dependent `track_alpha` (AR-007) would **pass vacuously**,
|
||||
> which is the worst possible failure for a verification gate. The fix is in the
|
||||
> producer, not the schema: make `SceneDetectorFunc` a pass-through (or add a
|
||||
> boundary annotator before the decimator) and add the scene branch to
|
||||
> `dump_embeddings.cpp`. **No `schema_version` bump** — the column exists and
|
||||
> merely stops being constant.
|
||||
>
|
||||
> Fixtures generated before the fix must be marked in provenance, since `0` is
|
||||
> presently indistinguishable from "no boundary here".
|
||||
|
||||
Both feed AR-007 as **association hints**: they tell the tracker that spatial
|
||||
continuity is broken and that association should weight embedding over IoU.
|
||||
Neither ends a presence window (AR-012).
|
||||
@@ -770,6 +790,54 @@ prerequisite.
|
||||
|
||||
**Gap:** installer unbuilt.
|
||||
|
||||
## DP-007 — CI build image
|
||||
|
||||
CI runs on an Intel N100 with no discrete GPU, so the test build must configure
|
||||
**CPU-only** and must not require CUDA, TensorRT or ROCm:
|
||||
|
||||
```
|
||||
-DSAE_INFERENCE_BACKEND=ORT -DSAE_GEMM_BACKEND=CPU
|
||||
```
|
||||
|
||||
A prebuilt container image supplies the toolchain, published to the **Gitea
|
||||
container registry** and pinned by tag — matching the `jellytau-builder`
|
||||
precedent. Building dependencies per CI run is untenable on an N100, and OpenCV 5
|
||||
from source would dominate every run.
|
||||
|
||||
The same registry stores corpus dump fixtures as generic packages (see the
|
||||
fixtures table in `requirements.md`). Rebuild the image when its dependency set
|
||||
changes, not per run, and pin CI to a tag rather than `latest` so a rebuild
|
||||
cannot silently change what a green build meant.
|
||||
|
||||
**Required in the image:**
|
||||
|
||||
| Dependency | Why |
|
||||
|---|---|
|
||||
| CMake, C++ toolchain, pkg-config | Build |
|
||||
| **OpenCV 5** | `CMakeLists.txt:25` prefers 5, falls back to 4. The branch targets 5, so the image should carry it — it is not yet in most distro repos and building it per-run is prohibitive |
|
||||
| HDF5 (C++) | Galleries are HDF5-native; also the dump format |
|
||||
| FFmpeg dev libs — `libavformat`, `libavcodec`, `libavutil`, `libswscale`, **`libswresample`** | Decode. See the note below on swresample |
|
||||
| Python 3 + numpy, h5py, scipy | Python-side tests, replay, traceability tooling |
|
||||
| Catch2, nlohmann/json | **Vendored into the image, not fetched.** Both are `FetchContent`-ed today (`CMakeLists.txt:220`, `tests/CMakeLists.txt:8`), which makes every CI run depend on GitHub reachability |
|
||||
|
||||
**Deliberately excluded:** CUDA, TensorRT, ROCm — no GPU to use them. Also the
|
||||
ONNX Runtime *GPU* providers; only the CPU provider is relevant, and only for T3
|
||||
smoke tests.
|
||||
|
||||
**Models are not baked into the image.** The seven ONNX files total ~725 MB and
|
||||
live in Git LFS. T1/T2 tests are model-free by design
|
||||
(`tests/CMakeLists.txt:1-4`), so the default image needs none. T3 smoke tests
|
||||
require a model and should pull it via LFS in a separate job rather than
|
||||
inflating the image tenfold for a minority of tests.
|
||||
|
||||
**`libswresample` is a real gap, not a formality.** The current
|
||||
`pkg_check_modules` list (`CMakeLists.txt:200-203`) covers avformat, avcodec,
|
||||
avutil and swscale but **not** swresample — which IR-004 needs to downmix to mono
|
||||
and resample to 11025 Hz. It must be added alongside the audio-signature work.
|
||||
|
||||
**Gap:** entire requirement. The image does not exist, and no CI config is
|
||||
present in this repo.
|
||||
|
||||
## DP-006 — Gallery maintenance as a background concern
|
||||
|
||||
- Incremental gallery refresh runs on a timer (`gallery_scan_interval`, default
|
||||
|
||||
Reference in New Issue
Block a user