Skip to content

sminos: a peer's message reaches a session as a peer's (7.177.0) - #236

Merged
SSFSKIM merged 8 commits into
mainfrom
smns-peer-inbox
Oct 18, 2026
Merged

SSFSKIM merged 8 commits into
mainfrom
smns-peer-inbox

Conversation

@SSFSKIM

@SSFSKIM SSFSKIM commented Oct 18, 2026

Copy link
Copy Markdown
Owner

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_event decides it: the event's kind is human and its writer is <machine>/human or hub/<member>. Only these take the bridge:

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 origin peer.

The frame. Every inbox frame sminos writes is wrapped in the engine's own peer envelope, <cross-session-message from-name="…">:

  • Without the envelope, MAWS's parsePeerMessage refuses the row and draws the owner's bubble again.
  • The body escape and the name cleanup copy the engine's serializer, so from-name reaches origin.name.
  • tests/sminos/envelope_parity.py pins the cases, which were checked against the 2.1.300 parser.

The reply line. A peer frame's body ends with one fixed line:

[To reply, run in Bash: <sminos path> say "@<project id>/<sender short> <your reply>"]
  • The envelope has no from address, so a model with no sminos context would otherwise try SendMessage and fail.
  • A say/send into another project's log records the sender's own project as from_project.
  • A project part that is not id-shaped is left out of the line.

Senders. Wakes from the bridge child (DELIVERY_WAKE, STEER_WAKE) are named sminos bridge. A keyed inbox frame names its log event's via/from.

Second guard in the mod. The bridge mod refuses a deliver whose 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):

  • No duplicate in the ordinary retry cases. A crash between the write and the settlement is still at least once.
  • delivered means the frame was written to the inbox. The engine may still hold it for approval in a session running with bypassPermissions, or drop it at its peer rate limit.

Verification

For MAWS

MAWS's drawing should drop the body's last line when it is the [To reply, run in Bash: …] line.

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.
@SSFSKIM
SSFSKIM merged commit f3c179e into main Oct 18, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant