Skip to content

feat: emit spec bus messages alongside legacy (PIPELINE-1 §8/§9.6, STOP-1 §4.2)#415

Draft
JarbasAl wants to merge 7 commits into
devfrom
feat/spec-bus-messages
Draft

feat: emit spec bus messages alongside legacy (PIPELINE-1 §8/§9.6, STOP-1 §4.2)#415
JarbasAl wants to merge 7 commits into
devfrom
feat/spec-bus-messages

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Jun 5, 2026

Copy link
Copy Markdown
Member

What

Introduce a deployment-wide legacy_namespace config flag (default True) that
selects the bus-topic namespace during the mycroft.* → ovos.* transition. A skill
emits exactly one namespace (never both), so subscribers never see duplicate
messages — and skills subscribe on both so they work whichever namespace a producer
uses.

Logical event legacy (legacy_namespace: true) spec (legacy_namespace: false)
handler trio (PIPELINE-1 §8) mycroft.skill.handler.start/.complete/.error ovos.intent.handler.start/.complete/.error
speak (PIPELINE-1 §9.6) speak ovos.utterance.speak
stop pong (STOP-1 §4.2) skill.stop.pong ovos.stop.pong
stop subscribe (§4.2/§4.3/§5.3) {skill}.stop.ping, mycroft.stop, {skill}.stop also ovos.stop.ping, ovos.stop, {skill}:stop

Selection reads Configuration().get("legacy_namespace", True) per emit. No double-emit
(this avoids hacks like audio receiving speak twice).

Why first

Companion to ovos-core; merges first so core CI sees the skill-side behaviour. See also
ovos-dinkum-listener, ovos-simple-listener, ovos-audio companion PRs.

Tests

test/unittests/test_spec_bus_messages.py — both namespaces for the trio, speak and pong
(6 passed). Also exercised end-to-end by the ovos-core conformance suites.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 41feafc1-c752-4bf2-b4d2-91bd286d6a8f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/spec-bus-messages

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.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Standard verification protocol finished. 📋

I've aggregated the results of the automated checks for this PR below.

📋 Repo Health

Scanning for any signs of 'deprecated' acne. 🧴

✅ All required files present.

Latest Version: 9.0.0a1

ovos_workshop/version.py — Version file
README.md — README
LICENSE — License file
pyproject.toml — pyproject.toml
⚠️ setup.py — setup.py
CHANGELOG.md — Changelog
ovos_workshop/version.py has valid version block markers

🔍 Lint

A quick update on the progress of your PR checks. 📈

ruff: issues found — see job log

🔒 Security (pip-audit)

I've audited the access control lists. 📋

✅ No known vulnerabilities found (72 packages scanned).

🔨 Build Tests

I've finished the digital carpentry on this PR. 🔨

Python Build Install Tests
3.10
3.11
3.12
3.13
3.14

❌ 3.10: Build OK, install failed
❌ 3.11: Build OK, install failed
❌ 3.12: Build OK, install failed
❌ 3.13: Build OK, install failed
❌ 3.14: Build OK, install failed
Check job logs for details.

⚖️ License Check

I've checked the genealogical tree of your licenses. 🌳

✅ No license violations found.

Policy: Apache 2.0 (universal donor). StrongCopyleft / NetworkCopyleft / WeakCopyleft / Other / Error categories fail. MPL allowed.


Crafting quality through automation. 🧪

@JarbasAl JarbasAl force-pushed the feat/spec-bus-messages branch 2 times, most recently from c75b624 to cccd290 Compare June 5, 2026 14:43
@github-actions github-actions Bot added feature and removed feature labels Jun 5, 2026
JarbasAl and others added 6 commits June 26, 2026 12:36
… §4.2)

A skill emits either the legacy mycroft.* topics or the OVOS spec ovos.*
topics, chosen by the deployment 'legacy_namespace' config (default True) —
never both, so a subscriber never sees duplicate messages. Skills subscribe
on BOTH namespaces. Covers:
- handler-lifecycle trio: mycroft.skill.handler.* <-> ovos.intent.handler.* (§8)
- speak <-> ovos.utterance.speak (§9.6)
- stop ping/pong: {skill}.stop.ping/skill.stop.pong <-> ovos.stop.ping/ovos.stop.pong (§4.2)
- stop dispatch: also subscribe ovos.stop and {skill}:stop (§4.3/§5.3)

Adds dual-namespace unit tests (test/unittests/test_spec_bus_messages.py).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the legacy_namespace flag and all hand-rolled dual-emit. OVOSSkill now emits
exactly the ovos.* spec topic (from ovos_spec_tools.SpecMessage) for the
PIPELINE-1 §8 handler trio, §9.6 speak, and STOP-1 §4.2 pong; the bus
(NamespaceTranslator, driven by ovos_spec_tools.MIGRATION_MAP) bridges each to its
legacy counterpart so subscribers on either namespace still receive it. The only
remaining direct legacy subscription is the per-skill placeholder
{skill_id}.stop.ping, which the broadcast ovos.stop.ping replaces and which cannot
be a static bus rename. Requires the trio/stop entries in MIGRATION_MAP
(ovos-spec-tools). Tests rewritten to assert one spec emit is observed on BOTH
namespaces via the bridge.
@JarbasAl JarbasAl force-pushed the feat/spec-bus-messages branch from fce8897 to 75c610a Compare June 26, 2026 11:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant