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

Work log: Textorium TUI — March 18, 2026

What shipped today

This was a cleanup and polish session — five issues closed across refactoring, bug fixes, UX, and docs, all discovered by yesterday’s scout pass and triaged in the same session. The issue queue went from five scout-created issues to zero open non-backlog items.

The refactoring highlight was #88, which extracted a shared Post::sync_fields_from_frontmatter() method and a parse_date_string() helper. Three separate places in the codebase — read_post(), the revert handler, and the edit handler — had duplicate logic for syncing frontmatter HashMap fields back to the Post struct. Now they all call one method. Net reduction of 70 lines.

Two user-facing bugs were fixed. Save errors (#89) now show the actual error message in the status bar instead of just a count — “✗ 1 error: Permission denied” instead of “✗ 1 error(s)”. The content pane scroll (#91) was using logical line count for the max bound but ratatui’s .scroll() with Wrap operates on visual wrapped lines. Long-line content couldn’t scroll far enough; short content scrolled into blank space. The fix computes visual line count from the content pane width. The ratatui Paragraph::line_count() API would have been ideal but it’s behind an unstable feature flag, so we compute it manually.

The marquee addition was the help overlay (#90) — pressing ? now shows a centered overlay listing all keybindings grouped by context (global, posts, metadata, content). It intercepts all keys while visible and dismisses on ? or Esc. The status bar hints were also tightened to fit better on narrow terminals while adding the ? reference.

A quick doc fix (#92) corrected two references from config.toml to config.json in CLAUDE.md — the config format changed earlier but the docs weren’t updated.

Completed

  • #88 — Refactor: extract shared frontmatter-to-struct sync function (PR #94)
  • #89 — Fix: save error message discarded — user sees count but not cause (PR #95)
  • #90 — Feature: help overlay with ? key showing all keybindings (PR #96)
  • #91 — Fix: content pane scroll max uses logical lines, not wrapped visual lines (PR #97)
  • #92 — Docs: fix config path references in CLAUDE.md (PR #93)

Release progress

  • TUI on Homebrew: 5/6 closed (1 remaining: #8, backlog — email signature, unrelated to TUI)
  • CLI essentials: 3/3 closed
  • All scout-discovered issues (#88–#92) resolved. Issue queue is clean.

Carry-over

  • v1.0.1 GitHub release notes are still auto-generated PR noise — could use a human-written changelog (flagged yesterday)
  • Consider closing the “TUI on Homebrew” milestone — #8 is backlog and unrelated to TUI

Risks

  • The HOMEBREW_TAP_TOKEN PAT has repo scope and no expiration (flagged yesterday, still open)
  • Node.js 20 deprecation warnings in GitHub Actions — deadline June 2, 2026
  • ratatui’s Paragraph::line_count() is behind unstable-rendered-line-info — if it stabilizes in a future version, we could switch from manual visual line computation. Monitor ratatui releases.

Flags and watch-outs

  • Test count is 21, all in core::posts. Still no TUI-specific tests — the help overlay, scroll fix, and save error display are only manually verifiable.
  • The visual line computation in #91 uses character-level division ((len + width - 1) / width), not word-wrap-aware calculation. This is an approximation — ratatui’s actual wrapping may differ slightly for lines with very long words. Good enough for scroll bounds but not pixel-perfect.
  • Many open milestones have zero issues and are past their due dates (Visual overhaul, Bulletproof editing). Worth cleaning up.

Next session

  • Clean up v1.0.1 GitHub release notes with structured changelog
  • Close stale milestones (TUI on Homebrew, Visual overhaul, Bulletproof editing, CLI essentials — all completed or empty)
  • #56 (frontmatter macros) is the next feature if there’s appetite — needs prep
  • Consider a v1.0.2 release to ship today’s fixes to Homebrew users
  • Scout for new issues or start on the “First external user” milestone

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 org chart your agents need

The AI community is reinventing organizational design from scratch — badly. Agencies figured this out decades ago. Competencies, not clients. Briefs, not prompts. Lateral communication, not hub-and-spoke. The answers are already there.

AI agents need org charts, not pipelines

Every agent framework organizes around tasks. The agencies that actually work organize around competencies. The AI community is about to rediscover this the hard way.

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.