Skip to content

OVOS-FALLBACK-1: Fallback Pipeline Plugin Specification#39

Draft
JarbasAl wants to merge 6 commits into
devfrom
spec/fallback
Draft

OVOS-FALLBACK-1: Fallback Pipeline Plugin Specification#39
JarbasAl wants to merge 6 commits into
devfrom
spec/fallback

Conversation

@JarbasAl
Copy link
Copy Markdown
Member

@JarbasAl JarbasAl commented May 27, 2026

Companion issue: #48

Summary

Defines the fallback pipeline plugin — the final stage(s) in the utterance lifecycle that handle utterances no earlier stage claimed, by querying registered fallback skills in priority order and dispatching to the first willing one.

The defining property of a fallback skill is that it evaluates the utterance with its own logic rather than relying on registered intents. Regular skills declare coverage through INTENT-4; fallback skills receive the raw utterance at query time and decide for themselves — analogous to CONVERSE-1's per-skill poll.

What the spec covers

  • §3 — Skill registration (ovos.fallback.register / .deregister) with priority hint; session-scoped per INTENT-4 §11
  • §3.3 — Priority guidance: 0–49 high confidence (knowledge bases), 50–74 medium (web search), 75–100 low confidence (LLM catch-alls). Every deployment SHOULD include a catch-all at priority 100
  • §4 — Session field session.fallback_handlers (ordered preference list, same composition model as transformers)
  • §5 — Pool construction: preference → stage range → availability → session.blacklisted_skills
  • §6 — Match contract: sequential unicast ping/pong (<skill_id>.fallback.ping / <skill_id>.fallback.pong); request carries utterances + lang so skill can parse the utterance itself
  • §7 — Dispatch via <skill_id>:fallback (reserved intent name, PIPELINE-1 §7.3)
  • §8 — Pipeline positioning; multi-stage interleaving (fallback_high/medium/low) preserved via per-instance priority ranges

Companion edits (same PR)

  • ovos-pipeline-1.md §7.3 — reserve intent_name fallback
  • ovos-session-1.md §3 — register fallback_handlers field

Defines the fallback pipeline plugin that handles otherwise-unmatched utterances. Uses a ping/pong discovery cycle to find willing skills, selects by priority, and dispatches to the chosen skill. Covers skill registration (§3), discovery cycle (§4.1), selection algorithm (§4.2), dispatch to the selected skill (§5), and pipeline positioning after persona and deterministic intents (§6).

Co-Authored-By: big-pickle <big-pickle@opencode.ai>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 27, 2026

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

Run ID: c0add02b-7481-443a-890c-fe9d27686a56

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
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch spec/fallback

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 and usage tips.

JarbasAl and others added 5 commits May 28, 2026 00:19
…name, bus-exchange exception

- All: ovos.skills.fallback.* → ovos.fallback.* (consistent with ovos.stop.*, ovos.persona.*, ovos.audio.*)
- §3: priority range examples made abstract (was 0-50, 50-80, 80-100)
- §4.1: added ping payload table (utterances, lang, session); bus-exchange exception note; bounded → "bounded to a few hundred milliseconds"
- §4.3: intent_name standardised as "fallback" (was e.g."fallback")
- §8: conformance bounded window aligned with §4.1; standardised intent_name subscription
- Removed ≈500ms from conformance section

Co-Authored-By: Claude Code <claude@anthropic.com>
Design changes from previous draft:
- Drop broadcast ping/pong (STOP-1 pattern); adopt sequential
  unicast per-skill query (CONVERSE-1 pattern):
  <skill_id>.fallback.request / <skill_id>.fallback.response
- Pool ordering follows transformer/pipeline composition model:
  session.fallback_handlers (preference) → stage range → availability
  → session.blacklisted_skills (policy). One session field claimed.
- No separate blacklisted_fallback_handlers — blacklisted_skills
  covers per-skill exclusion; blacklisted_pipelines covers stage exclusion
- Multi-stage interleaving (fallback_high/medium/low) preserved via
  per-instance priority range configuration; session ordering works
  identically within any stage
- Session-scoped registration via INTENT-4 §11.1
- skill_id payload MUST equal context.skill_id (anti-spoofing)

Companion edits:
- ovos-pipeline-1.md §7.3: reserve intent_name "fallback"
- ovos-session-1.md §3: register fallback_handlers field;
  fix response_mode shape owner_id → skill_id

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- §3.3: recommended three-tier convention (0-49 high confidence,
  50-74 medium, 75-100 low confidence / catch-all) with examples
  per tier
- §3.3: default-response skill guidance — deployments SHOULD include
  a catch-all skill at priority 100 that always returns can_handle:
  true; without it unmatched utterances produce no user response
- §8.1: add deployment SHOULD for catch-all skill
- §1 non-goals: rephrase to not claim priority ranges are undefined
  (§3.3 now provides non-normative guidance)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
§2: add explicit statement that the defining property of a fallback
skill is evaluating the utterance with its own logic rather than
relying on intent registrations. Regular skills use INTENT-4
patterns selected by a pipeline plugin; fallback skills receive
the raw utterance at query time and decide for themselves. Analogous
to CONVERSE-1's per-skill converse poll.

§6.1: fix missing utterance payload in the request. The request is
derived via .reply() so context.session propagates, but data does
not — the skill needs utterances+lang in the payload to do its
evaluation. Add the two fields to the request table. Add prose
explaining this is where the skill runs its own parsing logic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Standardise on ping/pong for pipeline-plugin capability-discovery
exchanges per AGENTS.md §4.5. The unicast dotted-addressed form
<skill_id>.fallback.ping / <skill_id>.fallback.pong is consistent
with the broadcast ovos.stop.ping / ovos.stop.pong pattern already
established in STOP-1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@JarbasAl JarbasAl changed the title OVOS-FALLBACK-1: Fallback Pipeline Plugin Specification (v1 draft) OVOS-FALLBACK-1: Fallback Pipeline Plugin Specification May 28, 2026
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