Find the first behavior your rewrite changed.
Strust runs existing software and its AI-written replacement on the same inputs, finds the first behavioral difference, and retains a replayable finding for the coding agent and human reviewer. The first lane is COBOL-to-Java migration.
› Replace the legacy invoice rounding path without changing customer totals.
HALF_EVEN → HALF_UP
Same input. Different branch. One-cent ledger change.
From two runnable systems to one reviewable verdict.
The reference runs. The candidate runs. Strust keeps the difference.
- 01
Declare the boundary
Fix the reference, inputs, observations, and comparison policy.
- 02
Run both systems
Execute the approved reference and candidate on the same inputs.
- 03
Inspect the first difference
Return MATCH, DIVERGE, or INCONCLUSIVE with retained evidence.
- 04
Repair and rerun
Change only the candidate, then run a fresh full verification.
reference approved
legacy billing executable · contract pinned
candidate evaluated
DIVERGE · first changed observation at checkpoint 17
evidence retained
replayable finding for agent and reviewer
One contract, two executions
The coding agent cannot grade its own rewrite.
Strust works beside the coding tool. A separate verifier owns the approved reference, observations, comparison policy, and retained evidence, then returns a concrete finding the agent can repair and rerun.
Interactive v1 demonstrator
Agent + reviewer viewsOne change. The verifier isolates it; the reviewer decides it.
Agent view isolates the first changed decision and the next patch. Reviewer view translates that evidence into impact and a human decision. This controlled example illustrates the intended product loop; the v1 paper contains a declared results ledger whose arithmetic is reproducible, while its historical execution artifacts are unavailable.
Agent receives
Trace-local cause, the first divergent decision, a suggested patch, and a conceptual replay target.
Agent diagnosis / F-02
1 changed observationFirst divergence: Branch action
Batch branch B-17 / null-account path · Illustrative scenario B
Reference system
COBOL
IF ACCOUNT-ID = SPACES
NEXT SENTENCE
ELSE PERFORM WRITE-CLAIM
END-IF
Candidate system
Java
if (accountId == null) {
writeFallback(claim);
} else { writeClaim(claim); }
batch.advance();
Execution checkpoints
Source value / target value
NULL
Account input
NULL
Equivalent
TRUE
Guard B-17
TRUE
Equivalent
SKIP_WRITE
Branch action
WRITE_FALLBACK
Origin
0
Rows emitted
1
Changed
UNCHANGED
Batch count
INCREMENTED
Changed
The first changed decision is Branch action: the source returns SKIP_WRITE while Java calls writeFallback.
Capture → Compare → Isolate → Patch → Rerun
COBOL-to-Java is the first test lane.
01 CUSTOMER-CODE PIC X(8). IF CUSTOMER-CODE = 'VIP' MOVE 'PRIORITY' TO QUEUE-NAME
String code = record.customerCode();
if (code.equals("VIP")) { // ← flagged
queueName = "PRIORITY";
}A legacy system is already an executable reference. Strust turns representative source behavior into evals for the system replacing it. Here, COBOL pads the shorter fixed-width value; Java treats VIP····· and VIP as different strings. Both compile; the behavior changes.
A benchmark design for whether migration agents preserve behavior.
SemaMig-Bench · Protocol published · Corpus in construction
Run the source. Run the migration. Score the behavior.
SemaMig-Bench turns COBOL-to-Java migration into a paired, held-out evaluation. The same workload runs against the executable source and native Java candidate; a task passes only when the contract-relevant observations agree.
Protocol
Published
Five-page design and preregistered evaluation protocol
Task corpus
In construction
50 tasks planned across diagnostic, workflow, and system tiers
Leaderboard
Results forthcoming
Baseline scores publish after the v1 corpus and verifiers are frozen
Contact
Have a software change Strust should verify?
Tell us what you are changing and what behavior must stay the same.