spec: PERSONA-1 — consistency audit (claim rule, mandatory speak, converse, OOB, positioning) - #142
spec: PERSONA-1 — consistency audit (claim rule, mandatory speak, converse, OOB, positioning)#142JarbasAl wants to merge 1 commit into
Conversation
|
Warning Review limit reached
Next review available in: 21 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 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 configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
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 |
…verse, OOB, positioning)
Audit pass over persona.md. Twenty findings; nineteen addressed here,
one deferred.
Contradictions resolved:
- Section 12 vs 7.1 route 3: the conformance MUST to return None when
persona_id is absent contradicted route 3, which claims in exactly
that case. The obligation is now scoped to invocation under the
plugin's main pipeline_id, with a parallel MUST for invocation under
a fallback_pipeline_id. Sections 3 and 4 restate the same split.
- Section 7.2 vs route 1: "MUST NOT use intent-matching to decide
whether to claim" contradicted route 1, where the embedded persona
commands are ordinary intents by design. The prohibition is now
scoped to route 2.
- Four claim-rule formulations: section 7.2 is now the single
normative statement; sections 3, 4, 7.1 and 12 cite it.
Silent-turn and failure contracts:
- Section 8.1 — a claimed dispatch MUST speak. A persona claim is
exclusive and sits before fallback, so a handler that emitted
nothing produced a silent turn with no error anywhere. Every
dispatch from a claiming match now MUST emit at least one
ovos.utterance.speak, including a degraded or error utterance on
backend failure, refusal, or generation timeout. The timeout value
is deployment-defined. Stop is exempt.
- The handler-lifecycle trio stays orchestrator-owned (PIPELINE-1
section 8): a handler that swallows a failure and returns normally
produces .complete, so a failing handler SHOULD speak and then
propagate, letting the orchestrator emit
ovos.intent.handler.error.
- Section 8.5 — the out-of-band interface answers on every failure
mode, not only on an unsupported persona_id. Adds a
deployment-defined request/generation budget and a correlation
rule: the topic is a broadcast, so a caller MUST tolerate N replies
(typically one success and N-1 errors), correlating by persona_id
and utterance.
Corrected cross-references:
- Section 8.3 cited "CONVERSE-1's active-handler check" — the wrong
list. Rewritten against session.converse_handlers (CONVERSE-1
section 2.1), stamped at dispatch (CONVERSE-1 section 3.1), with
the persona's pipeline_id entering it as an ordinary eligible owner
via PIPELINE-1 section 7.0 self-matching. No persona-specific rule
is involved.
- Section 6 stop clear: stop-1.md on dev contains no persona_id;
STOP-1 section 6.2 drains active_handlers, converse_handlers and
response_mode only. The clear is restated as deployment guidance
("a deployment SHOULD configure its stop plugin to clear
persona_id on global stop") and names STOP-1 section 6.2 as the
normative home. No cross-PR dependency.
Unenforceable obligations demoted:
- Section 5 unknown-persona summon MUST — no registry and no
orchestrator role exists to enforce it. Replaced by a note
describing the actual behaviour: route-2 fall-through, a session
that behaves like no-persona mode.
- Section 9 collision WARN — nothing holds a deployment-wide view.
Restated as provisioning-time tooling guidance over
ovos.persona.list.
Underspecified surfaces defined:
- Section 9 register/deregister: payload {persona_id}; duplicate
register is a no-op; a deregistered identity keeps serving live
sessions until dismissed but accepts no new summons. No response
topic is added (scope guard) — rejection is observable only via
ovos.persona.list.
- Section 8.5: whether an out-of-band exchange enters section 8.4
history is plugin-defined and MUST be documented by the plugin.
- Section 11: activation/dismissal events scoped to plugin-observed
transitions (self-summon, self-release); external summon/dismiss
emit nothing. Advisory, best-effort, absence proves nothing.
Pipeline positioning (section 10):
- Common query added to the ordering (persona stages SHOULD follow
it, per COMMON-QUERY-1 section 12), and the MAY-place-earlier
licence narrowed to domain-specialised personas that are not
general question-answering.
- Persona stages are OPTIONAL. A deployment with no persona stage at
all is fully conformant. The section 10 example ordering keeps
fallback_low as the final stage, after persona and
persona_fallback: ... common_query, persona, persona_fallback,
fallback_low. A persona-fallback stage may shadow fallback_low in
normal operation, but the always-answer guarantee is carried by
OVOS-FALLBACK-1 section 8.1's catch-all skill in fallback_low, not
by route 3 — fallback_low SHOULD remain the final stage so the
deployment still answers when no persona stage is loaded, the
persona backend fails, or the persona-fallback stage declines.
This corrects an earlier audit pass on this branch that dropped
fallback_low from the example and framed route 3 as replacing the
catch-all; that inverted the design per owner directive.
Editorial:
- Builds-on list said "four" and listed four; it depends on eight
(adds SESSION-2, STOP-1, INTENT-2, TRANSFORM-1).
- Section 12 had two identical SHOULD headings; merged.
- CHANGELOG restructured into entry 1 (initial draft, rewritten — the
old text described a spec that does not exist: an
ovos.persona.capabilities topic, a MAY-return-None match, and
conformance roles that were removed) and entry 2 (the actual
changes, including this fallback_low correction).
- Section 11 keeps the answer / list.response naming asymmetry, now
with a one-line note saying so deliberately.
Deferred:
- GLOSSARY entries (persona, summon, dismiss, no-persona mode,
persona-fallback, persona_id) belong to the GLOSSARY PR, not this
file.
- fallback.md section 8.2's example already ends with fallback_low
and is consistent with the ordering restored here; no changes
needed there.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
352684b to
d8bd1d9
Compare
Audit pass over
persona.md. Twenty findings; nineteen addressed here, one deferred.Contradictions resolved
Nonewhenpersona_idis absent contradicted route 3, which claims in exactly that case. The obligation is now scoped to invocation under the plugin's mainpipeline_id, with a parallel MUST stated for invocation under afallback_pipeline_id. §3 and §4 restate the same split.Silent-turn and failure contracts
ovos.utterance.speak, including a degraded or error utterance on backend failure, refusal, or generation timeout. The timeout value is deployment-defined. Stop is exempt..complete, so a failing handler SHOULD speak and then propagate, letting the orchestrator emitovos.intent.handler.error.persona_id. Adds a deployment-defined request/generation budget and a correlation rule: the topic is a broadcast, so a caller MUST tolerate N replies (typically one success and N−1 errors), correlating bypersona_idandutterance.Corrected cross-references
session.converse_handlers(CONVERSE-1 §2.1), stamped at dispatch (CONVERSE-1 §3.1), with the persona'spipeline_identering it as an ordinary eligible owner via PIPELINE-1 §7.0 self-matching. No persona-specific rule is involved.stop-1.mdondevcontains nopersona_id; STOP-1 §6.2 drainsactive_handlers,converse_handlersandresponse_modeonly. The clear is restated as deployment guidance ("a deployment SHOULD configure its stop plugin to clearpersona_idon global stop") and names STOP-1 §6.2 as the normative home. No cross-PR dependency.Unenforceable obligations demoted
ovos.persona.list.Underspecified surfaces defined
{persona_id}; duplicate register is a no-op; a deregistered identity keeps serving live sessions until dismissed but accepts no new summons. No response topic is added (scope guard) — rejection is observable only viaovos.persona.list.Pipeline positioning
Editorial
SHOULDheadings; merged.### 1(initial draft, rewritten — the old text described a spec that does not exist: anovos.persona.capabilitiestopic, a MAY-return-Nonematch, and conformance roles that were removed) and### 2(the actual changes).answer/list.responsenaming asymmetry, now with a one-line note saying so deliberately.Owner sign-off
fallback_lowrestored as the final stage in the §10 example. Owner directive: persona stages are OPTIONAL;fallback_lowis what ensures we always have an answer, and it stays belowpersona_low/persona_fallbackin the pipeline. An earlier version of this PR droppedfallback_lowfrom the §10 example and framed persona-fallback (route 3) as replacing the last-resort catch-all — that inverted the design. The example now reads... common_query, persona, persona_fallback, fallback_low. Persona stages, includingpersona_fallback, are optional; a deployment without them is fully conformant. Whenpersona_fallbackis present it may shadowfallback_lowin normal operation, but the always-answer guarantee is carried by OVOS-FALLBACK-1 §8.1's catch-all skill infallback_low, not by route 3, andfallback_lowSHOULD remain the final stage so the deployment still answers when no persona stage is loaded, the persona backend fails, orpersona_fallbackdeclines. §4 and §12 checked for the same claim and corrected identically.ovos.utterance.speak. It is the only way to close the silent-turn hole given exclusive consumption, but it does constrain implementations.Deferred
persona_id) belong to the GLOSSARY PR, not this file.fallback.mdordering: resolved on the fallback PR (spec: OVOS-FALLBACK-1 — poll semantics, pong correlation, registry liveness #134) — §8.1 there now scopes the after-persona rule to the low-confidence catch-all tier, and its §8.2 example interleavesfallback_high/fallback_mediumbefore persona withfallback_lowlast, consistent with this spec's §10.