Strings family 6: summaries and reports into summary_ru_v1.json #113

Closed
claude wants to merge 4 commits from task/506-strings-family-6-summaries-and-reports-i into task/504-strings-family-4-act-and-smart-home-repl
Showing only changes of commit d819fc09f0 - Show all commits
+140
View File
@@ -0,0 +1,140 @@
{
Review

bugs first — and one of them is mine from the previous file.

json
"plan_rest_empty": { "fixed": true, "variants": ["на сегодня больше ничего не запланировано."] },
"plan_day_empty": { "fixed": true, "variants": ["на {date} ничего не запланировано."] },
"plan_day": { "fixed": true, "variants": ["план на {date}: {items}"] },
"plan_uncertain": { "fixed": true, "variants": ["похоже, {line}"] },

"tasks_none": { "fixed": true, "variants": ["задач нет."] },
"tasks_first": { "fixed": true, "variants": ["сначала: {items}"] },
"tasks_candidates": { "fixed": true, "variants": ["нашла ещё, но ты не подтверждал: {items}"] },

"reason_overdue": { "fixed": true, "variants": ["просрочено"] },
"reason_overdue_days": { "fixed": true, "variants": ["просрочено на {n} {word}"] },
"reason_today": { "fixed": true, "variants": ["сегодня"] },
"reason_tomorrow": { "fixed": true, "variants": ["завтра"] },
"reason_in_days": { "fixed": true, "variants": ["через {n} {word}"] },
"reason_important": { "fixed": true, "variants": ["важно"] },
"reason_urgent": { "fixed": true, "variants": ["срочно"] },
"reason_stale": { "fixed": true, "variants": ["давно в списке"] },

"habit_weekday": { "fixed": true, "variants": ["по {day} ты обычно {items}."] },
"habit_weekday_same": { "fixed": true, "variants": ["по {day} всё как обычно — то же, что и в остальные дни: {items}."] },
"habit_weekday_none": { "variants": ["по {day} я пока не вижу ничего постоянного.", "по {day} постоянного пока не вижу — записей мало."] },
"habit_weekend_both": { "fixed": true, "variants": ["по субботам ты обычно {items_sat}, по воскресеньям — {items_sun}."] },
"habit_weekend_sat": { "fixed": true, "variants": ["по субботам ты обычно {items}, а по воскресеньям постоянного нет."] },
"habit_weekend_sun": { "fixed": true, "variants": ["по воскресеньям ты обычно {items}, а по субботам постоянного нет."] },
"habit_weekend_same": { "fixed": true, "variants": ["по выходным всё как обычно — то же, что и в остальные дни: {items}."] },
"habit_weekend_none": { "variants": ["по выходным я пока не вижу ничего постоянного.", "по выходным постоянного пока не вижу — записей мало."] },
"habit_overall": { "fixed": true, "variants": ["обычно ты {items} — {span}."] },
"habit_overall_none": { "variants": ["записей пока мало, про привычки не скажу.", "пока мало записей, чтобы говорить о привычках."] },
"habit_span_today": { "fixed": true, "variants": ["по записям за сегодня"] },
"habit_span_days": { "fixed": true, "variants": ["по записям за последние {n} {word}"] },
"habit_unglossed": { "fixed": true, "variants": ["отмечаешь «{key}»"] },
"habit_at": { "fixed": true, "variants": ["{gloss} около {time}"] }

bug 1 — «дн.» is a written abbreviation and this thing talks. «просрочено на 5 дн.» through TTS reads as garbage or gets spelled out. you already built {word} for exactly this; the reason_* entries just don't use it. switching them also deletes reason_overdue_day as a separate key — «просрочено на 1 день» falls out of the helper, no special case needed.

and my correction: {temp}° in the query file has the same defect. i suggested it to dodge declension, which was right for a text UI and wrong for voice — ° reads as nothing on most engines. use {temp} {word} there too and let the helper handle градус/градуса/градусов. one helper, every count site.

bug 2 — five undeclared placeholders. {line}, {sat}, {sun}, {key}, {gloss}, {time}. worse, habit_weekend_both uses {sat}/{sun} while its two siblings use {items} for the same data — three parallel entries, two schemes, and the caller has to remember which. i renamed to {items_sat}/{items_sun} so the family reads consistently, but pick whatever matches the Go side and get all six into the notes.

bug 3 — fixedness is inconsistent across parallel entries. habit_weekday is fixed, habit_weekend_both isn't, and both have exactly one variant. same for habit_overall, both habit_span_*. per your own note that's a schema violation waiting on a linter — worth one test that asserts single-variant ⇒ fixed, across all five files.

bug 4 — plan_uncertain nests phraser output. «похоже, {line}» prepends onto another rendered string. if {line} ever arrives capitalised or already hedged you get «похоже, На сегодня…» or a double hedge. flat-out fine as a mechanism, fragile as a composition — assert lowercase-first on {line} at the join.

register cuts, same filters as the other files:

«у тебя нет ничего особенного» — that's a verdict on him, not on the data. «всё как обычно» says the same thing about records instead of about his life. this was the only editorialising line in the file.
«на привычки я так не сошлюсь» — bookish. «про привычки не скажу.» is the same claim in your register.
«ещё я нашла, но ты не подтвердил» — word order reads translated; «нашла ещё, но ты не подтверждал» is spoken. imperfective also softens it from an accusation to a note.
dropped «у тебя» where it was filler — «по {day} я пока не вижу ничего постоянного.» carries it already.
trailing periods after {items} removed on plan_day / tasks_first / tasks_candidates, since a joined list arrives with its own punctuation and you were getting «…: сделать X..» — the habit entries keep theirs because there the list is mid-sentence.

the hedging discipline in this file is the best of the five, for what it's worth. «пока не вижу» rather than «нет» is the same distinction as «вроде, оно» and it's load-bearing in a place where a confident wrong claim about his own habits would be genuinely irritating.

bugs first — and one of them is mine from the previous file. json "plan_rest_empty": { "fixed": true, "variants": ["на сегодня больше ничего не запланировано."] }, "plan_day_empty": { "fixed": true, "variants": ["на {date} ничего не запланировано."] }, "plan_day": { "fixed": true, "variants": ["план на {date}: {items}"] }, "plan_uncertain": { "fixed": true, "variants": ["похоже, {line}"] }, "tasks_none": { "fixed": true, "variants": ["задач нет."] }, "tasks_first": { "fixed": true, "variants": ["сначала: {items}"] }, "tasks_candidates": { "fixed": true, "variants": ["нашла ещё, но ты не подтверждал: {items}"] }, "reason_overdue": { "fixed": true, "variants": ["просрочено"] }, "reason_overdue_days": { "fixed": true, "variants": ["просрочено на {n} {word}"] }, "reason_today": { "fixed": true, "variants": ["сегодня"] }, "reason_tomorrow": { "fixed": true, "variants": ["завтра"] }, "reason_in_days": { "fixed": true, "variants": ["через {n} {word}"] }, "reason_important": { "fixed": true, "variants": ["важно"] }, "reason_urgent": { "fixed": true, "variants": ["срочно"] }, "reason_stale": { "fixed": true, "variants": ["давно в списке"] }, "habit_weekday": { "fixed": true, "variants": ["по {day} ты обычно {items}."] }, "habit_weekday_same": { "fixed": true, "variants": ["по {day} всё как обычно — то же, что и в остальные дни: {items}."] }, "habit_weekday_none": { "variants": ["по {day} я пока не вижу ничего постоянного.", "по {day} постоянного пока не вижу — записей мало."] }, "habit_weekend_both": { "fixed": true, "variants": ["по субботам ты обычно {items_sat}, по воскресеньям — {items_sun}."] }, "habit_weekend_sat": { "fixed": true, "variants": ["по субботам ты обычно {items}, а по воскресеньям постоянного нет."] }, "habit_weekend_sun": { "fixed": true, "variants": ["по воскресеньям ты обычно {items}, а по субботам постоянного нет."] }, "habit_weekend_same": { "fixed": true, "variants": ["по выходным всё как обычно — то же, что и в остальные дни: {items}."] }, "habit_weekend_none": { "variants": ["по выходным я пока не вижу ничего постоянного.", "по выходным постоянного пока не вижу — записей мало."] }, "habit_overall": { "fixed": true, "variants": ["обычно ты {items} — {span}."] }, "habit_overall_none": { "variants": ["записей пока мало, про привычки не скажу.", "пока мало записей, чтобы говорить о привычках."] }, "habit_span_today": { "fixed": true, "variants": ["по записям за сегодня"] }, "habit_span_days": { "fixed": true, "variants": ["по записям за последние {n} {word}"] }, "habit_unglossed": { "fixed": true, "variants": ["отмечаешь «{key}»"] }, "habit_at": { "fixed": true, "variants": ["{gloss} около {time}"] } bug 1 — «дн.» is a written abbreviation and this thing talks. «просрочено на 5 дн.» through TTS reads as garbage or gets spelled out. you already built {word} for exactly this; the reason_* entries just don't use it. switching them also deletes reason_overdue_day as a separate key — «просрочено на 1 день» falls out of the helper, no special case needed. and my correction: {temp}° in the query file has the same defect. i suggested it to dodge declension, which was right for a text UI and wrong for voice — ° reads as nothing on most engines. use {temp} {word} there too and let the helper handle градус/градуса/градусов. one helper, every count site. bug 2 — five undeclared placeholders. {line}, {sat}, {sun}, {key}, {gloss}, {time}. worse, habit_weekend_both uses {sat}/{sun} while its two siblings use {items} for the same data — three parallel entries, two schemes, and the caller has to remember which. i renamed to {items_sat}/{items_sun} so the family reads consistently, but pick whatever matches the Go side and get all six into the notes. bug 3 — fixedness is inconsistent across parallel entries. habit_weekday is fixed, habit_weekend_both isn't, and both have exactly one variant. same for habit_overall, both habit_span_*. per your own note that's a schema violation waiting on a linter — worth one test that asserts single-variant ⇒ fixed, across all five files. bug 4 — plan_uncertain nests phraser output. «похоже, {line}» prepends onto another rendered string. if {line} ever arrives capitalised or already hedged you get «похоже, На сегодня…» or a double hedge. flat-out fine as a mechanism, fragile as a composition — assert lowercase-first on {line} at the join. register cuts, same filters as the other files: «у тебя нет ничего особенного» — that's a verdict on him, not on the data. «всё как обычно» says the same thing about records instead of about his life. this was the only editorialising line in the file. «на привычки я так не сошлюсь» — bookish. «про привычки не скажу.» is the same claim in your register. «ещё я нашла, но ты не подтвердил» — word order reads translated; «нашла ещё, но ты не подтверждал» is spoken. imperfective also softens it from an accusation to a note. dropped «у тебя» where it was filler — «по {day} я пока не вижу ничего постоянного.» carries it already. trailing periods after {items} removed on plan_day / tasks_first / tasks_candidates, since a joined list arrives with its own punctuation and you were getting «…: сделать X..» — the habit entries keep theirs because there the list is mid-sentence. the hedging discipline in this file is the best of the five, for what it's worth. «пока не вижу» rather than «нет» is the same distinction as «вроде, оно» and it's load-bearing in a place where a confident wrong claim about his own habits would be genuinely irritating.
"schema_version": 1,
"name": "russian summary sentences v1",
"notes": [
"The sentences she builds around aggregated data: the morning plan, the ranked task list, and the habits she reads back out of behaviour records.",
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never он/его about him. No pet names.",
"\"I have not seen enough yet\" and \"there is nothing there\" are different claims, and the habit entries keep the first. Three days of taps do not license a statement about his life, so habit_*_none says she does not see a pattern, never that he has no habits.",
"Placeholders: {date} a formatted date, {items} a joined list, {day} a weekday name, {span} the stretch of records a habit claim rests on, {n} a count, {word} a Russian count form built Go-side.",
"The count forms (день/дня/дней, задача/задачи/задач) are morphology, not copy. They stay in Go and arrive here through {word}.",
"fixed: true means exactly one variant and no picking. Used where the wording is the distinction: the day that is over versus the day that was empty, and the list of tasks he never confirmed."
],
"entries": {
"plan_rest_empty": {
"fixed": true,
"variants": ["на сегодня больше ничего не запланировано."]
},
"plan_day_empty": {
"fixed": true,
"variants": ["на {date} ничего не запланировано."]
},
"plan_day": {
"fixed": true,
"variants": ["план на {date}: {items}."]
},
"plan_uncertain": {
"fixed": true,
"variants": ["похоже, {line}"]
},
"tasks_none": {
"fixed": true,
"variants": ["задач нет."]
},
"tasks_first": {
"fixed": true,
"variants": ["сначала: {items}."]
},
"tasks_candidates": {
"fixed": true,
"variants": ["ещё я нашла, но ты не подтвердил: {items}."]
},
"reason_overdue": {
"fixed": true,
"variants": ["просрочено"]
},
"reason_overdue_day": {
"fixed": true,
"variants": ["просрочено на день"]
},
"reason_overdue_days": {
"fixed": true,
"variants": ["просрочено на {n} дн."]
},
"reason_today": {
"fixed": true,
"variants": ["сегодня"]
},
"reason_tomorrow": {
"fixed": true,
"variants": ["завтра"]
},
"reason_in_days": {
"fixed": true,
"variants": ["через {n} дн."]
},
"reason_important": {
"fixed": true,
"variants": ["важно"]
},
"reason_urgent": {
"fixed": true,
"variants": ["срочно"]
},
"reason_stale": {
"fixed": true,
"variants": ["давно в списке"]
},
"habit_weekday": {
"variants": ["по {day} ты обычно {items}.", "по {day} у тебя обычно {items}."]
},
"habit_weekday_same": {
"variants": [
"по {day} у тебя нет ничего особенного — то же, что и в остальные дни: {items}.",
"по {day} всё как обычно — то же, что и в остальные дни: {items}."
]
},
"habit_weekday_none": {
"variants": [
"по {day} я пока не вижу у тебя ничего постоянного.",
"по {day} я пока не набрала записей, чтобы говорить о постоянном."
]
},
"habit_weekend_both": {
"variants": ["по субботам ты обычно {sat}, по воскресеньям — {sun}."]
},
"habit_weekend_sat": {
"variants": ["по субботам ты обычно {items}, а по воскресеньям ничего постоянного."]
},
"habit_weekend_sun": {
"variants": ["по воскресеньям ты обычно {items}, а по субботам ничего постоянного."]
},
"habit_weekend_same": {
"variants": [
"по выходным у тебя нет ничего особенного — то же, что и в остальные дни: {items}.",
"по выходным всё как обычно — то же, что и в остальные дни: {items}."
]
},
"habit_weekend_none": {
"variants": [
"по выходным я пока не вижу у тебя ничего постоянного.",
"по выходным я пока не набрала записей, чтобы говорить о постоянном."
]
},
"habit_overall": {
"variants": ["обычно ты {items} — {span}."]
},
"habit_overall_none": {
"variants": [
"я ещё не набрала достаточно записей, чтобы говорить о привычках.",
"записей пока мало — на привычки я так не сошлюсь."
]
},
"habit_span_today": {
"variants": ["по записям за сегодня"]
},
"habit_span_days": {
"variants": ["по записям за последние {n} {word}"]
},
"habit_unglossed": {
"fixed": true,
"variants": ["отмечаешь «{key}»"]
},
"habit_at": {
"fixed": true,
"variants": ["{gloss} около {time}"]
}
}
}