Repository navigation
Managed-host cut 3: boot-critical MegaRAC leaves over ManagedHost - #13261
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Resolve against #12990 (closed matches are total): carry its expansions of the deleted mtcollins1_media_attach into megarac_boot_media_attach, re-key its surviving non_fold_residue rows to the moved paths, and make every match this cut added total. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The roster refuses a removed or gained identity, so the retired row of the deleted mtcollins1_bmc_sensor_observation file is carried unchanged rather than re-keyed; the moved module imports filter explicitly and carries no debt. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
Reviewed the current exact head 586806e2b921c03b951bfdf2178dbb2ba55a6dd1. The requested a97a2acbed3 advanced through the main heal (194f1b3) and the append-only debt-roster correction (586806e).
The replacement shape is largely right: the media path derives its controller from the held host; AdmittedMegaRacHost is sealed and operation-tagged; media/chassis effects are caller-confined; SDR naming is a sealed, build-keyed carrier; and the moved production call sites consume binding endpoint/account rather than the deleted unit-local username projection. Four load-bearing gaps remain.
1. The “build gate” consumes a historical observation, not the controller’s current build
admit_megarac_host takes b.observation.identity.firmware from ManagedHostBinding and treats it as the build the live effect is about. Production managed_hosts() still uses mtcollins1_access_standing, whose observation was taken on 2026-09-05 and explicitly reports BMC 0.32. The same physical endpoint was reflashed on 2026-10-02 to 0.45.3.
Nothing in this admission checks observation currency, joins to the post-reflash firmware readback, or invalidates the old access observation after the subject changed. Consequently the live endpoint can still mint an AdmittedMegaRacHost as firmware 0.32 and execute media/KVM/SDR operations against the actual 0.45.3 controller. The supplied 2.11 fixture proves only that an authored 2.11 observation refuses; it does not prove that the observation used in production describes the controller now being driven.
The effect admission needs a current controller-build standing bound to this run/current firmware subject, or it must refuse once a later firmware-set transition is known. Required RED:
historical access observation: 0.32
known current controller after reflash: 0.45.3
→ no MegaRAC operation carrier
→ no request
Until 0.45.3 is qualified, the honest result is build-unverified/refused, not an admitted 0.32 operation on the same network endpoint.
2. Family + raw version is not the executed-build identity the comments claim
The evidence named here is for the Foxconn Mt. Collins MegaRAC implementation at 0.32. But megarac_operation_executed_on compares only BmcFirmwareReleaseIdentity, and that equality is family + raw version. It does not include BmcObservedIdentity.baseboard, product line, or an executed operation/profile receipt.
Any other managed MegaRAC appliance reporting raw version 0.32 would therefore be admitted for the Mt. Collins media wire, KVM bundle behavior, and CPU<n>_ SDR naming, even though none was executed on that product. Refusing mtjade1 at 2.11 does not discriminate this collision.
Key the operation standing to at least the observed baseboard/product plus release, or better to a construction-confined executed-operation profile. Required RED:
non-Mt-Collins baseboard
+ AmiMegaRac
+ raw version 0.32
→ refuse every Mt. Collins-derived operation
3. The KVM effect still has a public raw-parameter bypass around the carrier
megarac_kvm_observer_start checks AdmittedMegaRacHost.operation, but the same module still exports unrestricted effectful helpers:
kvm_observer_launch(dir, base_url, host, username, password_file, ...)
kvm_observer_launch_in(...)
They create the directory and launch the browser/login route from caller-supplied endpoint/account values. Any module can call them without AdmittedMegaRacHost, bypassing the family, build and operation admissions entirely. The forged-carrier probe does not exercise this route, so its claim that endpoint/account/firmware reach a MegaRAC effect only through admit_megarac_host is not true yet.
Confine the production raw launcher to megarac_kvm_observer_start. Protocol tests can use a separately named test-only façade admitted only to their functions. Add a compile RED proving an outside caller cannot reach either effectful launcher with raw host/account values.
4. managed_host_bound_account erases the endpoint/account join it says it preserves
The new general helper returns only NonEmptyStr?. Once the bare account leaves ManagedHostBinding, a caller can pair host A’s account with controller B’s endpoint; the type carries no subject or endpoint with which to refuse that cross-wire. The changed mtcollins1 callers happen to use the mtcollins1 endpoint, but the public helper does not establish the stronger comment that the account is “never paired with another row’s controller.”
Replace this with a label lookup returning ManagedHostBindingStanding, or a sealed carrier that retains host + endpoint + account and is consumed as a unit. Required RED: obtain A’s account standing and attempt to drive B’s endpoint; the effect must refuse before transport.
The unchanged password-materialization frontier is acceptable in this cut, and I found no blocker in leaving the unit-named media record for cut 4d. Exact-head CI is currently queued; the findings above are semantic and independent of it.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Resolve against #13175 (fleet host identities move to gunbc.fleet_host_identity): the deleted mtcollins1_media_attach stays deleted, and every import of operator_host_mtcollins1 this cut added reads its new home. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…egaRAC ops after the 0.45.3 reflash) From the GitHub artifact mtcollins1-boot-receipts (id 11269641952) of fleet-converge run 37102391062, mode mtcollins1_boot, 2026-10-03, about 21h after the BMC reflash to 0.45.3: the receipt (exit=ok), the diagnostics bundle (media attach of the census ISO with its sha256 readback, CD handoff, share-bound readbacks, and the BMC sensor/SDR read taken with the host powered off), the SOL capture (a 1P boot to Linux), and the KVM observer journal, log, features and five stills. Their sha256s match the ones the receipt binds (still-1 649e3a03...). SHA256SUMS lists every file. The run names itself, not the controller build: the build must come from the read-only post-reflash probe (mc info / hpm check). Consumer: untangle cut 3's current-build gate (quick-carp-842). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…sealed KVM launchers, endpoint-bound account - gunbc.megarac_operation_standing: operations grounded at an observed baseboard and firmware from committed evidence; a run receipt joins a build reading only with no recorded firmware transition between them. - gunbc.machine_intake_megarac_operation_evidence: mtcollins1 rows (0.32 intake reading, diskless boot, 32-DIMM SDR read, served-bundle KVM recovery, the 2026-10-02 reflash, and run 37102391062's receipts, which ground no build yet). - admit_megarac_host keyed by the profile (frozen under a declared rung drop); admit_megarac_host_at_current_build in shadow (staging ruling C). - kvm_observer_launch/_launch_in sealed; protocol tests use kvm_observer_protocol_launch. - managed_host_bound_account replaced by managed_host_binding_for and managed_host_account_driving (account only with the bound controller). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ly current-build gate; seal the UI bundle raw-account read Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rung-drop projection Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES at exact head fbaaca2e2b2001546decf820a1aa0be9875b5ba3, against DESIGN.md §§3, 4b and 5. The baseboard+firmware operation standing and executed-versus-served-recovery distinction are substantially improved. I am not re-blocking the explicitly staged current-build cutover merely because the current-build probe remains owed. Two construction paths still defeat the claimed admission wall.
-
gunbc.megarac_managed_host::megarac_grounded_admissionis an unrestricted constructor proxy. It accepts independently suppliedbinding,operation,identityandgrounded: Bool; whengroundedis true it directly constructsAdmittedMegaRacHost. It never uses itsevidenceparameter. An outside caller can obtain a realManagedHostBinding, call this helper withgrounded: true, and receive the production effect carrier without the family, product/build grounding or current-build checks. Sealing the record literal does not close this function. Confine the mint to the actual admission functions (and ensure no admitted wrapper re-exports that authority), or have it derive its decision from bound evidence rather than accepting the authoritative Boolean. Add an outside-caller compiler RED through this helper, not only a forged record literal. -
The shadow admission receives a caller-editable evidence population.
MegaRacOperationEvidenceis an open record of lists, andadmit_megarac_host_at_current_buildis unrestricted. Starting withmtcollins1_megarac_operation_evidence(), an outside caller can retain the genuine 0.32 reading and media/SDR receipts, replacetransitionswith[], and submit the reconstructed evidence.megarac_current_buildthen sees 0.32 as current and the executed join admits it. The individual readings/receipts can all remain sealed: it is omission of the known transition that forges the conclusion. This can mint the same carrier the live effects consume. Production admission needs the canonical complete evidence population, or a sealed population whose producer establishes that completeness. Supplied-population controls can terminate at a pure classifier or be caller-confined so they cannot export a production carrier. Add a RED for dropping the known 2026-10-02 transition from otherwise genuine evidence.
These are source-level authority bypasses independent of the reported green CI and of the declared temporary use of the historical production admission. No live test or controller action was performed by this reviewer.
- megarac_grounded_admission decides from the sealed evidence under a typed requirement and is admitted only to the two admissions. - MegaRacOperationEvidence is sole_constructor; megarac_operation_evidence_of is sealed to the committed rows and named witness fixtures, so genuine evidence cannot be rebuilt without its known 2026-10-02 transition. - Forged probe: outside calls to the mint helper and to the evidence mint, and the dropped-transition literal, are refused. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts: # docs/design-rung-drops.md
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
APPROVE at exact head 04115c70a7b7385086ee57213f689c9b17615dc4, against DESIGN.md §§3, 3c, 4b and 5. Both construction bypasses from review 5408700404 are closed.
-
megarac_grounded_admissionis now the sole constructor ofAdmittedMegaRacHost. It computes grounding fromMegaRacOperationEvidenceunderMegaRacGroundingRequirement; it no longer accepts an authoritative Bool. Its admitted callers are exactlyadmit_megarac_host_observed_inandadmit_megarac_host_at_current_build. Both perform the binding/family checks before calling it, and the shadow entry additionally establishes the current reading and requires executed grounding. The outside-helper compiler probe covers the previously missed path even with a real binding and committed evidence available. -
MegaRacOperationEvidenceis sealed, andmegarac_operation_evidence_ofadmits only the fixed committed producer and four exact witness functions. I checked those functions: each returns Bool and consumes its supplied population internally; none exposes a carrier-returning fixture facade. The committed producer retains the known reflash and takes no caller-supplied population. The new probe attempts both a literal rebuild withtransitions: []and the same omission through the mint, requiring the corresponding blocking diagnostic at each exact subject. The clean-source control uses the real admission entry and requires neither wall class; CensusNotRunnable cannot satisfy it.
The original host/build/operation distinctions remain: a different baseboard/build refuses; the current-build gate refuses the committed historical 0.32 observation beside the known 0.45.3 transition; and served-artifact recovery is not executed-operation evidence. The declared production exception remains open, and the regenerated rung-drop projection retains the full restoration capability for all three operations. This approval does not qualify 0.45.3, retire that drop, switch production to the shadow gate, or authorize a live hardware action.
Reviewed the exact-head admission, evidence producer and mints, all admitted evidence fixtures, compiler probes, the prior review, and the rung-drop declaration/projection. The PR's exact-head Hermetic 28/28 matrix, 24 passing consumer modules, forged 7/7, regeneration checks and mutation results are author-reported execution receipts; I did not run tests, regenerate artifacts or contact a controller. The reported merge-base debt and KVM-wet failures remain explicit unresolved baseline findings, not passing qualification.
GitHub reports exact-head witnesses run 37247390521 completed successfully. No semantic blocker remains on this cut; preserve normal required merge checks and review any subsequently changed head separately.
…tedBootSubject The boot media attach read image name and digest as two parameters beside the subject; it now reads both off subject.medium and refuses a unit hold for another host than the subject's. mtcollins1_bmc_username moves from the deleted unit actuation module into the boot run with cut 3's value unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…merge; no regen) - Generated stage0 mirrors (compiler_tests.rs, v1_compiler_compiler_tests_rust.rs, v1_compiler_emit_rust.rs, v1_compiler_infer.rs, v1_compiler_infer_resolve.rs, v1_tests_claim_generic_identity_census.rs) and docs/design-rung-drops.md: main's copy, to be regenerated. - non_fold_residue.dag: three-way row set. Ours' 646 retirements kept; main's mtcollins1_* -> megarac_* rename of 11 rows applied. - floor_unimported_bare_provider_debt_roster.dag: per-row three-way; no row changed on both sides. - rung_drop/roster.dag: keep ours' deletion (roster derived from the directory); main's two new row files are picked up by that derivation. - mtcollins1_media_attach.dag: take main's deletion (#13261 moved it to megarac_boot_media_attach, which already carries ours' ChassisStatusUndecodable/Unreadable imports). - mtcollins1_boot_run.dag: ours' explicit KvmObserver* variant imports kept, main's megarac_* observer names taken. - Enumerated matches missing main's variants: live_deploy_pre_mutation_access gains LiveDeployServeRoute (installs nothing, full roster); root_members_of_step gains TailnetDoorServeUnit (not a directory root). - Owed with this landing: gunbc.rung_drop.renderer_hop_structural_arm_undiscriminated declares the renderer hop's structural arm undiscriminated since the Bool de-fork (#12583), with a capability-named restoration trigger. No replacement control is authorable: Hash and String answer alike on both arms. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Cut 3 of the managed-host untangle: the boot-critical MegaRAC leaves stop being mtcollins1-named and take a
ManagedHost. Each is admitted only for a controller observed as AMI MegaRAC, on a baseboard and build where the operation is grounded by committed evidence.Head
04115c70a7b(main merged). Stacked on #13273 (eager-gull-22's run-37102391062 receipts): this branch merged its commits, so land #13273 first. Shares the media-attach seam with cut 4a (#13248), which is held behind this PR.What changed
Admission:
gunbc.megarac_managed_host.AdmittedMegaRacHost(sole_constructor) is the only carrier a MegaRAC effect takes. It is minted from one managed host's binding (endpoint, account, firmware) for one operation:MegaRacVirtualMediaAttachMegaRacKvmCanvasStillMegaRacSdrSocketNamingmegarac_grounded_admissionis the only function that constructs the carrier. It decides from the sealed evidence under a typedMegaRacGroundingRequirement, with no supplied verdict. It is admitted only to the two admissions, so a caller holding a real binding cannot step around the family, grounding or current-build checks (review item 1, 2026-10-05).admit_megarac_host(production, FROZEN under a declared rung drop). It grounds the operation at the build the binding's access observation read.admit_megarac_host_at_current_build(SHADOW, staging ruling C). It admits only when the observation is the controller's current build, and only on an executed grounding at that build.Executed-operation profile:
gunbc.megarac_operation_standing, rows ingunbc.machine_intake_megarac_operation_evidence.BmcObservedIdentity), not family + raw version, following O1a'sBmcRotationRouteStanding.MegaRacBuildReading,MegaRacOperationReceipt,MegaRacFirmwareTransition,MegaRacOperationServedArtifactRecovery,MegaRacOperationStanding.MegaRacOperationEvidenceissole_constructor, and its mintmegarac_operation_evidence_ofis admitted only to the committed rows and named witness fixtures. Genuine evidence therefore cannot be rebuilt without its known 2026-10-02 transition to make 0.32 read as current.mtcollins1_evidence_manifest_digest)artifacts/bmc/mtcollins1-diskless-boot.json(sha76340421…), 2026-09-06artifacts/bmc/mtcollins1-32dimm/06-sdr.txt(shadd13ac14…), 2026-09-11gunbc.fleet.mtcollins_firmware_converge credential_effect_of)artifacts/bmc/mtcollins1-boot-run-37102391062/diagnostics (shad76d8743…),kvm/journal(sha357c2410…)OperationRecoveredFromServedArtifact). This is not O1a's cited-source arm, which cites an upstream publication.https://192.168.1.228/source.min.js, the web UI bundle mtcollins1's BMC 0.32 serves to a browser, read 2026-09-27. It is an observation of what the device serves, the same standing asgunbc.machine_intake_megarac_served_ui_catalog_observation. It is not a disassembly and not a proprietary-notice document.5029fae278f7fc8f4dd4ad5eb8e4457e49fa25d4d0158d4bf9fbab09f57d4bf3is recorded, and the row types this asServedArtifactDigestOnly.artifacts/bmc/mtcollins1-megarac-api-surface.txt(sha4fc53fea…, 255 API paths), carries no proprietary notice, and neither do artifacts: mtcollins1 boot run 37102391062 evidence (executed MegaRAC media/KVM/SOL/boot after the 0.45.3 reflash) #13273's files.megarac_operation_executed_atand the current-build gate refuse this arm.CPU0_/CPU1_record answered "No Reading", but the record names are present, which is what socket naming reads. So naming is evidenced, and it still grounds nothing at 0.45.3 until the build probe is committed.Declared rung drop:
gunbc.rung_drop.megarac_operations_admitted_through_a_superseded_build_observation.docs/design-rung-drops.mdis regenerated.Leaves cut over and their mtcollins1 roots deleted:
gunbc.machine_intake_mtcollins1_kvm_still→gunbc.machine_intake_megarac_kvm_still.megarac_kvm_observer_start(host: AdmittedMegaRacHost, …)refuses a carrier admitted for another operation.kvm_observer_launch/kvm_observer_launch_inare sealed. The protocol witnesses use the test-onlykvm_observer_protocol_launch, admitted to those two witness functions.gunbc.machine_intake_mtcollins1_media_attach→gunbc.machine_intake_megarac_boot_media_attach. Every entry admits the unit-hold proof's own host, so endpoint, account and firmware come from one binding.gunbc.machine_intake_mtcollins1_bmc_sensor_observation→gunbc.machine_intake_megarac_sensor_observation. TheCPU<n>_prefix is read only through a sealedMegaRacSdrSocketNamingRule, minted for an admitted host. The boot's SDR read admits before it reads.mtcollins1_secured_accountand the interimmanaged_host_bound_accountare deleted.gunbc.managed_host managed_host_binding_for(host)returns the wholeManagedHostBindingStanding.managed_host_account_driving(lookup, endpoint)releases the account only to a caller driving the controller the binding observed.mtcollins1_ui_bundle_observe_with(cut 5). It is now sealed to its own_wet.Cut-4d modules change only at their call sites, plus moved byte-identical rows:
mtcollins1_kvm_observer_dirmoved to the boot bundle.mtcollins1_media_shareandmtcollins1_boot_ipmi_read_boundmoved to the boot run.Credential frontier (unchanged)
mtcollins1_managed_secret_fetch_frontieris left exactly as it was. Materializing the password needs an access token in the boot job, which is a workflow change, and the plan assigns removing the caller-supplied password path to cut O2.Fleet-converge surface
No mode, job, input, step id or env var changed. The generated
.github/workflows/fleet-converge.ymlregenerates byte-identical at04115c70a7b.Terminal receipt (all at
04115c70a7b)Binary:
gunbc/claim_batchbuilt bycargo build --releaseon BuildBuddy from a checkout asserted at the pin. Runs are serial, inside a 20 GiB memory cgroup.Boot acceptance matrix:
claim_batch --claim-run --hermetic --functions <all 28>, 28/28, RC 0.fleet-converge.ymlanddocs/design-rung-drops.mdboth regenerate byte-identical at this head.(1) Consumer roster (plan census method;
gunbc run --claim-run, as pass/fail):0360849c51b:standing_refuses_stale_debt_and_an_unrostered_pair, a pure fixture claim this PR does not reach; FAIL text carries no cause, so it is recorded as pre-existing, not diagnosedkvm_observer_protocol_launch(2) Same-path REDs. Throwaway ref
cut3-red-probeatce5fd381ae1= this head plus one mutation commit (never to merge). The other 39 claims stayed green.w_a_controller_observed_as_openbmc_is_refused_for_every_megarac_operationw_a_megarac_build_no_operation_was_executed_on_is_refused…,w_another_baseboard_at_the_same_megarac_build_is_refused…w_a_historical_observation_beside_a_known_later_build_mints_no_carrier,w_the_committed_mtcollins1_evidence_is_refused_by_the_shadow_gate_as_not_currentw_a_receipt_across_a_reflash_grounds_no_build,w_the_committed_rows_ground_0_32_by_route_and_nothing_at_0_45_3w_a_route_recovered_from_a_served_artifact_is_grounded_but_not_executedsole_constructoroffAdmittedMegaRacHosteach_forged_megarac_carrier_is_refused_at_its_literala_carrier_admitted_for_virtual_media_does_not_start_the_viewera_host_admitted_for_virtual_media_mints_no_socket_namingw_an_account_is_released_only_with_the_controller_it_was_bound_toadmit_callersoffmegarac_grounded_admissionthe_carrier_mint_helper_refuses_an_outside_callersole_constructorand the mint seal offMegaRacOperationEvidencea_population_rebuilt_without_its_known_transition_is_refused(
w_a_current_read_build_with_executed_evidence_is_admitted_by_the_shadow_gatealso reddens: the grounding mutation admits KVM, which its control requires to refuse.)Compile walls: the forged probe refuses literals of
AdmittedMegaRacHost,MegaRacSdrSocketNamingRule,MegaRacOperationStanding,MegaRacBuildReading,MegaRacOperationReceiptandMegaRacOperationEvidence. The last of these covers genuine evidence rebuilt withtransitions: []. It also refuses outside calls to:megarac_grounded_admission, with a real binding and the committed evidence;megarac_operation_evidence_of;(3) Corpus sweep.
git grepoverdag,src,.githubandartifactsfinds no hits for:mtcollins1_kvm_still,mtcollins1_media_attach,mtcollins1_bmc_sensor_observation;mtcollins1_secured_account,managed_host_bound_account,mtcollins1_bmc_firmware;Remaining hits:
mtcollins1_media_attach_observed_atis a separate memory-census receipt.artifacts/bmc/mtcollins1-*are receipts.Entry-path rows:
gunbc.non_fold_residue: re-keyed to the moved paths, merged against closed matches are total: drain 82 mint-era roster rows, total 22 unseen wildcard sites #12990's totality drain.v2.workflow.floor_unimported_bare_provider_debt_roster: the roster is append-only. The deleted sensor file's row is carried with causeFileDeleted, as the floor requires, and the moved module importsfilterexplicitly and carries no debt.gunbc.ci_spec: no moved path, import only.(4) No aliases. No re-export, wrapper or one-line forward through a deleted root. Unit-named rows left in 4a/4d/5 modules are unit facts passed as parameters.
Declared frontiers
MtCollins1MediaAttachRecordstays in the cut-4d bundle.BmcAnomalytypes are imported frommtcollins1_power_on_account(type-only).managed_host_unit_holdadmit_callers stay for cut 5.Not authorized to merge; reporting to warm-crane-577.
🤖 Generated with Claude Code