automation
Technical notes on web development, DevOps, and AI integration.
37 articles
- 13:22tooling
AI Chat Scraper Audit: From False Positives to Precise Regex
A loose completion gate called a half-written answer done. One audit produced four fixes: pre-answer failure patterns, an anchored heading gate, probe-copy.
TL;DR: The scraper kept cutting AI answers short because loose completion gates matched "Sources" inside citation lines. The fix narrows trust: failure patterns only count before any answer text, and the completion gate requires a contracted final heading via a strict regex. Added a --probe-copy diagnostic and evidence logging; selftest grew from 72 to 79 asserts.
#python#regex#debugging - 02:28tooling
The .rejected File: When Human Decisions Beat Derived Status
My research registry only had derived statuses, until a .rejected file gave human decisions a seat in the precedence chain.
TL;DR: A dismissed research topic kept reappearing in the registry scan, so the author added a .rejected marker file that humans write and tools only read, storing the reason in a rejected_reason field. The article compares this to precedence chains in rustup, pyenv, nvm, and git. Key lessons: markers are human decisions, and overrides must be visible, never silent.
#python#automation#tooling - 11:31ai
Duplicate-Gate Blind Spot: Vector Coverage and 0.50
A cosine-similarity duplicate gate is only as good as its vector coverage. Lessons from a 32-article blind spot and a self-measured 0.50 cutoff.
TL;DR: I nearly trusted a duplicate check running on a half-populated index, since 164 of 196 articles had vectors and the missing 16% never showed up. The fix was a backfill plus a self-check confirming each article's own title returns its slug. The 0.50 cutoff isn't universal either; measure your corpus's own score distribution first.
#embedding#python#automation - 16:18ai
Automate Browser AI: Delegating Article Drafts to Free Qwen Chat
Building a free article draft generator from chat.qwen.ai via automated browser: mechanics, pitfalls, and fallback that make it cron-worthy.
#qwen#browser-automation#content-pipeline - 18:55devops
Healthy Container, Dead Browser: A Compose Migration Trap
Five hours of 'healthy' while the browser inside the container had been dead since minute one. Notes on user, HOME, and shallow healthchecks.
#docker#playwright#debugging - 10:36devops
One API Key Just Stops Research at 429
A 429 rate limit froze my research pipeline. Designing multi-key rotation: per-HTTP-status cooldown, single-pass failover, and errors that should not rotate.
TL;DR: The pipeline hit 429 rate limits, so the author added key rotation with per-status cooldowns: 60s for 429, 300s for 402, an hour for auth errors. Rotation is single-pass to avoid infinite loops, and request errors like 404 throw immediately. The author stresses rotation only raises ceilings; fix wasteful requests first.
#firecrawl#python#automation - 11:37tooling
DeepSeek Login Died Between Sessions. Three Scripts Fixed It.
Re-logging into DeepSeek via VNC every week got old. I transferred the whole session into Camofox instead: cookies, token, keepalive.
TL;DR: DeepSeek sessions in Camofox died because logging in means two layers: HttpOnly cookies and a localStorage userToken for Bearer API calls. Importing cookies alone patched half the state, so the login page persisted. Three scripts merge cookies into Playwright's storage-state.json, inject the wrapped token, and poll every five minutes to confirm the session.
#automation#playwright#deepseek - 22:45frontend
I Filled the Textarea, React Never Noticed
The text visibly entered the textarea, yet React never saw a change. Why plain assignment fails on controlled components and how the native prototype setter fixes it.
TL;DR: Automating React apps like DeepSeek fails when you set textarea.value directly, because React replaces the setter on each element instance and swallows non-user input events. The fix: grab the native setter from HTMLTextAreaElement.prototype, call it with your text, then dispatch a bubbling input event. Since the icon-only send button has no label, press Enter instead.
#deepseek#react#automation - 19:31ai
My AI Found an Angle, Then Made Up a Stat
The chat surfaced a valid new angle and one unverifiable statistic. Finding angles and proving claims are different jobs; only one of them belongs to the chat.
TL;DR: An AI chat surfaced a genuinely new research angle, but then invented a stat attributed to Stanford HAI that couldn't be verified anywhere. The lesson: finding angles and proving claims are separate jobs, so the pipeline now asks AI for angles, then opens every primary source manually. Citations offer traceability, not truth; walking the trail is your job.
#ai-agents#llm#automation