`totalEvents: 0`, `events.json` empty — operator never actually recorded;
they only saw the misleading notification on browser start, were
confused, and saved an empty archive in an attempt to verify state.
## Root cause
`_locales/{en,ru}/messages.json` defined a single key `notifStartup` whose
text leaned toward a post-start confirmation phrasing ("Recording started.
I'm watching the last 30 seconds."). The key's own `.description` field
acknowledged the conflation: *"Notification body for the onStartup +
manual-start flow."* In reality only the **onStartup** path consumes the
key (`src/background/index.ts:1023`) — and on that path the recording has
**not** started; per Phase 1 always-on charter recording does not
auto-start, and the notification itself IS the gesture surface (clicking
it triggers `notifications.onClicked` → `startVideoCapture` at line
1038–1050). The operator was reading a confirmation message in a
pre-recording context.
The fallback constant `NOTIF_STARTUP_FALLBACK` ("Recording started. Click
here to start a recording.") was a hybrid that still led with the
misleading "Recording started." phrase.
## Fix design
Per orchestrator charter, split the conflated key into two:
1.**`notifStartupCta`** (the path actually wired today)
- EN: `"Mokosh ready. Click to start a recording."`
- RU: `"Mokosh готов. Нажмите, чтобы начать запись."`
- Description (en): *"Notification body for the onStartup flow — CTA-with-gesture invite. Notification title is extName. Per Phase 1 always-on charter: recording does NOT auto-start; this notification is the gesture surface."*
"description":"Popup info-text below the SAVE button. Brief explanation of what the archive contains."
},
"notifStartup":{
"notifStartupCta":{
"message":"Mokosh ready. Click to start a recording.",
"description":"Notification body for the onStartup flow — CTA-with-gesture invite. Notification title is extName. Per Phase 1 always-on charter: recording does NOT auto-start; this notification is the gesture surface."
},
"notifRecordingStarted":{
"message":"Recording started. I'm watching the last 30 seconds.",
"description":"Notification body for the onStartup + manual-start flow. The notification title is extName."
"description":"Notification body fired AFTER recording successfully starts via startVideoCapture. Notification title is extName."
"description":"Info-text под SAVE-кнопкой. Краткое описание содержимого архива."
},
"notifStartup":{
"notifStartupCta":{
"message":"Mokosh готов. Нажмите, чтобы начать запись.",
"description":"Тело уведомления для onStartup — CTA с жестом активации. Заголовок — extName. Per always-on charter: запись не запускается автоматически."
},
"notifRecordingStarted":{
"message":"Запись запущена. Я слежу за последними 30 секундами.",
"description":"Тело уведомления для onStartup + manual-start. Заголовок — extName."
"description":"Тело уведомления, отправляемое ПОСЛЕ успешного старта записи через startVideoCapture. Заголовок — extName."
},
"notifRecovery":{
"message":"Запись возобновлена. Буфер снова заполняется.",
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.