Skip to content

test: the keep-src rule is checked by its outcome, not by a spy on the call - #197

Draft
openvoiceos-bot wants to merge 1 commit into
devfrom
test/keep-src-membership-outcome
Draft

openvoiceos-bot wants to merge 1 commit into
devfrom
test/keep-src-membership-outcome

Conversation

@openvoiceos-bot

Copy link
Copy Markdown
Contributor

🤖 Auto-generated by Claude Fable 5.1 (claude-fable-5-1) via Claude Code — NOT human-reviewed. Verify before acting. Every result below was executed; the mutant run used the one-line change named in the table.

Follows the review on #191. The wiring test spied on the both_spellings call, so a comparison that keeps the call and reads the caller's list verbatim at the membership test (if expected.msg_type in self.keep_original_src) left the suite green. The test now asserts the outcome the rule exists for.

The scenario. One echo round with an entry point on the source message, so the rolling expectation flips to (B, A) while the skill's reply keeps the original (A, B). The reply reaches the bus under the canonical spelling ovos.utterance.speak. Three runs in one test:

  • no rule: the rolling branch is taken and the reply's routing fails it, which proves the scenario discriminates
  • rule names ovos.utterance.speak: passes under either comparison
  • rule names only speak: passes solely because the rule was expanded before the membership test
run result
old spy test against the mutant 1 passed (the gap)
new test against the mutant fails: source doesnt match! expected 'B' got 'A'
new test on dev passes; file 7 passed
test/unittests see checks

No source change.

…e call

The wiring test recorded that both_spellings was called with the caller's
rule. A comparison that keeps the call and reads the unexpanded list
passes it unchanged. The test now runs one echo round with an entry
point on the source message, so the rolling expectation flips while the
skill's reply, which reaches the bus under the canonical spelling, keeps
the original routing: a rule naming only the legacy spelling accepts the
reply solely because it was expanded before the membership test.

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

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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 Sep 9, 2026

Copy link
Copy Markdown

Another day, another set of automated checks. Let's see! 🌅

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

📋 Repo Health

Keeping the project in tip-top shape! 🏃

✅ All required files present.

Latest Version: 1.8.4a1

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

🔒 Security (pip-audit)

I've checked the vulnerability database for hits. 🎯

✅ No known vulnerabilities found (129 packages scanned).

🏷️ Release Preview

Ensuring the version bump is correctly calculated. 🔢

Current: 1.8.4a1Next: 1.8.4a2

Signal Value
Label (none)
PR title test: the keep-src rule is checked by its outcome, not by a spy on the call
Bump alpha

✅ PR title follows conventional commit format.


🚀 Release Channel Compatibility

Predicted next version: 1.8.4a2

Channel Status Note Current Constraint
Stable Not in channel -
Testing Too new (must be <1.0.0) ovoscope>=0.7.2,<1.0.0
Alpha Compatible ovoscope>=1.6.15a1

🔍 Lint

The results are in the bag! 🎒

ruff: issues found — see job log

⚖️ License Check

Verifying the source of all binary files. 💾

✅ No license violations found.

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

📊 Coverage

Is the code fully hydrated with tests? Let's see! 💧

⚠️ 63.0% total coverage

Files below 80% coverage (15 files)
File Coverage Missing lines
ovoscope/simple_listener.py 0.0% 63
ovoscope/version.py 0.0% 5
ovoscope/classic_listener.py 18.2% 117
ovoscope/intent_cases.py 22.3% 153
ovoscope/pytest_plugin.py 47.0% 210
ovoscope/cli.py 47.8% 132
ovoscope/ocp.py 47.9% 61
ovoscope/tts_intelligibility.py 49.0% 102
ovoscope/media.py 56.7% 101
ovoscope/e2e.py 57.1% 73
ovoscope/listener.py 57.1% 127
ovoscope/voice_loop.py 59.0% 119
ovoscope/__init__.py 64.3% 429
ovoscope/audio.py 64.4% 126
ovoscope/media_provider.py 67.6% 23

Full report: download the coverage-report artifact.

🔨 Build Tests

Testing the robustness of the build environment. 🏔️

✅ All versions pass

Python Build Install Tests
3.10
3.11
3.12
3.13
3.14

Your loyal script, at your command 🫡

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants