Repository navigation
chore: sync main into capture-v1 (posthog-node 5.58.0-5.61.1) - #5508
Conversation
(cherry picked from commit 670189f)
…led (#5422) Read the active span from the global registry of @opentelemetry/api v1. Do not import the optional peer. A literal import made esbuild fail the build when the peer was not installed. A variable import makes webpack warn and drop the module. Add a test that bundles the built ESM and CJS entrypoints with esbuild when @opentelemetry/api cannot resolve. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 0d603b98-9825-4f1c-8261-e50c33c8a122 Co-authored-by: posthog[bot] <206114724+posthog[bot]@users.noreply.github.com> (cherry picked from commit b5036c4)
(cherry picked from commit 196b7f9)
* chore: clear the Coherence spec problems reported on every PR Drop two commit ids from the add-an-invariant practice that exist in no branch of this repo, and give the two Otel spec bullets a name so spec --check passes. Generated-By: PostHog Desktop Task-Id: 822cb54b-55fa-4576-a107-1e406f72d9de * chore: cite the Coherence adoption merge commit in place of its lost branch commits ddaaf68 is the squash merge of the PR that held 187a5c5 and 8922ab2, so the practice keeps its evidence and the citation resolves on main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 4189fcb8-6fd5-428d-8c5f-4314d28e4dac (cherry picked from commit 2e98ca8)
…entifiers (#5429) * fix(browser): only re-read Meta identifiers when persistence storage changed capture() refreshed $fbc and $fbp from storage on every event, and every persistence write did the same. Each refresh parsed the whole persistence entry, and on localStorage+cookie it also wrote the entry back. With many feature flags this made click handlers slow (#5428). The refresh now compares the raw storage text with the text seen when the identifiers last matched storage, and parses only when it differs. Adds capture-hot-path tests that count parses of the persistence entry per capture, so CI fails if hot-path storage work comes back. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 6ab57ee6-6279-4378-b074-ed4f92849780 * chore(browser): write mangled property names Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 6ab57ee6-6279-4378-b074-ed4f92849780 * fix(browser): skip Meta identifier refresh while disabled, and remember the pre-parse snapshot refreshMetaIdentifiers() read storage even when persistence was disabled. It now returns first. A refresh now remembers the storage text read before the parse, so a sibling write that lands during the parse is seen on the next refresh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Generated-By: PostHog Desktop Task-Id: 6ab57ee6-6279-4378-b074-ed4f92849780 (cherry picked from commit 1034948)
(cherry picked from commit 64f8a43)
* fix(replay): enable synchronous fetch by default for new cores * docs(types): correct replay sync fetch default changeset (cherry picked from commit cb34fe0)
(cherry picked from commit dfff34b)
Generated-By: PostHog Desktop Task-Id: 5681be44-4986-48db-b140-1bda88f75f96 (cherry picked from commit cb0482a)
(cherry picked from commit acdbdd2)
(cherry picked from commit 199de5e)
…ng throws "The response type must be an integer" when skipped (#5279) * Fix #5278: Surveys: an optional rating question with response-based branching throws "The r * fix: complete surveys when skipping final optional ratings * fix: adapt optional rating survey fix to shared renderer --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Dustin Byrne <dustin@posthog.com> (cherry picked from commit d47c184)
(cherry picked from commit 615a550)
* feat(react-native): add projectToken and deprecate apiKey Rename the internal apiKey names in core and RN to projectToken. * test(browser): record synchronous replay fetch in current-core goldens #5335 updated 6 of the 20 __preview_replay_sync_fetch values per file; this updates the remaining 14 in replay snapshot payloads. (cherry picked from commit 43ad061)
(cherry picked from commit 1833505)
(cherry picked from commit 39ff01a)
(cherry picked from commit 1c165cc)
* feat(browser): support latest configuration defaults * docs(browser): regenerate latest defaults API reference * test(nextjs): restore Next 16 fixture and dependency cooldown * fix(browser): report resolved latest defaults date on events * refactor(browser): derive latest defaults date from supported dates (cherry picked from commit 3150079)
(cherry picked from commit b98cf1f)
(cherry picked from commit 87bca7a)
…5244) * perf(rrweb): port upstream mutation-buffer O(n²) fix (fixes #5227) Port the processBufferedMutations algorithmic core from upstream rrweb-io/rrweb PR #1652 (merged 2026-09-17 by @eoghanmurray). The addList-based drain used to tail-rescan every pass, so a single render mounting many sibling nodes (e.g. a 50x35 table ~13k nodes) blocked the main thread for ~10 s. The new topological-order drain iterates this.addedSet with dom.previousSibling / dom.lastChild / dom.nextSibling to reach a node whose parentId is already in the mirror BEFORE touching its children, so pushAdd never defers onto a secondary queue that needs rescanning. Nodes whose parent cannot be resolved for this emission land in missingParents so their descendants early-out through the same set — preserving the previous 'escape the dead while loop' guarantee without the O(n²) cost. PostHog customizations stay intact. pushAdd keeps isBlockedAtEmission, shadow-host reparenting, serializationOptions caching, canvasMaskingConfigured, iframe/stylesheet attach callbacks and the cross-origin iframe shadow fix from #5150. It now returns boolean so the new driver can mark deferred subtrees without silently dropping nodes. mapRemoves is still drained before pushAdd so the reparent- detection order documented in record/index.ts is preserved. Added three untainted-prototype accessors to @posthog/rrweb-utils — previousSibling, nextSibling, lastChild — matching the existing getUntaintedAccessor('Node', ...) pattern. The new drain reads sibling pointers in the hot path and native .previousSibling would bypass the Angular Zone taint defense parentNode already uses. All three are added to testableAccessors.Node so taint detection still fires if any of them are patched by third-party code. One pre-existing integration snapshot (record integration tests > should record after DOMContentLoaded event) is updated to reflect the new emission order of the standalone type:1 Load event, which upstream rrweb #1652 also reordered. The event stream remains well-formed and replayable because mutations stay in parent-before-child topological order. DoubleLinkedList class and the unused Optional type import are removed — they were only referenced by the pre-fix drain loop. New regression test in mutation-child-traversal.test.ts mounts 500 rows x 3 cells (~2000 nodes) in a single render and asserts every emitted add has a resolved parentId plus a fully drained addedSet — guards against the pre-fix regression where the 'escape the dead while loop' fallback dropped entire subtrees once the addList rescan budget blew up. Attribution — algorithmic approach ported from upstream commits that landed in rrweb-io/rrweb#1652: 565e390 Iterate over the added nodes in 'one pass' 90d4b01 Performance oriented refactor focusing on large-batch scenario c013727 Utilize lastChild to avoid crawling through hundreds of nodes 325e211 Skip a step using existing nextSibling * fix(rrweb): shadow DOM walk-up + warning + changeset per @TueHaulund review Addresses all five review comments on PR #5244. 1. Shadow DOM content was silently dropped. When a node whose parent is a ShadowRoot gets handled before the shadow host, the walk-up loop's addedSet lookup never resolved — the walk-up stopped at the shadow root while pushAdd translates ShadowRoot -> host for the parentId. Result: shadow children emitted with parentId -1 and the push failed silently. Fix: translate ShadowRoot -> host inside the walk-up loop AND the missing-parents propagation step, mirroring pushAdd. The existing 'should record moved shadow DOM 2' integration test is the regression that catches this and passes with the fix. 2. Reverted the integration.test.ts.snap change (Load event reorder). The ordering is environment-dependent locally for me, but per Tue's review the original snapshot passes in the CI environment and the updated one failed, so I defer to that. 3. Added a basic jsdom correctness test asserting the parentId-resolvable invariant for every emitted add. Marked it explicitly as a weaker coverage test — the strong regression lives in integration.test.ts > 'should record moved shadow DOM 2' which needs the puppeteer harness. A full port of upstream rrweb #1652's mutation.test.ts fixture suite is a reasonable follow-up iteration if the review wants more. 4. Added console.warn when a node is deferred past this emission, matching upstream rrweb's phrasing. Silent drops here historically masked the shadow DOM regression; the warning means future regressions announce themselves in the browser console. 5. Added a changeset bumping posthog-js + @posthog/rrweb + @posthog/rrweb-utils so release-please actually publishes the fix. * test(rrweb): regression bench for long sibling runs under single parent (#5227) @yuetong3yu reported a second independent repro on 2026-10-15 (Svelte 5 + bits-ui Portal, ~50k empty comment/text anchors as direct children of <body>, scaling ~n^1.8 on 1.438.7). The port of upstream rrweb-io/rrweb#1652 in this branch drains addedSet in topological order and never re-queues, so per-node cost should stay flat. This test locks the invariant: 500-node vs 5000-node batch under one parent, assert per-node drain stays within 5x (well above jsdom noise, well below the pre-fix n^1.8 regression). Also covers mixed comment+text+element shape and the no-silent-drop property. No src/ changes. * fix(rrweb): sanitize masked-node descriptor in diagnostic warn (@marandaneto) The warning added in 8aeafb2 to surface deferred nodes passed `n` directly as the second console.warn arg. Verified against `rrweb-plugin-console-record/src/stringify.ts` lines 153-155: } else if (value instanceof Node) { if (value instanceof HTMLElement) { return value ? value.outerHTML : ''; With console recording enabled, the plugin stringifies any `Node` argument via `outerHTML` — the diagnostic would persist the raw masked content into a `rrweb/console@1` event. Reviewer-reproduced on 2026-10-21 via the exact-head `review-5244-privacy.test.ts` scenario (unblock container + insert `rr-mask` before an unmirrored sibling → masked plaintext in the console payload). Fix: build a sanitized descriptor from `tagName.toLowerCase()` + the `nodeType` code and pass that string instead. The warning still tells operators that a node was dropped (the reason the warn exists after @TueHaulund review) but can no longer leak masked DOM to a console-record consumer. Also adds `test/record/review-5244-privacy.test.ts`, a static regression test that greps the warn block for the pre-fix shape (`, n,` / `, n)`) and asserts the descriptor + rationale comment survive future refactors. Static-only so the vitest harness in `packages/rrweb` can run it without a browser; CI covers it. Reported-by: Marco Antonio Alvarez <marandaneto> Thanks for the privacy catch on the diagnostic. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> * test(rrweb): fix stale DOMContentLoaded Load-event snapshot ordering The should record after DOMContentLoaded event snapshot carried the pre-#4976 event order where `init()` ran synchronously inside the DOMContentLoaded listener. PR #4976 deferred `init()` via `setTimeout(init, 0)` in `src/record/index.ts` so page-level non-capture DOMContentLoaded listeners (mask/block classes) can run before the snapshot. The deferral means the window `load` event reaches `wrappedEmit` *before* `init()` runs `takeFullSnapshot`, so the `type: 1` (Load) record now follows the `type: 4` (Meta) and `type: 2` (FullSnapshot) records instead of preceding them. The snapshot update reflects the actual emission order the production code produces. Verified locally with `vitest run test/integration.test.ts` (50/50 pass). This change is independent of the mutation-buffer port in this PR; isolated it rather than bundling so the diff stays reviewable. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> * test(rrweb): address mutation ordering review feedback * fix(rrweb): address TueHaulund review on #5244 Six changes, one logic tweak, one test rewrite: - src/record/mutation.ts: one summary console.warn per emit() instead of one warn per dropped node. Per-node warns cascade through subtrees (a 13k-node table loses its parent -> 13k warn lines, and with console recording on those lines land in the replay). - src/record/mutation.ts: comment on the pushAdd return value now says "dropped" instead of "deferred" (the pending set is cleared at the end of emit, nothing retries it). - src/record/mutation.ts: strip reviewer names and PR references from code comments. History belongs in the PR description, not the source tree. - src/record/mutation.ts: match upstream rrweb's self+ancestor exempt for movedSet when deciding whether to drop an addedSet entry. Upstream uses isSelfOrAncestorInSet here; we were only checking ancestors. - .changeset/rrweb-mutation-buffer-on2-fix.md: drop reviewer credit from the public CHANGELOG entry, keep the behavior description. - test/record/review-5244-privacy.test.ts: deleted. Replaced by test/record/mutation-drop-warn-is-sanitized.test.ts, which spies on console.warn and asserts no Node argument and no masked content leaks, independent of source grep. - test/record/mutation-child-traversal.test.ts: dropped the basic drain correctness test — the 15 ordering tests ported from rrweb-io/rrweb#1652 now cover the same invariant. Removed the elapsedMs < 5000 wall-time gate; the addedSet-residue assertion is the structural proof. - test/record/mutation-sibling-run.test.ts: dropped per-node timing comparison across batch sizes (flaky under GC jitter). The new shape asserts residue and served-count invariants instead. Local vitest run: 38/38 pass across the 8 mutation test files touched. The three mutation.test.ts snapshot failures introduced in 02916d1 are untouched and remain for the author of that change. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> * fix(rrweb): drain walk skips IGNORED_NODE siblings (fasyy612 review) The forward sibling walk inside the topological drain broke on the first sibling not in addedSet. But getNextId skips past IGNORED_NODE siblings when computing nextId, so a node inserted BEFORE an ignored sibling (e.g. a slimDOM-filtered <script>) could be dropped when the next new sibling sits AFTER the ignored node — the walk would stop at the ignored sibling and never reach the later addition. The ported upstream #1652 fixtures all exercise contiguous addedSet siblings and hit the lastChild jump above the walk, so they miss this path entirely. @fasyy612 flagged it with the right fix shape: probe past mirror.getId(ns) === IGNORED_NODE siblings before deciding to break, matching getNextId's own loop. New fixture at test/record/mutation-ignored-sibling-skip.test.ts covers both the positive case (sibling after ignored node still ships) and the termination case (sibling after ignored node not in addedSet and the walk stops instead of looping). Local vitest: 40/40 pass across the 9 mutation test files. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> * fix(rrweb): three test fixes per TueHaulund second-pass review - test/record/mutation-drop-warn-is-sanitized.test.ts: deleted. The test called `console.warn` itself and asserted on that call, so it did not exercise the mutation buffer and would still pass if the real warn leaked a node. The real sanitization is now a one-line `console.warn(string)` that cannot carry a Node argument by construction; a self-referential test on top of that has no catching power. Per @TueHaulund's offer to delete if a real repro is a pain. - test/record/mutation-ignored-sibling-skip.test.ts: rewritten to actually hit the bug @fasyy612 flagged. The previous fixture (a) added the <script> in the same batch, so it was not yet IGNORED_NODE when the walk ran, and (b) put the new node as lastChild, so the lastChild jump above the walk skipped the walk entirely. Confirmed by reverting the probe-past-IGNORED fix locally: the new fixture now fails on the pre-fix walk and passes on d80c33f. The three conditions that must line up are called out in a comment at the top of the file so the next refactor does not quietly weaken the test. - test/record/mutation-sibling-run.test.ts: the previous `addedSet.size === 0` residue checks could never fire because `emit()` swaps in a fresh empty addedSet before the drain runs. Replaced with sibling-lookup counts via a patched dom.previousSibling / dom.nextSibling / dom.lastChild — lookups-per-node must stay flat as batch size grows 10x. This is the invariant that actually caught the pre-fix ~n^1.8 scaling in reports. Removed the symmetric residue check in mutation-child-traversal.test.ts for the same reason. Local vitest after the three fixes: 36/36 pass across the eight mutation test files (the sanitization file is gone). The ignored- sibling test confirmed to fail without the probe-past-IGNORED patch. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> * fix(rrweb): scrub comment history, tighten assertions, interleaved-IGNORED guard Follow-up to third-pass review on #5244. Comment hygiene across mutation.ts, utils/src/index.ts, and the four mutation-* test files: drop reviewer handles, PR numbers, and commit SHAs from inline comments. Replace 'defer' with 'dropped' where the code path actually drops nodes. Remove the stale addList-era narrative in genAdds. mutation-sibling-run.test.ts: reframe the test as a scaling guard on the new drain rather than a direct regression on the old addList path (which never called the sibling helpers). Fix the scaling-margin narrative — n^1.8 total is ~6x per node for a 10x batch, not ~63x. mutation-child-traversal.test.ts: assert exact add count (3500 = 500 rows + 1500 cells + 1500 text nodes) and parent-before-child ordering by id, instead of the always-passing 1000 lower bound. mutation-ignored-sibling-skip.test.ts: drop the always-zero addedSet.size residue check — emit swaps in a fresh addedSet before the drain so the check cannot fail. mutation.ts drain: backward fast path at line 436 now probes past IGNORED_NODE siblings symmetric with the forward walk at line 476. Without this, slimDOM-ignored comments or scripts interleaved between new siblings force the drain back to walk-up/descend per node, regressing to O(n^2). mutation-interleaved-ignored.test.ts (new): scaling guard with <script>-interleaved siblings; per-node lookup count stays flat as batch grows 10x. Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> --------- Signed-off-by: Abd Alrahaman <abdarahman10555@gmail.com> Co-authored-by: Manoel Aranda Neto <marandaneto@gmail.com> (cherry picked from commit 52c84e2)
(cherry picked from commit 8e3b8f5)
* ci: run the sourcemap plugins through the error tracking harness Packs the plugins and the SDKs they are tested with, then runs PostHog/error-tracking-harness against them: real posthog-cli releases, real bundlers, a mock PostHog and an app whose exceptions must resolve to their source lines. The image is pinned by digest and runs with no network. Advisory until the matrix has been quiet for a while. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * ci: pull the harness image anonymously The package is public, like sdk-test-harness-v2, so the job needs no registry login and runs with contents: read only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * ci: pin merged lifecycle harness image and use named overrides * ci: select affected error tracking fixtures and bind current core * ci: bind complete fixture dependencies in error tracking harness * ci: prepare selected harness fixtures in a subject image * test(ci): describe prepared harness image smoke checks * ci: pin published prepared-subject harness image * ci: exercise lazy exception autocapture with PR tarballs * ci: run fixed plugin smoke suite through reusable harness * ci: build pinned harness source for PR smoke tests * ci: upsert smoke results as a PR comment * ci: pin published error-tracking harness image digest * ci: exercise Next 16 smoke and secure PR reporting * ci: pin published eight-fixture harness image --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit ed9ef47)
* fix(browser): Refresh identity on bfcache restore Generated-By: PostHog Desktop Task-Id: dd368b5c-40fc-49ac-9fc0-4c3c321bfb36 * fix(browser): Update mangled property names for bfcache identity Generated-By: PostHog Desktop Task-Id: dd368b5c-40fc-49ac-9fc0-4c3c321bfb36 --------- Co-authored-by: posthog[bot] <206114724+posthog[bot]@users.noreply.github.com> (cherry picked from commit 8a9a066)
(cherry picked from commit 90c7342)
#5443) * Fix #5442: Expo 57 example: pnpm install fails with ERR_PNPM_TRUST_DOWNGRADE * test: remove Expo resolver configuration assertion --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Dustin Byrne <dustin@posthog.com> (cherry picked from commit 6662c41)
…5431) * chore(react-native): deprecate flag APIs removed in the next major * chore(react-native): keep getFeatureFlagDetails, deprecate useFeatureFlagWithPayload Add doc summaries to the deprecated flag APIs so the reference shows them. * chore(react-native): deprecate overrideFeatureFlag in favor of updateFlags (cherry picked from commit 96d7ff2)
* feat(browser): add a single-tag SDK loader * fix(browser): complete loader queues and report configuration errors * feat(browser): support deferred initialization in the script loader * docs(browser): clarify optional loader crossorigin attribute * fix(browser): preserve SDK defaults and track loader build inputs * fix(browser): pair loader aliases with immutable SDK releases * test(browser): record static-loader deployment goldens * test(browser): exercise automatic loader in deployment snapshots * test(browser): refresh loader goldens after merging main * fix(browser): preserve named loader initialization in automatic mode (cherry picked from commit 285d874)
|
Replay incident risk checkThis diff touches code involved in past incidents. This is a heads-up, not a verdict: read the matched sections of INCIDENTS.md and answer their review questions before merging. For a judgment on whether this diff has the same failure mode, run the |
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 ( 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)
What this means and how to fix itInput 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
To get the line to add, run |
|
Size Change: +200 kB (+0.79%) Total Size: 25.5 MB 📦 View Changed
ℹ️ View Unchanged
|
Error tracking smokeCommit: 7/8 passed (0 skipped, 0 uncovered)
|
Node SDK compliance v2Commit: 3800059 Capture v1 — acceptance✅ 143 passed / ❌ 4 non-passing / Drill-down: run artifacts → ❌ server_snapshot_payload_false — failed_assertionExpected native data result Code: Failed step: acceptance/public/evaluate-flags.feature:868 the public snapshot outcomes should have these semantics: ❌ server_snapshot_payload_zero — failed_assertionExpected native data result Code: Failed step: acceptance/public/evaluate-flags.feature:868 the public snapshot outcomes should have these semantics: ❌ server_snapshot_payload_null — failed_assertionExpected native data result Code: Failed step: acceptance/public/evaluate-flags.feature:868 the public snapshot outcomes should have these semantics: ❌ migration/yaml-parity-v1/remote-flags-v1.feature::Omitted GeoIP settings default to enabled in flag requests — failed_assertionFlags field differs Code: Failed step: migration/yaml-parity-v1/remote-flags-v1.feature:134 the first flags request field "geoip_disable" should equal JSON false Operation: Field: Expected: false Actual value: true Harness exit: 1; report validation exit: 1. Capture v1 — migration✅ 115 passed / ❌ 1 non-passing / Drill-down: run artifacts → ❌ migration/yaml-parity-v1/remote-flags-v1.feature::Omitted GeoIP settings default to enabled in flag requests — failed_assertionFlags field differs Code: Failed step: migration/yaml-parity-v1/remote-flags-v1.feature:134 the first flags request field "geoip_disable" should equal JSON false Operation: Field: Expected: false Actual value: true Harness exit: 1; report validation exit: 1. |
The synced main test (#5315) packs the workspace posthog-node into the nuxt tarball. On capture-v1 that is posthog-node 6, which needs the unreleased @posthog/core V7Generator, while the test pulls @posthog/core from npm. @posthog/nuxt stays on posthog-node 5 from npm here (^5.58.0), so the test now packs only nuxt and installs posthog-node from the registry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Problem
mainshipped posthog-node 5.58.0 through 5.61.1 aftercapture-v1forked, so node 6 would drop those features and fixes: the OTel context processor, thesendFeatureFlagEventsoverride, the opt-in posthog-js cookie fallback (readPostHogCookie),emails.send, and the unhandled-rejection fix, plus the matching core, ai, mcp, next and nuxt changes.Changes
-xpicks of everymaincommit since the fork, in order, release commits included (82 commits). Left out:bd41fe419(already here as fix(nextjs): restore accurate integration fixtures and cooldown compliance #5451) and ci(node): run unified SDK acceptance once per profile #5452, whose v0/v1 CI matrix does not apply to the v1-only CI on this branch.options;emails.sendand the unhandled-rejection fix fit node 6's lanes and options-objectcaptureException; the email backoff test targets/i/v1/analytics/events.captureTracingHeaders: false, only the tracing headers turn off.readPostHogCookiealone controls the cookie fallback, so the fallback still works with headers off; to stop all request linking, leavereadPostHogCookieoff.@posthog/nextand@posthog/nuxtnow require posthog-node^5.58.0, the first version with the span-context helpers their synced code imports. Three exact-versionminimumReleaseAgeExcludeentries let it resolve before it is 7 days old; they can go after 2026-11-04.main; all pending node-6 changesets are kept.@posthog/nuxt, since nuxt stays on npm posthog-node 5 here; packing the workspace node 6 against npm@posthog/corefailed the build.main, and the CocoaPods example jobs were cancelled by the macOS 14 runner brownout.Release info Sub-libraries affected
Libraries affected
Checklist
If releasing new changes
pnpm changesetto generate a changeset file🤖 Agent context
Autonomy: Human-driven (agent-assisted)
claude-opus-5-5), following the release runbook's main-sync step and fix(nextjs): restore accurate integration fixtures and cooldown compliance #5451's method.🤖 Generated with Claude Code