v2.2.1 — output language judged by the JD's body text
Superseded by v2.2.2 — do not rely on the behavior described below.
This release made the JD's language decide the output language. That was the wrong call: a JD is source material, not a signal for how the user wants to be addressed, so pasting a Russian JD while writing in English produced a Russian report. v2.2.2 removes that branch — only the user's own messages set the output language.
What still holds from this release: section headings are named explicitly in the rule, and mixing languages mid-phrase is forbidden.
The original notes are kept below for history.
Corrects existing behavior; no new features.
Output language follows the JD's body text
A Russian JD came back with English section headings over Russian prose — in the worst cases mixed mid-phrase ("Part A — Boolean строки").
SKILL.md's "Output language" rule already said to match the JD's language, but it had two gaps: it listed persona, tables, and the Cowork block without naming headings, and it never said how to determine the JD's language.
Both closed:
- Section headings are named explicitly, and mixed output is forbidden — a Russian run gets Russian headings, not English ones over Russian prose.
- The JD is judged by its body prose, not its job title. Role titles are routinely English inside an otherwise non-English posting ("Lead Generation Manager" heading a Russian JD), as are tool and platform names (dbt, Snowflake, LinkedIn). None of those make it an English JD.
The Module 4 exception is unchanged: outreach still follows the candidate's likely language, with a one-line note when it differs from the rest of the run.
Demo: the turn-cap note follows the JD too
The hosted demo's turn-cap note was hardcoded English, so a Russian run ended on an English sentence. It is appended by the Worker once the agent is out of turns, so no model call can write it — the language is now decided in code from the JD's script, judged on the body's letters rather than the title.
Known limitation: this distinguishes Russian from English only, where the model-side rule covers every language. A Russian JD consisting almost entirely of English tool names would still get an English note; prose-bearing JDs do not trigger this in practice. It affects a cosmetic note on a rare path.
Verification
Live run against the deployed demo with a real 3470-character Russian JD:
| run | headings | mixed-language headings |
|---|---|---|
| before the drift | 11 RU / 3 EN | none |
| with the drift | 13 EN / 2 RU | yes |
| v2.2.1 | 11 RU / 3 EN | none |
The three English headings that remain are the outreach variants, which should be English under the Module 4 exception — the rule is discriminating, not blanket-forcing.
Heading language was non-deterministic before this change, so a single run is good evidence rather than proof.
Full changelog: v2.2.0...v2.2.1