Skip to content

fix(code/edit): forgive flat/bare-string edit_mode + reject placeholder paths — the two barriers past the search-loop#1951

Merged
joelteply merged 1 commit into
canaryfrom
fix/code-edit-forgiveness
Jul 9, 2026
Merged

fix(code/edit): forgive flat/bare-string edit_mode + reject placeholder paths — the two barriers past the search-loop#1951
joelteply merged 1 commit into
canaryfrom
fix/code-edit-forgiveness

Conversation

@joelteply

Copy link
Copy Markdown
Contributor

Glass-boxed live (loop-perception PR #1950 got the 14B PAST the search-loop and hammering code/edit; these are the
two walls it then hit):

  1. edit_mode shape: it sent edit_mode:"append" (bare variant string) and, later, the fields flat at top level with
    no edit_mode at all. EditMode is a serde-tagged enum, so both 400'd at deserialize. Fix: edit_mode accepts a
    Value; normalize_edit_mode tries the strict tagged object first (unchanged), then a bare mode string, then
    INFERS the mode from which top-level fields are present (search/replace→search_replace, content→append, etc.),
    failing LOUD and naming the missing field (never a silent no-op → false-zero). Same "meet the model halfway"
    forgiveness as code/search fix(code/search): forgive glob-shaped pattern — list files instead of looping the search forever #1949; strict callers are untouched, so no regression.

  2. placeholder path: it wrote file_path:"<path_to_blueprints.py>" — echoing the schema's angle-bracket placeholder
    instead of the concrete path it had already seen in its search results. reject_placeholder_path fails loud on
    <...>/path_to/your_file templates and points at the real value ("use the path from your search results, e.g.
    src/flask/blueprints.py") instead of a confusing file-not-found.

VALIDATED live: with these, the inference path fires (she now sends content/search flat and the mode resolves) — the
remaining 0-diff is purely the placeholder path, which now fails loud with guidance instead of silently. Unit-tested
(strict/bare/inferred/loud-missing; placeholder-vs-real). The rails are now maximally forgiving; what's left past
this is base-model COHERENCE (it has the real path in memory but writes the template) — the Devstral lever, not more
tool fixes. [[px-persona-experience-tools-as-good-ux]] [[built-to-teach-lesser-tuned-intelligences-win]]

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo

…er paths — the two barriers past the search-loop

Glass-boxed live (loop-perception PR #1950 got the 14B PAST the search-loop and hammering code/edit; these are the
two walls it then hit):

1. edit_mode shape: it sent `edit_mode:"append"` (bare variant string) and, later, the fields flat at top level with
   no edit_mode at all. EditMode is a serde-tagged enum, so both 400'd at deserialize. Fix: `edit_mode` accepts a
   Value; `normalize_edit_mode` tries the strict tagged object first (unchanged), then a bare mode string, then
   INFERS the mode from which top-level fields are present (search/replace→search_replace, content→append, etc.),
   failing LOUD and naming the missing field (never a silent no-op → false-zero). Same "meet the model halfway"
   forgiveness as code/search #1949; strict callers are untouched, so no regression.

2. placeholder path: it wrote `file_path:"<path_to_blueprints.py>"` — echoing the schema's angle-bracket placeholder
   instead of the concrete path it had already seen in its search results. `reject_placeholder_path` fails loud on
   `<...>`/`path_to`/`your_file` templates and points at the real value ("use the path from your search results, e.g.
   src/flask/blueprints.py") instead of a confusing file-not-found.

VALIDATED live: with these, the inference path fires (she now sends content/search flat and the mode resolves) — the
remaining 0-diff is purely the placeholder path, which now fails loud with guidance instead of silently. Unit-tested
(strict/bare/inferred/loud-missing; placeholder-vs-real). The rails are now maximally forgiving; what's left past
this is base-model COHERENCE (it has the real path in memory but writes the template) — the Devstral lever, not more
tool fixes. [[px-persona-experience-tools-as-good-ux]] [[built-to-teach-lesser-tuned-intelligences-win]]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
@joelteply joelteply merged commit 21cb21b into canary Jul 9, 2026
@joelteply joelteply deleted the fix/code-edit-forgiveness branch July 9, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant