Say when a command is never acknowledged

15 commands go on the unacknowledged buffer, so acked=false is their normal
outcome rather than a failure. Reporting it bare made a working camera move
look broken; the note now says to confirm with get_state instead.
This commit is contained in:
Ryan Malloy
2026-10-02 02:08:56 -06:00
parent dd2e6c4886
commit bdfb2a9cc5
+10 -2
View File
@@ -10,7 +10,7 @@ from mcbebop.config import Settings
from mcbebop.models import SendResult
from mcbebop.protocol import xml_index
from mcbebop.protocol.safety import ALWAYS_ALLOWED
from mcbebop.protocol.types import Direction, Tier
from mcbebop.protocol.types import Buffer, Direction, Tier
from mcbebop.tools._common import app, require_session
LOCKED_TIERS = (Tier.MOTION, Tier.ENVELOPE)
@@ -70,7 +70,15 @@ def register(mcp: FastMCP, settings: Settings) -> None:
session = require_session()
note = ""
if xml_index.supports_bebop2(spec.support) is False:
if spec.buffer is Buffer.NON_ACK:
# Fire-and-forget by design: piloting and camera commands go on the
# unacknowledged buffer, so acked=false here means "never acked",
# not "failed". Say so, or a working command reads as a failure.
note = (
"Sent on the unacknowledged buffer, so the drone never replies to it; "
"acked=false is expected. Confirm it took effect with get_state()."
)
elif xml_index.supports_bebop2(spec.support) is False:
note = f"The XML does not list the Bebop 2 as supporting this (support={spec.support!r})."
elif spec.deprecated:
note = "Parrot marks this command deprecated; the drone may ignore it."