Conversation
The Detox suite is three logged-out specs. Every assertion in it resolves to js/product/ProductScreens.js or js/screens/HomeScreenComponents/NavigationBar.js. It signs in to nothing, so it cannot observe notifications, the OTP bootstrap, the authenticated WebView, avatars or rate limiting - yet it charged roughly 100 minutes of macOS runner time to every JS-only iteration that touched those surfaces. Full iPhone + iPad Detox now runs when the change can actually affect what the suite asserts: native ios/ and android/, the e2e harness and Detox config, workflows, runtime and dependency manifests, and the specific JS files the specs reach. It also runs nightly, on workflow_dispatch, on the full-detox label, and whenever the changed-file list cannot be computed - the classifier fails closed. scripts/ci-detox-surface.sh writes its reasoning to the job summary, so every run states why Detox ran or was skipped. The reduction is paired with an increase. verify:ota, verify:ios-auth, verify:release-readiness, verify:backend and validate:ota guard the OTA channel wiring, the runtime version and the iOS auth presentation contract, and until now ran only on a developer's machine. They now run on every pull request. The cheapest and most safety-relevant checks were the ones CI did not enforce. ios-tests also gains concurrency cancellation; superseded runs were burning full macOS runners to test commits that had already been replaced. No Detox assertion, matcher, hook budget, retry count or failure artifact is changed. A failing test still fails the job. Validated against 13 representative historical diffs before merge; evidence in testing/native-ci-policy/CLASSIFIER-VALIDATION.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fk48MTrNBBSZeLvcJmc8SR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Founder-approved CI policy change. Implemented as a separate PR, with the surface classifier validated against representative historical diffs before merge.
What the Detox suite actually covers
Three specs, all logged out. Every assertion maps to two files:
logged-out-welcome-scrolljs/product/ProductScreens.jsjs/product/ProductScreens.jsnav-plus-iconjs/screens/HomeScreenComponents/NavigationBar.jsIt signs in to nothing, so it provides no coverage of notifications, notification routing, the OTP bootstrap, the authenticated WebView, member profiles, avatars, private member photos, rate limiting, or chat. This is stated plainly in
docs/NATIVE-CI-POLICY.mdso a green Detox run is never mistaken for authenticated-surface evidence.Reduction
Full iPhone + iPad Detox (~100 min of macOS runner time) now runs only on:
ios/,android/,e2e/,.detoxrc*,.github/workflows/,package.json,yarn.lock,app.json,eas.json,Gemfile*,*.config.*, andjs/{Discourse,iosAuthSession,site_manager}.js,js/product/ProductScreens.js,js/screens/HomeScreen*— plus thefull-detoxlabel,workflow_dispatch, the nightly schedule, and fail-closed when the changed-file list can't be computed.Increase
verify:ota,verify:ios-auth,verify:release-readiness,verify:backend,validate:otaran nowhere in CI before this PR — only on a developer's machine. They now run on every PR in a newnative-gatesworkflow. All five confirmed passing on the trunk locally.ios-testsalso gains concurrency cancellation; superseded runs were burning full macOS runners on already-replaced commits.Classifier validation (13 historical diffs, all correct)
Plus:
schedule/workflow_dispatch/full-detox→ true,skip-full-detox→ false, missing base/head → true (fail closed). Evidence intesting/native-ci-policy/CLASSIFIER-VALIDATION.md.onboarding policy + launch gatesclassifying false is correct —AdjusterCardOnboardingScreen.jsis post-authentication and unreachable from a logged-out suite.Preserved
No Detox assertion, matcher, 180s hook budget,
--retries 2, or failure-artifact upload is touched. The job steps are byte-identical when they run; onlyneeds:andif:were added. A failing test still fails the job, with full visibility.Known behavior
A PR stacked on an unmerged branch inherits its parent's files and will usually run the full suite. That is the conservative outcome;
skip-full-detoxis the documented owner override, not a routine bypass. The durable fix is landing the lineage.Implementation note
The classifier is plain
git+bash— no third-party action, so this adds zero supply-chain surface.