# LA StressLab 1.1.48 — 2026-07-22

## Resumo
Corte de **falso FAIL GPU**, inventário mais honesto (SMART SATA / USB / bateria / GPU idle) e **Telegram que sobrevive ao update OTA**.

## Correções

### P0 — Veredito GPU / Completo
- `graphics_warn` / `graphics_skip` passam a ser **soft** (não matam o teste, não viram FAIL)
- Matcher de incompleto GPU unificado (`error_match` ↔ `gpu_verdict`)
- Soft incomplete → **INCONCLUSIVO**, nunca FAIL
- Finish do Completo não sobrescreve INCONCLUSIVO com `hard[]` só de avisos soft
- Solo GPU após MATS limpo: **não inventa TDR** sem evento Windows

### Telegram — pairing após update
- Update **não apaga** o Relatório Remoto do cliente
- `dump_delivery.json` de fábrica não sobrescreve `results` / `chat_id`
- Apply OTA faz merge só do bot ADM; preserva pairing
- Restaura `telegram.json` do AppData → USB se sumir
- Salvar na UI não limpa chat por acidente

### Inventário (dump Lenovo 81JN)
- SMART **SATA**: attrs 5 / 196 / 197 / 198 / 187; métricas NVMe ocultas em ATA
- Pendrive USB: **não inventa saúde 100%**
- Autonomia da bateria: **Wh / taxa** (ignora Runtime absurdo do Windows)
- KPI GPU idle: temp/clock/load AMD via LHM (`gpu_sensors` + fallback WMI)
- Aviso **módulos RAM mistos**
- Aviso **teste iniciado na bateria**

## Arquivos principais
`app.py` · `error_match.py` · `gpu_verdict.py` · `completo_stages.py` · `run_verdict.py` · `storage.py` · `test_views.py` · `battery`/`sensor_bridge` · `dump_delivery.py` · `update_apply.ps1` · `update_check.py` · `app_config.py` · SensorHelper

## Testes
- `tools/test_p0_verdict.py` — 9 OK
- `tools/test_telegram_survive_update.py` — 3 OK

## Notes (latest.json)
```
1.1.48 — GPU soft/INCONCLUSIVO (sem falso FAIL); Telegram sobrevive ao update; SMART SATA + USB sem saúde inventada; autonomia bateria e GPU AMD idle
```
