When the tool should refuse to help

The headline of Rustic Playground v0.4 is that you can now switch Rust toolchains — stable, beta, nightly, or a specific pinned version — per project, without leaving the app. That part is easy to explain. The part I’ve been thinking about more is a decision that never shows up in a feature list: what the app does when the toolchain a project asks for isn’t installed.

The obvious answer — the one the code almost wrote itself toward — is to just install it. The project pins 1.88, you don’t have 1.88, so fetch it and run. Frictionless. Helpful. Exactly the kind of thing a good assistant is supposed to do: notice what you need and quietly handle it.

I built it the other way. When a pinned toolchain is missing, the pill in the toolbar turns yellow — and if you hit ⌘R, the app doesn’t quietly swap in whatever toolchain it happens to have. It stops and tells you exactly what’s wrong, and the two ways out:

error: toolchain 'nightly' is pinned by this project but not installed.

Click the yellow toolchain pill → Install Toolchain… to install it,
or the "default" row to unpin this project.

It won’t install anything behind your back. It makes you stop and choose.

Here’s why. A toolchain isn’t a detail the tool should paper over — for a learning app it’s part of the thing you came to learn. And “silently install and run” hides the one fact that matters most in that moment: you were about to run your code on a version you didn’t actually have. Maybe that’s fine. Maybe 1.88 behaves just like the 1.85 you were testing on yesterday. But maybe it doesn’t — and now you’re staring at output from a toolchain you never consciously chose, wondering why the behavior changed. The app was trying to be helpful, and in the process it quietly made your ground truth less certain.

That trade — a little friction now against a confident wrong answer later — is a choice every tool makes. Most make it by default, and most default to convenience. I wanted to make it deliberately.

So the app does the un-magical thing on purpose. It doesn’t fix your toolchain for you, and it doesn’t guess. It turns yellow, tells you exactly what’s missing and how to fix it, and leaves the call to you. It’s a small thing — a colored pill and an error that refuses to paper over the problem. But small decisions about where to put the friction are most of what separates a tool you can trust from a tool that’s merely convenient. I’d rather be trusted.

— Jagmeet