Repository navigation
Plan Offensive Words
Source of truth: this wiki page.
Written 2026-10-09. Tracks #96 (offensive words behind an adult gate),
whose rules stand: decks marked audience: adult are hidden until the
learner turns on adult content and confirms they are 18 or over, per
profile; never in a child profile (#97), where the sound-alike and
look-alike warnings are not shown either (profiles.md); a disclaimer before the first
card; offensive cards are recognition only, never typed or said; a
speaker reviews every card before it ships, Telugu included.
The offensive words deck needs to be built soon. With offensiveness level. Also, any words that sound similar should have a warning about its similarity to an offensive word, and as such needs extra care when writing or speaking (two separate similarity matrices)
-
A level on every offensive card, from the research in
docs/research/offensiveness-scale.md(owner, 2026-10-09):- Four bands: mild, medium, strong, strongest, meaning how a native speaker hears the word in general (Janschewitz 2008's question), not how strong it feels to the learner, since learners misjudge both ways (Dewaele 2004, 2016).
- Slurs (caste, religion, ethnicity, disability, gender) are always strongest, with their own warning.
- Each card also has a type (swear, slur, sexual, family insult), whether it can be friendly among peers, and a region note where speakers differ.
- Levels set by several native raters per language: agents draft the list and a provisional level; several native speakers, from more than one region where possible, rate each word ("How offensive is this word to native speakers in general?", 1 to 9; the owner's wording, after Janschewitz 2008's "to people in general"); the median sets the band, by written cut-offs; slurs strongest by rule; a disagreement of a band or more becomes a region note. Nothing ships before (owner).
- Two similarity lists, found by a tool and confirmed by a person: a tool compares every word of a language with its offensive words twice, by sound (IPA) and by writing (the script and ISO 15919 letters), and lists the close pairs. A reviewer keeps the real ones, each with a note on what to take care of ("keep the long ā"), at most 40 letters, with the budget shown as you type ("30/40 letters"; owner, 2026-10-09): "sounds like" means care when speaking, "looks like" care when writing. The validator warns about a close pair left unexplained.
- Without adult content on, a learner meeting such a word sees the warning with the offensive word hidden: "Careful: said slightly wrong, this sounds like a rude word. Keep the long ā." The word itself shows only with adult content on.
- When: the format (the level, the gate, the two warnings, the tool) goes into the B1 format now; the Bengali and Telugu agents write the offensive decks and the warnings as part of their courses, shipping only once a speaker has reviewed them.
With Adult content off, an adult deck is "Hidden everywhere": not listed,
not taught, and not in Today, reviews or practice; it comes back when the
setting is turned on. The setting is off by default. An adult deck is one
tagged offensive; a rude card is one tagged or registered offensive, and
one inside an ordinary deck follows the same rule. The sound-alike warning
still shows with the setting off, with the rude word hidden. The
audience: adult deck field, the per-profile 18+ confirmation, the
disclaimer and the child-profile rule are not built yet.
Merge, reviewer-only until rated
The offensive decks are written and merged now. A deck tagged offensive
whose words no native speaker has rated is unrated: no learner ever sees
it, with Adult content on or off. It is not listed, taught, in Today,
reviews, practice or search, and only the language's Offensive words review
lists it, and only when the reviewer has Adult content on (owner, 2026-10-24: "Require Adult on"), where the raters score each word 1 to 9. Once the median of the
raters has set each word's band, the deck gains the deck tag rated and
follows the adult gate above.
How "rated" is written: as the deck tag rated, beside offensive
(ratedTag in lib/core/decks/adult_gate.dart). It is an ordinary tag, so no
new deck key and no new release is needed: an app that does not know it reads
the deck as before, and the validator rejects rated on a deck not tagged
offensive. The ratings themselves stay in the reviewers' files, sent by
mail; the tag is added by hand when they are in. The planned per-card level
(mild to strongest) is still not a card key: it is a new key, which released
apps reject, so the app must read it a release before decks use it
(tools/pick_warning.py waits for it as well). A released app that has the
adult gate but not this rule shows an unrated deck to a learner with Adult
content on; a deck should not be merged before the release that has the rule.
tools/offensive_alikes.py <decks> [--language te] [--unexplained] compares
each word of a language with its offensive words (a card registered or
tagged offensive, or in a deck tagged so), by IPA (at most one segment
apart) and by writing (the script, or the ISO 15919-based reading, at most
one letter or mark apart; a length mark or a dot is one), and prints the
close pairs for a reviewer. Words of fewer than three segments or letters
and pairs of two offensive words are left out. A kept pair is explained by a
pair note naming the offensive word by ref (sound), or a lookalike or
homograph note (writing), either on the word or on the offensive word. The
validator warns of a pair no note explains (a warning, never an error); a
pair a reviewer rejects has no way to be marked yet, so it keeps warning.
Defer both to the offensive-words work
Both are built when the offensive-words ratings live in the repo:
-
The validator check: a card in the ratings must carry
register: "offensive". -
Register on rules-table cells: cells gain a
registerfield.
See also: Roadmap · Plans-Index · Home
1. Learner guides
- Learner Guide
- Getting Started
- Today and Daily Lessons
- Drills and Skills
- Courses and Paths
- Proficiency Levels
- Scripts and Readings
- Readings ISO 15919
- Speaking and Listening
- Progress and Stats
- Profiles and Settings
- Backup and Restore
- Reporting a Problem
2. Deck building guides
- Deck Building Guide
- Deck Format
- Romanising Indic Languages
- Deck Licences and Quoted Books
- Deck Tools
3. Review guides
4. Translation guide
5. Building on iOS
6. Roadmap
7. Sources and attributions
8. Contribution and agentic coding