Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
![Ringbolt. The on-call line that talks back. It phones the engineer on call, talks the incident through, and runs only the fix they authorize out loud.](docs/media/card.png)

# Ringbolt

The on-call line that phones a human when production breaks, talks the incident through with
them, and then carries out the fix they authorize out loud.
A phone-call agent for on-call engineering. It phones a human when production breaks, talks the
incident through with them, and then carries out the fix they authorize out loud.

A ringbolt is the iron ring bolted into a quay that a ship ties to in a storm.

Expand All @@ -15,6 +17,9 @@ telephone ring.
**Or watch it: [the video walkthrough](https://www.youtube.com/watch?v=EIm87clsks8)**, just over two
minutes on that same demo, from the broken release to the rollback and the call it refused.

**Or just read it: [examples/demo-transcript.md](examples/demo-transcript.md)**, the same
walkthrough in words, about a minute, nothing to open.

## Why this exists

Every on-call tool can already phone you. None of them can have a conversation.
Expand Down
Binary file added docs/media/card.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
70 changes: 70 additions & 0 deletions examples/demo-transcript.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# A walk through the public demo, in words

Everything below happens on [ringbolt.taranity.com](https://ringbolt.taranity.com), the public
demo. It needs no install, no account and no key, and nothing you press there can make a telephone
ring: that deployment answers calls with Ringbolt's local stand-in rather than dialling.

This is the same walkthrough the video linked from the README shows, written out so you can read it
in a minute instead of watching it.

## The deck

When production breaks at three in the morning, your on-call tool can ring you. But that call? It
is a recording. Press four to acknowledge. Press six to resolve. And to find out what actually
broke, you still have to get out of bed, and find a laptop.

This is Ringbolt. It phones the engineer on call, has a real conversation about the incident, and
then carries out the fix they authorize, out loud.

## Breaking something on purpose

This is the public demo. Nothing here can ring a phone, so the call you are about to watch is
Ringbolt's local stand-in, running the same loop as the live build. Dockside is a service Ringbolt
owns. Bad release, going out now.

> On `/demo` this is the control labelled **Break dockside**. The readout beside it turns to
> FAILING and the service raises its own alert, which goes through the same orchestrator every
> other alert does. The one thing it skips is the HTTP intake endpoint, because that needs the
> intake token and this control has to work for a stranger with no credentials at all. So intake
> authentication, rate limiting and payload validation are not what this walkthrough exercises.

## The call

The alert comes in. Policy decides it is worth waking somebody up, and Ringbolt calls. The
responder hears what broke, and authorizes the rollback in their own words.

> The ring on the deck counts the seconds somebody has been on the line.

## What has to be true before anything runs

Before Ringbolt believes a word of that call, it fetches it again from the provider, because
webhooks carry no signature. The decision has to match a schema, clear a confidence floor, and name
an action the policy already allowed. And the exact words have to be in the transcript.

> On the record screen, a red rule joins the sentence that granted permission to the action it
> allowed, so the authorization and the change cannot be read as two separate events.

The rollback ran, and dockside is healthy again.

## The call that was refused

Voice is a lossy channel, so Ringbolt never acts on a guess. This example call came back completed,
at high confidence, with a valid decision to change production. It never ran. Not one word from the
person who answered was transcribed. No evidence, no action.

The real telephone path is built too. What stopped it is narrower than it sounds: the provider
refused the call setup Ringbolt reported, with the words "Calls to the Netherlands in English are
not supported for this call setup", while their own published region table still lists that
destination. The repository treats that as one observation rather than a rule about their API, and
records it with the call ids in [docs/two-way-audio.md](../docs/two-way-audio.md).

## The rest of the rota

A responder can also hold, snooze, or escalate. Policy filters out what should not ring anybody.
Quiet hours wait. And when nobody answers, the next person on the rota gets the call.

## Go and break it

The demo is public. Break it yourself. Nothing you press there can ring a phone.

Ringbolt.
1 change: 1 addition & 0 deletions scripts/check-tracked-tree.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const ALLOWED_DIRS = new Set([
'.github',
'design',
'docs',
'examples',
'migrations',
'scripts',
'src',
Expand Down
21 changes: 21 additions & 0 deletions src/ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@
/>
<meta name="color-scheme" content="dark light" />
<meta name="robots" content="noindex" />
<!-- Link previews, for when the address is pasted somewhere that unfurls it. The image URL is
absolute because crawlers do not resolve a relative one, and it names the public demo
because that is the address this product is shared under. -->
<meta property="og:type" content="website" />
<meta
property="og:title"
content="Ringbolt: the on-call line that talks back"
/>
<meta
property="og:description"
content="A phone-call agent for on-call engineering. It phones the engineer on call, talks the incident through, and runs only the fix they authorize out loud."
/>
<meta
property="og:image"
content="https://ringbolt.taranity.com/card.png"
/>
<meta
property="og:image:alt"
content="Ringbolt: the on-call line that talks back."
/>
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" href="/mark.svg" type="image/svg+xml" />
<script>
// Before the first paint, or the deck flashes the wrong theme on every load. It runs ahead of
Expand Down
Binary file added src/ui/public/card.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading