Specification v0.6.0: terminal flag; FMSG-005 Reactions standard - #32
Merged
Conversation
Specification v0.6.0: - Flag bit 6 "terminal": a terminal message is a leaf of its thread. A reply to, or add-to batch of, a terminal message is rejected with code 1 by the Receiving Host, and a Sending Host must not transmit one. Add-to messages carrying the bit are rejected on header validation alone since they duplicate the original's flags. - Reserved flag bits (message bit 7, attachment bits 2-7) set on the wire are now rejected with code 1, so a host that predates a new bit fails consistently rather than accepting a message it does not understand. FMSG-005 Reactions: a single-emoji reaction is an ordinary message with has pid, no reply and terminal set, type application/vnd.fmsg.reaction, data one RGI_Emoji or empty to clear, sent to every participant of the subject. Latest by time wins per reactor per subject. Hosts need not understand reactions to carry them; the terminal flag is what stops anything being built on top of one. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MW4FXDGacoWXeKPU5cQTHS
Drop the dedicated application/vnd.fmsg.reaction Media Type. A Media Type describes representation, and a reaction's data is UTF-8 text; the intent is already carried by the flags. A reaction is now any message with has pid, no reply, terminal and common type set, type ID 56 (text/plain;charset=UTF-8), no attachments, and data that is a single RGI_Emoji or empty. A single-emoji terminal reply was meant as a reaction anyway, unaware clients render it as the short text it is, and the "malformed reaction" category disappears: a message either has the shape of a reaction or is simply a reply. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MW4FXDGacoWXeKPU5cQTHS
- Message objects gain `terminal`, `reaction` and `reactions`. - POST /fmsg and PUT accept `terminal`; a pid referencing a terminal message is 409, as is add-to on one. - New POST /fmsg/:id/react sets or clears the caller's reaction by sending an FMSG-005 reaction message; idempotent when unchanged. - New `reaction` WebSocket event carrying the refreshed subject; a reaction is never delivered as new_msg and produces no Web Push. - Conformance tests extended. FMSG-005: recognition MAY ignore the recipients requirement; point at FMSG-003 v0.2.0 for the client API. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MW4FXDGacoWXeKPU5cQTHS
markmnl
commented
Sep 2, 2026
| | v0.4.0 | 2026-08-02 | Mark Mennell | Add-to messages delivered to all participant domains; notification-only delivery completes at code 11 | | ||
| | v0.4.1 | 2026-08-03 | Mark Mennell | Hosts must retain stored messages in full, including complete recipient lists | | ||
| | v0.5.0 | 2026-08-10 | Mark Mennell | Clarified: stored messages include those the host sent; exactly one header-response code is sent; _add to_ may overlap _to_, with one response code per recipient entry; add-to copies omit _topic_; add-to batches are sibling branches whose added recipients reply to the batch message; batch identity is the batch message hash. Changed: an unsupported version TERMINATES rather than responding, retiring code 2 (numbering unchanged) | | ||
| | v0.6.0 | 2026-09-02 | Mark Mennell | Added: _terminal_ flag (bit 6) — no message may reference a terminal message via _pid_; hosts reject a reply to, or add-to batch of, a terminal message with code 1. Changed: reserved flag bits set on the wire (message bit 7, attachment bits 2–7) are rejected with code 1 so future bits degrade consistently | |
Owner
Author
There was a problem hiding this comment.
too verbose for revision notes description, keep it concise - logic lives in the spec
Owner
Author
There was a problem hiding this comment.
Shortened to: "Added terminal flag (bit 6); reserved flag bits set on the wire are rejected".
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MW4FXDGacoWXeKPU5cQTHS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Specification v0.6.0
SPECIFICATION.mdand the conciseSPEC.mdupdated.FMSG-005 Reactions (new standard, the driver for the flag)
text/plain;charset=UTF-8), no attachments, data a singleRGI_Emoji(UTS #51) or empty to clear, sent to every participant of the subject.Design notes
Follow-ups
terminal,reaction/reactionsfields,POST /fmsg/:id/react,reactionWebSocket event. Implemented in Implement FMSG-005 reactions and the terminal flag fmsg-webapi#43.🤖 Generated with Claude Code
https://claude.ai/code/session_01MW4FXDGacoWXeKPU5cQTHS