Skip to content

refactor: redesign Console log rows - #163

Open
MaxMichel2 wants to merge 1 commit into
feat/analytics-event-detailfrom
refactor/console-log-rows
Open

MaxMichel2 wants to merge 1 commit into
feat/analytics-event-detailfrom
refactor/console-log-rows

Conversation

@MaxMichel2

@MaxMichel2 MaxMichel2 commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This is PR D, based on feat/analytics-event-detail and following PR #161. It describes only this layer, not the inherited UI-kit, FeatureFlip or Analytics-detail work. Merge order: #157 → #159 → #160 → #161 → this PR.

  • Replace Console cards with compact newest-first rows, accessible severity labels, animated expansion chevrons, selectable multiline text and Copy log. Preserve the inspected row while following is paused; Resume returns to the newest matching row. Improve light-palette text contrast.
  • Add persistent noise exclusions in the bottom filter panel. Built-ins: setRequestedFrameRate and setFrameRateCategory. Hosts can append, replace or omit defaults. Match case-insensitive substrings in tag/message without dropping captured history. Device additions, removals and disabled rules survive restart and merge new defaults without duplicates. Clear disables rules; Reset restores current host defaults. Loading/saving errors keep saved preferences intact and offer Retry.
  • Make built-in module screens internal and keep one module-owned ConsoleScreen. Hosts control how DevView is presented; registration owns module content. Remove the Console composition-local log source and expose read-only logger snapshots. Breaking API changes: direct calls to built-in screens and writes to the Console history are no longer supported. Update API signatures, integration docs, KDoc and architecture checks.
  • Correct module-effect lifetime, serialize Console collector re-entry, preserve queued/history entries safely across configuration and Clear, and unblock idle native capture on cancellation. Android terminates logcat; iOS uses cancellable nonblocking idle reads and restores output descriptors.
  • Keep the inspected Analytics event anchored on return from details, including arrivals while details are open. Increase the macOS iOS build/test job timeout to 60 minutes.
  • Refresh AST graph artifacts; exclude local graph caches and the unrelated tooling roadmap.

Validation

Executed successfully on this layer:

  • Console: 29 host tests, 21 Android device tests, including an actual idle-process cancellation/re-entry regression and preferences-file close/reopen persistence.
  • Analytics: 12 host tests, 15 Android device tests.
  • Core: 19 Android device tests; Konsist: 15 architecture tests.
  • Sample Android debug assembly; detektFull; explicit iOS regression-test Detekt; API signature generation. Normal Gitleaks and Detekt commit hooks passed.
  • Connected Samsung inspection of Console rows and filters in light/dark themes. Manually added a test rule, force-stopped/reopened the sample to verify persistence, then removed only that test rule. Verified both built-in patterns in the installed UI.

Pending / limits: Apple compilation and the new iOS runtime regression require macOS CI; Windows lint is not an Apple execution pass. Existing Detekt type-analysis warnings remain. Full TalkBack, keyboard and enlarged-font validation is not claimed. The known sample light-status-bar contrast and user-approved FAB placement are unchanged. Native trace grouping, streaming UTF-8/partial-write handling and cancellation of a stalled original iOS tee destination remain deferred. TimeCapsule, remaining NetworkMock redesign, sample polish and the final whole-UI delivery gate are deferred at the requested stop after PR D.

RetriggerView in GreptileConfidence Score: 4/5

The PR appears safe to merge, with a non-blocking Console scroll-restoration issue.

Findings

  1. P2 Restoration shows another log ▶

Summary

This PR replaces Console cards with newest-first expandable rows and adds saved noise exclusions.

  • Console logs appear as compact rows that open to show the full message.
  • Console filters can save rules that hide noisy log entries.
  • Console logging keeps a read-only history and manages capture across cancellation.
  • Registered module effects stay active until the module leaves composition.
  • Hosts open built-in tools through DevView instead of composing their screens directly.
  • Analytics lists keep the inspected event in view when people return from details.
  • The iOS build job gets more time, and graph metadata is refreshed.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Native[Native capture] --> Record[ConsoleLogger.log]
  Manual[Host logging] --> Record
  Record --> Queue[Bounded queue]
  Queue --> Collector[Single collector]
  Collector --> History[Read-only history]
  History --> Filters[Search, levels and noise rules]
  Preferences[Saved noise edits] --> Filters
  Filters --> Rows[Newest-first expandable rows]
Loading

Reviews (1) · Last reviewed commit: ":sparkles: Redesign Console rows and per..." · Reviewed by Greptile

Add expandable, selectable log rows, newest-first inspection and persistent
case-insensitive exclusion rules without dropping captured history. Keep
module screens internal and register their content through DevView. Fix
collector lifetime, idle native cancellation and Analytics return anchors.

Validation: Console 29 host and 21 Android device tests; Analytics 12 host
and 15 device tests; core 19 device tests; 15 Konsist tests; sample debug
build, Detekt and API generation passed. iOS regression lint passed;
Apple compilation/runtime remains for the 60-minute macOS CI job.
@MaxMichel2
MaxMichel2 added this pull request to stack #162 November 6, 2026 19:04
visibleLevels = LogLevel.entries.map { it.name }
onNoiseChange(ConsoleNoiseChange.DisableAll)
}
val listState = rememberLazyListState()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Restoration shows another log

ConsoleScreen restores a row number, not the inspected log’s key. If following is paused and logs arrive between saving and restoring the screen, the newest-first order shifts existing rows. The saved number then points to a different log. The follow effect does not correct it because following is false.

Save the visible row’s key and offset, then find its current index on restore, as AnalyticsScreen does. Add a restoration test with arrivals between save and restore.

This branch has not been deployed

No deployments
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.

1 participant