Skip to content

v1.0.208

Choose a tag to compare

@github-actions github-actions released this 11 May 17:30
· 68 commits to main since this release

🐛 Fix: File-tree no longer flickers while files keep changing

If you opened the Explorer's search tab, typed a query, and then let an agent edit files in the background, the matching directories would visibly collapse and refill every ~3 seconds. Rows disappeared for a frame, spinners blossomed across many directories, and the tree re-populated in waves — the entire cycle repeating while file changes kept arriving.

The directory tree gets refreshed on every batch of file-watch events. That refresh re-fetches the whole tree from /api/files/init, which only fills children for directories listed in the persisted expandedPaths file. Search-mode expansion is intentionally session-only and never persisted, so every refresh dropped children for everything you'd expanded via the search filter — the tree visibly collapsed, the safety-net effect then fan-out-fetched each missing directory, and you watched the tree re-grow row by row.

The refresh now merges the new tree with the in-memory one instead of replacing it: directories the server didn't repopulate keep their existing children. No visible collapse, no spinner storm, no fan-out refetch.

🐛 Fix: Filename search no longer 500s in cwds with dangling symlinks

Searching for a query with no matches in a project that happened to contain a broken symlink (e.g. a stale .claude/skills/<name> link pointing at a moved skill) blew up with a "Search failed" toast. Queries that did match worked fine — the asymmetry was the giveaway.

ripgrep exits with code 2 whenever any walk-level error occurred during the scan (broken symlink with --follow, unreadable subdir, …), independent of whether matches were returned from everywhere else. The previous guard only recovered the "exit 2 + non-empty stdout" branch and dropped "exit 2 + empty stdout" into the failure path. Both are now treated as no-match.

🐛 Fix: Staged / unstaged trees fold independently

In the Changes pane, the staged and unstaged file trees shared a single collapsed-paths set — folding src/ on one side also folded it on the other. They each get their own fold state now.

📚 Docs: New blog post

"Vibe coding needs a bit of taste" — a short essay on how the packages/feature/* + packages/shared/* layout constrains the agent's blast radius and writing style. EN + ZH. Read it on cocking.cc/blog.