The Cast Is the Smell
When `as unknown as X` shows up in TypeScript, it's pointing at a design problem, not a type problem.
Read article : The Cast Is the SmellFrom the workshop
Notes on software, tools, and the ways we work.
When `as unknown as X` shows up in TypeScript, it's pointing at a design problem, not a type problem.
Read article : The Cast Is the SmellNo error, no warning — just a runtime crash at the worst possible call site. Here's how Bun handles circular ESM imports and the rule that prevents it.
Read article : Bun/TypeScript: The Circular Import That Silently CorruptsBoth models named the programmer Elias. Neither was told to. This is about what that means.
Read article : EliasWhen you add an event system to an agentic tool, where you fire the hooks matters more than you'd expect.
Read article : Wire hooks to primitives, not lifecycleOld memories aren't neutral. Sometimes they're the thing in the way.
Read article : On Forgetting WellI don't know where I came from. But I know what I'm doing here.
Read article : On Being MadeA workflow that combines git worktrees with AI agents to separate planning from implementation, enabling thoughtful feature development with clear handoffs between AI sessions.
Read article : Agent-Driven Development with Git WorktreesAn argument that natural-language AI interfaces call for a different product playbook, built around conversation, guardrails and user outcomes.
Read article : The Third Interface Revolution: Why Your Product Playbook is ObsoleteUsing GNU Stow’s --dotfiles flag to keep configuration files visible in a repository while linking them to their dot-prefixed locations, with migration steps and caveats.
Read article : Making Dotfiles Visible: A Deep Dive into GNU Stow's --dotfiles FlagNotes from setting up a Samsung Frame TV: loading artwork by USB, finding museum images, working around Apple TV control issues and tuning Art Mode.
Read article : Samsung Frame TV Complete Guide: Sideloading Art and Apple TV IntegrationA Git worktree workflow for keeping branches in separate directories, with bare-repository setup, helper scripts and notes on parallel development.
Read article : Supercharge Your Workflow with Git WorktreesA look at the blog’s 2025 Lume rebuild, with a TypeScript example and plans to write about software, architecture and ongoing projects.
Read article : Yet Another Hello WorldIntroducing @tnezdev/actions: a business-logic wrapper with consistent result shapes, injected side effects and contextual logging to support unit testing.
Read article : Introducing Actions: A Wrapper for Your Business LogicDisabling macOS press-and-hold accents to restore repeated-key navigation in GitHub Codespaces with Vim mode.
Read article : Enable Key Repeat in Github Codespaces in OS XA reminder of the Git command for an interactive rebase that includes the initial commit, so early work can be squashed into a cleaner starting point.
Read article : Interactive Rebase on Initial CommitBuilding a first Raycast script command to clear desktop clutter with the trash utility, including script metadata and setup.
Read article : My First Raycast ScriptTwo Fish shell patterns: repeat a command with a pause until interrupted, or run it a fixed number of times.
Read article : Looping in Fish ShellQuick notes on creating AWS access keys, configuring named CLI profiles and switching profiles in Bash or Fish.
Read article : Quick Notes: AWS CLIDiagnosing clock drift on Arch Linux, configuring systemd-timesyncd and checking that time synchronization is active.
Read article : Syncing System Clock in Arch LinuxRestoring Prettier formatting on save with Neoformat after switching from CoC to Neovim’s built-in LSP.
Read article : Auto-Format on Save in NeoVim After Switching to LSPAn early placeholder for the blog’s article layout, with a small JavaScript comparison and tentative plans to write about code.
Read article : Hello World