e54484e553
Daemon stdio (fd 0/1/2) is inherited from bootstrap pointing at /scheme/debug — the kernel console — which fbcond renders onto the *active* VT. Once 29_activate_console switches the active VT to 2 for the getty login, any daemon that logs afterwards paints on top of the login banner/prompt: late async driver attach (i2c-hidd, evdevd, dw-acpi-i2cd, all via common::setup_logging -> stderr) and smolnetd's bounded NIC wait. So the banner ended up "near the end" but never last. Re-enable switch_stdio, redirecting daemon stdio to a fixed boot-log VT (/scheme/fbcon/1) right after the /usr switchroot, before the /usr units run. VT1 is the active console during boot (so the full boot stays visible there), fbcond still mirrors it to serial, and VT2 is left clean for a prompt that lands last. This is NOT the old /scheme/log redirect that went dark: that relied on fbbootlogd surfacing /scheme/log to the framebuffer (racy). A real VT renders directly. Best-effort: if fbcon/1 can't be opened, stdio stays on the kernel console exactly as before. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>