@@ -3,7 +3,9 @@ title: Approval Prompt Markdown Contract
33authors :
44 - omarshahine
55created : 2026-05-30
6- last_updated : 2026-05-30
6+ last_updated : 2026-06-11
7+ status : accepted
8+ issue :
79rfc_pr : https://github.com/openclaw/rfcs/pull/4
810---
911
@@ -105,6 +107,11 @@ Underline is excluded from the core subset because most channels cannot express
105107it. iMessage may still map a channel-local marker if it wants, but core does
106108not emit one.
107109
110+ Fenced code block language hints are part of the contract but advisory. Core
111+ emits a small fixed set (` sh ` for a pending command, none or ` txt ` for a plain
112+ block). A channel may honor a hint for native syntax highlighting and must drop
113+ an unsupported hint safely, without altering the fenced content.
114+
108115### Plugin SDK ownership
109116
110117The plugin SDK owns:
@@ -117,7 +124,11 @@ The plugin SDK owns:
117124
118125### Channel capability
119126
120- Channels gain an explicit capability on their approval handler:
127+ Channels gain an explicit capability on their approval handler. It is a field,
128+ ` approvalText ` , on the existing channel approval capability object, declared
129+ through the public plugin SDK. It is not a separate standalone capability or a
130+ parallel registration path, which keeps the approval capability surface
131+ cohesive. The field defaults to ` "plaintext" ` .
121132
122133- ` approvalText: "markdown" ` means the channel translates the canonical subset
123134 into its native styling. The channel owns the translation and any escaping.
@@ -192,11 +203,19 @@ emits incidentally rather than introducing a brand new format.
192203
193204## Unresolved questions
194205
195- - Should the canonical subset include underline given only iMessage can express
196- it, or stay at the strict cross-channel intersection and let iMessage add a
197- local marker out of band.
198- - Whether the capability lives on the existing channel approval capability
199- object or as a small standalone field, and how a plugin author declares it
200- through the public SDK.
201- - Whether the exec fence language hints (` sh ` , ` txt ` ) should be normalized as
202- part of the contract or left to each channel to honor or drop.
206+ The questions raised during initial review are resolved as follows, and the
207+ decisions are reflected in the Proposal above. No open questions remain.
208+
209+ - ** Underline in the canonical subset.** Resolved: no. The canonical subset
210+ stays at the strict cross-channel intersection, and core never emits
211+ underline. iMessage may map a channel-local marker out of band, but it is not
212+ part of the contract.
213+ - ** Where the capability lives and how it is declared.** Resolved: it is a
214+ field, ` approvalText ` , on the existing channel approval capability object,
215+ declared through the public plugin SDK and defaulting to ` "plaintext" ` . There
216+ is no separate standalone capability or parallel registration path.
217+ - ** Exec fence language hints.** Resolved: the contract defines a small fixed
218+ set of hints (` sh ` for a pending command, none or ` txt ` for a plain block)
219+ and treats them as advisory. A channel may honor a hint for native syntax
220+ highlighting and must drop an unsupported hint safely, without altering the
221+ fenced content.
0 commit comments