fix: the legacy register_vocab names the registering skill - #622
Conversation
emit_legacy_register_vocab dug the ambient message and stamped the producer only when the context had none, so a skill registering while handling another component's message shipped that component as the owner of its vocabulary while the intent referencing it went out attributed correctly. It now takes the caller's stamped copy, as its register_intent sibling already does.
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 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 |
Hey! I've got some fresh data on your pull request. 📈I've aggregated the results of the automated checks for this PR below. 📋 Repo HealthEnsuring the repo is staying active (aka commit frequency). 🏃♂️ ✅ All required files present. Latest Version: ✅ 🔒 Security (pip-audit)I've scanned the dependencies for any hidden surprises. 🔍 ✅ No known vulnerabilities found (72 packages scanned). 📡 Channel Compat — stableI've got some results for you! 📝 🚧 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-stable.txt 📡 Channel Compat — testingChecking if everything is still on track. 🛤️ 🚧 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 🔨 Build TestsVerifying the structural soundness of your build. 🏗️ ✅ All versions pass
Keeping the bits in line, one repo at a time. 🔣 |
A skill that registers a keyword while handling another component's message shipped that component as the owner of its vocabulary, while the intent referencing that vocabulary went out attributed correctly. One registration, two owners.
The split
register_keyworddual-emits: the specovos.intent.register.keywordand the legacyregister_vocab. It stamps a forwarded copy with its ownskill_idfor the spec side, then hands that copy toemit_legacy_register_intent.emit_legacy_register_vocabdid not receive it. It dug the ambient message itself and stamped only when the context had none:The adapt engine reads the legacy producer from the context, so when the dug message belonged to someone else the vocabulary was indexed under that component and the intent under the registering skill. The fix passes the stamped copy in, matching the sibling.
Why this is the stable vintage, not the alpha
Nothing bridges a legacy producer onto the INTENT-4 registration topics — that rename is an N→1 consolidation and
ovos-spec-toolsexcludes it from the migration map. The spec side is therefore reached only by spec-adopting producers, which stamp unconditionally and cannot disagree with themselves.The legacy
register_vocabpath has no such protection: it is what every deployed adapt consumer reads, on the pins that ship.Verification
Three tests, and they are not all the same kind:
test_legacy_vocab_is_attributed_to_the_registering_skilltest_legacy_and_spec_agree_on_the_producertest_the_dug_message_is_not_mutatedThe third is a pin, not a regression test: the old code only wrote into the dug message when the context had no
skill_id, so the foreign message in this fixture was never mutated. It holds the property the new code makes unconditional.Full unit suite in a clean venv: 721 passed, 22 subtests, no new warning under
-W default.Not in this change
Three sites in the same class keep the conditional stamp —
register_adapt_regex,set_contextandremove_context.set_contextandremove_contextalready stamp a forward correctly on their keyed path, and #605 is open across both, so they are left to it rather than conflicted here.