Skip to content

Fix review findings: privacy, crashes, UI, build and CI - #14

Merged
abhishek-3289 merged 9 commits into
mainfrom
review-fixes
Oct 24, 2026
Merged

abhishek-3289 merged 9 commits into
mainfrom
review-fixes

Conversation

@abhishek-3289

Copy link
Copy Markdown
Collaborator

What changed

Fixes the findings from a full review of the library, drawer UI and build setup. Everything stays source- and binary-compatible with 1.0.0, so this is a minor release.

Privacy and crashes

  • Tap breadcrumbs no longer record text typed into text fields (passwords could reach crash files and bug reports).
  • Network redaction matches field names regardless of case, _ or -, masks non-string JSON values, and hides more auth/CSRF headers by default.
  • Screenshots no longer crash on a missing surface or a full disk; same-second captures no longer overwrite each other.
  • NetworkLogger.maxTotalBodyChars caps retained bodies (oldest dropped first).
  • The OkHttp interceptor only peeks bodies with a known length or a document type, so open-ended text streams (chunked HTTP/1.1, HTTP/2, close-delimited) and untyped bodies are passed through without blocking.
  • Console clear race, duplicate screen-recording start, logcat year rollover, duplicate lifecycle logs, unguarded display-settings and Firebase sign-out calls.

UI and accessibility

  • Confirmation before every clear/delete (shared ConfirmDeleteButton), capture gallery uses the shared list layout.
  • Wrapping pill and action rows on narrow screens, dark-theme colour variants, readable text on coloured fills, 48dp touch targets, TalkBack state for expandable rows, consistent wording.
  • File reads/writes moved off the main thread; exported reports go to cacheDir/devdeck-reports and are pruned.
  • All flag types show Overridden with a per-flag reset (subtitle added to the input items, with hidden overloads keeping the old signatures).

Build, CI and docs

  • Binary-compatibility dumps (apiCheck / apiDump) for the four libraries, run in CI and release.
  • JDK 17 everywhere (daemon, CI, JitPack), Gradle build cache and configuration cache, cacheable ktlintCheck.
  • Release workflow only runs from main, doesn't persist credentials, and runs ktlint, lintRelease and apiCheck; CI adds lintRelease, apiCheck and a minified sample qa build.
  • Consumer R8 rules for the compileOnly OkHttp, Timber and Firebase dependencies; Dependabot ignores AGP minor/major updates.
  • Tests for devdeck-timber and devdeck-appdistribution, plus new tests for redaction, body budget, interceptor peeking, console buffer, breadcrumb text and logcat parsing.
  • README states DevDeck stays out of release builds only with debugImplementation, and documents redaction, memory limits and storage locations.

How it was tested

  • ./gradlew ktlintFormat ktlintCheck lintDebug lintRelease testDebugUnitTest assembleDebug assembleRelease publishToMavenLocal apiCheck :sample:assembleQa passes locally.
  • The .api diff against the 1.0.0 dump only adds declarations; the four changed input items keep their old JVM signatures as synthetic methods.
  • Pixel 10 Pro emulator (API 37) at 360×760dp: network list, request detail actions and two-tap clear in the sample.
  • Independent review of the full diff; its findings (open-ended body peeking, placeholder size, endpoint write ordering, large log share) are fixed in the last commit.

Checklist

  • Entry added under [Unreleased] in CHANGELOG.md (or the skip-changelog label is set)
  • ./gradlew ktlintFormat ktlintCheck lintDebug testDebugUnitTest passes
  • README / sample README updated if the public API or behaviour changed
  • Screenshots attached for UI changes

- Breadcrumbs never record text of EditText, editable or password fields
- ScreenCapture: catch PixelCopy/IO failures, add a scope exception handler,
  millisecond + uniqueness suffix on capture file names
- Network redaction: normalise key names (case, _ and -), mask any JSON scalar,
  redact X-Auth-Token / X-Access-Token / X-CSRF-Token / X-XSRF-Token by default
- NetworkLogger.maxTotalBodyChars caps retained bodies, dropping the oldest first
- OkHttp interceptor no longer peeks untyped or chunked non-document bodies
- ConsoleBuffer drops batches taken before clear()
- Screen recording ignores a duplicate START instead of stopping
- Logcat parser computes the year per line (Dec/Jan rollover), thread-safe formatter
- LogsPlugin registers lifecycle callbacks once across install/updateConfig
- Guard display settings intent and UpdateChecker.signOut failures
- Clear cache runs on Dispatchers.IO (new AppActions.clearCacheInBackground)
- EndpointPlugin only commits synchronously when it restarts the app
- Gallery: count row with share all and confirmed delete all, InfoGroup rows,
  icon buttons with labels, confirmed per-item delete, Open click label,
  placeholder glyph hidden from TalkBack, file listing off the main thread
- Shared two-tap ConfirmDeleteButton used by every list's clear action and
  the SharedPreferences clear-all; feature flag reset now asks to confirm
- Dark-aware category colors (breadcrumbs, console levels, network status)
  via a shared palette; pill and filter text picks black or white by fill
- Pill rows wrap with FlowRow; network detail actions use ActionPillRow
- 48dp touch targets for filter pills, action pills, clickable bullets and
  code block toolbar icons
- Logs and network lists gain a share button; console counts pluralize and
  ellipsize; expandable rows announce Expand/Collapse and their state
- Overridden subtitle and per-flag reset for every flag type; text, number
  and JSON input items take an optional subtitle
- Crash list, SharedPreferences, bug report and console share do disk work
  on Dispatchers.IO; exported logs go to cacheDir/devdeck-reports, pruned
  to the newest 20
- Wording: Kill when backgrounded chip, Bulk edit, capitalized categories
- Record each library's public API in <module>/api/*.api and check it
  (apiCheck / apiDump, binary-compatibility-validator wired to AGP's
  built-in Kotlin; Compose singletons ignored). Runs in CI, release and check.
- Pin the Gradle daemon to JDK 17 like CI and JitPack.
- Enable the build cache and configuration cache; give ktlintCheck
  inputs and a report output so it can be up to date.
- Ship consumer R8 rules (-dontwarn for the compileOnly OkHttp, Timber
  and Firebase deps) and add a minified sample `qa` build type that CI builds.
- CI and release run lintRelease; release only runs from main and checks
  out without persisted credentials.
- Dependabot skips AGP major/minor updates, matching the 1.0.0 policy.
- Unit tests for devdeck-timber and devdeck-appdistribution.
- README: DevDeck stays out of release builds only with debugImplementation;
  JitPack versions keep the v of the tag. CONTRIBUTING: API dump workflow.
…e, keep endpoint writes synchronous, fix README
@abhishek-3289
abhishek-3289 merged commit 4a3ee0e into main Oct 24, 2026
3 checks passed
@abhishek-3289
abhishek-3289 deleted the review-fixes branch October 24, 2026 18:25
@github-actions github-actions Bot added this to the Next release milestone Oct 24, 2026
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