Changelog
What changed in V12, newest first.
October 2026
API changes - status changes without reasons, Steers without revisions
The REST API stays at
/api/v2and the MCP server at/api/mcp. These changes apply to REST, MCP and the CLI alike; check any client that validates responses strictly or still sends a reason with a status change.Improved
- Runs name their repository's slug.
GET /runs,GET /runs/{run}and the run start and cancel responses now carryslugon the run's repository and on each of itsrepositories. CLI 1.2 requires it, so update withnpm install -g @v12sh/before you usecli v12 runs. A client that checks responses against a fixed list of fields must accept the new one. - A failed GitHub request answers 503.
upstream_errornow returns HTTP 503 instead of 502, so a client that retries only on 502 must retry on 503 too. See Errors. - Push credentials check the branch name. The branch must be a valid Git branch name; a name Git refuses, such as
a..b, one that starts with-, or one that ends in.lock, now gets 400.
Removed
- Reasons on status changes.
PATCH /findings,PATCH /findings/and the{finding} update_findingstool refusereasonwith 400invalid_request, andv12 findings statusno longer takes--reason. Stop sending it; to say why, comment on the finding. See Triage the inbox. - Reasons in finding responses. A finding's
decisionis now{ "kind": ... }withoutreason, and theassessed,marked-fixedandmarked-presententries in its activity have noreason. Reasons recorded earlier are no longer returned. A client that requires these fields must stop requiring them; CLI 1.1 and older do, so update withnpm install -g @v12sh/. See Findings.cli - Steer events in a finding's activity. A
changedentry no longer hassteeras itsfield, and adecisionchange carries the decision kind as itsvalue. A client that switches onfieldcan drop itssteercase. See the REST reference. - Steer revisions.
revisionis gone from Steers and from the Steers a run carried, andsteerRevisionsfrom a run estimate. A run still keeps every Steer document as it was when the run started. See Steers.
- Runs name their repository's slug.
Scheduled reviews, Steer management and zip exports
New
- Scheduled reviews. An Autopilot rule can now review a branch daily or weekly, covering either what changed since the last review or the whole branch. See Scheduled reviews.
- Archive and restore Steers. Archiving takes a Steer out of new runs and detaches it from Autopilot rules; restoring makes it available again. See Archive or restore a Steer.
- Manage Steers from the CLI, REST API and MCP. Create, edit, archive and restore Steers with
v12 steersor thecreate_steer,update_steer,archive_steerandrestore_steertools. These writes need the opt-insteers:writescope, shown as Manage Steers on an API key. See Manage Steers and the MCP tools. - Export findings as Markdown. The inbox export is now a zip with one Markdown file per finding, including its proof of concept and proposed fix, and it replaces the CSV export. Guests of a shared link can export what they see. See Export findings.
- Send feedback from an MCP client. The
send_feedbacktool reports a bug, a missing feature or a confusing result to the V12 team. See Send feedback.
Improved
- The triage controls on a finding page now also appear in a narrow window, beneath the finding title. See Triage findings.
Fixed
- Runs on Foundry projects whose
foundry.tomlsets a very large integer, such asgas_limit = 9223372036854775807, no longer fail while V12 prepares the repository.
Removed
- Dismissing findings. The Dismissed view, Dismiss from inbox and the
v12 findings dismissandrestorecommands are gone; triage by status, severity and assignee is unchanged. See Triage findings. - Finding status on public run reports. A report now lists each finding's title, severity and repository. See Public run reports.