The project
This adapter comes out of a campaign teaching fleets of AI coding agents to
reconstruct shipped game binaries byte-for-byte — matching
decompilation, the console-preservation community's gold standard: rewrite
C++ until the original vintage compiler, at the original flags, reproduces
the retail machine code exactly. In that campaign, agent swarms byte-matched
over 44,000 functions of a stripped retail Xbox 360 binary in about ten
weeks — with every proposal judged by the real compiler and objdiff, never
by a model.
decomp-synth is the search-and-ML side of that system: an engine that
searches behavior-preserving C++ rewrites against the real build, and mines
its own verified attempts into training data. Where the single-turn siblings
in this family propose blind, this adapter closes the loop: it is trained on
the eval-format conversation shape, so the compiler's structured verdict
on turn N is the prompt for turn N+1. The design rule stays the same
throughout: models propose, deterministic oracles dispose — a fuzzy match
score is a search gradient and an adversary, and byte-exact recompilation is
the only terminal judge.
Background reading, in order:
Model facts
Table | |
|---|
| base | Qwen/Qwen3.5-9B (apache-2.0) |
| method | LoRA r=64, α=128, dropout 0.05, bf16 |
| corpus | 3,946 chat-rendered rows: byte-exact repair chains (PowerPC X360 MSVC + GameCube/Wii mwcc), eval-format feedback panes |
| trained | 2026-08-27 |
| format | chat (Qwen chat template), single- and few-turn |
Evaluation
Cell B conversation instrument: 4-turn compile-in-the-loop trajectories on
118 held-out start states (GameCube mwcc clone substrate), paired against a
derangement-scrambled-feedback control, byte-exact witness as the endpoint.
K=2 replicas, T=0.6.
- vs the previous-generation v13 adapter: witnesses 10 vs 3 in both
replicas (sign p=.039 / p=.016), pooled 20 vs 6 over 102 paired
symbols (p=.022)
- real-vs-scrambled feedback contrast resolves within one replica
(+8 with zero reversals, p=.0078) — the gain is specifically in reading
the feedback, not just solve count
- caveats that travel with these numbers: unpreregistered capability A/B;
the effect concentrates in start states already ≥97 fuzzy (near-done
repairs); below ~90 the binding constraint for all 9B-class arms is
compile success, not feedback reading
A follow-up rank ladder (r32/r64/r128 on a successor corpus) measured FLAT —
adapter capacity is not the ceiling at 9B; data is.
How to use it
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-9B", dtype="bfloat16", device_map="auto")
tok = AutoTokenizer.from_pretrained("Qwen/Qwen3.5-9B")
model = PeftModel.from_pretrained(base, "freeqaz/decomp-synth-lifter-v14-evalformat-qwen3.5-9b-lora")
This adapter wants a loop, not a prompt. Unlike the RAW single-turn
siblings, it is trained to converse with the compiler:
- Turn 1: chat prompt carrying the target listing and the current C++
source (the project's eval-format layout).
- Compile the model's proposal with the target project's real toolchain
and score it with objdiff.
- Turn 2+: append a structured feedback pane — fuzzy %, mismatching diff
regions, compiler diagnostics — and let the model revise. The measured
gain over v13 comes specifically from reading real feedback; scrambled
feedback erases it.
- Stop on a byte-exact witness, or after ~4 turns (the evaluated depth).
The feedback must be real: this model's edge is reading a true verdict,
so wiring it to anything but an actual compile-and-score seam discards what
it was trained for. It is strongest finishing near-matches (≥97 fuzzy) —
pair it with a wide single-turn sampler (the v13/27B siblings) that gets
functions close, then let this one land them. At 9B it fits a single 24 GB
GPU in bf16; for serving, vLLM with --enable-lora works well.
The adapter family
Table with columns: adapter, base, format, role| adapter | base | format | role |
|---|
| v10 | Qwen3.6-27B | RAW | single-turn matcher, reference 27B |
| gtp0c | Qwen3.8-27B | RAW | v10 recipe verbatim on the newer base (matched pair) |
| v13-chain r32 | Qwen3.5-9B |
Integrity
PUBLISHED.json (shipped) carries per-file sha256 written by the training
job at publish time. Two internal metadata files it pins
(train_summary.json, artifact-manifest.json) are retained in the
project's artifact store but not shipped here — they carry training-box
paths. adapter_config.json was rewritten post-training to the HF base id;
original bytes at provenance/adapter_config.orig.json.
Training data & license
Adapter weights: Apache-2.0. Training rows derive from public
CC0-1.0-dedicated decompilation projects: Xbox 360 Rock Band 3 / Dance
Central 3 community decompilations (MSVC PPC) and the zeldaret Wind
Waker / Twilight Princess decompilations (mwcc GameCube). CC0 covers the
decomp contributors' authorship, not the game publishers' rights in the
underlying works; see
the v10 card
for the full discussion. Corpora are not
published; PUBLISHED.json names the corpus file and sha256 as provenance.