Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,54 @@ version 2: its `{{ … }}` sequences become substitution points, and its

### 2

- Specification audit. §3 — `pipeline_id` MUST match `[A-Za-z0-9_-]`;
`.` is now excluded as well as `:`, because the identifier is a
segment of the dot-separated §10.1 introspection topics. §4.1 (new
paragraph) — a general malformed-`Match` rule: a missing or
wrong-typed required field, an empty or `:`-bearing `skill_id` /
`intent_name`, a non-BCP-47 `lang`, a `slots` value that is not a
string→string map, or an empty `utterance` makes the `Match`
malformed; the orchestrator treats it as a declination and MUST NOT
repair it. §4/§9.1 — language resolution always terminates: with no
OVOS-SESSION-1 §3.2 evidence the orchestrator resolves to the
deployment default language, so `lang` is never absent at a `match`
call. §4.2 — the orchestrator SHOULD hand each plugin an independent
session copy, making the declined-plugin discard enforceable; and it
MUST re-impose the inbound session's `blacklisted_pipelines` /
`blacklisted_skills` / `blacklisted_intents` onto any committed
`updated_session`, so a plugin cannot widen policy for the stages
after it. §4.4 — sizing the match-phase bound above a stage's
internal collection ceiling is a deployment obligation (the
orchestrator cannot see inside a black-box plugin), citing
OVOS-COMMON-QUERY-1 §7.2 for the collection window; a `Match`
returned after the bound expired MUST be ignored and MUST NOT be
dispatched, closing a double-dispatch path. §5 — the default pipeline
is named once as the default-session pipeline of §5.1. §5.3/§5.4 —
plugin-side denylist filtering is an optimisation and a plugin that
omits it stays conformant; the orchestrator's per-candidate check is
the enforcement the §5.6 authorization model rests on. §6.1/§6.2 —
iteration is over the effective pipeline of §5.5, and first-match-wins
means the first `Match` that survives well-formedness, denylist and
`required_slots` checks. §6.1 — the effective pipeline is composed
after the metadata-transformer chain, so a transformer rewriting
`session.pipeline` routes the current utterance; the diagram gains the
OVOS-CONTEXT-1 §4 pre-match prune and places the post-match decrement
at the close of the match round on both branches. §6.4 — the terminal
table lists all five paths of §9.5, splitting the matched path into
handler-completed, handler-raised and handler-timed-out. §7.1 — one
normative recency rule for `session.active_handlers`: `activated_at`
is authoritative, and equal timestamps tie-break to the entry nearest
the head; consumers MUST NOT define their own order. §7.3 — the
reserved-name registry gains an **activation push** column; `fallback`
now pushes an entry while `converse`, `response`, `stop` and
`common_query` stay suppressed. §9.3 — `lang` on
`ovos.intent.unmatched` is the resolved tag the round ran in, present
whenever iteration ran. §10 — introspection response is a MUST for
every plugin, reconciled with §10.4 and §11. §11 — conformance gains
the resolve-once rule, 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`.
- §6.2 — the orchestrator treats a `Match` as declined when any slot
listed in the intent's `required_slots` (OVOS-INTENT-3 §5.3) is absent,
behind the engine's own enforcement during `match`.
Expand Down
Loading