Migration Witness
Before and after agree.
Both are wrong.
A comparison can approve a migration that preserves a bug. Odin’s example checks both implementations against independently declared behavior, then tests whether that check can be fooled.
Equality is not the specification.
The same half-cent invoice passes through two implementations. In the shared-bug control, both return 1.00. Comparing only their outputs would find no difference.
| Candidate | What actually happens | Recorded evidence |
|---|---|---|
| Before · shared bug | Acme | 1.00 | 2026-09-20The original implementation rounds the amount incorrectly. | Inspect this case |
| After · shared bug | Acme | 1.00 | 2026-09-20The replacement agrees with the original. It is still rejected. | Inspect this case |
| Declared expectation | Acme | 1.01 | 2026-09-20Defined in cases.tsv, independently of either implementation. | Inspect this case |
The contract must sit outside the change.
Seven declared cases cover rounding, Unicode, date boundaries and invalid inputs. An intentional blank-customer change is recorded separately. Broken Java remains inconclusive; it is not reported as a behavioral regression. This is a before/after acceptance mechanism, not an automated migration engine.
These examples test the acceptance mechanism. They do not measure an agent’s performance on unseen work.
Inspect the recording.
Recorded fixture run; the execution environment is identified below. These Java examples, candidate tests and corrections were authored for this demonstration. Selecting a case reads saved evidence; it does not execute code or an agent.
Recorded fixture run · GitHub Actions · 2026-10-11T05:47:47.528Z
Run 29bb03f4-8bc4-4d79-9e8e-fc92a604d1f2 · base source revision 6a375f0b5f0c0c26c9563613e5aa0cbb808c94b9
Uncommitted working tree; base revision does not identify these edits. Input hashes identify executed sources.
GitHub Actions recording · attempt 1
Declared invoice formatting cases in authored before/after Java fixtures; no automatic transformation.
Runtime and experiment boundaries
{
"node": "v22.23.3",
"java": "openjdk version \"21.0.12.1\" 2026-08-18 LTS\nOpenJDK Runtime Environment Temurin-21.0.12.1+1 (build 21.0.12.1+1-LTS)\nOpenJDK 64-Bit Server VM Temurin-21.0.12.1+1 (build 21.0.12.1+1-LTS, mixed mode, sharing)",
"javac": "javac 21.0.12.1"
}- No ROI measured; no customer code or live model calls.
- Seven declared preservation cases, not general program equivalence.
- Intentional blank-customer validation change excluded from preservation denominator.
- Trusted bundled sources only; owned temporary directories are not a security sandbox.
- Hashes establish consistency, not authenticity against malicious artifact replacement.
- declared-preservation
- 7 / 7 cases
Both versions satisfy independent expected values and pairwise equality, excluding intentional change.
- control-discrimination
- 4 / 4 controls
Positive acceptance, semantic rejection, shared-bug rejection and compile-inconclusive classification.
- inconclusive-observations
- 1 / 41 observations
Includes deliberately invalid compilation; not counted as a detected behavior defect.
round-half-cent
rejected
Compared to declared independent expected invoice result.
Expected
Acme|1.01|2026-09-20
Actual
Acme|1.00|2026-09-20
Actual command transcript
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
Acceptance concerns the stated evidence check. An expected rejection can demonstrate that the check works; it does not mean the tested behavior passed. Fixture results are not customer savings, held-out performance or a guarantee of broader correctness.
All recorded observations, including negative controls
baseline:round-half-cent · accepted
Compared to declared independent expected invoice result.
Expected
Acme|1.01|2026-09-20
Actual
Acme|1.01|2026-09-20
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:unicode · accepted
Compared to declared independent expected invoice result.
Expected
Café 東京|12.50|2026-09-20
Actual
Café 東京|12.50|2026-09-20
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:utc-day-boundary · accepted
Compared to declared independent expected invoice result.
Expected
Acme|0.00|2025-12-31
Actual
Acme|0.00|2025-12-31
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:leap-day · accepted
Compared to declared independent expected invoice result.
Expected
Acme|-1.01|2024-02-29
Actual
Acme|-1.01|2024-02-29
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:invalid-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:empty-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:invalid-date · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_DATE
Actual
ERROR_DATE
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
baseline:empty-customer · accepted
Declared intentional change: blank customer becomes ERROR_CUSTOMER; excluded from preservation.
Expected
Guest|1.00|2026-09-20
Actual
Guest|1.00|2026-09-20
Execution receipt
command-3: javac -encoding UTF-8 -d <workdir>/baseline <repo>/demos/migration-witness/fixtures/BeforeInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 512 ms stdout: stderr: command-4: java -Dfile.encoding=UTF-8 -cp <workdir>/baseline WitnessHarness BeforeInvoice <repo>/demos/migration-witness/fixtures/cases.tsv false false cwd: <workdir> completed; exit 0; 69 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS R3Vlc3R8MS4wMHwyMDI2LTA5LTIw SUMMARY 8 0 stderr:
candidate:round-half-cent · accepted
Compared to declared independent expected invoice result.
Expected
Acme|1.01|2026-09-20
Actual
Acme|1.01|2026-09-20
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:unicode · accepted
Compared to declared independent expected invoice result.
Expected
Café 東京|12.50|2026-09-20
Actual
Café 東京|12.50|2026-09-20
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:utc-day-boundary · accepted
Compared to declared independent expected invoice result.
Expected
Acme|0.00|2025-12-31
Actual
Acme|0.00|2025-12-31
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:leap-day · accepted
Compared to declared independent expected invoice result.
Expected
Acme|-1.01|2024-02-29
Actual
Acme|-1.01|2024-02-29
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:invalid-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:empty-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:invalid-date · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_DATE
Actual
ERROR_DATE
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
candidate:empty-customer · accepted
Declared intentional change: blank customer becomes ERROR_CUSTOMER; excluded from preservation.
Expected
ERROR_CUSTOMER
Actual
ERROR_CUSTOMER
Execution receipt
command-5: javac -encoding UTF-8 -d <workdir>/candidate <repo>/demos/migration-witness/fixtures/AfterInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 486 ms stdout: stderr: command-6: java -Dfile.encoding=UTF-8 -cp <workdir>/candidate WitnessHarness AfterInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 0; 70 ms stdout: ASSERT round-half-cent PASS QWNtZXwxLjAxfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day PASS QWNtZXwtMS4wMXwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 0 stderr:
semantic-regression:round-half-cent · rejected
Compared to declared independent expected invoice result.
Expected
Acme|1.01|2026-09-20
Actual
Acme|1.00|2026-09-20
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:unicode · accepted
Compared to declared independent expected invoice result.
Expected
Café 東京|12.50|2026-09-20
Actual
Café 東京|12.50|2026-09-20
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:utc-day-boundary · accepted
Compared to declared independent expected invoice result.
Expected
Acme|0.00|2025-12-31
Actual
Acme|0.00|2025-12-31
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:leap-day · rejected
Compared to declared independent expected invoice result.
Expected
Acme|-1.01|2024-02-29
Actual
Acme|-1.00|2024-02-29
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:invalid-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:empty-amount · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_AMOUNT
Actual
ERROR_AMOUNT
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:invalid-date · accepted
Compared to declared independent expected invoice result.
Expected
ERROR_DATE
Actual
ERROR_DATE
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
semantic-regression:empty-customer · accepted
Declared intentional change: blank customer becomes ERROR_CUSTOMER; excluded from preservation.
Expected
ERROR_CUSTOMER
Actual
ERROR_CUSTOMER
Execution receipt
command-7: javac -encoding UTF-8 -d <workdir>/semantic-regression <repo>/demos/migration-witness/fixtures/RegressionInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java cwd: <workdir> completed; exit 0; 485 ms stdout: stderr: command-8: java -Dfile.encoding=UTF-8 -cp <workdir>/semantic-regression WitnessHarness RegressionInvoice <repo>/demos/migration-witness/fixtures/cases.tsv true false cwd: <workdir> completed; exit 1; 76 ms stdout: ASSERT round-half-cent FAIL QWNtZXwxLjAwfDIwMjYtMDktMjA= ASSERT unicode PASS Q2Fmw6kg5p2x5LqsfDEyLjUwfDIwMjYtMDktMjA= ASSERT utc-day-boundary PASS QWNtZXwwLjAwfDIwMjUtMTItMzE= ASSERT leap-day FAIL QWNtZXwtMS4wMHwyMDI0LTAyLTI5 ASSERT invalid-amount PASS RVJST1JfQU1PVU5U ASSERT empty-amount PASS RVJST1JfQU1PVU5U ASSERT invalid-date PASS RVJST1JfREFURQ== ASSERT empty-customer PASS RVJST1JfQ1VTVE9NRVI= SUMMARY 8 2 stderr:
compile-failure · inconclusive
Compilation did not produce runnable evidence; never a semantic defect.
Expected
Executable Java implementation
Actual
{
"status": "completed",
"exitCode": 1
}Execution receipt
command-13: javac -encoding UTF-8 -d <workdir>/compile-failure <repo>/demos/migration-witness/fixtures/BrokenInvoice.java <repo>/demos/migration-witness/fixtures/WitnessHarness.java
cwd: <workdir>
completed; exit 1; 278 ms
stdout:
stderr:
<repo>/demos/migration-witness/fixtures/BrokenInvoice.java:1: error: illegal start of type
public class BrokenInvoice { public static String render( { return "broken"; } }
^
1 error
Reproduce on your machine.
From the repository root, with Node 22 and JDK 21 installed. Runs trusted bundled fixtures locally.
node demos/migration-witness/run.mjs --out /tmp/migration-witness.jsonRead the demo source and limitationsBring one decision to the bench.
A proposed pilot for a team deciding whether this evidence would improve its engineering review.
Proposed delivery cap: 16 engineering hours for this bounded scope, subject to input review and agreement. A planning hypothesis, not a service promise or measured saving.
- Good fit
- One bounded Java component with observable outputs and a proposed replacement.
- You bring
- Trusted before/after sources; runtime and dependency assumptions; approved examples and intentional changes.
- You take away
- An independent acceptance suite, before/after comparison and a separate register of approved behavior changes.
- Acceptance to agree
- Both versions meet each agreed preservation example; pairwise equality alone is insufficient; intentional changes have explicit approval.
- Outside this pilot
- Automatic rewriting, general equivalence, dependency-wide compatibility, deployment and savings guarantees.
Measure whether it earns its place.
Agree a comparable baseline, acceptance criteria and a stop condition before work starts. Record setup, execution, human review and rework time, plus tool costs and the full cost of labor. Compare total effort and accepted outcomes; disclose unresolved work.
The demo establishes a mechanism to inspect. Whether it reduces your team's cost or risk is a pilot question. Agree scope, fees, access, data handling and delivery terms before sharing code or data. The brief is a manual preparation step; nothing is sent automatically.
What must remain true after your next change?
Bring a bounded upgrade and the behavior your users depend on. We can turn those expectations into a separate acceptance suite, expose shared bugs and intentional changes, and leave your reviewers with a repeatable comparison.
The proposed work is the acceptance system around your workflow: an explicit contract, checks that can reject a plausible but wrong result, and a record another engineer can reproduce. The small Java example above makes one part of that approach inspectable.
Discuss your acceptance problemPart of a larger engineering problem.
When agents produce more changes, someone still has to decide which changes deserve acceptance. Odin explores that decision from the rule to the observed outcome.
- Blueprint Conformance Engine
- Published architecture constraints checked against code. Public, reproducible examples.
- A passing pipeline was not yet a verified release
- Our internal release account follows coverage artifacts, a qualified image and a user journey. Author-reported; its private receipts are not independently inspectable here.
- These Witness experiments
- Public adversarial examples: tests that miss defects, matching implementations that share a bug, and corrections that lose required checks.