OpenVoiceOS / OpenVoiceOS/architecture
Epic: migrate OVOS repos onto ovos-spec-tools
@JarbasAl is already working on this.
Since May 22, 2026.
- Dominant language
- No language data
- Stars
- 3
- Forks
- 0
- Avg merge
- 15h 20m
- Merged PRs (30d)
- 90
Description
Epic — migrate OVOS repos onto ovos-spec-tools
Tracking epic for migrating the OVOS ecosystem onto ovos-spec-tools, the conformant reference implementation of the OVOS specifications. This is the concrete work behind the "all existing OVOS repos compliant" criterion of the adoption issue #5.
Why
The same machinery has been reimplemented and drifting across the ecosystem — template expansion duplicated in ~7 repos, the language-matching boilerplate (standardize_lang_tag + closest-match + distance < 10) in ~12, ad-hoc resource loaders in ~3, and the bus Message envelope re-implemented in ovos-bus-client alongside a separate FakeMessage in ovos-utils. ovos-spec-tools is the single conformant implementation each repo depends on.
Strategy
- Each repo migrates directly onto
ovos-spec-tools— no transitive routing throughovos-utils. - Waves by dependency order, so a repo lands before its dependents.
- Conformance, not just refactor. The specs are prescriptive; migration may change behaviour (e.g. a malformed template now raises instead of silently degrading). Each such change is deliberate and tested.
- Full normalised BCP-47 tag everywhere, no macro flag. Engines reconcile at match time via
closest_lang.
Per-repo recipe
- Add the
ovos-spec-toolsdependency. - Replace the local implementation with a call to
ovos-spec-tools; delete the dead copy. - Preserve the repo's public API as a thin wrapper (deprecation warning pointing at the spec-tools import).
- Run the repo's tests; reconcile divergences against the spec.
- For a repo shipping
locale/, addovos-spec-lintto CI. - One PR per repo.
Progress
Wave 1 — foundation
-
ovos-spec-tools— released to PyPI; alphas through0.5.0a1 -
ovos-utils— template expansion → OpenVoiceOS/ovos-utils#373 -
ovos-spec-tools—lang_matches/iter_locale_dirs→ OpenVoiceOS/ovos-spec-tools#4 -
ovos-spec-tools—LocaleResources.find→ OpenVoiceOS/ovos-spec-tools#6 -
ovos-spec-tools—keyword_form/vocabulary_keywords/utterance_contains/strip_samples→ OpenVoiceOS/ovos-spec-tools#8 -
ovos-spec-tools—LocaleResources.voc_list/.voc_match/.remove_voc→ OpenVoiceOS/ovos-spec-tools#10 -
ovos-spec-tools— OVOS-MSG-1Messageenvelope → OpenVoiceOS/ovos-spec-tools#12
Wave 1.5 — bus Message primitive consolidation
The Message class moves to ovos-spec-tools as the single source of truth; ovos-bus-client and ovos-utils.fakebus re-export it.
-
ovos-spec-tools—Messageenvelope landed -
ovos-bus-client— re-export +publishattachment → OpenVoiceOS/ovos-bus-client#215 -
ovos-utils— fakebus re-export +publishattachment → OpenVoiceOS/ovos-utils#375
Wave 2 — core libraries
-
ovos-bus-client—standardize_langmigration → OpenVoiceOS/ovos-bus-client#213 (merged in2.0.0a1) -
ovos-workshop— resource loading + dialog rendering → OpenVoiceOS/ovos-workshop#413 -
ovos-core— language matching (intent services) → OpenVoiceOS/ovos-core#763 -
ovos-plugin-manager— language matching (utils/config.py)
Wave 3 — pipeline plugins
-
nebulento→ OpenVoiceOS/nebulento#27 -
padacioso→ OpenVoiceOS/padacioso#55 -
palavreado→ OpenVoiceOS/palavreado#25 -
linha-fina→ TigreGotico/linha-fina#13 -
jurebes→ TigreGotico/jurebes#11 -
ovos-padatious-pipeline-plugin→ OpenVoiceOS/ovos-padatious-pipeline-plugin#70 -
ovos-adapt-pipeline-plugin→ OpenVoiceOS/ovos-adapt-pipeline-plugin#42 -
ovos-ocp-pipeline-plugin→ OpenVoiceOS/ovos-ocp-pipeline-plugin#130
Wave 4 — leaf consumers
-
ovos-lang-parser -
ovos-option-matcher-fuzzy-plugin -
ovos-solver-YesNo-plugin - skills shipping a
locale/folder
Forthcoming spec adoption
As the in-flight specs leave Draft, the per-repo recipe extends to adopting their topic names and conformance points. The topic-name catalogue belongs in ovos-pydantic-models, not in ovos-spec-tools; tracked separately.
Specs with pending implementation impact (open PRs — see issue #5):
- OVOS-CONVERSE-1 (PR #25) —
skill_idreplacesowner_id;converse.ping/.pongtopic rename;session_idremoved from response data payload - OVOS-STOP-1 (PR #33, merged) —
ovos.stop.ping/.pongcapability-discovery convention;skill_idin conformance - OVOS-TRANSFORM-1 (PR #20) —
skill_idinMatch; per-type transformer ordering via session fields;blacklisted_*_transformerssession keys - OVOS-PIPELINE-1 (PR #11, merged) —
ovos.utterance.handlereplacesrecognizer_loop:utterance;ovos.intent.handler.*replacesmycroft.skill.handler.*;ovos.intent.unmatchedreplacescomplete_intent_failure - OVOS-INTENT-4 §11 (PR #45) — session-scoped intent registration;
context.session.session_idas registration key - OVOS-BRIDGE-1 (PR #43) — bridge conformance;
session_idrouting; site_id ownership - OVOS-AUDIO-IN-1 (PR #51) —
ovos.utterance.handleemission contract; audio-transformer chain before STT - OVOS-USER-ID-1 (PR #54, issue #53) —
session.user_id,session.auth_level, and four per-signal fields (voice_id,face_id,name_id,passphrase_id,default_user_id) in SESSION-1 field registry; recognition plugin and bridge conformance obligations; skillauth_levelgating
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.