Plan 01-12 D-07 (commit5efc2a8) migrated manifest.json:name + tooltip + extName/extDesc keys to chrome.i18n placeholders + _locales/{en,ru}/ messages.json resolving to 'Mokosh — Session Capture' (EN) / 'Mokosh — Запись сессии' (RU). However, 4 trailing references to the pre-D-07 literal 'AI Call Recorder' in non-manifest content surfaces were never propagated. Operator noticed during Plan 01-10 cycle-2 UAT 2026-05-20. This commit applies the user-approved 4-file surgical rename: - src/welcome/copy.ts: welcome.body.cta.toolbar RU CTA "иконку AI Call Recorder" → "иконку Mokosh" (matches toolbar tooltip i18n key tooltipOff = "Mokosh — щёлкните, чтобы начать запись"). Inline rationale comment added cross-ref'ing the i18n key + this debug session. - README.md: H1 + first paragraph rewritten to "# Mokosh — Session Capture" + EN tagline line. Rest of README body preserved verbatim (technical-stack section historical mentions left as project history, not brand surface). - package.json: name "ai-call-extension" → "mokosh-session-capture", description rewritten to "Mokosh — Session Capture: Chrome MV3 extension for operator session recording." version, scripts, dependencies, devDependencies untouched. - tests/i18n/manifest-i18n.test.ts: header comment block rewritten to label the "AI Call Recorder" string as Wave-0 historical state + describe the post-D-07 regression-pin role. Test bodies + assertions unchanged (already pin the post-D-07 canonical state). Preservation rationale: .planning/intel/* (brand-decisions-v1.md D-07, design-system.md, brand-identity.md, classifications/README-*.json, design-incoming/system/bundle/mokosh-handoff/handoff.html) is audit trail documenting the "why" of D-07 — kept verbatim. _locales/{en,ru}/ messages.json and manifest.json already post-D-07 canonical — untouched. Acceptance gates (all PASS 2026-05-20): - Empirical grep src/ tests/ README.md package.json: ZERO non-historical "AI Call Recorder" matches (only the labeled audit anchor in tests/i18n/manifest-i18n.test.ts:8). - npx tsc --noEmit: clean. - npm run build: ✓ built in 5.29s. - npx vitest run tests/i18n/manifest-i18n.test.ts: 10/10 GREEN. - npx vitest run tests/background/no-test-hooks-in-prod-bundle.test.ts (Tier-1 hook-string grep gate): 13/13 GREEN; FORBIDDEN_HOOK_STRINGS list intact. - npm test: 151/153 (2 pre-existing ffprobe/ffmpeg timeout flakes in webm-remux + webm-playback — verified identical to pristine HEADa2dfc8cvia git stash baseline; unrelated to rename). - npm run test:uat: 24/24 GREEN. - Production bundle grep dist/: ZERO "AI Call Recorder" + ZERO "ai-call-extension" matches. Unblocks Plan 01-10 closure + Phase 1 final closure (REQUIREMENTS / ROADMAP / STATE marker flip). Debug record: .planning/debug/resolved/01-12-stale-ai-call-recorder-references.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
80 lines
4.1 KiB
TypeScript
80 lines
4.1 KiB
TypeScript
// src/welcome/copy.ts — single source-of-truth for welcome-page
|
||
// NON-TAGLINE copy.
|
||
//
|
||
// Plan 01-12 (landed first; SUMMARY 2026-05-20) migrated the two D-08
|
||
// tagline strings (welcomeHeroRu + welcomeHeroEn) to
|
||
// _locales/{en,ru}/messages.json. Those keys are read via
|
||
// chrome.i18n.getMessage in welcome.ts and intentionally NOT included
|
||
// in this map.
|
||
//
|
||
// The remaining keys are engineering-grade placeholders authored in
|
||
// Russian per D-03 Sober voice register; a future copy-iteration plan
|
||
// may migrate them to _locales/ for full operator-locale awareness.
|
||
//
|
||
// D-08 tagline reference (lives in _locales/, not here):
|
||
// en/welcomeHeroEn → "Thirty seconds ago, always at hand."
|
||
// ru/welcomeHeroRu → "Тридцать секунд назад, всегда под рукой."
|
||
//
|
||
// References:
|
||
// - D-02 (welcome layout — Hero + Loom dial), brand-decisions-v1.md
|
||
// - D-03 (Sober voice register), brand-decisions-v1.md
|
||
// - D-08 (tagline), brand-decisions-v1.md
|
||
// - D-16-toolbar (toolbar owns start path), 01-09-SUMMARY.md
|
||
// - Plan 01-12 Wave 4 chrome.i18n fallback pattern (popup precedent)
|
||
|
||
/**
|
||
* Plan 01-12 fallback-pattern constants for the welcomeHero keys.
|
||
*
|
||
* welcome.ts uses these as the `|| <en-const>` fallback when
|
||
* chrome.i18n.getMessage returns empty string (Plan 01-10 RESEARCH
|
||
* Pitfall 4 mitigation: chrome.i18n.getMessage returns '' for unknown
|
||
* keys instead of throwing).
|
||
*
|
||
* Exported separately from COPY so the i18n populate path imports them
|
||
* by name (clean import surface — COPY map stays free of tagline keys).
|
||
*/
|
||
export const WELCOME_HERO_RU_FALLBACK =
|
||
'Тридцать секунд назад, всегда под рукой.';
|
||
export const WELCOME_HERO_EN_FALLBACK =
|
||
'Thirty seconds ago, always at hand.';
|
||
|
||
/**
|
||
* Non-tagline welcome-page copy. Keys are stable identifiers used by
|
||
* `[data-mokosh-key='<key>']` attribute selectors in welcome.html;
|
||
* populateCopy() in welcome.ts walks every element with the attribute
|
||
* and writes textContent (or document.title for the <title> element).
|
||
*
|
||
* Russian phrasing per D-03 Sober voice — restrained, declarative,
|
||
* no marketing inflection.
|
||
*/
|
||
export const COPY: Readonly<Record<string, string>> = Object.freeze({
|
||
'welcome.page.title': 'Добро пожаловать в Mokosh',
|
||
'welcome.hero.title': 'Mokosh',
|
||
// Plan 01-10 must_have #9 path-A swap-in (landed 2026-05-20):
|
||
// alt text for the canonical mark <img> populated by welcome.ts
|
||
// populateMark(). The mark is decoratively presented (aria-hidden
|
||
// is set on the img), so this alt is primarily for screen-reader
|
||
// landmark identification when aria-hidden is overridden by future
|
||
// accessibility work. Russian phrasing per D-03 Sober voice.
|
||
'welcome.hero.mark.alt': 'Знак Mokosh',
|
||
'welcome.body.explainer.line1':
|
||
'Mokosh непрерывно записывает последние 30 секунд экрана и 10 минут '
|
||
+ 'логов вашего браузера.',
|
||
'welcome.body.explainer.line2':
|
||
'Когда возникает баг, вы одним кликом сохраняете архив для службы '
|
||
+ 'поддержки. Данные не отправляются никуда — только локально.',
|
||
// Plan 01-12 D-07 brand-polish (2026-05-20, debug session
|
||
// 01-12-stale-ai-call-recorder-references): operator sees the toolbar
|
||
// tooltip "Mokosh — щёлкните, чтобы начать запись" (i18n key
|
||
// `tooltipOff` in `_locales/ru/messages.json`); welcome CTA must
|
||
// reference that same brand. Pre-D-07 this line read "иконку AI Call
|
||
// Recorder" — propagation was missed during the Wave-3 manifest+locales
|
||
// migration and corrected here.
|
||
'welcome.body.cta.toolbar':
|
||
'Чтобы начать запись, нажмите иконку Mokosh на панели '
|
||
+ 'инструментов браузера (правый верхний угол).',
|
||
'welcome.footer.privacy':
|
||
'Mokosh не отправляет данные на серверы. Архив создаётся '
|
||
+ 'локально по вашему запросу и остаётся на вашем компьютере.',
|
||
});
|