Files
Maven/internal/memory/behavior_ru.json
kami ba33a677f8 memory: canonicalise habit keys, take the median on a clock, name the period
Three defects in how the counted profile is read back.

The counting unit was the key the LLM invented. There is no allowlist and no
normalization behind it, so "я выпил воду" and "попил воды" landed as different
keys, split one habit into two, and dropped both below the two-day threshold.
Keys now go through an alias table in behavior_ru.json before they are counted.
An unglossed key is quoted rather than recited as a verb, because "обычно ты
выпил_воды около 09:00" is not a sentence.

The typical time was a median of minutes since midnight, which is wrong for
anything that straddles midnight. Bedtimes of 23:40, 23:50, 00:10 and 00:20
gave 12:00, on the one activity most likely to cross the boundary. It is now a
circular median, and when the observations span more than half the clock she
names the habit without a time instead of inventing one.

The rest is wording. Profile.Since was computed and never spoken, so "обычно"
was an unfalsifiable claim; the overall read-back now says over how many days
of records it holds. The no-data weekday answer said "у меня пока нет ничего
постоянного" about a question concerning him. And "quiet" was a bare prefix in
the non-behavioural list, so any future self-fact key starting with those five
letters would have been dropped.

Found in review of #59.
2026-08-01 14:04:24 +04:00

52 lines
2.8 KiB
JSON

{
"_comment": [
"Russian read-back vocabulary for the counted behaviour profile.",
"Embedded into the binary by behavior_ru.go — there is no runtime file to",
"ship or lose. Editing wording here does not need a Go change, which is the",
"whole point: these are strings for a person, not program logic.",
"",
"weekdays are indexed by time.Weekday (0 = Sunday) and are in the dative",
"plural, because both 'по вторникам' and 'по средам' need that form.",
"",
"activities glosses a fact key as a second-person-singular verb phrase. An",
"unknown key is not glossed and is quoted rather than guessed at: inventing",
"a Russian phrase for a key maven does not recognise puts words in his",
"mouth, and reading the raw key inline produces 'обычно ты выпил_воды'.",
"",
"key_aliases maps the fact keys the router actually emits onto the canonical",
"key the profile counts. The key of a self fact comes straight out of the",
"LLM with no allowlist behind it, so 'я выпил воду' and 'попил воды' arrive",
"as different keys, split one habit into two, and drop both below the",
"day threshold. Additive and lowercase; an unlisted key counts as itself."
],
"weekdays": [
"воскресеньям",
"понедельникам",
"вторникам",
"средам",
"четвергам",
"пятницам",
"субботам"
],
"activities": {
"water": "пьёшь воду",
"meal": "ешь",
"sleep": "спишь",
"break": "делаешь перерыв",
"shower": "принимаешь душ",
"walk": "гуляешь",
"pills": "пьёшь витамины",
"workout": "тренируешься"
},
"key_aliases": {
"water": ["вода", "воду", "воды", "водичка", "попил", "попил_воды", "выпил_воды", "выпил_воду", "drink_water", "drank_water"],
"meal": ["еда", "еду", "поел", "поесть", "завтрак", "обед", "ужин", "food", "ate", "breakfast", "lunch", "dinner"],
"sleep": ["сон", "спать", "лег", "лёг", "уснул", "заснул", "bedtime", "slept"],
"break": ["перерыв", "отдых", "пауза", "rest", "pause"],
"shower": ["душ", "принял_душ", "помылся", "мытьё", "мылся"],
"walk": ["прогулка", "гулял", "погулял", "выгулял", "walked", "walking"],
"pills": ["витамины", "таблетки", "таблетка", "лекарство", "vitamins", "meds", "medicine"],
"workout": ["тренировка", "тренировался", "потренировался", "зал", "спорт", "exercise", "gym", "training"]
}
}