Repository navigation
fix: launch six skills by the ids their packages register - #205
Conversation
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>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (7)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughSix 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. ChangesSkill ID alignment and validation
Priority: ⬆️ High Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Merge Risk: ⚪ Minimal · up to 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 SummaryArchitecture risk: 🔵 Low · up to The change affects 2 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
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>
Summary
Six skill images crash at start on both channels and restart forever:
Their packages were renamed, and the images still ask
ovos-skill-launcherfor the old ids:skill-ovos-hello-world.openvoiceosovos-skill-hello-world.openvoiceosskill-ovos-icanhazdadjokes.openvoiceosovos-skill-icanhazdadjokes.openvoiceosskill-ovos-parrot.openvoiceosovos-skill-parrot.openvoiceosskill-ovos-wikipedia.openvoiceosovos-skill-wikipedia.openvoiceosovos-skill-personal.OpenVoiceOSovos-skill-personal.openvoiceosovos-skill-randomness.openvoiceosskill-ovos-randomness.openvoiceosThe 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'sCMD. Docker expands no variable inCMD's exec form, and two copies of one value can drift apart. All 21 skill images now start withCMD exec ovos-skill-launcher "$SKILL_ID". The shell form expands the variable, andexeckeeps the launcher PID 1, as the oldCMDdid behind the entrypoint'sexec "$@". That form works on any skill-base, older ones included.SKILL_IDis 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_IDis one an installed package registers, underopm.skillorovos.plugin.skill. A skill rename then fails the image build instead of shipping a container that cannot start.Test plan
smartgic/ovos-skill-*:alphaimages, 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 exampleskill skill-ovos-hello-world.openvoiceos: no installed package registers it; registered: ovos-skill-hello-world.openvoiceos.CMDrun on the published hello-world image with the corrected id. PID 1 isovos-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 -nand ShellCheck onscripts/ci/smoke.sh.adf79273: all 21 skill images build, on amd64 and arm64.Verify, which a pull request skips (if: inputs.push, and a PR build is a dry run). So the newSKILL_IDcheck 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:alphaimages, each with the id it starts with. 20 of 21 pass, all six fixed ones included./bin/bash, which the smoke step runs it with, before this PR as well. Its package registersskill-ovos-homescreen.openvoiceos, itsSKILL_ID, and the newCMDneeds only/bin/sh, which it has.Verifyat publish, separately from this PR.Not changed here, and older than this PR: a skill container ignores SIGTERM and is killed when
docker stoptimes 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. ASTOPSIGNAL SIGINTin 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