Files
Maven/internal/router/task_phrases.json
T
kami 708a69375f tasks: key derived captures by external id and record who resolved
A task extracted from mail deduped on the live-norm index only, so once he
finished it the row left the live set and the next poll of the same immutable
message re-extracted it as a fresh candidate. mavmaild is a read-only reader
and marks nothing read, so that repeats forever. Derived rows now carry an
ext_id built from the message uid and the extracted span, unique across every
status, while voice keeps live-only norm dedupe because saying an errand again
is the recurrence signal. A derived source can no longer capture straight to
open, and saying a task out loud that Maven had only proposed promotes the
candidate instead of answering that it is already in the list.

SetTaskStatus was classified AuthRead. Resolving a task is not additive, it
erases work off his list, so it is a write, and the row now records the caller
that moved it. ListTasks was unbounded. The list-query matcher claimed any
utterance with "что мне делать", including "с чем мне помочь", and the urgency
stripper matched inside words.

Found in review of #60.
2026-08-01 14:16:39 +04:00

60 lines
2.1 KiB
JSON

{
"_comment": [
"The task capture and task-listing vocabulary. Embedded by task_phrases.go.",
"",
"These are lexicon, not logic: which words mean 'put this on the list' is a",
"fact about how he speaks, and it changes as he uses the thing. Keeping them",
"in Go meant every new phrasing was a source diff.",
"",
"capture_prefixes must be LEADING phrases. 'добавь в задачи купить молоко' is",
"a capture; 'я не добавил молоко в список' is him talking, and only position",
"tells them apart. There is deliberately no 'надо'/'нужно' entry: 'надо бы",
"поспать' is a mood, not a task, and guessing would fill the list with them.",
"",
"urgency markers carry the weight he stated out loud. Two rungs only:",
"'срочно' is a deadline he has not named and 'важно' is a preference. A third",
"shade would be a distinction he never makes.",
"",
"list_nouns are the nouns that make a question be about the list.",
"list_shortcut_nouns are the subset that stand alone as a whole utterance",
"('задачи'), which the longer nouns do not ('дел')."
],
"capture_prefixes": [
"добавь в задачи",
"добавь в тудушки",
"добавь в список задач",
"добавь в список дел",
"добавь в список",
"добавь задачу",
"запиши в задачи",
"запиши задачу",
"новая задача",
"поставь задачу",
"в задачи",
"add a task",
"add task",
"add to my tasks",
"add to tasks",
"new task"
],
"urgency_markers": [
{ "word": "срочно", "weight": 3 },
{ "word": "urgent", "weight": 3 },
{ "word": "важно", "weight": 2 },
{ "word": "important", "weight": 2 }
],
"list_nouns": [
"задачи",
"задачах",
"задач",
"задачам",
"дела",
"делах",
"дел",
"tasks",
"todo",
"todos"
],
"list_shortcut_nouns": ["задачи", "задач", "tasks"]
}