Build1 distinct publisher3 min readUpdated
A one-browser ad measurement run found a boolean where the bid request body was supposed to be. No gate fired, because every gate had been written about the code's question.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A one-browser ad measurement run found a boolean where the bid request body was supposed to be. No gate fired, because every gate had been written about the code's question.
A single-operator measurement project that set out to read its own advertising profile out of live bid requests discovered that its capture had kept 579 candidate request rows from one night and not one key of the payload those rows were supposed to hold [1]. The field on disk that was meant to contain what the request said held a boolean instead [2], and nothing in the pipeline complained, which is the part worth copying into your own postmortem template.
According to the project's write-up, three narrow parsers read `post_data`, extracted a verdict, and discarded the body [3]. That is a coherent design if the question is "did this host bid." It happens to be the design you also get if you meant to ask "what did this host say about me," and four days of measuring prices, which bidders answer and which stay silent went by before the gap surfaced [4]. The author names the failure mode directly: a pipeline can be honest, gated and reproducible while quietly answering a different question than the one asked, because every gate was written about the question the code actually answers [5].
The second-order version of the same bug was worse. The first fix stored the request URL as `url[:500]` [6], so every exchange that asks by GET had its question cut mid-query-string, with nothing on the row recording the cut [7]. On a fresh sweep, 174 of 380 request rows exceeded 500 characters [8], just under half of them [9], and one `yandex.ru` request ran to 9529 characters [10], more than nineteen times the retained window [11]. `ssp01.rambler.ru` shows the cost: under the truncating schema it read as `no-body`, absent from every count [12], while its query string carries `adtech_uid`, `publisher_uid`, `rq_sess`, a `top100_session_id` map keyed by publisher site id, and six Adfox `puidN` targeting parameters [13]. A body-only reading of that market reports the opposite of what is present [14].
The corrected census reports key-path shapes and never values [15]. Restricted to paths the capture tool had already classified as bid candidates with at least four bodies read, all 18 receive the Adfox `places` protocol and nothing else: seven to thirteen key paths, every one about the placement, the format or the page [16]. On this path, for most of the demand side, the audience profile does not travel inside the bid request the browser sends; the enrichment happens server-side, past the client's vantage [17]. What is client-visible is a separate channel of cookie-sync hops and the wrapper operator's own requests [18].
The most useful result is a three-state one. `ssp-rtb.sape.ru` asks for `places[].sapeFpUids[]`, an eids-shaped array of source/id pairs, on every bid request [19]; cold, 22 empty and 0 populated, warm, 20 empty and 2 populated on a single site with a 19-digit and a 32-hex id [20]. Two of 44 [21]. The author's reading is that the slot exists and this browser has nothing to put in it, a fact about the browser rather than the protocol [22], with `kimberlite.io` as the pure case: a stable id requested on all 18 of its requests, never once returned [23].
Separately, `mc.yandex.com` receives a `site-info` map with 295 key paths, mostly the publisher's own UI taxonomy, including publisher-declared visitor labels written in plain Russian as key names, 14 filled audience slots and one always empty [24]. The author is explicit that this is the analytics endpoint, not a bid request, and that nothing measured shows those labels reaching an auction [25].
Worth watching: whether the reworked schema carries an explicit truncation flag rather than a silent slice, and whether anyone reproduces the empty-slot state instead of rounding it to "carries identity" or "asks nothing" [26].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A single-operator, single-browser project attempting to read the author's own ad profile out of live bid requests found that 579 candidate request rows captured in one night retained not one key of the request payload.
On disk, the field that was supposed to hold what the request said was a boolean.
Three narrow parsers read post_data, extracted a verdict, and discarded the body.
The author had spent four days measuring prices and outcomes, including which bidders answer and which stay silent, before checking what the capture had kept of the payload.
The author names the failure mode: a pipeline can be perfectly honest, gated and reproducible while quietly answering a different question than the one asked, and no gate fires because every gate was written about the question the code actually answers.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Concrete self-reported counts, open data, no external replication
Every quantitative claim is specific, internally consistent and arithmetically checkable (174/380 = 45.8 percent; 9529 > 19 x 500; 2 of 44 sape observations populated), the design is paired cold/warm with treatment verified on the row, and the tooling and data are public under CC0. Against that: one operator, one browser, one vantage, one night plus one sweep, no independent replication and no comment from the named hosts, and the disclosure design deliberately withholds values so third parties cannot re-derive the shapes from the payload.
One public single-operator release, no third-party uptake reported
The only adoption fact in the supplied source is the author's own public repository and CC0 data set plus the run it produced. No other users, deployments, dependent projects, citations or vendor adoption of the method are disclosed, so measured uptake is confined to a single operator on a single browser.
Understated: negative result, explicit non-claims, scoped readings
The framing runs below what the measurements would license rather than above it. The headline result is a negative for the author's own premise, the strongest available narrative — publisher-declared visitor labels in plain Russian flowing to an operator that also sells targeting — is explicitly not claimed because the capture does not evidence the auction link, and the sape identity finding is deliberately read as a fact about the browser rather than the protocol. The one place the rhetoric outruns the sample is the market-level generalisation that a body-only reading reports the opposite of what is there, drawn from one browser on a largely Russian-language stack; that keeps the gap modestly negative rather than strongly negative.
Self-published personal project; reputational stake, no disclosed commercial interest
The author is the sole operator, sole measurer and sole publisher, posting on a developer platform and promoting his own repository, which creates a reputational and project-visibility incentive and leaves the numbers unaudited by any second party. Offsetting factors: no vendor, sponsor, employer or product being sold is disclosed, the data are released CC0, and the piece reports against its own thesis and explicitly declines an available stronger claim — behaviour inconsistent with promotional distortion.
Internally consistent but single-source, single-vantage and unreplicated
Confidence is capped by structure rather than by sloppiness: one publisher, one author, one browser, small per-host counts (18 requests for kimberlite.io, 44 for sape), and a mostly Russian-language wrapper stack whose generality is untested. The specific instrumentation findings — a boolean where the payload should be, 500-character truncation hiding a real SSP — are highly credible as reported; the market-level and cross-market implications are not yet independently supported.
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
build
CSA's 2026 threat list is a flat line, so ask which threats a config snapshot can prove1 distinct publisher
build
An empty array is a claim about your query: verify identifiers before you trust the metric1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 20, 2026