Skip to content

fix(web): use a circle alert glyph for failed tool calls - #216

Closed
rynfar wants to merge 1 commit into
pylonfrom
upstream/2026-08-31-failed-tool-icon
Closed

fix(web): use a circle alert glyph for failed tool calls#216
rynfar wants to merge 1 commit into
pylonfrom
upstream/2026-08-31-failed-tool-icon

Conversation

@rynfar

@rynfar rynfar commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

A failed tool call in a live activity row rendered an x glyph. That reads as
"cancelled" rather than "failed", and it sits oddly beside the circle-alert
glyph Pylon already uses for runtime warnings a few rows away.

Swaps the live activity row's failure glyph to circle-alert.

Manual port of upstream pingdotgg/t3code#8840 (8b817cbca) — the commit
conflicts against Pylon's diverged MessagesTimeline.tsx.

One upstream hunk is deliberately not taken. Upstream also added
showFailedIndicator to PlainWorkEntryRow's icon selection. Pylon decoupled
ordinary tool failures from failure glyphs in 4ae51664a ("stop showing red x
summaries for ordinary tool failures"), which reserves alert treatment for severe
failures so a routine lint failure does not look like a broken turn. Applying that
hunk would regress the decision, so only the live activity row changes.

The scoping is confirmed by the tests: only the live-activity assertion needed
updating; the lucide-x assertion covering Pylon's severe-failure path still
passes untouched.

Verified: vp test run --dir apps/web apps/web/src/components/chat/MessagesTimeline.test.tsx
(44 passed), vp run -F @t3tools/web typecheck (exit 0, no errors), vp fmt --check clean.

Reviewed and integrated with Claude Opus 5 in Claude Code.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

A failed tool call in a live activity row rendered an x glyph, which reads as
"cancelled" rather than "failed" and sits oddly next to the circle-alert glyph
Pylon already uses for runtime warnings.

Manual port of pingdotgg/t3code#8840 (8b817cbca). Upstream also added the failed
indicator to PlainWorkEntryRow's icon; that hunk is deliberately not taken.
Pylon decoupled ordinary tool failures from failure glyphs in 4ae5166, which
reserves alert treatment for severe failures, so applying upstream's second hunk
would regress that decision. Only the live activity row changes here.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS labels Aug 31, 2026
@github-actions

Copy link
Copy Markdown

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 13.6 KiB 13.6 KiB 0 B (0.0%) 15.1 KiB
Codex Thread snapshot wire 6.9 KiB 6.9 KiB −4 B (−0.1%) 7.3 KiB
Codex Live turn WebSocket wire 6.6 KiB 6.6 KiB +4 B (+0.1%) 7.8 KiB
Codex Live turn WebSocket decoded 57.2 KiB 57.2 KiB 0 B (0.0%) 66.4 KiB
Codex Live turn messages 10 10 0 (0.0%) 21
Claude Total thread wire 13.6 KiB 13.6 KiB +21 B (+0.2%) 15.1 KiB
Claude Thread snapshot wire 6.9 KiB 6.9 KiB +4 B (+0.1%) 7.3 KiB
Claude Live turn WebSocket wire 6.6 KiB 6.6 KiB +17 B (+0.3%) 7.8 KiB
Claude Live turn WebSocket decoded 58.1 KiB 58.1 KiB 0 B (0.0%) 66.4 KiB
Claude Live turn messages 10 10 0 (0.0%) 21

Baseline: 9ade80d · PR result: 25aed2c · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 109.5 KiB
  • Claude decoded thread snapshot: 110.2 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@rynfar

rynfar commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

Closing this — adversarial review showed the change is wrong on its own terms, and the right outcome is to skip #8840 rather than patch it.

The glyph is gated on workEntryDisplayIndicatesToolFailure, which is also true for declined (apps/web/src/session-logic.ts:280). A user-denied tool approval, and a skipped context compaction — ProviderRuntimeIngestion.ts:1370 maps declined to the summary "Context compaction skipped" — both land here. For those rows x is the accurate glyph. The rationale I gave in the PR body, that "x reads as cancelled rather than failed", inverts precisely for the cases that actually were cancelled.

And circle-alert is Pylon's severe-condition glyph, used for tone === "error" and runtime.warning. Painting ordinary failed tool calls with it in the live region erases the distinction 4ae51664a ("stop showing red x summaries for ordinary tool failures") deliberately established — which is the same regression I cited as my reason for not taking upstream's PlainWorkEntryRow hunk. I avoided it on one row and reintroduced it on another.

#8840 is a cosmetic upstream preference that conflicts with a deliberate Pylon decision. Recording it as skipped in the upstream review ledger rather than adopted.

Branch deleted; nothing else depends on it.

@rynfar rynfar closed this Aug 31, 2026
@rynfar
rynfar deleted the upstream/2026-08-31-failed-tool-icon branch August 31, 2026 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant