Merge nucleic/jolly-coral-egret-smoz into dev

This commit is contained in:
2026-08-04 20:55:46 -07:00
parent 931e180f1c
commit 771f09ae38
+16 -1
View File
@@ -10,8 +10,16 @@ prose slice drops into `prepare_data.py` with no downstream change.
Only the prose reaches the canonical dataset. The user prompt is teacher-only context and
lives solely in the ignored candidate/state artifacts, as a hash in the audit sidecar.
Two failure modes are specific to this slice and are enforced rather than hoped for:
Three rules are specific to this slice and are enforced rather than hoped for:
* When a reply reports finishing one kind of work and announces another, the label is the
work it is *moving to*. This is the drift signal itself, and it is the one rule the
keyword heuristic can never learn — "I built the settings screen" and "next I'll build
the settings screen" have identical keywords and opposite meanings for Context Switch.
The rule is the same one the AFM template carries verbatim
(`IntelligenceDelegate.classifyReplyPurpose`), because a purpose-lite trained here is
meant to *replace* that AFM call (CONTEXT_SWITCH §3.2); a model taught to label the
completed work instead would offer a switch into work the session has already left.
* A reply that merely *asks* about work ("Should I start on the UI next?") states no
purpose of its own. Labeling it `frontendImpl` would teach the classifier to fire on
exactly the replies §4 of `docs/CONTEXT_SWITCH.md` requires it not fire on, so the
@@ -193,6 +201,13 @@ pure acknowledgements, pure status noise, scaffolding, and non-technical materia
that reports completed work is kept and labeled with that work's purpose, even when it
matches the preceding message's purpose.
When a reply reports finishing one kind of work and says it is moving to another, label the
work it is moving to: what the agent says it will do NEXT outranks what it reports having
just done. "The rate limiter is in and the tests pass. Next I'll wire up the settings
screen" is frontendImpl, not backendImpl. Label the completed work only when the prose
names nothing further. This is a statement about *reported* next work, not an offer — an
offer is still rejected by the rule above.
Set recoverableFromProse=true when the primary label is knowable from agent_reply_prose
alone. Set it false when you needed preceding_user_message to decide — a reply full of
pronouns referring back to the request is the common case. For false, retain the record but