diff --git a/cmd/server/tests/contract_pins_test.go b/cmd/server/tests/contract_pins_test.go index d9bf1449..4eefbead 100644 --- a/cmd/server/tests/contract_pins_test.go +++ b/cmd/server/tests/contract_pins_test.go @@ -656,6 +656,10 @@ func TestContractPin_SearchJSON(t *testing.T) { "kobo_content_id", "kobo_metadata", "tags_search", "contributors_search", "narrators", "file_sha256", "opf_identifier", "opf_uuid", "hash_confidence", "library_name", "library_type_name", + // H4: the unified row gained the two lagging columns (additive, + // EXPLAIN plan-identical) and the search endpoint serializes the + // row directly, so they emit here. + "abridged", "audio_metadata", } url := fmt.Sprintf("%s/api/media-items/search?q=%s&library_id=%s", setup.Server.URL, url.QueryEscape(fx.itemTitle), fx.libraryID) diff --git a/docs/contract_pins.md b/docs/contract_pins.md index 76872742..91b42199 100644 --- a/docs/contract_pins.md +++ b/docs/contract_pins.md @@ -87,3 +87,8 @@ cover_image_path, has_conflict, format_group, badge`. `last_modified_at` are now maintained. Note PUT unchanged on the wire (content+position) but routed through the service the same way. Response shapes unchanged (same row models — pins green). +- **H4 (unified row completion)** — `/api/media-items/search` rows[] + whitelisted ADDITIVE keys `abridged, audio_metadata`: the unified + search row gained the two columns it lagged (EXPLAIN plan-identical — + both ride the already-scanned media_items side), and the endpoint + serializes the row directly, so they emit. No key removed or renamed.