# Phase 14.2.1: Translate plugin - Discussion Log > **Audit trail only.** Do not use as input to planning, research, or execution agents. > Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. **Date:** 2026-10-06 **Phase:** 14.2.1-translate-plugin **Areas discussed:** PHP source of truth, what ships, model API, where it boots --- ## PHP source of truth | Option | Description | Selected | |--------|-------------|----------| | Fonoteka pin `725d547` | Newest Płytarium checkout | ✓ | | grzyby pin `6e0c146` | Older ancestor | | | GitHub master at plan time | Moving target | | **User's choice:** Freeze at `725d547`, read from the Fonoteka path. Read-only with the same urgent-upgrade re-pin rule as Journal. --- ## What ships | Option | Description | Selected | |--------|-------------|----------| | Lean: Locale + TranslatableModel | Unblocks Journal | ✓ | | Lean plus Messages catalogue | Extra admin | | | Full PHP surface | Picker, AI/theme, import/export | | **User's choice:** Lean. Cabana `mltext`/`mlmarkdown`. PHP Translator resolution (URL prefix / session / cookie / default). Seed `en`+`pl`. --- ## Model API | Option | Description | Selected | |--------|-------------|----------| | `Translatable() []string` like PHP `$translatable` | Journal copies the PHP list | ✓ | | YAML-only; models unaware | | | | Same Winter attribute tables | Cutover-compatible | ✓ | | JSON column per field | Breaks Winter import | | | Fallback to default locale | PHP behaviour | ✓ | | Minimum API (`WithLocale`, get/set, Translator) | Enough for Journal | ✓ | | 1:1 every PHP method | | | **User's choice:** PHP-like declaration, same tables, PHP fallback, minimum exported API. --- ## Where it boots | Option | Description | Selected | |--------|-------------|----------| | Same `sm-grzybyfunkcjonalne-app` | Matches Phase 15 D-21 | ✓ | | In-module testhost | | | | User creates `sm-translate-plugin` remote | Does not exist yet | ✓ | | Sibling checkout | `summercms/sm-translate-plugin/` | ✓ | | Proof: Locales admin + fixture en+pl | | ✓ | | Plugin tests only | | | **User's choice:** Grzyby host with user+translate. User creates the public remote. Proof is boot + Locales admin + fixture model. --- ## Claude's Discretion - Exact table/column names from frozen PHP updates - ML field identifiers and docs/OpenAPI/`dist/` bundling - How `mlmarkdown` shares work with Phase 15 markdown - Plan count and split - Security-review agent ## Deferred Ideas - Messages admin, CMS locale components, AI/theme commands - ROADMAP Phase 15 depends_on should include 14.2.1 (`$gsd-phase --edit 15`)