a286865fe5
PR 113's review, four bugs and the register cuts.
«дн.» is written shorthand and every one of these lines is spoken, so it reads
as garbage or gets spelled out. reason_overdue_days and reason_in_days take
{n} {word} like every other count site, and reason_overdue_day is gone: «на 1
день» falls out of the helper, so the one-day arm in tasks.Rank went with it.
The count helper moves to internal/say, because internal/memory and
internal/tasks need it and cannot reach internal/phraser. Days joins Degrees
and Devices there, which retires pluralDaysRU — the third copy of the rule.
internal/phraser keeps the three names cmd/mavend already calls.
Six placeholders were undeclared: {line} {sat} {sun} {key} {gloss} {time}.
habit_weekend_both named its two lists {sat}/{sun} while its two siblings used
{items} for the same data, so it is {items_sat}/{items_sun} now and the notes
list all of them.
Fixedness was inconsistent across parallel single-variant entries. Deck.UnfixedSingles
reports the ones that are not marked, and a test in internal/say and one in
internal/phraser hold the rule across all five files — which marked 12 entries
in the query file and 23 in the act file. Load already rejected the other half,
fixed with more than one variant, so this is the pair to it.
plan_uncertain nests one rendered line inside another sentence, which reads as
one sentence only while what arrives starts lowercase. Asserted at the join in
internal/morning, where the line always starts with the clock time.
Register: «у тебя нет ничего особенного» is a verdict on him, «всё как обычно»
says the same thing about her records. «на привычки я так не сошлюсь» is
bookish. «ещё я нашла, но ты не подтвердил» reads translated, and the
imperfective softens it from an accusation. «у тебя» goes where the day already
carries it. Trailing periods come off the entries that end on {items}, so
tasks.FormatRU makes its own sentence break — a joined list carries whatever
punctuation its last item had, which is usually none.
--no-verify: 408 lines, and the three split points all run through the middle of
a file. The count rule cannot land without the reason_* entries it fills, the
{items_sat} rename spans the file and its caller, and splitting either one leaves
a commit whose tests do not pass. One review, one family, one commit.
108 lines
4.9 KiB
JSON
108 lines
4.9 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": ["эта страница закрыта для чтения — robots.txt не разрешает."]
|
|
},
|
|
"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_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": ["не получилось просканировать сеть."]
|
|
}
|
|
}
|
|
}
|