Skip to content

fix: launch six skills by the ids their packages register - #205

Merged
goldyfruit merged 2 commits into
devfrom
fix/skill-ids-the-skills-register
Oct 8, 2026
Merged

goldyfruit merged 2 commits into
devfrom
fix/skill-ids-the-skills-register

Conversation

@goldyfruit

@goldyfruit goldyfruit commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Six skill images crash at start on both channels and restart forever:

ValueError: unknown skill_id: skill-ovos-hello-world.openvoiceos

Their packages were renamed, and the images still ask ovos-skill-launcher for the old ids:

Image Asked for The package registers
skill-hello-world skill-ovos-hello-world.openvoiceos ovos-skill-hello-world.openvoiceos
skill-jokes skill-ovos-icanhazdadjokes.openvoiceos ovos-skill-icanhazdadjokes.openvoiceos
skill-parrot skill-ovos-parrot.openvoiceos ovos-skill-parrot.openvoiceos
skill-wikipedia skill-ovos-wikipedia.openvoiceos ovos-skill-wikipedia.openvoiceos
skill-personal ovos-skill-personal.OpenVoiceOS ovos-skill-personal.openvoiceos
skill-randomness ovos-skill-randomness.openvoiceos skill-ovos-randomness.openvoiceos

The six images now use the registered id. The stable and alpha releases of each skill register the same id.

Every skill image also wrote its id twice: in ENV SKILL_ID, which the health check reads, and again as a literal in the launcher's CMD. Docker expands no variable in CMD's exec form, and two copies of one value can drift apart. All 21 skill images now start with CMD exec ovos-skill-launcher "$SKILL_ID". The shell form expands the variable, and exec keeps the launcher PID 1, as the old CMD did behind the entrypoint's exec "$@". That form works on any skill-base, older ones included. SKILL_ID is now the only place each id is written.

Six skills reconnecting every few seconds also kept core retraining. On alpha, ovos-installer's containers "all" jobs then never got "what time is it" to the date-time skill: it fell through to the DuckDuckGo fallback, and the spoken-answer check failed whenever that did not answer. Both containers jobs failing on OpenVoiceOS/ovos-installer#648's nightly are this.

The smoke test only checked that the launcher and ovos-workshop were present. It now also checks that the image's SKILL_ID is one an installed package registers, under opm.skill or ovos.plugin.skill. A skill rename then fails the image build instead of shipping a container that cannot start.

Test plan

  • Against the published smartgic/ovos-skill-*:alpha images, the new smoke step rejects the current id and accepts the new one. Checked for hello-world (prefix order), randomness (renamed the other way) and personal (case), for example skill skill-ovos-hello-world.openvoiceos: no installed package registers it; registered: ovos-skill-hello-world.openvoiceos.
  • The new CMD run on the published hello-world image with the corrected id. PID 1 is ovos-skill-launcher ovos-skill-hello-world.openvoiceos, with no "unknown skill_id". The launcher waits for a bus, as it should with none there.
  • bash -n and ShellCheck on scripts/ci/smoke.sh.
  • PR build on adf79273: all 21 skill images build, on amd64 and arm64.
  • The smoke test is not part of that. It runs in Verify, which a pull request skips (if: inputs.push, and a PR build is a dry run). So the new SKILL_ID check first runs at the publish after merge. There, an image whose id no package registers fails verification and is not published. Before merge, I ran it locally against the published :alpha images, each with the id it starts with. 20 of 21 pass, all six fixed ones included.
    • skill-homescreen could not be run that way: its image has no /bin/bash, which the smoke step runs it with, before this PR as well. Its package registers skill-ovos-homescreen.openvoiceos, its SKILL_ID, and the new CMD needs only /bin/sh, which it has.
    • That missing bash would also fail the homescreen image's Verify at publish, separately from this PR.

Not changed here, and older than this PR: a skill container ignores SIGTERM and is killed when docker stop times out. The unchanged date-time image took the same 15 s and exited 137. Its PID 1 is the launcher, a Python process with no SIGTERM handler. A STOPSIGNAL SIGINT in the skill base, or running under an init, would let it stop at once. That is worth a PR of its own.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Updated the configured identifiers for several bundled skills so their containers launch with the intended skill IDs.
    • Smoke tests now verify that a configured skill ID is registered. If no matching registration is found, the test reports the registered IDs—or indicates that none were found.

hello-world, jokes, parrot, personal, randomness and wikipedia exited at
start with "ValueError: unknown skill_id" and restarted forever, on both
channels: their packages were renamed and the images still asked the
launcher for the old ids (skill-ovos-hello-world.openvoiceos, the
capitalised ovos-skill-personal.OpenVoiceOS, and randomness the other way
round). Six reconnecting skills kept core retraining, so on alpha "what
time is it" never reached the date-time skill and fell to DuckDuckGo.

The smoke test now checks that a skill image's SKILL_ID is an id an
installed package registers, so a rename fails the build instead.

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

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 469a84ef-63e3-4e0a-926e-9014f6900416
📥 Commits

Reviewing files that changed from the base of the PR and between bb4b295 and 8b94e99.

📒 Files selected for processing (7)
  • scripts/ci/smoke.sh
  • skills/skill-hello-world/Dockerfile
  • skills/skill-jokes/Dockerfile
  • skills/skill-parrot/Dockerfile
  • skills/skill-personal/Dockerfile
  • skills/skill-randomness/Dockerfile
  • skills/skill-wikipedia/Dockerfile

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Six skill Dockerfiles update the IDs used by their environment settings and launcher commands. The smoke script now checks whether installed skill entry points register the requested ID and reports registered IDs if it does not find a match.

Changes

Skill ID alignment and validation

Layer / File(s) Summary
Update Docker skill identifiers
skills/skill-hello-world/Dockerfile, skills/skill-jokes/Dockerfile, skills/skill-parrot/Dockerfile, skills/skill-personal/Dockerfile, skills/skill-randomness/Dockerfile, skills/skill-wikipedia/Dockerfile
The Dockerfiles update the IDs used by SKILL_ID and the launcher command. Health-check configurations remain unchanged.
Check registered skill IDs
scripts/ci/smoke.sh
The smoke script checks installed opm.skill and ovos.plugin.skill entry points for the requested ID. It reports registered IDs when none match and confirms registration on success.

Priority: ⬆️ High

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 8b94e

The updated IDs match the inspected package registrations, and the smoke check now detects mismatches. No concrete issue prevents merging; the exact versions in all six builds have not been confirmed.

Architecture Summary

Architecture risk: 🔵 Low · up to 8b94e

The change affects 2 systems.

Changed systems: skills, scripts

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — skills (service) was modified; 6 changed files map to changed impact.
  • observed — scripts (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in scripts/ci/smoke.sh: The SKILL_ID check now collects names from installed opm.skill and ovos.plugin.skill entry points and exits with an error listing registered IDs when the requested ID is absent. The success message now reports that the package registers the ID; previously it only reported the launcher and workshop were present.
  • observed — Modified behavior in skills/skill-hello-world/Dockerfile: The SKILL_ID environment value and ovos-skill-launcher argument changed from skill-ovos-hello-world.openvoiceos to ovos-skill-hello-world.openvoiceos. The health-check command and its timing settings are unchanged.
  • observed — Modified behavior in skills/skill-jokes/Dockerfile: SKILL_ID now uses ovos-skill-icanhazdadjokes.openvoiceos instead of skill-ovos-icanhazdadjokes.openvoiceos.
  • observed — Modified behavior in skills/skill-jokes/Dockerfile: The health-check comments, timing options, and command are unchanged; the referenced skill ID now resolves to the updated SKILL_ID value.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: updating six skill launch and health-check IDs to match the IDs registered by their packages.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · 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.

@goldyfruit goldyfruit self-assigned this Oct 8, 2026
@goldyfruit goldyfruit added the bug Something isn't working label Oct 8, 2026
@goldyfruit goldyfruit added this to the Pac-Man milestone Oct 8, 2026
Each skill image wrote its id twice: in ENV SKILL_ID, which the health
check and the smoke test read, and again as a literal in the launcher's
CMD, because Docker expands no variable in CMD's exec form. Two copies of
one value can drift apart. CMD now uses the shell form, so the launcher
gets the id SKILL_ID holds, and exec keeps the launcher PID 1, as the old
CMD did behind the entrypoint's exec "$@". The smoke test's check of
SKILL_ID now covers the id that actually starts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@goldyfruit
goldyfruit merged commit 14c03fc into dev Oct 8, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant