chutes-build 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -6,6 +6,91 @@ project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.0.1] - 2026-08-11
10
+
11
+ ### Fixed (the TUI wore upstream's identity)
12
+
13
+ - **The splash showed Grok's wordmark.** `assets/logo/logo07.txt` and
14
+ `logo05.txt` were byte-identical to upstream's: the re-base overwrote the Chutes
15
+ wordmark and 1.0.0 shipped it, so every start drew the wrong brand. Restored. A
16
+ sweep of every asset in the tree says these two were the only ones taken.
17
+ - **A Chutes user was offered a subscription to another company's product.**
18
+ Hitting a usage limit produced "Upgrade to SuperGrok" and "Upgrade to SuperGrok
19
+ Heavy"; a restricted command said it "requires SuperGrok". The buttons already
20
+ pointed at chutes.ai/pricing — the fork had rebranded where they *go* and left
21
+ what they *say*. This one predates the re-base; v0.4.3 carries the same strings.
22
+ - The screen-mode settings described opening "plain grok", the welcome gate read
23
+ "SuperGrok subscription required", and the feedback prompt opened with "You've
24
+ been using Grok Code productively!".
25
+
26
+ Rust identifiers, crate names, telemetry event types and model ids such as
27
+ `grok-4.5` are deliberately untouched: `AGENTS.md` keeps them so upstream diffs
28
+ stay readable, and a model name is data rather than branding.
29
+
30
+ The wordmark's hash is now pinned by a test, so a merge that takes upstream's
31
+ side there fails instead of shipping. The loss was silent by nature: nothing
32
+ compiles differently, no test read the bytes, and the only symptom was on screen.
33
+
34
+ ### Security
35
+
36
+ - **The `agent serve` token comparison no longer rests on a function that
37
+ disclaims the property it was chosen for.** It used
38
+ `ring::constant_time::verify_slices_are_equal`, which ring now deprecates as an
39
+ "internal function not intended for external use with no promises regarding side
40
+ channels" — while the reason for calling it at all is that `==` on `&str` returns
41
+ at the first differing byte, and over a socket with no rate limit that leaks the
42
+ token one byte at a time. It now uses `subtle::ConstantTimeEq`, which is
43
+ maintained for this and also resists the compiler folding the comparison back
44
+ into an early return. No new code enters the build: `subtle` was already in the
45
+ graph through rustls, so the lock file moves by one line.
46
+
47
+ ### Fixed
48
+
49
+ - **`--help` had upstream's branding back in it.** The re-base took upstream's
50
+ wording over the fork's in five places a user reads, three of them flag *names*:
51
+ `--grok-ws-origin` and `--grok-ws-url`, which 0.4.3 spelled `--chutes-ws-*` and
52
+ kept hidden, so the re-base both renamed them and put internal plumbing into the
53
+ top-level help; `--xai-api-base-url`, described as "the public xAI API base URL"
54
+ when it overrides the Chutes inference base URL; the positional-prompt example,
55
+ which read ``grok "fix the bug"`` beside a `chutes-build` example on the same
56
+ line; and the `screen_mode` help, which said "To default plain `grok` to
57
+ minimal". Found by installing the published 1.0.0 the way a user gets it and
58
+ reading every help surface — the step the release procedure asks for and which
59
+ had not been done. `leader/mod.rs` passes those flags to the child process, so
60
+ the rename covers it too.
61
+
62
+ ### Repository and CI
63
+
64
+ - **`xai-grok-shell --lib auth::` runs on Windows.** It failed 24 there, and the
65
+ CI step had never executed at all, because the pager step above it always failed
66
+ first. A provider command goes through `cmd /C` off Unix — deliberately, for
67
+ exit-code propagation — while the fixtures were POSIX one-liners. They now drive
68
+ `auth-provider-fixture`, a real helper invoked with `args`, so no shell
69
+ interprets them. Two lock tests read the lock file through a second handle while
70
+ holding it, which Windows refuses; they read through the holding handle now, as
71
+ the product does.
72
+ - **The Linux job reaches its end.** It had not passed in the last twenty runs, so
73
+ four steps below the failure — auth and session integration, agent construction
74
+ and bundled skills, Chutes-native tools, and clippy — had not run either. Behind
75
+ them were a banned `tokio::process::Command::spawn` in a test the ban does not
76
+ describe, and a doc comment separated from the function it documents.
77
+ - **That job's 60-minute limit was sized for the broken state.** The first run to
78
+ reach the end spent 59.7 minutes on work that passed and was killed during the
79
+ cache *save* — which left the next run cold, slower, and killed in the same
80
+ place. Raised to 90, matching Windows. Measured twice since at 65 and 67 minutes:
81
+ the cost is roughly 45 minutes of tests plus 11 of clippy, not compilation, so a
82
+ warm cache moves it very little and the headroom is about a quarter.
83
+ - **All five CI jobs pass.** Windows had been red since 1.0.0 landed and Linux had
84
+ not finished in over twenty runs; this is the first complete green run.
85
+ - `RUSTSEC-2026-0249` is recorded in `deny.toml`: `smartstring` is unmaintained —
86
+ archived, not vulnerable — and reaches this tree only as a non-optional
87
+ dependency of `rhai`, whose latest stable we already use, so no bump closes it.
88
+ It turned the dependency job red on a documentation-only commit, an hour after
89
+ the same check passed, because that job reads the live advisory database.
90
+ - A flaky history-delivery test asked for a repaint and a result in one condition;
91
+ it fails when the daemon is *fast* enough to answer before the eager snapshot,
92
+ which is why widening its deadline had not helped.
93
+
9
94
  ## [1.0.0] - 2026-08-07
10
95
 
11
96
  Chutes Build is re-based onto `xai-org/grok-build` 1.0.0 (`afbc0fb`) and adopts
@@ -99,6 +184,47 @@ upstream instead:
99
184
  578. Two were real defects rather than test bugs: the trust hole above, and a
100
185
  home-directory guard no test on Windows could reach.
101
186
 
187
+ ### Fixed (Windows, and these were the product)
188
+
189
+ The pager's Windows suite had sixty-six failures. Most were fixtures written for
190
+ POSIX, but five were defects users would meet:
191
+
192
+ - **`doctor fix` could not apply anything.** The managed-config writer opened the
193
+ parent directory as a file, to `sync_all` it after the rename. That sync is
194
+ Unix-only — Windows has no durability barrier for a directory — so off Unix the
195
+ handle was captured and never read, and Windows cannot produce one at all:
196
+ `File::open` on a directory needs `FILE_FLAG_BACKUP_SEMANTICS`, which `std` does
197
+ not set. Every fix planned, then failed to write, reporting "access denied"
198
+ against the directory rather than the file.
199
+ - **No file path written in agent prose was clickable.** The scanner that turns
200
+ paths into `file://` overlays matched `~?/…` only, so `C:\Users\me\x.md` was
201
+ never recognised. Only tool headers worked, because those receive the path
202
+ directly instead of finding it in text.
203
+ - **Tab completion in the extensions modal destroyed the path.** It rebuilt the
204
+ directory prefix by looking for a `/`; a Windows path has none, so completing
205
+ `C:\src\plugin-s` replaced the whole field with `plugin-source`. The directory
206
+ listing, gated on the text ending in `/`, never triggered either.
207
+ - **The memory-search header showed `\MEMORY.md`.** The path shortener looked for
208
+ `/` alone, so the separator after the memory root survived — and a nested result
209
+ was not shortened at all, painting the whole `\xai-…\sessions\…` tail.
210
+ - **A test fixture named `nul` proved nothing**, because on Windows that name is
211
+ the null device wherever it appears: the write went nowhere and the NUL-byte
212
+ refusal it existed to check was never reached.
213
+
214
+ ### Fixed (releases carried an unstripped binary)
215
+
216
+ `release-dist` keeps symbols on purpose, for sidecars extracted "before stripping
217
+ post-build" — and that post-build strip had never been written. The npm packages
218
+ therefore shipped the profile's full DWARF: `linux-arm64-gnu` reached 938 MB
219
+ unpacked and the registry refused it outright with `413 Payload Too Large`.
220
+ Stripping now happens between the build and the smoke test, so the run check, the
221
+ package, its checksum and the release asset all see the binary that ships. Linux
222
+ falls from ~890 MB to ~130 MB; Windows needs none, since MSVC keeps debug info in
223
+ a separate `.pdb`.
224
+
225
+ The macOS packages for this version were published before that fix and are larger
226
+ than the rest; they cannot be replaced, because an npm version is immutable.
227
+
102
228
  ### Authentication
103
229
 
104
230
  Upstream ships an OAuth application everyone signs in through, so its
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chutes-build",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Privacy-first, open-source coding agent for the Chutes ecosystem",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Michael Gasperini (Mikesoft)",
@@ -37,12 +37,12 @@
37
37
  "check": "npm test && npm run verify:release && npm pack --dry-run"
38
38
  },
39
39
  "optionalDependencies": {
40
- "chutes-build-darwin-arm64": "1.0.0",
41
- "chutes-build-darwin-x64": "1.0.0",
42
- "chutes-build-linux-arm64-gnu": "1.0.0",
43
- "chutes-build-linux-x64-gnu": "1.0.0",
44
- "chutes-build-win32-arm64": "1.0.0",
45
- "chutes-build-win32-x64": "1.0.0"
40
+ "chutes-build-darwin-arm64": "1.0.1",
41
+ "chutes-build-darwin-x64": "1.0.1",
42
+ "chutes-build-linux-arm64-gnu": "1.0.1",
43
+ "chutes-build-linux-x64-gnu": "1.0.1",
44
+ "chutes-build-win32-arm64": "1.0.1",
45
+ "chutes-build-win32-x64": "1.0.1"
46
46
  },
47
47
  "keywords": [
48
48
  "ai",