Repository navigation
sminos: a peer's message reaches a session as a peer's (7.177.0) - #236
Merged
Merged
Conversation
Only the owner's log events (a human event by <machine>/human or hub/<member>) go through the bridge as the human's words. A peer's event takes the session's inbox socket, wrapped in the engine's own peer envelope with from-name, so the engine, the terminal and MAWS read it as another session's message. The bridge mod refuses a session writer's event as a second guard. A push whose DX4 outcome cannot be kept is noted in the delivery record so the next pass does not push it again. Live check: tests/mods/live-peer-check.py.
…he engine's serializer A peer's inbox frame ends with a fixed line naming the reply command (the CLI's path, say "@<short> <your reply>"), so a session with no sminos context has a route that reaches the sender through the log. The body's closing-tag escape and the from-name normalization now follow the engine's own (KXe and its name normalizer), so the envelope round-trips its parser for lookalike tags and format characters too (reviewer-high P2); envelope_parity.py pins the cases.
Conflicts resolved with both rules kept: #231's project in the delivery key (deliver(session, project, event, text), the mark <project>/<writer>) and this branch's owner gate (owner_event before the bridge and the supervisor; the mod's SESSION_WRITER refusal before the mark check).
The reply tag is @<project id>/<short>, so a member answering from another project still reaches the sender (reviewer-high P2); the bridge-control suite runs the line as written from a second project.
A session's say or send into another project's log records its own project as from_project, and the peer frame's reply tag uses it, so a reply to a cross-project message reaches the sender (reviewer-high P2, second round). The bridge-control suite sends across projects and runs the reply line as written from the recipient's project.
#233's mid-turn delivery and Esc fallthrough kept; this branch's owner gate stays ahead of them (owner_event before the bridge; the mod's SESSION_WRITER refusal before the mark), so only the owner's events take the bridge's row, prompt or wake. The child's inbox frames now carry the peer envelope's sender: a wake (DELIVERY_WAKE, STEER_WAKE) is "sminos bridge", a keyed delivery its log event's via or from.
…_sender lookup - push_live uses event from_project only when it is id-shaped (valid_name), else the log's project; reply_line drops a project part that is not id-shaped, so a hostile synced from_project never reaches the Bash argument. envelope_parity asserts it. - inbox_sender reads the writer file with errors=replace and falls back to 'human' on any lookup exception, so a torn UTF-8 append no longer loses the owner's delivery.
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.
What
A peer's sminos message now reaches a session as a peer's, never in the owner's voice. This is the owner's decision of 2026-10-18 ("a peer's message arrives as a peer's", desk composite Decision Log, MAWS e72b11443).
Which events count as the owner's.
sminos.owner_eventdecides it: the event's kind ishumanand its writer is<machine>/humanorhub/<member>. Only these take the bridge:--bgjob with no bridge: the supervisor'sreply.A peer's event (a session's
say/send, or any other shape) goes to the session's inbox socket, the channel native SendMessage rides. The engine records it as originpeer.The frame. Every inbox frame sminos writes is wrapped in the engine's own peer envelope,
<cross-session-message from-name="…">:parsePeerMessagerefuses the row and draws the owner's bubble again.from-namereachesorigin.name.tests/sminos/envelope_parity.pypins the cases, which were checked against the 2.1.300 parser.The reply line. A peer frame's body ends with one fixed line:
fromaddress, so a model with no sminos context would otherwise try SendMessage and fail.say/sendinto another project's log records the sender's own project asfrom_project.Senders. Wakes from the bridge child (
DELIVERY_WAKE,STEER_WAKE) are namedsminos bridge. A keyed inbox frame names its log event'svia/from.Second guard in the mod. The bridge mod refuses a
deliverwhose writer is a session's, so an older CLI falls back to the inbox.Duplicates. The inbox has no per-key dedupe, so a push whose DX4 outcome could not be kept is noted in the delivery record. The next pass then records the outcome without pushing again.
Guarantees (DX5 "[peer]" in
docs/doperpowers/plans/2026-10-15-arkho-desk-c2-bridge.md):deliveredmeans the frame was written to the inbox. The engine may still hold it for approval in a session running withbypassPermissions, or drop it at its peer rate limit.Verification
tests/mods/live-peer-check.py, 6/6 on the merged head, a real 2.1.302 bridged session with no sminos skill loaded):peernamedscout(aqueued_commandattachment mid-turn);{kind: plugin, asUser: true}.test-bridge-control.sh127, mods suite 402 pass.doperpowers:reviewer-highon the branch: three P2s, all fixed.doperpowers:reviewer-mediumon the sminos bridge: a busy session reads a delivery at its next tool round; a delivery wakes a stopped session #233 merge resolution: a P1 (shell-unsafefrom_projectin the reply line) and a P2 (strict decoding in the sender lookup), both fixed in f196e33.For MAWS
MAWS's drawing should drop the body's last line when it is the
[To reply, run in Bash: …]line.