diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts
index e185e97e..0b0cf2a7 100644
--- a/android/app/build.gradle.kts
+++ b/android/app/build.gradle.kts
@@ -1,9 +1,9 @@
plugins {
alias(libs.plugins.android.application)
// kotlin-android NOT applied: AGP 9 enables built-in Kotlin by default,
- // and KSP 2.3.x supports it (PR #2674, merged Oct 2025). serialization
- // + compose-compiler are language-level Kotlin compiler plugins and
- // still need explicit application.
+ // and KSP 2.3.x supports it. serialization + compose-compiler are
+ // language-level Kotlin compiler plugins and still need explicit
+ // application.
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.ksp)
@@ -31,14 +31,9 @@ android {
//
// versionCode is minutes since 2020-01-01 at BUILD time. It is the
// value the platform decides installs by, so it must be monotonic by
- // construction.
- //
- // This comment used to say versionCode was a commit count and that it
- // was "monotonic forever". It was neither — a commit count runs ahead
- // on `dev`, so a dev build outranked the `main` release meant to
- // replace it and Android refused the install as a downgrade. Worth
- // knowing the claim was here, stated as a reassurance, while the bug
- // it denied was live.
+ // construction. Not a commit count: that runs ahead on `dev`, so a dev
+ // build would outrank the `main` release meant to replace it and
+ // Android would refuse the install as a downgrade.
val versionNameOverride =
(project.findProperty("MINSTREL_VERSION_NAME") as String?)?.takeIf { it.isNotBlank() }
val versionCodeOverride =
@@ -73,9 +68,9 @@ android {
"proguard-rules.pro",
)
// Signed with the release key or not at all. Falling back to the
- // debug key made a missing secret into a published APK that no
- // install could ever update (family idea #5103, practice 2). An
- // unsigned build installs nowhere, so the gap shows at once.
+ // debug key would turn a missing secret into a published APK that no
+ // install could ever update. An unsigned build installs nowhere, so
+ // the gap shows at once.
signingConfig =
if (System.getenv("ANDROID_KEYSTORE_PATH").isNullOrEmpty()) {
null
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index a23ca32d..cd8f9563 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,7 +8,7 @@
-
@@ -84,11 +84,8 @@
-
+
` response path.
*
- * kxml2 is on the test classpath (Task 4), so
+ * kxml2 is on the test classpath, so
* `XmlPullParserFactory.newInstance()` resolves on the JVM.
*/
class SoapClientTest {
diff --git a/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt
index db08bd35..deeb9c10 100644
--- a/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt
+++ b/android/app/src/test/java/com/fabledsword/minstrel/player/ui/QueueDragMathTest.kt
@@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test
import kotlin.test.assertEquals
/**
- * The queue drag math (#2436). The delta cases mirror web's
+ * The queue drag math. The delta cases mirror web's
* queue-row-math.test.ts one for one, so a change to either client's
* rounding shows up as a disagreement here rather than as a drop that lands
* one row off on one platform only.
diff --git a/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt
index 318e7e05..ae19726f 100644
--- a/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt
+++ b/android/app/src/test/java/com/fabledsword/minstrel/playlists/data/PlaylistTrackAvailabilityTest.kt
@@ -9,7 +9,7 @@ import kotlin.test.assertTrue
/**
* A playlist row can outlive its audio two ways — the track was removed
* from the library, or the track is still there but its file is missing
- * (#2527). Both must be unplayable, and neither may be silently dropped
+ *. Both must be unplayable, and neither may be silently dropped
* from the list the user curated.
*/
class PlaylistTrackAvailabilityTest {
diff --git a/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt
index 6853887d..f47f0160 100644
--- a/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt
+++ b/android/app/src/test/java/com/fabledsword/minstrel/settings/data/NormalizationRepositoryTest.kt
@@ -17,7 +17,7 @@ import retrofit2.Retrofit
import java.io.IOException
/**
- * The normalization preference is written offline-first (rule 100): the
+ * The normalization preference is written offline-first: the
* device shows the change at once, and a change the server has not seen
* yet is never overwritten or reordered.
*/
diff --git a/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt
index 58c98cf6..733fc8e4 100644
--- a/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt
+++ b/android/app/src/test/java/com/fabledsword/minstrel/shared/UpdateVeilControllerTest.kt
@@ -30,7 +30,7 @@ private const val DRAIN_MS = 3_000L
/**
* The veil's job is to go up only when content actually changes, and then to
* stay up until the screen has stopped moving. Each test pins one of the ways
- * the original fixed-delay implementation got that wrong (issue #2327).
+ * a fixed-delay veil gets that wrong.
*
* The controller is built on `backgroundScope` throughout: its consumer
* loop runs forever, so hanging it off the test's own scope would stop
@@ -40,8 +40,7 @@ private const val DRAIN_MS = 3_000L
* `advanceTimeBy`: **`advanceUntilIdle()` is useless here.** It advances
* only while *foreground* work remains, and everything this controller
* does lives in `backgroundScope` — so it returns having run nothing, and
- * assertions land on a session that never started (CI run 3163 failed all
- * seven of these with "expected 3, actual 0" and friends). Drive the clock
+ * assertions land on a session that never started. Drive the clock
* deliberately instead; don't "simplify" these back to advanceUntilIdle.
*/
@OptIn(ExperimentalCoroutinesApi::class)
diff --git a/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt b/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt
index e061ba24..20ad44d3 100644
--- a/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt
+++ b/android/app/src/test/java/com/fabledsword/minstrel/theme/BundledFontsTest.kt
@@ -9,11 +9,11 @@ import kotlin.test.assertTrue
* Guards that the typefaces ship inside the APK instead of being fetched at
* runtime.
*
- * Until 2026-09-09 these were resolved through the Play Services font
- * provider. That needs a network the deployed app is not guaranteed, and a
- * provider that devices without Play Services do not have at all. Both
- * failures are silent — text just renders in the platform default, which
- * reads as a styling regression rather than a missing dependency.
+ * Resolving them through the Play Services font provider needs a network
+ * the deployed app is not guaranteed, and a provider that devices without
+ * Play Services do not have at all. Both failures are silent — text just
+ * renders in the platform default, which reads as a styling regression
+ * rather than a missing dependency.
*
* Expectations are read out of Typography.kt itself rather than hardcoded, so
* this cannot drift away from what the app actually declares: adding a face
diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml
index a551209c..1f6a799d 100644
--- a/android/gradle/libs.versions.toml
+++ b/android/gradle/libs.versions.toml
@@ -5,7 +5,7 @@
# - Kotlin 2.3.x: AGP 9's built-in Kotlin path; the older kotlin-android
# plugin can't cast AGP 9's ApplicationExtension to the removed
# BaseExtension, and KSP 1.x isn't compatible with built-in Kotlin
-# - KSP 2.3.x (PR #2674, merged Oct 2025): adds AGP 9 built-in Kotlin
+# - KSP 2.3.x: adds AGP 9 built-in Kotlin
# support, so we don't need the kotlin-android plugin at all
agp = "9.0.1"
kotlin = "2.3.21"