INTENT-4 §11: session-scoped intent registration#45
Conversation
Every registration is automatically keyed by the session_id from the registration message context — no shape change needed. The effective intent pool for session X = default intents ∪ session-X intents − blacklisted. "default" is the global/inherited scope; all sessions inherit it. Session-scoped registrations extend, never narrow; the blacklist is the sole narrowing mechanism. Changes: - §1 scope: add session-scoped registration to the defined list - §8.1: replacement key is now quintuple (session_id, skill_id, intent_name, lang, method) - §8.4: ovos.skill.deregister gains optional session_id field for satellite bulk-cleanup on disconnect - §10.1: ovos.intent.list gains optional session_id filter; when provided returns effective pool (default ∪ session-specific); each response entry now includes session_id - §11 (new): session-scoped registration — indexing model, inheritance rule, deregistration/teardown, plugin visibility, dispatch routing (transparent via existing MSG-1 destination) - §12 conformance (renumbered from §11): orchestrator MUST now key manifest by quintuple and serve session-aware list queries Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
session_id must come from Message.context["session"]["session_id"], not from Message.data. Reading from data would let a producer register intents under an arbitrary session it does not own; context is set by the session the producer is running under and cannot be forged by payload content. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…o spec/intent4-session-scoped
|
Merge-ready (MERGEABLE, dev merged in). Template conformance: header present, RFC-2119 boilerplate present, §11 session-scoped registration section well-formed with sub-sections 11.1–11.5. Added: CHANGELOG entry for the §11 addition (normative content was added without one). |
Companion issue: #47
Summary
Every intent registration is automatically keyed by
session_idfromcontext.session.session_id— no wire-shape change needed."default"is the global/inherited scope; all sessions inherit it. Session-scoped registrations extend the pool; the existing blacklist fields are the sole narrowing mechanism.Effective pool for session X:
defaultintents ∪session-Xintents − blacklisted entriesDispatch of session-scoped intents routes back through the bridge transparently via existing MSG-1 destination-based routing (BRIDGE-1 §3.2).
Changes
(session_id, skill_id, intent_name, lang, method);session_idread fromcontext.session.session_id, never frommessage.dataovos.skill.deregistergains optionalsession_idfield for bulk satellite cleanup on disconnectovos.intent.listgains optionalsession_idfilter returning the effective pool (default ∪ session-specific); response entries includesession_idCompanion
BRIDGE-1 §4.4 (PR #43) documents the satellite skill registration pattern this spec enables.