Skip to content

fix: ship the workshop dialogs in every locale under spec base names - #737

Merged
JarbasAl merged 1 commit into
devfrom
fix/workshop-dialog-base-names
Oct 29, 2026
Merged

JarbasAl merged 1 commit into
devfrom
fix/workshop-dialog-base-names

Conversation

@openvoiceos-bot

Copy link
Copy Markdown
Contributor

🤖 Auto-generated by Claude Opus 5.5 (claude-opus-5-5) via Claude Code — NOT human-reviewed. Verify before acting.

What changed

ovos-workshop speaks six dialogs of its own. This PR ships each of them in all 47 locales, and gives two of them base names that OVOS-INTENT-2 §2 allows.

Dialog Spoken by Locales before After
skill_error (was skill.error) the intent error handler 6 47
cant_save_game, cant_load_game ConversationalGameSkill save and load 6 47
game_pause, game_unpause ConversationalGameSkill pause and resume 6 47
no_media_available (was no.media.available) OVOSCommonPlaybackSkill when no featured media exists 0 47

§2: "a resource base name MUST be lowercase letters, digits and underscores". The two dotted names broke that rule, and the spec linter refuses them. The rename changes the two call sites in ovos.py and common_play.py and the six skill.error files that translators wrote.

What it needs from the reviewer

Merge it before #414. On #414 a dialog that is missing in the current language raises DialogNotFound, so without this PR a game skill raises in 41 languages and the media player raises in all of them. After this merges, #414 takes the skill_error name in its own error handler.

Translation status

  • The en-US no_media_available text is new source text: There is no media available.
  • Every other new file is a machine translation from en-US. Its first line is # machine translation from en-US, unvouched, which the dialog loaders skip as a comment. No native speaker read them.
  • The text of the files that translators wrote in da-DK, en-US, fr-FR, gl-ES, kab and nl-NL is not changed.

Tests

test/unittests/test_workshop_dialogs.py reads the dialog names from the string literals in the workshop code, then checks two things: each base name follows §2, and every locale ships each dialog.

Tree Result
origin/dev package 2 failed, 1 passed: 2 dotted names, 252 missing files
this branch 3 passed

The rest of the suite on this branch: 824 passed, 1 skipped, the same count as origin/dev in the same venv.

Each of the 282 dialogs (47 locales × 6) loads at least one line through ovos-spec-tools read_resource_file and renders through the ovos-utils MustacheDialogRenderer. Each skill_error line has the {skill} slot and no other slot. No new line contains (, | or [, so the expansion syntax does not change the text.

Consumers

An org-wide code search finds no skill that ships or speaks no.media.available or skill.error. Three skill tests name the string skill.error in negative asserts: ovos-skill-wordnet, ovos-skill-iss-location and ovos-skill-number-facts. They do not fail after the rename, but their check of the bare dialog name then tests nothing.

Not verified: the wording in each language.

🤖 Generated with Claude Code

The game skill, the error handler and the common play skill speak
dialogs that ovos-workshop ships. skill.error and the four game dialogs
exist in 6 of 47 locales, and no.media.available exists in none.

OVOS-INTENT-2 §2 allows only lowercase letters, digits and underscores
in a resource base name. Rename skill.error to skill_error and
no.media.available to no_media_available, in the files and in the code.

Add a machine-translated draft of each missing file. Every draft starts
with the line '# machine translation from en-US, unvouched'.

A test reads the dialog names from the workshop code. It checks each
base name and that every locale ships each dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 19193219-947f-4ca8-950d-fb7bc6d815be
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the fix label Oct 29, 2026
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Beep! I'm back with the goodies! 🍭

I've aggregated the results of the automated checks for this PR below.

📡 Channel Compat — testing

Here's the report you've been waiting for. 📁

🚧 Channel unresolvable with this checkout — the repo's dependency floors exceed what the channel pins (fleet finding; see the install log).

Constraints: https://raw.githubusercontent.com/OpenVoiceOS/OpenVoiceOS/main/constraints-testing.txt
Resolved stack: channel-compat-testing artifact (constraints + pip freeze).

📋 Repo Health

Scanning for any signs of 'copy-paste' obesity. 🍕

✅ All required files present.

Latest Version: 9.10.0a1

✅ ovos_workshop/version.py — Version file
✅ README.md — README
✅ LICENSE — License file
✅ pyproject.toml — pyproject.toml
⚠️ setup.py — setup.py
✅ CHANGELOG.md — Changelog
✅ ovos_workshop/version.py has valid version block markers

⚖️ License Check

Ensuring every file has a proper birth certificate. 👶

✅ No license violations found.

Policy: Apache 2.0 (universal donor). StrongCopyleft / NetworkCopyleft / WeakCopyleft / Other / Error categories fail. MPL allowed.

🔒 Security (pip-audit)

Ensuring our project is resilient to attacks. 🏰

⚠️ 13 known vulnerabilities in 1 package (72 packages scanned). This job warns and does not fail; update the affected packages.

Package Version ID Description Fix
filelock 3.32.7 CVE-2026-112940 ReadWriteLock and AsyncReadWriteLock (the SQLite-backed reader/writer lock) hand SQLite a name they do not contro... 4.2.1
filelock 3.32.7 CVE-2026-112913 On Windows, ReadWriteLock and AsyncReadWriteLock (the SQLite-backed reader/writer lock) connect SQLite to the loc... 4.2.1
filelock 3.32.7 CVE-2026-112907 On Windows the soft locks (SoftFileLock, MarkerSoftFileLock, SoftFileLease, their async forms, and a FileLock... 4.2.1
filelock 3.32.7 CVE-2026-112938 StrictSoftFileLock and AsyncStrictSoftFileLock check <path>.filelock (the coordination directory that holds the... 4.2.1
filelock 3.32.7 CVE-2026-112936 ### Summary ReadWriteLock and AsyncReadWriteLock resolve the lock path with pathlib.Path.resolve() and pass it ... 4.0.9
filelock 3.32.7 CVE-2026-112910 filelock on Windows ignores the mode argument. FileLock(path, mode=0o600) creates the same file as `FileLock(path... 4.2.1
filelock 3.32.7 CVE-2026-112909 UnixFileLock, the backend of FileLock and AsyncFileLock on Unix, empties whatever regular file it finds at the ... 4.2.1
filelock 3.32.7 CVE-2026-112911 StrictSoftFileLock, AsyncStrictSoftFileLock, SoftReadWriteLock and AsyncSoftReadWriteLock keep their whole ow... 4.2.1
filelock 3.32.7 CVE-2026-112939 SoftFileLock, MarkerSoftFileLock, SoftFileLease, their async variants and a FileLock that has fallen back to ... 4.2.1
filelock 3.32.7 CVE-2026-112915 ReadWriteLock and AsyncReadWriteLock (the SQLite-backed reader/writer lock) run PRAGMA journal_mode=MEMORY on a... 4.2.1
filelock 3.32.7 CVE-2026-112935 The stale-lock break shared by SoftFileLock, MarkerSoftFileLock and SoftFileLease (and their async variants, an... 4.2.1
filelock 3.32.7 CVE-2026-112912 raise_on_not_writable_file() is the check that SoftFileLock and the locks sharing its acquire path run before eve... 4.2.1
filelock 3.32.7 CVE-2026-112908 StrictSoftFileLock and AsyncStrictSoftFileLock apply the caller's mode to the sentinel (the lock file at `<path... 4.2.1

🔍 Lint

Checking if there's anything else we need to do. 📋

❌ ruff: issues found in 108 file(s) — see job log
✅ actionlint: 11 workflow file(s), no finding

🔨 Build Tests

Running the forge to see if the code tempers correctly. 🔥

✅ All versions pass

Python Build Install Tests pytest
3.10 ✅ ✅ ✅ 813 passed, 252 warnings, 46 subtests passed in 73.38s (0:01:13)
3.11 ✅ ✅ ✅ 813 passed, 254 warnings, 46 subtests passed in 72.32s (0:01:12)
3.12 ✅ ✅ ✅ 813 passed, 254 warnings, 46 subtests passed in 72.41s (0:01:12)
3.13 ✅ ✅ ✅ 813 passed, 253 warnings, 46 subtests passed in 74.03s (0:01:14)
3.14 ✅ ✅ ✅ 813 passed, 253 warnings, 46 subtests passed in 71.42s (0:01:11)

Keeping the OVOS ecosystem thriving 🌿

@JarbasAl
JarbasAl marked this pull request as ready for review October 29, 2026 12:02
@JarbasAl
JarbasAl merged commit 88f9a4c into dev Oct 29, 2026
16 checks passed
JarbasAl added a commit that referenced this pull request Oct 29, 2026
Take #737: the workshop's own dialogs in every locale, and skill.error
renamed to skill_error. The error handler renders skill_error. The
test for a language with no error dialog uses zu-ZA, because de-DE
ships one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants