Typed result metadata

SearchResult and simple-provider source APIs remain unchanged. The optional SearchDetails response now carries ResultMetadata: labelled sections with multi-valued text, typed links/image references and recursive child categories. The representation has no manga-specific requirements and can support additional catalogues and custom HTTP mappings. Rebuild plugins together with the application; there is no cross-release ABI guarantee for the statically linked core.

Selecting a result fetches only that record's details when the provider supports it. Results and metadata are cached in the tab. A different selection is rendered immediately while the previous request completes; its completion cannot replace the new selection. The current selection's first details are then requested. Content continuation remains explicit, separate from hit pagination. Failed details can be retried; Retry-After is scoped to the original provider.

The detail tree supports keyboard navigation and expanding nested categories. Text is always plain; source links open only after HTTP(S), host and credential validation. Cover artwork is represented by an optional image link, opened only on explicit activation. There is no automatic third-party image download or active HTML rendering. Legacy additionalData maps and lists have a recursive escaped fallback. Untrusted nesting/collection bounds protect the UI (12 levels and 200 children per legacy container; structured rendering stops at depth 16 / 4,000 nodes). Synopses retain their complete supplied text.

Upstream mapping

The official MangaBaka OpenAPI schema describes SeriesV2 list/default records and SeriesV2Full. The lean search response includes descriptions, staff, publication, ratings, original language and the best per-language title. /v2/series/{id}?schema=full additionally supplies the complete title list, tags, links and related series. We use the latter only on selection.

MangaBaka tags provide name_path (for example Activities > Leisure > Travel), parent_id, is_genre, relevance and other attributes. The mapping constructs nested categories, preserving genres, paths and per-tag details. When a path is missing, it follows available parent IDs with depth/cycle guards. Orphaned and new tags remain visible under their own names. Metadata includes publishers, source IDs/ratings, release dates, content rating, formats and source links. Attribution to MangaBaka and underlying sources remains visible; upstream terms still apply.

The official MangaDex OpenAPI schema provides localized titles/descriptions, status, original language, year, demographic, tags and link references in manga attributes. Tags have content, format, genre and theme groups; new group names remain visible. Detail requests add includes[]=author, artist, and cover_art to resolve relationship names and cover references in the same request. Publication/publisher information and ratings unavailable from this endpoint are not fabricated. Known external source IDs are mapped to their respective catalogue links; unknown references remain readable text. No extra statistics or per-tag requests are needed.

Synthetic fixtures reflect these schemas and exercise non-English titles, complete synopses, taxonomy paths, missing parents, cycles, unknown groups, relationships, unsafe URLs and null/missing fields. UI tests cover lazy selection, caching, selection changes, nested legacy fields, plain-text safety and typed links.

Correctness review added a total 4000-item budget for each legacy nested value, in addition to depth/per-container limits. Scalar values are limited to 16 Ki characters with a visible marker. Provider metadata lists are limited to 512 entries before category construction; oversized root/attribute lists produce an attribution notice. This bounds parsing work before the GUI's existing row limit, including the quadratic sibling-category lookup. Full synopses stay in the separate description field. Adversarial nested-map and large-tag fixtures cover the limits, alongside the existing malformed taxonomy/cycle tests.