Skip to content

spec: OVOS-PIPELINE-1 — audit fixes across match, policy and dispatch - #133

Open
JarbasAl wants to merge 1 commit into
devfrom
spec/pipeline-1-audit
Open

spec: OVOS-PIPELINE-1 — audit fixes across match, policy and dispatch#133
JarbasAl wants to merge 1 commit into
devfrom
spec/pipeline-1-audit

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Aug 4, 2026

Copy link
Copy Markdown
Member

🤖 Auto-generated by Claude Fable 5 (claude-fable-5) via Claude Code — NOT human-reviewed. Verify before acting. Cross-spec citations were model-verified against dev source; behavior-change sections need owner judgment.

Applies the PIPELINE-1 audit findings. Within-class refinement — the
spec stays at Version 2; CHANGELOG entry added under the existing
### 2 heading.

Behavior changes — needs owner sign-off

  • Fallback dispatches now push active_handlers. §7.3 gains an
    activation push column, and fallback is marked not
    suppressed. Previously every reserved name suppressed the push,
    which left a fallback handler unreachable by OVOS-STOP-1 (it selects
    its target from active_handlers) and ineligible for a converse
    follow-up. That is wrong for a long-running or conversational
    fallback such as a language-model handler. converse, response,
    stop and common_query stay suppressed.
  • The effective pipeline is composed after the metadata-transformer
    chain.
    §6.1 moves the compose step below TRANSFORM-1 §3.3 so a
    metadata transformer that writes session.pipeline routes the
    current utterance rather than the next one. CONVERSE-1 §3.3 relies
    on per-utterance routing.

Blockers

  • B1 §5.3 / §5.4 — the two-tier contract no longer declares a
    plugin that does not filter "not conformant" while giving it only a
    SHOULD. Plugin-side filtering is stated as an optimisation; the
    orchestrator's per-candidate check is the enforcement, and §5.6's
    authorization model is pinned to that tier alone.
  • B2 §4.2 — the orchestrator MUST re-impose the inbound
    session's blacklisted_pipelines / blacklisted_skills /
    blacklisted_intents onto any committed updated_session. Without
    it any loaded plugin could grant itself and its successors the
    permissions policy denied.
  • B3 §4.1 — a general malformed-Match rule replaces the
    lang-only one: missing or wrong-typed required fields, empty or
    :-bearing skill_id / intent_name, non-BCP-47 lang, non
    string→string slots, empty utterance. All are declinations, and
    the orchestrator MUST NOT repair them.

Majors

  • M1 §6.2 — first-match-wins means the first Match that
    survives well-formedness, denylist and required_slots checks.
  • M2 §5.1 / §6.1 / §6.2 — iteration is over the effective pipeline
    (§5.5), not session.pipeline directly.
  • M3 §7.1 — one normative recency rule for active_handlers,
    defined once: activated_at authoritative, equal timestamps
    tie-break to the entry nearest the head. Consumers MUST NOT
    define their own. STOP-1 §4.1 step 4 polarity is fixed in its own PR.
  • M4 §7.3 — per-row activation-push column (see behavior changes).
  • M5 §4.4 — the collection-ceiling citation is corrected to
    OVOS-COMMON-QUERY-1 §7.2, and the obligation is retargeted from the
    orchestrator (which cannot see inside a black-box plugin) to the
    deployment.
  • M6 §4.4 — a Match returned after the bound expired MUST be
    ignored and MUST NOT be dispatched; cancellation stays out of
    scope, and plugins SHOULD tolerate a discarded result. This
    closes a double-dispatch path against the §9.5 invariant.
  • M7 §9.3lang is the resolved tag the round ran in, present
    whenever iteration ran, not entry-topic residue.
  • M9 §4.2 — the orchestrator SHOULD pass each plugin an
    independent session copy, making the declined-plugin discard
    enforceable rather than aspirational.
  • M10 §11 — conformance gains resolve-once, the denylist and
    required_slots backstops, skill_id / pipeline_id stamping, the
    active_handlers push, the policy re-imposition, the
    timed-out-Match rule and match-phase liveness; the plugin claim
    bullet now names slots and utterance.

Minors

  • m1 §5 — the default pipeline is named once as the
    default-session pipeline of §5.1.
  • m2 §6.1 — the CONTEXT-1 §4 pre-match prune is in the diagram.
  • m3 §6.1 — the post-match decrement is placed at the close of the
    match round on both branches, before dispatch.
  • m4 — RECOMMENDED added to the RFC 2119 list.
  • m5 §10 — the introspection response is a MUST for every plugin,
    reconciled with §10.4 and §11; an empty intents array is the
    answer for a plugin with nothing loaded, since silence signals
    "not loaded".
  • m6 §3pipeline_id MUST match [A-Za-z0-9_-]. . is now
    excluded alongside :, because the identifier is a segment of the
    dot-separated §10.1 introspection topic.
  • m7 §6.4 — the terminal table lists all five paths of §9.5.
  • m8 §4 — with no OVOS-SESSION-1 §3.2 evidence, resolution
    terminates at the deployment default language, so lang is never
    absent at a match call.

Out of scope (other PRs)

  • M8 and n3 — common-query.md.
  • M3 counterparts in stop-1.md and converse.md.
  • n1 — appendix/divergences.md.
  • n2 — GLOSSARY.md.
  • n4 — NIT, not in this batch.

Files touched: pipeline-1.md, CHANGELOG.md.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@JarbasAl, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 36 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 88137fbf-7378-4556-9b08-a46a12310636

📥 Commits

Reviewing files that changed from the base of the PR and between 1d3622b and a0ddead.

📒 Files selected for processing (2)
  • CHANGELOG.md
  • pipeline-1.md

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.

@JarbasAl
JarbasAl marked this pull request as ready for review August 4, 2026 12:46
Squashed from:
- spec: OVOS-PIPELINE-1 — §7.3 suppressed-row count fixed
- spec: OVOS-PIPELINE-1 — audit fixes across match, policy and dispatch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@JarbasAl
JarbasAl force-pushed the spec/pipeline-1-audit branch from 98795a3 to a0ddead Compare August 4, 2026 12:51
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