What
English and Spanish live in lang.py, locales/<tag>/bundle.yaml, the guards' certification vocabulary (which #137 shows is English-only in one suite), routing phrases, the escalation card, .es.md corpus mirrors, and per-case eval anchors. E6 in docs/RESEARCH-ROADMAP.md calls for language expansion gated on parity, and it has not been filed or built. The blocker is that "a language" is scattered across six places with no contract.
Define a language pack: the locale bundle, deny-list and certification vocabulary, routing and urgency phrases, escalation-card strings, corpus mirrors, and eval mirror cases anchored to their English cases, plus a reviewed_by attestation naming a human reviewer (never raw machine translation, per the research roadmap). Add sprout lang check <tag> that verifies completeness against the English set, and refuse to enable a pack that fails it. The multilingual and language-parity suites include any enabled tag.
Why it matters
Lucía and Ruth (USER-RESEARCH A4, B2) are the case for Spanish; a Vietnamese or Tagalog household is the same case. A pack contract makes the next language a data contribution with a gate, and it makes the existing two languages mechanically complete, which #137 shows they are not.
Scope
- Pack schema and loader;
lang check; per-pack completeness in corpus-report.
- Refactor the English and Spanish surfaces into packs with no behaviour change.
- A demo
pt pack covering two species, marked unreviewed and therefore not enabled.
Out of scope
- Authoring a full third language.
- Machine translation of any string.
Done when
- Enabling a pack missing one guard string is refused naming the key.
en and es eval reports are byte-identical after the refactor.
- The demo
pt pack passes lang check and the parity suites over its two species.
- A pack without
reviewed_by cannot be enabled.
Pointers
Proposed with AI assistance.
What
English and Spanish live in
lang.py,locales/<tag>/bundle.yaml, the guards' certification vocabulary (which #137 shows is English-only in one suite), routing phrases, the escalation card,.es.mdcorpus mirrors, and per-case eval anchors. E6 indocs/RESEARCH-ROADMAP.mdcalls for language expansion gated on parity, and it has not been filed or built. The blocker is that "a language" is scattered across six places with no contract.Define a language pack: the locale bundle, deny-list and certification vocabulary, routing and urgency phrases, escalation-card strings, corpus mirrors, and eval mirror cases anchored to their English cases, plus a
reviewed_byattestation naming a human reviewer (never raw machine translation, per the research roadmap). Addsprout lang check <tag>that verifies completeness against the English set, and refuse to enable a pack that fails it. The multilingual and language-parity suites include any enabled tag.Why it matters
Lucía and Ruth (USER-RESEARCH A4, B2) are the case for Spanish; a Vietnamese or Tagalog household is the same case. A pack contract makes the next language a data contribution with a gate, and it makes the existing two languages mechanically complete, which #137 shows they are not.
Scope
lang check; per-pack completeness incorpus-report.ptpack covering two species, marked unreviewed and therefore not enabled.Out of scope
Done when
enandeseval reports are byte-identical after the refactor.ptpack passeslang checkand the parity suites over its two species.reviewed_bycannot be enabled.Pointers
src/sprout/lang.py,src/sprout/locales/,src/sprout/guards.py,src/sprout/eval/suites/multilingual.py,src/sprout/eval/suites/language_parity.py,docs/ADAPT.mdStep 6, The safety suite's certification vocabulary is English-only, so its 11 Spanish toxicity cases cannot detect a Spanish safety certification #137Proposed with AI assistance.