From d08c937f3bef64a320ca0b1957ecf31098f42f7f Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Fri, 22 May 2026 21:41:37 -0400 Subject: [PATCH] fix(android): KDoc nested-comment trap from `/api/*` literal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kotlin (unlike Java) supports nested block comments. The doc-comment on LibraryApi contained the string `/api/*` and `/api/home`-style paths, which the lexer parsed as opening nested comments: /** * Retrofit interface for the server's native /api/* library surface. ← lexer: nested /* opens ... */ ← closes the nested one // outer comment now unclosed; "Unclosed comment" reported at EOF This compile error is what caused all the "ModuleProcessingStep was unable to process NetworkModule because LibraryApi could not be resolved" failures over the last four commits — KSP runs before compileDebugKotlin and reports the downstream symptom (unresolvable symbol) before the actual source-level error gets to print. Rewrote the doc-comment to use `/api/...` and to wrap concrete paths in backticks; no `/*` substring remains. The "repos construct their Retrofit interface from shared Retrofit" pattern from the previous commit stays; it's a sound pattern arrived at via the wrong reasoning, but defensible on its own merits (fewer Hilt bindings, locality of reference, easier test override). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../minstrel/api/endpoints/LibraryApi.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/api/endpoints/LibraryApi.kt b/android/app/src/main/java/com/fabledsword/minstrel/api/endpoints/LibraryApi.kt index 6d53c676..e870150a 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/api/endpoints/LibraryApi.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/api/endpoints/LibraryApi.kt @@ -8,20 +8,20 @@ import retrofit2.http.Path import retrofit2.http.Query /** - * Retrofit interface for the server's native /api/* library surface. + * Retrofit interface for the server's native `/api/...` library surface. * Mirrors `flutter_client/lib/api/endpoints/library.dart` 1:1. * * Notes on shapes: - * - GET /api/artists/{id} returns ArtistDetailWire (ArtistRef fields - * + embedded "albums" array) - * - GET /api/artists/{id}/tracks returns a bare JSON array, not an + * - `GET /api/artists/{id}` returns ArtistDetailWire (ArtistRef fields + * plus embedded "albums" array) + * - `GET /api/artists/{id}/tracks` returns a bare JSON array, not an * enveloped object — Retrofit's `List` return type * handles that. - * - GET /api/albums/{id} returns AlbumDetailWire (AlbumRef fields - * + embedded "tracks" array) - * - GET /api/library/shuffle returns a bare JSON array. + * - `GET /api/albums/{id}` returns AlbumDetailWire (AlbumRef fields + * plus embedded "tracks" array) + * - `GET /api/library/shuffle` returns a bare JSON array. * - * Home endpoints (/api/home, /api/home/index) live in a separate + * Home endpoints (`/api/home`, `/api/home/index`) live in a separate * `HomeApi` because they have their own wire types (HomePayload, * HomeIndex) that are larger and only used by the Home screen. */