User Tools

Site Tools


provenance:design:platforms:messaging_channels

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
provenance:design:platforms:messaging_channels [2026/09/27 12:24] – Review log for the three focused passes; regenerated outputs (report, verifier 79 needles, external checks 80). Authored by Claude. karel.kubicek.claudeprovenance:design:platforms:messaging_channels [2026/09/27 12:36] (current) – Generic review logged (16 findings, 15 accepted, 1 in part); mistakes list extended; regenerated verifier (68 spans, 83 needles) and external checks (80 OK). Authored by Claude. karel.kubicek.claude
Line 26: Line 26:
   * **The draft over-generalised two paper quotes.** It credited "two criminology-trained groups" with a consent-waiver argument that only one paper makes in those terms, and wrote "no paper here describes entering a group by deception" without saying that one of the 26 interacted with the operators it studied. Both rewritten against the text.   * **The draft over-generalised two paper quotes.** It credited "two criminology-trained groups" with a consent-waiver argument that only one paper makes in those terms, and wrote "no paper here describes entering a group by deception" without saying that one of the 26 interacted with the operators it studied. Both rewritten against the text.
   * **The external-check script silently skipped its last section on the first run.** ''set -u'' aborted on an unset ''$1'' inside the Crossref loop, and the run printed nine FAILED lines above it — all nine were my regexes (tag-stripped text searched for values that live in HTML attributes), not the sources. Fixed; the script now reaches its final ''FAILED checks: N'' line, and exits with N.   * **The external-check script silently skipped its last section on the first run.** ''set -u'' aborted on an unset ''$1'' inside the Crossref loop, and the run printed nine FAILED lines above it — all nine were my regexes (tag-stripped text searched for values that live in HTML attributes), not the sources. Fixed; the script now reaches its final ''FAILED checks: N'' line, and exits with N.
 +  * **Two hand codes behind headline figures were wrong until review.** {[vu2025_assessing]} also monitored Discord channels (Discord 5 → 6), and {[gao2026_doxing]}'s only denominator caveat concerns a secondary sample, so "all nine core papers acknowledge the denominator" was eight. Three more codes (two join modes, one ethics review) were recoded; see [[#Review log]].
 +  * **The external-source sub-agent said TeraGram had no DOI yet.** It is in the ICWSM 2026 proceedings; the external-currency reviewer caught it.
 +  * **The page missed an application route.** It said no platform offers researchers a way in while its own parent page documents that Meta's Content Library covers WhatsApp Channels. The generic reviewer caught it by reading the two pages together.
   * **A located note quote is not a published quote.** The readers' notes carry 606 quotes; 501 (82.7%) were located verbatim. The page quotes only strings that the page's own verifier locates, and the notes stay unpublished.   * **A located note quote is not a published quote.** The readers' notes carry 606 quotes; 501 (82.7%) were located verbatim. The page quotes only strings that the page's own verifier locates, and the notes stay unpublished.
  
Line 85: Line 88:
 ===== Quote and figure checks ===== ===== Quote and figure checks =====
  
-  * **Page quotes**: ''verify_messaging_channels_figures.mjs'' pulls **every** ''%%//"…"//%%'' span out of the page source (64 at the last run) and requires each to be located in the paper of a citekey on the same line, or to be an EXTERNAL span whose external check printed OK, or to be on a two-entry NOT_A_QUOTE list. One span needed a ligature fallback (the IMC 2020 PDF has an unmapped ''ff'' glyph in "different" in both renderings), and one a de-hyphenation fallback ("self- constructed" across a line break); both routes are labelled in the output. +  * **Page quotes**: ''verify_messaging_channels_figures.mjs'' pulls **every** ''%%//"…"//%%'' span out of the page source (68 at the last run) and requires each to be located in the paper of a citekey on the same line, or to be an EXTERNAL span whose external check printed OK, or to be on a two-entry NOT_A_QUOTE list. One span needed a ligature fallback (the IMC 2020 PDF has an unmapped ''ff'' glyph in "different" in both renderings), and one a de-hyphenation fallback ("self- constructed" across a line break); both routes are labelled in the output. 
-  * **Per-paper figures**: 79 needles, located in ''.cols'' or, for twelve, only in the ''pypdf'' re-extraction. Three mutated needles (250→350, 0.8%→0.9%, 4,709→4,790) must not be found and are not.+  * **Per-paper figures**: 83 needles, located in ''.cols'' or, for twelve, only in the ''pypdf'' re-extraction. Three mutated needles (250→350, 0.8%→0.9%, 4,709→4,790) must not be found and are not.
   * **Two numbers are verified in the form the PDF prints them**: {[gao2026_doxing]}'s "411, 707" and {[saha2021_short]}'s "8, 000 … 1, 000 … 3, 000" carry a stray space inside the number in every rendering.   * **Two numbers are verified in the form the PDF prints them**: {[gao2026_doxing]}'s "411, 707" and {[saha2021_short]}'s "8, 000 … 1, 000 … 3, 000" carry a stray space inside the number in every rendering.
   * **Reader notes**: ''msgch_notes_quotecheck.py'' (output below) — 501 of 606 quotes located (82.7%). The misses are dominated by readers stitching two sentences with an ellipsis, against the brief, and by column splices. No page quote depends on an unlocated note quote.   * **Reader notes**: ''msgch_notes_quotecheck.py'' (output below) — 501 of 606 quotes located (82.7%). The misses are dominated by readers stitching two sentences with an ellipsis, against the brief, and by column splices. No page quote depends on an unlocated note quote.
Line 186: Line 189:
 ==== Pass 4 — generic (model: fable) ==== ==== Pass 4 — generic (model: fable) ====
  
-Running on the corrected pages; its findings will be logged here.+Ran on the corrected pages (content rev 1790511893, provenance rev 1790511895). 16 findings (1 high, 6 medium, 9 low); it also re-derived several of the fixes above and found them sound. 
 + 
 +^ # ^ Finding ^ Disposition ^ 
 +| G1 | high — the page said none of the three platforms has a research route and called WhatsApp Channels "new and untested", while [[design:platforms]] documents that Meta's Content Library covers WhatsApp Channels | **accepted**. Re-fetched Meta's page (headless browser): "public content archive from Facebook, Instagram and WhatsApp Channels". The intro box, the terms section, the currency table and the open questions now say that Channels have an application route, that groups do not, and that no paper here used it; an external check was added | 
 +| G2 | medium — "specific, recent" terms applied to 2019–2024 papers when the page cannot date the clause | **accepted**: "recent" dropped; "read against today's terms", and the page says whether the clauses existed at collection time was not established | 
 +| G3 | medium — the artefact sentence gave base rates only for the two rows where group studies exceed the corpus | **accepted**: public 34.6% vs 47.7% added; the sentence now says they share less openly and shift to gated release | 
 +| G4 | medium — "the only compliant path [on Discord] is a bot an admin invites" ignores a person reading as a member, which the page's own codes record | **accepted**, rewritten in the terms section and the open questions | 
 +| G5 | medium — "still possible at scale in 2025" generalised one platform's pre-mitigation window to the whole route | **accepted**: now "capped on most platforms", with WhatsApp's window, Meta's mitigation statement and the capped platforms named | 
 +| G6 | medium — "what the careful papers converge on" rests on one paper for two bullets, and one is contradicted by {[roy2025_darkgram]}, which sent 11,800 collected posts to the GPT-4 API | **accepted**: reframed as what individual papers did; the third-party-service bullet is marked contested, cites both papers, and states the page's position | 
 +| G7 | medium — "what the 2020–2024 Discord papers describe or imply" attributes user-account automation to six papers when only one is coded that way | **accepted**: names {[hoseini2020_demystifying]} only | 
 +| G8 | low — Twitter as a seed surface is still used (2025); only the free API is historical | **accepted**, currency row split accordingly | 
 +| G9 | low — "known official channels" vs the fourth n/a paper reached through a forum advert | **accepted**: "known groups or channels" | 
 +| G10 | low — the recruitment row named two platforms where the 19 include Telegram and WeChat; two cells had no citation | **accepted**: platforms listed; the two uncited cells point to the verdict list | 
 +| G11 | low — the seed table omitted the "not stated" row (2 papers) | **accepted**, row added | 
 +| G12 | low — "almost all of it is Telegram" (81%) | **accepted**: "four papers in five" | 
 +| G13 | low — the Discord 100-server cap rests on a 2020 measurement while Telegram's is documented | **partly accepted**: both measured caps are now dated "in 2020" and the Discord one is marked "not re-checked against Discord's current documentation"; Discord's support page was not re-fetched for a current figure | 
 +| G14 | low — the page explains Discord bots' limits but not Telegram bots' | **accepted**: a table row on bot accounts, with Telegram's own privacy-mode sentence, and an external check | 
 +| G15 | low — message-level attrition (deletions between back-fill and live polling) not mentioned | **accepted**: {[kireev2025_characterizing]} added — export history "does not contain deleted messages", and moderators removed from below 20% to over 80% of propaganda messages | 
 +| G16 | low — no read-first entry for Discord or for the commoner "one source among several" case | **accepted**: {[shen2024_anything]} and {[vu2025_assessing]} named under //What to Read First// | 
 + 
 +Not re-run after these fixes: the generic pass's own findings were applied as stated, every changed figure re-checked by the number guard, and every new quote by the verifier (68 spans, 83 needles, 0 not located) and the external script. A second generic pass was not run. 
 + 
 +==== What the review layer was worth ==== 
 + 
 +37 findings over four passes; 35 accepted in full, 1 in part, 1 rejected as an already-recorded judgement call. The two that changed headline figures came from the focused passes (the missing Discord code, and the one core paper that does not acknowledge its denominator). The one that changed what the page tells a reader to do — an application route to WhatsApp Channels the page had missed — came from the generic pass, reading this page against its parent.
  
 ===== The report script ===== ===== The report script =====
Line 1111: Line 1138:
 OK   paper.cols.txt line  28  kireev2025_characterizing OK   paper.cols.txt line  28  kireev2025_characterizing
        "given the small selection, we cannot make any statement about the pervasiveness of this propaganda activity in Telegram"        "given the small selection, we cannot make any statement about the pervasiveness of this propaganda activity in Telegram"
-OK   paper.cols.txt line  61  hoseini2020_demystifying+OK   paper.cols.txt line  62  hoseini2020_demystifying
        "presumably owing to Discord group URLs automatically expiring after a day"        "presumably owing to Discord group URLs automatically expiring after a day"
-OK   EXTERNAL       line  61  Discord invites default to 7 days+OK   EXTERNAL       line  62  Discord invites default to 7 days
        "a 7 days access link by default"        "a 7 days access link by default"
-OK   EXTERNAL       line  62  Discord Server Discovery needs 1,000 members+OK   EXTERNAL       line  63  Discord Server Discovery needs 1,000 members
        "at least 1,000 members"        "at least 1,000 members"
-OK   EXTERNAL       line  62  TGStat self-reported catalogue size+OK   EXTERNAL       line  63  TGStat self-reported catalogue size
        "More than 2 864 885 channels and groups"        "More than 2 864 885 channels and groups"
-OK   EXTERNAL       line  63  durov/345: problematic content no longer accessible in Search+OK   EXTERNAL       line  64  durov/345: problematic content no longer accessible in Search
        "All the problematic content we identified in Search is no longer accessible"        "All the problematic content we identified in Search is no longer accessible"
-OK   EXTERNAL       line  73  Telegram documents the public-channel web preview+OK   EXTERNAL       line  74  Telegram bots: privacy mode on by default unless added as admin 
 +       "Privacy mode is enabled by default for all bots, except bots that were added to a group as admins" 
 +OK   EXTERNAL       line  75  Telegram documents the public-channel web preview
        "The contents of public channels can be seen on the Web without a Telegram account"        "The contents of public channels can be seen on the Web without a Telegram account"
-OK   paper.cols.txt line  80  kireev2025_characterizing+OK   paper.cols.txt line  82  kireev2025_characterizing
        "never interacted with the channels"        "never interacted with the channels"
-OK   paper.cols.txt line  81  hoseini2020_demystifying+OK   paper.cols.txt line  83  hoseini2020_demystifying
        "translates to a need for hundreds of phones and SIM cards to join all discovered groups"        "translates to a need for hundreds of phones and SIM cards to join all discovered groups"
-OK   EXTERNAL       line  81  Telegram: unofficial-client logins put under observation+OK   EXTERNAL       line  83  Telegram: unofficial-client logins put under observation
        "all accounts that log in using unofficial Telegram API clients are automatically put under observation"        "all accounts that log in using unofficial Telegram API clients are automatically put under observation"
-OK   paper.cols.txt line  87  resende2019_information+OK   paper.cols.txt line  89  resende2019_information
        "we are not aware of an approach that would allow us to assess the representativeness of our data as even the total number of groups available in the country is "        "we are not aware of an approach that would allow us to assess the representativeness of our data as even the total number of groups available in the country is "
-OK   paper.cols.txt line  88  saha2021_short+OK   paper.cols.txt line  90  saha2021_short
        "Given that WhatsApp does not provide an API or tools to access the data, there is no way of knowing the representativeness of our dataset"        "Given that WhatsApp does not provide an API or tools to access the data, there is no way of knowing the representativeness of our dataset"
-OK   paper.cols.txt line  88  saha2021_short+OK   paper.cols.txt line  90  saha2021_short
        "a convenience sample"        "a convenience sample"
-OK   paper.cols.txt+lig line  89  hoseini2020_demystifying+OK   paper.cols.txt+lig line  91  hoseini2020_demystifying
        "The use of Twitter as the only data source for discovering public groups of the different messaging platforms potentially introduces some bias in our sample"        "The use of Twitter as the only data source for discovering public groups of the different messaging platforms potentially introduces some bias in our sample"
-OK   paper.cols.txt line  95  marjanov2026_stayin+OK   paper.cols.txt line  97  marjanov2026_stayin
        "inactive/banned"        "inactive/banned"
-OK   paper.cols.txt line  95  marjanov2026_stayin+OK   paper.cols.txt line  97  marjanov2026_stayin
        "the most influential predictor of channel durability"        "the most influential predictor of channel durability"
-OK   paper.cols.txt line  95  marjanov2026_stayin  (WARN: located in a citekey other than the nearest)+OK   paper.cols.txt line  97  marjanov2026_stayin  (WARN: located in a citekey other than the nearest)
        "might miss short-lived channels due to the retroactive nature of data collection"        "might miss short-lived channels due to the retroactive nature of data collection"
-OK   paper.cols.txt line  97  arunasalam2024_security+OK   paper.cols.txt line  97  kireev2025_characterizing 
 +       "The data collected through "Export chat history" does not contain deleted messages" 
 +OK   paper.cols.txt line  99  arunasalam2024_security
        "that can only be joined via invitation"        "that can only be joined via invitation"
-OK   paper.cols.txt line  97  arunasalam2024_security+OK   paper.cols.txt line  99  arunasalam2024_security
        "an unintentional leak of the group's "invite link""        "an unintentional leak of the group's "invite link""
-OK   NOT-A-QUOTE    line 100  template of the sentence NOT to write, in the denominator box+OK   NOT-A-QUOTE    line 102  template of the sentence NOT to write, in the denominator box
        "we collected N messages from Telegram"        "we collected N messages from Telegram"
-OK   EXTERNAL       line 112  Telethon README: moved to Codeberg+OK   EXTERNAL       line 114  Telethon README: moved to Codeberg
        "Moved to https://codeberg.org/Lonami/Telethon"        "Moved to https://codeberg.org/Lonami/Telethon"
-OK   EXTERNAL       line 112  Telethon README (reST links rendered): be careful not to break ToS+OK   EXTERNAL       line 114  Telethon README (reST links rendered): be careful not to break ToS
        "be careful not to break Telegram's ToS or Telegram can ban the account"        "be careful not to break Telegram's ToS or Telegram can ban the account"
-OK   EXTERNAL       line 116  whatsapp-web.js README: WhatsApp does not allow unofficial clients+OK   EXTERNAL       line 118  whatsapp-web.js README: WhatsApp does not allow unofficial clients
        "WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe"        "WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe"
-OK   EXTERNAL       line 119  DiscordChatExporter README: automating user accounts is against Discord TOS+OK   EXTERNAL       line 121  DiscordChatExporter README: automating user accounts is against Discord TOS
        "automating user accounts is against Discord TOS and may result in you getting banned"        "automating user accounts is against Discord TOS and may result in you getting banned"
-OK   EXTERNAL       line 125  Telegram ToS: scraping prohibited for all users and third parties+OK   EXTERNAL       line 125  Meta Content Library covers WhatsApp Channels 
 +       "provide[s] comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels" 
 +OK   EXTERNAL       line 127  Telegram ToS: scraping prohibited for all users and third parties
        "Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms, which apply to all users, businesses, and third-party serv"        "Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms, which apply to all users, businesses, and third-party serv"
-OK   EXTERNAL       line 125  Telegram Content Licensing: access beyond ordinary use prohibited+OK   EXTERNAL       line 127  Telegram Content Licensing: access beyond ordinary use prohibited
        "Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited"        "Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited"
-OK   EXTERNAL       line 125  Telegram API ToS 1.5: no ML training on API data+OK   EXTERNAL       line 127  Telegram API ToS 1.5: no ML training on API data
        "prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development"        "prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development"
-OK   EXTERNAL       line 125  Telegram self-reports below the VLOP threshold+OK   EXTERNAL       line 127  Telegram self-reports below the VLOP threshold
        "significantly fewer than 45 million"        "significantly fewer than 45 million"
-OK   EXTERNAL       line 126  WhatsApp ToS: no access or collection through automated means+OK   EXTERNAL       line 128  WhatsApp ToS: no access or collection through automated means
        "through automated or other means"        "through automated or other means"
-OK   EXTERNAL       line 126  WhatsApp ToS: no collecting information about users in impermissible ways+OK   EXTERNAL       line 128  WhatsApp ToS: no collecting information about users in impermissible ways
        "collect information of or about our users in any impermissible or unauthorized manner"        "collect information of or about our users in any impermissible or unauthorized manner"
-OK   EXTERNAL       line 126  EC: private messaging stays excluded+OK   EXTERNAL       line 128  EC: private messaging stays excluded
        "private messaging service"        "private messaging service"
-OK   EXTERNAL       line 127  Discord ToS: no scraping without written consent+OK   EXTERNAL       line 129  Discord ToS: no scraping without written consent
        "scraping our services without our written consent"        "scraping our services without our written consent"
-OK   EXTERNAL       line 127  Discord Community Guidelines: no self-bots+OK   EXTERNAL       line 129  Discord Community Guidelines: no self-bots
        "Do not use self-bots or user-bots"        "Do not use self-bots or user-bots"
-OK   EXTERNAL       line 127  Discord Developer Policy: do not mine or scrape+OK   EXTERNAL       line 129  Discord Developer Policy: do not mine or scrape
        "Do not mine or scrape any data"        "Do not mine or scrape any data"
-OK   EXTERNAL       line 132  FLOOD_WAIT_X: a wait of X seconds is required+OK   EXTERNAL       line 134  FLOOD_WAIT_X: a wait of X seconds is required
        "A wait of X seconds is required"        "A wait of X seconds is required"
-OK   paper.cols.txt line 132  roy2025_darkgram+OK   paper.cols.txt line 134  roy2025_darkgram
        "at 10-minute intervals to capture new posts while adhering to the API rate limits"        "at 10-minute intervals to capture new posts while adhering to the API rate limits"
-OK   paper.cols.txt line 133  vu2025_assessing+OK   paper.cols.txt line 135  vu2025_assessing
        "often banned rapidly by Discord"        "often banned rapidly by Discord"
-OK   pypdf          line 140  schrittwieser2012_guess+OK   pypdf          line 142  schrittwieser2012_guess
        "the WhatsApp server did not prevent us from uploading ten million phone numbers and returned 21095 valid phone numbers"        "the WhatsApp server did not prevent us from uploading ten million phone numbers and returned 21095 valid phone numbers"
-OK   paper.cols.txt line 141  hagen2021_numbers+OK   paper.cols.txt line 143  hagen2021_numbers
        "accounts get banned when excessively using the contact discovery service"        "accounts get banned when excessively using the contact discovery service"
-OK   pypdf          line 143  gegenhuber2026_there+OK   pypdf          line 145  gegenhuber2026_there
        "We encountered no rate limits, our accounts were not banned from the platform"        "We encountered no rate limits, our accounts were not banned from the platform"
-OK   paper.cols.txt line 157  kireev2025_characterizing+OK   paper.cols.txt line 159  kireev2025_characterizing
        "never interacted with the channels"        "never interacted with the channels"
-OK   paper.cols.txt line 163  marjanov2026_stayin+OK   paper.cols.txt line 165  marjanov2026_stayin
        "We do not lie or pretend to be an interested buyer to be admitted into groups. We also do not attempt to join any groups that require payments or vouching by an"        "We do not lie or pretend to be an interested buyer to be admitted into groups. We also do not attempt to join any groups that require payments or vouching by an"
-OK   paper.cols.txt line 163  he2025_unmasking+OK   paper.cols.txt line 165  he2025_unmasking
        "joined several related Telegram groups"        "joined several related Telegram groups"
-OK   paper.cols.txt line 163  he2025_unmasking+OK   paper.cols.txt line 165  he2025_unmasking
        "communicated with operators, acquired wallet drainers"        "communicated with operators, acquired wallet drainers"
-OK   paper.cols.txt line 164  vu2025_assessing+OK   paper.cols.txt line 166  vu2025_assessing
        "sending thousands of messages could be regarded as spamming"        "sending thousands of messages could be regarded as spamming"
-OK   paper.cols.txt line 165  roy2025_darkgram+OK   paper.cols.txt line 167  roy2025_darkgram
        "we did not download or read the payload files"        "we did not download or read the payload files"
-OK   pypdf          line 166  marjanov2026_stayin+OK   pypdf          line 168  marjanov2026_stayin
        "to avoid sending stolen and potentially sensitive data to third-party servers"        "to avoid sending stolen and potentially sensitive data to third-party servers"
-OK   pypdf+dehyph   line 167  li2025_investigating+OK   paper.cols.txt line 168  roy2025_darkgram 
 +       "we utilized the GPT-4 API" 
 +OK   pypdf+dehyph   line 169  li2025_investigating
        "Although PWUD is also active in other online communities such as Telegram groups and self-constructed forums, for ethical reasons, we limited our online data co"        "Although PWUD is also active in other online communities such as Telegram groups and self-constructed forums, for ethical reasons, we limited our online data co"
-OK   paper.cols.txt line 169  albrecht2021_collective+OK   paper.cols.txt line 171  albrecht2021_collective
        "all participants in our study also assumed police monitoring of the public Telegram groups"        "all participants in our study also assumed police monitoring of the public Telegram groups"
-OK   EXTERNAL       line 171  Barbosa and Milan 2019: avoid by all means covert bypasses+OK   EXTERNAL       line 173  Barbosa and Milan 2019: avoid by all means covert bypasses
        "by all means covert bypasses"        "by all means covert bypasses"
-OK   paper.cols.txt line 260  hoseini2020_demystifying+OK   paper.cols.txt line 262  hoseini2020_demystifying
        "exposes at least one social media account for 30% of the Discord users we monitored"        "exposes at least one social media account for 30% of the Discord users we monitored"
-OK   paper.cols.txt line 263  roy2025_darkgram+OK   paper.cols.txt line 265  roy2025_darkgram
        "only 64 channels (19%) were removed"        "only 64 channels (19%) were removed"
-OK   paper.cols.txt line 263  roy2025_darkgram+OK   paper.cols.txt line 265  roy2025_darkgram
        "led to the removal of all 196 channels, with a median response time of 4 days"        "led to the removal of all 196 channels, with a median response time of 4 days"
-OK   paper.cols.txt line 264  gao2026_doxing+OK   paper.cols.txt line 266  gao2026_doxing
        "over 300,000 unique individuals"        "over 300,000 unique individuals"
-OK   pypdf          line 266  saha2021_short+OK   pypdf          line 268  saha2021_short
        "8% of these fear speech users are also admins in the groups where they post fear speech"        "8% of these fear speech users are also admins in the groups where they post fear speech"
-spans: 64; by route: EXTERNAL 23, paper.cols.txt 34, paper.cols.txt+lig 1, NOT-A-QUOTE 1, pypdf 4, pypdf+dehyph 1+spans: 68; by route: EXTERNAL 25, paper.cols.txt 36, paper.cols.txt+lig 1, NOT-A-QUOTE 1, pypdf 4, pypdf+dehyph 1
  
 == B. Per-paper figures == == B. Per-paper figures ==
Line 1318: Line 1353:
 OK   paper.cols.txt vu2025_assessing  | Discord channels monitored too OK   paper.cols.txt vu2025_assessing  | Discord channels monitored too
        "Booters may use Discord; we also monitored these channels"        "Booters may use Discord; we also monitored these channels"
 +OK   paper.cols.txt kireev2025_characterizing  | over 80% removed by moderators
 +       "more than 80% of propaganda messages removed"
 +OK   paper.cols.txt kireev2025_characterizing  | below 20% removed
 +       "ranging from below 20%"
 +OK   paper.cols.txt guo2024_moderating  | manual collection
 +       "constrained by a manually collected dataset"
 +OK   paper.cols.txt roy2025_darkgram  | 11,800 posts to the GPT-4 API
 +       "across all the 11,800 posts identified by the classifier, we utilized the GPT-4 API"
 OK   paper.cols.txt xu2019_anatomy  | 300+ channels OK   paper.cols.txt xu2019_anatomy  | 300+ channels
        "we trace the message history of over 300 Telegram channels"        "we trace the message history of over 300 Telegram channels"
Line 1380: Line 1423:
 OK   paper.cols.txt WEAK yu2024_listen  | yu2024: Discord named (weak by design; role checked in the hand codes) OK   paper.cols.txt WEAK yu2024_listen  | yu2024: Discord named (weak by design; role checked in the hand codes)
        "Discord"        "Discord"
-needles: 79; by route: paper.cols.txt 67, pypdf 12; weak (<20 chars): 4+needles: 83; by route: paper.cols.txt 71, pypdf 12; weak (<20 chars): 4
  
 === EXTERNAL FIGURES (non-corpus; each re-fetched by external_checks_messaging_channels.sh — see its labels) === === EXTERNAL FIGURES (non-corpus; each re-fetched by external_checks_messaging_channels.sh — see its labels) ===
Line 1542: Line 1585:
 pw https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery $TMP/dc_disc.txt pw https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery $TMP/dc_disc.txt
 check 'Discord Server Discovery needs 1,000 members' $TMP/dc_disc.txt 'at least 1,000 members' check 'Discord Server Discovery needs 1,000 members' $TMP/dc_disc.txt 'at least 1,000 members'
 +
 +pw https://transparency.meta.com/researchtools/meta-content-library/ $TMP/meta_mcl.html
 +check_raw 'Meta Content Library covers WhatsApp Channels' $TMP/meta_mcl.html 'provide comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels'
 +get https://core.telegram.org/bots/features $TMP/tg_botfeat.html
 +check 'Telegram bots: privacy mode on by default unless added as admin' $TMP/tg_botfeat.html 'Privacy mode is enabled by default for all bots, except bots that were added to a group as admins'
  
 echo; echo "== 3. Telegram API limits ==" echo; echo "== 3. Telegram API limits =="
Line 1624: Line 1672:
  
 <file text external_checks_messaging_channels-output.txt> <file text external_checks_messaging_channels-output.txt>
-run: 2026-09-27T12:23Z+run: 2026-09-27T12:35Z
  
 == 1. Client tooling (GitHub / Codeberg / PyPI / npm / Go proxy) == == 1. Client tooling (GitHub / Codeberg / PyPI / npm / Go proxy) ==
Line 1703: Line 1751:
  
 == 2. Terms == == 2. Terms ==
-   GET https://telegram.org/tos/content-licensing -> 8333 bytes+   GET https://telegram.org/tos/content-licensing -> 8332 bytes
       > upload, share and view content in public and private chats. Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited. As a limited exception, Telegram permits access to data re       > upload, share and view content in public and private chats. Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited. As a limited exception, Telegram permits access to data re
 OK      Telegram Content Licensing: access beyond ordinary use prohibited OK      Telegram Content Licensing: access beyond ordinary use prohibited
Line 1711: Line 1759:
       > ateway API , Telegram API Developers , and Bot Developers . Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms , which apply to all users, businesses, and third-party services accessing the platform. Terms of Service for Telegram Stars Telegram users can acq       > ateway API , Telegram API Developers , and Bot Developers . Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms , which apply to all users, businesses, and third-party services accessing the platform. Terms of Service for Telegram Stars Telegram users can acq
 OK      Telegram ToS: scraping prohibited for all users and third parties OK      Telegram ToS: scraping prohibited for all users and third parties
-   GET https://core.telegram.org/api/terms -> 10293 bytes+   GET https://core.telegram.org/api/terms -> 10294 bytes
       > ce for Content Licensing and AI Scraping . As such, you are prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development, enhancement or deployment of artificial intelligence, mach       > ce for Content Licensing and AI Scraping . As such, you are prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development, enhancement or deployment of artificial intelligence, mach
 OK      Telegram API ToS 1.5: no ML training on API data OK      Telegram API ToS 1.5: no ML training on API data
Line 1719: Line 1767:
       > ounts that log in using unofficial Telegram API clients are automatically put under observation to avoid violations of the Terms of Service . If you didn't       > ounts that log in using unofficial Telegram API clients are automatically put under observation to avoid violations of the Terms of Service . If you didn't
 OK      Telegram: unofficial-client logins put under observation OK      Telegram: unofficial-client logins put under observation
-   GET https://telegram.org/tour/channels -> 29885 bytes+   GET https://telegram.org/tour/channels -> 29886 bytes
       > vate – but you can edit their profile to make them public . The contents of public channels can be seen on the Web without a Telegram account and are indexed by search engines. For example, try t.me/s/       > vate – but you can edit their profile to make them public . The contents of public channels can be seen on the Web without a Telegram account and are indexed by search engines. For example, try t.me/s/
 OK      Telegram documents the public-channel web preview OK      Telegram documents the public-channel web preview
-   GET https://t.me/s/telegram -> 127695 bytes+   GET https://t.me/s/telegram -> 127690 bytes
       > data-before="441"></a></div><div class="tgme_widget_message_wrap js-widget_message_wrap"><div class="tgm       > data-before="441"></a></div><div class="tgme_widget_message_wrap js-widget_message_wrap"><div class="tgm
 OK      t.me/s/<channel> serves channel posts OK      t.me/s/<channel> serves channel posts
       > Very Telegram. Wow. "> <link rel="prev" href="/s/telegram?before=441"> <link rel="canonical" href="/s/telegra       > Very Telegram. Wow. "> <link rel="prev" href="/s/telegram?before=441"> <link rel="canonical" href="/s/telegra
 OK      t.me/s/<channel> paginates with ?before= OK      t.me/s/<channel> paginates with ?before=
-   PW  https://www.whatsapp.com/legal/terms-of-service -> 262682 bytes+   PW  https://www.whatsapp.com/legal/terms-of-service -> 262683 bytes
       >  . You must not (or assist others to) directly, indirectly, through automated or other means, access, use, copy, adapt, modify, prepare derivative works based upon, distri       >  . You must not (or assist others to) directly, indirectly, through automated or other means, access, use, copy, adapt, modify, prepare derivative works based upon, distri
 OK      WhatsApp ToS: no access or collection through automated means OK      WhatsApp ToS: no access or collection through automated means
Line 1738: Line 1786:
       > e our Platform Manipulation Policy Explainer for more.) 14. Do not use self-bots or user-bots. Each account must be associated with a human, not a bot. (       > e our Platform Manipulation Policy Explainer for more.) 14. Do not use self-bots or user-bots. Each account must be associated with a human, not a bot. (
 OK      Discord Community Guidelines: no self-bots OK      Discord Community Guidelines: no self-bots
-   PW  https://support-dev.discord.com/hc/en-us/articles/8563934450327-Discord-Developer-Policy -> 157305 bytes+   PW  https://support-dev.discord.com/hc/en-us/articles/8563934450327-Discord-Developer-Policy -> 157304 bytes
       > engineer API Data from the form in which you obtain it. 20. Do not mine or scrape any data, content, or information available on or through Discord se       > engineer API Data from the form in which you obtain it. 20. Do not mine or scrape any data, content, or information available on or through Discord se
 OK      Discord Developer Policy: do not mine or scrape OK      Discord Developer Policy: do not mine or scrape
       >  Discord services (as defined in our Terms of Service). 21. Do not use message content obtained through the APIs to train machine learning or AI models (including large language models) unless expre       >  Discord services (as defined in our Terms of Service). 21. Do not use message content obtained through the APIs to train machine learning or AI models (including large language models) unless expre
 OK      Discord Developer Policy: no ML training on message content OK      Discord Developer Policy: no ML training on message content
-   PW  https://support.discord.com/hc/en-us/articles/208866998-Invites-101 -> 142202 bytes+   PW  https://support.discord.com/hc/en-us/articles/208866998-Invites-101 -> 142204 bytes
       > sages or copy the invite link. The invite panel will appear displaying a 7 days access link by default if you haven't already adjusted the invite settings for tha       > sages or copy the invite link. The invite panel will appear displaying a 7 days access link by default if you haven't already adjusted the invite settings for tha
 OK      Discord invites default to 7 days OK      Discord invites default to 7 days
-   PW  https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery -> 146311 bytes+   PW  https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery -> 146310 bytes
       > afety requirements for a safe environment. Server must have at least 1,000 members to qualify. Servers need to be at least 8 weeks old to be i       > afety requirements for a safe environment. Server must have at least 1,000 members to qualify. Servers need to be at least 8 weeks old to be i
 OK      Discord Server Discovery needs 1,000 members OK      Discord Server Discovery needs 1,000 members
 +   PW  https://transparency.meta.com/researchtools/meta-content-library/ -> 685212 bytes
 +      > Content Library and Content Library API provide comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels. Individuals can apply for access using
 +OK      Meta Content Library covers WhatsApp Channels
 +   GET https://core.telegram.org/bots/features -> 116993 bytes
 +      >  chats. All messages from channels where they are a member. Privacy mode is enabled by default for all bots, except bots that were added to a group as admins (bot admins always receive all messages ). It can be disabl
 +OK      Telegram bots: privacy mode on by default unless added as admin
  
 == 3. Telegram API limits == == 3. Telegram API limits ==
-   GET https://core.telegram.org/api/config -> 181820 bytes+   GET https://core.telegram.org/api/config -> 181819 bytes
       > drawal_enabled ": true, " channel_wallpaper_level_min ": 9, " channels_limit_default ": 500, " channels_limit_premium ": 1000, " channels_public_limit_       > drawal_enabled ": true, " channel_wallpaper_level_min ": 9, " channels_limit_default ": 500, " channels_limit_premium ": 1000, " channels_public_limit_
 OK      Telegram default join limit 500 channels/supergroups OK      Telegram default join limit 500 channels/supergroups
Line 1775: Line 1829:
       > https://t.me/durov/343"><time datetime="2024-09-06T13:52:50+00:00" class="datetime">Sep 6,       > https://t.me/durov/343"><time datetime="2024-09-06T13:52:50+00:00" class="datetime">Sep 6,
 OK      durov/343 dated 2024-09-06 OK      durov/343 dated 2024-09-06
-   GET https://t.me/durov/345?embed=1 -> 17334 bytes+   GET https://t.me/durov/345?embed=1 -> 17335 bytes
       > e consistent across the world. We've made it clear that the IP addresses and phone numbers of those who violate our rules can be disclosed to relevant authorities in response to valid legal requests       > e consistent across the world. We've made it clear that the IP addresses and phone numbers of those who violate our rules can be disclosed to relevant authorities in response to valid legal requests
 OK      Search clean-up + IP/phone disclosure (Durov, 2024-09-23) OK      Search clean-up + IP/phone disclosure (Durov, 2024-09-23)
Line 1808: Line 1862:
       > Find Telegram channels for advertising placement Telemetrio has 7M+ channels categorized into 41 categories Search channels by keywords        > Find Telegram channels for advertising placement Telemetrio has 7M+ channels categorized into 41 categories Search channels by keywords 
 OK      Telemetr.io (Web Archive 2026-09-26): 7M+ channels OK      Telemetr.io (Web Archive 2026-09-26): 7M+ channels
-   PW  https://disboard.org/ -> 407293 bytes+   PW  https://disboard.org/ -> 408712 bytes
       > admin? Add Your Server! DISBOARD is the place where you can list/find Discord servers . Find and join some awesome servers listed here. Or login        > admin? Add Your Server! DISBOARD is the place where you can list/find Discord servers . Find and join some awesome servers listed here. Or login 
 OK      Disboard is a self-listing directory OK      Disboard is a self-listing directory
provenance/design/platforms/messaging_channels.txt · Last modified: by karel.kubicek.claude