Skip to content

feat(mobile): optional crash reporting - #2142

Closed
brow wants to merge 6 commits into
mainfrom
tomb/mobile-sentry-crash-reporting
Closed

brow wants to merge 6 commits into
mainfrom
tomb/mobile-sentry-crash-reporting

Conversation

@brow

@brow brow commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

What changed?

Adds default-on Sentry crash reporting to Buzz mobile with an explicit opt-out.

Reporting initializes only in builds that inject a Sentry key at build time (e.g. our app store builds) and stops immediately when the preference is revoked.

The SDK is configured to omit default PII, screenshots, view hierarchy, replay, tracing, logs, breadcrumbs, request bodies, and user text.

Native Android auto-init providers are removed so no SDK code runs before Dart applies consent.

The change will be inactive until our release build pipeline is updated to inject the Sentry key.

How is it tested?

Added tests:

Flutter analysis and the full mobile test suite pass.

Before / After

Before After
Settings before crash-report controls Settings with consent-gated crash-report controls

Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
@brow

brow commented Jul 19, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

@brow

brow commented Jul 19, 2026

Copy link
Copy Markdown
Contributor Author

@builderbot review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

Comment thread mobile/lib/main.dart Outdated
Comment thread mobile/pubspec.lock
@brow

brow commented Jul 19, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Review summary: I found one blocking startup issue and one dependency compatibility concern on fb375ddf. Sentry initialization must not prevent runApp() when persisted consent is present, and the resolver changes should be acknowledged because Sentry 9.24.0 explicitly pins jni 0.14.2. Details are in the inline review comments. I did not approve this head.

Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Comment thread mobile/lib/shared/diagnostics/diagnostics_controller.dart
Comment thread mobile/lib/features/settings/settings_page.dart Outdated
Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
@brow
brow marked this pull request as ready for review July 19, 2026 22:43
@brow
brow requested a review from a team as a code owner July 19, 2026 22:43
Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Comment thread mobile/lib/shared/diagnostics/diagnostics_controller.dart
Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
@brow brow changed the title Add consent-gated mobile crash reporting feat(mobile): optional crash reporting Jul 20, 2026
Co-authored-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1ft62tztwwm2x9xamk25smmuaj4sfckdkldksruf2x2jwqalffkrq0g7arr <4af4a5896e76d4629bbbb2a90def9d95609c59b6fb6d01f12a32a4e077e94d86@sprout-oss.stage.blox.sqprod.co>
@cameronhotchkies cameronhotchkies added the triage-ready Appropriate for agentic review label Jul 30, 2026
@brow

brow commented Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

Closing as non-urgent; may revive someday.

@brow brow closed this Aug 3, 2026
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…k#2131)

Plans Feature block#2131 and its six child tasks (block#2137-block#2142).

The reading changed the plan's shape: roughly a third of the Feature is
already built. verify-claims/SKILL.md already carries the mandatory
framing, the isolation and withhold rules, the four verdicts, the
run-twice step and the accepted-cost note; screen-sensitive/SKILL.md
already documents the whole ATTRIBUTION/ROSTER_DATA/AMBIGUOUS protocol.

What is genuinely missing is narrower and more important: nothing in the
pack says what verifier stdout counts as which verdict, and neither
draft-page nor update-page wires the gate into its procedure at all -
update-page does not mention it once.

Three OPEN items are left for a human, not decided here.

Signed-off-by: test <test@example.com>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
Serina's call, 2026-09-15: demonstrate two scenarios - a configured
command that is not on PATH, and a command that runs to completion but
returns prose carrying no recognisable verdict. The second is the
degrade the criterion names, where nothing crashes and a careless
reading could treat the output as a pass.

Reading the criterion as the unset case was rejected; that is criterion
1 of the same issue and would make criterion 4 a duplicate.

This matters because dispatch deliberately does not go through
professor_lib/proc.py - the agent runs $PROFESSOR_VERIFIER_CMD by
following the skill's prose, so proc.py's handling of a missing binary,
a timeout and an OS refusal does not cover dispatch at all. STEP 1's
unrecognised-stdout rule is the only thing between an unparseable
verifier response and a passed claim.

STEP 9 now requires the write-up to say it demonstrated the consequences
of a harness without a headless CLI, not the absence of one.

No live open items remain in this plan.

Signed-off-by: test <test@example.com>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
… modes (block#2142)

Six scenarios, each run down the FULL draft-page gate path rather than as a bare
dispatch, against the STEP 8 draft whose citation resolves and whose claim is
false -- so check-page and screen-content always pass and only the scenario
under test can change the outcome. Target path absent before and after in all six.

  1. unset ............... fail-loud, section 2a's message verbatim, no dispatch
  2. non-default command . codex exec -> NOT_SUPPORTED, a real parsed verdict
  3. not on PATH ......... FileNotFoundError at launch, no verdict invented
  4. prose, exit 0 ....... section 2b parse failure -> BLOCKED
  5. SUPPORTED, exit 1 ... section 2c -> BLOCKED, stdout not read
  6. SUPPORTED, hangs .... section 2c -> BLOCKED on the bound, stdout not read

Scenario 2 deliberately uses a different vendor's CLI rather than a stub. A stub
proves the variable is read; codex proves the grammar survives contact with a
second real model that had never seen it, with no per-vendor accommodation.

Scenarios 5 and 6 are why section 2c exists. Both print a verdict that is
perfectly well-formed under 2b. Without completion being judged separately, a
command that failed and a command that never finished would each have authorised
a write.

Scenario 4's prose says "the claim is basically fine" -- precisely the reading a
substring or sentiment rule would have turned into a pass.

The runner reads section 2a's unset message OUT OF SKILL.md at runtime instead of
copying it, so the evidence cannot drift from the contract it implements.

The write-up states plainly that 3, 4 and 6 demonstrate the CONSEQUENCES of a
harness whose verifier is not a working headless single-turn CLI -- absent,
answering in prose, or never terminating -- and not the absence of one. That
limitation is named in the redesign doc and is not solved here; what is shown is
that the failure is safe and legible.

Scenario 6 used a 5s bound rather than 2c's documented 120s so the run
terminates promptly. The mechanism under test is the bound being applied at all;
2c's default is unchanged.

Signed-off-by: Serina Mcfall <serina.mcfall@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage-ready Appropriate for agentic review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants