personal memory agent

fix(observe): stop retrying a frame whose reason code cannot change master

One predicate, is_non_retryable_generate_reason, lives beside the other provider reason-code semantics; both describe retry loops consult it identically. schema_invalid is deliberately not a member, preserving the highest-volume path's retry. A declining frame no longer burns five attempts, and the other frames' descriptions still land.


+232 -2
4 changed files