/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.