anthropics / anthropics/claude-code
[Agent incident] 2026-08-08 14:45 - Příchozí si nepamatovaly sub-tab: default přepsal uloženou hodnotu dřív, než se stihla načíst
- Dominant language
- Python
- Stars
- 145k
- Forks
- 23.1k
- PR merge metrics
- PR metrics pending
Description
### Summary
Incident recorded on **2026-08-08 14:45** while working with the coding agent in IntelliJ IDEA on a private Kotlin Multiplatform project.
### Environment
- Surface: Claude Code agent in IntelliJ IDEA (JetBrains plugin)
- Project: private Kotlin Multiplatform app (Android/iOS/desktop)
### Record (verbatim, Czech)
#### 2026-08-08 14:45 — Příchozí si nepamatovaly sub-tab: default přepsal uloženou hodnotu dřív, než se stihla načíst
- **Co uživatel hlásí:** „když kliknu Přijaté, škubne se to" a „u těchhle subtabů se má
otevírat tab Zprávy, když není nic jiného — narušení logiky Přijatých".
- **Co jsem naměřil v kódu:** `defaultIncomingSub` (AppRoot.kt:94) pravidlo dodržuje —
nepřečtené zprávy → Zprávy, jinak zájem → lajky → návštěvníci, a když **není nic
nového, tak Zprávy** (komentář „uživatelův pokyn"). Pravidlo tedy porušené nebylo.
Rozbité bylo něco jiného: `var incomingSub by remember { mutableStateOf(Visitors) }`
a hned pod ním `LaunchedEffect(incomingSub) { state.setIncomingSub(...) }`. Ten efekt
se spustil při PRVNÍ kompozici, tedy s počáteční hodnotou `Visitors`, a zapsal ji do
store — jenže `AppState._incomingSub` se ze store plní až v `boot()`. Uložený sub-tab
se tak přepsal dřív, než ho někdo přečetl.
- **Důsledek:** Příchozí se nikdy neotevřely tam, kde uživatel skončil (vždycky
Návštěvníci), a když obnova doběhla o kus později, `AnimatedContent` ještě slidnul
obsah stranou — to je ten viditelný škubanec po kliku na tab.
- **Škoda:** zadání z 3. 8. („appka si má pamatovat, kde uživatel skončil") u tabu
Příchozí tiše nefungovalo; uživatel to hlásil jako narušení logiky.
- **Jak zjištěno:** uživatel 8. 8. při testu.
- **Oprava:** zápis sub-tabu je podmíněný `state.ready` — dokud boot nedoběhne, nic se
neukládá, takže default nemá co přepsat.
- **Pravidlo:** efekt, který PERZISTUJE stav UI, se nesmí pouštět dřív, než se ten stav
načte — jinak default vždycky přepíše uloženou hodnotu. Klíčem je dokončený boot,
ne jen změna hodnoty.
Provenance in the project's git history
- record key: `2026-08-08 14:45`
- first committed: `2026-08-08T14:44:07+02:00`
- first commit: `8c396f3c15cf`
- stored versions of this record: 1
- files it lived in: `ai-incidents.md`, `ia-sabotages/ai-incidents.md`, `tool-sabotages/ai-incidents.md`
---
_Filed from a recovered incident log. The record above is reproduced verbatim from the project's `ai-incidents.md`; it was written in Czech at the time of the event._
Contributor guide
No contributing guide indexed for this repository
Research direction
The report names AppRoot.kt:94, AppState.boot(), and the ai-incidents.md history entry, but no file or test in claude-code is identified. Start by checking whether those private-project paths exist in the target repository; done would require a repository-local reproduction and test confirming the stored Incoming sub-tab survives boot without an initial default write.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin
- Domain
- desktop-dev, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 15/100