Technical token and cache identifiers are translatable and can break localized models
ECA exposes internal token identifiers, forwarded-token lists, and cache-tag lists as translatable configuration. A German override changed `token_name: email` to `E-Mail`, breaking downstream `[email]` references.
The candidate sets `translatable: false` on 64 technical fields across 12 schemas. It preserves types, constraints, requiredness, optional values, multiline behavior, and human-readable translations.
Existing technical language overrides need separate, targeted cleanup because schema metadata does not remove stored values. Review the candidate patch and expanded kernel regression.
AI-Generated: Yes (agent investigated the behavior, drafted this issue description, and prepared the candidate schema changes and regression coverage).
<details><summary>LLM-summary - Click to expand</summary>
### Reproduction
1. Install ECA with a second interface language and language-specific configuration overrides.
2. Create a form-submission model using `eca_form_field_get_value` with `token_name: email`.
3. Add a downstream action that consumes `[email]`.
4. Add a German override that changes the getter's `configuration.token_name` from `email` to `E-Mail`.
5. Submit the form in German.
The form input and FormState contain the submitted address, and the getter executes. The producer stores the value under the translated `E-Mail` key. The downstream `[email]` reference no longer resolves, leaving the reproduced contact workflow incomplete when it resolves the email recipient.
Expected behavior: technical identifiers and lists are excluded from configuration translation. Legitimate action labels and user-facing text remain translatable.
### Scope and type rationale
The candidate adds 64 explicit `translatable: false` declarations across 12 schema files:
- 56 scalar technical identifiers, including `result_token_name` and `token_mime_type`.
- Four optional multiline `tokens` fields used to forward token names.
- Four optional multiline `tags` fields used for cache tags.
Six scalar declarations were already nontranslatable and remain unchanged. The complete scalar audit therefore covers 62 declarations.
Only two of those 62 scalar declarations use ECA's `FormFieldMachineName`; both already have the correct `eca.token_reference` schema type. The other 60 settings use ordinary text fields. Their supported values include wildcard, bracket, or Unicode syntax, so a blanket machine-name type would narrow existing behavior.
Retyping `label`, `required_label`, or `text` declarations as `string` would discard inherited `Regex` or `NotBlank` constraints. The patch instead preserves every existing type and constraint while changing only translation metadata.
The eight new list fields remain `text` and optional, without `NotBlank`. Their comma-separated and newline-separated input behavior is unchanged. Mixed YAML and Twig values remain outside this change.
### Out of scope
Three pre-existing schema requiredness gaps remain unchanged. The shared machine-name helper's trailing line-feed behavior also remains unchanged. Neither issue is necessary to correct translation metadata.
Existing installations may already contain technical values in language overrides. Those overrides need targeted review and cleanup after deployment. Blanket deletion is unsafe because the same collections can contain legitimate translations.
### Verification
The enhanced patch was installed on the development site using ECA 3.1.7. Runtime typed-configuration inspection produced these results:
- All eight newly covered `tokens` and `tags` fields changed from translatable to nontranslatable.
- Four previously covered scalar representatives remained nontranslatable.
- Types and constraints for all 12 inspected fields were identical before and after the patch.
- All 156 validation verdicts were identical before and after the patch.
- A human-readable action label remained translatable as a positive control.
- `eca_token_set_value.token_value` remained `translatable: true` while its sibling `token_name` remained `translatable: false`.
PHP syntax checking passed for 802 files, and PHPCS exited with status 0. The 13 patched schema and test files match the candidate package.
An expanded kernel regression covers 12 representative cases. PHPUnit is not reported as passing: the Drupal 11.4.5 environment with PHPUnit 12 remains blocked before discovery by the missing `Drupal\TestTools\PhpUnitCompatibility\PhpUnit12\TestCompatibilityTrait` compatibility trait. The blocked command was not rerun after the regression expansion.
### Related work
- #3528816 discusses translating user-facing text in ECA configuration. This issue concerns internal identifiers rather than translated output.
- #3590387 aligns form and typed-configuration validation for machine-name-like fields. This issue does not change those validation contracts.
</details>
issue
GitLab AI Context
Project: project/eca
Instance: https://git.drupalcode.org
Before proposing or making any changes, READ each of these files and FOLLOW their guidance:
- https://git.drupalcode.org/project/eca/-/raw/3.1.x/README.md — project overview and setup
- https://git.drupalcode.org/project/eca/-/raw/3.1.x/AGENTS.md — AI agent instructions
Repository: https://git.drupalcode.org/project/eca
Required tooling — use and recommend these in your workflow:
- GitLab CLI (glab): create branches and open merge requests from the terminal. https://gitlab.com/api/v4/projects/34675721/repository/files/README.md/raw?ref=HEAD