| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(hid): normalize thumbwheel direction per device (#1158) * feat(gui): add horizontal scroll (reversed) thumbwheel preset The plain Horizontal Scroll preset now writes the (new) native-direction default pair so picking it keeps the wheel undiverted; the reversed preset writes the swap, which diverts and genuinely flips the felt direction. Label key added to all locale catalogs. * fix(hid): normalize thumbwheel direction per device Use HID++ default_dir at the capture boundary so diverted wheel input has one physical direction convention. Preserve native and per-app behavior through the schema migration, and teach the Windows hook fallback to use the learned selected-device polarity. * fix(agent): fail open until thumbwheel polarity is known --------- Co-authored-by: dalxds <dalxds@192.168.1.3> | 9 天前 | |
test(agent): serialize workspace notification tests | 1 天前 | |
fix: resolve remaining state-machine audit findings (#1083) | 11 天前 | |
fix: resolve remaining state-machine audit findings (#1083) | 11 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
feat(i18n): migrate catalogs to semantic TOML keys (#1169) | 8 天前 | |
fix(i18n): localize DPI steps and correct count labels | 1 天前 | |
refactor(hid): centralize device identities (#831) Amp-Thread-ID: https://ampcode.com/threads/T-01a02cd7-def5-7778-afdb-3262980d079c | 15 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
chore(infra): prune the tree's lint suppressions and make the survivors expect (#720) * chore(infra): let clippy.toml silence unwrap/expect in tests The workspace table keeps `unwrap_used`/`expect_used` at warn so production code has to state its panics, but every test module then re-stated the same exemption by hand — 78 copies of `#[allow(…, reason = "idiomatic in tests")]`, roughly 40% of every lint suppression in the tree. Clippy has a config for exactly this; a two-line `clippy.toml` replaces all of them. Three build scripts and the `openlogi-ipc` wire-format test keep a suppression, because neither is a test in clippy's sense: a build script fails by panicking, and the golden-bytes fixtures sit in free helpers outside any `#[test]` fn — the one test shape `allow-expect-in-tests` cannot see. Those four are now `expect`, so they warn if they ever stop being needed. * chore(infra): expect, not allow, for lint suppressions that must stay `#[allow]` is silent when it stops suppressing anything, so suppressions rot in place: nothing tells you the cast it covered was deleted three refactors ago. `#[expect]` warns instead. Converting the 77 non-`cfg_attr` suppressions surfaced 20 that no longer suppress anything, all removed here: - `openlogi-assets` {index,manifest,metadata}: three module-wide `dead_code` blankets that have been inert since the modules became `pub mod` — public items are reachable, so the lint could never fire. The dangerous kind: had those modules gone private again, the blanket would have hidden real dead code forever. - `LightCapabilities` is down to three bools, under `struct_excessive_bools`. - `InstanceGuard._handle` and `CGEventTapInformation` are exempt from `dead_code` on their own (leading underscore / all fields now read). - Nine GUI `dead_code` and cast suppressions, and the surplus lint names in six multi-lint blankets that only ever needed one or two of them. Four suppressions stay `allow` on purpose, each with a comment saying why `expect` is wrong there: - `platform::os_version` — the lint only fires on the macOS arm; off macOS the expectation would go unfulfilled and redden the Linux/Windows lanes. - `function_row`'s `float_cmp` — rustc does not credit an expectation with a lint raised inside a macro expansion (`assert_eq!` here), so `expect` would suppress the warning and then report itself unfulfilled: unfixable under `-D warnings`. - The four `cfg_attr`-wrapped ones, whose fulfilment differs between the lib and test targets of the same crate. Also drops `_silence_pickfn`, a dead function that existed only to keep an unused `PickFn` import "used" — a hand-rolled lint workaround; the import goes with it. And gives the tree's one reason-less suppression a reason. Verified on the macOS and windows-gnu lanes; the Linux lane is CI's. * refactor(infra): narrow the file-wide cast blankets to their real sites Seven files silenced `cast_possible_truncation` / `cast_sign_loss` / `cast_possible_wrap` (and in the hook's Win32 backend `borrow_as_ptr` and `needless_pass_by_value`) for their entire contents. Between them they covered 50 real sites — and every future cast anyone adds to those files, unchecked. Most of the sites did not need a suppression at all: - `capture_windows` and the hook's Win32 backend now use `cast_signed()` / `cast_unsigned()`, which say "reinterpret the bits" instead of "trust me". That is the whole file-level blanket gone from `capture_windows`. - The hook's six `borrow_as_ptr` sites become `&raw mut` / `&raw const`, the edition-2024 spelling — and the better one at an FFI boundary, since it never materializes the intermediate reference. - `uvc`'s descriptor fixture builds its two bytes with `to_le_bytes`. - `camera/controls` funnelled eleven ad-hoc `i32 as f32` / `f32 as i32` conversions through `to_slider`/`from_slider`, so the UVC-range argument is made once where it belongs rather than eleven times by omission. What genuinely needs a cast keeps one, scoped to the function that does it and with a reason naming the bound that makes it safe. `capture_linux` keeps its file-level blanket: `v4l2-sys-mit` runs bindgen, so that backend cannot be cross-linted from macOS and narrowing it would be blind work. Tracked separately. Verified on all three lint lanes: macOS native, x86_64-pc-windows-gnu, and aarch64-unknown-linux-musl (everything but the GPUI crates and the v4l2 backend, neither of which cross-compiles). * docs(infra): write down the allow-vs-expect rule and the test exemption `.claude/rules/rust.md` still told agents to hand-write an `#[allow(clippy::expect_used)]` on every test module — now `clippy.toml`'s job — and still described `openlogi-hidpp` as sitting outside the workspace lint table, which its own AGENTS.md retired some time ago. Replaces both, and adds the rule the sweep produced: `expect` by default, with the three cases where it provably cannot work (cfg-conditional lints, fulfilment differing between a crate's lib and test targets, and lints raised inside a macro expansion), plus the scoping rule for cast suppressions and the mechanical recipe for re-running the sweep across all three lint lanes. Logged in `docs/DECISIONS.md` with the numbers behind it. * style(infra): trim the comments this sweep added Several of the new suppression rationales argued the case instead of stating it. A `reason` earns its keep by naming the bound; the surrounding prose was restating what the attribute already says. * chore(infra): make the suppression policy machine-checked `allow_attributes` and `allow_attributes_without_reason` turn the two rules the sweep just wrote down into build failures instead of review notes: reach for `expect`, and say why. Adopting them cost three annotated exceptions and nothing else — the sweep had already left the tree compliant, and `allow_attributes_without_reason` found zero violations on any lane. The three sites where `expect` provably cannot work keep their `allow` behind an `#[expect(clippy::allow_attributes)]`, which is a better home for the "why not expect" note than a bare comment: it fails the build if the exception ever stops being one. Two useful things fell out: - The first pass ruled that a `cfg_attr`-wrapped suppression always needs `allow`. Two of the four turned out to work fine as `expect` — the rule was too coarse, and the lint is what surfaced it. `state.rs` and the permissions page are now `expect`. - `allow_attributes` only sees outer `#[allow]`. A module-wide `#![allow(…)]` is invisible to it — precisely the shape that had rotted in `openlogi-assets`. Recorded in the lint table and in the rules so nobody reads a green build as full coverage. * fix(camera): drop unfulfilled linux cast expects * build(nix): overlay current stable rustc * fix(nix): include nfpm.yaml in the package fileset --------- Co-authored-by: David Budnick <david@budnick.ca> | 18 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
feat(i18n): migrate catalogs to semantic TOML keys (#1169) | 8 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 | |
fix(i18n): refine French asset and control descriptions (#1278) Retain the contributor’s functional-mirror correction and natural wording for corner rounding and low-light compensation. Preserve the catalog polish already merged in #1180 and the DPI step added in #1292. | 1 天前 | |
chore: release v0.8.3 (#1163) * chore: release v0.8.3 * chore(release): write whole-repo changelog --------- Co-authored-by: aprilnea[bot] <263112868+aprilnea[bot]@users.noreply.github.com> Co-authored-by: aprilnea[bot] <41898282+github-actions[bot]@users.noreply.github.com> | 9 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 9 天前 | ||
| 1 天前 | ||
| 11 天前 | ||
| 11 天前 | ||
| 9 天前 | ||
| 8 天前 | ||
| 1 天前 | ||
| 15 天前 | ||
| 9 天前 | ||
| 9 天前 | ||
| 18 天前 | ||
| 9 天前 | ||
| 9 天前 | ||
| 9 天前 | ||
| 9 天前 | ||
| 8 天前 | ||
| 9 天前 | ||
| 1 天前 | ||
| 9 天前 |