<!-- source: openspec/changes/add-muse-translation-mode/verification.md -->

---
audience:
  - executor
---
# Verification — add-muse-translation-mode

> Companion to proposal.md / design.md / tasks.md.

> **⚠ Schema-rename overlay — RAP-1170 (Wave 1, 2026-05-22).** Acceptance assertions below reference the pre-rename `canvas_*` tables; the post-rename equivalents are `ideas` / `messages` / `files` / `spec_invitees`. Inline `canvas_*` references are preserved per the overlay note in `proposal.md`.

## Spec alignment

"Done" means a translation-enabled canvas accepts turns in each
writer's working language (RU/EN/RO), Muse mediates per-locale
translations on demand, both the original (`canvas_messages.content`)
and the lazy translated views (`canvas_messages.translated_content
jsonb`) persist; per-brand vocabulary forcing applies; opt-in flag
gates the entire surface so existing canvases are unaffected.

## Hallucination risks

MUST appear:

- `openspec/changes/add-muse-translation-mode/proposal.md` — new.
- `openspec/changes/add-muse-translation-mode/design.md` — new.
- `openspec/changes/add-muse-translation-mode/tasks.md` — new.
- `openspec/changes/add-muse-translation-mode/verification.md` — new.

MUST NOT appear in the scaffold PR:

- No new migration SQL files — Wave 2 lands post-ratification.
- No new files under `packages/muse/src/modes/architect/intents/` — Wave 3 lands post-ratification.
- No new files under `packages/ui/src/components/chat/` — Wave 4 lands post-ratification.
- No edits to `openspec/current/*.md` — Wave 9 amends specs at archive.
- No Hebrew (HE) in the locale set — D-MTM-7 explicitly excludes it.

## Pattern references

- `openspec/archive/2026-05-21-add-spec-navigator/` — sibling RAP-1124 change; same proposal + design + tasks + verification shape.
- `openspec/archive/2026-05-21-add-onboarding-brief/` — sibling change that introduces `session.intake_locale`; this change reads from it via the same loader pattern.
- `openspec/brands/<slug>/identity.md` — existing per-brand identity files; § Vocabulary supplies the term-forcing block.
- `packages/muse/src/modes/architect/intents/` — existing intent branches (onboarding, etc.); translation joins the same pattern.

## Acceptance

### Wave 1 — Scaffold

- Done when: file `openspec/changes/add-muse-translation-mode/proposal.md` exists.
- Done when: file `openspec/changes/add-muse-translation-mode/design.md` exists.
- Done when: file `openspec/changes/add-muse-translation-mode/tasks.md` exists.
- Done when: file `openspec/changes/add-muse-translation-mode/verification.md` exists.

### Wave 2 — Validation

- Done when: `node tools/check-openspec-refs.mjs` exits 0.

### Wave 3 — Reviewer sign-off

- Reviewer confirms: D-MTM-1 Anthropic-native provider (no new vendor); same `ANTHROPIC_API_KEY`.
- Reviewer confirms: D-MTM-2 inline per-message toggle (no side-by-side pane in v1).
- Reviewer confirms: D-MTM-3 lazy translation; original immutable in `canvas_messages.content`; translated views in `translated_content jsonb`.
- Reviewer confirms: D-MTM-4 `source_locale text` nullable on `canvas_messages`; NULL = legacy.
- Reviewer confirms: D-MTM-5 brand-vocabulary forcing via `openspec/brands/<slug>/identity.md § Vocabulary`.
- Reviewer confirms: D-MTM-6 `translation_enabled boolean default false` on `canvas_sessions`; opt-in only.
- Reviewer confirms: D-MTM-7 locale set RU/EN/RO LTR-only in v1; HE excluded pending native review.
