Board work, in chat

The board asks. Answer in chat.

SuperExchange is a Matrix application service. It carries SuperPipeline’s gates, questions and waiting cards into the board’s encrypted room, and when a person answers there, the board acts on it as that person.

Early: v0.0.2 · MIT · runs in production, no production board moved to it yet

#superexchange_board_brd_launchencrypted
superpipeline board

Approval needed — “Launch post” at stage review. Approve, request changes, or reject.

Approve “Launch post”?

gate · stage review

ApproveRequest changesReject
Ana answered with the card

Approve

superpipeline

Approved by Ana — the board has it.

Example room. The wording is treaty’s; the card and names are made up.

How an answer reaches the board

One path per board, one message per event, one receipt per answer. The steps below are a gate; questions, follow-ups and waiting cards go the same way.

  1. 1

    The board raises a gate

    SuperPipeline publishes gate.pending to the suite’s event relay, which delivers it to SuperExchange signed. It is kept only for boards an operator has opted in.

  2. 2

    It is posted once, encrypted

    SuperExchange makes the board’s room once, invites the board’s people, waits until one has joined, then posts the gate exactly once. Rooms are end-to-end encrypted with SuperExchange’s own keys.

  3. 3

    A person answers in the room

    Accounts says who the Matrix sender is. Only a person may answer, and only with an option the gate offered. An agent’s answer, or one from another room, is ignored.

  4. 4

    The board acts as that person

    The gate is resolved at SuperPipeline as the person who answered, and one receipt is posted. A repeat is told it was already decided. A gate decided on the web is settled in the room by the next sweep.

What it carries

Everything a board waits on a person for, posted in the board’s room and answered there. The event formats are treaty’s: SuperExchange carries them, it does not define them.

Gates

An approval or a choice a stage is waiting on. Approve, request changes or reject from the room; a choice of versions names the one you pick.

Board questions

An agent blocked on a person, or a SuperToolkit approval request. Answer with the card, or type the number or label of an option. A typed reply can decline an approval, never grant it.

Delivery follow-ups

A post approved for manual delivery still owes the board its live link. Record the link, or switch to automatic delivery when the whole post could be shown.

Waiting cards

A card parked for a person after repeated failures, a block or a missing permission. Resume it here or at an earlier stage, with an instruction for the next attempt, or archive it.

Notices

Reminders, escalations to the workspace’s admins, quorum progress, held approvals and failed or overridden checks, each said once, in reply to its card.

Pull-backs and overrides

Pull a gate back, or override a failed check, from the room. Each needs a comment, and acts as the person who sent it.

What it needs

  • SuperPipeline, whose boards it speaks for, read and acted on through its API.
  • The event relay (treaty’s), which delivers the board’s events signed.
  • A Matrix homeserver, where it registers as an application service with its own namespace.
  • Accounts, the organization plane, which says who a Matrix sender is and vouches for them to the board.

What needs it

  • Nothing. SuperPipeline remains a board without it, and its gates are still decided on the web and in supi.
  • SuperMessage remains a plain Matrix client. Any Matrix client can read and answer the room.
  • A board leaves by being taken out of SuperExchange; agents keep working either way.

Run it

From source, with Bun. Every setting is in the docs; a missing or malformed one stops it before it listens, naming the setting, never its value.

$ bun install
$ MATRIX_HOMESERVER_URL=… MATRIX_SERVER_NAME=… MATRIX_AS_TOKEN=… MATRIX_HS_TOKEN=… \
TREATY_RELAY_DELIVERY_SECRET=… SUPEREXCHANGE_OPERATOR_TOKEN_SHA256=… \
ORG_PLANE_URL=… ORG_PLANE_SERVICE_CREDENTIAL=… SUPERPIPELINE_URL=… \
SUPEREXCHANGE_CRYPTO_PASSPHRASE="$(openssl rand -base64 32)" SUPEREXCHANGE_DATA_DIR=$PWD/.data \
  bun apps/exchange/src/main.ts
$ curl http://127.0.0.1:8080/healthz

An operator then opts a board in through PUT /v1/boards/:boardId. Back up the crypto store with the database: lose it and the room keys go with it.The full setup is in the docs.

Where it is today

Early, and honest about it. This is v0.0.2.

  • It runs in production, but no production board has moved to it yet. A board moves one at a time, and until it does, its chat stays where it was.
  • It needs SuperPipeline v0.0.30 or later. That release relays the board-room notices (reminders, escalations, quorum progress, held approvals, checks) and lets SuperExchange read owed deliveries, waiting cards and a card’s checks with its own token. Against an older SuperPipeline no notice reaches the room and those sweeps back off; gates, questions and answers still work.
  • An answer from a Matrix account that is linked to nobody does not count. The person is told how to link it, at most once a day per room.
  • No published image, package or hosted service: you run it from source.

Source on GitHub, mirrored from the forge (where pull requests are made; it needs a forge account). What changed in each release is in thechangelog.