nfty 1.3.0 — the lock, the tree, the die and the rail
Four fixes and three features across the Explorer, the Recipe and Ingredient panes, the
Ingredient Editor and the Set browser. 2,154 tests, 0 failures.
The one that mattered
The Ingredient Editor could save into a read-only CookBook. The pencil opens the editor
whether or not the edit lock is on, and that is deliberate — the editor is also how you
look at a layer. Saving from it was not. The editor took no lock at all, so a book the
Explorer was refusing to add to, delete from or reorder could have a layer's manifest
rewritten, its KIND changed and the whole archive persisted, from one click away, with the
titlebar still saying read-only.
The gate is checked inside Save() as well as in CanSave: a generated
RelayCommand's ExecuteAsync does not consult its own CanExecute, so the disabled
button was the entire enforcement — and a disabled button is a label. Painting stays live;
a read-only editor is a scratch surface, and the footer says so from the moment it opens.
Reorder in the Contents tree
Drag, or Alt+Up / Alt+Down, on recipes and layers, among their own siblings only.
The two moves are not the same act and the status line says which. A layer move rewrites
layerOrder, which is the paint order — and the generator consumes one RNG draw per layer
in order, so the same seed over a reordered recipe is a different collection. A recipe
move is presentation and cannot change an asset, because the roller sorts its keys ordinally
before it rolls anything. Both are gated by the edit lock all the same, and books open
read-only.
Recipe order had nowhere to live, so CookBookManifest.RecipeOrder is new: optional,
additive, no schema bump, and tolerant of going stale.
The rest
- The reroll die has six faces, lands on a new one every press, and its single pip is
red. No more "sample 1" — that number was the reroll count, not a fact about the recipe. - The recipe's layer rows scroll under a pinned header instead of running off the pane.
- The ingredient hero is a 2×2 block that pages — one height in every book, where before
it grew a row per two variants and pushed the pane's own buttons off the screen. - The validity count is a button. "3 problems" used to put the problems on a tooltip;
both it and the CookBook card's chip now open the full numbered report. It opens on a
valid book too and says what was checked. - The Set browser's rail shows the asset it is describing — a live preview that follows
the hover, the right-click-to-keep and the inspector, beside the id it already showed.
Known, not fixed
A cooked Set whose image files are missing draws blank tiles and says nothing — a missing
file ends up looking like one still loading, forever, and identical to a fully transparent
asset. Found by opening a Set whose folder had been half cleaned up. Recorded in CLAUDE.md.
Downloads
| Size | .NET 10 needed | |
|---|---|---|
| Portable | 84 MB | no — unzip anywhere and run. Start here if you are unsure. |
| Single file | 76 MB | no — one .exe. Unpacks itself on first run, so that launch is slower. |
| Single file, .NET | 14 MB | yes — one .exe, runtime left out. |
| Framework-dependent | 14 MB | yes — the same, as a folder. |
The two .NET builds need the .NET 10 desktop
runtime; the other two carry everything.