← Orbit journal

Your text has places to be

A reply looks like one little bubble. Gateway is the machinery that keeps the conversation ordered, gets it to the right brain, and brings the answer all the way home.

The bubble is the last inch

Orbit lives in Messages, which makes the product feel almost suspiciously simple. You text a sentence. A typing indicator appears. A useful answer comes back. The whole interaction fits in a blue-and-gray rectangle you have used for years.

Behind that rectangle is Gateway: Orbit’s messaging edge. It speaks to the transport, normalizes provider events, preserves the order of each conversation, resolves who is speaking, hands the turn to Pluto, and delivers both immediate replies and proactive work. Gateway contains no model and owns no memory. Its job is to make the magic survive contact with a phone network.

Why Gateway?

No mythology this time. The name is literal: every message enters Orbit through Gateway, and every reply leaves through it. It is the narrow crossing between provider-specific messaging infrastructure and the internal systems that understand a person, hold context, keep time, and take action.

Gateway does not decide who is allowed through. That is Janus’s job. Gateway makes the crossing reliable. Outside protocols become one internal contract on the way in; Orbit’s results become native messages on the way back out.

Every provider has its own dialect

A provider event arrives with its own idea of a sender, thread, attachment, event ID, timestamp, and delivery state. Gateway translates that once into Orbit’s internal turn contract. Everything downstream gets one consistent shape instead of learning the quirks of every messaging provider I add.

That boundary is why moving beta users from a shared line to dedicated infrastructure did not require rebuilding memory, reminders, or approvals. The transport changed. The person and their Orbit did not.

provider event
  → normalize sender, thread, text, attachments
  → resolve identity
  → process one ordered turn
  → format for Messages
  → deliver with an idempotency key

One conversation, one lane

People do not politely wait for a reply before sending the next thought. They send a document, then a correction, then “also, one more thing.” If those turns run out of order, the fastest request can overtake the one that gave it meaning.

Gateway groups work by sender and thread. A single conversation stays strictly ordered while different conversations run through a bounded pool in parallel. The current default is eight reactive lanes: enough for independent people to overlap without letting one excited texter scramble their own context or letting unbounded work flatten the machine.

Thread A:  message 1 → message 2 → message 3
Thread B:  message 1 → message 2
Thread C:  message 1

Across conversations: concurrent
Inside one conversation: ordered

Identity before intelligence

Before Pluto sees a word, Gateway asks Janus to resolve the transport-authenticated sender. Unknown, suspended, deleted, and opted-out identities stop there. A group chat stops there too. The inference system never gets an opportunity to reason itself around admission policy.

For an admitted person, Gateway records the latest verified delivery route in Argus and loads the subject’s messaging preferences. That route is what lets work started now return hours later to the correct person and thread.

Typing is theater. Delivery is the product.

Read receipts, typing indicators, and reactions make Orbit feel alive, but they are best-effort presence signals. If one fails, the actual turn keeps moving. A typing indicator is never evidence that a response was delivered. I learned that distinction very publicly when a provider limit made Orbit look busy while replies could not leave the system.

The real success condition is transport acceptance. Provider event IDs and delivery idempotency keys survive retries so a reconnect does not turn one answer into three. For proactive work, Gateway acknowledges the Argus outbox item only after the transport accepts it.

The return trip has its own lanes

Reminders, watches, and long-running work do not wait inside Gateway. Argus holds them durably. When something is ready, Gateway polls the outbox, groups deliveries by person and thread, checks the person’s current Janus status, and sends through a separate bounded pool.

Separating reactive turns from proactive delivery means a large inbound request cannot make every due reminder stand behind it. Ordering still holds where it matters, and unrelated people can receive finished work concurrently.

  • Reactive messages stay ordered within their conversation.
  • Proactive deliveries stay ordered within their person and thread.
  • A suspended or opted-out account is checked again immediately before sending.
  • A delivery is acknowledged only after the messaging transport accepts it.

Attachments arrive with baggage

An attachment is not just a file. It arrives with provider metadata, a content type, a size, and often an expiring URL. Gateway preserves that provenance and applies bounds before anything reaches inference.

The contents remain untrusted evidence. A two-page document can give Orbit context; it cannot smuggle in system instructions or become a fact about its owner merely because it was attached to a message.

Why Gateway matters

Gateway is deliberately unglamorous. It has no opinions about your calendar and no clever ideas about dinner. It makes sure the right person’s words reach the right systems in the right order, then makes sure the result completes the trip back to them.