Skip to content

feat(analytics): Phase 2 — operational events for onboarding, feedbac…#130

Merged
luisguzman-adfa merged 1 commit into
mainfrom
feat/ADFA-4466-firebase-phase2
Jul 3, 2026
Merged

feat(analytics): Phase 2 — operational events for onboarding, feedbac…#130
luisguzman-adfa merged 1 commit into
mainfrom
feat/ADFA-4466-firebase-phase2

Conversation

@luisguzman-adfa

Copy link
Copy Markdown
Collaborator

…k, errors, modules (ADFA-4466)

Extends the Firebase analytics from Phase 1 (all consent-gated, no-op unless the operator opted in; operational only, no PII/content). Same single AnalyticsClient module.

  • onboarding_completed: SetupSectionFragment.completeSetup() (setup funnel).
  • feedback_sent: FeedbackFragment, on a successful send only (no content — just that it happened).
  • app_error: K2GoUncaughtExceptionHandler logs a coarse type = exception class simple name (never the message/stacktrace), consent-gated and wrapped so it can never mask the crash; the Application now passes a Context into the handler.
  • module_install: per module in InstallService's queue loop (module = fixed-catalog key, result = success/failed) — deployment config (what the operator provisions), not what an end user opens. Fires on each runrole terminal (success, ansible-failed, and proot error).

New GA4 custom dimensions to register: type (app_error), module + result (module_install). No new strings, no new pure logic (AnalyticsBuckets test still covers bucketing).

…k, errors, modules (ADFA-4466)

Extends the Firebase analytics from Phase 1 (all consent-gated, no-op unless the operator
opted in; operational only, no PII/content). Same single AnalyticsClient module.

- onboarding_completed: SetupSectionFragment.completeSetup() (setup funnel).
- feedback_sent: FeedbackFragment, on a successful send only (no content — just that it
  happened).
- app_error: K2GoUncaughtExceptionHandler logs a coarse type = exception class simple name
  (never the message/stacktrace), consent-gated and wrapped so it can never mask the crash;
  the Application now passes a Context into the handler.
- module_install: per module in InstallService's queue loop (module = fixed-catalog key,
  result = success/failed) — deployment config (what the operator provisions), not what an
  end user opens. Fires on each runrole terminal (success, ansible-failed, and proot error).

New GA4 custom dimensions to register: type (app_error), module + result (module_install).
No new strings, no new pure logic (AnalyticsBuckets test still covers bucketing).
@luisguzman-adfa luisguzman-adfa marked this pull request as ready for review July 3, 2026 06:43
@luisguzman-adfa luisguzman-adfa merged commit 2544630 into main Jul 3, 2026
1 check passed
@luisguzman-adfa luisguzman-adfa deleted the feat/ADFA-4466-firebase-phase2 branch July 3, 2026 06:43
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