release: 0.3.0 - #98
Merged
Merged
Conversation
The owner's decision, and his alone - immutable rule 12. This is the version 0.3.0-rc1 already carried, without the suffix, and the suffix is the whole mechanical difference. The release workflow marks a release as a prerelease when the TAG NAME carries a hyphen, which is what kept rc1 off the front page and out of "latest". Dropping it is what puts this build there. The entries that shipped as 0.3.0-rc1 were folded into the 0.3.0 section rather than left beside it, on the owner's instruction. Somebody upgrading from 0.2.0 needs one list of what changed rather than two, and the Breaking list is only true read whole: the padding of a ZIP, a TAR.GZ and a WAV changed after rc1 went out, so the two halves describe one delta from 0.2.0. The merged section carries 67 entries - 9 Breaking, 22 Added, 5 Security, 14 Changed and 17 Fixed - under one heading of each kind. The [0.3.0-rc1] heading goes with them and so does its link definition, because a definition left behind points at a comparison nobody can reach from the document. Both of the release gate's own conditions were run here and pass: the changelog has a section for 0.3.0, and nothing is left under [Unreleased]. Outside internal/version the number has nine copies. Six are held by a guard in this repository, one by a tool outside it, and two by nothing at all. The Windows resource compiled into both binaries carries the version, and a guard reads the COMPILED resource rather than the script beside it. Both scripts were updated and both recompiled with windres, and each .syso lost exactly sixteen bytes - four characters, twice over, two bytes apiece in UTF-16. The numeric FILEVERSION fields were already 0,3,0,0 and did not move. The about screen draws the version, so its stored picture and widget tree were refreshed. One screen of twenty five was rewritten, which is what the writer asking the guard's own verdict instead of comparing bytes was built to do. The tree diff is one line and the text is 37 px narrower. The site prints the version in its footer and in its JSON-LD block. Thirteen pages, seventeen lines added and seventeen removed, every one of them carrying the version and nothing else moved. The README ships inside every release archive and its manifest example still said 0.2.0, so that number had drifted through a whole release without being noticed. Nothing holds it. Folding the sections invalidated two mutation entries, both aimed at the rc1 link definitions. Both reported SKIP, which is the shape that reads as proven, and the staleness check is the only thing that says otherwise. Repointed and run: three mutations named by these guards, three caught. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Found on 2026-09-09 while closing 0.3.0, by the pre-release ritual reporting a failure about a change that is an improvement. The run lock moved the claim on the manifest name from after the last file to before the first one, so the manifest has a place reserved whatever happens to the directory afterwards. The entry describing that said what it does for two runs competing for one directory and stopped there. It does something else for a run nothing is competing with. Measured in a container with room for twelve names, the same command through three binaries: 0.2.0 and 0.3.0-rc1 both end with exit code 5, print thirty files they could not produce, write no manifest, and say that clearing the directory is a job by hand. This release ends with the partial code 8 and writes a manifest, so "tfg cleanup" can remove what the run left rather than leaving it to a person. That is the better outcome and both codes follow the frozen table - what moved is which of them the situation produces, and somebody's CI can be reading it. The entry says so now. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The owner's decision, and his alone - immutable rule 12.
0.3.0without thesuffix, which is the whole mechanical difference from
0.3.0-rc1: the releaseworkflow marks a release as a prerelease when the TAG NAME carries a hyphen,
and that is what kept
rc1off the front page and out oflatest.The changelog is one section, not two
The entries that shipped as
0.3.0-rc1were folded into0.3.0on the owner'sinstruction, and the
## [0.3.0-rc1]heading went with them along with its linkdefinition - a definition left behind points at a comparison nobody can reach
from the document.
The reason is stronger than tidiness. The
Breakinglist is only true readwhole: the padding of a ZIP, a TAR.GZ and a WAV changed after
rc1went out,so the two halves describe one delta from
0.2.0. Somebody upgrading needs onelist, not two.
The merged section carries 67 entries - 9
Breaking, 22Added,5
Security, 14Changed, 17Fixed- under one heading of each kind.[Unreleased]is empty, so both of the release gate's own conditions pass.Nine copies of the number, seven of them held
Five readers take
version.Versionat run time and needed nothing. The copieswere found by grepping the tree rather than from memory:
cmd/tfg/tfg.rcand its.sysoexeproperties_test.goreads the COMPILED resource, so editing the script alone changes nothing - both were recompiled withwindresand each lost exactly sixteen bytesinternal/gui/icon/chickpea.rcandcmd/tfg-gui/*.sysoabout.pngandabout.xmlscreenpixels_test.go- one screen of twenty five rewritten, the text 37 px narrowerweb/public/**site_test.go- thirteen pages, seventeen lines added and seventeen removed, every one carrying the versionCHANGELOG.mdchangelogshape_test.goand the gate inrelease.ymlREADME.mdmanifest example0.2.0, so it had drifted through a whole release. Fixed here and recorded asO198The run lock has a second effect, and the changelog now says so
The pre-release ritual reported a failure about the disk filling part way
through a run. It was not a regression. Measured in a container with room for
twelve names, the same command through three binaries:
0.2.050.3.0-rc158Bisected over the 48 commits since
rc1to the run lock, and the cause is inengine.go: the manifest name is now taken before the first file rather thanafter the last one, so the manifest has a place reserved whatever happens to the
directory. The old run left files
cleanuphad nothing to remove them from.Both codes follow the frozen table. What moved is which of them the situation
produces, and somebody's CI can be reading it, so the entry says so now.
What was run
337.8 s, greencmd,PowerShell 5.1, pwsh 7, Git Bash, WSL on the Linux binary and a Mac over
ssh, a real window opened, and a comparison against the downloaded
v0.2.0- eleven formats unchanged, nine changed, all nine described under### Breaking🤖 Generated with Claude Code