weather asks the dictionary before guessing case (V-530)

locationCandidates reversed endings by hand to turn "в Казани" into the
nominative the geocoder wants. internal/morph knows the answer for the places
it has, so it goes first and the reversals stay behind it for the ones it does
not: "Твери" and "Перми" come back unchanged.

The four-rune floor was there to stop a two-letter stem, so it now tests the
stem instead. "Уфе" was under the floor and "Уфа" was never tried.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-04 21:18:52 +04:00
parent 58b546a27e
commit c62c7034fa
3 changed files with 42 additions and 9 deletions
+4 -2
View File
@@ -231,8 +231,10 @@ fact or a route is the defect; a regex over structured input — HTML, MIME, JSO
argv list — is not. Before writing a Russian word list, pick one of these:
- **`internal/lexicon`** — closed classes, in `lexicon_ru_v1.json`. Interrogatives,
capture verbs, cardinals, day offsets, weekdays, months, spoken hours. Editing a word is
a data change, and there is exactly one copy: months used to live in three files.
capture verbs, reminder verbs, cardinals, day offsets, parts of day, weekdays, months,
spoken hours. Editing a word is a data change, and there is exactly one copy: months used
to live in three files. Cardinals carry the oblique forms, because a spoken time declines
and `в семь` / `к семи` are one hour.
- **`internal/morph`** — grammar, from the vendored golem Russian dictionary. `IsVerbForm`
and `SameWord`. Note that lemma matching is BROADER than stem-plus-one-ending, so a verb
slot that means the imperative must be matched exactly — `говори` and `говорил` are one