Retire onde-tqdm in favour of upstream tqdm 0.8.1
The crossterm 0.29 bump (mrlazy1708/tqdm#28) is merged upstream and released as tqdm 0.8.1, so the onde-tqdm republish is no longer needed. The mistral.rs fork now depends on upstream tqdm directly; onde picks that up when it moves to onde-mistralrs 0.9.4. Docs only here: the fork inventory and the Cargo.toml comment about why mio no longer needs a patch. The published onde-tqdm versions stay up so onde-mistralrs 0.9.3 keeps resolving. Closes #9 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Seto Elkahfi committed
Sep 5, 2026 at 09:50 UTC
6a08d258485b573417de9353f6c5433aab62b355
3 files changed
+44
-35
.agents/skills/forked-dependencies/SKILL.md
+38
-31
@@ -1,6 +1,6 @@
1
---
2
name: forked-dependencies
3
-description: The complete inventory of forked crates and [patch.crates-io] overrides that the onde stack depends on — mistral.rs, candle, sysctl, mio, tqdm, core2. Explains what each fork is for, where it is consumed, how the git-vs-published two-tier model works, and how to update or add one. Apply whenever a build fails on a missing/incompatible crate for an Apple or Android target, when bumping the mistral.rs or candle fork, or when adding a new patched dependency.
3
+description: The complete inventory of forked crates and [patch.crates-io] overrides that the onde stack depends on — mistral.rs, candle, sysctl, mio, tqdm, core2 — including the retired ones. Explains what each fork is for, where it is consumed, how the git-vs-published two-tier model works, and how to update or add one. Apply whenever a build fails on a missing/incompatible crate for an Apple or Android target, when bumping the mistral.rs or candle fork, or when adding a new patched dependency.
4
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
5
user-invocable: true
6
---
@@ -51,15 +51,17 @@ publish. onde therefore resolved crates.io `tqdm 0.8.0` → `crossterm 0.25` →
51
visionOS patch even though the tqdm fork "already fixed" crossterm upstream of
52
it.
53
54
-The fix that removed the whole problem: the crossterm-0.29 tqdm fork is now
55
-**published to crates.io as `onde-tqdm`** and consumed by the mistral.rs fork as
56
-a `version =` registry dep (package rename), exactly like `onde-mistralrs-*` and
57
-`onde-candle-*`. A registry dep survives publish, so onde's registry-resolved
58
-tree gets `onde-tqdm` → `crossterm 0.29` → `mio 1.x`, and the `mio 0.8.11`
59
-line disappears entirely. This is now **done**: `onde-mistralrs-*` 0.9.3
60
-(carrying the `onde-tqdm` dep) is published, onde consumes 0.9.3, and onde's
61
-`[patch.crates-io] mio` entry has been **deleted**. The `mio` fork is retired.
62
-See the onde-tqdm and mio entries.
54
+The fix that removed the whole problem was to make the crossterm-0.29 tqdm a
55
+**registry** dep of the mistral.rs fork rather than a git one, since a registry
56
+dep survives publish: onde's resolved tree then gets `crossterm 0.29` → `mio
57
+1.x` and the `mio 0.8.11` line disappears entirely. That shipped first as the
58
+stopgap fork crate `onde-tqdm` (in `onde-mistralrs-*` 0.9.3), which let onde
59
+delete its `[patch.crates-io] mio` entry and retire the `mio` fork.
60
+
61
+Upstream has since merged the crossterm bump (mrlazy1708/tqdm#28) and released
62
+it as **`tqdm 0.8.1`**, so the fork crate is no longer needed: the mistral.rs
63
+fork depends on plain `tqdm = "0.8.1"` and **`onde-tqdm` is retired**. See the
64
+tqdm and mio entries.
65
66
---
67
@@ -69,9 +71,14 @@ See the onde-tqdm and mio entries.
71
|-------|---------------|-----|---------|----------------|
72
| mistral.rs (12 crates) | `setoelkahfi/mistral.rs` | branch `fix/all-platform-fixes` | All-platform fixes; **published** as `onde-mistralrs-*` | onde deps (registry) |
73
| candle-core, candle-nn | `setoelkahfi/candle` | branch `onde/candle-0.11.0-27f20fea` (rev `27f20fea`) | Post-0.11.0 candle APIs; **published** as `onde-candle-{core,nn}` | mistral.rs fork deps (registry) |
72
-| tqdm | `setoelkahfi/tqdm` | branch `release/onde-tqdm` (version `0.8.2`) | Bumps crossterm to 0.29 (→ mio 1.x); **published** as `onde-tqdm` | mistral.rs fork dep (registry) |
74
+| tqdm | *none — upstream* | crates.io `tqdm 0.8.1` | Crossterm 0.29 (→ mio 1.x) is upstream as of 0.8.1 | mistral.rs fork dep (registry) |
75
| sysctl | `setoelkahfi/sysctl-rs` | branch `feature/watchos` | watchOS (`target_os = "watchos"`) support | `[patch.crates-io]` in onde **and** mistral.rs fork |
74
-| mio | `setoelkahfi/mio` | branch `feature/visionos` | visionOS support for the `mio 0.8.11` line | **RETIRED** — patch removed from onde once it consumed onde-mistralrs 0.9.3 (onde-tqdm → mio 1.x). Fork kept for history/upstream PR. |
76
+| mio | `setoelkahfi/mio` | branch `feature/visionos` | visionOS support for the `mio 0.8.11` line | **RETIRED** — patch removed from onde once it consumed onde-mistralrs 0.9.3 (crossterm 0.29 → mio 1.x). Fork kept for history/upstream PR. |
77
+
78
+> **Retired:** `onde-tqdm` (`setoelkahfi/tqdm`, branch `release/onde-tqdm`,
79
+> published 0.8.1/0.8.2) — the stopgap republish of the crossterm-0.29 tqdm
80
+> fork. Upstream merged the bump and released `tqdm 0.8.1`, so the mistral.rs
81
+> fork now depends on upstream directly. See the tqdm entry.
82
83
> **Retired:** `core2` (`bbqsrc/core2` rev `545e84bc`) — was a `[patch.crates-io]`
84
> workaround for the yanked `core2 0.4.0`; removed from the mistral.rs fork after
@@ -150,25 +157,25 @@ See the onde-tqdm and mio entries.
157
(`aarch64-apple-visionos{,-sim}`) `cargo +nightly check -Z build-std` pass with
158
the `mio` patch deleted.
159
153
-### tqdm → crossterm 0.29 → `onde-tqdm`
154
-
155
-- **Fork:** `setoelkahfi/tqdm`. Two branches:
156
- - `deps/bump-crossterm` — keeps the crate named `tqdm`, feeds the **upstream
157
- PR** mrlazy1708/tqdm#28 (do not rename the package here).
158
- - `release/onde-tqdm` — sets `package = "onde-tqdm"` (crate lib name stays
159
- `tqdm` so downstream `use tqdm::…` and doctests are unchanged) and is
160
- **published to crates.io as `onde-tqdm`** (0.8.1, 0.8.2).
161
-- **Why:** bumps crossterm to 0.29 (→ mio 1.x), eliminating the whole `mio
162
- 0.8.11` visionOS problem at its source.
163
-- **Consumed in:** the mistral.rs fork's `[workspace.dependencies]` as
164
- `tqdm = { version = "0.8.2", package = "onde-tqdm" }` — a **registry** rename
165
- dep, so it survives `cargo publish` and reaches onde (unlike the old git dep,
166
- which was stripped). This is the same rename trick as `onde-mistralrs-*` and
167
- `onde-candle-*`.
168
-- **Publish order:** publish `onde-tqdm` **before** republishing the
169
- `onde-mistralrs-*` crates that depend on it. Note the published
170
- `onde-mistralrs-core 0.9.2` still uses plain `tqdm ^0.8.0` (pre-rename); the
171
- `onde-tqdm` dep first ships in `0.9.3`.
160
+### tqdm → upstream (`onde-tqdm` RETIRED)
161
+
162
+- **Status:** no fork. `setoelkahfi/tqdm` branch `deps/bump-crossterm` was
163
+ merged upstream as mrlazy1708/tqdm#28 and released as **`tqdm 0.8.1`**, which
164
+ carries the crossterm 0.29 bump (→ mio 1.x) that the whole `mio 0.8.11`
165
+ visionOS problem hinged on.
166
+- **Consumed in:** the mistral.rs fork's `[workspace.dependencies]` as plain
167
+ `tqdm = "0.8.1"`. It must stay a **registry** dep — `cargo publish` strips git
168
+ deps, so a git tqdm would never reach onde.
169
+- **The `onde-tqdm` stopgap (retired):** branch `release/onde-tqdm` set
170
+ `package = "onde-tqdm"` (lib name stayed `tqdm`, so `use tqdm::…` and doctests
171
+ were unchanged) and was published as `onde-tqdm` 0.8.1/0.8.2 — the same rename
172
+ trick as `onde-mistralrs-*` and `onde-candle-*`, needed only because upstream
173
+ hadn't released the bump yet. Its source was byte-identical to upstream
174
+ `tqdm 0.8.1` apart from the package metadata, so the swap back is a drop-in.
175
+- **Which release drops it:** `onde-mistralrs-core` 0.9.2 used plain
176
+ `tqdm ^0.8.0` (crossterm 0.25), 0.9.3 used `onde-tqdm 0.8.2`, and the next
177
+ publish (0.9.4) goes back to upstream `tqdm 0.8.1`. The published `onde-tqdm`
178
+ versions stay up so 0.9.3 keeps resolving; don't yank them.
179
180
### core2 → removed
181
.agents/skills/sdk-regressions/SKILL.md
+1
-1
@@ -497,7 +497,7 @@ Known publish-verification snags (hit during 0.9.1):
497
| Error | Fix |
498
|-------|-----|
499
| E0599 on candle APIs (`indexed_gemv`, ...) | Step 0 — publish `onde-candle-*` and repoint |
500
-| `dependency tqdm does not specify a version` | git dep needs a registry fallback: `version = "0.8.0"` alongside `git =` |
500
+| `dependency tqdm does not specify a version` | tqdm must be a registry dep, not git — it is plain `tqdm = "0.8.1"` since the crossterm bump landed upstream |
501
| `core2 0.4.0 is yanked` | `cargo update -p bitstream-io` (4.10.0 dropped core2) |
502
503
---
Cargo.toml
+5
-3
@@ -121,8 +121,10 @@ uniffi = { version = "=0.31.0", features = ["build"] }
121
# dropped — cargo just logs "patch was not used in the crate graph" and builds
122
# the unpatched registry crate, which is how the watchOS check kept failing.
123
#
124
-# mio no longer needs patching: onde-mistralrs-core 0.9.3 depends on onde-tqdm
125
-# 0.8.2 (crossterm 0.29 -> mio 1.x), so the old tqdm -> crossterm 0.25 -> mio
126
-# 0.8.11 chain (which lacked visionOS support) is gone from the tree.
124
+# mio no longer needs patching: onde-mistralrs-core pulls tqdm with crossterm
125
+# 0.29 -> mio 1.x, so the old tqdm -> crossterm 0.25 -> mio 0.8.11 chain (which
126
+# lacked visionOS support) is gone from the tree. 0.9.3 got that via the
127
+# onde-tqdm fork crate; from 0.9.4 it comes from upstream tqdm 0.8.1, which
128
+# carries the merged crossterm bump. onde-tqdm is retired.
129
[patch.crates-io]
130
sysctl = { git = "https://github.com/setoelkahfi/sysctl-rs.git", branch = "feature/watchos-0.6" }