test: OVOS-PIPELINE-1/STOP-1/INTENT-4 conformance suites#765
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
The automated pipeline has reached its destination. 🏁I've aggregated the results of the automated checks for this PR below. 📋 Repo HealthChecking for any potential maintenance bottlenecks. 🚧 ✅ All required files present. Latest Version: ✅ 🏷️ Release PreviewSetting the stage for the upcoming deployment. 🎭 Current:
✅ PR title follows conventional commit format. 🚀 Release Channel Compatibility Predicted next version:
🌍 Locale BuildI've performed a quick audit of the latest commit. 🕵️ ✅ Locale properly configured (64 files, 17 languages) Locale directories found:
Localization coverage:
pyproject.toml: ✅
Build manifest: ✅ 31 locale files included in package 🔒 Security (pip-audit)Scanning the horizon for any zero-day threats. 🌅 ✅ No known vulnerabilities found (109 packages scanned). 📊 CoverageMapping out the 'known' vs 'unknown' in your code. 🗺️ Files below 80% coverage (8 files)
Full report: download the 🔌 Skill Tests (ovoscope)Does the skill understand what we're saying? Let's find out. 👂 ❌ 43/99 passed, 33 failed, 9 skipped ❌ **TestActiveHandlerRecency** — 2/3
❌ **TestAdaptIntent** — 0/4
❌ **TestCancelIntentMidSentence** — 0/1
❌ **TestConverse** — 0/1
❌ **TestConverseOwnerOrdering** — 1/2
❌ **TestCountSkills** — 0/4
❌ **TestDeactivate** — 2/3
❌ **TestFallback** — 0/1
❌ **TestFallbackHandlersField** — 0/1
❌ **TestGlobalStopVocWithActiveSkill** — 0/1
❌ **TestGlobalStopVocabulary** — 0/2
❌ **TestIntentPipelineRouting** — 0/4
❌ **TestLangDisambiguation** — 0/4
❌ **TestNoSkills** — 0/2
❌ **TestPadatiousIntent** — 0/4
❌ **TestResponseMode** — 1/2
❌ **TestSec10Introspection** — 0/2
❌ **TestSec21OwnerOrdering** — 1/2
❌ **TestSec2ReservedName** — 0/1
❌ **TestSec4Registration** — 0/2
❌ **TestSec5GlobalStop** — 2/3
❌ **TestSec5KeywordRegistration** — 0/1
❌ **TestSec6TemplateRegistration** — 0/1
❌ **TestSec7EntityRegistration** — 0/1
❌ **TestSec81HandlerError** — 1/2
❌ **TestSec82Deregister** — 0/1
❌ **TestSec83EntityDeregister** — 0/1
❌ **TestSec84SkillDeregister** — 0/1
❌ **TestSec85Disable** — 0/1
❌ **TestSec85Enable** — 0/1
❌ **TestSec8HandlerTrio** — 0/1
❌ **TestSec96Speak** — 0/1
❌ **TestStopNoSkills** — 0/3
❌ **TestStopServiceAsSkill** — 0/1
❌ **TestStopSkillCanHandleFalse** — 0/1
🚌 Bus CoverageA deep dive into the skill's communication patterns. 🌊 🔴 Coverage Summary
📊 Per-Skill Breakdown
🔍 Detailed Message Type Breakdown
|
| Python | Build | Install | Tests |
|---|---|---|---|
| 3.10 | ✅ | ✅ | ✅ |
| 3.11 | ✅ | ✅ | ✅ |
| 3.12 | ✅ | ✅ | ✅ |
| 3.13 | ✅ | ✅ | ✅ |
| 3.14 | ✅ | ✅ | ✅ |
⚖️ License Check
Everything looks good on the legal front. ✅
✅ No license violations found.
Policy: Apache 2.0 (universal donor). StrongCopyleft / NetworkCopyleft / WeakCopyleft / Other / Error categories fail. MPL allowed.
Your automated companion in the OpenVoiceOS journey. 🤝
54d1ed1 to
65f1680
Compare
65f1680 to
5ef4fd5
Compare
Add clause-labelled ovoscope end-to-end conformance suites mapping the normative Conformance clauses of OVOS-PIPELINE-1, OVOS-STOP-1 and OVOS-INTENT-4 to tests against the ovos-core orchestrator. Clauses the orchestrator already satisfies pass; clauses pending the mycroft.* -> ovos.* topic migration are marked xfail and flip to passing once the impl is updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The orchestrator and stop pipeline emit either the legacy mycroft.* topics or the OVOS spec ovos.* topics, chosen by the deployment 'legacy_namespace' config (default True) — never both. Subscribers listen on both namespaces. - entry: also subscribe ovos.utterance.handle (PIPELINE-1 §9.1) - no-match: complete_intent_failure <-> ovos.intent.unmatched (§9.3) - match notification + context.pipeline_id stamp (§9.2 / §7.1, spec namespace) - stop: mycroft.stop <-> ovos.stop (§5.3); per-skill pings <-> broadcast ovos.stop.ping (§4.2) Conformance suites run in the spec namespace (legacy_namespace=False) and are green (21 passed, 7 xfail); legacy-namespace end2end tests are unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
handle_global_stop and _collect_stop_skills called self._legacy_namespace(), which does not exist on StopService — the AttributeError crashed the handler before it emitted the universal ovos.utterance.handled end-marker. Use the shared module-level helper from the intent service instead. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…PIPELINE-1, STOP-1, INTENT-4) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…OP-1 §4.2) _collect_stop_skills now subscribes/removes both skill.stop.pong and ovos.stop.pong; the unit tests asserted a single subscription. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(pre_release) register_padatious_intent (ovoscope >=0.15.0a1) is dev-only; the default ovoscope install resolves to a stable release without it. A conformance suite asserts against current ecosystem dev, so pre_release: true is the correct install mode and makes the e2e job green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…IPELINE-1 §8) Under pre_release the dev count-skill's handler completes when stopped and emits mycroft.skill.handler.complete, which is orthogonal to the stop-cascade message sequence these tests assert. Add the handler-lifecycle events to ignore_messages. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8266722 to
d28603a
Compare
….4 deregister, §8.5 enable Adds the remaining INTENT-4 registration bus-contract clauses as ovoscope end-to-end assertions, following the existing xfail discipline (ovos-core still consumes the legacy padatious:/detach_ topics, so the spec ovos.intent.* / ovos.entity.* / ovos.skill.* topics xfail until the contract lands): - §5 ovos.intent.register.keyword makes a keyword intent matchable - §7 ovos.entity.register value-set hint accepted fire-and-forget - §8.3 ovos.entity.deregister removes an entity - §8.4 ovos.skill.deregister removes all of a skill's intents - §8.5 ovos.intent.enable re-arms a disabled intent Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ler error - §6.4: an utterance flagged context['canceled'] emits ovos.utterance.cancelled, terminates with exactly one ovos.utterance.handled, and never dispatches. - §8.1: a padatious-matched handler that raises emits ovos.intent.handler.error (lifecycle-trio terminal) yet the utterance still ends with exactly one end-marker. Adds _ErrorSkill handler (BOOM_INTENT) to _EchoSkill. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…active-vs-none
- §4.2: an active stoppable skill answers ovos.stop.ping with ovos.stop.pong
{skill_id, can_handle}; the collected skill is told to stop.
- §4.3: with an active skill a generic 'stop' dispatches <skill_id>.stop and
does NOT broadcast the universal ovos.stop.
- §4/§5.1: with no active skill 'stop' escalates to the global ovos.stop
broadcast and no per-skill stop fires.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
End-to-end converse clauses driven by the real ovos-skill-parrot fixture:
- §3 activating a skill records it as an active converse owner
- §4 an active owner consumes the follow-up before intent matching
(parrot echoes the utterance via converse:skill) with exactly one
ovos.utterance.handled
- §4 a declining owner falls through to the normal pipeline (no converse:skill)
- §2.1 owners polled most-recently-active first (head-first active_skills);
converse_handlers session field reflects the owner (skipped until the
spec session field is populated; legacy active_skills today)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
End-to-end fallback clauses driven by the real ovos-skill-fallback-unknown
fixture (priority 100 catch-all), with the fallback stage pinned after the
matcher:
- §5 fallback runs only after the matchers decline; query precedes dispatch
- §6 query/response trio (ovos.skills.fallback.ping/pong + per-skill .response)
and exactly one ovos.utterance.handled
- §5 pool sorted by priority ascending (high-confidence before low-confidence)
- §4 spec register topic ovos.fallback.register + session.fallback_handlers
asserted as xfail/skip (core consumes ovos.skills.fallback.register; the
session field is absent until feat/session-spec-fields bus-client)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Asserts session state carries/updates through real ovos-core interactions: - PIPELINE-1 §7.1 active-handler recency + head-first dedup (active_skills) - CONVERSE-1 §2.1 converse owner ordering (most-recent-first) - CONVERSE-1 §2.2 response-mode capture via utterance_states RESPONSE - FALLBACK-1 §4 fallback_handlers field - SESSION-2 updated_session echoed on responses (id preserved, mutation rides forward) Spec-field-named assertions (active_handlers/converse_handlers/fallback_handlers/ response_mode) skip cleanly until feat/session-spec-fields bus-client is installed. Also drop an unused import left in the converse suite. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…shop cap - ovoscope.yml: add pre_install_pip force-reinstalling the producer/session/ plugin/fixture branches that emit the spec topics and session fields the conformance suites assert (bus-client feat/session-spec-fields, workshop feat/intent-4-producer, adapt/padatious fix/allow-ovos-workshop-9, and the parrot/fallback-unknown/count/hello-world fixtures fix/allow-ovos-workshop-10). - pyproject: lift ovos-workshop cap >=8.3.0a1,<9.0.0 -> <10.0.0 so the workshop 9.x producer branch resolves. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The .[test] resolution downgrades ovos-workshop to a <9 published wheel (fixture skills + transitive ovos-core cap it), uninstalling the 9.x INTENT-4 producer so its bus topics never emit. Re-pin the integrated stack after the extras install via the new post_install_pip input (gh-automations#58). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
b1d9879 to
284f116
Compare
What
Two commits:
test:— clause-labelled ovoscope conformance suites for OVOS-PIPELINE-1,OVOS-STOP-1, OVOS-INTENT-4 (
test/end2end/test_*_conformance.py).feat:— a deployment-widelegacy_namespaceconfig flag (defaultTrue)selecting the bus-topic namespace during the
mycroft.* → ovos.*transition. Theorchestrator and stop pipeline emit exactly one namespace (never both);
subscribers listen on both.
legacy_namespace: false)recognizer_loop:utteranceovos.utterance.handlecomplete_intent_failureovos.intent.unmatchedpipeline_id(§7.1)ovos.intent.matched/context.pipeline_idmycroft.stopovos.stop{skill}.stop.pingovos.stop.pingThe dispatch topic
<skill_id>:<intent_name>and theovos.utterance.handledend-markerare unchanged (the spec keeps both).
Conformance results
Run in the spec namespace (
legacy_namespace=False): 21 passed, 7 xfail, 0 failed.Remaining xfail: STOP-1
<id>:global_stopdispatch rename, STOP-1 reserved-stoprejection, and the whole OVOS-INTENT-4 registration/introspection contract (larger,
future work). Legacy-namespace end2end tests are unchanged and green (no test hacks).
The §8 handler-trio and §9.6 speak conformance tests
skipifan ovos-workshop without thecompanion flag is installed, so core CI stays green until ovos-workshop#415 releases.
Companions
ovos-workshop#415 (merge first), ovos-dinkum-listener, ovos-simple-listener, ovos-audio.
🤖 Generated with Claude Code