Files
mokosh/_locales/ru/messages.json
Mark 4bba679e39 fix(01-09): notifStartup text split — notifStartupCta for onStartup; notifRecordingStarted for manual-start
Operator UAT 2026-05-20 rejected the build because the OS notification fired
on `chrome.runtime.onStartup` ("Recording started. I'm watching the last 30
seconds.") implied recording had auto-started when in fact recording was
not running. Per Phase 1 always-on charter recording does NOT auto-start;
the notification is the gesture surface that invites the operator to start
one (notifications.onClicked → startVideoCapture, src/background/index.ts:1038).

Root cause: a single i18n key `notifStartup` conflated the pre-recording
CTA-with-gesture path (the only path actually wired today) and a future
post-manual-start confirmation path. The key's own `.description` field
acknowledged the conflation. Operator-facing text leaned toward the
confirmation phrasing.

Fix (key split, no behavior change):
- `notifStartupCta` — EN: "Mokosh ready. Click to start a recording." /
  RU: "Mokosh готов. Нажмите, чтобы начать запись." — wired into the
  onStartup handler.
- `notifRecordingStarted` — preserves the original text ("Recording
  started. I'm watching the last 30 seconds." / "Запись запущена…") for
  a future post-manual-start confirmation flow.
- Fallback constant renamed `NOTIF_STARTUP_FALLBACK` →
  `NOTIF_STARTUP_CTA_FALLBACK`; value updated to match the new CTA text.
- Inline test comment in tests/background/onstartup-notification.test.ts
  refreshed to reference the new key + fallback. Assertion regex
  /recording|recor|click/i covers both fallback + resolved locale variants,
  no logic change.

Notification behavior preserved: same id prefix `mokosh-startup-`, same
priority, same icon, same onClicked → startVideoCapture wiring. No new
test-mode symbols (FORBIDDEN_HOOK_STRINGS inventory stays at 12).

Files modified:
- _locales/en/messages.json
- _locales/ru/messages.json
- src/background/index.ts
- tests/background/onstartup-notification.test.ts

Verification:
- npx vitest run --exclude tests/build/** --exclude tests/background/no-test-hooks-in-prod-bundle.test.ts: 104/104 GREEN
- npx vitest run tests/i18n/ tests/background/onstartup-notification.test.ts: 18/18 GREEN (locale-parity 4/4 + onstartup-notification 14/14)
- npx tsc --noEmit clean on src/background/index.ts

The 2 build-dependent vitest gates (tests/build/no-remote-fonts.test.ts +
tests/background/no-test-hooks-in-prod-bundle.test.ts) and npm run test:uat
are deferred to orchestrator-level re-verification after the parallel
Plan 01-10 mark-bundling fix also lands (operator-UAT re-spawn coordinated
by orchestrator).

Debug record: .planning/debug/resolved/01-09-startup-notification-misleading-text.md
Operator UAT rejection event: 2026-05-20

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 10:14:08 +02:00

71 lines
4.2 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"extName": {
"message": "Mokosh — Запись сессии",
"description": "manifest.json:name; отображается в chrome://extensions, Web Store, контекстных меню. Per brand-decisions-v1.md D-07."
},
"extDesc": {
"message": "Тридцать секунд назад, всегда под рукой.",
"description": "manifest.json:description; слоган per brand-decisions-v1.md D-08."
},
"tooltipOff": {
"message": "Mokosh — щёлкните, чтобы начать запись",
"description": "Подсказка кнопки на панели инструментов в режиме OFF. Click triggers chrome.action.onClicked → startVideoCapture."
},
"tooltipRecPrefix": {
"message": "Mokosh — идёт запись",
"description": "Подсказка кнопки в режиме REC; SW добавляет ' (MM:SS)' через formatElapsed(seconds)."
},
"tooltipErr": {
"message": "Mokosh — ошибка записи, щёлкните для восстановления",
"description": "Подсказка кнопки в режиме ERROR. Click reattempts startVideoCapture."
},
"popupSavePrompt": {
"message": "Сохранить отчёт об ошибке?",
"description": "Заголовок попапа (зарезервировано для будущих макетов попапа с явным вопросом)."
},
"popupSaveCta": {
"message": "Сохранить отчёт",
"description": "Текст основной CTA-кнопки попапа (idle state). Триггерит SAVE_ARCHIVE."
},
"popupSaveDone": {
"message": "Архив сохранён в Загрузки.",
"description": "Статусное сообщение попапа после успешного SAVE_ARCHIVE."
},
"popupSaving": {
"message": "Сохраняю...",
"description": "Текст CTA-кнопки попапа во время выполнения SAVE_ARCHIVE."
},
"popupSaveDoneShort": {
"message": "Готово! ✓",
"description": "Текст CTA-кнопки попапа сразу после успешного SAVE_ARCHIVE (3 секунды до возврата в idle)."
},
"popupEmptyState": {
"message": "Откройте запись через иконку расширения",
"description": "Empty-state статус попапа когда попап открыт без активной записи (редко в режиме SAVE-only из Plan 01-09)."
},
"popupInfoText": {
"message": "Последние 30 сек видео + 10 мин лога",
"description": "Info-text под SAVE-кнопкой. Краткое описание содержимого архива."
},
"notifStartupCta": {
"message": "Mokosh готов. Нажмите, чтобы начать запись.",
"description": "Тело уведомления для onStartup — CTA с жестом активации. Заголовок — extName. Per always-on charter: запись не запускается автоматически."
},
"notifRecordingStarted": {
"message": "Запись запущена. Я слежу за последними 30 секундами.",
"description": "Тело уведомления, отправляемое ПОСЛЕ успешного старта записи через startVideoCapture. Заголовок — extName."
},
"notifRecovery": {
"message": "Запись возобновлена. Буфер снова заполняется.",
"description": "Тело уведомления после RECORDING_ERROR recovery. Заголовок — extName."
},
"welcomeHeroRu": {
"message": "Тридцать секунд назад, всегда под рукой.",
"description": "Welcome page hero — Russian text (показывается рядом с английским в parallel-text layout)."
},
"welcomeHeroEn": {
"message": "Thirty seconds ago, always at hand.",
"description": "Welcome page hero — English text (показывается рядом с русским в parallel-text layout)."
}
}