Changelog

What shipped in each release of SpecForge. The current release in full, then every earlier release with the line that summarises it.

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, labelled skipped · 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.json and presentation.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 existing activity.json is migrated once and kept as activity.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-serve and 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 tailscaled can 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 status runs 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 log every 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-serve now sends caching headers (a year for hashed assets, ETag revalidation for the page) and compresses responses with brotli or gzip.
  • A quieter terminal UI. specforge-tui runs 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.

Earlier releases

Full notes for each of these are on the releases page.

  • v0.27.0

    Images and repositories. A changed image now shows its two versions instead of "Binary file not shown", and the repositories around your OpenSpec one — the API, the web client, the infrastructure — can sit in the tree beside it, with their files, history and pull requests, even though they hold no specs.

  • v0.26.0

    Pull requests move in. GitHub joins BitBucket in the side panes, every pull request knows the worktree it comes from, and opening one now reads it inside SpecForge — description, conversation, checks and a new syntax-highlighted diff — with your review progress kept down to the hunk.

  • v0.25.0

    The pull requests that ship your changes now sit beside them. An opt-in panel lists the open BitBucket pull requests you authored, with their review state, in whichever corner of the side panes you choose.

  • v0.24.0

    The sidebar stops being a five-level tree. It now lists workspaces and changes and nothing beneath them; everything that used to live under a change — which artifact you are reading, which worktree you are reading it in, where you are inside the document — moves to the header and to a new outline beside the prose.

  • v0.23.0

    SpecForge stops showing you one worktree and calling it the repository. The Archive and the file browser both pool across every worktree a repository has, and the Dashboard loses the band that was saying what the rest of it already said.

  • v0.22.0

    The reading column becomes yours, the Dashboard's Overview band earns its place, and the marketing site moves in next door to the product it documents.

  • v0.21.0

    Documents get their own windows, stay live wherever they sit in the workspace, and finally render the way they read.

  • v0.20.0

    Wide diagrams get a zoomable full-window view, and the whole toolchain moves up a major version.

  • v0.19.0

    The headless web server is now a one-command install, and the Linux builds run everywhere.

  • v0.18.0

    The served web UI stops being a page and becomes an app you can install.

  • v0.17.0

    The game comes out, the record stays — and every artifact you read now tells you what it is, whose branch it's on, and when it last moved.

  • v0.16.1

    Park the repositories you aren't touching this week — without losing a single streak day.

  • v0.16.0

    Two ways to make the window yours: hide the panes you aren't using, and keep the changes you're actually driving at the top of the tree.

  • v0.15.0

    Two things the app was quietly missing: every view now has an address you can link to, and the pane you're reading keeps itself up to date.

  • v0.14.0

    The headless web server stops being a source-only curiosity: it ships as a download, and it can now serve your workspaces to the rest of your network.

  • v0.13.1

    The ChatGPT quota gauge introduced in v0.13.0 reported the inverse of your actual usage. This corrects it.

  • v0.13.0

    Artifacts now render most of what authors actually put in them — math, hand-written SVG, working links — and the app stops stalling while it does it.

  • v0.12.0

    Every markdown file in your workspace is now reachable — plus a tree that shows completion at a glance.

  • v0.11.1

    The Claude quota gauge learns to watch per-model caps, and finished work finally looks finished.

  • v0.11.0

    Design docs that draw themselves — plus two security fixes to the commands that read your repositories.

  • v0.10.0

    Working-tree git status at a glance, a sidebar that holds its place, and a much lighter background footprint.

  • v0.9.0

    A third skin: SpecForge now runs in the browser — locally, or reachable from your other devices over Tailscale.

  • v0.8.2

    The terminal client can now manage its own workspaces — no desktop round-trip.

  • v0.8.1

    The Claude quota gauge learns to tell time, and the terminal client gets its own settings.

  • v0.8.0

    Two new ways to watch your work: a full terminal frontend, and an opt-in Claude usage gauge.

  • v0.7.2

    Steadier season goals, and change rows that actually show their titles.

  • v0.7.1

    A small Windows quality-of-life patch: git now works invisibly.

  • v0.7.0

    SpecForge now lives where you work: repos inside WSL on Windows, and a browser you can drive entirely from the keyboard.

  • v0.6.0

    The dashboard learns the shape of your day.

  • v0.5.0

    Your dashboard gets a player: a personal profile, a monthly battle pass, and a home for everything you've shipped.

  • v0.4.0

    A clearer sidebar and a more honest dashboard.

  • v0.3.0

    The home surface grows up: a real Dashboard, and a daily sense of momentum.

  • v0.2.0

    A new commit-graph rail, a bolder look, and a portable Windows build.

  • v0.1.0

    A polish-and-presence release: SpecForge keeps your active-change count in front of you, lets you name and colour your workspaces, and reacts to edits the instant they land on disk.

  • v0.0.2
  • v0.0.1

    SpecForge is here — a menu-bar companion for your OpenSpec workspaces, now a real desktop app you can install.