INTENT-1: union slot sets for .intent files#56
Conversation
|
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 |
c58c9dc to
1fe29fc
Compare
|
Merge-ready (MERGEABLE, 0 commits behind dev). Fix applied: §5.4 (Suppression/.blacklist) in INTENT-3 was a duplicate heading — renumbered to §5.5 to match the cross-references that already used §5.5. All internal §-references across INTENT-3 and INTENT-4 are consistent. Version headers left at v2/v1/v1 per the Draft-freeze policy (commit 1fe29fc). Note: after #55 merges, GLOSSARY.md in this branch will need |
…p version §11 adds session-scoped registration. Make the spec internally consistent: - §8.1 keyed intent replacement by a 4-element tuple missing 'method', contradicting the §11.1/§12 quintuple. State it as the quintuple (session_id, skill_id, intent_name, lang, method) for intents; entities keep the quadruple (no method axis). - Unify the session-id reference to context.session.session_id (was the bracket form in §8.1/§11.1; §12 already used the dot form). - Bump the spec header Version 1 -> 2 and reorder the CHANGELOG block newest-first as ### 2 (was a duplicate ### 1). Note: #56 also bumps INTENT-4; whichever lands second renumbers to v3. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…isten field Consolidates the PIPELINE-1 companion edits previously bundled into the union-slots (#56), FALLBACK-1 (#39), COMMON-QUERY-1 (#40) and AUDIO-1 (#38) feature PRs into a single one-file change to ovos-pipeline-1.md. - §6.1/§6.2 — orchestrator backstop for required_slots (INTENT-3 §5.3): the orchestrator treats a Match as declined if any required slot is absent. Second line of defense behind engine-side enforcement. - §7.3 — reserve intent_names "fallback" (FALLBACK-1 §6.3) and "common_query" (COMMON-QUERY-1 §3). COMMON-QUERY-1 asserted the reservation but never registered the row; this closes that gap. - §9.6 — add the OPTIONAL listen field to ovos.utterance.speak; the output-side behaviour is owned by AUDIO-1. All additions are backwards-compatible. PIPELINE-1 is already V2 (its namespaced topics replace the pre-spec names); these refinements do not change the class, so the Version stays 2. Adds the missing PIPELINE-1 CHANGELOG section. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
42ad93f to
fa8c97a
Compare
fa8c97a to
4430976
Compare
This PR relaxes the strict slot-consistency rule for
.intentfiles and introduces an optionalrequired_slotsmechanism for template intents.Changes
OVOS-INTENT-1
.dialogonly..intentfiles now allow templates with different slot sets (union semantics). The engine extracts only the slots declared by the template that best matches..dialog; accept differing slot sets for.intent.OVOS-INTENT-3
required_slots: an optional list of slot names the engine MUST extract for a match to be valid. When present, handlers MAY rely on those slots being populated. A required slot must be declared by at least one template; otherwise the definition is malformed.required_slots; all other slots remain optional and must be defensively handled.OVOS-INTENT-4
required_slotsas an optional array-of-strings field to theovos.intent.register.templatepayload.required_slotsmalformed rule: a required slot not declared by any template is malformed.OVOS-PIPELINE-1
required_slots. After the denylist check, the orchestrator verifies the match's slot map contains every required slot; if absent, it treats the match as declined. Primary enforcement remains engine-side duringmatch(); the orchestrator is a second line of defense.appendix/patterns.md
required_slots, including practical examples (one intent with multiple phrasing shapes, guaranteeing a slot, optional phrasings, and the.dialogstrictness distinction).Design rationale
required_slots?required_slotscontains technical slot identifiers, not localized natural-language data. It is intent metadata, not a translatable resource, so it belongs in the bus registration payload (consistent with handler binding, enable/disable state, and other non-locale metadata).requiredvocabularies (§4.2) that serve an analogous role.required_slotsis the template-intent counterpart, mirroring how.blacklistis template-only.blacklisted_skills/blacklisted_intents;required_slotsbackstop is the same shape. This gives handlers the strongest guarantee regardless of engine bugs.Cross-references updated
Companion design record: #57