Repository navigation
BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabeling, circular activation proof, static-digest detachment; split suitability / durability qualification / ordinary convergence) + #7375 access ensure (delete the eager legacy credential authority, preserve typed refusal causes, no - #7423
Conversation
# Conflicts: # dag/test/claim/asrock_live_probe_witness_test.dag
4458c37 to
dcb1a46
Compare
dcb1a46 to
9132665
Compare
review 44934 — responses (
|
Add curve and sensor-unavailable duty accessors on extdeps.bmc.types and route thermal witnesses through them instead of local has_* Bool predicates. Co-authored-by: Cursor <cursoragent@cursor.com>
review 45015 — fixed (
|
Add aggregated/independent topology accessors on extdeps.bmc.types and route bmc_fan_policy_projection_topology_matches plus the controller-shape witness through them instead of coproduct Bool predicates. Co-authored-by: Cursor <cursoragent@cursor.com>
review 45026 — fixedFinding — Added canonical accessors on
Witnesses (green by execution): — sent from loyal-owl-29 |
|
Cross-session reconciliation needed — see #7465. Your 1. The 'quiet' curve is srv4's onboarding-overwritten config, not factory. 2. The incident inverts the acoustic assumption. The model minimizes duty (≤ 30 % through 90 °C) for inaudibility. Live: at 30 % duty srv4 ran to 89–97 °C (its case fans were installed backwards — a physical fault, since fixed) and the controller panic-ramped to ~10,200 RPM — that was the loud complaint. srv3's aggressive curve holds the SoC ~65 °C at a steady ~4,800 RPM that's inaudible and never panics. So 'minimize duty' produced the loudest outcome; ramping early was quieter in practice. 3. Firmware track. Full incident, measurements, curve evidence, and the remediation receipt (srv4 is live on the aggressive curve now) are in #7465. Happy to align either way — adopt the aggressive curve + relax the acoustic policy + the track requirement, or walk me through the rationale for lazy + track-3. |
Co-authored-by: Cursor <cursoragent@cursor.com>
Ground gcloud auth-deficit stderr classification in extdeps.cloud.gcp, replace tautological linkage Bool with an exhaustive match gate, guard BMC credential refusal NonEmptyStr refinement, and dissolve parallel materialization walkers into caller pattern matches. Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 45050 (claude REQUEST_CHANGES) —
|
Response to review 45063 (claude REQUEST_CHANGES) —
|
Require every realization role and capability linkage slot to carry evidence before admission; fold unavailable assertions conjunctively. Replace recomputed curve fingerprint pins with a frozen BmcProjectedConfigContentIdentity row tying probed curve bytes to the cited sha256 hex (review 45067). Co-authored-by: Cursor <cursoragent@cursor.com>
Response to review 45067 (codex REQUEST_CHANGES) —
|
Replace String refusal leaves with typed BmcFanConfigPersistenceApplyRefusalCause and FanPolicySuitabilityRefusalCause coproducts; wrap persistence-apply refusals rather than flattening across domains (quiet-wren-607). Co-authored-by: Cursor <cursoragent@cursor.com>
The review 45108 nit is honest: substring matching over English stderr is fail-closed today but fragile. Name the structured auth-status replacement and route classification through the single pattern-table authority. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 45109 — already fixed on Verified against current
No further code change owed for this finding — please re-read at — sent from loyal-owl-29 |
…zy quiet-duty policy) (#7471) The onboarding overwrite left srv4 on a lazy "hold 30% through 90C then panic-ramp to 100% by 98C" curve, which #7421/#7423 had encoded as the fleet intent. On a hot chip that curve let the SoC climb and drove the controller to maximum -- the loud complaint. The operator's decision: the fleet standard is the srv3 2.07.00 vendor STOCK aggressive curve (40->30, 55->40, 65->50, 75->75, 85->100), which holds the SoC steady-moderate (~4800 RPM at the 50% step, inaudible, ~65C under load) and never idles into a panic. bmc_intent: - fleet curve -> aggressive (zone failsafe 30, hysteresis 1/1 -- srv3 stock). - BmcFanAcousticPolicy INVERTED from a low-duty ceiling ("quiet through 90C") to engage-cooling-early (>=50% duty by 65C). The empirical safety property is that MINIMIZING duty produced the loudest outcome; the policy now rejects the idle-until-panic shape by construction instead of blessing it. - Firmware kept at track-3; the operator's keep-2.x (BmcFirmwareUnpinned) is deliberately a separate follow-up -- it ripples through the firmware-management tests. bmc_fan_projection: - content-identity digest -> f559aff7, measured by running the modeled TEMP_SOC jq realization on srv4's base config and reading the live digest back. Unlike the prior lazy row (whose hex was the raw onboarding file, idempotent only in structure), this hex IS the realization's own output -- the realization reproduces the cited digest byte-for-byte. fleet_bmc_observation / fleet_bmc_state: - srv4 observed curve + convergence/reboot receipts re-collected LIVE 2026-07-30 on the aggressive curve: 170s graceful-restart persistence re-proven, TEMP_SOC 60-63C, guarded component max 69C, FAN1 4600 / FAN2-4 1200 RPM. witness: - curve-duty test rewritten for the aggressive shape. - asrock_altrad8ud_factory_temp_soc_fan_curve is byte-identical to the new fleet curve, so the "drifted"/"non-fleet" fixtures were inverting (the factory-curve observation is now CONVERGED, not drifted). Added lazy_onboarding_drift_curve (the real onboarding drift) and repointed those tests; reboot interval -> 170000. Live: srv4 rebuilt to the stock curve THROUGH the modeled jq realization (staged atomic rename on the jffs2 overlay), digest f559aff7 reproduced byte-identically on the BMC's own jq, persistence re-proven across a Redfish GracefulRestart. Verification: compile clean, 0 added diagnostics vs origin/main (202 == 202). 54/55 bmc witnesses green by execution (bmc_firmware_thermal 41/42, bmc_live_receipts 13/13). The one failure (non_fleet_quiet_curve_projected_config_digest_is_unavailable) errors IDENTICALLY on origin/main -- a pre-existing Value::Null-vs-Optional interpreter limitation on bmc_fan_projected_config_digest's Unavailable arm, not a regression (confirmed by stash-compare); the edit to it was required because the factory curve is now byte-equal to the fleet curve. Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…LOCK redesign. Delete the exported generic List<String>->rendered-remote-shell aperture and caller-authored jq/TSV string protocol; closed OpenBmcOperation algebra with structured typed responses and explicit zero/one/many cardinal (#7454) * Bind durability evidence to admitted state * Model BMC desired state and reconciliation * Define typed OpenBMC fan operations * Ensure BMC access only when demanded * Record versioned BMC capabilities and live receipts * Actuate BMC fan convergence with typed rollback * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * Revert "WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma" This reverts commit 4441ba7. * Revert "WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma" This reverts commit 33883c6. * Revert "WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma" This reverts commit a8a9edf. * Revert "WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma" This reverts commit a3c497f. * Revert "WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma" This reverts commit 5115d46. * Consume shared validated BMC fan curve * Narrow shared curve import to validated carrier * Use validated curve in duty consumers * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Use canonical carriers in BMC proof receipts * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Preserve units across OpenBMC observations * Bind SSH identity admission to exact host * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Use canonical HTTP status carrier for BMC reset * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Treat fan hysteresis as a temperature delta * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * Split typed OpenBMC operations from blocked actuator * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Regenerate signed temperature delta carriers * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * Remove parallel OpenBMC argv interpreter * Document fixed OpenBMC transport boundary * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * Mark OpenBMC observations readonly * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * Regenerate canonical positive measure carrier * Anchor OpenBMC extdeps authorities * Model BMC desired state and reconciliation * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * fix: repair fleet_bmc_state parse error blocking CI regen The durability-evidence constructor used else-if chains and multiline || conditions the .dag parser rejects; refactor to bool-match helpers and define GoogleCloudInteractiveAuthenticationRequired as a closed type. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * fix: resolve BMC credential materialization typecheck failures Move shell.GCloud.AuthPrintAccessToken into extdeps.shell with an exit_success field, add credential materialization helpers, and update srv3 actuate paths to match on BmcCredentialMaterialization instead of Optional Present/Absent. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: firmware-track Conflict precedes projection gate; align witness verdict Refuse off-track observed firmware with Conflict before the projection-absent arm, and expect UnknownRefused when major-3 firmware carries a wrong minor projection capability. Co-authored-by: Cursor <cursoragent@cursor.com> * docs: declare bmc_bootstrap_provision eager token fork as dissolve-on follow-on Name the pre-existing shell.GCloud.AuthPrintAccessToken site beside ensure_access_token so the second authority is counted, not forgotten (#7425). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * fix: align fan hysteresis with frozen carrier PositiveCelsiusDelta Mechanical follow-on to rebasing #7423 onto carrier base 5dee646. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * fix: migrate firmware intent check to typed verdict on carrier b70c484 Replace deleted Bool predicate with bmc_firmware_observation_intent_verdict; Mismatch arms thread required/observed into located refusal reasons. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * fix: migrate fleet BMC durability evidence to sunny-crab typed-order receipts Rebase consumer onto carrier d8d15c5: drop StateDurabilityTimeline, use StateBefore/AfterReadbackReceipt and perturbation timing fields derived from the reboot receipt without storing instants twice. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: refuse AdmittedConfigDigestUnavailable instead of fabricating digest Replace the non-fleet bmc_fan_admitted_config_digest else-branch sentinel with a typed Unavailable variant; capability construction now takes an explicit admitted digest. Witness sentinel renamed for observation-only mismatch controls. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: construction-wall linux publication commit + derive capability hash Replace hand-rolled record field matching with a unit variant (LinuxSynchronizedRenameReplacePublication) as the single synchronized authority; derive durability capability definition_hash from the publication variant. Mark realization definition hashes as label-backed scaffold pending swift-boar actuator mechanical derivation. Co-authored-by: Cursor <cursoragent@cursor.com> * Make durability proof gaps explicit * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * Repair positive measure seed realization * fix: repair std_measure.rs enum variant broken by carrier regen Restore PositiveMeasureCountBuilt after a mechanical regen rewrite mistook the enum arm for a Measure constructor, which broke cargo fmt and the build gate on 199a777. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: refuse non-positive reboot timing; dissolve linux Bool predicate Address review 44783 (codex REQUEST_CHANGES): - Replace fabricated 1ms fallback in bmc_fan_receipt_elapsed_millisecond with BmcFanRebootTimingReceipt that typed-refuses DurabilityReceiptNonPositiveInterval for zero/negative intervals. - Delete linux_file_publication_has_synchronized_commit Bool predicate; match LinuxFilePublicationProtocol coproduct directly at consumers. - Add reboot_durability_evidence_refuses_non_positive_interval witness. Co-authored-by: Cursor <cursoragent@cursor.com> * Close positive measure and parser review gaps * WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin * fix: dissolve coproduct Bool predicates flagged in review 44803 Route firmware intent and durability commit decisions through canonical typed verdict/query surfaces: bmc_firmware_version_intent_verdict for pin/track checks, DurabilityCommitBarrier match for synchronized commit, and remove publication-protocol Bool re-encoding from apply suitability. Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma * fix: repair bmc_converge.dag parse error from mismatched braces Close the nested match arms in firmware classification and fan-policy classification that caused heal/regen to fail with expected LParen. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: restore secret_manager module import for AccessVersion binding The stack C migration deleted import extdeps.cloud.gcp.gcp but left gcp.SecretManager.AccessVersion in fetch_secret_ref_credential; bind the service through extdeps.cloud.gcp.secret_manager where it is defined (review 44815). Co-authored-by: Cursor <cursoragent@cursor.com> * Close durability qualification bypass * fix: close review 44832 gaps and bind durability evidence to receipt capability Record perturbation_capability on BmcFanRebootPersistenceReceipt so evidence construction cannot relabel via a separate caller argument; consume asrock_altrad8ud_factory_fan_config_digest for previous_config_digest; dissolve remaining Bool predicates into typed persistence and durability verdict matches (review 44832). Co-authored-by: Cursor <cursoragent@cursor.com> * fix: break bmc_fan_projection <-> fleet_bmc_observation import cycle Move srv4 projection capability and reboot receipt back to fleet_bmc_state; relocate bmc_fan_admitted_config_digest to fleet_bmc_observation beside the digest authority; drop bmc_fan_projection's observation import so combined actuator compile is acyclic (swift-boar-810). Co-authored-by: Cursor <cursoragent@cursor.com> * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * fix: parameterize bmc_fan_admitted_config_digest per reconcile spine Projection takes caller-supplied digest (optional absence → Unavailable); observation no longer owns admission logic or srv4 hardcoding. Breaks the bmc_fan_projection ↔ fleet_bmc_observation cycle without a third module. Co-authored-by: Cursor <cursoragent@cursor.com> * test: witness typed OpenBMC observation decoding * fix: distinguish negative BMC probes from transport refusal * fix: reject inconsistent BMC transport projections * test: reject forged BMC backup manifest identity * fix: derive projection config digest from curve+realization Ground projected_config_digest in bmc_fan_projection from intent curve and realization identity, not srv4_bmc_fan_active_config_digest observation. Restores non-tautological live-digest and durability admission checks (review 44861). Co-authored-by: Cursor <cursoragent@cursor.com> * docs: name backup manifest identity consistently * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * revert: inherit canonical anchor scanner fix from stack A * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * fix: converge actuator onto landed BMC carriers * test: import typed OpenBMC refusal constructor * refactor: trust typed BMC observation inputs * fix: refuse multi-path BMC projections * fix: retain pinned firmware realization gate * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * fix: refuse error-bearing BMC probes * fix: preserve refused BMC probe evidence * refactor: consolidate BMC substrate authorities * fix: refuse inconsistent BMC transport success * WIP: BMC stack B: #7374 typed OpenBMC operations + #7376 actuator — HARD BLOC * test: bind every BMC manifest identity field * fix: require continuous BMC monitoring coverage --------- Co-authored-by: Brian <briansrls@MacBook-Pro.local> Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Frozen carrier base
5dbab028bab51e4275dbf0c8a0f8457eb855d432(sunny-crab-665 / #7421 stack A — review 44820 qualification-bypass close).#7423 head:
8357fa493aonsession/loyal-owl-29Summary
BMC stack C: #7373 policy reconciliation + #7375 access ensure.
perturbation_capabilityrecorded at perturbation time; receipt-only evidence API)fleet_bmc_observation→bmc_fan_projection; peripheral instances (srv4_bmc_fan_projection_capability, reboot receipt) live infleet_bmc_statebmc_fan_admitted_config_digestbeside digest authority infleet_bmc_observation(projection module no longer imports observation)ensure_access_token; typed access refusal causes preservedTest plan
8357fa493aagainst carrier5dbab028babmc_firmware_thermal_witness_test.dag+ combined actuator compile (stack B)