How I Built A Pre-Post QC Gate to Hide Automation

Automation leaves footprints.

Three weeks into running a Bluesky queue, I saw a post go out that mentioned "the content pipeline."

On a technical blog, that phrase is fine. On a social timeline, it is a red flag. It tells human readers they are looking at a content farm.

My system was working mechanically, but it had no filter. Whatever the AI produced went straight to the queue. Whatever was at the front of the queue got posted.

I built a gate script called bluesky-qc.mjs to fix this. It acts as a filter between the generation step and the posting step.

Here is how the four gates work:

  • Gate 1: Phrase Detection. I use a strict list of words to catch automation signals. It blocks terms like "AI-generated," "cron job," "batch test," and "content pipeline." If a post sounds like a robot wrote it, the gate stops it.

  • Gate 2: Staleness Check. This prevents two types of errors. First, it catches time-sensitive phrases like "just released" that become lies if the post is delayed. Second, it checks the age of the entry. If an entry is older than 14 days, it fails.

  • Gate 3: Engagement Prediction. This script looks at my past 300 posts. It calculates a baseline score using likes, replies, and reposts. If a post uses hashtags that historically perform poorly, the system flags it.

  • Gate 4: Quality Review. This is a planned step to use a model for a final quality pass.

Every failed post goes into a rejection log. I review this log weekly. It helps me fix my prompts. If the AI keeps using "pipeline" jargon, I update the prompt to stop it.

The system follows a simple rule: Gate early, make failures informative, and never swallow errors silently.

It is better to skip a day of posting than to post something that reveals the automation.

Source: https://dev.to/morinaga/how-i-built-a-pre-post-qc-gate-that-blocks-bluesky-automation-from-self-revealing-41ja

Optional learning community: https://t.me/GyaanSetuAi