[META] cct TUI render-anomaly defect cluster (omission + duplication + corruption families)
Why this meta-issue exists
This issue consolidates the cluster of cct TUI render-anomaly defects accumulated since 2026-05-23. Six cluster members across three surface-failure families (omission, duplication, corruption) share a unifying upstream class — parsing-vs-structure fragility in cct TUI rendering, combined with alternate-screen-buffer state preservation across resumes. Filing one issue per defect makes triage harder than it needs to be; this meta-issue is the canonical entry point a maintainer can hit and see the cluster shape as a unit.
The cluster has not received maintainer engagement on individual issues over the nine days since #64007 and #64567 were filed; surfacing the architectural through-line at meta altitude is intended to help engineering triage prioritize against the cluster as a whole rather than evaluating each child in isolation. It also exists to give a single canonical reference point for the github-actions[bot] duplicate detector, which has been flagging cluster members as duplicates of each other based on shared cluster-context vocabulary (which is feature, not bug — the cluster context IS load-bearing).
Cluster members
All filed at anthropics/claude-code by the same reporter. All are cct TUI live-render-path defects producing output that diverges from the clean .jsonl source-of-truth.
| Issue | Family | Trigger | Filed | Status |
|---|---|---|---|---|
| #64007 | Omission | Turn-transition render-omission | 2026-05-30 | OPEN |
| #64567 | Duplication | Bash permission-gate render-duplication | 2026-06-01 | OPEN |
| #67252 | Corruption | Character-level text garbling with cold-boot persistence via terminal-emulator session-restore | 2026-06-10 | OPEN |
| #67253 | Duplication | Multi-paragraph live-render-duplication with progressive contraction across resume cycles | 2026-06-10 | OPEN |
| #67254 | Duplication | Multi-turn render-duplication in regions containing Bash tool_use calls (cluster-membership open) | 2026-06-10 | OPEN |
| Comment under #64567 | Duplication | away_summary records pattern-match as duplicate turn markers (cross-spoke discovery) | 2026-06-10 | filed |
Architectural framing
cct uses the terminal's alternate-screen buffer, which bypasses the normal terminal scrollback. This is documented as a known limitation in #28077 and #42002. The alternate-screen buffer has a hardcoded internal viewport and preserves its contents across cct exits.
All cluster members are live-render-path defects: defective output is generated at the moment of live rendering (turn-transition, permission-gate state change, away_summary write, substantive paragraph emission, Insight emission with surrounding-text proximity effects) and written into the alternate-screen buffer. On resume via claude -c, cct reconstructs from some combination of .jsonl replay and pre-existing buffer state, faithfully reproducing whatever the live-render path wrote.
The cluster's distinct surface-failure families (omission, duplication, corruption) suggest different parsing failure modes within a shared upstream class — parsing-vs-structure fragility in cct TUI rendering. Where parsing-by-content-regex meets non-conforming content (a system record satisfying a turn-pattern, a permission-gate state-transition timing race, a buffer-stride at a long emission, a content-density spike at an Insight block), the render path fails distinctly per the trigger. The replay-render path (the post-resume .jsonl walking that some cluster members confirmed produces clean output) is the reference shape for correct rendering; the live-render path is the one to audit at each trigger point.
A complication: #67253's clean-test observation under multi-cycle resume showed progressive contraction across cycles, contradicting the strict "replay-render is always clean" claim from earlier cluster filings. The replay-render path appears clean for the triggers tested at original filing, but the contradiction surfaces a question about whether replay-render itself can re-emit buffered live-render-state under some conditions. The architectural finding still holds at the broad altitude (defects originate in live-render); the precise replay-render behavior across content shapes is open.
Cross-cluster discriminator tests outstanding
Several pairs of cluster members have explicitly open discriminator tests in their bodies — pending tests that would collapse or distinguish cluster members:
- #64567 vs #67253: re-trigger #64567's permission-gate duplication on current
cct(2.1.153); if it shows progressive contraction matching #67253 (rather than binary clear matching original #64567 filing), readings collapse to one defect with wider trigger surface - #67254's cluster-membership: clean-test re-run (multi-turn region with Bash calls; workaround cycling without intervening turn) would distinguish #64567-style binary clear vs #67253-style progressive contraction vs distinct mechanism
- #67252's persistence mechanism: KDE Plasma session-save configuration check would confirm whether Konsole scrollback session-restore is the cold-boot persistence path, or whether the persistence lives in CCC state-directory render-cache (the stranger finding)
Until these run, cluster-membership stays open across affected pairs. Reporter can produce clean-test re-runs on request.
Proposed fix family
The unifying architectural fix candidate: synchronize the live-render path's state-machine transitions with what eventually persists in .jsonl, using the replay-render path's record-walking logic as the reference for correct output. AMD's originally-proposed fix (gate parsing on record type/subtype rather than regex on content) addresses the away_summary case specifically; analogous gating on record-structure rather than content-regex at each cluster member's trigger would address the broader class. The corruption-family member (#67252) is mechanistically distinct from the duplication/omission cases and may warrant a separate fix track around alternate-screen-buffer write-stride or special-character-handling code paths.
Not yet verified against cct's actual codebase; reasoning is observation-grounded from external behavior and the documented alternate-screen-buffer architecture (#28077, #42002).
Reporter context
Same reporter for all cluster members. Single user with multi-project homelab structure, hub-and-spoke architecture, cross-project agent memory, and hook architecture (turn_tag_inject.sh UserPromptSubmit hook injecting MM/DD @ HH:MM:SS turn anchors). Reporter can produce additional diagnostic capture on request across the cluster:
- Clean-test re-runs for the outstanding discriminators
- ANSI raw output via
script-wrapped sessions - Hook-disabled A/B testing (UserPromptSubmit hook off)
- Terminal-portability tests against xterm, alacritty, gnome-terminal, kitty
- KDE Plasma session-save configuration check (for the #67252 cold-boot persistence)
- Reproducer scripts for #64567's permission-gate duplication (manufacturable on demand)
Note to other users hitting the cluster
If you've encountered any of these cluster member defects in your own use of cct, a thumbs-up reaction on this issue or the relevant child issue helps signal priority to Anthropic's triage. Comments naming your terminal-emulator + OS + cct version + the specific defect's trigger condition you observed would be useful substrate for engineering investigation.
Cross-link
Companion to: #64007, #64567, #67252, #67253, #67254. Live-render-path architectural grounding: #28077, #42002.
The cluster is broader than any individual issue; triage may reasonably consolidate, prioritize as cluster, or address by family. The decision is upstream's.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗