Skip to content

Wayland headless-boot recovery logs a successful self-heal at ERROR, filing a Sentry issue per recovery #3265

Description

@vpetersson-bot

Summary

PR #3240's Wayland headless-boot recovery logs its successful self-heal at ERROR, so every recovery files a Sentry error issue. The recovery is working as designed; the log level is what is wrong.

Sentry: ANTHIAS-4M — "Cage has had no wl_output for 75s while a display is connected (headless-boot wedge). Exiting so the container restarts and re-enumerates the display (recovery restart 1/N)."

Notable: this is the only issue in the project seen on the current release 2026.8.0+f5ff6fd. Volume is 1 event so far (a pi5 on balena), but it will grow in step with however often the wedge occurs across the fleet.

Detail

In src/anthias_viewer/__init__.py the recovery path does:

logger.error(
    'Cage has had no wl_output for %.0fs while a display is '
    '(headless-boot wedge). Exiting so the container restarts and '
    're-enumerates the display (recovery restart %d/%d).', ...
)
sys.exit(1)

The Sentry logging integration promotes ERROR-level records to events, so a successful automatic recovery is indistinguishable in Sentry from a genuine failure.

Proposed change

  • Demote the recovery-restart message to warning. It is expected, self-healing behaviour.
  • Keep the give-up-after-cap message ("not restarting further, to avoid a loop") at error — that is the point where recovery has failed and a human is genuinely needed.

That keeps the actionable signal and drops the noise, matching the approach already taken for other known-benign sources (PR #3182's before_send drop for client-disconnect static noise, and the logger silencing for DisallowedHost / transient-redis chatter).

Worth keeping in mind

This issue is also the only field evidence that the headless-boot wedge still happens on 2026.08.0 — the fix catches it rather than preventing it. If the goal is to stop the wedge occurring at all, that is separate work and should not be folded into a log-level change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions