Document deduplication, what is sent, consent and worker mode - #55
Open
loevgaard wants to merge 1 commit into
Open
Document deduplication, what is sent, consent and worker mode#55loevgaard wants to merge 1 commit into
loevgaard wants to merge 1 commit into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## fix/33-housekeeping #55 +/- ##
======================================================
Coverage 81.97% 81.97%
Complexity 171 171
======================================================
Files 35 35
Lines 538 538
======================================================
Hits 441 441
Misses 97 97 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 7, 2026 12:03
0c0cd69 to
3b2efc9
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 7, 2026 12:03
50a47fc to
2fd1342
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 7, 2026 12:18
3b2efc9 to
f15ba02
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 7, 2026 12:18
2fd1342 to
8706e6a
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 7, 2026 12:47
f15ba02 to
a25a734
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 7, 2026 12:47
8706e6a to
a8816a6
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 7, 2026 12:51
a25a734 to
19e4dc4
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 7, 2026 12:51
a8816a6 to
c1ee41a
Compare
Fill the remaining gaps in the README: how the browser and server events are deduplicated, exactly which request data is sent to Meta and the trusted_proxies and query string caveats that come with it, what happens while consent is not granted, and that long running runtimes are supported. Fixes #31
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 7, 2026 12:57
19e4dc4 to
05661e3
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 7, 2026 12:57
c1ee41a to
c8953ac
Compare
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.
Fixes #31
The earlier PRs in this series already added the pipeline table, the enrichment example, the logging channel, the async routing rationale and the test event code lifecycle. This one closes the remaining gaps from the issue.
Deduplication between the browser and the server
With both sides on, the same event is sent twice on purpose. Nothing said so, or explained why that is fine:
Event::$eventIdis generated in the constructor and used aseventIDin thefbq()call andevent_idin the api payload, so Meta collapses the pair. Also spells out the one case where it breaks, namely assigning ids yourself and not using the same one on both sides.What is sent to Meta
A table of the four fields the bundle fills in by itself, plus the two things worth checking in the application:
framework.trusted_proxieshas to be configured, orgetClientIp()returns the load balancer's address and every visitor looks identical.event_source_urlis the full url including the query string, with a one-line listener for stripping it.Also states that personal data is hashed before it leaves the server and is not written to the transport.
Consent
What actually happens while consent is not granted: events are still built and enriched, but no tags are rendered, no command is dispatched, and neither cookie is written, each logged at debug level. And that everything counts as granted when the consent bundle is absent or the option is off.
Long running runtimes
Requirements now state that FrankenPHP worker mode, RoadRunner and Swoole are supported, since the cached contexts are reset between requests.