fix: consolidate widget AsyncStorage and debounce expand (#29) #31

Merged
maximus merged 2 commits from issue-29-widget-expand-perf into master 2026-03-31 00:13:14 +00:00
Owner

Fixes #29

Summary

  • Consolidated 3 AsyncStorage keys (widget:tasks, widget:isDark, widget:expandedTaskIds) into a single widget:state key — reduces I/O from 3 reads to 1
  • Added 2s debounce on TOGGLE_EXPAND to prevent double-tap from collapsing subtask list
  • Legacy keys are auto-migrated on first read and cleaned up
  • Updated CLAUDE.md documentation

Test plan

  • Widget displays tasks correctly after update (migration from legacy keys)
  • Tap expand button → subtasks appear
  • Rapid double-tap → subtasks stay expanded (debounce works)
  • Toggle complete on task/subtask still works
  • Fresh install with no legacy keys works correctly
Fixes #29 ## Summary - Consolidated 3 AsyncStorage keys (`widget:tasks`, `widget:isDark`, `widget:expandedTaskIds`) into a single `widget:state` key — reduces I/O from 3 reads to 1 - Added 2s debounce on `TOGGLE_EXPAND` to prevent double-tap from collapsing subtask list - Legacy keys are auto-migrated on first read and cleaned up - Updated CLAUDE.md documentation ## Test plan - [ ] Widget displays tasks correctly after update (migration from legacy keys) - [ ] Tap expand button → subtasks appear - [ ] Rapid double-tap → subtasks stay expanded (debounce works) - [ ] Toggle complete on task/subtask still works - [ ] Fresh install with no legacy keys works correctly
maximus added 1 commit 2026-03-30 23:45:17 +00:00
Merge widget:tasks, widget:isDark, and widget:expandedTaskIds into a
single widget:state key to reduce AsyncStorage I/O from 3 reads to 1.
Add 2s debounce on TOGGLE_EXPAND to prevent double-tap from collapsing
the subtask list. Legacy keys are migrated on first read.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
maximus added the
status:review
label 2026-03-30 23:45:24 +00:00
Author
Owner

Review — APPROVE

La consolidation des 3 clés AsyncStorage en une seule widget:state est propre et bien structurée. La migration des clés legacy est correcte avec cleanup automatique. Le debounce sur TOGGLE_EXPAND est une approche pragmatique pour le problème de double-tap.

Suggestions (non-bloquantes)

  1. Code mortisWidgetTask() dans widgetTaskHandler.ts:9-22 n'a plus aucun appelant après la suppression de getWidgetTasks. À supprimer, ou mieux : à réutiliser dans getWidgetState() pour valider les items du tableau tasks lors de la lecture (l'ancien code validait chaque item, le nouveau ne le fait plus).

  2. Debounce in-memory — La Map lastExpandTimes ne survivra pas si le processus headless du widget est recyclé entre deux taps. Acceptable comme première itération, mais si le problème persiste sur certains appareils, considérer un debounce persisté (timestamp dans widget:state).

  3. Scope du diff CLAUDE.md — Les modifications au processus de release (instructions versionCode) semblent hors scope du fix #29. Un commit séparé aurait été plus propre.


🤖 Review par Claude Code

## Review — APPROVE La consolidation des 3 clés AsyncStorage en une seule `widget:state` est propre et bien structurée. La migration des clés legacy est correcte avec cleanup automatique. Le debounce sur `TOGGLE_EXPAND` est une approche pragmatique pour le problème de double-tap. ### Suggestions (non-bloquantes) 1. **Code mort** — `isWidgetTask()` dans `widgetTaskHandler.ts:9-22` n'a plus aucun appelant après la suppression de `getWidgetTasks`. À supprimer, ou mieux : à réutiliser dans `getWidgetState()` pour valider les items du tableau `tasks` lors de la lecture (l'ancien code validait chaque item, le nouveau ne le fait plus). 2. **Debounce in-memory** — La `Map` `lastExpandTimes` ne survivra pas si le processus headless du widget est recyclé entre deux taps. Acceptable comme première itération, mais si le problème persiste sur certains appareils, considérer un debounce persisté (timestamp dans `widget:state`). 3. **Scope du diff CLAUDE.md** — Les modifications au processus de release (instructions versionCode) semblent hors scope du fix #29. Un commit séparé aurait été plus propre. --- 🤖 Review par Claude Code
maximus added 1 commit 2026-03-31 00:00:22 +00:00
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
maximus merged commit 244fbee405 into master 2026-03-31 00:13:14 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: maximus/simpl-liste#31
No description provided.