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

Synthesis: March 25, 2026

Authexis — product simplification complete across every surface

The largest single-day output in the fleet: 30 issues closed, completing the product simplification refactor across web, engine, API, MCP tools, and Apple app. The stage_status column was fully retired — removed from every query, every handler, every API response. The API v2 endpoints were realigned to the simplified 4-status pipeline. MCP tools were updated to use flat columns. The Apple app’s SwiftUI views, API client, and data models were all updated (though untested in Xcode — a noted risk).

The test suite went from 280 tests (25 failing) to 326 tests with 0 failures. Two scout passes filled in remaining gaps: N+1 query fix in workspace settings, missing database indexes on contents table, dead code cleanup, and security hardening (workspace ownership validation on admin endpoints).

Three milestones are now complete: v2.0 (product simplification, 25/25), v2.1 (content model refactor, 15/15), v2.2 (simplified pipeline, 3/3). Only v1.5 remains with 1 open issue (#743 dashboard redesign, backlog). The active queue is empty.

Eclectis — learning loop and homepage overhaul

Twenty-four issues closed across two major themes. The learning feedback loop — the product’s core “learns you over time” promise — got its missing piece: skip tracking. Impression events fire when articles render, a background diff identifies skipped articles (rendered but not voted), and the learning engine now considers both explicit votes and implicit skips. A dedup index prevents double-counting.

The homepage received 10 improvements from a Playwright audit: sample briefing preview card showing real AI-generated content, new hero headline (“Your morning briefing, trained on what matters to you”), persona-driven scenario sections, free tier reframing from “limited” to “try it,” and loading state improvements. A production 500 error from isomorphic-dompurify in Vercel’s serverless runtime was fixed by switching to sanitize-html.

Also closed: #376 (per-source throttling, won’t-fix) and #77 (sort/filters, won’t-fix) — scope decisions to keep the product focused. Footer now links to /privacy and /terms that don’t exist yet (flagged).

Paulos — status report pipeline and governance

The per-project status report pipeline shipped end-to-end, replacing the centralized morning briefing. The full stack landed in one session: /status-report skill (#613), HTML email renderer with 6 color-coded section cards (#614, 11 tests), CLI command wired into rollover’s Phase 3.5 (#615), and retirement of the old com.paulos.briefing and com.paulos.editorial launchd agents (#616).

A critical SSH command injection vulnerability was fixed in setup_cmd.py — the escaped variable was created but never used, leaving raw plist content interpolated into a shell here-document (#617). Brevo’s send_email() now raises on bad responses (#621). 234 lines of dead config code removed (#620). Five silent except Exception: pass blocks now log at debug/warning level (#618).

RISKS.md was established as the third governance document alongside PRODUCT.md and DECISIONS.md. A template was created and seeded with 5 risks for paulos (#629). The broader integration (#607) was decomposed into writer skills (#630) and reader skills (#631).

The supervisor session handled fleet operations: ran /sum-up and /reflect for March 23 and 24, published two podcast episodes (“When the queue goes empty” and “Your empty queue isn’t a problem” via OpenAI TTS), switched all API models to claude-sonnet-4-6, switched TTS to OpenAI (ash voice), standardized env var loading, archived the utilities repo, and monitored the fleet throughout the day.

Dinly — security and accessibility hardening

Six issues closed in a focused hardening session driven by two scout runs. Security improvements added ownership verification guards to three endpoints that previously allowed cross-user access. Input validation added length limits and URL scheme checks to recipe creation. An accessibility pass added aria-labels to 16 interactive elements and focus-visible rings to 25 custom buttons. ESLint errors cleared to zero. The codebase is now clean: 0 lint errors, 132 tests passing, empty issue queue.

Phantasmagoria — modifier system fixed

Two issues plus several unnumbered fixes. The biggest was the modifier system: every modifier was rendering as the same +8% unity stat due to keyword matching on names. Rewrote the system so Phase 2 AI explicitly specifies modifier_stat and modifier_value, producing varied contextually appropriate modifiers. Also fixed hallucinated Stellaris tech names by adding a VALID_TECHS validation set, added the missing add_tech_progress renderer handler, and cleaned up 46 lines of dead code. The build now has 33 events with real modifier stats — ready for playtesting in Stellaris 4.3.

Scholexis, Skillexis, Synaxis-h, Simplebooks, Prakta — idle

Five projects had no code changes. All are blocked on human decisions or infrastructure actions:

  • Scholexis — 4 issues need Paul’s clarification (AI task breakdown, tokens page, production deployment, data migration). Next.js port at 109/113.
  • Skillexis — second consecutive idle day despite 7 ready-for-dev issues. The orchestrator isn’t dispatching. #172 stuck in-progress since March 22.
  • Synaxis-h — maintenance mode after 13 scout passes. 3 issues need Paul’s input.
  • Simplebooks — fourth day blocked on #1 (merge 16 feature branches). Decision, not difficulty.
  • Prakta — idle but 20+ merged PRs need production deployment and smoke testing.

Cross-cutting themes

The human bottleneck is real. Five projects are idle, and none of them are blocked by technical problems. They’re blocked by decisions: merge strategy, scope clarification, deployment, business content. The fleet’s 4-day average of 90+ issues/day dropped to ~96 total with half the projects contributing zero. The machines finished. The humans haven’t caught up.

Queue-empty is the new normal. Authexis, Dinly, and Prakta now have empty active queues. Eclectis and Paulos are close. The fleet is transitioning from “build everything” to “decide what’s next” — a phase most organizations don’t plan for.

Test suites as quality gates. Authexis went from 280 tests (25 failing) to 326 tests (0 failing) in one day. Dinly reached 132 tests with 0 lint errors. The projects that shipped the most code also shipped the most tests — testing isn’t slowing them down, it’s enabling confidence to ship at speed.

Governance docs maturing. RISKS.md joins PRODUCT.md and DECISIONS.md as the third governance document. The pattern is: every project has living docs that capture what (PRODUCT), why (DECISIONS), and what could go wrong (RISKS). ROADMAP.md is designed but not yet built.

Carry-over

  • Status report first real run — fires tonight at 2am via rollover. First end-to-end test with all projects.
  • Skillexis orchestrator — not dispatching despite full queue. Needs investigation.
  • Simplebooks #1 — merge strategy decision, day 4.
  • Prakta deploy — 20+ merged PRs need production deployment.
  • Phantasmagoria playtest — 33-event build ready for Stellaris 4.3 testing.
  • RISKS.md skill integration — #630 (writers) and #631 (readers) ready for prep.
  • ROADMAP.md — #609, needs decompose.
  • 5 needs-clarification issues on paulos — waiting on Paul.

Risks

  • Status report pipeline untested in production — first real run tonight. Python code tested via CLI, but the full rollover → status-report chain is new.
  • Authexis Apple app changes uncompiled — extensive SwiftUI updates haven’t been verified in Xcode. Potential build issues.
  • Phantasmagoria modifier values unvalidated — AI could return game-breaking values (e.g., +50%). No range clamping.
  • Skillexis orchestrator stall — two days idle with a full queue suggests a configuration or detection issue.

By the numbers

ProjectIssues closedCommitsNotable
Authexis3024326 tests, 0 failing. v2.0/v2.1/v2.2 complete
Eclectis2422Learning loop shipped, homepage overhauled
Paulos2335Status report pipeline, RISKS.md, 2 podcasts
Dinly1770 lint errors, 132 tests, queue empty
Phantasmagoria20Modifier system fixed, playtest ready
Scholexis01Idle — 4 issues need clarification
Skillexis01Idle — orchestrator not dispatching
Synaxis-h01Maintenance mode
Simplebooks01Blocked on merge decision (day 4)
Prakta01Idle — needs deploy
Total9693

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.

Designed to learn, built to ignore

The most dangerous organizational failures don't throw errors. They look fine, return results, and quietly stay frozen at the moment of their creation.

The variable that was never wired in

The gap between having a solution and using a solution is one of the most persistent failure modes in organizations. You see the escaped variable. You see the risk register. You assume the work is done.

Your empty queue isn't a problem

Dropping a column from a production database is the organizational equivalent of admitting you were wrong. Five projects cleared their queues on the same day, and the bottleneck that emerged wasn't execution — it was taste.