Document deduplication, what is sent, consent and worker mode - #55
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #55 +/- ##
=========================================
Coverage 90.49% 90.49%
Complexity 148 148
=========================================
Files 31 31
Lines 484 484
=========================================
Hits 438 438
Misses 46 46 🚀 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
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
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 07:29
05661e3 to
1c561a1
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 07:29
c8953ac to
d17cc8a
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 07:39
1c561a1 to
a1ba85f
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 07:39
d17cc8a to
3e99da1
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 07:42
a1ba85f to
dd4d2ee
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 07:42
3e99da1 to
beb8439
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 07:52
dd4d2ee to
6b7d6b4
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 07:52
beb8439 to
316d328
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 08:01
6b7d6b4 to
2a121ed
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:01
316d328 to
d6a8206
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 08:07
2a121ed to
18e58ef
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:07
d6a8206 to
5c74237
Compare
loevgaard
force-pushed
the
fix/33-housekeeping
branch
from
September 14, 2026 08:13
18e58ef to
e0b0e4d
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:13
5c74237 to
d6a40ee
Compare
loevgaard
changed the base branch from
fix/33-housekeeping
to
fix/29-cookie-domain
September 14, 2026 08:13
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:16
d6a40ee to
11fbcd2
Compare
loevgaard
force-pushed
the
fix/29-cookie-domain
branch
from
September 14, 2026 08:27
c7e08ee to
8e1ec90
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:27
11fbcd2 to
9ec32d4
Compare
loevgaard
force-pushed
the
fix/29-cookie-domain
branch
from
September 14, 2026 08:33
8e1ec90 to
c5e3b32
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 08:33
9ec32d4 to
122feb9
Compare
loevgaard
force-pushed
the
fix/29-cookie-domain
branch
from
September 14, 2026 09:21
c5e3b32 to
4c4083c
Compare
loevgaard
force-pushed
the
fix/31-readme
branch
from
September 14, 2026 09:21
122feb9 to
f2f88c9
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/31-readme
branch
from
September 14, 2026 09:23
f2f88c9 to
e045401
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.