Skip to content

fix(react-native-plugin): build without posthog-ios's Surveys trait - #5564

Merged
turnipdabeets merged 1 commit into
chore/rn-plugin-v3from
fix/rn-plugin-surveys-trait-guard
Nov 5, 2026
Merged

turnipdabeets merged 1 commit into
chore/rn-plugin-v3from
fix/rn-plugin-surveys-trait-guard

Conversation

@turnipdabeets

Copy link
Copy Markdown
Contributor

Problem

#5237 turned off posthog-ios's Surveys trait in the plugin's Package.swift, but the plugin still sets config.surveys = false. Without the trait, posthog-ios 4.0 has no PostHogConfig.surveys, so apps on React Native's full Swift Package Manager integration fail to compile the plugin. #5237's full-SPM CI job couldn't show this: it fails earlier because posthog-ios 4.0.0 isn't published yet.

The line can't just be deleted. The CocoaPods path resolves posthog-ios through React Native's spm_dependency, which can't pass traits, so it builds posthog-ios with every default trait, surveys included, and surveys defaults to true. Without the line, those apps would show native surveys on top of the JS ones.

Changes

  • ios/Package.swift: the PosthogReactNativePlugin target defines POSTHOG_IOS_NO_SURVEYS. That target compiles only PosthogReactNativePlugin.swift, so the define reaches the file.
  • ios/PosthogReactNativePlugin.swift: config.surveys = false is wrapped in #if !POSTHOG_IOS_NO_SURVEYS.
Install path posthog-ios survey code config.surveys = false
CocoaPods (podspec, spm_dependency) compiled in compiled in, turns native surveys off
Full Swift Package Manager left out (no Surveys trait) skipped

Remove the guard, the define and the line once every install path can leave the trait out: when spm_dependency can pass traits, or when the podspec path goes away.

No changeset: the 3.0 changeset already says full-SPM apps no longer bundle native surveys, which stays true.

Release info Sub-libraries affected

Libraries affected

  • @posthog/react-native-plugin

Checklist

  • All commits are signed (see Commit signing)
  • Tests for new code
  • Accounted for the impact of any changes across different platforms
  • Accounted for backwards compatibility of any changes (no breaking changes!)
  • Took care not to unnecessarily increase the bundle size

How it was tested

Three scratch Swift packages depending on posthog-ios 4.0 (fix/v4-capture-setup-generation, the head of the 4.0 stack), each compiling the plugin's exact #if block, built for the iOS simulator with xcodebuild:

  • Traits ["SessionReplay", "CrashReporting"] with the define (the full-SPM path): builds.
  • Default traits, no define (the CocoaPods path): builds, with the line active.
  • Traits ["SessionReplay", "CrashReporting"] without the define (the code before this PR): fails with value of type 'PostHogConfig' has no member 'surveys'.

Not run: a React Native app build on either path, since posthog-ios 4.0.0 isn't tagged yet.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Made with Claude Code during the posthog-ios 4.0 pre-release review. Options considered: keep the Surveys trait on and the line as is (simplest, but full-SPM apps bundle unused survey code), or a runtime responds(to:)/KVC check (no build setting, but a rename in posthog-ios would silently break it). A define set only by Package.swift keeps native surveys out of full-SPM apps and still turns them off on the CocoaPods path.

🤖 Generated with Claude Code

The full SwiftPM path leaves out posthog-ios's Surveys trait (#5237), which
removes PostHogConfig.surveys, so `config.surveys = false` didn't compile
there. Package.swift now defines POSTHOG_IOS_NO_SURVEYS for the plugin
target and the line is skipped under it. The CocoaPods path still sets it:
React Native's spm_dependency can't pass traits, so it builds posthog-ios
with surveys on by default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@turnipdabeets
turnipdabeets requested a review from a team as a code owner November 4, 2026 23:36
@turnipdabeets turnipdabeets self-assigned this Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

📝 No Changeset Found

This PR doesn't include a changeset. A changeset is required to release a new version.

How to add a changeset

Run this command and follow the prompts:

pnpm changeset

Remember: Never use major version bumps for posthog-js as it's autoloaded by clients.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor
⚠️ `@posthog/react-native-plugin` is modified but this PR has no changeset

This is informational — the PR is not blocked. Click the triangle above to collapse, or push a fix and this comment will auto-delete.

Modified in this PR but no changeset added:

  • @posthog/react-native-plugin

If this change should ship, run pnpm changeset and select a bump level.
If it isn't user-facing (refactor with no behavior change, internal tooling, generated files), no action needed.

@posthog posthog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

PostHog Review · Standard · reviewed f4fb0ff: 1 Should fix.

See this review and its findings in PostHog Review. Comment @posthog review --deep for a Deep review. A Deep review takes longer and looks deeper than a Standard review.

Comment on lines +379 to +381
#if !POSTHOG_IOS_NO_SURVEYS
config.surveys = false
#endif

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P2 · Preserve the survey opt-out when SwiftPM unifies traits

When a full-SPM app also depends on posthog-ios with default traits, SwiftPM unions the trait requests and compiles Surveys. POSTHOG_IOS_NO_SURVEYS still skips config.surveys = false, so PostHogConfig retains its true default and installs native survey UI alongside JS surveys. Preserve the opt-out when dependency trait unification enables surveys.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Coherence

📄 0 spec file errors · ⛔ 0 broken rules · 🚪 2 unchecked inputs · 🐛 0 bugs that came back

What is Coherence?

Coherence compares the code with its spec files (*.spec.md). A spec file lists the rules for one part of the code.

This check read 44 parts of the code and 7 rules.

Note

These findings do not make this check fail.

None of these findings are in files that this pull request changes. You do not need to fix them in this pull request.

🚪 Unchecked inputs (2)

  • public api in packages/web/Web.spec.md. The input comes from: host-app.
  • webpack plugin in packages/webpack-plugin/Webpack-plugin.spec.md. The input comes from: build.
What this means and how to fix it

Input from outside this code comes in at these places. The spec does not say what checks that input. 10 more places were already like this when Coherence was added. This list does not show them.

To close one of these, find the place by its name in the ## entrances section of its spec file. Add one line under it:

  • If all of the input goes through one function that a rule in the spec protects, add guard: <function>.
  • If a rule in the spec already checks input from the same source, add the place's name to the entrances: line of that rule.
  • If the input needs no check, add control: none - <reason>.

To get the line to add, run npx --no -- coherence scaffold control "<name>".

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

SDK performance: posthog-node

Benchmarks completed. No changes flagged for review.

Flags require at least a 5% change in the median and all six pairs agreeing on direction. This is a noise filter, not proof of a performance change or a CI gate.

View all results
Test Measurement Before PR With PR Change Assessment
Capture and deliver events (32-byte payload, burst)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Capture and deliver events (32-byte payload, steady)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Queue an event (32-byte payload)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Queue an event (4,096-byte payload)
Shard: capture
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate all 10 flags
Shard: flags-scaling
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate all 100 flags
Shard: flags-scaling
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate all 1,000 flags
Shard: flags-scaling
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate one boolean flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a cohort-filtered flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a flag (early match)
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a flag (late match)
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a flag (no match)
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a property-filtered flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a regex-filtered flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a rollout flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Evaluate a multivariate flag
Shard: flags-single
Allocations per operation — — — unavailable; base:​ unsupported; head:​ unsupported; base:​ V8 samples do not expose total allocation count; sample count is not object count.​; head:​ V8 samples do not expose total allocation count; sample count is not object count.​
Capture and deliver events (32-byte payload, burst)
Shard: capture
Allocated memory per operation (estimated) 9.94 KiB/op 9.97 KiB/op 0.3% more memory Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Time per operation 23.2 µs/op 23.34 µs/op 0.6% more time Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Idle process memory (RSS) 102.41 MiB 102.51 MiB <0.1% more memory Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Observed peak process memory (RSS) 105.98 MiB 106.32 MiB 0.3% more memory Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Managed heap after settling 9.96 MiB 9.95 MiB <0.1% less memory Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Process memory after settling (RSS) 105.67 MiB 106.01 MiB 0.3% more memory Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Process CPU time per operation 39.34 µs/op 39.74 µs/op 1% more time Not flagged
Capture and deliver events (32-byte payload, burst)
Shard: capture
Lifetime peak process memory (RSS) 106.21 MiB 106.55 MiB 0.3% more memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Allocated memory per operation (estimated) 18.21 KiB/op 18.75 KiB/op 3% more memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Time per operation 39.59 µs/op 39.68 µs/op 0.2% more time Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Idle process memory (RSS) 103.21 MiB 103.03 MiB 0.2% less memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Observed peak process memory (RSS) 113.55 MiB 113.66 MiB <0.1% more memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Managed heap after settling 9.96 MiB 9.96 MiB <0.1% less memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Process memory after settling (RSS) 109.53 MiB 109.55 MiB <0.1% more memory Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Process CPU time per operation 57.32 µs/op 57.53 µs/op 0.4% more time Not flagged
Capture and deliver events (4,096-byte payload, burst)
Shard: capture
Lifetime peak process memory (RSS) 116.29 MiB 116.31 MiB <0.1% more memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Allocated memory per operation (estimated) 10.5 KiB/op 10.15 KiB/op 3.4% less memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Time per operation 24.8 µs/op 24.07 µs/op 3% less time Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Idle process memory (RSS) 102.41 MiB 102.22 MiB 0.2% less memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Observed peak process memory (RSS) 106.47 MiB 106.72 MiB 0.2% more memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Managed heap after settling 10.03 MiB 10.03 MiB <0.1% less memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Process memory after settling (RSS) 106.53 MiB 106.72 MiB 0.2% more memory Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Process CPU time per operation 42.34 µs/op 40.58 µs/op 4.2% less time Not flagged
Capture and deliver events (32-byte payload, steady)
Shard: capture
Lifetime peak process memory (RSS) 106.67 MiB 106.72 MiB <0.1% more memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Allocated memory per operation (estimated) 17.67 KiB/op 17.7 KiB/op 0.1% more memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Time per operation 34.53 µs/op 35.54 µs/op 2.9% more time Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Idle process memory (RSS) 102.74 MiB 102.65 MiB <0.1% less memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Observed peak process memory (RSS) 109.16 MiB 108.97 MiB 0.2% less memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Managed heap after settling 10.04 MiB 10.04 MiB <0.1% less memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Process memory after settling (RSS) 107.86 MiB 107.82 MiB <0.1% less memory Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Process CPU time per operation 52.07 µs/op 53.65 µs/op 3% more time Not flagged
Capture and deliver events (4,096-byte payload, steady)
Shard: capture
Lifetime peak process memory (RSS) 109.16 MiB 108.97 MiB 0.2% less memory Not flagged
Queue an event (32-byte payload)
Shard: capture
Allocated memory per operation (estimated) 8.69 KiB/op 8.58 KiB/op 1.3% less memory Not flagged
Queue an event (32-byte payload)
Shard: capture
Time per operation 16.18 µs/op 17.8 µs/op 10% more time Not flagged
Queue an event (32-byte payload)
Shard: capture
Process CPU time per operation 31.13 µs/op 33.88 µs/op 8.8% more time Not flagged
Queue an event (4,096-byte payload)
Shard: capture
Allocated memory per operation (estimated) 8.66 KiB/op 8.72 KiB/op 0.6% more memory Not flagged
Queue an event (4,096-byte payload)
Shard: capture
Time per operation 17.59 µs/op 16.03 µs/op 8.8% less time Not flagged
Queue an event (4,096-byte payload)
Shard: capture
Process CPU time per operation 33.72 µs/op 30.34 µs/op 10% less time Not flagged
Evaluate all 10 flags
Shard: flags-scaling
Allocated memory per operation (estimated) 132.2 KiB/op 133.49 KiB/op 1% more memory Not flagged
Evaluate all 10 flags
Shard: flags-scaling
Time per operation 294.78 µs/op 295.05 µs/op <0.1% more time Not flagged
Evaluate all 10 flags
Shard: flags-scaling
Process CPU time per operation 459.68 µs/op 460.6 µs/op 0.2% more time Not flagged
Evaluate all 100 flags
Shard: flags-scaling
Allocated memory per operation (estimated) 1.23 MiB/op 1.21 MiB/op 1.1% less memory Not flagged
Evaluate all 100 flags
Shard: flags-scaling
Time per operation 2.45 ms/op 2.47 ms/op 0.9% more time Not flagged
Evaluate all 100 flags
Shard: flags-scaling
Process CPU time per operation 3.77 ms/op 3.78 ms/op 0.3% more time Not flagged
Evaluate all 1,000 flags
Shard: flags-scaling
Allocated memory per operation (estimated) 12.14 MiB/op 12.11 MiB/op 0.2% less memory Not flagged
Evaluate all 1,000 flags
Shard: flags-scaling
Time per operation 26.67 ms/op 26.68 ms/op <0.1% more time Not flagged
Evaluate all 1,000 flags
Shard: flags-scaling
Process CPU time per operation 38.7 ms/op 38.87 ms/op 0.4% more time Not flagged
Evaluate 1,000 flags under concurrent load
Shard: flags-memory
Idle process memory (RSS) 272.7 MiB 272.3 MiB 0.1% less memory Not flagged
Evaluate 1,000 flags under concurrent load
Shard: flags-memory
Observed peak process memory (RSS) 272.76 MiB 272.34 MiB 0.2% less memory Not flagged
Evaluate 1,000 flags under concurrent load
Shard: flags-memory
Managed heap after settling 9.61 MiB 9.61 MiB <0.1% less memory Not flagged
Evaluate 1,000 flags under concurrent load
Shard: flags-memory
Process memory after settling (RSS) 272.58 MiB 272.22 MiB 0.1% less memory Not flagged
Evaluate 1,000 flags under concurrent load
Shard: flags-memory
Lifetime peak process memory (RSS) 273.91 MiB 273.49 MiB 0.2% less memory Not flagged
Refresh 1,000 flag definitions
Shard: flags-memory
Idle process memory (RSS) 227.21 MiB 227.32 MiB <0.1% more memory Not flagged
Refresh 1,000 flag definitions
Shard: flags-memory
Observed peak process memory (RSS) 239.63 MiB 240.26 MiB 0.3% more memory Not flagged
Refresh 1,000 flag definitions
Shard: flags-memory
Managed heap after settling 11.62 MiB 11.61 MiB <0.1% less memory Not flagged
Refresh 1,000 flag definitions
Shard: flags-memory
Process memory after settling (RSS) 235.24 MiB 235.95 MiB 0.3% more memory Not flagged
Refresh 1,000 flag definitions
Shard: flags-memory
Lifetime peak process memory (RSS) 241.91 MiB 242.17 MiB 0.1% more memory Not flagged
Evaluate one boolean flag
Shard: flags-single
Allocated memory per operation (estimated) 17.08 KiB/op 17.26 KiB/op 1% more memory Not flagged
Evaluate one boolean flag
Shard: flags-single
Time per operation 49.63 µs/op 50.2 µs/op 1.1% more time Not flagged
Evaluate one boolean flag
Shard: flags-single
Process CPU time per operation 55 µs/op 55.97 µs/op 1.8% more time Not flagged
Evaluate a cohort-filtered flag
Shard: flags-single
Allocated memory per operation (estimated) 14.23 KiB/op 14.14 KiB/op 0.6% less memory Not flagged
Evaluate a cohort-filtered flag
Shard: flags-single
Time per operation 28.19 µs/op 28.3 µs/op 0.4% more time Not flagged
Evaluate a cohort-filtered flag
Shard: flags-single
Process CPU time per operation 34.34 µs/op 34.29 µs/op 0.1% less time Not flagged
Evaluate a flag (early match)
Shard: flags-single
Allocated memory per operation (estimated) 17.79 KiB/op 17.66 KiB/op 0.7% less memory Not flagged
Evaluate a flag (early match)
Shard: flags-single
Time per operation 28.77 µs/op 28.78 µs/op <0.1% more time Not flagged
Evaluate a flag (early match)
Shard: flags-single
Process CPU time per operation 34.52 µs/op 34.17 µs/op 1% less time Not flagged
Evaluate a flag (late match)
Shard: flags-single
Allocated memory per operation (estimated) 22.53 KiB/op 22.32 KiB/op 0.9% less memory Not flagged
Evaluate a flag (late match)
Shard: flags-single
Time per operation 30.3 µs/op 30.31 µs/op <0.1% more time Not flagged
Evaluate a flag (late match)
Shard: flags-single
Process CPU time per operation 36.19 µs/op 36.27 µs/op 0.2% more time Not flagged
Evaluate a flag (no match)
Shard: flags-single
Allocated memory per operation (estimated) 16.85 KiB/op 16.99 KiB/op 0.9% more memory Not flagged
Evaluate a flag (no match)
Shard: flags-single
Time per operation 4.2 µs/op 4.16 µs/op 1% less time Not flagged
Evaluate a flag (no match)
Shard: flags-single
Process CPU time per operation 7.52 µs/op 7.67 µs/op 2% more time Not flagged
Evaluate a property-filtered flag
Shard: flags-single
Allocated memory per operation (estimated) 12.62 KiB/op 12.71 KiB/op 0.7% more memory Not flagged
Evaluate a property-filtered flag
Shard: flags-single
Time per operation 28.07 µs/op 27.34 µs/op 2.6% less time Not flagged
Evaluate a property-filtered flag
Shard: flags-single
Process CPU time per operation 33.43 µs/op 32.13 µs/op 3.9% less time Not flagged
Evaluate a regex-filtered flag
Shard: flags-single
Allocated memory per operation (estimated) 18.17 KiB/op 18.06 KiB/op 0.6% less memory Not flagged
Evaluate a regex-filtered flag
Shard: flags-single
Time per operation 54.13 µs/op 55.9 µs/op 3.3% more time Not flagged
Evaluate a regex-filtered flag
Shard: flags-single
Process CPU time per operation 60.06 µs/op 61.65 µs/op 2.7% more time Not flagged
Evaluate a rollout flag
Shard: flags-single
Allocated memory per operation (estimated) 14.48 KiB/op 14.25 KiB/op 1.6% less memory Not flagged
Evaluate a rollout flag
Shard: flags-single
Time per operation 39.35 µs/op 37.61 µs/op 4.4% less time Not flagged
Evaluate a rollout flag
Shard: flags-single
Process CPU time per operation 44.95 µs/op 41.51 µs/op 7.7% less time Not flagged
Evaluate a multivariate flag
Shard: flags-single
Allocated memory per operation (estimated) 17.4 KiB/op 17.45 KiB/op 0.3% more memory Not flagged
Evaluate a multivariate flag
Shard: flags-single
Time per operation 50.76 µs/op 52.32 µs/op 3.1% more time Not flagged
Evaluate a multivariate flag
Shard: flags-single
Process CPU time per operation 55.96 µs/op 58.83 µs/op 5.1% more time Not flagged

Values are medians of paired measurements. Not flagged does not mean unchanged. Unavailable means a measurement could not be provided, not zero. Estimated allocation measurements retain their instrumentation uncertainty. RSS measures the whole process, not just SDK allocations; observed peaks are sampled checkpoints. Paired ranges in the diagnostics describe variability, not confidence intervals.

Each shard uses its own runner; compare Before PR against With PR within a row, not across shards.

Compared 6ecef0294d17cc21fcb9943fb8a630f5ab422fb9 → f4fb0ff48e148107e9f75da4af71caa3d5b7bfb1.

Full report and diagnostics

102 metric rows; 102 rows shown in all results. Omitted or shortened data remain in comparison.json, including per-runner environments, resource limits, measurement methods, samples and checkpoints.

@turnipdabeets
turnipdabeets merged commit bc0a262 into chore/rn-plugin-v3 Nov 5, 2026
69 of 75 checks passed
@turnipdabeets
turnipdabeets deleted the fix/rn-plugin-surveys-trait-guard branch November 5, 2026 14:33
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.

2 participants