23d89b2831
Two services down read "Мониторинг сообщает: nginx, paperless лежит." — a list
dropped into the singular sentence. Russian agrees the verb with the subject,
so the noun, the verb and the adjective all have to move.
A family may now carry a second set named <rule>_many, used when {service}
holds more than one name. pluralFamily picks it; a family with no _many set is
returned unchanged, so adding one elsewhere is a data change. Only service_down
has one.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011x5DgnExQ5XZy8TZPs5bot
142 lines
7.1 KiB
JSON
142 lines
7.1 KiB
JSON
{
|
||
"schema_version": 1,
|
||
"name": "russian nudge templates v1",
|
||
"notes": [
|
||
"Hand-written Russian nudges. Edit the wording here, no Go changes needed.",
|
||
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never plural imperatives (выпейте), never он/его about him.",
|
||
"One short sentence. No questions, no emoji, no pet names, no emotional support.",
|
||
"Placeholders: {since} how long it has been (only used when it is at least an hour), {service} the service name, {what} the routine name. A variant whose placeholder has no value is skipped, so every rule needs at least one variant with no placeholder. The exception is routine, morning and service_down: those only exist for rules that always carry a name, and one that drops the name is useless.",
|
||
"A rule may carry a second set named <rule>_many, used when {service} holds more than one name. Russian agrees the verb with the subject, so the plural needs its own wording rather than a list dropped into the singular sentence. Only service_down has one.",
|
||
"mood must be one of: neutral, happy, thinking, tired, confused."
|
||
],
|
||
"rules": {
|
||
"water": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Ты не пил воду {since} — выпей стакан.",
|
||
"Пора выпить воды.",
|
||
"Стакан воды не помешает.",
|
||
"Воду ты не пил уже {since}.",
|
||
"Напоминаю про воду.",
|
||
"Сходи за водой, дела подождут.",
|
||
"Сделай глоток воды, пока помнишь.",
|
||
"Между делом выпей воды.",
|
||
"Вода — простое дело: выпей стакан.",
|
||
"Отвлекись на стакан воды."
|
||
]
|
||
},
|
||
"meal": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Ты не ел {since} — поешь.",
|
||
"Пора поесть, сделай перекус.",
|
||
"Еда важнее ещё одного часа за столом.",
|
||
"Без еды уже {since}, поешь.",
|
||
"Напоминаю про еду — поешь.",
|
||
"Возьми перерыв на обед.",
|
||
"Сделай себе перекус, это пять минут.",
|
||
"Поешь, потом вернёшься к работе.",
|
||
"Поешь нормально, а не на ходу.",
|
||
"Еды не было {since} — разогрей что-нибудь."
|
||
]
|
||
},
|
||
"break": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Ты за столом {since} — встань и разомнись.",
|
||
"Пора сделать перерыв.",
|
||
"Встань на пять минут.",
|
||
"{since} без перерыва — отойди от экрана.",
|
||
"Напоминаю про перерыв.",
|
||
"Разомни спину, потом продолжишь.",
|
||
"Короткая пауза не сорвёт дела.",
|
||
"Отойди от компьютера на минуту.",
|
||
"Сидишь без перерыва {since}.",
|
||
"Встань, пройдись, вернись."
|
||
]
|
||
},
|
||
"service_down": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Сервис {service} не отвечает.",
|
||
"{service} упал — сервис не отвечает.",
|
||
"{service} не отвечает, сервис нужно поднимать.",
|
||
"Сервис {service} недоступен.",
|
||
"Проверь {service}: сервис не отвечает.",
|
||
"Сервис {service} лежит, нужно смотреть.",
|
||
"Мониторинг сообщает: {service} лежит.",
|
||
"Сервис {service} не отвечает, посмотри логи."
|
||
]
|
||
},
|
||
"service_down_many": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Сервисы {service} не отвечают.",
|
||
"{service} упали — сервисы не отвечают.",
|
||
"{service} не отвечают, сервисы нужно поднимать.",
|
||
"Сервисы {service} недоступны.",
|
||
"Проверь {service}: сервисы не отвечают.",
|
||
"Сервисы {service} лежат, нужно смотреть.",
|
||
"Мониторинг сообщает: {service} лежат.",
|
||
"Сервисы {service} не отвечают, посмотри логи."
|
||
]
|
||
},
|
||
"netdata_critical": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Netdata: критический алярм, проверь диск.",
|
||
"Критический алярм в netdata — посмотри диск.",
|
||
"Netdata поднял тревогу по диску.",
|
||
"Проверь диск: netdata ругается.",
|
||
"Алярм от netdata, критический.",
|
||
"Netdata: критический уровень, дело в диске.",
|
||
"Диск требует внимания — критический алярм в netdata.",
|
||
"Критический алярм: проверь место на диске.",
|
||
"Netdata сообщает о критической проблеме с диском.",
|
||
"Открой netdata: там критический алярм по диску."
|
||
]
|
||
},
|
||
"routine": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"По распорядку: {what}.",
|
||
"Пора — {what}.",
|
||
"Напоминаю: {what}.",
|
||
"В списке на сейчас: {what}.",
|
||
"{what} — сейчас самое время.",
|
||
"Не пропусти: {what}.",
|
||
"{what}: пора сделать.",
|
||
"Сейчас по плану {what}.",
|
||
"Твой распорядок: {what}.",
|
||
"{what} — по распорядку сейчас."
|
||
]
|
||
},
|
||
"morning": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"{what} — пора начать день.",
|
||
"{what}: пройди утренний список.",
|
||
"Начни {what} со списка.",
|
||
"{what}. Осталось пройти чеклист.",
|
||
"Утренний список ещё не пройден: {what}.",
|
||
"{what}: первый пункт списка за тобой.",
|
||
"{what} идёт, а список стоит.",
|
||
"{what}: не забудь про утренние дела.",
|
||
"По утреннему чеклисту ещё есть дела: {what}.",
|
||
"{what} — утренний список дел ещё ждёт."
|
||
]
|
||
},
|
||
"default": {
|
||
"mood": "neutral",
|
||
"variants": [
|
||
"Напоминаю: есть дело.",
|
||
"Пора вернуться к отложенному делу.",
|
||
"Одно дело ждёт тебя.",
|
||
"Напоминаю про дело из списка.",
|
||
"В списке осталось дело.",
|
||
"Дело всё ещё не сделано."
|
||
]
|
||
}
|
||
}
|
||
}
|