EvaluatorPlan v0.4 is a versioned metadata-only successor to the first three evaluator-plan meanings.
It exists because Phase B2 calibration exposed two different failure modes in weaker semantic proxies:
The version boundary is therefore explicit:
| EvaluatorPlan | Verifier adapter | Static semantic contract |
|---|---|---|
| v0.2 | deterministic-patch-verifier 0.1.1 |
every required_added_text value must equal a complete added line |
| v0.3 | deterministic-patch-verifier 0.2.0 |
every required_added_substrings value must occur inside at least one added line |
| v0.4 | deterministic-patch-verifier 0.3.0 |
every required added substring must occur in an added line and every required removed substring must occur in a removed line |
Historical v0.2 and v0.3 meanings are not reinterpreted.
A v0.4 unified_diff backend requires both:
{
"required_added_substrings": ["safe_call("],
"required_removed_substrings": ["unsafe_call("]
}
For each configured value:
The verifier still applies the inherited checks for:
Candidate code is never executed by this metadata-only backend.
Suppose the intended change is:
unsafe_call(args.value)
->
safe_call(args.value)
An added-substring-only evaluator can be satisfied by an unrelated addition such as:
<!-- safe_call( -->
while leaving unsafe_call(args.value) untouched.
v0.4 can encode the transition rather than only the destination vocabulary:
added line contains: safe_call(
removed line contains: unsafe_call(
The inert decoy fails because it contains no removed line matching unsafe_call(.
The checked-in calibration fixtures use the same correct patch bytes across historical versions and a separate Goodhart decoy:
verification/fixtures/patch-transition/correct.patchverification/fixtures/patch-transition/decoy.patchExpected outcomes:
| Candidate | v0.2 exact line | v0.3 added substring | v0.4 transition |
|---|---|---|---|
| correct replacement | reject | support | support |
| inert added-text decoy | n/a | support | reject |
This intentionally preserves the evidence that v0.3 added-substring matching alone is insufficient for the calibrated transition objective.
v0.4 is still a static proxy, not proof of runtime correctness or security.
A patch can potentially remove and add the expected textual forms while still being behaviorally wrong. Therefore:
Use v0.4 to express a bounded textual transition when that transition is independently meaningful, but do not substitute substring checks for behavioral verification when a stronger verifier is available.
For security-sensitive or functional claims, a future task may pair metadata-only transition evidence with a separately versioned and explicitly sandboxed negative/behavioral evaluator. That higher-risk evaluator must have its own authority, isolation, provenance, and pre-outcome commitment. v0.4 itself remains non-executing.
A VerificationResult produced under v0.4 must retain:
0.3.0;added_and_removed_line_substring_all;The canonical evaluator runner reports v0.4 runner version 0.4 while preserving the current runner-version marker for v0.1–v0.3 results.
The original phase-b2-first-five cohort remains burned and its frozen plans/digest must not be changed.
A future successor cohort may use v0.4 only after:
Task 001 from the burned cohort is already solved and must not be reused as untouched held-out evidence.
EvaluatorPlan v0.4 adds no authority to:
Verifier output remains decision support. Integration authority remains external.