OpenVoiceOS / OpenVoiceOS/architecture
OVOS-INTENT-4 §8.5/§12 conformance gap: ovos-hierarchical-knn-pipeline never honours ovos.intent.enable/disable
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 3
- Forks
- 0
- Avg merge
- 15h 20m
- Merged PRs (30d)
- 90
Description
🤖 Auto-generated by Claude Fable 5.1 (claude-fable-5-1) via Claude Code — NOT human-reviewed. Verify before acting. Claims marked executed were verified by running the named probe against the named commit; nothing here was reviewed by a human.
Filed here because OpenVoiceOS/ovos-hierarchical-knn-pipeline has GitHub issues disabled. This is a conformance gap in that plugin against OVOS-INTENT-4, not a defect in the specification text.
Clause
OVOS-INTENT-4 §8.5 (intent-4.md @ dev a57fe0e):
A registered intent is, by default, enabled — eligible for matching. A skill MAY temporarily disable an intent without removing it; the orchestrator retains the definition in the manifest but marks it disabled, and plugins exclude it from match candidacy until it is re-enabled.
and §12, pipeline plugin consumer:
a plugin that indexes registrations MUST also honour the §8 retraction and enable/disable topics for what it indexed —
ovos.intent.deregister,ovos.entity.deregister,ovos.skill.deregister, andovos.intent.enable/ovos.intent.disable— so a skill's registrations cannot outlive its unload or drift out of step with its declared enabled state in that plugin's index.
Gap (executed, plugin @ dev 7d7a664)
ovos_hierarchical_knn_pipeline/__init__.py subscribes only to mycroft.ready, padatious:register_intent, register_intent, detach_intent and detach_skill (lines 93–97) and rebuilds its match allowlist self.intents from the adapt and padatious manifests on those events. It never subscribes to ovos.intent.enable or ovos.intent.disable, and nothing in the matching path (match_high/match_medium/match_low, allowlist at line 200) consults a session or a disabled set.
Live probe: after construction, bus.ee.listeners("ovos.intent.disable") and bus.ee.listeners("ovos.intent.enable") are both empty. Emitting ovos.intent.disable for skillX:off under session-one changes nothing: both session-one and an untouched session-two keep matching skillX:off afterwards. Probe script: probe_hknn.py, recorded in the workspace wiki at knowledge/wiki/audits/spec-adoption-2026-09/gate-intent4-8.5-scope-current.md.
Consequence
An intent disabled through the bus surface (admin UI, A/B harness, conflict resolver) is still dispatched by this plugin. Because the plugin also does not honour ovos.intent.deregister / ovos.skill.deregister for the spec-registered pool (it reacts only to the legacy detach_* topics), a session-scoped skill's registrations can outlive its session teardown in this plugin's index (§11.3).
What conformance would look like
Either the plugin indexes the §5–§7 registration topics itself and honours all of §8 for that index, or it stops holding an index and matches by internal rules only (the §12 "consumes none" branch), in which case the allowlist derived from other plugins' manifests must be dropped or rebuilt on every §8 event. The choice is the plugin owner's.
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.
Research direction
Start with ovos_hierarchical_knn_pipeline/init.py, especially the event subscriptions around lines 93–97 and the allowlist used by match_high, match_medium, and match_low. Review probe_hknn.py and the recorded audit for the current behavior. Done means the plugin's index no longer dispatches disabled or deregistered intents, or the index is removed and rebuilt on every relevant event.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- ai, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100