Skip to content

docs: APPENDIX — absorb context for INTENT-3 v1.1, INTENT-4 refactor, PIPELINE-1#14

Merged
JarbasAl merged 27 commits into
devfrom
docs/appendix-pipeline-update
May 26, 2026
Merged

docs: APPENDIX — absorb context for INTENT-3 v1.1, INTENT-4 refactor, PIPELINE-1#14
JarbasAl merged 27 commits into
devfrom
docs/appendix-pipeline-update

Conversation

@JarbasAl
Copy link
Copy Markdown
Member

@JarbasAl JarbasAl commented May 24, 2026

APPENDIX — design rationale and divergence catalogue

Maintains APPENDIX.md as the standalone home for code references, project-specific divergence notes, and design history that the normative specs deliberately do not carry.

Sections

  • Normative-document list — current set of specs and their roles.
  • Pipeline-plugin model — narrative of the abstraction PIPELINE-1 introduces and the three properties that make it expressive (plugin uniformity, indistinguishable owner kinds, engine-agnostic contract).
  • Design rationale — per-spec rationale sections for the cross-cutting choices (broadcast registration, side-effect-free match, owner_id polymorphism, universal end-marker, per-session pipeline configuration).
  • Divergence catalogue — where the spec set differs from current implementations, organised by kind: prescriptive renames, payload shape changes, architectural divergences, new topics with no direct precedent, and things the specs do not change.
  • Introspection patterns table — the unified ovos.<domain>.<verb> .list surfaces across INTENT-4, PIPELINE-1, CONTEXT-1, and TRANSFORM-1.
  • Predecessor-topic mapping — translation table from legacy topics to the spec'd ones.
  • Gaps and follow-ups — what the spec set deliberately leaves open.
  • Design history — orchestrator / bus / intent stack summary.

Out of scope

  • Any normative content (APPENDIX is non-normative by design).
  • Per-PR changelog or round-by-round commentary.

Status

Draft.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Warning

Review limit reached

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

More reviews will be available in 26 minutes and 59 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

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.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e1382b1f-f96a-47fb-92ef-a3c3fc6e750d

📥 Commits

Reviewing files that changed from the base of the PR and between b546e4e and 1911c01.

📒 Files selected for processing (1)
  • APPENDIX.md
📝 Walkthrough

Walkthrough

This PR expands APPENDIX.md: clarifies non‑normative spec scope, prescribes a pipeline-plugin model with a side-effect-free match contract, adds INTENT-4/PIPELINE-1 registration and dispatch specifics, catalogs divergences from OVOS implementations, and reframes design history/versioning into three stacks.

Changes

OVOS Specification Clarification and Alignment

Layer / File(s) Summary
Specification scope definition and preface
APPENDIX.md
Appendix preface expanded to clarify the non-normative reference set of OVOS specifications and to state that implementation pointers are excluded from spec bodies and collected here.
Pipeline-plugin model and abstraction contract
APPENDIX.md
Pipeline section rewritten to define per-session ordered pipeline_id stages, the `match(utterance, session) -> Match
Registration behavior and plugin contract expectations
APPENDIX.md
New subsections specify INTENT-4 registration as broadcast and passively indexed with introspection (ovos.intent.list, ovos.intent.describe) and silent-no-claim behavior; PIPELINE-1 defines minimal side-effect-free match, per-session pipeline_id tier conventions, and polymorphic owner_id for dispatch/handler-lifecycle payloads.
Implementation divergence catalog and alignment guidance
APPENDIX.md
Section 6 expanded with aligned behaviors, prescriptive renames (session.pipelinesession.pipeline_stages, handler lifecycle topics into ovos.intent.*), structured payload shape changes (including owner_id), documented architectural divergences (passive registration index, side-effect-free match, ovos.utterance.handled on terminal paths), new topics, and predecessor-topic mapping tables for migration.
Design history and versioning model
APPENDIX.md
Design history reframed from two stacks to three (intent, bus, orchestrator), and compatibility guidance updated to emphasize independent per-spec versioning for bus and orchestrator while preserving the intent-stack ladder concept in isolation.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

"I hopped through lines of spec and light,
I nudged the pipelines into sight,
with matchers calm and handlers right,
three stacks now hum beneath moonlight 🐇✨"

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately summarizes the main change: updating APPENDIX documentation to absorb context for three specs (INTENT-3 v1.1, INTENT-4 refactor, PIPELINE-1), which aligns with the substantial documentation reorganization described in the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/appendix-pipeline-update

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.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@APPENDIX.md`:
- Line 511: The migration note contains a typo: replace "worship layer" with
"workshop layer" (referencing ovos-workshop) in the line mentioning the
"keyword-intent path" so the note correctly reads that the keyword-intent path
needs to be rewritten in the workshop layer; update the text near the
"keyword-intent" mention to reference "workshop layer" / "ovos-workshop" instead
of "worship layer".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a56c8fae-225d-4f5c-b9df-a82941f5340c

📥 Commits

Reviewing files that changed from the base of the PR and between 8b418fa and e8aabbe.

📒 Files selected for processing (1)
  • APPENDIX.md

Comment thread APPENDIX.md Outdated
`IntentBuilder.__dict__` payload. INTENT-4 collapses this into
a single message with structured `{required, optional, one_of,
excluded}` arrays of vocabulary descriptors. Every skill's
keyword-intent path needs to be rewritten in the worship layer.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix component-name typo in migration note.

Line 511 says “worship layer”, which appears to be a typo for “workshop layer” (likely ovos-workshop).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@APPENDIX.md` at line 511, The migration note contains a typo: replace
"worship layer" with "workshop layer" (referencing ovos-workshop) in the line
mentioning the "keyword-intent path" so the note correctly reads that the
keyword-intent path needs to be rewritten in the workshop layer; update the text
near the "keyword-intent" mention to reference "workshop layer" /
"ovos-workshop" instead of "worship layer".

@JarbasAl JarbasAl force-pushed the docs/appendix-pipeline-update branch 3 times, most recently from 174ded8 to bd82e38 Compare May 24, 2026 02:59
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
APPENDIX.md (1)

555-555: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix typo in migration guidance (“worship” → “workshop”).

Line 555 says “worship layer,” which appears to be a typo for “workshop layer” (ovos-workshop), and can confuse migration work.

Proposed patch
-  keyword-intent path needs to be rewritten in the worship layer.
+  keyword-intent path needs to be rewritten in the workshop layer.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@APPENDIX.md` at line 555, Replace the typo "worship layer" with "workshop
layer" and clarify the target as the ovos-workshop migration; update the
sentence that mentions "keyword-intent path needs to be rewritten in the worship
layer" to read "keyword-intent path needs to be rewritten in the workshop layer
(ovos-workshop)" so readers understand the correct component to modify.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@APPENDIX.md`:
- Line 555: Replace the typo "worship layer" with "workshop layer" and clarify
the target as the ovos-workshop migration; update the sentence that mentions
"keyword-intent path needs to be rewritten in the worship layer" to read
"keyword-intent path needs to be rewritten in the workshop layer
(ovos-workshop)" so readers understand the correct component to modify.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7e30b8bc-406c-4770-b8f0-eca334997249

📥 Commits

Reviewing files that changed from the base of the PR and between e8aabbe and b546e4e.

📒 Files selected for processing (1)
  • APPENDIX.md

JarbasAl and others added 20 commits May 26, 2026 14:34
…del)

Applies corrections found by auditing claims against actual OVOS
source code:

1. **§6.7 enable/disable_intent legacy names corrected** to the
   real `mycroft.skill.enable_intent` / `mycroft.skill.disable_intent`.

2. **§6.4 direct-bus-subscribe claim broadened** — verified the
   standard ovos-padatious-pipeline-plugin and
   ovos-adapt-pipeline-plugin both subscribe directly to
   registration topics, not just downstream plugins.

3. **§6.4 "side-effects during match" softened** — audit confirms
   the official match_* methods are already side-effect-free; the
   skill-activation emit is orchestrator-side, not plugin-side.
   Rule reframed as forward-looking discipline.

4. **§3 / §4 / §6.4: PIPELINE-1 *refines* the plugin model rather
   than *introducing* it.** OVOSPipelineFactory, pipeline_plugins
   dict, _PIPELINE_MIGRATION_MAP, and the official plugin set
   already exist. PIPELINE-1's actual contribution narrows to:
   formalizing the contract, `<owner_id>:<intent_name>`
   polymorphism, universal `ovos.utterance.handled` end-marker,
   and the renames.

5. **§3 / §4 / §6.4: tier convention is compatible, not a
   divergence.** From the bus each tier is already a distinct
   `pipeline_id` in `Session.pipeline`. How a Python plugin class
   internally serves multiple `pipeline_id`s (one class with
   match_high/medium/low methods, an orchestrator-side
   suffix-decoder, separate plugin instances, etc.) is
   implementation choice the spec does not constrain.

6. **§4 / §6.4: registrations-are-broadcast is compatible, not a
   divergence.** OVOS already broadcasts registrations on the
   bus; plugins already subscribe directly. INTENT-4 does not
   change this — it only renames topics into the `ovos.intent.*`
   namespace (see §6.7). Migration is a string replacement.
   What IS new is the orchestrator's passive registration index
   that backs `ovos.intent.list` / `.describe` — that's added as
   a separate §6.4 divergence ("new orchestrator responsibility,
   not a change to existing behaviour").

7. **§6.6 adds note on engine-specific introspection topics**
   (`intent.service.adapt.*`, `intent.service.padatious.get`) —
   plugin-defined surface; spec does not claim authority over
   them.

No spec-body changes; APPENDIX only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Same logic as the broadcast-registrations correction: the
orchestrator already treats every loaded plugin uniformly, and
`IntentHandlerMatch.match_type` is an opaque string the plugin
chooses — nothing in current code prevents a plugin from setting
`match_type = "<pipeline_id>:<intent_name>"` and being dispatched
to itself. The `<owner_id>:<intent_name>` polymorphism PIPELINE-1
names is therefore already supported; the spec only writes down a
convention current code allows but does not document.

Design rationale around the polymorphism stays in §3/§4 — it is
useful explicit naming. But it is not a divergence and should not
sit in the divergence catalogue.

§6.4 now contains a single real divergence: the orchestrator's
new passive registration index backing `ovos.intent.list` /
`.describe`. Everything else in §6.4 is forward-looking
discipline or a workshop bug, not an architectural change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PIPELINE-1 now keeps the existing `session.pipeline` field name
instead of renaming it to `pipeline_stages`. Drop the §6.2
rename row and revert the prose mentions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per the new "dedicated APPENDIX PR" policy, consolidating the
prior-art and design-deviation notes from the OVOS-CONTEXT-1
(PR #18) and OVOS-TRANSFORM-1 (PR #20) work into this PR.
Those spec PRs are now scoped to their own spec files only;
the discussion / cross-spec touchups / in-tree prior art
all live here.

Adds to §4 Design rationale:
- "Intent context (CONTEXT-1)" — the Adapt-only origins, the
  two-scope (private/shared) formalization, jurebes /
  nebulento / palavreado as prior art for excludes_context,
  the engine-side §5.3 mutation pathway resolving the
  PIPELINE-1 §4.2 contradiction.
- "Transformer plugins (TRANSFORM-1)" — the architectural-
  pattern framing, intent transformers as the system-typing
  home, the nine concrete in-tree plugins as prior art, the
  ascending-vs-descending priority deviation called out,
  cancellation alignment with existing plugin convention,
  and the language disambiguation hierarchy mirroring current
  ovos-core code paths.

Removes from §7 Known gaps:
- "Intent context" bullet (formalized in CONTEXT-1).
- "The utterance-transformer chain" bullet (formalized in
  TRANSFORM-1).
…ences

§4 — new 'Session (SESSION-1)' rationale subsection: why it exists,
   prescriptive-not-descriptive scope, omission-as-deferral
   semantics, four language signals.
§4 'Transformer plugins' — language-disambiguation note updated:
   hierarchy moved out of TRANSFORM-1 to SESSION-1 §3.2; transformer
   types now just named as natural producers of signals,
   consolidation is consumer's stage-dependent choice.
§6.4 architectural divergences — add: handler-trio ownership shifted
   to orchestrator (third-party handler code carries no obligation);
   per-pipeline_id intent introspection (PIPELINE-1 §10); CONTEXT-1
   scope discriminator. Update ovos.utterance.handled note to
   reflect the trio-ownership shift (workshop fix is now in the
   wrapper, not the handler).
§6.5.1 (new) — introspection-patterns table comparing INTENT-4,
   PIPELINE-1, CONTEXT-1, TRANSFORM-1 surfaces. Three shared
   properties (pull-query is source of truth, no completeness
   signal, per-process slices under split orchestrators). Notes
   naming-convention inconsistency as candidate follow-up.
§6.6 — remove obsolete 'session shape deferred' note; replace with
   SESSION-1 ownership statement.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nces

§6.5.1: topic-naming inconsistency is now resolved — all four .list
   surfaces use ovos.<domain>.<verb>. Update the table and replace
   the 'not yet uniform' note with a rename log.
§6.4: add four new divergence entries:
   - Skill self-identification on every emission (INTENT-4 §3.1)
   - recognizer_loop:utterance de-prescribed (PIPELINE-1 §9.1)
   - .list topics standardized
   - (keeps the existing scope-discriminator / handler-trio /
     per-pipeline_id / utterance.handled entries)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Stand-alone design notes, not a changelog.

§4 design rationale: rewrite Session block and TRANSFORM-1 lang
   bullet to describe current design, not 'moved from earlier draft'.
§6.4 divergences: rewrite handler-trio / trio-ownership / scope-
   discriminator / skill_id-emission / recognizer_loop /
   topic-naming entries to state current design, not contrast with
   earlier drafts.
§6.5.1 introspection patterns: drop 'in this round' rename note.
§9 (rewritten 'Design history' → 'The spec set, in three stacks'):
   drop §9.3 audit-driven-refinement entirely (changelog content);
   merge §9.1 + §9.2 into one tighter section about how the eight
   specs partition and what reference implementations exist.
§10 compatibility levels: soften 'was previously spoken of at' to
   'is spoken of at'; replace the 'no longer describes' framing
   with a forward-looking 'tuple covering all eight specs is a
   planned follow-up'.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…+ dispatch stamping

§6.4: rewrite the CONTEXT-1 scope-discriminator entry to reflect
   the bigger change — scope AND origin both collapsed into the
   key shape. requires_context discriminator is the surviving
   surface (default private).
§6.4: rewrite the skill_id-on-every-emission entry to lead with
   the structural enforcement (dispatch stamping + forward/reply
   inheritance), with loader interception as a follow-up rather
   than the primary path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…pection topics

Cross-spec audit B1: 'intent' plays three different roles across
the four-spec introspection table — registered intents (INTENT-4),
compiled-in-a-matcher intents (PIPELINE-1), and intent-transformer
plugins (TRANSFORM-1). The shapes are deliberate and the payloads
are distinct, but the topic strings read confusingly at a glance.
Added an informative paragraph naming the three meanings and
clarifying that ovos.transformer.intent.list follows the per-chain
ovos.transformer.<type>.list pattern, where 'intent' is the chain
type — not a listing of intents.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ication keys

Document the rationale for TRANSFORM-1 §1.3 claiming six per-type
context keys (audio_transformer_id, utterance_transformer_id, ...)
rather than a single generic transformer_id. Two arguments: (1)
role preservation across the six-stage chain, mirroring the
per-type partition that already exists in §1.1 registries, §5
session overrides, and §6 introspection topics; (2) multi-type-
plugin disambiguation, since §1.1 permits a single transformer_id
across types and a generic context key would erase the role at
emit time.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…metry, and the per-type field-count tradeoff

Four design notes capturing the recent TRANSFORM-1 evolution:

- Update the existing per-type self-id bullet to reflect the
  plural list-valued context keys (audio_transformer_ids etc.,
  not the older singular names).
- New bullet: list-valued attribution preserves full chain
  provenance per type; the last entry is the most-recent stamp.
  Skills and pipelines stay single-string because they originate
  rather than chain.
- New bullet: per-type denylists (six blacklisted_*_transformers)
  complete the policy surface, mirroring PIPELINE-1's
  pipeline/blacklisted_pipelines pair. Three-stage composition
  (preference → availability → policy) parallels PIPELINE-1 §5.5.
- New bullet: acknowledge the per-type 'explosion' (12 session
  fields + 6 context keys), defend the choice against the
  transformer_<type>:<name> prefix-encoding alternative (direct
  lookup vs prefix parsing), note that SHOULD-omit makes the
  common case zero-cost on the wire, and document the
  object-valued form as a clean fallback if the field count ever
  proves painful in practice.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add design-rationale paragraph explaining why ovos.context.set
defaults to private scope when the canonical worked example
(Person → Bob) is naturally cross-skill. Three reasons: migration
fidelity (current Adapt set_context is effectively skill-private),
safer footgun direction (accidental shared-leak is harder to
debug than accidental cross-skill miss), and authorability
(cross-skill coordination deserves a conscious explicit scope).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e rename

Move the entry-topic from §6.1 'already aligned' to §6.4
'architectural divergences' — it is no longer a name kept
verbatim, since PIPELINE-1 §9.1 now prescribes
ovos.utterance.handle. Rationale paragraph cites the three
MSG-1 §2.1.2 naming convention violations: ':' as separator,
implementation-role leading segment, missing request/terminal
verb pairing.

Migration cost spelled out (every audio-input service emits,
every intent-service handler subscribes: ovos-dinkum-listener,
ovos-simple-listener, ovos-audio, ovos-core/intent_services).

§6.7 predecessor-topic table updated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eld + stamp-rule cheat-sheets

Two informative additions:

- §2.5 (new): extends the §2 comparison set with Rasa, hassil,
  ASK / Dialogflow, and Mycroft. Locates the CONTEXT-1 design
  against Rasa's policy-engine-coupled forms; locates
  TRANSFORM-1 §3.4 against ASK/Dialogflow built-in entity types
  as the injectable open contract; documents Mycroft as the
  predecessor whose ad-hoc model the spec family formalizes.

- §6.5.2 (new): session-field cheat-sheet consolidating the 26
  fields claimed across SESSION-1, PIPELINE-1, TRANSFORM-1, and
  CONTEXT-1 into a single reference table — owner spec, role
  (preference / policy / signal / identity), empty-array
  semantics. Followed by a stamp-rule cheat-sheet covering the
  three component-identity context-key surfaces (skill_id,
  pipeline_id, <type>_transformer_ids) and their behaviour
  across origination, .reply / .response, and .forward.

Both reduce cross-spec bouncing for implementers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The appendix had become a dumping ground after multiple rounds
of additions. Restructured with clear narrative flow:

§1 About the OVOS specifications — formalization framing,
   the three-stack overview (was §9), compatibility levels
   (was §10), reference implementations + ecosystem tooling
   (folds in ovos-spec-tools from §9 and ovos-localize from §8).

§2 Comparison with other voice-assistant systems — merges
   the HA/Rhasspy material (was §2) with the Rasa/ASK/
   Dialogflow/Mycroft/hassil material (was §2.5) into a
   single comparator section, ordered by relevance: HA &
   Rhasspy (shared lineage) → open-vs-closed structural
   argument → Mycroft (predecessor) → Rasa (CONTEXT-1
   comparator) → ASK/Dialogflow → hassil (grammar-only) →
   summary of where OVOS leads/follows/differs.

§3 Architectural patterns — the bus as substrate (was §5)
   and the pipeline-plugin model (was §3) grouped as the
   two cross-cutting architectural moves. Bus-substrate
   section gains an explicit subsection on the layer-2
   authorization story (preference / policy split).

§4 Design rationale, per specification — was §4 itself but
   now systematically per-spec (INTENT-1+2+3 grouped,
   MSG-1, SESSION-1, INTENT-4, PIPELINE-1, CONTEXT-1,
   TRANSFORM-1). Stale references purged; recently added
   rationales (most-specific-wins precedence, bidirectional
   lang propagation, per-type denylists, etc.) folded in.

§5 Where the specs differ from current OVOS code — was §6
   but reorganized: removed the §6.5.1 introspection-
   patterns table and §6.5.2 cheat-sheets (they aren't
   divergences from code, they're implementer reference —
   moved to §6). Renumbered to §5.1–§5.7.

§6 Implementer reference — new top-level section gathering
   the cross-spec reference tables that were scattered:
   topic-name conventions (with the 'intent' overload
   clarification), session-field cheat-sheet,
   component-identity stamp-rule cheat-sheet, introspection
   patterns table. These don't belong inside a 'divergences
   from code' section; they're how-to material for fresh
   implementers.

§7 Known gaps and planned work — unchanged content, last
   section. Trimmed stale entries about CONTEXT-1 and
   TRANSFORM-1 as 'planned' (they've shipped); added
   conversation-level evaluation infrastructure as a gap.

Net: same content, far more navigable. Cross-references
updated throughout.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…2.3-2.6

Mycroft AI Inc shut down in 2023; the fork is years old and the
intervening design is not Mycroft's. Keeping a 'comparison to
predecessor' subsection over-attributes the architecture and
mis-frames OVOS as a derivative project rather than a long-
running open project in its own right.

Section §2 is now a comparison with currently-relevant
voice-assistant systems only:

- §2.1 Home Assistant and Rhasspy (shared grammar lineage)
- §2.2 Closed domain vs open ecosystem
- §2.3 Rasa
- §2.4 Amazon ASK / Google Dialogflow
- §2.5 hassil
- §2.6 Summary

Collateral: dropped Mycroft from the project-name list in the
intro and from the comparator enumeration in the §2.6 summary.
Legacy topic strings that happen to contain 'mycroft' in their
literal name remain in the §5 divergence tables and §5.7
predecessor-topic mapping as factual code references.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Make the family's interop story explicit rather than implied. New
§3.3 catalogues three injection points where external protocols
plug into the spec family:

1. Pipeline plugins as the dispatch-layer adapter — LLM APIs
   (OpenAI Chat Completions and compatible), deterministic
   template matchers (hassil), external intent classifiers,
   agent-tool protocols (MCP).
2. Transformer chains as the artifact-pipeline adapter —
   bidirectional translation, STT validators, content-policy
   filters, acoustic-event detectors.
3. Bus boundary as the wire-level adapter — Wyoming
   bridges, MQTT-based stacks, HiveMind-style layer-2
   substrates.

Per-protocol notes for Wyoming, OpenAI, MCP, hassil, MQTT,
A2A — naming where each plugs in. The single-flip routing and
no-central-state stance (§3.1) are what make the bus-boundary
adapter feasible without modifying the assistant core.

Concrete suggestion: a translation tool between OVOS-INTENT-2
locale resources and HA's hassil/intents YAML would let the
two corpora cross-pollinate mechanically. Added to §7 known
gaps as planned tooling.

The three injection points are intentionally not exhaustive —
they're the points the spec family deliberately keeps clean. A
protocol needing deeper integration is a signal of
architectural overlap rather than complementarity.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-turn gap

OVOS-CONVERSE-1 (PR #25) fills the multi-turn conversation gap that §7 previously listed as planned work. Update §1.2 stack description to include it, and drop the §7 gap entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
JarbasAl and others added 3 commits May 26, 2026 14:34
…ymorphism collapse

Two divergence-catalogue entries updated to reflect the
PIPELINE-1 restructure:

- The §5.4 'side-effect-free during match' entry is rewritten
  as 'match contract is the single obligation' — match's only
  MUST is returning Match-or-null; bus emissions during match
  are allowed; session mutation during match is via
  Match.updated_session (explicit channel).

- New §5.4 entry: 'Match.updated_session as the match-phase
  session channel' — promotes the existing ovos-core code
  pattern `sess = match.updated_session or
  SessionManager.get(message)` to a normative Match field.
  Claiming plugin's mutations land; declined plugin's
  mutations drop at the boundary.

- The §5.3 'Dispatch payload uses polymorphic owner_id' entry
  is rewritten as 'unified owner_id' — reflects PIPELINE-1
  §7.0's collapse to two handler-owner shapes (plain skill,
  pipeline plugin with bundled handlers where pipeline_id ==
  skill_id) plus the pure-matcher recognition. Notes the
  conceptual mapping skill_id ≈ voice_app_id, pipeline_id ≈
  matching-engine id.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
OVOS-SESSION-2 (in flight at PR #27) defines session lifecycle
and state ownership. Update:

- §1.2 orchestrator-stack narrative adds SESSION-2 to the stack
  description with one-line summary of its scope (stateless
  orchestrator for named sessions, orchestrator-owned default
  session, projection mandate).

- §7 gap entry rewritten: SESSION-2 lands the lifecycle piece;
  what remains deferred is the set of session preference fields
  that need to be claimed under SESSION-1 §2.1 by their owning
  specs (preferences / OCP / persona / locale).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ot 'mandate')

Sync with SESSION-2 §2.4 relaxation (commit 6a882c8). The
projection pathway is SHOULD-when-practical; plugins MAY hold
internal state with full lifecycle ownership and best-effort
resumption.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@JarbasAl JarbasAl force-pushed the docs/appendix-pipeline-update branch from 1f4f761 to a260b83 Compare May 26, 2026 13:38
JarbasAl and others added 4 commits May 26, 2026 16:42
These ovos-core topics are not defined by any spec. SESSION-2 §6.4
explicitly avoids naming them. They should be retired in favour of
clients reading session state from normal Message flow
(ovos.utterance.handled or any other session-carrying Message).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
README intro replaced: "voice assistant ecosystem" → "voice
operating system" with an OS-analogy table (scheduler, IPC,
shared memory, process supervision, loadable modules, syscall ABI).

APPENDIX §1.0 (new): The voice operating system concept — two
conflations addressed: (1) voice assistant product (closed,
vertically integrated vs open platform); (2) LLM wrapper (LLMs
fit as pipeline plugins, utterance/dialog/metadata transformers —
one possible multi-role deployment, not the architecture itself).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- owner_id → skill_id throughout (§3.2, §3.3, §4.5, §4.6)
- match(utterance,…) → match(utterances,…) (§4.5)
- Match.captures → Match.slots (§4.7)
- complete_intent_failure → ovos.intent.unmatched in §5.1/§5.3/§5.7;
  add rename row to §5.2 table
- Dispatch payload block in §5.3 rewritten: {lang, utterance, slots},
  handler-lifecycle uses {skill_id, intent_name, optional exception}
- §5.5: add ovos.intent.unmatched and ovos.utterance.speak entries
- §2.5 hassil: drop standalone subsection; fix §2 intro cross-ref
- §1.3 compat levels: condense to bullets
- §1.4: drop ovos-localize "honest notes" paragraph
- §3.1.3: trim to essential bus-substrate mechanics
- §4.7: trim per-type-explosion and per-type-self-id bullets
- §5.4: trim rename and match-contract entries

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@JarbasAl JarbasAl marked this pull request as ready for review May 26, 2026 19:49
@JarbasAl JarbasAl merged commit 63594c7 into dev May 26, 2026
1 check passed
@JarbasAl JarbasAl deleted the docs/appendix-pipeline-update branch May 26, 2026 22:14
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