Diagnostic popover — height follows content

Behaviour mock for ProjectDiagnosticPopover. Left column is what ships today (.frame(width:360, height:320), fixed on both axes, at ProjectRow.swift:423 and ProjectSidebarOutline.swift:1829). Right column is the target: width still nailed at 360, height = content, 320 becomes a ceiling, and the scroller appears only when the ceiling is actually reached. Content is real — the fixture scenarios in DiagnosticFixture.swift plus the two screenshots that started this. Approximation, not pixel truth: SF at native point sizes so wrapping is fair.


The ladder — thin to fat

Every case is drawn twice with identical content. The dashed line is the 320 ceiling.

Edge cases

The places where a naive “just size to content” would misbehave.

Anti-patterns — what a wrong build looks like

Approximation, not pixel truth. Native point sizes and SF so wrapping is a fair preview; the file column truncates at the end here, natively it truncates in the middle (.truncationMode(.middle)). Glyphs stand in for exclamationmark.triangle.fill / xmark.circle.fill at their MessageKind tints — nothing settled is changed. The reason column renders cause.message, which is English on the wire by design (bristlenose/refusals.py); the German toggle therefore moves the chrome only, which is itself worth seeing.