6fba4d6931
The PR 113 review found four defects in one line file. Swept the other four families and the Go side for the same four. The JSON was clean: no undeclared placeholder, no abbreviation spoken, no single-variant entry left unfixed. One register leak — page_blocked read "robots.txt" out loud, which is a filename, not a reason he can act on. The count rule was not clean. Four more copies of the three-way agreement existed and two of them were wrong: ruPlural produced «1 минут назад» and «5 часа назад» because formatTime spelled the noun out. pluralTasksRU was a fifth copy. All of them now call say.CountWord. The pending-notification summary picks the whole phrase, because the adjective declines with the noun.
116 lines
5.2 KiB
JSON
116 lines
5.2 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"name": "russian query answers and gaps v1",
|
|
"notes": [
|
|
"What a query source says when it answers from something other than the model, and what it says when it has nothing. Edit the wording here, no Go changes needed.",
|
|
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never он/его about him. No pet names.",
|
|
"A gap names its own gap. \"the feeds are not configured\", \"the search failed\" and \"I do not know\" are different sentences and must never collapse into one entry.",
|
|
"query_unknown here is a real answer — she looked and found nothing. The phraser's identical-looking line in fallbacks_ru_v1.json is a failure to phrase. Two files, two entries, on purpose, so no variant here may repeat a string from there.",
|
|
"Placeholders: {key} {value} a stored fact, {when} when she wrote it, {items} what she found, {text} a passage, {location} {temp} {condition} the weather, {word} the counted noun in the form {temp} needs, {tail} a caveat about how the answer was gathered.",
|
|
"A count never carries a hardcoded noun. Russian inflects it — 1 градус, 2 градуса, 5 градусов — so the number goes in {temp} and the noun comes from the Go helper through {word}.",
|
|
"{tail} is optional, and an entry that can be said without it needs one variant carrying no placeholder at all. Otherwise nothing is fillable and she says nothing, which he hears as a hang.",
|
|
"fixed: true means exactly one variant and no picking. Used where the wording is load-bearing: the personal boundary, and the refusal to re-ask a question for another day."
|
|
],
|
|
"entries": {
|
|
"query_unknown": {
|
|
"variants": ["ничего не нашла.", "искала — не нашла."]
|
|
},
|
|
"other_day": {
|
|
"fixed": true,
|
|
"variants": ["про другой день так не отвечу — спроси целиком."]
|
|
},
|
|
"personal_none": {
|
|
"fixed": true,
|
|
"variants": ["не знаю — не нашла у тебя такой записи."]
|
|
},
|
|
"fact_when": {
|
|
"fixed": true,
|
|
"variants": ["записала это {when}"]
|
|
},
|
|
"fact_value": {
|
|
"variants": ["у меня записано: {key} — {value}", "вот что записано: {key} — {value}"]
|
|
},
|
|
"found": {
|
|
"variants": ["вот что я нашла: {text}", "нашла вот это: {text}", "есть такое: {text}"]
|
|
},
|
|
"page_text": {
|
|
"variants": ["вот что на странице: {text}", "на странице вот это: {text}"]
|
|
},
|
|
"page_blocked": {
|
|
"fixed": true,
|
|
"variants": ["эта страница закрыта для чтения — сам сайт это запрещает."]
|
|
},
|
|
"page_empty": {
|
|
"fixed": true,
|
|
"variants": ["страница открылась, но читать там нечего."]
|
|
},
|
|
"feeds_off": {
|
|
"fixed": true,
|
|
"variants": ["ленты не настроены."]
|
|
},
|
|
"feeds_new": {
|
|
"variants": ["вот что нового: {items}", "нового вот что: {items}"]
|
|
},
|
|
"feeds_empty": {
|
|
"variants": ["в лентах пока ничего нового.", "в лентах тихо."]
|
|
},
|
|
"feeds_empty_topic": {
|
|
"variants": ["по этой теме в лентах пока ничего.", "по этой теме в лентах тихо."]
|
|
},
|
|
"weather_now": {
|
|
"variants": ["в {location} сейчас {temp} {word}, {condition}.", "{location}: {temp} {word}, {condition}."]
|
|
},
|
|
"weather_off": {
|
|
"fixed": true,
|
|
"variants": ["погода не настроена."]
|
|
},
|
|
"weather_nolocation": {
|
|
"fixed": true,
|
|
"variants": ["для какого города?"]
|
|
},
|
|
"net_off": {
|
|
"fixed": true,
|
|
"variants": ["сканирование сети не настроено."]
|
|
},
|
|
"page_off": {
|
|
"fixed": true,
|
|
"variants": ["я не читаю страницы — это не настроено."]
|
|
},
|
|
"net_empty": {
|
|
"variants": ["в сети никого не нашла.", "в сети никого не нашла{tail}."]
|
|
},
|
|
"fail_plan": {
|
|
"fixed": true,
|
|
"variants": ["не получилось собрать план."]
|
|
},
|
|
"fail_notes": {
|
|
"fixed": true,
|
|
"variants": ["не получилось посмотреть записи."]
|
|
},
|
|
"fail_feeds": {
|
|
"fixed": true,
|
|
"variants": ["не получилось посмотреть ленты."]
|
|
},
|
|
"fail_calendar": {
|
|
"fixed": true,
|
|
"variants": ["не получилось проверить календарь."]
|
|
},
|
|
"fail_weather": {
|
|
"fixed": true,
|
|
"variants": ["не получилось узнать погоду."]
|
|
},
|
|
"fail_answer": {
|
|
"fixed": true,
|
|
"variants": ["не получилось найти ответ."]
|
|
},
|
|
"fail_page": {
|
|
"fixed": true,
|
|
"variants": ["не получилось прочитать страницу."]
|
|
},
|
|
"fail_netscan": {
|
|
"fixed": true,
|
|
"variants": ["не получилось просканировать сеть."]
|
|
}
|
|
}
|
|
}
|