fyyd: mark live API validation done
Hit all four api.fyyd.de endpoints directly; every field the FyydApi DTOs read matches (data envelope, podcast id/title, /podcast/episodes as one object with title+episodes[], episode id/title/enclosure/duration/ podcast_id). No DTO change needed. A manual audio + W-capture smoke test on the running server stays open. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3b81faeb9d
commit
0a0c35c531
|
|
@ -34,6 +34,7 @@ by dependency; each task names how it is verified.
|
||||||
`cargo fmt --check` all clean; check off `quality/fyyd-provider.md`.
|
`cargo fmt --check` all clean; check off `quality/fyyd-provider.md`.
|
||||||
- [x] **Docs**: architecture + quality + plan committed; user docs
|
- [x] **Docs**: architecture + quality + plan committed; user docs
|
||||||
(`docs/src/`, README provider list) updated.
|
(`docs/src/`, README provider list) updated.
|
||||||
- [ ] **Live validation** (deferred, needs network): confirm the real
|
- [x] **Live validation**: confirmed the real `api.fyyd.de` field shapes
|
||||||
`api.fyyd.de` field shapes against `fyyd/src/api.rs` DTOs — see the
|
against `fyyd/src/api.rs` DTOs (2026-07-23) — all four endpoints match,
|
||||||
open gate in `quality/fyyd-provider.md`.
|
no DTO change needed. A manual audio/`W`-capture smoke test on the
|
||||||
|
running server remains open in `quality/fyyd-provider.md`.
|
||||||
|
|
|
||||||
|
|
@ -988,11 +988,14 @@ Where the implementation shaped decisions beyond the plan:
|
||||||
timeout-bounded and every listing capped (`search_results`,
|
timeout-bounded and every listing capped (`search_results`,
|
||||||
`hot_count`, `episodes_per_podcast`).
|
`hot_count`, `episodes_per_podcast`).
|
||||||
|
|
||||||
Deferred: **live validation** against the real `api.fyyd.de` (field
|
**Live validation done (2026-07-23).** All four `api.fyyd.de` endpoints
|
||||||
names/envelope were taken from the current public docs, not exercised on
|
were hit directly and match the `FyydApi` DTOs exactly (the `data`
|
||||||
the network). Left as an open gate in `quality/fyyd-provider.md` and a
|
envelope; numeric podcast `id`+`title`; `/podcast/episodes` as a single
|
||||||
`- [ ]` in `plan/fyyd-provider.md`; if a field differs the fix is
|
object with `title`+`episodes[]`; episode `id`/`title`/`enclosure`/
|
||||||
confined to the `FyydApi` DTOs.
|
`duration`/`podcast_id`). No DTO change was needed. Remaining open: a
|
||||||
|
manual audio-playthrough + `W`-capture smoke test on the running server
|
||||||
|
(enclosures are plain media URLs, some via podtrac redirects, which both
|
||||||
|
the resolve path and the capture reqwest client follow).
|
||||||
|
|
||||||
Verification: `fyyd` 10 tests + `crabidy-server` 74 lib + 4 integration
|
Verification: `fyyd` 10 tests + `crabidy-server` 74 lib + 4 integration
|
||||||
green; clippy and rustfmt clean on both crates.
|
green; clippy and rustfmt clean on both crates.
|
||||||
|
|
|
||||||
|
|
@ -61,11 +61,17 @@ in `fyyd/src/lib.rs` (provider logic against a fake `Fyyd`) and
|
||||||
`get_lib_root` lists `fyyd` only when the client is mounted. No proto
|
`get_lib_root` lists `fyyd` only when the client is mounted. No proto
|
||||||
change and no new `ProviderCommand` were needed.
|
change and no new `ProviderCommand` were needed.
|
||||||
|
|
||||||
## Live validation (deferred, needs network)
|
## Live validation
|
||||||
|
|
||||||
- [ ] Against the real `api.fyyd.de`: a search returns podcasts, a podcast
|
- [x] Validated against the real `api.fyyd.de` on 2026-07-23. All four
|
||||||
lists episodes with non-empty `enclosure` URLs, and an enclosure plays
|
endpoints match the `fyyd/src/api.rs` DTOs exactly: responses are
|
||||||
through the audio player. If a field name differs from the documented
|
wrapped in `data`; a podcast carries numeric `id` + `title`;
|
||||||
shape, the fix is confined to `fyyd/src/api.rs` DTOs (design risk noted
|
`/podcast/episodes` returns a single object with `title` and an
|
||||||
in the architecture doc). This gate cannot run in the offline unit
|
`episodes` array; each episode carries `id` (int), `title`,
|
||||||
suite.
|
`enclosure` (a direct audio URL, e.g. an `.mp3`), `duration` (int
|
||||||
|
seconds), and `podcast_id` (int); `/episode?episode_id=` returns one
|
||||||
|
such object. No DTO change was needed.
|
||||||
|
- [ ] End-to-end audio playthrough of an enclosure and a `W` capture to
|
||||||
|
`/crabidy` still want a manual smoke test on the running server (the
|
||||||
|
resolve path and the capture reqwest client both follow the enclosure,
|
||||||
|
including podtrac/redirect URLs).
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue