Changelog
What's new in Goatfied.
What shipped, why it matters, and how to use it. Updated as releases land — roughly weekly.
Aug 19, 2026
Every reply says which model wrote it
The name under a response is now the model that produced it, reported by the service, rather than whatever the picker happens to say.
The label under a reply was read from the picker at the moment the screen drew — not from the turn it belonged to. So it described the present rather than the past: change model and old replies quietly relabel themselves, and a request that ran on something other than what you chose still looked correct. That is why last week's routing fault could sit there for four days looking fine. The service already reports which model served each turn; that is what the footer shows now.
The routing fix from the previous release also needed one more piece. The model list is cached for offline use, and it is cached after processing — so a list saved before the fix kept the gap that caused it, and only a successful refresh would clear it. The cache is now repaired when it is read, so the fix applies immediately rather than whenever the network next cooperates.
Build 2.31.11
Aug 19, 2026
The model you picked is the model you get
Choosing a specific model was sending only its family, so every pick quietly ran that family's default instead.
A model in the picker carries two things: the family it belongs to and its own identifier. Only the family was being sent. The backend does exactly as asked with that — it runs the family's default — so selecting Claude Opus 5, or anything else, ran the routed default while the picker went on displaying the name you chose. Asking the agent what model it was gave an honest answer that looked like a bug, because the answer was right and the label was wrong.
The billing record shows it plainly: a named model was last run on the fifteenth, and everything since has been the default. It is fixed at the source — a model's identifier now travels with the request — and the local fallback list has been corrected to use the same identifiers the service actually publishes, which is where the mismatch started.
Related: when a chosen model cannot be resolved, the app substitutes one. That is reasonable, but it was completely silent, which is why this went unnoticed for four days. The substitution is now recorded.
Build 2.31.10
Aug 18, 2026
A long answer is not a broken one
Turns that took more than three minutes were being cut off and reported as a network fault. They now run as long as they need to.
A model call had two clocks on it. One ended the connection after 90 seconds of total silence, which is right — a gateway that accepts a request and then says nothing is dead. The other ended it after three minutes no matter what, including while tokens were arriving perfectly well. A large context at high reasoning effort passes three minutes routinely, so those turns were killed mid-answer.
That explains the shape of it: the failure was deterministic, so all four retries died at the same point and the turn could never succeed, while a shorter session on the same model was completely unaffected. The total cap is now a half-hour backstop and liveness is left to the silence watchdog, which is the clock that can actually tell a stalled connection from a slow one.
The error text was also hiding its own cause. The network library reports a timed-out read as “error decoding response body” and keeps the real reason one layer down, which was thrown away. The whole chain is kept now, so a timeout says it timed out.
Build 2.31.7
Aug 18, 2026
A dropped connection is not a failed run
A brief network fault gets a few seconds to recover instead of a few hundred milliseconds, and says what happened in plain words.
When the connection to the model drops mid-reply the turn is retried, which is right — no tool has run yet, so re-asking is safe. But the waits between attempts totalled under three seconds, which is less than a wifi handover, a VPN re-key or a gateway restart, so a blip that would have cleared on its own became a failed turn. The window is now about fifteen seconds across four attempts.
If it still cannot recover, the run says the connection dropped and that nothing was lost, rather than showing the network library's own words — “error decoding response body” describes a decoder, not the connection that actually went away. The retries are also recorded in the log now; previously they were shown only while they happened and left nothing behind to explain a run that recovered, or one that did not.
Session titles were cut at exactly forty-eight characters, mid-word. That title is also used as a name in the sentence that reports where a build ended up, which is how you could be told that ‘look into the “4. Dynamic Programming” fol is ready at’ somewhere. Titles now end on a word, and that line no longer borrows your prompt as its subject.
Build 2.31.6
Aug 17, 2026
Whose model, not whose pipe
Google, Meta, Kimi, Qwen, DeepSeek and Mistral models now carry their makers' marks instead of the router's.
Every model reached through OpenRouter wore OpenRouter's logo, which names the plumbing rather than the model. A mark is chosen from the model itself now, so Gemini shows Google's, Llama shows Meta's, and Kimi, Qwen, DeepSeek and Mistral each show their own — whoever happens to be carrying them today. A model we cannot place still gets no mark at all, which is better than a confident wrong one.
The marks are generated from the vendors' published artwork rather than copied by hand, so they cannot drift into being subtly wrong.
The name and its mark are now left-aligned together, and the commit button has lost its blue for the same grey as everything around it. It also refuses to be pressed when the session has no repository folder to act in, instead of accepting the click and failing.
Build 2.31.5