Skip to content

openbmc_fan_control: match every first() instead of unwrapping behind a length guard (nine sites #11720's wall now refuses) - #11834

Closed
gunbai-bot[bot] wants to merge 2 commits into
mainfrom
fierce-seal-607/openbmc-first-optional
Closed

gunbai-bot[bot] wants to merge 2 commits into
mainfrom
fierce-seal-607/openbmc-first-optional

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

What

The fleet-lane floor on #11744 excluded dag/extdeps/bmc/openbmc_fan_control.dag (modules_excluded=1, fail-closed): nine direct-call arguments took a List.first() (Optional) where a required String/Int/OpenBmcFanConfigQuery is declared, each behind a length guard standing in for the qualification. On main since #10929 (2026-09-10); outside every gate closure until #11744's closure reached it — the 96th site of the class #11720 closed.

Every site now matches the Optional and routes Absent to the function's existing typed refusal (OpenBmcBoolRefused / OpenBmcByteSizeRefused / OpenBmcIntegerListObserved-terminal / OpenBmcFanConfigObservationRefused); the five-scalar stepwise controller reads through a typed OpenBmcFiveScalars carrier built once. The two OpenBmcCollectionOne { value: values.first() } record-field sites — a position the wall does not judge yet (#11720's rostered residual) — are matched the same way.

Evidence

  • Narrow compile (gunbc compile --source-root dag --source-root src/v2 --entry dag/extdeps/bmc/openbmc_fan_control.dag): 9 blocking → 0 blocking on this head.
  • Witness controls: bmc_fan_converge_witness_test 12/12, bmc_typed_operations_witness_test 29/29 PASS.
  • The fleet lane's floor on this PR must plan the module (no modules_excluded).

Found through the fail-open in #11791's floor job (job green over FloorRefused), which is reported separately.

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 2 commits September 20, 2026 09:53
… a length guard (nine sites #11720's wall now refuses)

The fleet-lane floor on #11744 excluded dag/extdeps/bmc/openbmc_fan_control.dag (modules_excluded=1): nine direct-call arguments took a List.first() (Optional) where a required String/Int/OpenBmcFanConfigQuery is declared, each behind a length guard that stood in for the qualification. On main since #10929 (2026-09-10); outside every gate closure until #11744 reached it. Every site now matches the Optional and routes Absent to the function's existing typed refusal; the five-scalar stepwise controller reads through a typed OpenBmcFiveScalars carrier built once. The two OpenBmcCollectionOne { value: values.first() } record-field sites (a position the wall does not judge yet) are matched the same way. Narrow compile: 9 blocking -> 0; witness controls bmc_fan_converge 12/12, bmc_typed_operations 29/29 PASS.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…siusDelta (wrapped at destructure); the monomorphic collection copy is deleted for the generic

Review 69070: OpenBmcFiveScalars named duty percentages and temperature deltas as bare Int while std.measure's carriers were consumed two lines later (unit-modeling); openbmc_fan_controller_collection was a character-for-character copy of openbmc_collection_from_values<T> that this PR had edited in parallel (§3 fork). The carrier is now OpenBmcStepwiseScalars over Percent / CelsiusDelta built once at destructure; the specialised collection fn is deleted and its single call site uses the generic.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor Author

Review 69070 (both findings) fixed in 68fe101: carrier over Percent/CelsiusDelta wrapped at destructure; the monomorphic collection copy deleted, call site uses the generic. Narrow compile 0 blocking; bmc_typed_operations 29/29 PASS.

Named follow-up, not this PR: running bmc_fan_converge_witness_test's closure surfaces three more sites of the same class in modules this PR does not touch — dag/gunbc/bmc/bmc_fan_monitor.dag:63:27 and :80:37 (an Optional Second at a required Second), dag/gunbc/bmc/bmc_fan_converge.dag:766:64 (Optional NonEmptyStr at a required NonEmptyStr). Same repair shape; the floor will exclude those modules until fixed. — sent from fierce-seal-607

@gunbai-bot

gunbai-bot Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #11895, which carries this change merged onto current main together with the program's other open PRs (operator ruling 2026-09-20, wind-down consolidation). — sent from fierce-seal-607

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants