Skip to content

feat: add ovoscope end2end intent-routing tests#28

Draft
JarbasAl wants to merge 13 commits into
devfrom
feat/ovoscope-tests
Draft

feat: add ovoscope end2end intent-routing tests#28
JarbasAl wants to merge 13 commits into
devfrom
feat/ovoscope-tests

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Jun 2, 2026

Copy link
Copy Markdown
Member

Auto-generated ovoscope intent-routing tests.

Covers Padatious intents (exact message-type assertions) and Adapt intents
(speak-response assertions). One test method per canonical utterance.

Generated by tools/gen_ovoscope_tests.py from the dataset at
knowledge/datasets/ovoscope/test_dataset.jsonl.

Run: pytest test/end2end/ -v --timeout=60

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown

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: 6eea4b31-c56b-4555-9bc4-a5d5d475851e

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/ovoscope-tests

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 and usage tips.

@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown

The code stars have aligned. Here's the update. ✨

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

⚖️ License Check

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

✅ No license violations found (10 packages).

License distribution: 2× MIT, 2× MIT License, 1× Apache Software License, 1× Apache-2.0 OR BSD-2-Clause, 1× Apache2.0, 1× BSD License, 1× BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0, 1× BSD-3-Clause and Public-Domain

Full breakdown — 10 packages
Package Version License URL
build 1.5.0 MIT link
colorspacious 1.1.2 MIT License link
numpy 2.4.6 BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0 link
ovos-skill-mark1-ctrl 0.0.1 Apache2.0 link
ovos_color_parser 0.0.9a4 Apache Software License link
ovos_i2c_detection 0.0.6a2 MIT link
packaging 26.2 Apache-2.0 OR BSD-2-Clause link
pyahocorasick 2.3.1 BSD-3-Clause and Public-Domain link
pyproject_hooks 1.2.0 MIT License link
pyserial 3.5 BSD License link

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

🔌 Skill Tests (ovoscope)

I ran the end-to-end skill tests to see how your skill behaves in the real world! 🎤

0/47 passed, 47 failed

❌ **TestAdapt10_Enclosureeyesblink** — 0/4
Test Result
test_blink ❌ failed
test_blink_enclosure ❌ failed
test_blink_left ❌ failed
test_blink_right ❌ failed

test_blink failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_blink_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_blink_left failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt11_Enclosureeyesspin** — 0/2
Test Result
test_rotate ❌ failed
test_rotate_enclosure ❌ failed

test_rotate failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_rotate_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt12_Enclosureeyesnarrow** — 0/2
Test Result
test_eye_narrow ❌ failed
test_eye_narrow_enclosure ❌ failed

test_eye_narrow failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_eye_narrow_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt13_Enclosurereset** — 0/1
Test Result
test_enclosure_back_to_default ❌ failed

test_enclosure_back_to_default failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt14_Enclosuremouthsmile** — 0/2
Test Result
test_smile ❌ failed
test_smile_enclosure ❌ failed

test_smile failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_smile_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt15_Enclosuremouthlisten** — 0/2
Test Result
test_listen ❌ failed
test_listen_enclosure ❌ failed

test_listen failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_listen_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt16_Enclosuremouththink** — 0/2
Test Result
test_think ❌ failed
test_think_enclosure ❌ failed

test_think failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_think_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt17_Enclosurecrazyeyes** — 0/3
Test Result
test_crazy_eye ❌ failed
test_crazy_eye_animation ❌ failed
test_crazy_eye_enclosure ❌ failed

test_crazy_eye failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_crazy_eye_animation failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_crazy_eye_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt4_Enclosurelookright** — 0/2
Test Result
test_right_look ❌ failed
test_right_look_enclosure ❌ failed

test_right_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_right_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt5_Enclosurelookleft** — 0/2
Test Result
test_left_look ❌ failed
test_left_look_enclosure ❌ failed

test_left_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_left_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt6_Enclosurelookup** — 0/2
Test Result
test_up_look ❌ failed
test_up_look_enclosure ❌ failed

test_up_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_up_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt7_Enclosurelookdown** — 0/2
Test Result
test_down_look ❌ failed
test_down_look_enclosure ❌ failed

test_down_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_down_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt8_Enclosurelookupdown** — 0/3
Test Result
test_down_up_look ❌ failed
test_down_up_look_animation ❌ failed
test_down_up_look_enclosure ❌ failed

test_down_up_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_down_up_look_animation failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_down_up_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestAdapt9_Enclosurelookleftright** — 0/3
Test Result
test_left_right_look ❌ failed
test_left_right_look_animation ❌ failed
test_left_right_look_enclosure ❌ failed

test_left_right_look failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_left_right_look_animation failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError

test_left_right_look_enclosure failure:

ope/bus_coverage.py:611: in record_session
    skill_id = self._skill_id_for_message(msg)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

msg = 'speak'

    @staticmethod
    def _skill_id_for_message(msg: Message) -> Optional[str]:
        """Extract ``skill_id`` from a message's context field.
    
        Args:
            msg: A bus :class:`~ovos_bus_client.message.Message`.
    
        Returns:
            The ``skill_id`` value from ``msg.context``, or ``None``.
        """
>       if not msg.context:
               ^^^^^^^^^^^
E       AttributeError: 'str' object has no attribute 'context'

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/bus_coverage.py:854: AttributeError
❌ **TestPadatious1_Custom_eye_color_intent** — 0/5
Test Result
test_change_to_a_custom_eye_color ❌ failed
test_change_to_a_custom_eye_colors ❌ failed
test_set_custom_eye_color ❌ failed
test_set_to_a_custom_eye_color ❌ failed
test_set_to_a_custom_eye_colors ❌ failed

test_change_to_a_custom_eye_color failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_change_to_a_custom_eye_colors failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_set_custom_eye_color failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError
❌ **TestPadatious2_Eye_color_intent** — 0/5
Test Result
test_change_eye_color_to_default ❌ failed
test_change_eye_colors_to_default ❌ failed
test_change_eye_to_default ❌ failed
test_change_eyes_color_to_default ❌ failed
test_change_eyes_colors_to_default ❌ failed

test_change_eye_color_to_default failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_change_eye_colors_to_default failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_change_eye_to_default failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError
❌ **TestPadatious3_Brightness_intent** — 0/5
Test Result
test_change_the_brightness ❌ failed
test_change_the_brightness_level ❌ failed
test_change_the_eye_brightness ❌ failed
test_change_the_eye_brightness_level ❌ failed
test_change_the_eye_illumination ❌ failed

test_change_the_brightness failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_change_the_brightness_level failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

test_change_the_eye_brightness failure:

if expected.msg_type in self.flip_points:
                e_src = expected.context.get("source")
                e_dst = expected.context.get("destination")
    
            if self.test_msg_type:
>               assert expected.msg_type == received.msg_type, f"❌ expected message_type '{expected.msg_type}' | got '{received.msg_type}'"
E               AssertionError: ❌ expected message_type 'ovos-skill-mark1-ctrl.openvoiceos.activate' | got 'complete_intent_failure'
E               assert 'ovos-skill-m...ceos.activate' == 'complete_intent_failure'
E                 
E                 - complete_intent_failure
E                 + ovos-skill-mark1-ctrl.openvoiceos.activate

/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/ovoscope/__init__.py:856: AssertionError

🚌 Bus Coverage

Measuring the reach of our bus handlers. 📏

⚠️ Bus coverage report unavailable — check the job log.

🔒 Security (pip-audit)

Checking for any potential security breaches. 🔓

✅ No known vulnerabilities found (38 packages scanned).

🏷️ Release Preview

The release candidate is looking strong. 💪

Current: 0.0.3a2Next: 0.1.0a1

Signal Value
Label feature
PR title feat: add ovoscope end2end intent-routing tests
Bump minor

✅ PR title follows conventional commit format.


🚀 Release Channel Compatibility

Predicted next version: 0.1.0a1

Channel Status Note Current Constraint
Stable Not in channel -
Testing Not in channel -
Alpha Not in channel -

🎙️ Skill

Skill inspection report: All systems go! 🚀

🎙️ (unknown skill_id) — 13 languages

en-US: 3 intents · 22 vocab · 15 dialogs · skill.json ⚠️

Translation coverage — 12 languages (6 complete, 6 incomplete)
Language Progress Coverage
ca-ES ██████████ ✅ 100.0% (42/42)
da-DK ██████████ ✅ 95.2% (40/42)
de-DE ██████████ ✅ 100.0% (42/42)
el-GR █████░░░░░ ❌ 45.2% (19/42)
es-ES ██████████ ✅ 100.0% (42/42)
fr-FR ██████████ ✅ 100.0% (42/42)
gl-ES ██████████ ✅ 100.0% (42/42)
it-IT █████░░░░░ ❌ 45.2% (19/42)
nl-NL █████░░░░░ ❌ 45.2% (19/42)
pt-BR █████░░░░░ ❌ 45.2% (19/42)
ru-RU █████░░░░░ ❌ 45.2% (19/42)
sv-SE █████░░░░░ ❌ 45.2% (19/42)

📋 Repo Health

Ensuring the codebase isn't suffering from 'technical debt' flu. 🤒

✅ All required files present.

Latest Version: 0.0.3a2

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

📊 Coverage

Is the code fully immunized with tests? 💉

⚠️ Coverage data unavailable — check the job log.

⚠️ Some tests failed — coverage figures may be incomplete.

🔍 Lint

Evaluating the overall quality of your PR. ✨

ruff: issues found — see job log

🔨 Build Tests

Ensuring the scaffolding is removed and the build is clean. 🧹

Python Build Install Tests
3.10 ⚠️
3.11 ⚠️
3.12 ⚠️
3.13 ⚠️
3.14 ⚠️

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


The pulse of the OpenVoiceOS codebase 💓

JarbasAl and others added 12 commits June 10, 2026 19:34
…ious assertions

Suppresses speak/mycroft.audio.play_sound noise so message-count
checks are not thrown off by extra bus events; routing verified via activation_points.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Migrate to pyproject.toml packaging, add ADAPT end-to-end intent-routing
tests for the Mark 1 enclosure skill, and adopt the canonical gh-automations
CI workflows.
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