Skip to main content
Paul Welty, PhD AI, WORK, AND STAYING HUMAN

Work log: Authexis — March 15, 2026

What shipped today

Massive autonomous pipeline session — 19 PRs merged across two major themes: hardening and test coverage. The session ran the full /triage --auto/issue prep --auto/issue exec --auto loop repeatedly, clearing the entire issue queue without manual intervention.

Input validation and error handling sweep. Scout-discovered issues from yesterday’s session were triaged and executed in rapid succession. Client-side maxLength attributes were added to all form inputs (#1222). Server-side length validation landed across three layers: API write endpoints (#1223), content server actions (#1240), idea server actions (#1239), and bookmarks/settings actions (#1241). Stripe webhook handlers and content server actions now check database update results instead of silently ignoring failures (#1226, #1227). The engine’s settings_enrich and voice_infer handlers got proper error handling for unchecked DB updates (#1237). This closes the entire input validation gap that scout identified.

Engine performance improvements. Search result scoring in google_search_scan now runs in parallel via asyncio.gather instead of sequential loops (#1210). Duplicate URL checks in rss_scan and google_search_scan were batched into single queries (#1209). Mastodon and Threads social metrics fetching was parallelized (#1229). Blog queue reorder now uses a database RPC function for atomicity (#1211).

Briefing enhancements. Failed social posts now appear in the daily briefing email (#1212). Upcoming posts in the briefing are now clickable links (#1217). Blog queue destructive actions (clear, shuffle) now have confirmation dialogs (#1228).

Engine handler test coverage — phase 2 complete. The big deliverable: decomposed #1230 into 4 child issues and executed all of them. Added 144 unit tests across 12 handler test files covering: interview_generate, idea_generate, content_research_sources, chat_message, newsletter_process, outbound_draft, feed_discovery, content_generate_meta, workspace_analyze, prospect_create, and voice_infer. Each file tests pure helper functions directly plus handler lifecycle with mocked DB/Claude calls. The test patterns (mock sequencing, side_effect callables for per-call failures, BudgetExceededError instantiation) are now well-established for future handler tests.

Completed

  • #1209 — Batch duplicate URL checks in rss_scan and google_search_scan
  • #1210 — Parallelize search result scoring in google_search_scan
  • #1211 — Atomic blog queue reorder via database RPC function
  • #1212 — Add failed social posts section to daily briefing email
  • #1213 — Missing input length validation (decomposed into #1222-#1224)
  • #1217 — Make upcoming posts clickable in briefing email
  • #1222 — Add maxLength to client-side form inputs
  • #1223 — Add server-side length validation to API write endpoints
  • #1224 — Add length validation to server actions (decomposed into #1239-#1241)
  • #1226 — Check database update results in Stripe webhook handlers
  • #1227 — Check database update results in content server actions
  • #1228 — Add confirmation dialogs for blog queue destructive actions
  • #1229 — Parallelize Mastodon and Threads metrics fetching
  • #1230 — Engine handler test coverage gaps phase 2 (decomposed into #1246-#1249)
  • #1237 — Add error handling to unchecked DB updates in settings_enrich and voice_infer
  • #1239 — Add length validation to idea server actions
  • #1240 — Add length validation to content server actions
  • #1241 — Add length validation to bookmarks and settings server actions
  • #1246 — Tests for interview_generate and idea_generate handlers
  • #1247 — Tests for content_research_sources and chat_message handlers
  • #1248 — Tests for newsletter_process, outbound_draft, and feed_discovery handlers
  • #1249 — Tests for content_generate_meta, workspace_analyze, prospect_create, and voice_infer handlers

Sentry duplicates closed: #1218, #1231, #1243, #1250, #1254, #1256, #1258, #1259, #1260

Release progress

  • v1.5: 11/12 closed (1 open — #743 Dashboard redesign, backlog)
  • v2: 20/20 closed
  • v1-outbound: 19/19 closed

Carry-over

  • #1215 — Humanizer phrases (needs-clarification, no author reply yet)
  • #1036 — In-memory rate limiter (blocked on Upstash setup)
  • Dirty working tree from prior sessions (modified web/actions/admin.ts, settings workspace files, engine/uv.lock) — not from this session’s work

Risks

  • Sentry auto-create integration is out of control. AUTHEXIS-11 TimeoutError generated 8 duplicate GitHub issues today alone. AUTHEXIS-12 also started duplicating. The Sentry→GitHub integration needs its auto-create rules disabled or filtered for these recurring issues, or it will keep flooding the queue.

Flags and watch-outs

  • The dirty working tree files (admin.ts, workspace settings, uv.lock) have been modified but uncommitted across multiple sessions. Worth investigating whether these are intentional WIP or accidental leftovers.
  • All 144 new engine tests use mocked DB — no integration tests. The mock patterns are solid but can’t catch real DB schema mismatches.

Next session

  1. Fix Sentry auto-create spam. Either disable the GitHub integration for AUTHEXIS-11/12, or add a dedup filter. This is the most urgent operational issue.
  2. Investigate dirty working tree. The modified admin.ts and workspace settings files have been sitting uncommitted — determine if they’re WIP or should be reverted.
  3. Run /scout --auto to find the next batch of improvements now that the queue is empty.
  4. Check #1215 — follow up with Paul on the humanizer phrases clarification.

Why customer tools are organized wrong

This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.

Infrastructure shapes thought

The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.

Server-side dashboard architecture: Why moving data fetching off the browser changes everything

How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.

The work of being available now

A book on AI, judgment, and staying human at work.

The practice of work in progress

Practical essays on how work actually gets done.

The delegation problem nobody talks about

When your automated systems start finding real bugs instead of formatting issues, delegation has crossed a line most managers never see coming.

What your systems won't tell you

The most dangerous gap in any organization isn't between what you know and what you don't. It's between what your systems know and what they're willing to say.

Most of your infrastructure is decoration

Organizations are full of things that look like governance, strategy, and quality control but are actually decorative. The trigger conditions nobody reads, the dashboards nobody checks, the review processes that rubber-stamp. When you finally audit what's functional versus ornamental, the ratio is alarming.