dpi-detector/.github
Kirill Minovsky 54b19de8eb
Some checks failed
Check / Test & lint (linux) (push) Has been cancelled
Check / Artifact round-trip (push) Has been cancelled
Check / Test & lint (windows) (push) Has been cancelled
Check / Supply chain (push) Has been cancelled
build: 1.99.0, resolver 3, three std-API fixes, and what the router flags are worth
The pin moves 1.98.1 -> 1.99.0, which is what the edition-2024 tree had been
waiting on: `resolver = "3"` is read from `[workspace]` alone (a virtual
workspace does not inherit it from the members' edition), and `rust-version =
"1.99"` in `[workspace.package]`, opted in by both crates, is what gives v3's
MSRV-aware pick something to filter by. `Cargo.lock` is untouched — the resolved
set is the one 1.98.1 built, checked with `git diff` rather than assumed.

Four rewrites the bump unlocked, each confirmed by the compiler rather than by a
changelog:
- `net/sysinfo/os.rs`: `chunk.len() == 16` + fallible `<&[u8; 16]>::try_from` is
  `chunk.as_array::<16>()` (1.93);
- `screens/post_run.rs`: `strip_prefix(..).and_then(strip_suffix(..))` is
  `strip_circumfix(.., ..)` (1.98);
- `state.rs`: the three attribute-gated `platform_dirs` wrappers are one
  `cfg_select!` block (1.95), the shape `classify/classifier.rs` already uses;
- `net/sysinfo/mod.rs`: `from_utf8_lossy_owned` (1.99) at the one site that
  already owns a `Vec<u8>`. The other seven `from_utf8_lossy(..).into_owned()`
  sites cannot use it: the API consumes `Vec<u8>`, so a borrow would need
  `.to_vec()` — a copy rather than a saving. A review pass claimed six mechanical
  sites; the compiler refuted that in a minute, which is why the count is one.

Docs that name the pin move with it (`README.md`, `docs/CI.md`,
`docs/PROFILES_AND_PROVIDER.md`), and two recorded claims the pinned toolchain
has outgrown are corrected rather than left to drift: §2.6's unwind-table
mechanics (since 1.92 codegen emits `.eh_frame` under `panic = "abort"` on Linux
by default, so `-C force-unwind-tables=no` is load-bearing — the release.yml
comment said the opposite) and `.cargo/config.toml`'s `embed-metadata` note (on
1.99.0 the key is a parse error, `expected a table, but found a boolean for
target.x86_64-pc-windows-msvc.embed-metadata`, where 1.98.1 called it an unused
key; the lever is the nightly-only pair `cargo -Z embed-metadata` /
`rustc -Z embed-metadata=val`, both listed by nightly-2026-09-17).

§2.12 records what the router build flags are worth, measured on the real router
targets with the workflow's own RUSTFLAGS, one tree and one difference per row:
the bump itself +4 160 B (+0.1 %) and still not static-PIE; `-Z build-std`
−5.2 %; `-Cpanic=immediate-abort` −11.4 % on top of that, −15.9 % against 1.99.0;
`-Cjump-tables=no` −3.2 % on armv7 and −3.1 % on mipsel. The mechanism is read off
the bytes: the shipped mipsel binary carries `panicked at`, `RUST_BACKTRACE`,
`index out of bounds`, `capacity overflow` and source paths, while the
immediate-abort armv7 binary carries none of them — one `panicked at ` fragment
survives because `main.rs`'s panic hook calls `PanicHookInfo::to_string()`, which
is both the residual size and the reason the strategy is not adopted: it takes the
localized message, `dpi_detector_crash.log` and the terminal restore with it.
None of the three lands here, and not for a size reason: the panic strategy is a
product decision, and `-Cjump-tables=no` / `-Z build-std` either move a row onto a
nightly toolchain or trade the row's stated priority (CPU first, then RSS, then
size) for a size win whose CPU half is unmeasured. §2.12 states what a router pass
of §2.6's shape would have to show for them to land.

Also recorded there: the nightly pin and the cross image no longer agree for the
MIPS rows. `ghcr.io/cross-rs/mipsel-unknown-linux-musl:0.2.5` ships glibc 2.27
while `nightly-2026-09-17`'s host `std` needs >= 2.30 (`gettid@GLIBC_2.30`, the
thread ID 1.91 added to panic messages), so the row's build scripts cannot run
inside the container — from this box and from CI alike, which mount the same
toolchain into the same image. `nightly-2026-09-02` builds every mipsel row in
§2.12, so the fix is the pin (four places, `docs/CI.md` §3) or the image.

Verified: `cargo clippy --workspace --all-targets --locked` = 0 warnings, the
`-p dpi-core --features live-network` clippy row = 0, `cargo test --workspace
--locked` = 289 + 90 passed / 0 failed, `RUSTDOCFLAGS=-D warnings cargo doc`
clean, a live `-t 2` run draws both columns, and `--json` parses into the same
frozen shape.
2026-10-03 03:42:55 +03:00
..
workflows build: 1.99.0, resolver 3, three std-API fixes, and what the router flags are worth 2026-10-03 03:42:55 +03:00
dependabot.yml ci: pin the two third-party actions by commit, and let Dependabot move them 2026-09-21 22:37:37 +03:00