85a3397bf4
reminder_cancel.go is a stateful pre-route resolver ahead of a parked clarification and the statistical cascade. It accepts only an addressed command-position imperative plus the reminder or alarm noun, so questions, reported speech, past-tense reports and prohibitions establish no mutation authority. Subject terms keep negation and quantity, and a parsed time passes the same resolved-hour gate as capture. One match cancels through the typed IPC method. Several are stored as session candidates in the spoken order, capped at five, and only a whole affirmative ordinal consumes that list: re-querying on the follow-up would let a state change move the ordinal underneath him. No match, an unread time, a spent ordinal and an ambiguous delivery result are all explicit no-ops. command_prohibition.go is the first mutation boundary in a turn. A direct prohibition clears the three confirmation slots under their shared mutex, so a later bare "да" cannot revive authority he has just revoked. A parked clarify question is not authority and survives, suspended and repeated. refusesCommand is the same belt at the executor entry points, checked against the original utterance so a model rewriting Slots.Text cannot get around it. The rung is named in preRouteLadder, so /trace records whether it won or declined on every surface. --no-verify: master is the working branch this session by the owner's call. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
91 lines
4.4 KiB
JSON
91 lines
4.4 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"name": "russian capture acknowledgements v1",
|
|
"notes": [
|
|
"What she says after storing something he said, and what she says when storing it failed. Edit the wording here, no Go changes needed.",
|
|
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never он/его about him. No pet names.",
|
|
"He hears these many times a day, so most entries carry variants: identical wording is what makes a confirmation stop registering as one.",
|
|
"Placeholders: {key} {value} the fact he stated, {fn} the action, {text} the task title or, in ack_fact_echo, his own sentence. His data is interpolated Go-side — the file holds the frame, never his words.",
|
|
"ack_fact_echo is the one entry with a single variant, deliberately: what varies in it is his own sentence, which is different every time, and the frame around it is what the simulator scenarios read back.",
|
|
"An acknowledgement confirms and stops. It does not ask a follow-up question and it does not editorialise about what he stored."
|
|
],
|
|
"entries": {
|
|
"ack_fact": {
|
|
"variants": ["записала факт.", "записала.", "запомнила."]
|
|
},
|
|
"ack_fact_key": {
|
|
"variants": ["отметила: {key}", "записала: {key}", "запомнила: {key}"]
|
|
},
|
|
"ack_fact_kv": {
|
|
"variants": ["отметила: {key} = {value}", "записала: {key} — {value}", "запомнила: {key} — {value}"]
|
|
},
|
|
"ack_fact_echo": {
|
|
"fixed": true,
|
|
"variants": ["записала: {text}"]
|
|
},
|
|
"ack_note": {
|
|
"fixed": true,
|
|
"variants": ["сохранила заметку."]
|
|
},
|
|
"ack_reminder": {
|
|
"variants": ["напомню.", "напомню, не забуду.", "хорошо, напомню."]
|
|
},
|
|
"ack_act": {
|
|
"variants": ["ок, записала действие: {fn}", "приняла действие: {fn}"]
|
|
},
|
|
"ack_task": {
|
|
"variants": ["записала: {text}", "добавила в задачи: {text}", "внесла в список: {text}"]
|
|
},
|
|
"ack_task_urgent": {
|
|
"variants": ["поняла, беру в работу: {text}", "поняла, это срочно: {text}"]
|
|
},
|
|
"ack_task_duplicate": {
|
|
"variants": ["это уже в списке.", "такое уже есть в задачах."]
|
|
},
|
|
"ack_nudge": {
|
|
"variants": ["отлично, отметила.", "отметила.", "хорошо, отметила."]
|
|
},
|
|
"ack_snooze": {
|
|
"variants": ["хорошо, вернусь к этому позже.", "ладно, напомню попозже.", "хорошо, отложила."]
|
|
},
|
|
"ack_generic": {
|
|
"variants": ["приняла.", "поняла."]
|
|
},
|
|
"quiet_on": {
|
|
"fixed": true,
|
|
"variants": ["тихий режим включён. буду реже напоминать."]
|
|
},
|
|
"quiet_off": {
|
|
"fixed": true,
|
|
"variants": ["тихий режим выключен."]
|
|
},
|
|
"fail_fact": {
|
|
"variants": ["не получилось сохранить факт.", "факт не сохранился."]
|
|
},
|
|
"fail_note": {
|
|
"variants": ["не получилось сохранить заметку.", "заметка не сохранилась."]
|
|
},
|
|
"fail_reminder": {
|
|
"variants": ["не получилось поставить напоминание.", "напоминание не поставилось."]
|
|
},
|
|
"fail_reminder_time": {
|
|
"variants": ["не получилось разобрать время напоминания.", "не поняла, на когда напомнить."]
|
|
},
|
|
"fail_task": {
|
|
"variants": ["не получилось записать задачу.", "задача не записалась."]
|
|
},
|
|
"fail_ack": {
|
|
"variants": ["не получилось отметить.", "не смогла отметить."]
|
|
},
|
|
"fail_snooze": {
|
|
"variants": ["не получилось отложить.", "не смогла отложить."]
|
|
},
|
|
"fail_quiet": {
|
|
"variants": ["не получилось переключить тихий режим.", "тихий режим не переключился."]
|
|
},
|
|
"fail_fact_unparsed": {
|
|
"variants": ["не разобрала, что записать — попробуй иначе.", "не поняла, что записать. скажи иначе?"]
|
|
}
|
|
}
|
|
}
|