# Release builds are minified.
#
# When a rule is added here it must say what breaks without it — a proguard file
# of unexplained -keep lines is a file nobody can ever safely shrink again.

# ---------------------------------------------------------------------------
# PRODUCT_PLAN.md §45: "Disable verbose logging in release builds."
# ---------------------------------------------------------------------------
#
# `checkNoHealthLogging` in the root build.gradle.kts already fails the build on
# any logging call in a module that can see a cycle date, and that is the real
# protection because it stops the line being written at all.
#
# This is the second layer, and it exists for the two cases a source guard
# cannot reach:
#
#   - **A dependency logging on our behalf.** Room, WorkManager and the AndroidX
#     libraries log, and a stack trace or a query they print can carry a value
#     that came from a cycle record. The guard cannot see inside a library; R8
#     can remove the call sites.
#   - **A future module.** The guard reads a list of directories. Somebody adding
#     a module and forgetting to list it gets no warning, because absence of a
#     finding looks exactly like a clean result.
#
# `assumenosideeffects` lets R8 delete these calls entirely, arguments and all,
# rather than leaving a stripped string constant in the dex. It is safe here
# only because nothing in this app uses a Log return value — `Log.d` returns an
# int nobody reads. If that ever stops being true, R8 will assume it is zero.
#
# Warning removed deliberately: `-dontwarn` is not used, because a warning here
# would mean the class shape changed and this rule stopped matching, which is
# exactly what we would want to hear about.
-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int d(...);
    public static int i(...);
    public static int w(...);
    public static int e(...);
    public static int wtf(...);
    public static int println(...);
}
