You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Logs page recovery-kind union is restated, so four durable kinds have no label #5292
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.
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.
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.
Activity
docs(devlog): record lane R3 and correct the stale #5292 row
docs(devlog): record lane R3 and correct the stale #5292 row
Ingwannu commentedon Sep 20, 2026
Confirmed against current
dev(600075d23e90f58636a9c12ed4431ea5fad30b7a).src/usage/log.tsdefines the durable 13-memberAttemptRecoveryKind, whilegui/src/pages/Logs.tsxindependently 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.
docs(devlog): record lane R3 and correct the stale #5292 row
docs(devlog): record lane R3 and correct the stale #5292 row
docs(devlog): record lane R3 and correct the stale #5292 row
docs(devlog): record lane R3 and correct the stale #5292 row
fix: make a failed browser launch and a failed account refresh visible (
lidge-jun commentedon Sep 23, 2026
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.tsxno longer restates the union. It importsAttemptRecoveryKindfrom the durable roster insrc/usage/telemetry-contract.ts, andRECOVERY_KIND_KEYSis declaredsatisfies Record<AttemptRecoveryKind, string>, so adding a new recovery kind fails typecheck until it has a label. Labels forkey-401,oauth-account-429,opaque-blob-rejectionandreasoning-effort-downgradeexist in all ten shipped locale catalogs. The Logs dialog screenshot requirement was resolved with thegui-screenshot-waivedlabel on #5300. Thanks @Ingwannu for the confirmation.