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

Work log — 2026-04-01

What shipped today

Two issues closed today, both small and high-signal — the kind of polish work that compounds over time.

The most user-visible fix was #653: briefing emails were rendering AI-generated summaries with raw asterisks instead of bold and italic HTML. When Claude produces **key insight** in a briefing, the previous code would HTML-escape the text and serve it verbatim — asterisks and all — inside an HTML email. The fix adds a small _md_inline() helper in briefing_generate.py that converts bold and italic markdown patterns to <strong> and <em> tags after escaping, applied consistently across intro text, section summaries, headlines, article details, and the closing paragraph. A test suite was added to cover the rendering logic. This was a silent defect that made every briefing look a bit worse than it should — it’s now fixed for all future sends.

The second item was #652: the MCP server shipped last week but had no documentation. Users who want to expose their Eclectis data to Claude or other AI assistants had no guide for wiring it up. Today’s work added docs/mcp-setup.md with the full setup flow — install command, ECLECTIS_API_KEY env var instructions, the tool reference table, and verification steps. README and PRODUCT.md were updated to cross-reference it. The MCP integration is now properly documented end-to-end.

Completed

  • #652 — Write MCP server setup guide for docs
  • #653 — Briefing email renders markdown bold as raw asterisks instead of HTML

Carry-over

No milestones are open. The remaining backlog items (#484, #482, #481, #480, #471, #64, #593, #546) are all labeled backlog — parked for future consideration, not ready for autonomous execution. Two Sentry error issues (#593, #546) could be worth investigating next session.

Risks

None new. The briefing rendering fix is low-risk — it’s a text transformation applied after content generation, fully tested, and doesn’t touch scoring or delivery logic.

Flags and watch-outs

  • Sentry issue #593 (ESM/CJS require() error on briefings detail page) and #546 (SyntaxError on root page, 66 events) are both in backlog but represent real production errors worth investigating
  • engine/uv.lock has an uncommitted modification — likely a lock file drift from a dependency install, not urgent but should be reviewed

Next session

  1. Investigate #593 (ESM/CJS require error on briefings detail page) — check Sentry for reproduction path and whether it’s still occurring
  2. Investigate #546 (SyntaxError on root page, 66 events) — 66 events is meaningful user-facing noise, worth diagnosing
  3. Scout — with all milestones closed, run /scout for new improvements now that MCP server and briefing email are in good shape
  4. Review engine/uv.lock drift — commit or reset the modified lock file

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.

Delegation without comprehension is just prayer

The organizations that survive won't be the ones that automated the most. They'll be the ones that figured out what to stop delegating.

The case for corporate amnesia

Most organizations worship institutional memory. But what if the thing they're preserving is mostly decay?

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.