Origen: triage M0 de Charter-02 (2026-07-04); registrado como FU-016 en el backlog de follow-ups. Confirmado independientemente por dos análisis (informes new-guide/02 y triage M0 grupo sync).
Problema
El daemon carga el access token una sola vez al arrancar — GraphClient::new(&tokens.access_token) en lnxdrive-daemon/src/main.rs:232 — y nunca lo refresca:
AuthenticateUseCase::refresh_if_needed existe (lnxdrive-core/src/usecases/authenticate.rs:201-252) pero nadie lo llama (única aparición = su definición).
- El
sync_loop (main.rs:324-420) no maneja 401 ni refresca; GraphClient::set_access_token (client.rs:161) existe y no se usa en runtime.
- Piezas disponibles sin cablear:
PKCEFlow::refresh_token (auth.rs:253-280) y refresh_via_goa (auth.rs:534-567).
Efecto: cuando el access token expira (~1h), el daemon falla en bucle hasta reiniciarlo. Incompatible con la capacidad M5 ("daemon 24h+ con sesión activa").
Alcance del fix (M5)
- Cablear
refresh_if_needed (o equivalente) en el loop del daemon: refresh proactivo antes de expirar + reactivo ante 401.
set_access_token sobre el GraphClient vivo tras cada refresh; persistir tokens renovados en el keyring.
- Ruta GOA: delegar el refresh vía
refresh_via_goa cuando la cuenta provenga de GOA (decisión D2 / AIDEC-2026-07-04-001).
No confundir con el delta token de Graph (#14, ya resuelto: 410 Gone → full resync).
Origen: triage M0 de Charter-02 (2026-07-04); registrado como FU-016 en el backlog de follow-ups. Confirmado independientemente por dos análisis (informes
new-guide/02y triage M0 grupo sync).Problema
El daemon carga el access token una sola vez al arrancar —
GraphClient::new(&tokens.access_token)enlnxdrive-daemon/src/main.rs:232— y nunca lo refresca:AuthenticateUseCase::refresh_if_neededexiste (lnxdrive-core/src/usecases/authenticate.rs:201-252) pero nadie lo llama (única aparición = su definición).sync_loop(main.rs:324-420) no maneja 401 ni refresca;GraphClient::set_access_token(client.rs:161) existe y no se usa en runtime.PKCEFlow::refresh_token(auth.rs:253-280) yrefresh_via_goa(auth.rs:534-567).Efecto: cuando el access token expira (~1h), el daemon falla en bucle hasta reiniciarlo. Incompatible con la capacidad M5 ("daemon 24h+ con sesión activa").
Alcance del fix (M5)
refresh_if_needed(o equivalente) en el loop del daemon: refresh proactivo antes de expirar + reactivo ante 401.set_access_tokensobre elGraphClientvivo tras cada refresh; persistir tokens renovados en el keyring.refresh_via_goacuando la cuenta provenga de GOA (decisión D2 / AIDEC-2026-07-04-001).No confundir con el delta token de Graph (#14, ya resuelto:
410 Gone → full resync).