Repository navigation
Description
🤖 Auto-generated by Claude Opus 5 (claude-opus-5) via Claude Code — NOT human-reviewed. Verify before acting. Every path, date and lint line below was read from the target repository and from the run's own job logs.
Observed
A submission carries the resource path that existed when the translator made it. The app commits that path as given, however old the submission is. When the target repository renames the resource in between, the app creates the old name again as a new file beside the live one.
OpenVoiceOS/ovos-skill-hello-world shows it. Submissions #497 and #498 were made on 2026-09-05 against intents/Greetings.intent and intents/ThankYouIntent.intent. fix: locale resource names per OVOS-INTENT-2 (#140) renamed those resources to greetings.intent and thank_you_intent.intent on 2026-09-18. A re-run of the two submissions on 2026-10-01 wrote the pre-rename names as new files, and both landed on dev:
| submission | path it wrote | path that was already there |
|---|---|---|
| #497 | locale/oc-FR/intents/Greetings.intent |
locale/oc-FR/intents/greetings.intent |
| #498 | locale/oc-FR/intents/ThankYouIntent.intent |
locale/oc-FR/intents/thank_you_intent.intent |
Two things follow, and both are user-facing:
ovos_skill_hello_world/__init__.pyregistersgreetings.intentandthank_you_intent.intentthrough@intent_handler. Nothing registers the two names the app wrote, so the translator's phrases never reach an intent. The work reads as delivered and does nothing.- OVOS-INTENT-2 §2 requires a resource base name of lowercase ASCII letters, digits and underscores.
ovos-spec-linton the locale tree ofdevreturns2 error(s), 2 warning(s), naming both files, soskill_check / spec_lintis red for every later pull request to that repository.
Five of the 63 open submissions carry a base name that OVOS-INTENT-2 §2 rejects: #489, #490, #497, #498 and #504. Two of the five are pre-rename names in a repository that has been renamed (#489 and #490, Laugh.voc and Stop.voc on ovos-skill-laugh, whose en-US vocabulary is laugh.voc and stop.voc). #504 matches the names its own target repository still uses.
Expected
The app refuses a submission whose path does not exist in the target branch, and says so on the thread. A translation is an edit of a resource that is there; a submission that creates a resource the skill never registers cannot be what the translator meant.
ovos-spec-lint, from ovos-spec-tools, is the other gate. Run on the submitted file before the commit, it stops every base name that OVOS-INTENT-2 §2 rejects, whether the repository renamed anything or not. ovos-spec-tools is not a dependency of this package today.
Either check alone stops all four of the cases above.
A .json resource is already safe by accident: the render step passes --existing-file "$FILE_PATH", so a path that is not in the branch fails there. Only .voc, .dialog and .intent reach the plain cp.
Reproduce
- Read the
TRANSLATION_METAblock ofOpenVoiceOS/ovos-localize#497.file_pathisovos_skill_hello_world/locale/oc-FR/intents/Greetings.intentand the issue was opened 2026-09-05. - List
ovos_skill_hello_world/locale/oc-FR/intentsondevofOpenVoiceOS/ovos-skill-hello-worldbefore 2026-10-01. The file isgreetings.intent;Greetings.intentis not there. - Read
OpenVoiceOS/ovos-skill-hello-world#140, merged 2026-09-18, which renamed it. - Dispatch
submit_translation.ymlwithissues=ALL, run 36878698113. The job for [translate] oc-FR: OpenVoiceOS/ovos-skill-hello-world — Greetings.intent #497 is green and opens a pull request that addsGreetings.intentas a new file. - Run
ovos-spec-lint ovos_skill_hello_world/localeondevof that repository. It returns 2 errors, one for each file the two submissions added.
Where
.github/workflows/submit_translation.yml, the create-pr job. Check file_path against lang compares the language directory in the path with the language of the submission and nothing else. Create branch and commit then writes the path with mkdir -p, so a path that is not in the branch becomes a new file rather than an error. A check belongs between Checkout target repo and the commit, where the branch is on disk and the path can be tested.
Activity