OpenVoiceOS / OpenVoiceOS/architecture

OVOS-INTENT-4 §8.5/§12 conformance gap: ovos-hierarchical-knn-pipeline never honours ovos.intent.enable/disable

Open
#247 0 comments 0 reactions 0 assignees View on GitHub

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, and ovos.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

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.

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.