User Tools

Site Tools


provenance:design:platforms:ad_archives

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
provenance:design:platforms:ad_archives [2026/09/08 11:46] – New provenance page for design:platforms:ad_archives: every query with its denominator, the 29-candidate hand-audit with its full residue, the 44-paper lowercase screen, the rejected probes and sources, 83 quote checks, 22 external sources with fetch date karel.kubicek.claudeprovenance:design:platforms:ad_archives [2026/09/08 11:52] (current) – Record the unclosed-nowiki incident, the check_wrap false positive, and the new odd-delimiter guard (which fired on the first draft of the bullet describing it). Stop the red-link row matching itself. Authored by Claude karel.kubicek.claude
Line 29: Line 29:
   * **A verification script silently checked less.** Adding quotes re-used a ''CHECKS'' key and dropped three existing checks while still reporting "0 NOT FOUND". A guard now aborts on duplicate keys.   * **A verification script silently checked less.** Adding quotes re-used a ''CHECKS'' key and dropped three existing checks while still reporting "0 NOT FOUND". A guard now aborts on duplicate keys.
   * **"Web-only" was published for Google's Ads Transparency Center** in the first save, which {[breuer2026_ad]} contradicts — it is a BigQuery public dataset. Caught by re-reading the paper, not by a reviewer.   * **"Web-only" was published for Google's Ads Transparency Center** in the first save, which {[breuer2026_ad]} contradicts — it is a BigQuery public dataset. Caught by re-reading the paper, not by a reviewer.
 +  * **An unclosed nowiki span silently broke this page after publication.** One row of the //Rendered-page checks// table above carried an **odd** number of nowiki delimiters, which left the span open and made DokuWiki render everything after it as literal text: the page lost one table, two headings and two bibliography references, and the source looked entirely normal. It was caught only by counting the rendered DOM against the expected structure — which is the check that table exists to record. ''scripts/adarchives_gen_provenance.py'' now aborts when a line outside a file block has an odd delimiter count; it was mutation-tested, and it then immediately fired on the first draft of **this very bullet**, which had the same defect.
 +  * **''scripts/check_wrap.mjs'' reports a false positive on this page**, counting escaped mentions of the wrap tag as unbalanced opens. It was **not** what caught the real breakage above, and it said "1 problem" on a page that was fine and stayed silent about the page that was broken.
  
 No credential or token was printed, logged or exposed during the run. No credential or token was printed, logged or exposed during the run.
Line 39: Line 41:
  
 ^ Decision ^ Alternative a reasonable person would have taken ^ Why this way ^ ^ Decision ^ Alternative a reasonable person would have taken ^ Why this way ^
-| **A new page rather than a section on [[design:platforms]].** | Add an "ad archives" section to the parent, which already has five paragraphs on them. | The parent is organised by //route into a platform//; the archive needs to be organised by //archive//, because the thirteen repositories differ on scope, retention and bulk access in ways that decide feasibility. That comparison is a table the parent cannot carry, and the page id was already fixed on [[roadmap]] and gated by ''scripts/sitemap.mjs''. | +| **A new page rather than a section on [[design:platforms]].** | Add an "ad archives" section to the parent, which already has five paragraphs on them. | The parent is organised by //route into a platform//; the archive needs to be organised by //archive//, because the thirteen repositories differ on scope, retention and bulk access in ways that decide feasibility. That comparison is a table the parent cannot carry, and the page id was already fixed on [[:roadmap]] and gated by ''scripts/sitemap.mjs''. | 
-| **Kept the id ''design:platforms:ad_archives''.** | ''privacy:advertising'' or ''design:ad_archives''. | The id was decided on [[roadmap]] on 2026-09-07 and ''sitemap.mjs'' gates on it. Changing it would have required editing the roadmap row in the same sitting; there was no reason to. |+| **Kept the id ''design:platforms:ad_archives''.** | ''privacy:advertising'' or ''design:ad_archives''. | The id was decided on [[:roadmap]] on 2026-09-07 and ''sitemap.mjs'' gates on it. Changing it would have required editing the roadmap row in the same sitting; there was no reason to. |
 | **Reported 11 papers, not 69.** | Publish the parent's 69 for consistency between sibling pages. | 69 is a probe artefact: the probe cannot separate Meta's Ad Library from an Android advertising SDK, and 44 of the 69 are the SDK sense. Publishing a number known to be wrong for consistency's sake is the worst option available. The parent page has been corrected in the same sitting. | | **Reported 11 papers, not 69.** | Publish the parent's 69 for consistency between sibling pages. | 69 is a probe artefact: the probe cannot separate Meta's Ad Library from an Android advertising SDK, and 44 of the 69 are the SDK sense. Publishing a number known to be wrong for consistency's sake is the worst option available. The parent page has been corrected in the same sitting. |
 | **Counted "the archive is the object of study" as use of the archive.** | Count only papers that treated the archive as a data source. | {[edelson2020_security]}, {[lepochat2022_audit]} and {[benzaamia2026_year]} all query the archive at scale //and// measure it; excluding them would drop the four most method-bearing papers on the page. {[gkiouzepi2023_collaborative]} is the marginal call: it critiques ad libraries and proposes an alternative rather than querying one, and it is counted. Excluding it gives 10 rather than 11. | | **Counted "the archive is the object of study" as use of the archive.** | Count only papers that treated the archive as a data source. | {[edelson2020_security]}, {[lepochat2022_audit]} and {[benzaamia2026_year]} all query the archive at scale //and// measure it; excluding them would drop the four most method-bearing papers on the page. {[gkiouzepi2023_collaborative]} is the marginal call: it critiques ad libraries and proposes an alternative rather than querying one, and it is counted. Excluding it gives 10 rather than 11. |
Line 47: Line 49:
 | **Cut the per-year series at 2026 with a provisional label rather than at 2024.** | Cut at 2024, as [[literature:corpus]] recommends for trends. | The counts are 1–3 papers a year: this is a list of eleven papers, not a trend, and dropping 2025–2026 would drop the only two papers that measure a non-Meta archive. The provisional label is stated wherever the years appear. | | **Cut the per-year series at 2026 with a provisional label rather than at 2024.** | Cut at 2024, as [[literature:corpus]] recommends for trends. | The counts are 1–3 papers a year: this is a list of eleven papers, not a trend, and dropping 2025–2026 would drop the only two papers that measure a non-Meta archive. The provisional label is stated wherever the years appear. |
 | **Published the ''google-ads-transparency-center'' dataset on a paper's authority.** | Leave it out, since the vendor's own docs do not mention it. | {[breuer2026_ad]} queried it, names two of its fields and gives a retrieval date, and the alternative was to publish "web-only", which is what the first draft said and is wrong. The uncertainty is stated in the footnote on the page, not only here. | | **Published the ''google-ads-transparency-center'' dataset on a paper's authority.** | Leave it out, since the vendor's own docs do not mention it. | {[breuer2026_ad]} queried it, names two of its fields and gives a retrieval date, and the alternative was to publish "web-only", which is what the first draft said and is wrong. The uncertainty is stated in the footnote on the page, not only here. |
-| **Linked [[statistics:interrater_agreement]] rather than the queued ''statistics:annotation''.** | Link the queued id, which is legal because it is declared on [[roadmap]]. | No content page on this wiki currently links a queued page, and a red link on a brand-new page reads as a defect to a reader who has not read the roadmap. |+| **Linked [[statistics:interrater_agreement]] rather than the queued ''statistics:annotation''.** | Link the queued id, which is legal because it is declared on [[:roadmap]]. | No content page on this wiki currently links a queued page, and a red link on a brand-new page reads as a defect to a reader who has not read the roadmap. |
  
 ===== Queries, with populations and denominators ===== ===== Queries, with populations and denominators =====
Line 339: Line 341:
 ^ Page ^ Change ^ ^ Page ^ Change ^
 | [[literature:bibliography]] | 10 entries added before ''%%</bibtex>%%''; rev 1788543026 → 1788865485. Duplicate-key scan case-insensitive over all 860 entries: none. DOI and title scan against the existing file for all 10: none. Cache purged with ''?purge=true'' before publishing the citing page. | | [[literature:bibliography]] | 10 entries added before ''%%</bibtex>%%''; rev 1788543026 → 1788865485. Duplicate-key scan case-insensitive over all 860 entries: none. DOI and title scan against the existing file for all 10: none. Cache purged with ''?purge=true'' before publishing the citing page. |
-| [[design:platforms]] | the "**69** papers name an Ad Library or ad archive" figure corrected in three places to the audited **11**, with the homonym named in a %%<WRAP tip>%%; the new page linked from //The Ways In//, //Which Methods Are Current//, //Should There Be Facebook, Twitter, TikTok and Amazon Pages?//, //Open Questions// and //Related Pages// — that page had deliberately named it without linking so as not to create a fresh red link. **Only the ad-archive figure was re-derived**; the rest of that page's numbers were not re-run, and the edit says so on the page. | +| [[design:platforms]] | the "**69** papers name an Ad Library or ad archive" figure corrected in **four** places to the audited **11** (the //Ways In// route table, the //Which Methods Are Current// row, the researcher-routes paragraph and the per-company-pages section), with the homonym named in a %%<WRAP tip>%%; the new page linked from //The Ways In//, //Which Methods Are Current//, //Should There Be Facebook, Twitter, TikTok and Amazon Pages?//, //Open Questions// and //Related Pages// — that page had deliberately named it without linking so as not to create a fresh red link. **Only the ad-archive figure was re-derived**; the rest of that page's numbers were not re-run, and the edit says so on the page. | 
-| [[roadmap]] | the ''design:platforms:ad_archives'' row removed from //Queued// — required, not cosmetic: ''scripts/sitemap.mjs'' reports a written-but-still-queued row as a failure and exits non-zero. A disposition row with the corrected count was added to //Assessed//. |+| [[:roadmap]] | the ''design:platforms:ad_archives'' row removed from //Queued// — required, not cosmetic: ''scripts/sitemap.mjs'' reports a written-but-still-queued row as a failure and exits non-zero. A disposition row with the corrected count was added to //Assessed//. |
 | [[provenance:roadmap]] | a new section 3b recording the dequeue and the count correction, and the general lesson that a candidate-set count can over-count by a factor of six when the probe term is a homonym. | | [[provenance:roadmap]] | a new section 3b recording the dequeue and the count correction, and the general lesson that a candidate-set count can over-count by a factor of six when the probe term is a homonym. |
 | [[:design]] | the page added to the namespace listing, so it is reachable from [[:start]] through [[:design]] as well as from its parent. [[:start]] itself lists namespaces rather than pages and needed no edit. | | [[:design]] | the page added to the namespace listing, so it is reachable from [[:start]] through [[:design]] as well as from its parent. [[:start]] itself lists namespaces rather than pages and needed no edit. |
 +
 +===== Rendered-page checks =====
 +
 +Run with ''?purge=true'' after each save, against the rendered DOM rather than the source.
 +
 +^ Check ^ Content page ^ This page ^
 +| ''bibtex_citekey'' spans | 202 (= 2 per marker × 101 markers; the plugin emits two) | 121 |
 +| distinct ''%%{[key]}%%'' markers in source | 15 | 13, plus one deliberately escaped literal marker, which correctly did **not** become a citation |
 +| entries in the rendered ''bibtex_references'' list | **15** | **13** |
 +| tables | 10 | 18 |
 +| WRAP boxes rendered | 5 | 2 — the page mentions the tag three more times as escaped text, and those did not become boxes or truncate the tables they sit in |
 +| ''%%<pre>%%'' blocks | 0 | 8 (4 ''%%<file>%%'' + 4 ''%%<code>%%'') |
 +| footnote open/close/rendered | 25 / 25 / 25 | — |
 +| red links | **0** | **0** (a naive grep for the plugin's red-link CSS class returns 1 on this page — it matches this very row, so check the anchor tags, not the raw HTML) |
 +| dangling in-page anchors | 0 | 0 |
 +
 +Two things that check out only if you look at the right thing:
 +
 +  * **A pipe inside a table cell survives if it sits inside a nowiki span.** Five rows across the two pages put a regex containing a pipe character into a cell, wrapped in a nowiki span inside monospace; each rendered as one cell with the pipe intact and the correct number of columns. That is worth knowing, because the general rule on this wiki is that a table cell cannot hold a pipe and a backslash is not an escape.
 +  * **Escaping a plugin tag needs the nowiki span, not just monospace.** Monospace alone does not stop the wrap plugin, and a plugin tag opened inside a table cell can silently truncate a page from that point on. Every mention of the tag in prose on these two pages is inside a nowiki span, and the rendered structure counts above are what confirms it worked. Note that ''scripts/check_wrap.mjs'' counts those escaped mentions as unbalanced opens and reports a problem for this page — a **false positive**, contradicted by the rendered DOM, and recorded here so the next person does not chase it.
 +  * **The bibtex plugin's ''%%#ref__<key>%%'' hrefs point at anchors it never emits** — 15 of 15 dangle on the content page, and **26 of 26 dangle on [[design:platforms]]** too, so this is plugin behaviour across the whole wiki and not something these pages introduced. It was checked precisely so that it would not be reported as a defect here.
  
 ===== Review log ===== ===== Review log =====
provenance/design/platforms/ad_archives.1788867973.txt.gz · Last modified: by karel.kubicek.claude