Skip to content

Logs page recovery-kind union is restated, so four durable kinds have no label #5292

Closed

Description

@lidge-jun

Client or integration

Dashboard

Area

GUI

Summary

gui/src/pages/Logs.tsx declares its own AttemptRecoveryKind union with nine members, while the durable recovery roster has thirteen. Four kinds therefore reach the Logs page with no localized label: key-401, oauth-account-429, opaque-blob-rejection and reasoning-effort-downgrade.

This was found while mapping the shared stage and cause substrate that landed as #5266 (043aa435ff8f86095f55cbe08f74d45b9858da59). It is the restated-union class AGENTS.md warns about: because the GUI union is hand-maintained rather than derived from the roster it describes, a member added on the durable side compiles cleanly on both branches and silently stops being displayed.

The fix is to derive the GUI union from the durable roster instead of restating it, so that adding a recovery kind is a typecheck failure in the GUI until it has a label. It needs new strings across the locale catalogs and a screenshot of the changed dialog, which is why it is filed rather than folded into that branch.

Reproduction

Produce an attempt whose recovery kind is one of key-401, oauth-account-429, opaque-blob-rejection or reasoning-effort-downgrade, then open the Logs page and inspect the attempt row. The recovery kind has no localized label, unlike the nine kinds the page declares.

Version

2.61.0-dev (dev at 043aa435ff8f86095f55cbe08f74d45b9858da59)

Operating system

Any

Provider and model

Any

Logs or error output

Screenshots and supporting files

None.

Redacted configuration

Checks

  • I searched existing issues and documentation.
  • I removed secrets, tokens, account details, request credentials, and personal data.

Activity

  1. added
    bugSomething isn't working
    guiDashboard, tray, settings UI
    on Sep 20, 2026
  2. Ingwannu commented on Sep 20, 2026

    @Ingwannu
    Owner

    Confirmed against current dev (600075d23e90f58636a9c12ed4431ea5fad30b7a). src/usage/log.ts defines the durable 13-member AttemptRecoveryKind, while gui/src/pages/Logs.tsx independently restates only nine members. The four named values therefore pass through the management payload but miss the localized lookup and fall back to raw IDs.

    The issue is valid. The fix should import or generate the GUI-facing type from the durable contract instead of adding four more members to another handwritten union, then require an exhaustive label map so a future durable member fails typecheck until every shipped locale is updated. Add focused rendering coverage for all 13 values and include the repository-required Logs dialog screenshot (or an owner UI-evidence waiver) before merge.

  3. lidge-jun commented on Sep 23, 2026

    @lidge-jun
    OwnerAuthor

    Closing as completed. Fixed by #5300, merged as 555f0ca and included in the stable v2.61.0 and v2.63.0 releases.

    Verified at v2.63.0: gui/src/pages/Logs.tsx no longer restates the union. It imports AttemptRecoveryKind from the durable roster in src/usage/telemetry-contract.ts, and RECOVERY_KIND_KEYS is declared satisfies Record<AttemptRecoveryKind, string>, so adding a new recovery kind fails typecheck until it has a label. Labels for key-401, oauth-account-429, opaque-blob-rejection and reasoning-effort-downgrade exist in all ten shipped locale catalogs. The Logs dialog screenshot requirement was resolved with the gui-screenshot-waived label on #5300. Thanks @Ingwannu for the confirmation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    account-poolOAuth, credentials, Codex pool, quota, failover, plansbugSomething isn't workingguiDashboard, tray, settings UI

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions