Skip to content

Model BMC desired state and reconciliation - #7373

Closed
briansrls wants to merge 1 commit into
agent/bmc-capability-receiptsfrom
agent/bmc-policy-reconciliation
Closed

briansrls wants to merge 1 commit into
agent/bmc-capability-receiptsfrom
agent/bmc-policy-reconciliation

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

What changed

Defines fleet BMC intent, the projected fan-policy state, and reconciliation against typed observations.

  • Declares the currently admitted OpenBMC 3.x capability family and refuses incompatible firmware before mutation.
  • Projects the global fan policy into an exact desired-state digest and versioned realization identity.
  • Converts matching raw lifecycle/readback receipts into the generic durability evidence contract.
  • Refuses missing, stale, duplicate, conflicting, wrong-target, wrong-generation, wrong-capability, and wrong-digest evidence.
  • Keeps observed state and desired state in separate modules.

Why

Host convergence previously had no equivalent BMC desired-state admission path. This layer makes the valid BMC state explicit and ensures a receipt can qualify only the exact policy, machine, capability, perturbation, and readback subject being reconciled.

Stack

Depends on #7372.

  1. Bind durability evidence to admitted state #7371 generic durability carrier and witnesses
  2. Record versioned BMC capabilities and live receipts #7372 BMC/Linux capability facts and typed live receipts
  3. This PR: BMC desired state and reconciliation
  4. Typed OpenBMC operation realization
  5. Demand-derived BMC access ensure
  6. Live actuator and rollback receipt

Supersedes the intent/reconciliation portion of draft #7338.

Validation

  • BMC policy/reconciliation focused witnesses: 24/24
  • Includes RED controls for firmware mismatch and durability identity/digest conflicts
  • Whole-tree compile-clean and build-artifact verification pass

@gunbai-bot

gunbai-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Superseded by #7423, which owns the hard-block rework: evidence relabeling closed by deriving admission and boundary from a typed perturbation receipt rather than caller labels, the circular activation proof broken (the post-reboot Noop becomes a consequence, never a premise), the static-digest detachment replaced by a live canonical digest comparison, and the single classification split into suitability / post-apply durability qualification / ordinary convergence with an in-model qualification path for the bootstrap case.

Closing loses nothing: this head (557055853d) is an ancestor of #7423 and #7428, and the branch is retained.

— sent from quiet-wren-607

@gunbai-bot gunbai-bot Bot closed this Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
gunbai-bot Bot pushed a commit that referenced this pull request Jul 29, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls pushed a commit that referenced this pull request Jul 30, 2026
briansrls added a commit that referenced this pull request Jul 30, 2026
…ling, 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)

* Bind durability evidence to admitted state

* Record versioned BMC capabilities and live receipts

* 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 A: #7371 durability substrate + #7372 capability receipts — ma

* Use canonical carriers in BMC proof receipts

* WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma

* Use canonical HTTP status carrier for BMC reset

* 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 A: #7371 durability substrate + #7372 capability receipts — ma

* Regenerate signed temperature delta carriers

* WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma

* WIP: BMC stack A: #7371 durability substrate + #7372 capability receipts — ma

* Regenerate canonical positive measure carrier

* 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>

* 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>

* 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>

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* fix: typed access-ensure refusals and credential probe upsert arms

Classify gcloud print-access-token failures by stderr: only observed auth
deficits yield Apply(interactive auth); infrastructure failures Refuse.
Preserve AccessTokenUpsertRequired/EnsureRefused through BmcCredentialProbeResult
instead of erasing into CredentialStateUnknown (review 44879).

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: execute projection digest sha256 derivation and address review 44897

Ground the fleet-quiet projected config digest on one cited hex authority
consumed through sha256_digest(hex: …), add a curve-step fingerprint pin,
and witness the executed equality so digest drift cannot pass guards silently.

Co-authored-by: Cursor <cursoragent@cursor.com>

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* fix: preserve durability construction refusal and dissolve power predicate

Keep srv4 durability evidence as BmcFanDurabilityEvidenceConstruction and
propagate typed construction refusals through classification instead of
erasing to an empty evidence list. Replace the hand-rolled RedfishPowerState
Bool predicate with redfish_host_power_state_continuity_verdict.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: exhaust StateDurabilityRefusal arms in fan durability reasons

Remove the absorbing wildcard in bmc_fan_durability_refusal_reason so each
StateDurabilityRefusal variant surfaces a located diagnostic, and witness
the generation-mismatch arm executes with distinct prose.

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: dissolve BmcFanDutyDecision predicates onto canonical surface

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>

* fix: dissolve BmcFanControllerShape topology onto canonical accessors

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>

* Merge remote-tracking branch 'origin/main' into session/loyal-owl-29

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: address review 45050 single-authority and construction gaps

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>

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* fix: block partial linkage admission and bind projected digest identity

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>

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* fix: close fan-policy suitability refusal causes in bmc_converge

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>

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* WIP: BMC stack C: #7373 policy reconciliation (HARD BLOCK: evidence relabelin

* Mark gcloud stderr auth-deficit classifier as dissolve-on heuristic.

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>

---------

Co-authored-by: Brian <briansrls@MacBook-Pro.local>
Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Jul 30, 2026
…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>
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.

1 participant