Work log: Textorium TUI — March 16, 2026
What shipped today
Today was a major milestone for textorium-tui: the v1.0.0 release went out on Homebrew. The version bump, tag, and GitHub Actions build all went smoothly, producing arm64 and x86_64 macOS binaries. The homebrew-tap formula was updated with fresh SHA256 hashes, and the GitHub release notes were rewritten from auto-generated PR noise into a clean changelog with install instructions. The README got a full rewrite to reflect the actual feature set — CLI commands, keyboard shortcuts, SSG support table, and performance numbers.
After the release landed, a scout pass identified five issues across tech debt, bugs, UX, and features. Triage routed them through the pipeline, and three grindable issues were executed same-day: removing dead Notion config fields (#57), fixing a UTF-8 panic in textorium list (#58), and correcting Hugo’s content path to use category as the section directory (#60). Each shipped as a squash-merged PR.
The session ended with implementing table scroll (#59) — the posts pane now uses ratatui’s TableState with render_stateful_widget for automatic scroll-to-selection, plus Ctrl+D/Ctrl+U half-page navigation. This was the most architecturally involved change of the day, requiring restructured borrow scoping in the ui() function to satisfy Rust’s borrow checker with the mutable TableState reference.
Completed
- #57 — Remove dead Notion config fields (PR #62)
- #58 — Fix: textorium list panics on multi-byte UTF-8 titles (PR #63)
- #60 — Fix: textorium new hardcodes Hugo content to posts/ subdirectory (PR #64)
- #59 — Posts table doesn’t scroll — selected row goes off-screen (PR #65)
- v1.0.0 release tagged, built, and published to Homebrew tap
Release progress
- TUI on Homebrew: 5/6 closed (1 remaining: #61 save all unsaved posts)
Carry-over
- #61 — Save all unsaved posts with a single keystroke (labeled
ready-for-prep, needs spec)
Risks
- None identified. The release is stable and all merged PRs had clean builds and passing tests.
Flags and watch-outs
- The
content_typefield in the table row builder now calls.to_string()on string slices to satisfy ownership for the restructured borrow scope. No performance concern but worth noting if someone wonders why it changed. - Test count is at 13. No TUI-specific tests exist yet — all tests are in
core::posts. The table scroll behavior is only verifiable manually.
Next session
/issue prep 61— spec the “save all unsaved posts” feature (Ctrl+Shift+S or similar)- Consider closing the “TUI on Homebrew” milestone once #61 ships
- #56 (frontmatter macros) and #1 (homebrew-core submission) are in backlog — revisit if momentum is there
- Manual QA pass on a real site with 600+ posts to verify scroll behavior end-to-end
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.
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.
What your systems won't tell you
The most dangerous gap in any organization isn't between what you know and what you don't. It's between what your systems know and what they're willing to say.