Follows 8c9f947, which taught the trigger shape on the two update_*
surfaces but left the softer regression unguarded: guidance kept and
abstracted back to "name the moment in session vocabulary" — advice about
being concrete that is not itself concrete, which is the shape that was
already on file while the corpus filled with categories.
Two attempts to detect that in free prose were written and discarded:
- Counting quoted multi-word phrases anywhere in a docstring measured
ambient quotation rather than demonstrated triggers. It PASSED the
abstracted version by scoring unrelated prose, and text with an odd
number of quote characters produced matches spanning the gap BETWEEN two
unrelated phrases.
- Scoping that count to a window after each trigger mention then FAILED
create_preference in its CORRECT state, its examples sitting further from
the first mention than any defensible window reaches.
Both were proxies inferring demonstration from prose. Where a property
cannot be measured, changing the shape of the thing is cheaper than a
cleverer measurement — so all five trigger-writing surfaces now carry a
two-line labelled contrast:
RETRIEVES: "the migration failed with a check violation on a column we
just extended"
COLLAPSES: "when working on migrations"
Unambiguous to parse, free in its wording, and a better teaching form than
the sentences it replaces: the labels name the mechanism, so they do work
for the reader rather than only for the test.
The guard now pins both halves — the field is documented, and the contrast
is present, complete and non-identical. Falsified against three regressions
before committing: the paragraph stripped, the examples abstracted away,
and one half of the pair removed. All three fail; the current tree passes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011cPyzNnegXHr5iRMzzy5KJ