Status: pre-freeze evaluator calibration
Tracker: #180
Task: benchmark/phase-b2-v2/005-local-offer-output-boundary
Can the provisional public EvaluatorPlan v0.4 for Task 005 distinguish a real output-authority repair from an inert lexical near-miss, and does that metadata result agree with an explicit safe CLI behavioral matrix?
The successor cohort remains stage=scaffold. Calibration candidates are not benchmark outcomes.
Exact source:
a69aa0ae1ae4862e507511cbd9ad854237d0ad32
Writable target:
experiments/local_compute_offer.py
Frozen vulnerability:
output = Path(args.output)
The discovery utility advertises no canonical-write authority, but this line permits --output README.md, absolute paths, and traversal outside generated results/ state.
The scaffold plan is EvaluatorPlan v0.4 / deterministic patch verifier 0.3.0 and requires:
added substring: results/
removed substring: output = Path(args.output)
This is a static transition proxy. The calibration asks whether it is at least strong enough to reject a deliberately inert near-miss before freeze.
The reference candidate:
Path(args.output) assignment;resolve_generated_output() boundary;.. traversal;results/;results/ symlink that escapes the repository;The candidate is expected to pass metadata verification and the behavioral matrix.
The decoy leaves the vulnerable assignment untouched and only appends a comment/string containing results/.
It therefore exercises the lexical half of the evaluator without performing the required transition:
added `results/` marker -> yes
removed unsafe assignment -> no
behavior changed -> no
The canonical v0.4 verifier must reject it because required removal evidence is absent.
Each case runs in a disposable checkout that is reset to the exact frozen source and re-applies the calibration transform independently.
Expected straightforward behavior:
| Case | Expected |
|---|---|
no --output |
success, schema-valid JSON on stdout |
--output results/task005-calibration/...json |
success, generated JSON under results/ |
--output README.md |
fail closed, README unchanged |
| absolute output path | fail closed, outside file absent |
../ traversal |
fail closed, outside file absent |
Expected decoy behavior:
The decoy behavior is intentionally safe to demonstrate because the checkout is isolated public test state with no secrets or canonical repository authority.
Calibration passes only if all of the following are true:
straightforward metadata status = passed
straightforward recommendation = accept_candidate
straightforward matched added = 1 / 1
straightforward matched removed = 1 / 1
straightforward behavioral matrix = safe
decoy metadata status = failed
decoy recommendation = reject_candidate
decoy matched added = 1 / 1
decoy matched removed = 0 / 1
decoy behavioral matrix = vulnerable behavior preserved
Both VerificationResults must retain exact EvaluatorPlan provenance, verifier 0.3.0, metadata-only execution mode, and semantic mode added_and_removed_line_substring_all.
A passing calibration does not mean:
It only retires one item from #180’s per-task pre-freeze calibration queue.