Reminders: spelled-out times fail, the body keeps the marker, and the page shows UTC #134
Reference in New Issue
Block a user
Delete Branch "task/469-reminders-spelled-out-times-fail-the-bod"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes Vikunja #469.
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.mdon this branch.Review the review, not the diff — leave comments and the agent will apply them via
task start 469.Bug: a pending clarify is global, so one unanswerable question swallows the next three utterances from anybodyto Reminders: spelled-out times fail, the body keeps the marker, and the page shows UTC@@ -0,0 +17,4 @@// Go's \b is ASCII-only and never fires next to a Cyrillic letter, so the word// boundaries here are written out as whitespace or an end of string — the same// trap the agenda grammars hit.var reminderTimeWords = []*regexp.Regexp{why not 1000 regex cases? sequentially also. /s
@@ -0,0 +9,4 @@//// Stops at thirty, which is as far as a spoken time goes ("без двадцати// восемь", "в половине шестого"). Anything larger is said in digits.var ruNumerals = map[string]string{it gets better and better.
Reviewed as part of a bottom-up pass over the whole open stack (#119 to #168): commits read against the base branch,
make testgreen 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-querygrammar from the merge), #164 (four files the Russian sweep did not reach), #145 (sh -chides an irreversible verb from the tier derivation), #128 (locationCandidatesdrops short city names).Two of the four defects on the task. The stored payload was the whole utterance, so /reminders and the agenda recited "напомни завтра в 9 утра выпить таблетки" where the reminder is "выпить таблетки". The marker is an instruction that was already carried out and the hour is already a column, so reminderBody strips both, and falls back to the unstripped body whenever stripping would leave nothing — a reminder that fires and says nothing is worse than a wordy one. The page rendered the raw {"text":...} envelope and the UTC instant. Both are now done in mavweb: reminderRows unwraps the payload and formats through Local(). The unwrap is a copy of store.ReminderText rather than a call to it, because mavweb builds without CGO and internal/store carries the sqlite driver — the ipc DTOs are decoupled from the store on purpose. TestClarifySubjectAnswerFillsRatherThanClobbers asserted the hour survived as a word in the payload. It now asserts the fire time, which is where the hour lives. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>