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

This commit is contained in:
2026-08-04 16:15:55 -07:00
parent 1a41febf73
commit 931e180f1c
8 changed files with 1653 additions and 12 deletions
+28
View File
@@ -205,6 +205,34 @@ Use a fresh `--output` path for the dry run, then manually audit it before invok
full resumable run. Cases marked `recoverableFromFirst=false` remain `vague-eval`
abstention evidence and are excluded from optimization.
## Assistant-prose slice
Context Switch (`docs/CONTEXT_SWITCH.md` §3.2) classifies the agent's settled-turn reply as
well as the user's prompt, but everything above trains on prompts only. This slice adds the
missing register from the same pinned snapshot: turn-ending `assistant_response` rows, with
the student text produced by `prose_extract.py` — a port of the runtime's own
`HeuristicSummary.contextSwitchReplyProse`, pinned to it by
`Tests/NucleicCoreTests/Fixtures/context-switch-prose.json` so the model trains on exactly
the text it is later asked to classify.
```bash
ml/purpose-classifier/.venv/bin/python \
ml/purpose-classifier/export_swe_chat_prose.py \
--revision <accepted-immutable-hf-revision>
ml/purpose-classifier/.venv/bin/python \
ml/purpose-classifier/label_swe_chat_prose.py --limit-replies 1
ml/purpose-classifier/.venv/bin/python \
ml/purpose-classifier/label_swe_chat_prose.py --limit-replies 100
```
The teacher reads the reply prose and the user message that opened the turn; only the prose
reaches the canonical record, with the user message kept as a hash in the audit sidecar.
`recoverableFromProse=false` is the reply-side counterpart of `recoverableFromFirst` and is
likewise `vague-eval` evidence, never training data. A reply that only *offers* work
("Should I start on the settings screen?") must be rejected rather than labeled with the
work it asks about; the run prints `endingInQuestion` alongside `endingInQuestionRejected`
so that rule can be verified on the dry run instead of assumed.
## Prepare
From the repository root: