Repository navigation
Changelog
Added
-
With
review.mode: critic, the review-thread leg asks the critic once per pull
request head to sort the unresolved bot threads. It answers and resolves those it
calls invalid, duplicate or out of scope, quoting the critic's evidence. -
The threads the critic would apply become one round, judged by the touched modules'
paired tests and the type checker. -
Under
review.mode: critican attempt runs one to three candidates, by the unit's
size, each in its own worktree. The critic reviews the green ones in a fixed order
until one passes, andtorve whyandnight showlist the candidates. -
A dsh seat's candidate whose battery convicted three tests or fewer, or only mypy,
gets one more turn in its own session with the gate output before it is judged. -
Each unit that ran through selection writes a
unit.closedtelemetry record. -
unit: documentin a document'sphasing.yamlmints one contract for the whole
document, and is the default for three phases or fewer;unit: phasekeeps one
contract per entry. A whole-document contract's landing completes every phase. -
An agent profile's
finishcommand runs in the sandbox after the agent stops and
before its tree is judged, for example a formatter's fixes. Its exit status never
fails the attempt. -
torve abort --claim … --evidence … [--row <id>]stops a task from inside its attempt
when the rows, the intent and the tests cannot all hold. A halt on a LOCKED row goes
to the owner; any other goes back to the author as underspecified. -
review.mode: criticreviews a gate-green candidate with the critic: a frozen prompt
over the diff, the base tree and what the engine measured. The engine blocks on its
located findings and violated rows, never its stated verdict.classicstays default. -
A gate pass the critic will read writes
.torve/review/evidence.yaml: changed tests
run on the base and the head, a status per owned row, unrun acceptance, edits to
existing tests, and flags for gaming or text aimed at a reviewer. -
torve review corpus --mode classic|criticreplays the corpus through either seat and
reports whether each case would have blocked. Three cases join: a weak test, a test
edited to pass, and code that special-casesPYTEST_CURRENT_TEST. -
Upgrade: upgrade every host that shares a store together: a contract 0.9.0 mints
is version 3, and a night it closes on--passesnames a reason 0.8.0 does not know. -
Upgrade:
torve initrefreshes.torve/schemas/for version 3 contracts, a phasing
file'sunit, a profile'sfinishandreview.mode. A seat whose harness image names
{torve}runs the 0.9.0 images the tag's publish workflow builds.
Changed
-
A contract row's
checkruns only when its document completes, on the document branch
or at the local landing that completes it, never on an attempt or a rebase. Standing
invariants' checks no longer run in the lane, and a gate manifest'srowskey is
ignored with a warning. -
A task contract's scope is now
files,tests,fenceandcontingent. Only an
edit inside the fence fails the scope gate or meets the pre-write hook; one outside the
files and their tests is listed as evidence. Version 2 contracts load for this release. -
torve planlicenses each scoped module's existing paired tests in the contract,
fences the manifest'sscope.denyand the engine's own.torvepaths the phase does
not own, and adds up to ten LOCKED rows of other documents the scope touches. -
The dsh image moves to dsh 0.2.1-rc.5. It now shuts out project instruction files
and the default skill roots, gives a shell command up to 900 s in the foreground,
and reports usage and tool calls from dsh's v4 session log. -
A dsh seat's attempt runs as a session the engine drives through dsh's
--json
events, which give its tool calls, their results and each step's usage. A turn past
the seat's timeout is now killed inside the sandbox instead of left running. -
The context pack carries the files a task changes and their paired tests first and
whole, in the contract's order, and names its contingent files without carrying them.
A neighbour that sorted first can no longer push the task's own files out of the
prompt. -
The context pack no longer carries
gates.json,contended.jsonor coverage counts,
and a retry is handed only the reds that blocked. -
An attempt is no longer asked for attestation entries:
torve log divergencerefuses
decidedandresolved, the prompt andAGENTS.mdsections name no owed entry, and
the finish hook runs only the acceptance. Logs written before still read. -
torve log divergencewithout--attemptfiles its entries under the attempt the
engine pinned in the worktree, not attempt 1. -
A review no longer sees what earlier reviews of the same task found:
touched.json
dropsprior_reviews, which anchored each review to the last one's reading.
Removed
-
torve log owedis gone. -
torve evalandtorve shadoware gone, with the eval arms and shadow replays they
launched. A dispatch no longer refuses an image digest no eval verdict measured. -
torve fleetis gone. Serve each repository with its owntorve manager serve; a
report's default partition is now the configuration'sscm.repo, and
~/.config/torve/fleet.yamlis no longer read. -
torve serve, the web dashboard and theserveextra are gone. -
torve surveyis gone. -
The verify role is gone:
torve planmints no verify tasks, and thetorve:verifier
skill no longer ships. Finish any document planned with the verify pilot on before
upgrading: its verify tasks no longer load, and the tasks waiting on them never start. -
The
mutation,held-out,verify-tests,decisions-reported,self-audit,
user-facing-text,source-layout,red-on-baseandevidencegates are gone. A
gate manifest entry naming one loads with a warning and is ignored. -
A document's pull request no longer shows the Tests, Check, Survivors and Findings
columns in its decisions table. -
Standing jobs under
.torve/standing/no longer run, and escalations are no longer
sent to a webhook. -
The OpenSandbox runtime and the
opensandboxextra are gone;runtime.adaptertakes
dockeronly. -
The mimo, codex and opencode sandbox images are no longer defined or published.
-
The configuration keys
notify,verify,unmeasured_images,runtime.opensandbox
andloop.standing_max_per_tick, and a seat on the mimo, codex or opencode harness,
still load in this release: torve ignores them and warns.
Fixed
-
torve whycounted onlyblockerfindings as a review's blockers, so a review that
blocked a candidate on amajorfinding underreview.blocks_at: majorread as having
none. -
The dsh seat's door against
AGENTS.md,CLAUDE.mdand the default skill roots had
no effect: it patched keys dsh does not read, so those files reached every attempt.
Security
-
The gates read the gate manifest committed at the attempt's merge base, and the
contract from the root or the store, never from the attempt's worktree. An attempt
could previously edit both and change which gates judged it. A root edit after the
cut no longer moves an attempt in flight. -
The gate battery, the lane's included, mounts a cache volume of its own
(<cache_volume>-<slot>-gates) and a nested Docker daemon's state volume of its
own. Code a gate ran could previously leave files or images there for the next
attempt to read.