randomparity / randomparity/kdive

Decide whether teardown takes a second Host Interface observation

Open
#1,895 0 comments 0 reactions 0 assignees View on GitHub
area:providers area:security effort:S priority:P3 provider:baremetal-bmc risk:daytime-only status:blocked type:spec
Dominant language
Python
Stars
0
Forks
0
Avg merge
1h 26m
Merged PRs (30d)
311

Description

Follow-up from #1847 / PR #1890. Raised in adversarial review of ADR-0547.

## Problem

ADR-0547 justifies recording the Host Interface posture in `systems.byo_adopt_facts` on its value
**at incident time**: a vmcore accompanied by an unexplained power event, or a host that returns
with different firmware, needs to know whether the unauthenticated host-OS→BMC path existed.

The design takes only **one** datapoint, at adopt. Nothing observes the posture again after the
run. So the recorded fact answers "was the path open when we took the machine?" and cannot answer
"did it change while we had it?" — and a kernel reaching its own BMC is exactly the actor that
could change it. The stated incident-time value is therefore partly unbacked by the design that
claims it.

This is **not** the comparison ADR-0547 rejects. That record declines to make the posture a
*compared* fact at teardown, correctly: a changed Host Interface state does not by itself mean the
ADR-0541 restore failed, and turning it into a restore-verification input would put a host into
`restore_incomplete` and a cordon over a difference that is not a restore defect. A second
**uncompared** observation is a different thing — it is a datapoint an incident can read, with no
control flow hanging off it.

## Evidence

- `docs/adr/0547-host-interface-in-band-bmc-path.md` — Decision, question 3: the incident-time
justification, and the sentence rejecting comparison.
- `docs/design/m4-byo-host.md` — the M4 migration claims `systems.byo_adopt_facts jsonb` (entry 2,
`0112_resources_kind_byo_host.sql`); #1823 owns the adopt-time write.
- ADR-0541's teardown step 3 is already a third caller of the shared precondition module and
already re-reaches the host out-of-band after the power-cycle, so a second read has an existing
place to sit and needs no new OOB call site.

## Expected outcome

Decide, and implement or record the refusal:

- Whether teardown takes a second Host Interface observation and writes it beside the adopt one
(e.g. an `at_teardown` key rather than overwriting `at_adopt`), so a difference is *visible* to
an operator reading the System.
- Explicitly **no** control flow on the difference: it must not feed restore verification, must not
set `restore_incomplete`, and must not cordon. If the two disagree, the record says so and
nothing else happens.
- If a teardown that never runs (a dead worker, a cordoned host) leaves only the adopt datapoint,
that is the expected degraded case and should be readable as "no post-run observation", not as
"unchanged".
- If the answer is no, an amendment to ADR-0547 qualifying the incident-time claim to what one
datapoint actually supports.

The adopt-time write lands in #1823; teardown in #1830.

Blocked by #1823
Blocked by #1830

Contributor guide

Open the contributing guide

Research direction

Read docs/adr/0547-host-interface-in-band-bmc-path.md and docs/design/m4-byo-host.md, then review the adopt-time and teardown work in #1823 and #1830. Decide whether teardown records an uncompared second observation or whether ADR-0547 must be amended; done means the decision is recorded and any implementation preserves the stated no-control-flow behavior.

Written by the indexing model from the issue text.

Assessment

Domain
backend, documentation
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.