Chutes Build 1.0.1
Fixed (the TUI wore upstream's identity)
- The splash showed Grok's wordmark.
assets/logo/logo07.txtand
logo05.txtwere byte-identical to upstream's: the re-base overwrote the Chutes
wordmark and 1.0.0 shipped it, so every start drew the wrong brand. Restored. A
sweep of every asset in the tree says these two were the only ones taken. - A Chutes user was offered a subscription to another company's product.
Hitting a usage limit produced "Upgrade to SuperGrok" and "Upgrade to SuperGrok
Heavy"; a restricted command said it "requires SuperGrok". The buttons already
pointed at chutes.ai/pricing — the fork had rebranded where they go and left
what they say. This one predates the re-base; v0.4.3 carries the same strings. - The screen-mode settings described opening "plain grok", the welcome gate read
"SuperGrok subscription required", and the feedback prompt opened with "You've
been using Grok Code productively!".
Rust identifiers, crate names, telemetry event types and model ids such as
grok-4.5 are deliberately untouched: AGENTS.md keeps them so upstream diffs
stay readable, and a model name is data rather than branding.
The wordmark's hash is now pinned by a test, so a merge that takes upstream's
side there fails instead of shipping. The loss was silent by nature: nothing
compiles differently, no test read the bytes, and the only symptom was on screen.
Security
- The
agent servetoken comparison no longer rests on a function that
disclaims the property it was chosen for. It used
ring::constant_time::verify_slices_are_equal, which ring now deprecates as an
"internal function not intended for external use with no promises regarding side
channels" — while the reason for calling it at all is that==on&strreturns
at the first differing byte, and over a socket with no rate limit that leaks the
token one byte at a time. It now usessubtle::ConstantTimeEq, which is
maintained for this and also resists the compiler folding the comparison back
into an early return. No new code enters the build:subtlewas already in the
graph through rustls, so the lock file moves by one line.
Fixed
--helphad upstream's branding back in it. The re-base took upstream's
wording over the fork's in five places a user reads, three of them flag names:
--grok-ws-originand--grok-ws-url, which 0.4.3 spelled--chutes-ws-*and
kept hidden, so the re-base both renamed them and put internal plumbing into the
top-level help;--xai-api-base-url, described as "the public xAI API base URL"
when it overrides the Chutes inference base URL; the positional-prompt example,
which readgrok "fix the bug"beside achutes-buildexample on the same
line; and thescreen_modehelp, which said "To default plaingrokto
minimal". Found by installing the published 1.0.0 the way a user gets it and
reading every help surface — the step the release procedure asks for and which
had not been done.leader/mod.rspasses those flags to the child process, so
the rename covers it too.
Repository and CI
xai-grok-shell --lib auth::runs on Windows. It failed 24 there, and the
CI step had never executed at all, because the pager step above it always failed
first. A provider command goes throughcmd /Coff Unix — deliberately, for
exit-code propagation — while the fixtures were POSIX one-liners. They now drive
auth-provider-fixture, a real helper invoked withargs, so no shell
interprets them. Two lock tests read the lock file through a second handle while
holding it, which Windows refuses; they read through the holding handle now, as
the product does.- The Linux job reaches its end. It had not passed in the last twenty runs, so
four steps below the failure — auth and session integration, agent construction
and bundled skills, Chutes-native tools, and clippy — had not run either. Behind
them were a bannedtokio::process::Command::spawnin a test the ban does not
describe, and a doc comment separated from the function it documents. - That job's 60-minute limit was sized for the broken state. The first run to
reach the end spent 59.7 minutes on work that passed and was killed during the
cache save — which left the next run cold, slower, and killed in the same
place. Raised to 90, matching Windows. Measured twice since at 65 and 67 minutes:
the cost is roughly 45 minutes of tests plus 11 of clippy, not compilation, so a
warm cache moves it very little and the headroom is about a quarter. - All five CI jobs pass. Windows had been red since 1.0.0 landed and Linux had
not finished in over twenty runs; this is the first complete green run. RUSTSEC-2026-0249is recorded indeny.toml:smartstringis unmaintained —
archived, not vulnerable — and reaches this tree only as a non-optional
dependency ofrhai, whose latest stable we already use, so no bump closes it.
It turned the dependency job red on a documentation-only commit, an hour after
the same check passed, because that job reads the live advisory database.- A flaky history-delivery test asked for a repaint and a result in one condition;
it fails when the daemon is fast enough to answer before the eager snapshot,
which is why widening its deadline had not helped.