fix(hurtig tilføjelse): fire ting, der blev læst forkert eller tabt i stilhed

Fundet under arbejdet med genopbygnings-prompten, hvor den rigtige parser
blev kørt over en tabel af sætninger.

- "at" før et 12-timers klokkeslæt blev stående i titlen: "file the VAT
  return tomorrow at 10am" blev opgaven "file the VAT return at". Markøren
  (at, kl, klokken) hører nu med til tiden, også foran "7:30 pm".
- "køb 1/2 liter fløde" fik forfaldsdato 1. februar. En d/m efterfulgt af en
  mængdeenhed (liter, dl, kg, stk, tsk, kop, del, …) er en mængde. Uden enhed
  er det stadig en dato — "3/4" alene, "møde 3/4 med Anders" og også "3/4
  kage", fordi intet i "kage" skiller tredje april fra tre fjerdedele, og en
  dato, der stille forsvinder, er værre end en, man selv sletter.
- Et "#navn" eller "/navn", der ikke fandtes, blev klippet ud af titlen, og
  opgaven landede et andet sted uden et ord. Serveren har længe sendt
  unknown_project og unknown_section; fladen siger dem nu i en besked, også
  når en underopgave beholder sin opgaves projekt.
- Titlen i opgaveruden blev læst om, men gentagelsen blev læst under
  `parsed.recurrence`, et felt der ikke findes, så "hver mandag" forsvandt.
  Den læser nu `recurrence_rule` og tager også klokkeslæt, projekt og alarm
  med, og siger gentagelsen på læserens sprog i stedet for et fast
  "gentagelse". Alarmen lægges før rettelsen, så den skrevne ikke stables
  oven på standardalarmen.

Prøver: to nye Go-prøver i quickadd og to e2e-prøver. Fem plantede fejl,
hver fanget af sin egen prøve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
kristianwind
2026-10-31 00:32:16 +01:00
co-authored by Claude Opus 5.5
parent ec5cf8f9f9
commit ed30eb4c36
7 changed files with 249 additions and 13 deletions
+14
View File
@@ -729,6 +729,20 @@ class AppState {
// slags påmindelse, hvis fejl intet bagefter afslører — der står ingen
// række at savne, og man opdager den først, da den ikke ringede.
if (task?.reminder_not_set) this.toast(t('task.alarmNeedsATime'));
// Et "#navn" eller "/navn", der ikke ramte noget, er klippet ud af titlen
// af parseren og lagt et andet sted af serveren. Uden de her linjer
// forsvandt ordet bare, og opgaven lå et sted, ingen havde bedt om.
const where = projectName(this.projectById(task?.project_id));
if (task?.unknown_project) {
this.toast(
parentId
? t('task.subtaskKeepsProject', { name: task.unknown_project, where })
: t('task.unknownProject', { name: task.unknown_project, where })
);
}
if (task?.unknown_section) {
this.toast(t('task.unknownSection', { name: task.unknown_section, where }));
}
return task;
} catch (e) {
this.toast(humanMessage(e));