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

Work log: Authexis — March 14, 2026

What shipped today

The briefing email system got a major upgrade. Stalled content detection now flags pieces that have been sitting in the same stage too long, with traffic-light health dots (green/yellow/red) giving an at-a-glance view of pipeline health. Content items in the briefing now expand to show all active stages — not just a count — so the reader can see exactly what’s in progress and where things are stuck. The information pyramid format restructures pipeline status emails to lead with what matters most. Together, these changes make the daily briefing a genuinely useful operational dashboard rather than a summary you skim and ignore.

The social queue UI got polish: confirmation dialogs before destructive actions (delete/archive), aria-labels on icon-only buttons for accessibility, and a proper empty state that guides users to create their first post instead of showing a blank page.

On the reliability side, briefing generation now correctly fails when email delivery fails — previously it would silently mark the briefing as generated even if the email never sent. A new periodic sweep auto-recovers content stuck in pending stages, and there’s a new MCP tool (redo_content_field) for regenerating individual content fields without restarting the whole pipeline.

The biggest investment was test coverage. The parent issue (#1193) identified that 69% of engine handlers had no unit tests. We decomposed it into four children and shipped all of them: content_field_generate (38 tests), blog_publish (15 tests), rss_scan (14 tests), google_search_scan (8 tests), and briefing_generate (37 tests) — 112 new tests total. These cover pure helper functions, lifecycle classification, and handler smoke tests.

Completed

  • #1174 — MCP: add redo/regenerate tool for content fields
  • #1176 — Engine sweep for auto-recovering stuck pending stages
  • #1178 — Information pyramid format for pipeline status emails/notifications
  • #1184 — Briefing: add stalled detection and days-in-stage to content items
  • #1185 — Briefing: add traffic-light health indicator to content section
  • #1186 — Briefing: expand content items to show all active stages
  • #1190 — Social queue: add confirmation dialogs for delete and archive actions
  • #1191 — Social queue: add aria-labels to icon-only buttons
  • #1192 — Engine: briefing marked as generated even when email send fails
  • #1193 — Engine: 69% of handlers have no unit tests (parent, decomposed)
  • #1194 — Social queue empty state: add guidance and action button
  • #1199 — Add unit tests for content_field_generate handler
  • #1200 — Add unit tests for blog_publish handler
  • #1201 — Add unit tests for rss_scan and google_search_scan handlers
  • #1202 — Add unit tests for briefing_generate handler

Release progress

  • v2: 20/20 closed — complete
  • v1-outbound: 19/19 closed — complete
  • v1.5: 11/12 closed — only #743 (dashboard redesign) remains, backlogged

Carry-over

  • Uncommitted email override UI controls (admin.ts, workspace-detail-client.tsx, workspace-form.tsx, settings page) — in-progress from a previous session, not part of today’s work
  • engine/uv.lock has uncommitted changes

Risks

  • None identified. All milestones are effectively complete.

Flags and watch-outs

  • The test coverage push focused on pure functions and smoke tests. Full integration tests for handle() on the larger handlers (briefing_generate, content_field_generate) would require extensive mocking — acceptable tradeoff for now.
  • #1036 (in-memory rate limiter ineffective in serverless) remains blocked — architectural question that needs a design decision.

Next session

  • Decide what to do with v1.5 — close the milestone (dashboard redesign is backlogged) or keep it open?
  • Ship the email override UI controls that are sitting uncommitted, or discard if they’re stale
  • Consider a scout run — the active pipeline is empty, good time to find the next wave of work
  • Backlog candidates: #743 (dashboard redesign), #789 (self-curated article lists), #927 (Dockerfile Python version)

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.