Work log: Textorium - March 30, 2026
What shipped today
Today was a code health day focused on fixing latent bugs and removing dead code. The scout found several issues across the codebase, and the dev-loop executed them in rapid succession.
The most impactful fix was in GitService, where git add . was silently staging all files — including untracked ones like .env files, build artifacts, or work-in-progress. This was a genuine security risk. Switched to git add -u which only stages modified and deleted tracked files, matching the “sync” mental model without the danger of accidentally committing secrets. This decision was recorded in DECISIONS.md.
Three performance and correctness fixes also shipped: GitService’s waitUntilExit() was blocking the cooperative thread pool (replaced with async terminationHandler), HTMLToMarkdown was recompiling regex patterns on every invocation (now cached as static properties), and 165 lines of dead view code (DatabaseRowView, DatabaseCellView, FlowLayout) were removed — remnants of a card-based layout that was replaced by the native SwiftUI Table long ago. The unused ColumnTypeInferrer infrastructure was also cleaned out.
Completed
- #74 — GitService.runGit blocks cooperative thread with waitUntilExit()
- #77 — GitService.commit uses ‘git add .’ which stages all files indiscriminately
- #78 — HTMLToMarkdown regex compilation should be cached, not recreated per invocation
- #75 — Remove unused ColumnTypeInferrer and ColumnDefinition infrastructure
- #80 — Dead code: DatabaseRowView, DatabaseCellView, and FlowLayout in DatabaseView.swift
Release progress
- v1.0.5: 16/16 closed — complete
Carry-over
- #81 — Table view empty state when search/filter returns zero results (
ready-for-dev) - #76 — Website missing og:image meta tag (
ready-for-dev) - #79 — VoiceOver accessibility labels (
ready-for-prep) - #72 — Product screenshots for homepage (
needs-clarification)
Risks
No new risks identified. The git add -u change is strictly safer than the previous behavior.
Flags and watch-outs
- The scout session was interrupted before completing all scans — there may be additional findings worth capturing on the next scout run.
Next session
- Execute
ready-for-devqueue: #81 (empty state for table view) and #76 (og:image meta tag) are both small, concrete tasks - Run a full
/scoutscan — the previous one was interrupted - Prep #79 (VoiceOver accessibility) — this is the first accessibility issue and will set patterns for the whole app
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.
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.
The day nothing satisfying happened
The most productive day in an organization's life usually looks like nothing happened. No launches, no features, no announcements. Just people quietly making the existing work more honest.
Your AI agent is probably not an agent
The word 'agent' has become meaningless. Everyone from chatbot vendors to autonomous system builders uses it. We've been here before — with self-driving cars — and it didn't end well.