v2.2.2 — a JD is source material, not a language signal
Corrects v2.2.1, which fixed the wrong half of the rule. If you are on v2.2.1, upgrade.
The bug is older than v2.2.1
"Output language" said: write in English by default, and match another language if either the user is clearly writing in one or the JD/briefing is in one.
Two different signals joined by an or — and the JD half let a piece of input data decide what language the user got spoken to in. Paste a Russian JD while writing in English, get a Russian report. The live run said so outright:
«Вакансия на русском языке, поэтому весь прогон веду по-русски.»
v2.2.1 made that branch work more reliably, which was the wrong direction.
The fix
The JD branch is gone. Only the user's own messages set the output language:
A JD, briefing, or profile is source material, not a language signal. Only the user's own messages decide the output language. A Russian JD pasted by someone who writes to you in English gets an English run: the posting is data to work from, not a sample of how they want to be spoken to. When a JD is the only input and there is no user message to judge — a hosted API call, for example — use the English default.
The Module 4 exception is unchanged: outreach still follows the candidate's likely language, with a one-line note when it differs. Its example was realigned — it described a Russian JD producing a Russian persona, which is what this release removes.
isCyrillicJd, added in v2.2.1, is removed: with the JD no longer a language signal there is nothing to detect, and the demo's turn-cap note is unconditionally English.
Anglicism rule
The banned list is unchanged («наблюдение», not «финдинг»). What is new is an explicit carve-out for established IT and recruiting usage — «кандидат», «гипотеза», «воронка», «локация», «стек», «аутрич», «сеньорность» are ordinary Russian and stay.
The rule previously carried one example, too few to generalise from, leaving the model to guess which borrowings count as jargon. A naive "no anglicisms" reading over-corrects into «соискатель» and «предположение», which is worse than any drift it would fix. Spelling is pinned to «сеньорность» over «сениорность».
Verification
Live run against the deployed demo with the same 3470-character Russian JD used to find the bug:
| v2.2.1 | v2.2.2 | |
|---|---|---|
| headings | 11 RU / 3 EN | 15 EN / 0 RU |
| addressed to the user | Russian | English |
| mixed-language headings | none | none |
| hh.ru consent gate | held | held |
| outreach (Module 4) | candidate's language | candidate's language |
The consent gate still declines explicitly and states why — "a Russian-language JD alone is not sufficient to fire that branch" — so the language change did not weaken it.
Full changelog: v2.2.1...v2.2.2