@ondeinference / onde / commits / 5ee8391

docs(skills): republish tqdm as onde-tqdm; plan mio patch retirement

Record the onde-tqdm migration in the forked-dependencies skill: the crossterm-0.29 tqdm fork is now published to crates.io as `onde-tqdm` and consumed by the mistral.rs fork as a registry rename dep, so it survives cargo publish and reaches onde (the old git dep was stripped). This removes mio 0.8.11 from onde's registry-resolved tree — verified onde resolves mio 1.2.2 only, with the mio patch deleted, when consuming the onde-tqdm-carrying crates. Documents the publish order and that the onde [patch.crates-io] mio entry is deleted once onde bumps to onde-mistralrs 0.9.3+. Also records the removal of the dead core2 patch and the mio official-fork/mio-patch rename. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

keypair34 committed Jul 22, 2026 at 19:27 UTC 5ee83911b48193a779cbd068aa6c019531e4fff4
1 file changed +72 -39
.agents/skills/forked-dependencies/SKILL.md
+72 -39
@@ -43,12 +43,22 @@ mixing them up.
43 the `cargo check` matrix) but are themselves stripped when onde publishes to
44 crates.io.
45
46 -**Consequence that bites:** the `tqdm` fork bumps crossterm to 0.29 (which pulls
47 -mio 1.x, which supports visionOS). But that fork is a *git* dep of mistral.rs,
48 -so it is stripped on publish. onde therefore resolves crates.io `tqdm 0.8.0` →
49 -`crossterm 0.25` → `mio 0.8.11`, which does *not* support visionOS. That is why
50 -onde needs its own `mio` patch even though the tqdm fork "already fixed"
51 -crossterm upstream of it. See the mio and tqdm entries below.
46 +**Consequence that used to bite (now fixed — kept as the canonical example):**
47 +originally the `tqdm` fork bumped crossterm to 0.29 (which pulls mio 1.x, which
48 +supports visionOS) but was a *git* dep of mistral.rs, so it was stripped on
49 +publish. onde therefore resolved crates.io `tqdm 0.8.0` → `crossterm 0.25` →
50 +`mio 0.8.11`, which does *not* support visionOS — so onde needed its own `mio`
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. Once the `onde-mistralrs-*` crates carrying the
60 +`onde-tqdm` dep are published (0.9.3+) and onde bumps to them, onde's
61 +`[patch.crates-io] mio` entry is deleted. See the onde-tqdm and mio entries.
62
63 ---
64
@@ -58,10 +68,13 @@ crossterm upstream of it. See the mio and tqdm entries below.
68 |-------|---------------|-----|---------|----------------|
69 | mistral.rs (12 crates) | `setoelkahfi/mistral.rs` | branch `fix/all-platform-fixes` | All-platform fixes; **published** as `onde-mistralrs-*` | onde deps (registry) |
70 | 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) |
71 +| 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) |
72 | sysctl | `setoelkahfi/sysctl-rs` | branch `feature/watchos` | watchOS (`target_os = "watchos"`) support | `[patch.crates-io]` in onde **and** mistral.rs fork |
62 -| mio | `setoelkahfi/mio` | branch `feature/visionos` | visionOS support for the `mio 0.8.11` line | `[patch.crates-io]` in onde |
63 -| tqdm | `setoelkahfi/tqdm` | branch `deps/bump-crossterm` (version `0.8.0`) | Bumps crossterm to 0.29 | git dep in mistral.rs fork |
64 -| core2 | `bbqsrc/core2` (not ours) | rev `545e84bc` | Yanked-`core2 0.4.0` workaround | `[patch.crates-io]` in mistral.rs fork — **now unused, removable** |
73 +| mio | `setoelkahfi/mio` | branch `feature/visionos` | visionOS support for the `mio 0.8.11` line | `[patch.crates-io]` in onde — **removable once onde consumes onde-mistralrs 0.9.3+** |
74 +
75 +> **Retired:** `core2` (`bbqsrc/core2` rev `545e84bc`) — was a `[patch.crates-io]`
76 +> workaround for the yanked `core2 0.4.0`; removed from the mistral.rs fork after
77 +> `bitstream-io` 4.x dropped `core2`. No longer present.
78
79 ---
80
@@ -105,40 +118,60 @@ crossterm upstream of it. See the mio and tqdm entries below.
118 - **Applied in:** `[patch.crates-io]` in **both** onde and the mistral.rs fork
119 (each workspace root that builds for watchOS needs its own patch entry).
120
108 -### mio → visionOS
121 +### mio → visionOS (being retired)
122
110 -- **Fork:** `setoelkahfi/mio`, branch `feature/visionos`. Based on `mio 0.8.11`.
123 +- **Fork:** `setoelkahfi/mio`, branch `feature/visionos` (commit `683fca8`).
124 + Based on `mio 0.8.11`. This is the **official GitHub fork** of tokio-rs/mio
125 + (in tokio's fork network, so it can open upstream PRs). An earlier standalone
126 + clone that carried this branch was renamed to `setoelkahfi/mio-patch` and
127 + deleted; the branch now lives on the real fork.
128 - **Why:** `mio 0.8.11` hits `compile_error!("unsupported target for
112 - mio::unix::pipe")` on visionOS, breaking the Swift XCFramework build and the
113 - visionOS CI checks. The fork adds `target_os = "visionos"` to the cfg gates
114 - that already list `tvos`/`watchos` (kqueue/pipe/waker/uds). tokio's `mio 1.x`
115 - already supports visionOS, so **only the 0.8.x line** needs the patch.
116 -- **Where 0.8.11 comes from:** `tqdm → crossterm 0.25 → mio 0.8.11`, and
129 + mio::unix::pipe")` on visionOS, and its Apple cfg gates (kqueue `Filter`/
130 + `Flags` type aliases, `net.rs` `sin_len`/`sin6_len`, `tcp.rs` accept path,
131 + `uds/listener.rs` `accept4`/`SOCK_NONBLOCK`) omit visionos, breaking the Swift
132 + XCFramework build and the visionOS CI checks. The fork adds
133 + `target_os = "visionos"` to every cfg gate that already lists `tvos`/`watchos`.
134 + tokio's `mio 1.x` already supports visionOS, so **only the 0.8.x line** needs it.
135 +- **Where 0.8.11 came from:** `tqdm → crossterm 0.25 → mio 0.8.11`, and
136 `signal-hook-mio → crossterm`. Not from tokio (that uses `mio 1.2.2`).
137 - **Applied in:** `[patch.crates-io]` in onde. The fork's version (`0.8.11`)
119 - must stay semver-compatible with the `^0.8` requirement it replaces; it does
120 - not touch tokio's `^1`.
121 -- **Alternative fix (not used):** patching `tqdm`/`crossterm` up to crossterm
122 - 0.29 in onde would drop `mio 0.8.11` entirely. The `mio` patch is the smaller,
123 - targeted change.
124 -
125 -### tqdm → crossterm 0.29
126 -
127 -- **Fork:** `setoelkahfi/tqdm`, branch `deps/bump-crossterm`, pinned `version = "0.8.0"`.
128 -- **Why:** bumps crossterm to 0.29.
129 -- **Applied in:** git dep in the **mistral.rs fork** only. **Stripped on
130 - publish**, so it does not reach onde — onde gets crates.io `tqdm 0.8.0`
131 - (crossterm 0.25 → mio 0.8.11). This is exactly why the onde `mio` patch is
132 - required; do not assume the tqdm fork covers onde.
133 -
134 -### core2 → (dead)
135 -
136 -- **Source:** `bbqsrc/core2` rev `545e84bc`, patched in the mistral.rs fork.
137 -- **Status:** **unused.** It was a workaround for the yanked `core2 0.4.0`
138 - (pulled via `bitstream-io → rav1e → ravif → image`). Bumping `bitstream-io` to
139 - `4.10.0` dropped `core2` (it moved to `no_std_io2`), so the patch is now
140 - `[patch.unused]` in the fork lockfile. Safe to delete from the fork's
141 - `[patch.crates-io]` on the next fork touch.
138 + stays semver-compatible with the `^0.8` requirement it replaces; it does not
139 + touch tokio's `^1`.
140 +- **Retirement path (the real fix):** the `onde-tqdm` publish (below) removes the
141 + `mio 0.8.11` line from onde's registry-resolved tree entirely. Verified: with
142 + onde consuming the onde-tqdm-carrying `onde-mistralrs-*` crates, onde's
143 + lockfile resolves `mio 1.2.2` only — no 0.8.11 — even with the `mio` patch
144 + deleted. **Delete the onde `[patch.crates-io] mio` entry once onde bumps to
145 + `onde-mistralrs 0.9.3+`.** Until that publish lands, keep the patch (0.9.2, the
146 + currently-published set, still drags in `tqdm 0.8.0 → mio 0.8.11`).
147 +
148 +### tqdm → crossterm 0.29 → `onde-tqdm`
149 +
150 +- **Fork:** `setoelkahfi/tqdm`. Two branches:
151 + - `deps/bump-crossterm` — keeps the crate named `tqdm`, feeds the **upstream
152 + PR** mrlazy1708/tqdm#28 (do not rename the package here).
153 + - `release/onde-tqdm` — sets `package = "onde-tqdm"` (crate lib name stays
154 + `tqdm` so downstream `use tqdm::…` and doctests are unchanged) and is
155 + **published to crates.io as `onde-tqdm`** (0.8.1, 0.8.2).
156 +- **Why:** bumps crossterm to 0.29 (→ mio 1.x), eliminating the whole `mio
157 + 0.8.11` visionOS problem at its source.
158 +- **Consumed in:** the mistral.rs fork's `[workspace.dependencies]` as
159 + `tqdm = { version = "0.8.2", package = "onde-tqdm" }` — a **registry** rename
160 + dep, so it survives `cargo publish` and reaches onde (unlike the old git dep,
161 + which was stripped). This is the same rename trick as `onde-mistralrs-*` and
162 + `onde-candle-*`.
163 +- **Publish order:** publish `onde-tqdm` **before** republishing the
164 + `onde-mistralrs-*` crates that depend on it. Note the published
165 + `onde-mistralrs-core 0.9.2` still uses plain `tqdm ^0.8.0` (pre-rename); the
166 + `onde-tqdm` dep first ships in `0.9.3`.
167 +
168 +### core2 → removed
169 +
170 +- **Was:** `bbqsrc/core2` rev `545e84bc`, a `[patch.crates-io]` workaround for
171 + the yanked `core2 0.4.0` (pulled via `bitstream-io → rav1e → ravif → image`).
172 +- **Status:** **deleted** from the mistral.rs fork. `bitstream-io` 4.x moved off
173 + `core2` (to `no_std_io2`), so nothing pulls it. Removed in the same commit that
174 + wired `onde-tqdm` and bumped to 0.9.3.
175
176 ---
177