Skip to content

Release 1.5.1: consumer R8 keep rules - #96

Merged
projectdelta6 merged 6 commits into
mainfrom
develop
Jun 10, 2026
Merged

Release 1.5.1: consumer R8 keep rules#96
projectdelta6 merged 6 commits into
mainfrom
develop

Conversation

@projectdelta6

Copy link
Copy Markdown
Collaborator

Release 1.5.1

Promotes develop to main. Headline of this release: every module now ships working consumer ProGuard/R8 keep rules, verified under R8.

Why

Consumer consumer-rules.pro files were empty in every module, forcing consuming apps (e.g. AIM Capture) to hand-author keeps for AppolyDroid internals. This release populates them and proves they hold.

Consumer R8 rules

  • Populated consumer-rules.pro for the 8 modules with @Serializable models, custom serializers, enum-serializer bases, and Room converters; the other 12 modules are marked as deliberately empty.
  • Kept only Signature (needed for generic serializers) — dropped *Annotation*, which R8 warns disables annotation optimizations app-wide and the library doesn't need.
  • -keepattributes ships with the modules that own the generics, not blanket on BaseRepo.

Verification (verifyConsumerKeepRules)

  • Demo app is minified and depends on every module, so R8 applies all consumer rules. A device-free Gradle task reads R8's seeds.txt and asserts all 27 protected serializer/converter classes survive.
  • Wired into CI and an IDE run config.

Demo app coverage

  • LazyGrid paging via a List/Grid SegmentedControl toggle.
  • BaseRepo-AppolyJson demo parsing GenericResponse / nested-paged / BaseResponse envelopes, served offline by MockInterceptor.
  • DateHelperUtil Serialization + Room demo (date KSerializers + DBDateConverters).

Housekeeping

  • TOOLBOX_VERSION bumped 1.5.01.5.1; READMEs auto-synced.
  • graphify knowledge-graph setup checked in for the team.

🤖 Generated with Claude Code

projectdelta6 and others added 4 commits June 9, 2026 10:58
Configure graphify so any maintainer can build/query a knowledge graph of
the library's modules and cross-dependencies without reconstructing it from
scratch:

- .graphifyignore: keep resource XML, drawables, and Room schemas out of the graph
- .gitignore: commit the durable bits (memory/ Q&A + GRAPH_REPORT.md),
  ignore the bulky regenerable artifacts (graph.json/html, manifest.json) —
  a stale committed graph misleads, and they bloat the published-library history
- CLAUDE.md: document how to regenerate and where the saved architectural Q&A lives
- graphify-out/memory/: two checked-in verdicts (UploadResult vs APIResult are
  deliberately decoupled; LazyGrid/LazyList paging mirroring is unavoidable, not debt)
- graphify-out/GRAPH_REPORT.md: audit snapshot (god nodes, communities, bridges)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Consumer ProGuard/R8 rules were empty in every module, forcing consuming
apps (AIM Capture) to hand-author keeps for AppolyDroid internals. Populate
them, prove they hold under R8, and fill the demo app's coverage gaps.

Consumer rules:
- Populate consumer-rules.pro for the 8 modules with @serializable models,
  custom serializers, enum-serializer bases, and Room converters; mark the
  12 rule-free modules as deliberately empty.
- Keep only `Signature` (for generic serializers) — drop `*Annotation*`,
  which R8 warns disables annotation optimizations app-wide and which the
  library doesn't need (no polymorphic serialization).
- Ship `-keepattributes` with the modules that own the generics, not BaseRepo.

Verification (verifyConsumerKeepRules):
- Demo app is minified (isMinifyEnabled = true) and depends on every module,
  so R8 applies all consumer rules. A device-free Gradle task reads R8's
  seeds.txt and asserts all 27 protected serializer/converter classes survive.
- Wired into CI and an IDE run config.
- An instrumented test against the minified APK was prototyped and dropped:
  minifying the test APK strips the test runner's own deps (androidx.tracing,
  Kotlin stdlib facades), which is plumbing unrelated to the library.

Demo app:
- LazyGrid paging via a List/Grid SegmentedControl toggle (HomeScreen
  advertised LazyGrid but only LazyColumn existed).
- BaseRepo-AppolyJson demo: a real AppolyBaseRepo parses GenericResponse /
  nested-paged / BaseResponse envelopes, served offline by MockInterceptor.
- DateHelperUtil Serialization + Room demo (date KSerializers + DBDateConverters).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@projectdelta6 projectdelta6 self-assigned this Jun 10, 2026
projectdelta6 and others added 2 commits June 10, 2026 10:15
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@projectdelta6
projectdelta6 merged commit a61da8a into main Jun 10, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants