Skip to content

fix: move Wolfram intent suppression to native <intent>.blacklist locale files - #133

Draft
JarbasAl wants to merge 1 commit into
devfrom
fix/search-wolfie-blacklist
Draft

fix: move Wolfram intent suppression to native <intent>.blacklist locale files#133
JarbasAl wants to merge 1 commit into
devfrom
fix/search-wolfie-blacklist

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Aug 15, 2026

Copy link
Copy Markdown
Member

🤖 Auto-generated by Claude Fable 5 (claude-fable-5) via Claude Code — NOT human-reviewed. Verify before acting.

This replaces #123's hand-rolled Python suppression logic with the native mechanism ovos-workshop already provides: register_intent_file loads a sibling <intent-base>.blacklist locale file directly into blacklisted_words, no voc_blacklist=[...] decorator argument required. MiscBlacklist.voc is renamed to search_wolfie.blacklist in every locale that had it (ca-ES, en-US, es-ES, fr-FR, gl-ES), in both the top-level locale/ mirror and ovos_skill_wolfie/locale/, with the phrases unchanged. The voc_blacklist=["MiscBlacklist"] argument is dropped from the @intent_handler decorator on handle_search, and the ovos-workshop floor pin moves to >=9.3.0a1,<10.0.0. Version 9.1.0a1 first loads the .blacklist file but only the legacy padatious path receives it; 9.3.0a1 is the first version whose spec-message emission wires suppression into both padatious and padacioso, hence the floor.

Because the suppression now happens inside the padatious/padacioso container registration itself rather than as a separate voc_match gate the skill runs before speaking, an utterance that fails the blacklist check never gets routed to this skill's handler in the first place, which also means the utterance stays available for other skills' pipelines to claim instead of dead-ending here.

Both padatious and padacioso enforce word-boundary suppression on single-word blacklist entries via the spec registration message, so installment no longer collides with the blacklisted word install — that was the over-suppression bug in #123's version. Test coverage was extended accordingly: test_intents_en_us.py now checks calc_intent returns no match for a blacklisted phrase and still matches "what is an installment loan", and a new bus-round-trip test in test_golden_utterances.py confirms the blacklisted utterance reaches no wolfie handler end to end while the boundary case still routes correctly.

Open PR #126 adds a da-DK MiscBlacklist.voc for the old mechanism; it will need a da-DK/search_wolfie.blacklist instead once this lands, but that repo/file is left untouched here.

@github-actions github-actions Bot added the fix label Aug 15, 2026
@coderabbitai

coderabbitai Bot commented Aug 15, 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 Plus

Run ID: a67b7672-971d-437e-b1dd-007f4d1120f6

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

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 Aug 15, 2026

Copy link
Copy Markdown
Contributor

Analyzing your contribution... results ready! 🧪

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

🔍 Lint

Ensuring the codebase remains stable and healthy. 🛡️

ruff: issues found — see job log

🔒 Security (pip-audit)

Evaluating the security posture of your changes. 🛡️

✅ No known vulnerabilities found (76 packages scanned).

🏷️ Release Preview

Evaluating the excitement level for the next release. 🤩

Current: 0.7.2a2Next: 0.7.3a1

Signal Value
Label fix
PR title fix: move Wolfram intent suppression to native <intent>.blacklist locale files
Bump build

✅ PR title follows conventional commit format.


🚀 Release Channel Compatibility

Predicted next version: 0.7.3a1

Channel Status Note Current Constraint
Stable Too new (must be <0.6.0) ovos-skill-wolfie>=0.5.8,<0.6.0
Testing Compatible ovos-skill-wolfie>=0.5.8,<1.0.0
Alpha Compatible ovos-skill-wolfie>=0.7.2a2

🔌 Skill Tests (ovoscope)

Checking for any potential conversational dead ends. 🚧

19/19 passed

TestWolfieIntents — 1/1
test_blacklisted_phrase_reaches_no_wolfie_handler — 1/1
test_golden_utterance[ask the wolf something] — 1/1
test_golden_utterance[ask the wolfram about something] — 1/1
test_golden_utterance[ask the wolfram alpha about something] — 1/1
test_golden_utterance[search the wolf for something] — 1/1
test_golden_utterance[search wolfram alpha for something] — 1/1
test_installment_not_over_suppressed — 1/1
test_negative_confusable_not_claimed[ask wordnet about word] — 1/1
test_negative_confusable_not_claimed[can you find something on wikipedia] — 1/1
test_negative_confusable_not_claimed[can you spell word] — 1/1
test_negative_confusable_not_claimed[can you tell me the weather] — 1/1
test_negative_confusable_not_claimed[search wikihow for something] — 1/1
test_negative_confusable_not_claimed[set an alarm] — 1/1
test_negative_confusable_not_claimed[tell me the word of the day] — 1/1
test_trio_arbitration_not_claimed_by_wolfie[can you find something on wiki] — 1/1
test_trio_arbitration_not_claimed_by_wolfie[check wikipedia for something] — 1/1
test_trio_arbitration_not_claimed_by_wolfie[search word net for word] — 1/1
test_trio_arbitration_not_claimed_by_wolfie[what does word net say about word] — 1/1

🚌 Bus Coverage

How deep does the message bus rabbit hole go? 🐇

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

⚖️ License Check

Scanning for any potential trademark infringements. ™️

✅ No license violations found.

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

📋 Repo Health

Scanning for any signs of 'orphaned' code limbs. 🦾

✅ All required files present.

Latest Version: 0.7.2a2

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

🎙️ Skill

Evaluating the skill's potential for impact. 🌟

🎙️ ovos-skill-wolfie.openvoiceos — 10 languages

en-US: 1 intents · 2 vocab · 1 dialogs · skill.json ✅

Translation coverage — 9 languages (1 complete, 8 partial)
Language Progress Coverage
ca-ES ████████░░ ⚠️ 80.0% (4/5)
da-DK ██████░░░░ ⚠️ 60.0% (3/5)
de-DE ██████░░░░ ⚠️ 60.0% (3/5)
es-ES ████████░░ ⚠️ 80.0% (4/5)
eu-ES ██████░░░░ ⚠️ 60.0% (3/5)
fr-FR ██████████ ✅ 100.0% (5/5)
gl-ES ████████░░ ⚠️ 80.0% (4/5)
it-IT ██████░░░░ ⚠️ 60.0% (3/5)
pt-PT ██████░░░░ ⚠️ 60.0% (3/5)

🔨 Build Tests

Checking if the gears are still turning smoothly... ⚙️

✅ All versions pass

Python Build Install Tests
3.10
3.11
3.12
3.13
3.14

🧪 Spec Lint

The automated sentinel is back with news. 💂‍♂️

13 error(s), 12 warning(s)

locale/ca-ES/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/ca-ES/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/da-DK/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/da-DK/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/de-DE/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/de-DE/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/en-US/Help.voc: error: base name 'Help' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/en-US/Help.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/en-US/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/en-US/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/es-ES/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/es-ES/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/eu-ES/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/eu-ES/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/fr-FR/Help.voc: error: base name 'Help' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/fr-FR/Help.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/fr-FR/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/fr-FR/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/gl-ES/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/gl-ES/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/it-IT/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/it-IT/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)
locale/pt-PT/More.voc: error: base name 'More' must be lowercase ASCII letters, digits and underscores only (OVOS-INTENT-2 §2)
locale/pt-PT/More.voc: warning: file name should be lowercase (OVOS-INTENT-2 §2)

📊 Coverage

A deep dive into the sea of test results. 🌊

94.3% total coverage

Per-file coverage (2 files)
File Coverage Missing lines
ovos_skill_wolfie/version.py 0.0% 5
ovos_skill_wolfie/__init__.py 100.0% 0

Full report: download the coverage-report artifact.


May the tests be ever in your favor! 🏹

…ale files

ovos-workshop's register_intent_file loads a sibling "<intent-base>.blacklist"
locale file into blacklisted_words natively (landed pre-9.1.0a1, confirmed
against origin/dev source). This replaces the skill's voc_blacklist=["MiscBlacklist"]
wiring with that mechanism: MiscBlacklist.voc is renamed to search_wolfie.blacklist
(matching the intent file's base name) in every locale that had it
(ca-ES, en-US, es-ES, fr-FR, gl-ES), in both the top-level locale/ mirror and
ovos_skill_wolfie/locale/, and the voc_blacklist argument is dropped from the
@intent_handler decorator. The floor pin on ovos-workshop is bumped to
>=9.1.0a1 to require the feature.

Padacioso's exclude_keywords matches single-word blacklist entries on
whole-word boundaries, so "installment" no longer collides with the
blacklisted word "install" - the over-suppression bug in the old
substring-based voc_match check. Added regression coverage: an intent-level
calc_intent assertion and a bus-round-trip golden-utterance test confirming
the blacklisted phrase reaches no wolfie handler while "installment loan"
still matches.

Fail-before: with the new search_wolfie.blacklist files removed,
test_en_us_wolfram_intents and test_blacklisted_phrase_reaches_no_wolfie_handler
both fail (AssertionError: 'ask wolfram can you install skills' matches
search_wolfie.blacklist but was claimed by ovos-skill-wolfie.openvoiceos);
restoring the files makes both pass again. Full suite: 54 passed (dev
baseline 52, no regressions).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added fix and removed fix labels Aug 17, 2026
@JarbasAl
JarbasAl force-pushed the fix/search-wolfie-blacklist branch from 34c8df3 to 0aee9b0 Compare August 17, 2026 18:51
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