# v1.15.1: Release Build Fix

v1.15.0 was tagged but never shipped: its `Create Release Assets` run failed in
`deploy-android` before producing a single artifact. This release carries the
whole of [v1.15.0](v1.15.00.md) plus the fix for that failure — read those notes
for what actually changed in the app.

## Build

- Strips colon-named `.kotlin_module` entries out of R8's java-resource jar
  before the app bundle is written. AGP 9.4.0 refuses them:

  ```
  Execution failed for task ':amethyst:buildFdroidReleasePreBundle'
  > Entry name contains invalid characters: root/META-INF/zoomable-root:zoomable.kotlin_module
  ```

  A `.kotlin_module` is named after the Gradle project path that produced it,
  colons included, and 14 of the 98 modules merged into the app carry one —
  zoomable, Negentropy, vico, seven coil3 artifacts, and four of ours
  (`Amethyst:quartz`, `:commons`, `:quic`, `:nestsClient`). The entries are
  byte-identical under AGP 9.3.1, which writes the bundle without complaint, so
  9.4.0 added the rejection rather than the names.

  `packaging.resources.excludes` cannot remove them — with minification on, R8
  emits the java resources and `PerModuleBundleTask` hands `JarFlinger` its own
  predicate, so those filters are never consulted. Nothing reads a
  `.kotlin_module` out of an installed app either; the file exists for the
  Kotlin compiler to resolve top-level declarations across modules at compile
  time.
