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

Work log: Textorium — March 29, 2026

What shipped today

Today was a high-velocity session that drained the entire issue backlog and added two significant new features. The session started with a /start context recovery, set up the v1.0.5 milestone, ran a /scout pass to populate the queue, then executed repeated /dev-loop ticks to implement everything.

The first theme was multi-SSG maturity. Three issues (#65, #66, #67) made Textorium properly SSG-aware across Hugo, Jekyll, and Eleventy. ContentCreator now places files in SSG-appropriate directories (Hugo’s content/, Jekyll’s _posts/ with date-prefix naming, Eleventy’s src/), ImageHandler uses the right image directories per SSG type, and the app detects existing frontmatter format (YAML/TOML/JSON) during indexing so new content matches what’s already there. These changes moved Textorium from “works with Hugo, technically supports others” to genuinely multi-SSG.

The second theme was code quality and security. Error handling was overhauled — all print() error logging replaced with user-facing alerts (#63), all try? silent failures replaced with explicit error handling (#64). Path traversal was locked down in ContentCreator (#69) with input sanitization for filenames and folders plus resolved-path validation. Dead code was cleaned up across two passes (#68, #70), removing ~80 lines of unused navigation code, a dead removeDemoSite() function, and speculative FrontMatterFormat delimiter properties.

The third theme was editor productivity features. Article navigation (#71) added Cmd+[ / Cmd+] keyboard shortcuts and toolbar chevron buttons so writers can move between posts without returning to the table view. Rich text paste (#73) added an HTML-to-Markdown converter that intercepts paste from browsers and word processors, converting bold, italic, links, headers, lists, code blocks, and blockquotes to proper Markdown syntax. Both features target the “100+ posts” power user audience.

Completed

  • #63 — Replace print() error logging with user-facing alerts
  • #64 — Replace try? silent failures with explicit error handling
  • #65 — ContentCreator respects SSG type for file placement
  • #66 — Use SSG-appropriate image directory for dropped/pasted images
  • #67 — Detect existing frontmatter format and match when creating content
  • #68 — Remove dead navigation code from EditorView
  • #69 — Sanitize folder and filename inputs to prevent path traversal
  • #70 — Remove dead DemoSiteHelper and FrontMatterFormat delimiter properties
  • #71 — Add article navigation keyboard shortcuts and toolbar buttons
  • #73 — Convert pasted rich text to Markdown

Release progress

v1.0.5: 16/16 closed (milestone complete). Ready for tag + build + App Store submission.

Carry-over

  • #72 (needs-clarification) — Product screenshots for textorium.app homepage. Blocked on design decisions: which views to screenshot, dark/light mode, demo content vs real content. Once Paul provides screenshots, the HTML/CSS integration can be automated.
  • Visual QA of textorium.app (carry-over from March 20)
  • v1.0.5 App Store submission — all code is merged, needs tag + archive + upload

Risks

  • The HTMLToMarkdown converter (#73) uses regex-based HTML parsing which won’t handle deeply nested or malformed HTML perfectly. For paste operations this is acceptable — the common case is browser-copied content which is well-formed. Edge cases (e.g., nested lists, tables) will produce imperfect but readable output.
  • Article navigation (#71) uses the indexer’s full item list sorted by date, not the table’s current sort/filter. If a user has filtered to a subset in the table, navigation still walks the full list. This is a known simplification — matching the exact table sort would require threading sort state through multiple view layers.

Flags and watch-outs

  • The v1.0.5 milestone is 16/16 complete. This is a good stopping point for a release.
  • SourceKit diagnostics consistently show false “Cannot find type” errors across files. These are SourceKit indexing noise — xcodebuild always succeeds. Don’t be alarmed by them.

Next session

  • Tag v1.0.5 and prepare App Store submission (archive + upload)
  • Answer #72 design questions (screenshots) or close it as out-of-scope for v1.0.5
  • Run /scout to find new work for the next development cycle
  • Consider running the app and testing the new features (article navigation, rich text paste) hands-on

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 headcount lie

The assumption that work scales with people is so embedded in how organizations think that questioning it feels like questioning gravity. But one operator just ran ten parallel operations in a single day. The unit of capacity isn't the person. It's the decision-maker.

AI and the Götterdämmerung of Work

Work is dead. And we have killed it. AI didn't defeat the myth that human value comes from reliable output — we built the systems that exposed it. What comes next isn't replacement. It's revaluation.

Everything pointed at ghosts

Most organizations are measuring work they stopped doing years ago. The dashboard is green. The reports are filed. Nobody realizes the entire apparatus is pointed at ghosts.