The "Message Growth" visualization (message-flow.tsx) had three issues:
1. Flicker at len=0/1. The setInterval kept firing while the array was
full, queuing multiple setCount(0) resets that snapped the counter
back mid-regrowth; and index-keyed chips inside AnimatePresence
collided with still-exiting nodes on reset, leaving stuck invisible
chips (len=1 rendered 8 chips at opacity 0). Replaced with a single
self-scheduling setTimeout chain and removed AnimatePresence/exit so
chips unmount cleanly on reset.
2. Horizontal scrollbar at len=8. Switched overflow-x-auto to flex-wrap
and tightened chip padding/gap (px-2.5->px-2, gap-1.5->gap-1) so all
8 chips fit on one line within the existing column width.
3. Inconsistent entrance animation. Dropped the width:0->auto slide in
favor of a unified scale+opacity zoom with layout for smooth reflow.
Refs #450
- initialize dark mode state after mount from document to avoid mismatched first render state.
- render a placeholder before mount to reduce theme icon hydration mismatch risk.
- s03: inject reminder into tool_result instead of mutating history (#37)
- s05: SkillLoader uses rglob("SKILL.md") + frontmatter name priority,
matching Agent Skills standard (#30, PR #34)
- CI: upgrade actions/checkout and actions/setup-node to v6 (#36)
- docs: update s05 skill directory structure in all 3 languages
- 11 sessions from basic agent loop to autonomous teams
- Python MVP implementations for each session
- Mental-model-first docs in en/zh/ja
- Interactive web platform with step-through visualizations
- Incremental architecture: each session adds one mechanism