Skip to content

Daemon never refreshes the OAuth access token at runtime (session dies after ~1h) #66

Description

@montfort

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)

  1. Cablear refresh_if_needed (o equivalente) en el loop del daemon: refresh proactivo antes de expirar + reactivo ante 401.
  2. set_access_token sobre el GraphClient vivo tras cada refresh; persistir tokens renovados en el keyring.
  3. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    authAuthentication / authorization / OAuthbugSomething isn't workingpriority/P1High: should be addressed before the following release

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions