Repository navigation
Conversation
…#416) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.36.0 to 4.36.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@7211b7c...8aad20d) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.36.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ostHog#417) Bumps [planetscale/ghcommit-action](https://github.com/planetscale/ghcommit-action) from 0.2.20 to 0.2.21. - [Release notes](https://github.com/planetscale/ghcommit-action/releases) - [Commits](planetscale/ghcommit-action@25309d8...57a6c78) --- updated-dependencies: - dependency-name: planetscale/ghcommit-action dependency-version: 0.2.21 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@de0fac2...df4cb1c) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat: add logs API (captureLog + logger facade)
Add a structured-logs API wrapping the native SDKs:
- `Posthog().captureLog(body:, level:, attributes:, traceId:, spanId:,
traceFlags:)` and the `Posthog().logger.{trace,debug,info,warn,error,
fatal}(body, attributes?)` facade.
- Forwards over the method channel to native iOS `PostHogSDK.captureLog`,
Android `PostHog.captureLog`, and posthog-js `captureLog` on web. Batching,
persistence, rate-capping, OTLP transport, and auto-context are native.
- `config.logs` (PostHogLogsConfig): identity (serviceName, serviceVersion,
environment, resourceAttributes) and tuning (flushInterval, flushAt,
maxBatchSize, maxBufferSize, rateCapMaxLogs, rateCapWindow). All optional;
unset fields keep the native default.
- Dart-side `config.logs.beforeSend` drop/redact hook, run on every platform
via the shared `applyBeforeSend` helper (also used by event beforeSend);
callbacks can't cross the channel, so it is not forwarded to native.
- W3C trace fields are pass-through (not visible to beforeSend) and live on
captureLog only, not the logger facade, on all platforms.
Raises the posthog-android lower bound to 3.48.0 (PostHog/posthog-android#553,
first release with the public captureLog trace API).
Tests cover the Dart capture path, gating, beforeSend semantics, trace fields
(incl. explicit traceFlags=0), config serialization, the web handler, and the
iOS RunnerTests path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: floor logs flush/rate-cap window at 1s
Addresses Greptile review: a sub-second `flushInterval`/`rateCapWindow`
Duration truncated to 0 via `inSeconds`, which the native SDK treats as
"rate cap disabled" / continuous flushing. Floor both at 1s (the smallest
the seconds-granular native API can honor) and add a regression test.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: map log severity without iOS SDK's internal from(name:)
The iOS build failed: PostHogLogSeverity.from(name:) is `internal` in
posthog-ios, so the plugin can't call it. Map the wire level string to the
public enum cases with a local switch instead (unknown -> .info).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor: address logs PR review feedback
- beforeSend: a throwing hook now drops the log (fail closed, so a broken
redaction hook can't leak), logged so the bug stays visible. Matches
posthog-android. The shared helper just runs the callback now; each pipeline
applies its own policy (events continue, logs drop).
- logger: replace `late final` with a lazy getter + nullable backing field
(mirrors posthog-ios; no `late`).
- Parameterize the severity-mapping tests into one case per level.
- Floor sub-second flush/rate-cap durations at 1s so they can't truncate to 0.
- Trim the changeset and several comments; permalink the posthog-js reference.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: drop redundant beforeSend comments
The debugPrint and test names already convey the drop-on-throw behavior.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor: address review (ioannisj)
- Rename `config.logs` field to `config.logsConfig` to match
`sessionReplayConfig`/`errorTrackingConfig` (channel key stays `logs`).
- Copy `attributes` before beforeSend so a hook can't mutate the caller's map.
- iOS: lowercase the wire level in the severity switch (parity with Android).
- Update the beforeSend doc to reflect drop-on-throw.
- Run the browser-only web handler test in CI (`flutter test --platform chrome`).
- Changeset: note the posthog-android 3.48.0 requirement.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore: split CI lint jobs * chore: fix formatter checks
* docs: centralize SDK examples in official docs * docs: address review feedback
* ci: add Dart public API check * ci: remove unnecessary checkout fetch depth
* chore: run required checks on docs-only PRs * chore: short-circuit required checks for docs-only PRs * chore: reuse shared markdown-only detector * chore: use neutral markdown-only check wording * chore: limit docs-only short-circuit to required checks
* chore: add AI contribution policy * docs: avoid hardcoded year in AI policy
…ostHog#444) Bumps [planetscale/ghcommit-action](https://github.com/planetscale/ghcommit-action) from 0.2.21 to 0.2.22. - [Release notes](https://github.com/planetscale/ghcommit-action/releases) - [Commits](planetscale/ghcommit-action@57a6c78...a6b150b) --- updated-dependencies: - dependency-name: planetscale/ghcommit-action dependency-version: 0.2.22 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat: add addExceptionStep API for error tracking * chore: require posthog-android 3.51.0 and posthog-ios 3.61.0 for exception steps * feat: add exception steps example screen * fix: no-op addExceptionStep when exception steps are disabled * chore: format exception steps example screen * fix: implement addExceptionStep on web * refactor: return Map<String, Object> from exception steps toMap * fix: treat whitespace-only exception step messages as empty * fix: capture web exceptions via posthog-js captureException so steps attach * refactor: type _exceptionMessage properties as Object? not dynamic
* chore: update Flutter PopScope callback * chore: update Dart API snapshot
* chore: use pnpm setup runtime action * chore: document temporary node version duplication * fix: pin pnpm version for runtime setup * fix: avoid package manager mismatch in setup action * fix: use pnpm 11 package manager
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3 to 7.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@df4cb1c...9c091bb) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.2.0 to 5.3.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@be666c2...ad2b381) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore: add SDK compliance harness 0.8.0 * fix: address compliance adapter review comments * fix: pin compliance adapter Flutter image * fix: keep flags api key field * fix: address compliance adapter flush review
* fix: retry adapter flags requests on 502 and 504 * fix: address flags retry review feedback * chore: add flags retry changeset * chore: remove unnecessary changeset
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@ad2b381...1bcf9fb) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 5.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/cache/save](https://github.com/actions/cache) from 5.0.5 to 6.1.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@27d5ce7...55cc834) --- updated-dependencies: - dependency-name: actions/cache/save dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Anna Garcia <11654201+turnipdabeets@users.noreply.github.com>
) Bumps [actions/cache/restore](https://github.com/actions/cache) from 5.0.5 to 6.1.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@27d5ce7...55cc834) --- updated-dependencies: - dependency-name: actions/cache/restore dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Anna Garcia <11654201+turnipdabeets@users.noreply.github.com>
* feat: capture platform views in session replay screenshots Platform views (WebView, Maps, etc.) are masked by default in session replay — they appear as a black box rather than being captured or leaking native content. - Adds `maskAllPlatformViews` config flag (default `true`) - Adds `PostHogPlatformView` marker widget + `PostHogPlatformViewPrivacy` enum (`.mask` / `.capture`) for per-view override - iOS: `WKWebView.takeSnapshot` for capture; no `drawHierarchy` fallback (would leak masked CALayer-backed views into replay) - Android: PixelCopy + async bitmap compression; de-duplicates frames via `compositedBytesHash` - 5-second timeout on `captureNativeScreenshot` to prevent replay freeze - Example app: 8 test flows covering masked/captured combinations Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf: batch platform-view captures into one native channel call per frame Previously _compositeRevealedView made one captureNativeScreenshot call per captured platform view per frame, blocking on each round-trip before starting the next. N views = N sequential channel crossings, each carrying a PNG payload. Replace with captureNativeScreenshots (plural): a single channel call per frame that accepts a list of view specs and returns a list of byte arrays. The Dart side computes all geometries upfront, dispatches one awaited call, then loops to composite. On Android and iOS the single- view work is extracted into an internal callback-based helper and the batch handler chains them sequentially. Also adds _viewSpec helper to screenshot_capturer.dart so geometry computation is separated from compositing, and updates tests for the new API. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: fix Kotlin and Swift formatting; restore codec finally - ktlint auto-format: import ordering, statement wrapping, argument list wrapping, multi-space alignment in PosthogFlutterPlugin.kt - swiftformat auto-format: elseOnSameLine, wrapMultilineStatementBraces, preferKeyPath in PosthogFlutterPlugin.swift - Restore codec?.dispose() in finally block in _decodeImage (was lost when screenshot_capturer.dart was resynced during the batch refactor) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * perf: skip PNG codec for platform view captures — use raw RGBA Android: replace bitmap.compress(PNG) with getPixels() + RGBA packing. iOS: replace pngData() with a CGBitmapContext raw-pixel extraction. Dart: replace ui.instantiateImageCodec with ui.decodeImageFromPixels, passing the already-known spec dimensions from _viewSpec. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * style: dart format Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: correct pixel-format, crash guard, and API docs for platform-view capture - iOS imageToRawRgba: premultipliedLast to noneSkipLast; WKWebView snapshots are opaque so premultiplied bytes caused double-multiply against Skia - Dart: guard bytesList[i] with bounds check to prevent RangeError on short response - Android captureNext: add w<=0||h<=0 guard matching the singular handler - PostHogPlatformViewPrivacy.capture: document iOS WKWebView-only limitation - Add platform_view_privacy_test.dart for tree-walk privacy inheritance logic Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(ios): use point dimensions in imageToRawRgba, not physical pixels WKWebView.takeSnapshot returns a UIImage at UIScreen.main.scale (2x/3x on Retina). cgImage.width/height are physical pixels; Dart decodes the buffer at logical-point dimensions from _viewSpec. The mismatch produced a byte buffer 4x/9x too large, garbling the WebView image in every replay frame on non-1x devices. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * style: remove chatty inline comments from privacy inheritance test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(android): guard PixelCopy.request against SurfaceView detach race PixelCopy.request throws IllegalArgumentException if the SurfaceView detaches between the isAttachedToWindow guard and the call. This runs inside a PixelCopy callback so it isn't caught by the outer try-catch in handleCaptureNativeScreenshots. Wrap in try-catch and recycle the bitmap on failure so we advance cleanly rather than crashing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * review: batch tests, constant extraction, and changeset syntax fix - Add Kotlin tests for captureNativeScreenshots: no-activity, empty views, zero-dimension entry - Extract FLUTTER_VIEW_CLASS_PREFIX constant for repeated "io.flutter" string in Kotlin - Remove unnecessary dart:typed_data import from native_communicator_test.dart - Fix changeset enum syntax: .capture → PostHogPlatformViewPrivacy.capture (Dart, not Swift) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): use JUnit assertions in Kotlin zero-dimension batch test Kotlin stdlib assert() is silently disabled when JVM assertions are off (-ea not set), which is the default in Android Gradle test runs. Replace with assertEquals/assertNull from JUnit 4 so the assertions always run. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(android): recycle bitmap when Flutter SurfaceView has zero dimensions When `captureOneNative` encounters a Flutter SurfaceView with width or height ≤ 0 (possible on the first frame or during layout transitions), the subsequent `coerceIn(0, width - 1)` call would throw an IllegalArgumentException because min > max. The pre-allocated bitmap was not recycled on this path, causing a memory leak. Guard added before the coordinate calculations: recycle the bitmap and return null immediately when the SurfaceView has no dimensions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: skip redundant native capture for TextureBox, guard cancellation, cleanup - TextureBox with capture policy is now skipped in _addIfNew: its content is already composited into the Flutter image, so a PixelCopy overlay is a no-op that wastes CPU/GPU every frame - Added _cancelled guard immediately after captureNativeScreenshots await, consistent with all other async boundaries in the capture path - Suppressed zero-platform-view printIfDebug noise: only log when masked or captured list is non-empty - Added macOS note to PostHogPlatformViewPrivacy.capture doc: capture is unsupported on macOS and silently falls back to masking - Renamed screenshotCompressionExecutor → bitmapExportExecutor: the thread exports raw RGBA bytes, not compressed screenshots Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: ignore .ralph/ session-tracking directory Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(example): explicit privacy wrappers and global setting visibility - Extract kMaskAllPlatformViews constant so the per-view override screen can display the current global value, making expected replay behaviour unambiguous to anyone reading the example - Add explicit PostHogPlatformView(privacy: .mask) wrapper to the right WebView in _CapturedAndMaskedWebViews so the test is deterministic regardless of the global setting Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: capture exception cause chains * fix: address exception cause feedback
PostHog always answers /flags/?v=2 with the flags key. The v1 fallback is kept for servers that ignore v=2, matching posthog-js, iOS, Android and Python, and now says so.
Tear-downs run in reverse order, so a directory created after the platform was deleted while the platform still held its lock file open. Windows refuses that deletion, which failed two setup tests there. The directory is now created first.
posthog-ios 4.0 removes PostHogDataMode.cellular, which always behaved like .any. Map the Dart "cellular" value to .any in the plugin and deprecate PostHogDataMode.cellular in Dart.
group('company', 'free-company') after group('company', 'paid-company',
groupProperties: {'plan': 'pro'}) kept the paid company's properties, so the
next /flags request evaluated free-company with plan = pro. A new key for a
group type now clears the flag properties stored for that type before the
new ones are applied, as posthog-js does.
StarProxima
force-pushed
the
feat/desktop-platform-support
branch
from
October 5, 2026 15:46
8fdd633 to
266a0f5
Compare
…rm-support # Conflicts: # posthog_flutter/pubspec.yaml
…ostHog#635) * chore: deprecate PostHogWidgetState and PostHogMaskWidgetState Both are exported only because they are public by accident; they expose no usable members. Deprecating now lets the next major make them private. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore: update API snapshot for deprecated widget states Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore: mark widget states @internal and hide them from exports Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rm-support # Conflicts: # posthog_flutter/pubspec.yaml
Bumps the codeql-action group with 2 updates: [github/codeql-action/init](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action). Updates `github/codeql-action/init` from 4.38.0 to 4.38.2 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@b96794f...2892aa5) Updates `github/codeql-action/analyze` from 4.38.0 to 4.38.2 - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@b96794f...2892aa5) --- updated-dependencies: - dependency-name: github/codeql-action/init dependency-version: 4.38.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: codeql-action - dependency-name: github/codeql-action/analyze dependency-version: 4.38.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: codeql-action ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
) Bumps the pub-dependencies group with 3 updates: [cupertino_icons](https://github.com/flutter/packages/tree/main/third_party/packages), [google_maps_flutter](https://github.com/flutter/packages/tree/main/packages/google_maps_flutter) and [stack_trace](https://github.com/dart-lang/tools/tree/main/pkgs). Updates `cupertino_icons` from 1.0.9 to 2.0.0 - [Release notes](https://github.com/flutter/packages/releases) - [Commits](https://github.com/flutter/packages/commits/cupertino_icons-v2.0.0/third_party/packages) Updates `google_maps_flutter` from 2.18.1 to 2.18.2 - [Release notes](https://github.com/flutter/packages/releases) - [Commits](https://github.com/flutter/packages/commits/google_maps_flutter-v2.18.2/packages/google_maps_flutter) Updates `stack_trace` from 1.12.1 to 1.12.2 - [Release notes](https://github.com/dart-lang/tools/releases) - [Commits](https://github.com/dart-lang/tools/commits/stack_trace-v1.12.2/pkgs) --- updated-dependencies: - dependency-name: cupertino_icons dependency-version: 2.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: pub-dependencies - dependency-name: google_maps_flutter dependency-version: 2.18.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pub-dependencies - dependency-name: stack_trace dependency-version: 1.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pub-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ostHog#636) * feat: add optIn/optOut and sendFeatureFlagEvent, deprecate old names Match the names used by posthog-ios, posthog-android and posthog-react-native. The old names forward to the new ones, so behavior is unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore(api): record @deprecated accessors in the API snapshot dart_apitool misses annotations on explicit getters/setters; the annotate step already patched @experimental, now it also patches @deprecated. This marks sendFeatureFlagEvents, plus the already-deprecated apiKey and debouncerDelay, as deprecated in the snapshot. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* fix(replay): stop session replay when the user opts out disable() left the Flutter screenshot loop running after opt-out. Stop it before the platform opt-out, and start a new recording on opt-in only if a recording was actually stopped. * docs(replay): keep opt-out ordering out of the public docs Callers do not need the native stop and start constraints. Those notes now sit next to the calls. * fix(replay): address review on opt-out replay stop Send the native stop and disable back to back instead of awaiting the stop first, so a capture() after an un-awaited optOut() still reaches native after the opt-out. Skip the stop and restart on web, where posthog-js already drops replay while opted out and a restart would override a replay disabled in posthog.init. Name iOS as the platform that ignores startSessionRecording while opted out. Co-authored-by: Omid Mirzaei <omidomirzaei@gmail.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Anna Garcia <anna.g@posthog.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…test-sdk-action.yml (PostHog#650) Bumps [PostHog/posthog-sdk-test-harness/.github/workflows/test-sdk-action.yml](https://github.com/posthog/posthog-sdk-test-harness) from 03d972e49be84402c491324320b0a0f38c2ddc53 to 27806196fa5c5ac74e9e7500bc46b74db1869f3a. - [Release notes](https://github.com/posthog/posthog-sdk-test-harness/releases) - [Changelog](https://github.com/PostHog/posthog-sdk-test-harness/blob/main/CHANGELOG.md) - [Commits](PostHog/posthog-sdk-test-harness@03d972e...2780619) --- updated-dependencies: - dependency-name: PostHog/posthog-sdk-test-harness/.github/workflows/test-sdk-action.yml dependency-version: 27806196fa5c5ac74e9e7500bc46b74db1869f3a dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
) * feat(surveys): honor surveyPopupDelaySeconds before showing Wire the appearance field through native maps and Dart models, wait in SurveyService with cancel/replace semantics, and add widget tests. Fixes PostHog#322 * fix(surveys): address review on popup delay Wait out the delay on the same pending-show completer the context wait uses, so a survey with no context after its delay waits for the next navigation instead of being closed, and hideSurvey or a newer survey cancels either wait. A navigation during the delay no longer cuts it short. Cap the delay at one day so huge values can't overflow, drop the redundant generation counter, and make the changeset a minor. Co-authored-by: Omid Mirzaei <omidomirzaei@gmail.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(surveys): address review findings on popup delay Don't call onClosed for a survey hidden or replaced during its popup delay. The user never saw it, so it must not be marked seen or send `survey dismissed`, matching the wait-for-context path and the Android surveys host. Native has already dropped that presentation by the time Flutter cancels the delay, so nothing is left waiting for a close. Make the replacement test fail if the replaced survey's timer keeps running and shows the newer survey early. Co-authored-by: Omid Mirzaei <omidomirzaei@gmail.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Anna Garcia <anna.g@posthog.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Summary
Temporary draft PR used to validate Windows/Linux support in the fork before submitting it upstream. Superseded by PostHog#621 and closed after that PR was opened. The branch is retained for the upstream contribution.
Validation
On commit
39a7398, Windows/Linux tests and release examples passed, along with Android/iOS/macOS/web builds, general/browser tests, analysis, formatting, publish dry run and the public API snapshot. Local validation passed 1,099 tests with one skipped.CI: https://github.com/SnowLukin/posthog-flutter/actions/runs/36560854993
The separate iOS plugin tests are still running. Swift CodeQL could not start because of the fork's billing/spending limit for the paid macOS runner.