One adapter, one rented GPU, one honest verdict
Follow a real run from frozen rules to confirmed cleanup. Every number below comes from committed result files in the repository.
Write the rules before the results
RuVLLM freezes the tasks, expected answers, generation settings and the keep rule into a bundle pinned by SHA-256. 192 tool-use tasks and 64 arithmetic tasks, checked against every training prompt for overlap. Nothing can be tuned after the answers come in.
Rent a GPU inside four spending limits
The GPU loop checks an admission budget, the offer's worst-case price, accrued cost, and arms an independent destroy timer before the job starts. Credentials stay on the control host; the rental only ever sees the pinned job.
Run both arms on identical tasks
The unchanged base and the adapter answer the same 256 tasks with the same settings on the same physical GPU. The worker checks model files, adapter tensors and GPU identity first, and keeps every raw response, including failures and truncations.
Re-score locally before believing anything
The raw outputs come home and the frozen scorer runs again on your machine. A job only counts as complete when the local report matches the remote one byte for byte. Generated tool calls and programs are never executed.
123 → 173 tool passes, zero regressions
On the confirmation panel the coding-4b adapter for Qwen3.5 4B gained 50 tasks and lost none. Exact McNemar p = 1.8 × 10⁻¹⁵. Arithmetic held at 63/64 in both arms. Decision under the frozen rule: keep.
Fresh, untouched tasks: 149 → 176
A brand-new panel, never seen during development, confirms it: 40 gains, 13 regressions, p = 2.7 × 10⁻⁴, arithmetic 62 → 64. The regressions are all one kind (Write arguments), and RuVLLM shows them case by case instead of averaging them away.
A better-looking adapter, rejected
A second training round scored a perfect 192/192 on tools. It also dropped arithmetic from 62 to 46/64. The rule fixed before training said capability anchors must not regress, so it was rejected automatically. That is the point: the scoreboard can't be argued with after the fact.
Destroyed, confirmed, accounted for
Each rental is destroyed and confirmed absent from the account before the job is marked done. One training run and three 256-task paired evaluations cost $2.04 of recorded GPU time in total.