Skip to content

fix(en-US): restore full-sentence phrasings lost in the .intent migration - #125

Merged
mikejgray merged 1 commit into
devfrom
fix/en-us-intent-phrasings
Oct 10, 2026
Merged

mikejgray merged 1 commit into
devfrom
fix/en-us-intent-phrasings

Conversation

@mikejgray

Copy link
Copy Markdown
Collaborator

What broke

6fe23a6 migrated the 16 Adapt IntentBuilder intents to .intent files by copying each keyword .voc verbatim (bender say, sing, hurt me plenty). Adapt matched those keywords anywhere inside an utterance, so "what would bender say" fired. Padacioso and padatious treat each .intent line as the whole utterance, so only the literal fragment matched and every phrasing in the README stopped working. ec08f10 rewrote every other locale as full sentences; en-US was the one left as fragments. test/test_intent_routing.py tested the fragments against themselves, so CI stayed green.

Refs #76, which flagged exactly this coverage-loss risk.

Fix

  • Keep every existing line (short commands and the STT-mishearing variants still work).
  • Add the natural sentences each intent is documented to answer, using (a|b|) alternation so both engines read them. No open {slot} wildcards.
  • Extend the en-US gold list in test/test_intents.yaml and the e2e golden_utterances.jsonl with the natural phrasings so the routing test guards full sentences, not only fragments.

Evidence

Offline probe: skill's en-US resources loaded into padacioso and ovos-padatious, 33 natural sentences plus 4 confusable negatives from other skills' domains.

padacioso padatious
before 0 / 33 matched 0.43 to 0.66 conf, below every tier
after 33 / 33 at 1.00 33 / 33 at 1.00
negatives after none claimed no higher than before

Tests: test/ unit suite 169 passed; ovoscope e2e test_golden_utterances.py 75 passed (53 original rows, 16 new, 6 negatives).

Live: ovos-core 3.7.4a1 with ovos-padacioso-pipeline-plugin-high. "what is the current stardate", "how many languages do you speak", "what would hal 9000 say" and "do your glados impression" now match in padacioso-high and reach the easter-eggs handlers. Before this change the same utterances logged padacioso: No match and fell through to ovos-m2v-pipeline-low.

Noticed, not in scope

Two unrelated bugs surfaced while verifying the OCP path (portal_intent, glados_intent):

  • ovos-bus-client OCPInterface.norm_tracks logs ERROR Bad track, invalid type for every dict track. It converts tracks[idx] with dict2entry but then type-checks the stale track loop variable. Spurious; the final assert passes.
  • ovos-media-plugin-mpv OVOSMPVService.__init__ calls AudioBackend.__init__ only, skipping MediaBackend.__init__, so self.meta is never set and the first load_track raises 'OVOSMPVService' object has no attribute 'meta'. Clip does not play on an mpv backend.

🤖 Generated with Claude Code

…tion

The 2026-09-04 migration (6fe23a6) copied each Adapt keyword vocab into
a .intent file verbatim. Adapt matched those keywords anywhere inside an
utterance, so "what would bender say" fired bender_intent. Padacioso and
padatious treat every .intent line as the whole utterance, so only the
literal fragment ("bender say") matched and the README phrasings stopped
working. Every other locale was rewritten as full sentences in ec08f10;
en-US was the one left as fragments.

Keep every existing line (short commands and STT mishearings still work)
and add the natural sentences each intent is documented to answer, using
(a|b|) alternation so both engines read them.

Measured with the skill's en-US resources loaded into padacioso and
ovos-padatious (33 natural sentences, 4 confusable negatives):

- before: padacioso matched none of the sentences; padatious scored them
  0.43-0.66, below every pipeline threshold
- after: all 33 match at 1.00 in both engines; the negatives stay
  unmatched in padacioso and no higher than before in padatious

Verified live on ovos-core 3.7.4a1 with a padacioso-high pipeline:
"what is the current stardate", "how many languages do you speak" and
"what would hal 9000 say" route to the easter-eggs handlers.

The gold list in test/test_intents.yaml and the e2e golden corpus gain
the natural phrasings so the routing test guards full sentences, not
only the fragments.

Refs #76

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 10, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 189264b8-b137-44a1-a174-cd7e168129d3

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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 added the fix label Oct 10, 2026
@github-actions

github-actions Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Elementary, my dear contributor! The checks are finished. 🕵️‍♂️

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

🔍 Lint

Here's the lowdown on the latest automated check. 📉

✅ ruff: no issues in 17 file(s)
✅ actionlint: 11 workflow file(s), no finding

🏷️ Release Preview

I've performed a final polish on the release notes. 🧼

Current: 1.2.1a1 → Next: 1.2.1a2

Signal Value
Label (none)
PR title fix(en-US): restore full-sentence phrasings lost in the .intent migration
Bump alpha

⚠️ No conventional commit prefix — alpha-only bump.
Suggested: fix: update the thing or feat: update the thing


🚀 Release Channel Compatibility

Predicted next version: 1.2.1a2

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

📊 Coverage

Ensuring our safety net is wide enough. 🕸️

⚠️ 77.8% total coverage

Per-file coverage (3 files)
File Coverage Missing lines
stardate.py 42.5% 46
__init__.py 91.8% 16
constants.py 100.0% 0

Full report: download the coverage-report artifact.

🎙️ Skill

Ensuring the skill's logic is sound and secure. 🏰

🎙️ (unknown skill_id) — 15 languages

en-US: 17 intents · 13 dialogs · skill.json ⚠️

Translation coverage — 14 languages (11 complete, 3 partial)
Language Progress Coverage
ca-ES ██████████ ✅ 100.0% (30/30)
da-DK ██████████ ✅ 100.0% (30/30)
de-DE ████████░░ ⚠️ 83.3% (25/30)
es-ES ██████████ ✅ 100.0% (30/30)
eu-ES █████████░ ⚠️ 86.7% (26/30)
fr-FR ██████████ ✅ 100.0% (30/30)
gl-ES █████████░ ⚠️ 86.7% (26/30)
it-IT ██████████ ✅ 100.0% (30/30)
kab ██████████ ✅ 100.0% (30/30)
nl-NL ██████████ ✅ 100.0% (30/30)
oc-FR ██████████ ✅ 100.0% (30/30)
pt-BR ██████████ ✅ 100.0% (30/30)
pt-PT ██████████ ✅ 100.0% (30/30)
sv-SE ██████████ ✅ 100.0% (30/30)

📋 Repo Health

Ensuring the repo's joints are well-oiled (aka CI/CD). ⚙️

✅ All required files present.

Latest Version: 1.2.1a1

✅ 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

🧪 Spec Lint

Just keeping you informed on the state of things. ℹ️

✅ 0 error(s), 1 warning(s)

🔨 Build Tests

Checking the calibration of the build environment. ⚖️

✅ All versions pass

Python Build Install Tests pytest
3.10 ✅ ✅ ✅ 244 passed, 1 xfailed, 12 warnings in 17.07s
3.11 ✅ ✅ ✅ 244 passed, 1 xfailed, 12 warnings in 19.66s
3.12 ✅ ✅ ✅ 244 passed, 1 xfailed, 12 warnings in 25.82s
3.13 ✅ ✅ ✅ 244 passed, 1 xfailed, 12 warnings in 19.85s
3.14 ✅ ✅ ✅ 244 passed, 1 xfailed, 12 warnings in 16.21s

The silent guardian of the dev branch. 🦇

@mikejgray
mikejgray merged commit 4f4ce3c into dev Oct 10, 2026
18 checks passed
mikejgray added a commit that referenced this pull request Oct 10, 2026
…tion (#125)

The 2026-09-04 migration (6fe23a6) copied each Adapt keyword vocab into
a .intent file verbatim. Adapt matched those keywords anywhere inside an
utterance, so "what would bender say" fired bender_intent. Padacioso and
padatious treat every .intent line as the whole utterance, so only the
literal fragment ("bender say") matched and the README phrasings stopped
working. Every other locale was rewritten as full sentences in ec08f10;
en-US was the one left as fragments.

Keep every existing line (short commands and STT mishearings still work)
and add the natural sentences each intent is documented to answer, using
(a|b|) alternation so both engines read them.

Measured with the skill's en-US resources loaded into padacioso and
ovos-padatious (33 natural sentences, 4 confusable negatives):

- before: padacioso matched none of the sentences; padatious scored them
  0.43-0.66, below every pipeline threshold
- after: all 33 match at 1.00 in both engines; the negatives stay
  unmatched in padacioso and no higher than before in padatious

Verified live on ovos-core 3.7.4a1 with a padacioso-high pipeline:
"what is the current stardate", "how many languages do you speak" and
"what would hal 9000 say" route to the easter-eggs handlers.

The gold list in test/test_intents.yaml and the e2e golden corpus gain
the natural phrasings so the routing test guards full sentences, not
only the fragments.

Refs #76

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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