OpenVoiceOS / OpenVoiceOS/architecture

Epic: migrate OVOS repos onto ovos-spec-tools

Open
#7 0 comments 0 reactions 1 assignee View on GitHub

@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 through ovos-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
  1. Add the ovos-spec-tools dependency.
  2. Replace the local implementation with a call to ovos-spec-tools; delete the dead copy.
  3. Preserve the repo's public API as a thin wrapper (deprecation warning pointing at the spec-tools import).
  4. Run the repo's tests; reconcile divergences against the spec.
  5. For a repo shipping locale/, add ovos-spec-lint to CI.
  6. One PR per repo.

Progress

Wave 1 — foundation
  • ovos-spec-tools — released to PyPI; alphas through 0.5.0a1
  • ovos-utils — template expansion → OpenVoiceOS/ovos-utils#373
  • ovos-spec-toolslang_matches / iter_locale_dirs → OpenVoiceOS/ovos-spec-tools#4
  • ovos-spec-toolsLocaleResources.find → OpenVoiceOS/ovos-spec-tools#6
  • ovos-spec-toolskeyword_form / vocabulary_keywords / utterance_contains / strip_samples → OpenVoiceOS/ovos-spec-tools#8
  • ovos-spec-toolsLocaleResources.voc_list / .voc_match / .remove_voc → OpenVoiceOS/ovos-spec-tools#10
  • ovos-spec-tools — OVOS-MSG-1 Message envelope → 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-toolsMessage envelope landed
  • ovos-bus-client — re-export + publish attachment → OpenVoiceOS/ovos-bus-client#215
  • ovos-utils — fakebus re-export + publish attachment → OpenVoiceOS/ovos-utils#375
Wave 2 — core libraries
  • ovos-bus-clientstandardize_lang migration → OpenVoiceOS/ovos-bus-client#213 (merged in 2.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_id replaces owner_id; converse.ping/.pong topic rename; session_id removed from response data payload
  • OVOS-STOP-1 (PR #33, merged) — ovos.stop.ping/.pong capability-discovery convention; skill_id in conformance
  • OVOS-TRANSFORM-1 (PR #20) — skill_id in Match; per-type transformer ordering via session fields; blacklisted_*_transformers session keys
  • OVOS-PIPELINE-1 (PR #11, merged) — ovos.utterance.handle replaces recognizer_loop:utterance; ovos.intent.handler.* replaces mycroft.skill.handler.*; ovos.intent.unmatched replaces complete_intent_failure
  • OVOS-INTENT-4 §11 (PR #45) — session-scoped intent registration; context.session.session_id as registration key
  • OVOS-BRIDGE-1 (PR #43) — bridge conformance; session_id routing; site_id ownership
  • OVOS-AUDIO-IN-1 (PR #51) — ovos.utterance.handle emission 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; skill auth_level gating

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.