Repository navigation
e2e: device coverage for the first beta - #57
Conversation
crashNative('segv') now stores through a bad pointer (EXC_BAD_ACCESS,
SIGSEGV) and crashNative('abort') calls abort() on iOS too, so an iOS
device test can prove a signal crash with no NSException behind it is
recovered. It used to only log that it was Android-only.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
… lifecycle, spans, crashes) New suites, each run on the WOD_LX1, the iPhone 17 Pro simulator and the iPhone XS: - wrapper-identity: environment.sdk.wrapper in a report (API-45) - feedback: the feedback screen in front, the greeting, the chat color - launch-options: 20 option cases, each proven by what it changes in a report against a control run, plus the getLaunchOptions read-back; the Android enum keys use values whose ordinal names another constant - lifecycle: onStatusChange, onLifecycleEvent order, stop(), an upload after stop, deleteCollectedDataOnDevice on disk - span-lifecycle: getActiveSpan, setDescription, finish(status), setName - js-crash: testJsCrash as one crash at the launched crash priority - report-dialog-appearance: the dialog painted in appearance colors - ios-native-crash: SIGSEGV / SIGABRT recovered on the XS with the recovery handler's labels in the crash report Product bugs found are pinned with it.failing, each with its evidence. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
There was a problem hiding this comment.
Stale comment
Deep review (e827609)
Intent: device e2e for the first beta’s automatable gaps (wrapper identity, feedback UI, launch-option effects, lifecycle/delete, span ops,
testJsCrash, report-dialog colour, iOS signal-crash recovery). The only non-test change is example-onlycrashNativeon iOS, which now raises a real SIGSEGV/SIGABRT instead of logging and returning.@bugsee/react-nativeis untouched. CIios e2estill runslaunch.test.tsonly.Reviewed against the existing harness (
startRun,clearIosBundles, report-handler / exceptions suites),setUserIdentifierpersistence, and the iOS fatal path that already waits forBugseeRN exception unhandled completed.Findings
ID Severity Location Problem 1 P2 High examples/bare/scenarios/feedback.ts:32feedback-chatwrites a persistent user identifier and never clears it2 P2 High examples/bare/e2e/js-crash.test.ts:50iOS kills the app 5s after the “throwing” marker, not after persist completes 3 P2 High examples/bare/e2e/ios-native-crash.test.ts:101SIGABRT recovery after SIGSEGV is a known 2/3 miss, encoded as implicit test order No P0/P1. I did not run the device e2e (needs WOD_LX1 / XS / a simulator with the app installed).
1. Overall risk: Medium
Example-only and test-only, but two findings can produce false reds on a later shared-device run, and one leaves identity in the iPhone Keychain the attributes suite already treats as uncleared-from-outside.
2. Merge recommendation: request changes
3. Most important to fix
- Clear the identifier
feedback-chatsets (same contract asattributes-persist).- On iOS, wait for
exception unhandled completedbeforestopApp()injs-crash.- Isolate SIGABRT recovery (or pin the post-SIGSEGV miss as
it.failing) so the suite does not depend on['abort','segv'].4. Positive
- Option cases launch with enum values whose ordinals name a different constant — that is a real ordinal-vs-
fromIntValuetrap, not a read-back theatre.- Product gaps are pinned with
it.failingand a concrete observation (video-off still records, Android greeting unread, iOSsetNamerenames the transaction, delete keeps generations).- iOS
crashNativeis a signal (0x10store /abort()), not+[Bugsee testCrash], so it actually covers the FLOW-10 holereport-handler.test.tsleft.- New suites go through
beginRetainingSuite/startRun(dead endpoint, pin check, nonce) instead of inventing a second driver.Sent by Cursor Automation: Bugsee code review
… fatal, no crash-order dependency - feedback.test.ts: afterAll runs attributes-persist to clear the e-mail user identifier feedback-chat sets (it outlives the wipe). - js-crash.test.ts: on iOS, stop the app only after the bridge logs `exception unhandled completed`, as exceptions.test.ts does. - ios-native-crash.test.ts: no array-order dependency; segv and abort each run once from a wiped container, the intermittent SIGABRT loss (3 of 16 runs, either order) is stated where it bites, and the crash reporter's queue is reported before each relaunch. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
There was a problem hiding this comment.
Stale comment
Re-review (676b612)
All three prior P2s are fully_addressed.
Thread Verdict feedback-chatidentifier leakfully_addressed — afterAllrunsattributes-persistand waits forattr cleared-id {"type":"undefined"}(the same markerattributes.test.tsuses) beforeendRetainingSuite.js-crash iOS stopAppbefore persistfully_addressed — waits for bridgeLine('exception unhandled completed')from this run’slaunchedindex, then stops.abort recovery hidden by ['abort','segv']fully_addressed — kinds are separate cases; clearBundles()(crash queue included) runs before each; queue listing is reported before relaunch. The 3/16 SIGABRT miss is now an honest red, not an order trick, and is recorded as an open beta4 finding.No new P0–P3. Residual: SIGABRT recovery on the XS is still intermittent (author: 3/16, either order). That is an SDK miss, not a test-design defect.
1. Overall risk: Low
2. Merge recommendation: approve
3. Most important to fix
Nothing left in this PR. The SIGABRT drop belongs on the iOS beta4 list, not as a merge blocker here.
4. Positive
The clearer reuses
attributes-persistinstead of a one-off wipe. The fatal wait matchesexc-fatal. The abort comment now states the expected behaviour and will go red when the SDK drops it, which is the right pin for an intermittent miss (it.failingwould flip).Sent by Cursor Automation: Bugsee code review
There was a problem hiding this comment.
Deep review (676b612)
Intent: device e2e for the first beta’s automatable gaps (wrapper identity, feedback UI, launch-option effects, lifecycle/delete, span ops, testJsCrash, report-dialog colour, iOS signal-crash recovery). The only non-test change is example-only crashNative on iOS, which raises a real SIGSEGV/SIGABRT. @bugsee/react-native is untouched. CI ios e2e still runs launch.test.ts only.
Re-checked against attributes-persist / Keychain identity, exc-fatal’s exception unhandled completed wait, clearIosBundles (crash queue included on device), IosConsole.launch (--terminate-existing), and the existing Android native-crash suite (still Android-only).
Prior findings (e827609) — all fully addressed
| ID | Prior | Now |
|---|---|---|
| 1 | P2 feedback-chat left a persistent user identifier |
afterAll runs attributes-persist and waits for attr cleared-id {"type":"undefined"} |
| 2 | P2 iOS js-crash killed 5s after the pre-throw marker |
waits for BugseeRN exception unhandled completed before stopApp() |
| 3 | P2 SIGABRT recovery encoded as ['abort','segv'] order |
no order array; clearBundles before each kind; 3/16 abort miss stated as an open beta4 finding |
No new P0–P3. I did not run the device e2e (needs WOD_LX1 / XS / a simulator with the app installed).
Residual, not a test defect: iOS beta4 still drops SIGABRT recovery now and then (3 of 16 on the XS, either order). The suite goes red when that happens, which is the right pin.
1. Overall risk: Low
Example-only and test-only. The three shared-device / false-red issues from the first pass are gone.
2. Merge recommendation: approve
3. Most important to fix
Nothing blocking. Optional later: retry or isolate the known SIGABRT-recovery miss if this file becomes a CI gate.
4. Positive
- Follow-up matches the existing contracts (
attributes-persistclearer,exc-fatalpersist-before-kill,clearIosBundleswipe-and-assert) rather than inventing a second cleanup path. - Option cases still launch with enum values whose ordinals name a different constant.
- Product gaps stay pinned with
it.failingand a concrete observation. - iOS
crashNativeis a signal (0x10store /abort()), not+[Bugsee testCrash], so FLOW-10 is actually covered.
Sent by Cursor Automation: Bugsee code review


Device e2e for the first beta's automatable coverage gaps (api-device-coverage.md, gap list G4, G5, G8, G9, G12, G13), on the WOD_LX1, the iPhone 17 Pro simulator and the iPhone XS (iOS 7.0.0-beta4, after merging #30/#55).
New suites
wrapper-identity:environment.sdk.wrapperin a report (type, package version, RN version, Hermes, build configuration), checked against the packages on disk.feedback: the feedback screen in front of the app (Androiddumpsys, iOS Vision OCR of a screen capture), the greeting, the chat background color. No taps.launch-options: 20 option cases, each proven by what it changes in a report against a control run, plus thegetLaunchOptions()read-back. The Android enum keys are launched with values whose ordinal names a different constant, so an ordinal lookup would fail.lifecycle:onStatusChange,onLifecycleEventorder with report ids,stop(), an upload after stop,deleteCollectedDataOnDevicechecked on disk.span-lifecycle:getActiveSpan,setDescription,finish(status),setName.js-crash:testJsCrash()as one crash at the launched crash priority.report-dialog-appearance: the report dialog painted in the appearance color.ios-native-crash:crashNative('segv'|'abort')(now a real signal crash on iOS) recovered on the XS, with the recovery handler's labels in the crash report.Product bugs, pinned with
it.failingBugseeOptionEnums:wireValue(IssueSeverity.VeryLow)is 0 (fromIntValue(int)falls back to VeryLow), andcoerce()snaps every unknown severity to VeryLow.deleteCollectedDataOnDevice(true)resolves true and leaves the capture parts: Android 7.3.0 (removeOtherGenerationsFilesSync(-1)keeps every generation), iOS beta4 (clears the legacy folder only).capture.video=falsestill records video;capture.network.body-size-limitis dropped; a JS fatal is filed at severity 5 ignoringcrash-priority;setNamerenames the transaction instead of setting the operation (span.ts contract).Details, evidence, per-row status and the MANUAL checklist:
.superpowers/sdd/2026-09-16-implementation-plan/beta-coverage-report.md(local).Runs
yarn typecheck,yarn lint,yarn testgreen;launch.test,native-crash.testre-run.🤖 Generated with Claude Code