/Weekly update

The Reflog: week ending August 15

Repository federation lands, review gets reviewers and live CI logs, Roder becomes a real execution surface, and two new products — Tours and Huddle — ship as previews.

Vex is built in the open, on itself. Every change in this post was reviewed and landed through Vex, by the same merge queue and the same change pages the post describes.

This was the biggest week yet by volume — sixteen CLI releases, 1.4.0 through 1.8.11 — and the shape of the work matches that: less one big feature, more the platform’s separate pieces (review, CI, agents, storage) all getting materially more capable at once. The throughline, where there is one, is federation: repositories, reviews, and now voice and agent runs all learned to compose instead of standing alone.

Repository federation, for real

A Home checkout can now federate an imported repository after the fact — pull an existing GitHub repository into an organization’s monorepo without re-importing it from scratch, and land a review that spans several of those federated roots as one Change. Vcs::FederatedHome::LandOperation lands each owner-repo child and republishes the manifest once every child is in; the folder browse tree, the GitHub projection, and the sync-run coordination path were all rewritten underneath it to make federated identity — not folder path — the thing that gets matched and reconciled.

That is why this section of the log reads as a long list of narrow, load-bearing fixes rather than one big feature: canonicalize federated repository identity, match federated partitions by repository identity, retain Home folder owners on federated submit, project whole-repository Change roots, preserve standalone projection ownership and narrow leases, seed empty Home trunk before federated import publication, keep coordination migrations Vitess-, concurrency-, and restart-safe. Each one closes a real seam in a system with several independently-moving parts — GitHub’s state, Home’s manifest, and jj-backend’s object graph — agreeing with each other.

Git-mode vex submit compatibility (the ability to run vex submit from a plain git clone, no native Vex workspace required) shipped in full this week too: branch claim and public contract, the exact Git branch bootstrap service, the working-copy CLI adapter, bidirectional continuation and recovery, and a production rollout with a real end-to-end verification — create, retry, a Git-only push auto-appending a patchset, and the merge queue gating landing correctly. Git-mode branches can now stack: a second branch built on a first inherits the parent’s landing target rather than colliding with it, so the resulting GitHub PR is a real stacked PR with the parent branch as its base, not a flat diff against trunk.

Review got reviewers, and CI got eyes

Change review picked up the feature everyone assumed was already there: reviewers. You can request a reviewer at submit time or after, manage the list from the change page or over MCP, and filter the queue to what is actually waiting on you. A review-request notification system shipped alongside it — grouped, attributed, and visible in the activity feed rather than left implicit in a stale “pending” badge.

CI stopped being a black box you wait on. A check’s logs now open inline on the change and tail line by line as the job runs, rather than requiring a trip to a separate CI page. The queue dashboard surfaces real performance numbers — how long a change actually spent outside CI, what a check’s own timing looked like — instead of a bare pass/fail. Failed CI runs can be retried straight from the Actions view, and a change’s checks now report as they actually are, closing a gap where a timed-out mergeability check could get recorded as a real answer.

The merge queue kept getting more honest under load: a backend blip no longer silently ejects a landing request, a change with no matching CI workflow can land instead of hanging forever, and exact-candidate checks are properly waited on rather than raced.

Two products, in preview: Tours and Huddle

Tours is new: a way to generate and compare frozen revisions of an agent’s output — schema frozen at v1, a typed result path, scoped run capabilities, and a first canary run landed this week, with model selection per generation following immediately after.

Huddle is also new: voice rooms for an organization, deployed over WebRTC UDP out of London, with a proof-of-concept gateway that spent the week getting hardened rather than extended — binding ICE media ports publicly, trusting the loopback Mumble certificate, fixing microphone menu failures, tuning voice activation, keeping a connection alive across page navigation. Both are previews, not yet the polished surface the rest of the product gets, but both are real and running.

Roder becomes a real execution surface

Roder — the agent that runs inside your repository — picked up detached runs with typed results: a run that is scoped exactly to what it was granted, admitted against a shared budget with a deadline backstop, and dispatched to a hosted service rather than requiring a live session to watch it. Per-run model and reasoning-effort selection followed once the scoping was solid. Dashboard-agent transcripts now capture from the sandbox the same way any other harness does, and a long session survives naturally across changes instead of losing its thread.

The frontend stopped doing Rails’s job

A large, quiet refactor ran through the whole web app this week, following the rule this platform holds itself to: Rails owns business meaning, React owns presentation. Change pages, session facts, VCS browse and history, deployment logs, organization settings, hosting delivery contracts — one by one, each stopped being assembled from several API responses joined and renamed in the frontend, and started being served as one shaped contract from Rails. ChangeLandingRequest and friends got a canonical field per concept instead of three names for the same thing across the stack. The payoff is structural: a page that used to fan out into several requests now makes one, and a frontend developer reading the code sees what the page shows, not how it was reassembled.

GC learned to name what it deletes

Storage safety work continued: a destructive GC run must now name the exact scope it may delete before it runs, a commit is structurally undeletable regardless of what else changes underneath it, and the campaign halts outright if reachable history ever shrinks during a pass — trees and blobs are deliberately outside that protection, and the roadmap now says why. Underneath that: batched mapping-ref creation instead of two dozen serialized transactions, one CTE query replacing a descendant walk, and a shared Cargo target directory stopped reaching 100 GB.

Everything else

Stats For Nerds shipped — real repository statistics with routed settings and an actual time-series collector feeding production data, not a placeholder chart. The CLI added vex prune for stale workspaces and dangling commits, a k9s-style infrastructure console in vex dash, vex land --when-ready so the queue does the waiting instead of you, and vex hub was renamed to vex registry alongside a new vex service create. The public edge now compresses with brotli in addition to zstd, and actually holds the client’s stated encoding preference instead of picking its own. The marketing site picked up a full product-system explanation, led with repository federation on the homepage, and gave The Reflog its own link back in the top bar after it briefly lost one.


That is the week. The Reflog runs weekly — same day, same shape. If something here changed how your week went, or should have and did not, tell us.