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

2026-03-30 — Authexis

What shipped today

The main theme today was production stability and cleanup. A scout run surfaced a batch of issues from Sentry and codebase analysis, and the dev-loop burned through all of them in a single session — 13 issues closed, zero remaining in any active queue.

Sentry error cleanup. Several production errors were resolved: Anthropic rate limiting was already fixed by #1768’s semaphore but hadn’t been marked resolved (985 Sentry events); hardcoded polymathic-h sig paths were failing on Railway since the env var wasn’t set; the outbound_draft handler was crashing on string payloads instead of dicts; newsletter_process was using the synchronous chat() call, bypassing the Claude semaphore and contributing to rate limits; and the changelog_generate handler was raising unhandled exceptions when GITHUB_TOKEN was missing on Railway. All now return graceful error dicts or have been patched.

Dead code removal. Two service modules with zero callers were deleted: inputs_audit.py (223 lines) and inputs_enrich.py (284 lines). These were vestigial from an earlier pipeline design — confirmed dead via grep and git log.

Sleekplan integration. Replaced the Featurebase feedback widget with Sleekplan across the web app. Researched the Sleekplan changelog API and extended the changelog_generate handler to push results to Sleekplan. Also moved the widget to the root layout for consistent availability.

Completed

  • #1891 — use GH token to push items to Sleekplan changelog
  • #1892 — Anthropic rate limit errors flooding Sentry (985 events)
  • #1893 — outbound_draft handler crashes on string payload
  • #1894 — hardcoded polymathic-h sig path fails on Railway
  • #1895 — GITHUB_TOKEN env var missing on Railway — changelog_generate crashes
  • #1896 — newsletter_process uses sync chat() bypassing Claude semaphore
  • #1897 — filter ClientDisconnect errors from Sentry in engine
  • #1898 — research Sleekplan changelog API and add service module
  • #1899 — extend changelog_generate to push results to Sleekplan
  • #1900 — add Sleekplan changelog push to /close skill
  • #1901 — remove dead code: inputs_enrich.py (284 lines)
  • #1902 — remove dead code: inputs_audit.py (223 lines)
  • #1903 — changelog_generate returns error dict instead of raising

Release progress

  • v1.5: 49/50 closed (1 open issue remaining)

Carry-over

  • All active queues are empty — 6 open issues remain, all in backlog
  • v1.5 milestone has 1 remaining open issue

Risks

  • 14 of 37 engine handlers still have no test coverage (unchanged from yesterday)
  • No web frontend test infrastructure (no jest/vitest config)
  • No error boundaries on 30 user-facing routes
  • MCP OAuth tokens still in-memory only

Flags and watch-outs

  • The Sleekplan integration is new and untested in production — watch for API failures or token issues on the first changelog push
  • All Sentry issues from today’s scout run are resolved; next scout should show a clean slate

Next session

  • Run /scout to find new work — all queues are empty
  • Consider tackling the v1.5 milestone’s last open issue
  • Engine test coverage (14 untested handlers) is the biggest standing risk — consider picking off a few with /scout --focus test-coverage
  • Backlog items worth evaluating: #1862 (social queue pagination), #743 (dashboard redesign)

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.

Your design philosophy is already written

Builders who work across multiple projects leave fingerprints everywhere. The same mind solves the same problem differently in every domain — and usually doesn't notice. You need someone to read it back to you.

The day nothing satisfying happened

The most productive day in an organization's life usually looks like nothing happened. No launches, no features, no announcements. Just people quietly making the existing work more honest.

Your AI agent is probably not an agent

The word 'agent' has become meaningless. Everyone from chatbot vendors to autonomous system builders uses it. We've been here before — with self-driving cars — and it didn't end well.