Skip to content

test: the canonical fallback pong needs the spec-tools mapping floor - #624

Merged
JarbasAl merged 3 commits into
devfrom
test/fallback-pong-spelling-floor
Sep 16, 2026
Merged

JarbasAl merged 3 commits into
devfrom
test/fallback-pong-spelling-floor

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Sep 9, 2026

Copy link
Copy Markdown
Member

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

A test that fires at whoever switches the fallback pong to its spec spelling without
bumping the floor that makes the switch safe. No production code changes. Mirror of
OpenVoiceOS/ovos-core#972, which guards the ping on the other end of the same poll.

Why

OVOS-FALLBACK-1 §6.1 names the poll pair ovos.fallback.ping / ovos.fallback.pong.
ovos_workshop/skills/fallback.py subscribes to the legacy ping and emits the legacy
pong, and the core counting those answers subscribes to the legacy pong.

The day a skill emits the canonical pong, the only thing reaching an older core is the
legacy twin ovos-bus-client puts on the wire. That twin is built from the migration map
in this process's own ovos-spec-tools — the core's map has no say in it. The four
FALLBACK-1 renames first appear in ovos-spec-tools 1.12.0a1; ovos-workshop declares
>=1.11.0a1. Below the floor there is no twin: the poll times out, the skill is dropped
from the pool, and nothing appears in the logs.

Measured against the published wheels:

ovos-spec-tools migration_counterpart("ovos.skills.fallback.pong")
1.11.2a1 None
1.12.0a1 ovos.fallback.pong

What the test does

It parses the bus topics the fallback skill uses. While the poll keeps its legacy
spelling the first test skips. The moment a canonical poll topic appears in the source,
it asserts the declared ovos-spec-tools floor is at or above 1.12.0a1. A second test
holds that constant to the installed release so it cannot rot into a number nobody
checks.

Verification

Tree Result
dev unmodified 1 skipped, 1 passed
pong switched to ovos.fallback.pong, floor left at 1.11.0a1 1 failed, 1 passed
both the switch and the floor bump applied 2 passed

The alarm fires only on the unsafe combination, and it is satisfiable.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

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
Contributor

The automated inspectors have submitted their report. 🕵️‍♂️

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

📋 Repo Health

I've checked the repo's social skills (aka issue response time). 🗣️

✅ All required files present.

Latest Version: 9.8.1a1

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

⚖️ License Check

The license check is now finished. 🏁

✅ No license violations found.

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

📡 Channel Compat — testing

I've checked the pulse of your pull request. 💓

🚧 Channel unresolvable with this checkout — the repo's dependency floors exceed what the channel pins (fleet finding; see the install log).

Constraints: https://raw.githubusercontent.com/OpenVoiceOS/OpenVoiceOS/main/constraints-testing.txt
Resolved stack: channel-compat-testing artifact (constraints + pip freeze).

📡 Channel Compat — stable

The latest check report is officially filed. 📁

🚧 Channel unresolvable with this checkout — the repo's dependency floors exceed what the channel pins (fleet finding; see the install log).

Constraints: https://raw.githubusercontent.com/OpenVoiceOS/OpenVoiceOS/main/constraints-stable.txt
Resolved stack: channel-compat-stable artifact (constraints + pip freeze).

🔒 Security (pip-audit)

Checking for any potential security regressions. 🔄

✅ No known vulnerabilities found (72 packages scanned).

🔍 Lint

Ensuring we're following our development process. 📏

❌ ruff: issues found — see job log

🔨 Build Tests

Checking the plumbing of your data flows. 🚰

✅ All versions pass

Python Build Install Tests
3.10 ✅ ✅ ✅
3.11 ✅ ✅ ✅
3.12 ✅ ✅ ✅
3.13 ✅ ✅ ✅
3.14 ✅ ✅ ✅

The silent guardian of the dev branch. 🦇

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JarbasAl
JarbasAl force-pushed the test/fallback-pong-spelling-floor branch from e22f907 to d9d1dcb Compare September 13, 2026 08:39
JarbasAl and others added 2 commits September 13, 2026 09:00
…mapped values

- poll_topics() also counts SpecMessage.FALLBACK_PING and FALLBACK_PONG
  attribute uses as the canonical topics they carry. A switch written
  through SpecMessage no longer slips past the floor guard (it passed and
  skipped before, failing the guard now).
- The floor-release test asserts that the legacy ping and pong map to
  ovos.fallback.ping and ovos.fallback.pong, values written from
  OVOS-FALLBACK-1 section 6.1, not only that a counterpart exists. A map
  pairing the pong with the wrong topic passed before and fails now.
- declared_floor() documents that it reads the installed package metadata,
  so a local floor edit needs a reinstall before the test sees it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
While the fallback skill still names only ovos.skills.fallback.ping and
ovos.skills.fallback.pong, the floor case skipped, so the pull request
added one skip on every Python. It now asserts that the legacy pair is
present, and it checks the spec-tools floor once a canonical spelling
appears. The skip tally is the same as dev's again.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JarbasAl
JarbasAl marked this pull request as ready for review September 16, 2026 17:22
@JarbasAl
JarbasAl merged commit 6e0ad9c into dev Sep 16, 2026
13 checks passed
JarbasAl added a commit that referenced this pull request Sep 19, 2026
ovos-core#994 counts FALLBACK_PING/FALLBACK_PONG written as a string
constant (SpecMessage["FALLBACK_PONG"], getattr(SpecMessage,
"FALLBACK_PONG")) as the canonical topic they carry. The workshop guard
from #624 counted the attribute form only, so the two guards differed
(review-ovos-core-994.md note 2). Ported the branch; poll_topics takes an
optional source for the mutant cases: attribute, subscript, getattr and a
legacy-literal control. Without the branch the subscript and getattr
cases fail; with it, 6 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
JarbasAl added a commit that referenced this pull request Sep 19, 2026
ovos-core#994 counts FALLBACK_PING/FALLBACK_PONG written as a string
constant (SpecMessage["FALLBACK_PONG"], getattr(SpecMessage,
"FALLBACK_PONG")) as the canonical topic they carry. The workshop guard
from #624 counted the attribute form only, so the two guards differed
(review-ovos-core-994.md note 2). Ported the branch; poll_topics takes an
optional source for the mutant cases: attribute, subscript, getattr and a
legacy-literal control. Without the branch the subscript and getattr
cases fail; with it, 6 passed.

Co-authored-by: JarbasAi <jarbasai@mailfence.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
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.

1 participant