fix(web): treat only 2xx as a successful display save

Review feedback on #422.

- showDisplaySaveResult tested `xhr.status >= 400` for failure, so a
  network error — which reports status 0 — was waved through as
  "Display settings saved". That's the same class of false-success bug
  this branch set out to fix. Test the 2xx range instead, and let a
  response body refine a successful verdict without overturning a
  failed one.
- Annotate the _copies_fits_hardware helper, matching the annotated
  helpers already in api_v3.py.
- Cover the vertical divisibility branch: chain_length 2 would divide
  evenly, so only parallel 3 can produce the rejection, which pins the
  branch to the right hardware dimension.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016aUvzTXpEYhNEWYQvFqQU9
This commit is contained in:
Claude
2026-07-28 20:23:35 +00:00
parent b7f5f8483a
commit b67f9e4a2a
3 changed files with 32 additions and 5 deletions
+2 -2
View File
@@ -13,7 +13,7 @@ import uuid
import logging
from datetime import datetime
from pathlib import Path
from typing import Dict, Any
from typing import Dict, Any, Optional
from urllib.parse import urlparse, urlunparse
logger = logging.getLogger(__name__)
@@ -871,7 +871,7 @@ def save_main_config():
enabled = _coerce_to_bool(data.get('double_sided_enabled'))
ds_config['enabled'] = enabled
def _copies_fits_hardware(copies):
def _copies_fits_hardware(copies: int) -> Optional[str]:
"""Error message if copies doesn't divide the panel evenly, else None."""
# Use axis from this request if provided, else from stored config.
hw = current_config.get('display', {}).get('hardware', {})