Also /c/modabuse. Also /c/yepowertrippinbastards. Also lemmy.ml/c/worldnews, comrade, ACAB, and 552 individual accounts across 67 instances, about half of them on lemmy.world.

None of this is in the source code. It’s downloaded at runtime from a file nobody has ever looked at.

If you’re just tuning in

Tesseract is a third-party web frontend for Lemmy, maintained by asimons04 and licensed AGPL-3.0. Admins deploy it on their own servers alongside or instead of lemmy-ui, and there are public instances of it people use to browse Lemmy generally. If you’ve used a Lemmy site that didn’t look like stock Lemmy, there’s a fair chance it was this.

Last week db0 posted a PSA: Tesseract contains a blacklist of instance domains compiled directly into the application. 32 of them. Admins can’t see it, can’t configure it, and aren’t told it’s there. Connect to a listed instance and the app tells you it’s “incompatible,” which is not true.

I went through the code to see how that was implemented. The hardcoded list turns out to be the small half of the system.

There’s a second filter policy fetched over HTTP every time the app loads. It isn’t in the git repository. It’s unauthenticated and world-readable, so anyone can pull it. Right now it carries 552 user accounts, 2,275 username patterns, 54 instances, 97 communities, 289 keyword patterns and 351 domains, with every category set to hide matches rather than flag them. Not collapsed behind a click. Simply absent, with no indication anything was removed.

Verify all of it in ten seconds

curl -s https://tesseract.dubvee.org/tesseract/api/system/policy \
  | base64 -d | gunzip > policy.json

That’s the live policy, base64-wrapped gzip, 111KB of JSON when it unpacks. There’s a stale fallback copy at /data/policy.dat as well.

It filters criticism of moderators

  • lemmy.sdf.org/c/modabuse — listed
  • lemmy.dbzer0.com/c/yepowertrippinbastards — listed
  • lemmy.dbzer0.com/c/YPTBcirclejerk — listed
  • community regex power ?tripping?
  • keyword censoring me

Call the rest of it whatever you like. This part is not spam defence.

It filters words

The 32 community name patterns include Communis(t|m), Conservativ(e|es|ism), Leftis(t|m), Libertarian(ism)?, ^Green Part(y|ies), Zionis(t|m), (Police|Cops), guillotine and billionaire.

Keywords include comrade, ACAB, neoliberal, proletaria(n|t) and death to.

Filtered communities on instances that aren’t blocked: lemmy.ml/c/worldnews, lemmy.today/c/news, lemmy.ca/c/politicalnewscanada, lemmy.ca/c/usa, infosec.pub/c/strategic_unions.

The 552 users aren’t bots

67 instances. 272 on lemmy.world alone, 40 on sh.itjust.works, 19 on lemmy.ca, and 28 instances contributing exactly one person each.

355 of the 552 usernames are plain alphabetic, twelve characters or under, median length eight. Only 36 look like spam registrations. A bot list looks like the opposite of that.

Seven of them aren’t even Lemmy. There are Mastodon and Friendica accounts in there: people who have never used Lemmy, hidden by a Lemmy frontend, with no possible way of finding out.

I have the list and I’m not posting it. Most of these are ordinary people who got pattern-matched, and 552 names on this comm is a harassment target inside an hour. Run the command above and grep for yourself.

And it lies about it

When the instance block fires you get: “Incompatible Instance. Not Supported. $instance is not compatible with Tesseract.”

Nothing is incompatible. It’s a policy decision dressed as an API error, and it’s what had db0 chasing a version mismatch that never existed.

For the hidden users, communities and keywords, you get no message at all.

Admins can’t switch it off

Tesseract has env vars for PUBLIC_DOMAIN_BLACKLIST, PUBLIC_FAKE_NEWS_BLACKLIST and the shortener lists. There is none for either blocklist. enableToxicMode bypasses the other filters and explicitly not this one.

Self-host it and you cannot disable this, nothing in your config admits it exists, and the contents can change without you pulling a commit.

Before someone says it

A lot of that domain list is real spam defence. It filters conservatism as well as communism. “It targets the left” doesn’t survive the data and I’m not going to pretend it does.

The problem is that spam filtering and political editorial got welded into one undocumented, remotely-updatable blob, shipped hidden, to admins who’ve never read it and users who don’t know it’s there. The spam work is what makes the rest unauditable: “it’s a spam list” answers every individual question and none of the whole.

And /c/modabuse is not spam.

Asks

  1. Publish the runtime policy in the repo, or kill the endpoint.
  2. Stop reporting a policy block as a technical incompatibility.
  3. Tell users when something’s been hidden. One line.
  4. Give operators an off switch, like every other blacklist in the codebase has.

It’s AGPL-3.0 and db0 already forked it. That’s the licence working as designed. But forking isn’t disclosure, and the admins who need this are precisely the ones with no reason to go looking.

If you run Tesseract, you are relaying a 111KB moderation policy you have never read, under your instance’s name, to users who don’t know it exists.

Full contents of every list, unedited, in the comments.

    • ripcord@lemmy.world
      link
      fedilink
      English
      arrow-up
      28
      ·
      24 hours ago

      I don’t think this is AI.

      Among other things, I used to write like this for years before LLMs were a thing.

      • prole@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        14
        ·
        21 hours ago

        This was my reaction to all of the “don’t use LLM for your post” comments as well… I didn’t get that vibe at all.

        But I guess nowadays we need to avoid writing well and using proper grammar so as to not be confused with LLM.

        Fucking backwards ass shit. Certainly this won’t make people even more stupid.

      • VeganCheesecake@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        5
        arrow-down
        3
        ·
        edit-2
        22 hours ago

        There’s a lot of specific sentence fragments that read very LLM to me. In the end, that of course isn’t proof, and there definitely are people who’s style is very close to what LLMs output today.

        • 4am@lemmy.zip
          link
          fedilink
          English
          arrow-up
          10
          ·
          19 hours ago

          LLMs were trained on things written on the Internet, where lots of authors took a “faux-officiant” style where things need to look like an official report or newscast transcript but have headings like “If you’re just tuning in” for humor.

          Tech bros created a world we can’t trust so they could do their crimes in the open and we would have reason to doubt the evidence

          • VeganCheesecake@lemmy.blahaj.zone
            link
            fedilink
            English
            arrow-up
            5
            arrow-down
            6
            ·
            16 hours ago

            Yes, darling, I’m not illiterate. I don’t think every long, grammatically correct text with sub-headings is generated. Sometimes I even write long-form text myself.

            What tripped me up here is:

            • the use of “— listed” for some of the things… listed,
            • the two short definitive sentences here

            355 of the 552 usernames are plain alphabetic, twelve characters or under, median length eight. Only 36 look like spam registrations. A bot list looks like the opposite of that.

            • the way an already obvious but irrelevant point is overstated here

            Seven of them aren’t even Lemmy. There are Mastodon and Friendica accounts in there: people who have never used Lemmy, hidden by a Lemmy frontend, with no possible way of finding out.

            • the way something obvious from context is stated in a dramatic way here

            I have the list and I’m not posting it.

            • “Doesn’t survive the X” is a very Claude sentence for me. It is also a statement I feel isn’t entirely supported by fact, since the mayority of the active users and communities here are leftist.

            A lot of that domain list is real spam defence. It filters conservatism as well as communism. “It targets the left” doesn’t survive the data and I’m not going to pretend it does.

            • X is not Y statement, with X and Y being actions done by entirely different parties, which doesn’t really make sense contextually.

            But forking isn’t disclosure,

            • They stated they’d put the full list in the comments, which they didn’t do, and which also doesn’t jive with the earlier statement about hiding individual usernames. Also, the unedited feels superfluous.

            Full contents of every list, unedited, in the comments.

            Sorry for the shitty formatting, I am writing this on the train to have something to do after my headphones died. Also, there isn’t any definitive proof here, but all of this contributes to the generated feel.

            • chloroken@lemmy.ml
              link
              fedilink
              English
              arrow-up
              2
              ·
              9 hours ago

              I think you need help. You’re chasing ghosts and you look ridiculous. This is coming from an AI-hater.

              • brbposting@sh.itjust.works
                link
                fedilink
                English
                arrow-up
                1
                ·
                7 hours ago

                Lotta the AI hate makes a lotta sense!

                Are you forced to use it for work? I’m thinking folks who love AI and/or use it daily will be in the best position to recognize the Claudisms they’ve seen hundreds and even thousands of times.

                Oh and get this,

                apparently that model loves to say “load bearing” and there was a commenter who picked that phrase up from their colleagues writing and started using it in their speech. They were asked why they were talking like Claude! They strongly dislike AI and never used it and were caught totally off guard. (Stinky situation, now that I mention it it’d make me want to only borrow phrases from pre-2022 books or something.)

              • VeganCheesecake@lemmy.blahaj.zone
                link
                fedilink
                English
                arrow-up
                1
                ·
                8 hours ago

                Lol, I might need help, but not cause of this. In the end, it doesn’t really matter either way, but I do think it’s interesting what writing quirks make someone perceive a text as more likely to be generated.