SpecForge v0.27.1
Lighter and sturdier. Test files can stay out of your review, the app stops redoing work whose answer has not changed, and a crash can no longer cost you your settings or your activity history.
✨ Highlights
- Skip the files you don't mean to review. Settings ▸ Integrations now has
a list of skip patterns, below the pull-request cards. Add a glob such as
**/tests/**(or a/…/regular expression), and every matching file in a pull request starts collapsed, labelledskipped · matches <pattern>. It is left out of the total rather than counted as viewed: "4 of 7 files viewed · 3 skipped". Review brings one file back into this pull request's review and Skip undoes that. Your own marks always win, so marking a skipped file viewed works as before. Nothing is stored to skip a file, so a push never turns it into "changed since viewed", and editing the list updates every open pull request. The list starts empty, so nothing changes until you add a pattern. - Your settings survive a crash.
settings.jsonandpresentation.json(display names, colours, disabled workspaces) are now written atomically, in the order the changes were made. Before, a crash or two windows saving at once could corrupt the file, and the next launch would quietly overwrite it with defaults. A file that no longer parses is now set aside as.corrupt-<n>instead. One that cannot be read is left alone: the session runs on defaults and each control reports that it could not save. - So does your activity history. The activity log is now append-only
(
activity.jsonl), so each batch costs the size of the batch rather than rewriting the whole log. Your existingactivity.jsonis migrated once and kept asactivity.json.migrated. A torn last line is trimmed, anything else unreadable is preserved, and the first-launch backfill no longer runs again over a damaged log. With the desktop app,specforge-serveand the terminal UI all open, only one of them writes the log, so an achievement is recorded once.
🔧 Improvements
- A snappier window. Git, Tailscale and filesystem work behind the
Dashboard, the workspace tree and link opening now runs off the UI thread,
and a hung
tailscaledcan no longer freeze the window. Opening the Dashboard no longer runs git to read your identity. - Documents stop flickering on refresh. A live edit or a refresh no longer rebuilds the whole rendered document, so Mermaid diagrams stay drawn and the page keeps its height. A refresh that changes nothing leaves the workspace tree untouched.
- Faster pull-request reviews. Marking a file or a hunk viewed now re-renders only that file. A re-read caused by a comment, a review or a CI status no longer downloads the file list again, and files you have already loaded keep their content and hunk marks. That saves GitHub detail budget and BitBucket diff downloads. Requests to the same host reuse one connection.
- Lighter windows. Reader, pull-request and zoom windows load only what they show, and the maths engine loads only for documents that contain maths.
- Cheaper saves. A save under
openspec/now costs what it can change:git statusruns only for the worktree it came from, a non-git workspace rebuilds only its own row, and the archive is no longer walked on every save. - Dashboard history is cached. The commit garden reuses each repository's
history until git actually changes, instead of re-running
git logevery time the window gains focus. The first-launch task-history backfill makes two git calls per repository instead of hundreds. - The web UI loads faster, especially over a slow link.
specforge-servenow sends caching headers (a year for hashed assets,ETagrevalidation for the page) and compresses responses with brotli or gzip. - A quieter terminal UI.
specforge-tuiruns one refresh per burst of file events, reuses the rendered document and commit rail between frames, and redraws only when something changed. It no longer redraws four times a second while idle. - A new description. The README, About panel, app bundle, npm package and website now describe SpecForge as what it has become: following each OpenSpec change across your repositories and worktrees, from the proposal to the pull request, read-only.
🩹 Fixes
- A commit made on a detached HEAD in a linked worktree now updates the Dashboard's commit garden, lifecycle and heatmap.
- In the terminal UI, a slow History reply for the repository you just left can no longer replace the graph of the one you switched to.
- The README no longer claims the Claude gauge is SpecForge's only network call, or that the terminal UI has only two quota toggles.