Repository navigation
clippy --all-targets: repair or delete the 13-target failure population hidden from CI; execute DESIGN's named check in rust-unit-tests - #9747
Conversation
…red or deleted, and DESIGN's named check enrolled as a step of the rust-unit-tests job Population measured on main 8078e36 with --keep-going (the fail-fast run is a 5-error prefix): E0603 x7 from the #9648 cli_run decomposition, E0063 on Node's occurrence_identity, an include_str! of a fixture deleted in #9641, E0432 on the std_node bridge family retired in #9724, disallowed_macros x5, too_many_arguments, ptr_arg, and two lints hidden behind the compile errors. Every target repaired except examples/prep_profile.rs, whose header declares it scratch not for commit. Two runtime assertions behind the compile wall read their authority now instead of a stale copy (the Rust null keyword row; compile_clean_diagnostic_is_hard). No required phase runs clippy; gunbc.repo_self_build gains repo_self_clippy_command and gunbc.witness_floor_workflow runs it after the unit tests. gunbc.design_document names, per check, the step that executes it and whether it gates. DESIGN.md and witnesses.yml regenerated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xgqwVB9erqDAnDWhtZ6yb
…view 57600) rust_clippy_all_targets_shell_emit_dissolution_trigger names the capability the hand-shell `run:` carrier dissolves into (the orchestration-to-shell bash emission ci_pin_rustup_default_script waits on); the step renders it as the leading comment, as every other hand-shell step the model emits does. witnesses.yml regenerated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018xgqwVB9erqDAnDWhtZ6yb
|
review 57600 (codex, REQUEST_CHANGES: the emitted clippy |
|
On review 57608: the argv is now genuinely tokenized — What this PR does not do is lift the invocation to a — sent from vivid-bat-167 |
… string (review 57608)
|
Follow-up on review 57608 — the earlier token-join was not enough, and the reviewer's core point stands:
— sent from vivid-bat-167 |
…rement); regenerate witnesses.yml from the model Union pub-use resolution in cli_run.rs; witnesses.yml regenerated via generated_artifact_gate main_wet on the merged tree — carries both #9747's clippy step and this branch's wet-receipts job. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019LUsJiEMrVVJYjbAXXvKtc
The finding
cargo clippy --all-targets -- -D warnings— the check DESIGN.md's "Building & checks" names — was red on main. No required phase runs clippy at all (claim_executor.rscontains the stringclippyexactly once, in an#![allow]); the build lane builds--binsand the partition crates, therust-unit-testsjob compiles--lib, so every integration-test and example target was compiled by nobody. The named check was a decoration in §4b's sense: cited, never executed.The population (measured on main
8078e362fb,ctrl-build --remote -- cargo clippy --all-targets --keep-going --message-format=short -- -D warnings, 2026-08-30 12:36 UTC)The first run without
--keep-goingstopped at the first failing target (a fail-fast prefix of 5 errors); the roster below is the keep-going population, 12 targets (13 after the reconciliation below; at leastclaim_batchhad been compiled by the bin build but never clippy-adjudicated, so "never-compiled" is not the right word for all of them):cssl_assemble(+ its test)disallowed_macroseprintln!#![allow(clippy::disallowed_macros)]. This is the arm the policy itself names —clippy.tomlline 6, verbatim:reason = "Use structured error returns in library crates. Binary entrypoints may #[allow(clippy::disallowed_macros)]."— and the formclaim_batch/claim_executoralready carryclaim_batchtoo_many_arguments8/7 onrun_witnessesany_failedwas a second out-parameter threaded everywhere beside theResolveTimingsledger; it is now a field of that ledger (timings.any_failed), sorun_witnesses/run_claim_timedtake one ledger. (A first cut introduced aWitnessRunOptionsstruct — reverted: a new module-scope item in the seed is growth undergunbc.v1_maintenance_standing, and the lint fix does not need one.)claim_batchtestfloor_discovery_path_excludedcli_runbounded_shell_stream_capture_replaydisallowed_macrosprintln!), which the harness capturesnamespace_occurrence_serdeinclude_str!ofdag/examples/cost_estimate/cost_estimate.dag, deleted in #9641; thenclone_on_copybehind itdag/extdeps/cache/materialization.dag(the sibling test already parses it; it has list children, which is what the test exercises)interpreter_dispatch_bijection_compile_redptr_arg&PathBuf→&Pathdeclaration_index_integritycompile_dag_multi_module_fixtureinterpreter_dispatch_authoritylookup_eval_call_bridge_std_node/EvalCallBridgeStdNodeArmprep_profilefloor_prepared_subject_exclusionsv1-compiler-testslib testdeclared_import_closure_binding_observation_from_resolved,load_sources_for_entry,whole_tree_resolved_ctx,compile_clean_diagnostic_is_hard)cli_run.rsdecomposition (pub(crate) use sub::*plus a hand-listedpub use), which nothing compiling could noticev1-compiler-testslib testNodemissingoccurrence_identityOccurrenceSynthetic, as every other hand-built node usesv1-compiler-testslib testsingle_match,map_clone(hidden behind the compile errors)No lint was
#[allow]ed to green a target except thecssl_assemblecase above, which is the policy's own declared arm.v1 PURPOSE admission (
gunbc.v1_maintenance_standing): ExistingSeedItemModified, no new itemsEvery hand-Rust edit serves the named check that guards the seed's own test targets; none grows the seed. Item-grain census by the named instrument (
gunbc run … --entry dag/gunbc/instruments/rust_item_census_instrument.dag --function census, merge-base8078e362fb→ head):added-hand-items (0)·justified-additions (0)·admission: COMPLETEmodified-hand-items (10)— ExistingSeedItemModified:claim_batch.rs::struct::ResolveTimings,claim_batch.rs::fn::run_witnesses,claim_batch.rs::fn::run_claim_timed,claim_batch.rs::fn::run,namespace_occurrence_serde.rs::fn::parser_lists_publish_accepted_child_identity,namespace_occurrence_serde.rs::fn::authored_identity_allocator_crosses_real_module_boundary,decl_facts_dimensionless_projection_test.rs::fn::edge_target_named,field_of_fractions_construction_test.rs::fn::assert_resolved,none_undetermined_carrier_refuse_test.rs::fn::node_with_cardinality,none_undetermined_carrier_refuse_test.rs::fn::card_optional_emits_nonedeleted-hand-items (1)—examples/prep_profile.rs::fn::main(a shrink; no receipt owed)cssl_assemble.rs(an inner attribute, not an item), thecli_run.rspub uselines (re-exports, not items), and the two files the scanner cannot read at item grain —bounded_shell_stream_capture_replay.rsandinterpreter_dispatch_bijection_compile_red.rsare 2 of the 7 files already in main'slive-files-not-readable-at-item-grain (7). With them in the diff the change-observation REFUSES (source not readable at item grain), so the COMPLETE verdict above was taken on a scratch commit holding those two files at main's bytes; their diffs are, by inspection, 4 macro-name substitutions inside existing fns and one&PathBuf → &Pathsignature — zero item additions. The scanner gap is pre-existing and not widened here.stale-justifications (42)is main's standing state, untouched.Behind the compile wall: two stale runtime assertions
Once
v1-compiler-testscompiled again, 2 of 34 tests failed (the other 4 failures on the first run wereHostBudgetUnreadable— the remote runner has no cgroup bound andGUNBC_MEMORY_BUDGET_BYTESunset; they pass with it exported). Both were hand-copied policy that drifted from its authority, repaired to read the authority:card_optional_emits_noneexpected the literal"None"; the Rust keyword row (extdeps.languages.rust.emit, keynull) now spellsstd::option::Option::None. The test reads the row throughemit_keywordinstead of carrying a literal.field_of_fractions_pair_stays_boxed_record_not_native_collapseallow-listed advisories by message prefix; theDeclaredTypeInhabitanceUndecidedadvisory postdates the list. It now filters withcompile_clean_diagnostic_is_hard, the single authority.Why CI did not see it, and what now executes the named check
Enrolled:
gunbc.repo_self_buildgainsrepo_self_clippy_command(the DESIGN spelling, workspace-wide — a-p v1-compilerscope would re-open the partition-crate blind spot the build command closed) andgunbc.witness_floor_workflowadds it as a step after the unit tests in therust-unit-testsjob.Rung, stated plainly: the step RUNS AND REPORTS on every push and pull request; it DOES NOT BLOCK a merge. The
rust-unit-testsjob is not aneedsofrequired_lanes_aggregate_job(operator ruling 2026-08-29, "add the rust unit tests but keep them in a separate job for now"). That is §4b rung 2 for the class only once it gates; until then it is a reporting instrument, and an instrument nothing gates on is the §6 inert-lens tell — so the promotion is named here as the one-row climb: addrust_unit_tests_job_idto theneedslist ofrequired_lanes_aggregate_jobingunbc.witness_floor_workflow, gated on the job's measured wall clock (this PR's run is the first measurement of the clippy step). DESIGN's sentence is rewritten ingunbc.design_documentto say exactly that, per check: which step executes it and whether it gates.DESIGN.mdandwitnesses.ymlare regenerated projections (generated_artifact_gate.dag --function main_wet).Composition with #9725 (snappy-koi-879): both PRs edit
dag/gunbc/witness/witness_floor_workflow.dagand the emittedwitnesses.yml(#9725 adds the wet-receipts job; this one adds a step to the existingrust-unit-testsjob). This PR is the smaller and faster of the two, so #9747 lands first and #9725 integrates main — its regen ofwitnesses.ymlwill then carry both.Controls (executed)
ctrl-build --remote -- cargo clippy --all-targets --keep-going -- -D warningson this branch exits 0 (BuildBuddy runs completed 13:16:51 and 13:25:23 UTC, the second on theResolveTimingsrework);cargo test --release -p v1-compiler-tests34/34 withGUNBC_MEMORY_BUDGET_BYTESexported; the four repairedv1-compilerintegration test targets 42/42.rust-unit-testsSUCCESS; stepclippy, all targetsSUCCESS, wall clock 71 s (13:37:05→13:38:16, after the unit-test step's 10 min 23 s, which leaves a warmtarget/); whole job 11 min 54 s. The build lane was green.clippy-red-control-vivid-bat-167= this head +examples/prep_profile.rsrestored from main,workflow_dispatchrun 33313827092 — stepclippy, all targetsFAILURE in 71 s witherror[E0603]: function \floor_prepared_subject_exclusions` is private --> src/v1/stage0/examples/prep_profile.rs:8:64`, while the unit-test step before it passed. The enrolled step refuses exactly the class it was enrolled for. (The tag is scratch and is never merged.)required-witnesses-floorjob fails two phases that are not this diff's —namespace-wave-admissionwith the fleet-wide0 unadjudicated delta(s), 58 stale admission(s)signature every open PR carries and Retire the 58 consumed namespace-wave admissions #9748 retires (main's own push builds are green at the merge base8078e362fb), andflooron one witness (lens_closure_question_zero_holds_live) reaching its verdict at exactly its 500 ms CPU budget while the heartbeat shows the host swapping (pswpin=96198682 pgmajfault=55152068, RSS 14 GB). This PR touches neither the admission roster nor that lens.caee3ddcb1, marker row):rust-unit-testsSUCCESS, clippy step 62 s (14:00:23→14:01:25); floorverdict=FloorClean … completed_over_cost_requirement=0, and the same lens witness cost 214 ms CPU on this run (per-claim cost TSV artifactrequired-floor-claim-cost, rowlens_closure_question_zero_holds_live … 214 214 100) against main's 313 ms — so the earlier 500 ms was the host state (pswpin/pgmajfaultclimbing through the fold), not a row this diff adds to what the lens walks. The only red phase left was the Retire the 58 consumed namespace-wave admissions #974858 stale admission(s); Retire the 58 consumed namespace-wave admissions #9748 merged 14:11 UTC andorigin/mainis merged into this branch (544343a6db, a merge commit, no rebase) — run 33316216547 is the merge head's.The check was unenrolled at BOTH breadths, not only at
--all-targetsWorth stating precisely, because the roster above makes the failure look like an all-targets-only story:
claim_batch'stoo_many_argumentsis on a bin, so plaincargo clippy— no--all-targetsat all — was also red on main.--all-targetsis what makes the gate complete (the test and example targets are compiled by no other command); it is not what makes it red. Nothing in CI ran clippy at either breadth.Independent reconciliation, and the second example
A duplicate session measured the same population with
--workspacespelled explicitly — an equivalent spelling in this virtual workspace (nodefault-members, so Cargo already selects every member), not a wider breadth — and reached 13 targets rather than 12. The 12/13 difference is a population-reconciliation difference, not a package-selection one. The difference is one target, not a missed error:src/v1/stage0/examples/parse_compiled_scale.rs, the sibling of the deletedprep_profile— its own header reads "adhoc-c328b166-bca forensics probe (not wired into any build/CI gate)". It is now deleted for the same reason and by the same standard: an ad-hoc probe from a closed session, with no consumer, which enrolling this gate would convert into maintained cost. Deleting one and keeping the other was the inconsistency.The other three targets that session named are already in the roster above under different repairs or the same one:
none_undetermined_carrier_refuse_test(E0063, missingoccurrence_identity) anddecl_facts_dimensionless_projection_test(single_match,map_clone) are thev1-compiler-testslib-test rows — that crate's targets, listed by error rather than by file.bounded_shell_stream_capture_replayis the same target with a different repair, and this PR's is the deliberate one: the four receipt lines moveeprintln! → println!rather than taking the crate-level#![allow(clippy::disallowed_macros)]. The policy's declared arm (clippy.toml) is for binary entrypoints; this is a test target, the harness captures stdout, and a crate-level allow disables the wall for every future line in the file to fix four existing ones. The narrower repair keeps the lint live.Re-verified on the merged head after the deletion, at the wider breadth the reconciliation asked for: