# The proof — measured on the sweep's own test rig, 2026-10-23

A shelf entry carries a demonstrated result, not assertions. During the
2026-10-23 sweep, three small programs implementing the same rule — a
repair-quote calculator: parts summed, labor at $85/hr, 10% loyalty
discount at 3+ prior visits, 1.5× rush multiplier, rounded to cents —
were written for the test, compiled, and read back with four of the
shelf's verified tools. The compiled forms were the only thing the tools
were given. Reference output of every build: `Quote total: $185.49`.

## Route 1 — Java build → CFR 0.152 (MIT) and Vineflower 1.11.1 (Apache-2.0)

Commands (OpenJDK 21 on the rig):
`javac QuoteCalc.java` → `java -jar cfr.jar QuoteCalc.class` ·
`java -jar vineflower.jar QuoteCalc.class`

Both returned the program nearly whole: class name, all three declared
constants **by name and value** (`LABOR_RATE_PER_HOUR = 85.0`,
`LOYALTY_DISCOUNT = 0.1`, `RUSH_MULTIPLIER = 1.5`), the loop, the
`visits >= 3` branch, the rush branch, the rounding, the string
`"Quote total: $"`, and the test data `{49.99, 12.5, 8.25}`.
Lost: local variable and parameter names (`dArray`, `d`, `n`, `bl`),
and all comments. **Grade: logic 100%, labels ~40%.**

## Route 2 — WebAssembly build → WABT wasm-decompile (Apache-2.0)

Commands: `wat2wasm quote.wat -o quote.wasm` →
`wasm-decompile quote.wasm` (WABT 1.0.34 — the current 1.0.42 release
binaries omit the decompiler; measured, and printed in tool-routes.md).

The entire quote rule came back in six readable lines — `b * 850 / 10`
for labor, `if (c >= 3) { e = e * 90 / 100 }` for the loyalty discount,
`e * 3 / 2` for rush — plus the parts-summing loop as a goto-style loop.
Lost: every name (parameters are `a`–`d`), comments. **Grade: logic
100%, labels 0%.**

## Route 3 — Stripped native build → Ghidra 12.2 headless (Apache-2.0)

Commands: `gcc -O2 -o quote quote.c -lm` → `strip quote` (14,472 bytes,
no symbols — the way shipped builds actually look) →
`analyzeHeadless <proj> -import quote -postScript Decompile` with
Temurin JDK 25 (12.2's stated requirement; JDK 21 was refused).

Recovered from the bare binary: the full quote function — the parts-sum
loop (compiler-unrolled, still recognizable), labor × constant, the
loyalty branch (`if (2 < visits)`), the rush branch, `round(total *
100) / 100`. The constants sat unnamed in `.rodata` and resolve to
exactly **85.0, 0.9 (= 1 − loyalty 0.10), 1.5, 100.0**, with the parts
array **49.99 / 12.5 / 8.25** beside them, and the string
`"Quote total: $%.2f\n"` verbatim.
Honest imperfections: the function is `FUN_00101210`, not `quote`;
`main` itself had to be located from the entry stub (the analyzer left
it a bare label — a normal analyst step, scripted in the run); Ghidra's
guessed prototype scrambled two parameters at the call site; that 0.9
*means* "10% loyalty discount" is an inference — exactly the kind the
workflow prompt makes an AI tag [INFERRED]. **Grade: logic 100%,
constants 100%, labels 0%, one prototype mis-guess.**

## What was NOT attempted on the rig, and why

- **RetDec** — verified by license, not run: its prebuilt install is the
  heaviest here and Ghidra already covers the native route end-to-end.
- **ILSpy / jadx / Recaf / Procyon / Boomerang / Capstone** — license-
  verified only; no .NET or APK artifact was built for this pass, and
  two working Java routes already prove that shelf section.
- **The dogbolt.org service** — read and documented, not used: the proof
  standard here is local tools on our own artifacts, and the service
  retains uploads.

## The one-line summary the shelf page is allowed to print

On programs written for the test, four free tools read the compiled
builds back with **all logic and all constants recovered**; what no tool
recovered was names and comments — which is why this pack pairs the
tools with a workflow that rebuilds the documentation honestly.
