Claude Sonnet Council

SONNET Claude Sonnet 4.6 Anthropic

Judge 1: CLI UX JUDGE

  • [HIGH] casectl top is completely absent from the CLI reference page and Getting Started. It exists in main.py at line 592 with --interval/--once options, interactive keys (m/+/-/q), and terminal size checking – all undocumented.

  • [HIGH] green and lime are both mapped to (0, 255, 0) in _COLOR_NAMES. Identical colours with different names. The error message lists all 16 names including this duplicate.

  • [MEDIUM] config set requires raw integers (casectl config set fan mode 0) while fan mode accepts names (casectl fan mode follow-temp). The asymmetry is a discoverability trap. No warning is issued.

  • [MEDIUM] casectl top --interval 0 is silently clamped rather than rejected. The help text says (0.5-60) which looks like a hint rather than a constraint.

  • [LOW] fan speed outputs raw hardware duty (0-255) in its confirmation message after the user supplied a 0-100 percentage.

  • [LOW] Help text on led color shows casectl led color #FF0080 without quoting. On bash/zsh, # begins a comment. The site docs correctly quote it, but --help output does not.


Judge 2: WEB DASHBOARD REVIEWER

  • [HIGH] The OLED rotation dropdown has no hx-* attributes. If WebSocket is unavailable and HTMX fallback fires, rotation changes are silently lost. The HTMX fallback in ws-controls.js works, but the HTML element itself is not fallback-safe.

  • [HIGH] The OLED preview shows hardcoded static content: 12:34:56 and CPU: --.-deg.C. This is mockup data, not live temperature. Users cannot tell it doesn’t reflect actual values.

  • [MEDIUM] Fan “All fans” slider and per-channel sliders can desync visually. The unified slider updates per-channel values but not the reverse.

  • [MEDIUM] base.html footer hardcodes "Freenove FNK0107B case controller". FNK0107B is one specific model; the hardware matrix covers A through L.

  • [MEDIUM] SSE connection in realtime.js has no visible UI indicator. Users on intermittent networks won’t know if live updates are flowing.

  • [LOW] All four dashboard cards show “Live” badge unconditionally, even when WebSocket is disconnected and SSE has failed.

  • [LOW] Google Fonts loaded from CDN. On isolated LAN setups, fonts will fail silently. A headless-first product should handle offline.


Judge 3: ERROR MESSAGE CRITIC

  • [HIGH] All connection-error handlers print "Cannot connect to casectl daemon." without showing which host was attempted. If --host is set wrong, the message gives no hint.

  • [HIGH] For a 401 Unauthorized, users see raw status code with no hint they need a token. For 422, they see raw FastAPI validation JSON which is not human-friendly.

  • [MEDIUM] The doctor command I2C probe failures say "Check expansion board connection" without suggesting i2cdetect -y 1, which the troubleshooting section recommends.

  • [MEDIUM] led color validation for wrong argument count is helpful but the inline list of all 16 names wraps messily in narrow terminals.

  • [LOW] config set shows coerced Python value (True for true). No error shown for invalid section/key – that comes as raw JSON from the 422 response.


Judge 4: ONBOARDING EXPERIENCE JUDGE

  • [HIGH] casectl top – the most visually engaging v0.2 feature – appears nowhere in Getting Started, CLI reference, or architecture page.

  • [HIGH] API reference shows POST for all mutation endpoints, but CLI and web dashboard both use PUT. Developers copying curl examples get 405 Method Not Allowed.

  • [HIGH] Architecture diagram shows TUI as "TUI (soon)". casectl top shipped in v0.2. The diagram actively misinforms new users.

  • [MEDIUM] Getting Started doesn’t guide users to casectl service install for autostart. The happy path ends abruptly at “Basic CLI”.

  • [MEDIUM] Getting Started shows casectl config set fan mode 0 with comment about integer enums, right after demonstrating casectl fan mode follow-temp. The inconsistency is unexplained.


Judge 5: ACCESSIBILITY JUDGE

  • [HIGH] green and lime LED swatches display the same colour (#00FF00) with different labels. Creates a false choice that misleads all users – sighted, colour-blind, and screen-reader alike.

  • [HIGH] The white swatch on a dark card background may need a visible border to distinguish it from surrounding UI. The navy swatch is very dark and hard to distinguish from the off/dark card areas.

  • [MEDIUM] Status dot uses colour alone to convey system health (green/amber/red). The blinking animation on error is suppressed by prefers-reduced-motion, leaving no non-colour distinguisher for colour-blind users.

  • [MEDIUM] HTMX’s hx-swap="innerHTML" partial replacements do not manage focus. After a partial refresh, interactive controls lose focus state, potentially interrupting screen reader or keyboard users.

  • [LOW] OLED preview is a purely visual mockup with aria-label="OLED display preview" but contains static fake data. A screen reader will read it as if it’s live state.


Consolidated Report

Critical Issues (must fix)

  1. API docs use POST; code uses PUT. Every mutation curl example will return 405.
  2. casectl top is undocumented everywhere on the site.
  3. Architecture diagram marks TUI as “soon” after it shipped.
  4. pyproject.toml version is still 0.1.0.

Important Issues (should fix)

  1. green and lime are the same colour (0, 255, 0) – should differentiate
  2. MQTT, automation, and alerting plugins not documented
  3. Hex colour in CLI --help is unquoted (breaks on bash)
  4. Connection error messages omit the URL attempted
  5. OLED preview shows hardcoded static content
  6. Getting Started doesn’t guide to casectl service install

Positive Observations

  • CLI has genuinely excellent error messages in casectl doctor – actionable fix commands embedded in failure output
  • casectl top has well-thought-out defensive checks: TTY detection, terminal size validation, interval clamping, --once escape hatch
  • Web dashboard accessibility fundamentals are solid: skip link, ARIA progress bars, form labels, status dot aria-label, live regions, aria-current
  • Dual SSE + HTMX polling architecture with exponential backoff is well-engineered
  • Named colour support has full CLI-to-web parity across all three input methods