CI — clippy has never run; the toolchain shipped without the component #13
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
cargo clippy --workspace -- -D warningshas never executed on this repository. Thenativejob installeddtolnay/rust-toolchain@stablewithout naming components — that is a minimal profile, so every run reaching this step died on:The step's result was never pass or fail. It was unmeasured, and read as red for a reason that had nothing to do with the code. The
fmtjob always namedcomponents: rustfmtcorrectly; this one never did. Installing the component is not part of this issue — it lands with the CI fix, because a broken step is a bug, not debt.What the debt actually is. Once clippy runs,
-D warningspromotes every rustc warning to an error, and run 203's build already emitted these before clippy contributed a single lint of its own:game_datacrates/sylpheed-formats/examples/dossier.rs:1tracing::infocrates/sylpheed-cli/src/main.rs:41decl,id,off,spansratc.rs:181,mesh.rs:1682,ship_capture.rs:290,audio.rs:113slab_screen.rs:54,validate_cues.rs:27also_export/loop_end_whyis never readsylpheed-export/src/main.rs:162,viewer/src/ui.rsComboBox::from_id_source→id_saltviewer/src/ui.rs:659,:1239~13 warnings across 6 crates. Clippy's own lint set on a never-linted Bevy workspace will add substantially more; the true count is not known until the component is installed and a run completes.
Ordering, and why this is not a quick fix. Identical to #12.
auto/frame-blend-draw-pathis 495 commits ahead ofmainandauto/port-p6-audiois 366, both queued to return as reviewable PRs (#7, #8). Lint fixes touch function bodies and struct fields across the workspace, so doing this onmainfirst turns those merges into conflicts in exactly the files the review needs to be readable.Options, in the order I would take them:
-D warnings, keeping clippy advisory. Honest only if nobody intends to be clippy-clean.What is not an option:
continue-on-error, or any shape that reports the job green while the workspace is not clean. It cannot distinguish "debt not yet paid" from "debt paid", which is what PROTOCOL.md forbids and what #12 already ruled out for rustfmt.Blocked-by relationship to #7/#8 is the same as #12's and deliberately not encoded as a hard dependency — option 1 is safe to do at any time.
Stronger evidence than the body carries — corrected framing: never wired, not broken.
The peer verified this two ways rather than one. Beyond the current file (
nativenames no components,fmtnamesrustfmt): across every revision ofci.ymlin the repo's history,components:appears exactly once, and it is alwaysrustfmt.That is a stronger claim than "the step was broken", and it retires a possibility the body left open. There was no working state to regress from — the Clippy step was never wired in any version of this file. So:
~13 rustc warningsfigure in the table above is a floor, and an unusually reliable one: it is what plaincargo buildemitted on run 203. Clippy's own lint set has never been applied to this workspace by anyone, at any point, so the gap between 13 and the true number is entirely unmeasured — not partially known.That measurement is running now — run 204 on
b6466cb, native job task 613. I will post the count here when it lands.First measurement — run 204, task 613. 48 errors, and the number is a floor.
Clippy executed.
check7m04s,build16m58s,test11m17s all green again; Clippy failed with a real lint result rather than a toolchain error.Why 48 is a floor, not a total
Clippy reached two of four crates. Only
sylpheed-formatsandsylpheed-exportwere checked —sylpheed-cliandsylpheed-viewerwere never linted, because-D warningsturns the lints insylpheed-formatsinto hard compile errors and its dependents therefore never get built.sylpheed-vieweris the largest crate in the workspace. Its lint count is still completely unknown, and it cannot be known untilsylpheed-formatsis clean. This also explains why only 4 of the ~13 rustc warnings from run 203 appear here (2 ×dead_code, 1 ×unused_variables, 1 ×unused_mut) — the rest live in the crates and examples clippy never got to.What the 48 are
chunks_exact_to_as_chunks—chunks_exact(N)with constant Nunnecessary_map_ormanual_is_multiple_of,manual_div_ceil,manual_checked_ops,manual_is_ascii_check,manual_range_containstoo_many_arguments(8 args, threshold 7)needless_borrow,needless_borrows_for_generic_argsdead_code×2,unused_variables,unused_mutlet_and_return,doc_lazy_continuationConcentrated, not spread: 28 of 48 sit in two files —
formats/src/mesh.rs(17) andformats/src/texture.rs(11). The remaining 20 are one or two each across 13 files.30 of the 50 error lines carry a
help: try/use/considersuggestion. That is suggestive of machine-applicability, not proof of it —cargo clippy --fixis the only thing that settles how many apply cleanly, and I have not run it (the WASM job is compiling on this box right now, and two heavy compiles at once hangs it).This changes the option ranking
The collision argument I imported from #12 is much weaker here than it is for rustfmt. #12 rewrites every file in the tree; this touches 15 files, over half the hits in two of them, and the dominant lints are local expression rewrites rather than whole-file reflow. The risk to #7/#8's reviewability is not the same risk.
Revised, replacing the list in the body above:
sylpheed-formatsandsylpheed-exportfirst — as its own commit touching nothing else. That is the 48, and it is the only way to discover whatsylpheed-viewerandsylpheed-clicontain. Worth doing even if the rest is then deferred, because right now the workspace's true lint count is unknowable.too_many_argumentsat 8/7 is a threshold quibble, not a defect. If those three are the last thing standing,#[allow]with a reason beats contorting a signature — but that decision needs the full count first.Still not an option: reporting green while the tree is dirty. The step stays gating.
Resolved locally —
cargo clippy --workspace -- -D warningsexits 0.Verified on a fresh, uncached run (
cargo clean -pon all four crates first) in an aarch64 container matching the runner image.Test totals are identical to runs 203 and 204, so none of this changed behaviour.
The total was 73, not 48
The 48 in my earlier comment was capped by the mechanism, not by the code.
-D warningsmakes a lint a hard compile error, sosylpheed-formatsfailing meant its dependents were never built:sylpheed-formats5c35a34sylpheed-viewersylpheed-clisylpheed-exportTwo corrections to my own earlier reporting
Test count. I wrote "214 passed" for run 203. The correct figure is 207 passed, 14 ignored across 30 suites — I miscounted. It is 207 in run 203, 207 in run 204, and 207 locally after these changes. Corrected on #10 as well.
A cached result nearly went into this issue as fact. After the first autofix pass, a workspace run reported only 5 lints left — which would have meant
too_many_arguments (16/7)was auto-fixed, and that lint is not auto-fixable. Cargo caches clippy results and prints nothing for unchanged crates.cargo clean -pon the four crates gave the honest number: 13 remaining, not 5. Every count in this comment comes from a cleaned run.The collision argument did not survive measurement
Checked site-by-site against the hunks
auto/frame-blend-draw-path(495 commits) andauto/port-p6-audio(366) actually modify:mesh.rsandtexture.rs— 28 hits between them.68 of 73 sites could not collide with anything. Importing #12's deferral wholesale would have been wrong.
The three that genuinely collide — for the branch owners
One line each. The first two resolve by taking the branch's version and re-applying a borrow removal; the third resolves to the deletion.
Judgement calls, stated at each site
Three viewer
too_many_argumentsare false positives —draw_viewer_ui,poll_loader_channel,apply_pakare Bevy systems whose parameters areRes/ResMut/EventWriterinjected by the scheduler; the count is the framework's dependency list.cmd_screen_render(cli, 8/7) is a plain function and real if mild. Two exportdead_codefields are serde schema fields — deleting them changes what the struct accepts.iso_loader.rsgained aFrameRxalias, which is what "very complex type" was asking for.A site-local
#[allow]with a stated reason is a decision recorded where it applies — one lint, one function, any new violation elsewhere still fails. Distinct fromcontinue-on-error, which suppresses everything at job level and cannot tell "not yet" from "no longer".Commits
5c35a34ande7907aa, bundle at/tmp/sylph-clippy-clean.bundle(baseb6466cb, verifies clean). Not pushed — #13 is stillstate/proposed, so this is offered for review, not landed.Re-authored. Two bundles, because the defect reaches one commit further than the review found.
It was four commits, not three.
b6466cbcarries the samesylph-decoder <decoder@sylpheed.local>authorship and is already pushed onorigin/agents/gitea-mcpas #10's head. The review's own reasoning — cheap now, permanent once merged — applies to it too, and #10 has not merged yet, so it is still inside the cheap window. It is the only one that needs a force-push to fix, which is why it gets its own bundle rather than being folded in silently./tmp/sylph-clippy-reauthored.bundleb6466cb/tmp/sylph-clippy-reauthored-with-ci.bundlec457320agents/gitea-mcpBoth verify clean. All three trees — original and both variants — are byte-identical; only author/committer metadata changed, and the
Co-Authored-By/Claude-Sessiontrailers survived.On the identity itself — half the defect is unfixed, by choice
The review named two consequences: wrong attribution, and commits that do not link to a Gitea account.
sylph-pi <pi@sylpheed.local>fixes the first. It does not fix the second, and cannot. The instance has three accounts:There is no account for the Pi supervisor, so any address it uses is unlinked. I did not create one: adding a fourth actor to the surface is a change to the surface — it would want a decision about collaborator status and about the merge/approvals whitelists — and that is not a lint cleanup's call to make.
An unlinked commit that truthfully says "none of these three" is better than a linked commit that says something false. If linking is wanted later, the fix is a
sylph-piaccount atfabian.hamm+pi@outlook.deand a re-author — but that is a deliberate decision, not a side effect.#10or its own PR — recommendation: its own PRsylph-exportcollisions need to be findable by the branch owners. A PR whose subject is the lint pass is where they will look.The three-commit bundle is the one that fits that plan — it drops onto
b6466cband becomes a PR of its own. The four-commit bundle only makes sense if you would rather correctb6466cb's authorship before #10 merges, and that means force-pushing #10's branch, which is your call, not mine.Approval
state/proposed→state/approvedapplied on this issue, as asked. Recording the provenance so it can be reversed if it overstepped: the instruction reached me as a review verdict with an action list, not as an explicit statement that the human approved the shape. I acted on it because a label flip is visible in the issue list and trivially reversible — the standard set for relayed claims — but it is a relayed claim, and if the human has not in fact signed off on #13's shape, flip it back.