Fixes missing, duplicated, and mislabelled identifiers so follow-up tools (read_media, write_request_create, read_requests get) can be called from discover/search/recent results.
#6read_media details: unique identifiers; movie tmdb falls back to id when theMovieDbId is absent; belongsToCollection.id is not treated as the movie; v2 seriesId is no longer labelled tvmaze (that field only means TVMaze on v1 TVMaze-backed routes).
#2read_discover browse/collection members: when theMovieDbId is missing, id is labelled with the origin namespace (tmdb on v2) so items are usable for details/request.
#9read_search multi: mediaType is matched case-insensitively (Artist → artist + musicbrainz).
#11read_requests recent: target.id is requestId for every kind; a provider-shaped id on TV payloads is not the target (it goes in identifiers).
#6 landed before #2's id fallback so v1 TV results still emit tvdb/tvmaze and never grow a bogus tmdb label.
Tests
Unit tests in internal/tools/project_test.go; mock contract tests for each issue; live tests for TV browse identifiers and multi artist mapping (skip without OMBI_URL).
Fixes missing, duplicated, and mislabelled identifiers so follow-up tools (`read_media`, `write_request_create`, `read_requests get`) can be called from discover/search/recent results.
Closes #6, #2, #9, #11 (milestone M3 — Identity projection).
## Changes
- **#6** `read_media` details: unique identifiers; movie `tmdb` falls back to `id` when `theMovieDbId` is absent; `belongsToCollection.id` is not treated as the movie; v2 `seriesId` is no longer labelled `tvmaze` (that field only means TVMaze on v1 TVMaze-backed routes).
- **#2** `read_discover` browse/collection members: when `theMovieDbId` is missing, `id` is labelled with the origin namespace (`tmdb` on v2) so items are usable for details/request.
- **#9** `read_search` multi: `mediaType` is matched case-insensitively (`Artist` → `artist` + `musicbrainz`).
- **#11** `read_requests` recent: `target.id` is `requestId` for every kind; a provider-shaped `id` on TV payloads is not the target (it goes in `identifiers`).
`#6` landed before `#2`'s `id` fallback so v1 TV results still emit `tvdb`/`tvmaze` and never grow a bogus `tmdb` label.
## Tests
Unit tests in `internal/tools/project_test.go`; mock contract tests for each issue; live tests for TV browse identifiers and multi artist mapping (skip without `OMBI_URL`).
The schema-orig directory contained assessment, authentication, tool mapping, input schemas, and endpoint coverage documentation that has been superseded by the current implementation. These files were design artifacts from an earlier phase and are no longer needed.
Movie and TV details were dropping or duplicating identifiers (missing
tmdb, doubled imdb, collection id treated as the movie, v2 seriesId
labelled tvmaze). v2 browse and collection members only populate `id`,
so those lists arrived with identifiers: []. Multi-search emitted
media=unknown for capitalised Artist. Recent TV items put a provider id
in target.id, so follow-up get calls failed.
Label identifiers by origin route, fall back to `id` in that same
namespace, emit seriesId as tvmaze only on v1 TVMaze routes, map
mediaType case-insensitively, and prefer requestId for request targets.
Closes#6, #2, #9, #11
gronod
merged commit b6e1822291 into develop2026-09-19 09:39:20 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes missing, duplicated, and mislabelled identifiers so follow-up tools (
read_media,write_request_create,read_requests get) can be called from discover/search/recent results.Closes #6, #2, #9, #11 (milestone M3 — Identity projection).
Changes
read_mediadetails: unique identifiers; movietmdbfalls back toidwhentheMovieDbIdis absent;belongsToCollection.idis not treated as the movie; v2seriesIdis no longer labelledtvmaze(that field only means TVMaze on v1 TVMaze-backed routes).read_discoverbrowse/collection members: whentheMovieDbIdis missing,idis labelled with the origin namespace (tmdbon v2) so items are usable for details/request.read_searchmulti:mediaTypeis matched case-insensitively (Artist→artist+musicbrainz).read_requestsrecent:target.idisrequestIdfor every kind; a provider-shapedidon TV payloads is not the target (it goes inidentifiers).#6landed before#2'sidfallback so v1 TV results still emittvdb/tvmazeand never grow a bogustmdblabel.Tests
Unit tests in
internal/tools/project_test.go; mock contract tests for each issue; live tests for TV browse identifiers and multi artist mapping (skip withoutOMBI_URL).