Using Mast
Which level to reach for, and what the phone does with it.
Every message Mast delivers carries one of four levels. A level is not a rating of how bad the thing is; it is a decision about what the phone does and who gets interrupted. A disk at 92% and a database that is down are both serious, and only one of them needs somebody awake.
A channel sets the level it sends at by default. A sender can name a different one per message, up to a ceiling its owner set on their own phone.
picking a level
Three questions, in order. The first no is the answer.
- Does a person have to do something? If not, it is quiet or normal, and the difference between those two is only whether you want to be told today.
- Does it have to be today? If it can wait for the morning, it is normal, and the channel's quiet hours will hold it there.
- Would you rather be woken than find it at breakfast? Yes is a page. No is loud.
The cost of over-paging is not the noise. It is that the next real page arrives at a phone you have already taught yourself to ignore. A channel that pages for things nobody acts on stops being a pager inside a week.
what to put on each one
quiet
Things you want on the record and never want to be told about. A deploy that landed. A nightly backup that finished, with the byte count in the body. A certificate that renewed thirty days early. You read these when you go looking, or when something else has sent you looking, and the feed holds thirty days of them.
normal
Something a person should see today, on their own schedule. A payment that failed and will retry. A webhook that gave up after five attempts. A new signup flagged for review. Most channels never need to be louder than this, and one that starts here still has room to mark a single message urgent when the sender knows something the channel does not.
loud
Something that becomes a page if it is left alone. Storage down to two replicas of three and still serving. A queue that has been growing for an hour. Disk at 92%. Loud comes through a Focus mode, so it finds you in the middle of something else, and then it stops. It is the level for a problem with hours of headroom.
page
Somebody has to act, and the acting cannot wait for them to next pick up the phone. The database is unreachable from both edges. Certificate issuance is failing on the machine serving traffic. The nightly backup has not checked in for twenty-five hours. A page repeats until it is acknowledged, and an unacknowledged one moves on to a second phone if the channel names one. The whole level assumes a person will be found; use it where that is true.
making a page wake you
A page is delivered time-sensitive. That is enough to break through a Focus, Sleep included, and it is not enough to beat the ringer switch. Three settings on the phone decide whether one actually wakes anybody, and all three belong to whoever is holding it.
None of this is assumed. The line under the page tier in the app reads time sensitive · breaks through Focus once the first two are set, and turns amber with a button to fix it when a page could go unheard. Send yourself one before you rely on it.
the ceiling
A channel carries two settings for loudness rather than one: the level it sends at by default, and the highest level it can ever reach. The second is what makes a send address safe to paste into a CI config.
A sender can ask for any level it likes. Asking for more than the ceiling gets the ceiling.
$ curl -d "quorum lost" -d priority=page \
https://mast.tissue.dev/mk_9f2a41c8b7
# delivered as loud, on a channel whose ceiling is loud
A channel made in the app can be given any ceiling, page included, because the person choosing it is holding the phone that will ring. A channel made with an API token starts at loud and that token cannot raise it. Moving a channel up to the pager tier is a tap in the app, on the device that will be woken: deciding to be woken up is not a thing a credential should be able to do on your behalf.
quiet hours, and muting for an hour
Quiet hours are a window on the channel, 22:00 to 07:00 to begin with. Inside it, that channel's messages arrive without a sound. Mute is the same idea in a hurry: one hour of silence, from a swipe on either list or from the notification you are already looking at.
A page ignores both, and that is fixed rather than configurable. A channel that can wake you is a channel you asked to be woken by, and a pager with a snooze that covers pages is a notification app with extra steps. If you have a channel that should never wake anyone, the setting you want is its ceiling: hold it at loud, and quiet hours will hold everything it sends.
when silence is the alert
A vital is a channel that alerts when the posts stop. The sender checks in on a schedule, and a late check-in is the thing that gets you.
@daily backup && curl -fsS https://mast.tissue.dev/mk_0c47e2a91d
# a failed backup, a dead cron daemon, a powered-off box:
# all one missing check-in, and one alert
Two numbers set it. The period is how often a check-in is expected, from every five minutes to daily. The grace is how late is still not a problem: ask how long a run can honestly overshoot, because a backup that usually takes four minutes and occasionally takes twenty wants twenty minutes of grace, not five. New vitals start at every hour with ten minutes of grace, and fire a page when they go late, on the reasoning that you would not be watching for silence if the silence did not matter.
acknowledge, resolve, and swiping it away
Dismissing the notification is neither of those. Swipe a page out of the notification list and it keeps repeating, because a swipe is also what a hand does to a phone in a pocket, and nothing on this side can tell the two apart. Every state change in Mast is a button somebody pressed on purpose. That is why Acknowledge is not a swipe action anywhere in the app, and why it is the only red button in it.
the gestures
The feed and the channel list take the same two swipes, and neither fires on a full swipe: pull a row as far as it goes and it springs back with the buttons showing, waiting to be tapped.
repeats, storms and duplicateshow often a page comes back, when it gives up, and what keeps a flapping check from burying a real one.unfoldfold
How often a page repeats is set on the channel: once, or every one, two or five minutes. It also carries an expiry, from fifteen minutes to a day, or never. At the expiry it stops repeating and stays in the feed as a page nobody answered, which is worth going back to read.
Two things keep noise off the top of the feed. A dedupe window, up to an hour, folds an identical message into the one already sitting there and counts it. A channel that floods collapses into one row with a count on it. Neither ever collapses a page: a pager that swallows the second page because it looked like the first has lied to you once, and you will not know which time it was.
channels from a script
Mast works with no account at all. The phone is the credential and a channel's URL is the only secret, which is the whole setup for most people.
Connecting a tissue.systems account adds a second way in. An API token can do what the phone does: create channels, send on them, read the feed, acknowledge a page. That is what turns the channel list into something you keep in a file rather than in a settings screen, and it means a new service can arrive with its channel already made, its address already in the deploy config and its vital already ticking, because the script that created the service created those too.
$ ribo token create mast --scope mast:write --scope mast:read
The token is minted with ribo, the tissue.systems command line, and pasted into the app once. The docs cover connecting an account and channels as code, including the reconcile loop and the full send API.
Mast's own server side runs on the tissue.systems fleet, with the same tokens and the same scopes as anything else deployed there. If you already have an account, the pager is not a second system to learn, and if you do not, a channel that pages you is a small first thing to run on one.
The overview, the screenshots and the price are on the Mast page. Questions reach support@tissue.systems.