r1countersigns withk1.r1attested in epoche5.r1produced digestd2.- The
k1attestation goes out ons3. r5publishes intos2.- Whatever is countersigned
k3publishes intos2. - Epoch
e3is countersignedk3. - Digest
d4is countersignedk5. - The attestation countersigned
k2went out ons5. - Digest
d5was not produced in epoche3. - Nothing on
s5carries the epoche4mark. - The
e4attestation is not countersignedk5. r2did not attest in epoche4.r4does not countersign withk4.- The
e2attestation did not go out ons1. r3does not publish intos1.r4does not publish intos1.r5did not produce digestd1.- Digest
d1did not appear ons4.
10 / five truths
Nothing was corrupted. That was what took Andy the longest to accept.
[ALERT] INC-0010 — Attestation quorum failed, 5 divergent reports
[INFO ] all reports well-formed
[INFO ] all signatures verify
[INFO ] all epochs within window
[WARN ] agreement: 0/5
[WARN ] no replica has reported a fault
Five replicas attest to the same ledger. Once per epoch each one publishes a digest of what it believes the world looks like, countersigns it, and pushes it into its telemetry stream. They are supposed to be boring and identical.
This morning they were five different histories, each one signed, each one plausible, none of them agreeing about anything.
Bob looked at it for a long time before he said anything, which had not happened before.
“This isn’t a crash. A crash is a system that stopped telling you things.” He tapped the report count. “This is a system that is still telling you things.”
“One of them is lying.”
“One of them is reporting,” Bob said. “Nothing in that list is malformed. A liar who malforms things is a bug. A liar who signs correctly is a participant.”
He pulled up the key registry and let Andy find it himself.
Five countersigning keys. Four of them were service identities.
nx::hrs_see_all::hrs-07
Not a valid call. Not in any codebase Andy could find. Security erased the replay logs immediately after the alert appeared.
open incident →nx::epoch=0416
Recovered from the malformed lines the flapping produced, at an offset the audit index has no record of.
open incident →nx::src=harness-04
Pulled out of the cascade noise, between two identical stack traces.
open incident →Five of everything. The board is as big as it gets and the rules still haven't changed.
Columns are replicas, digests, epochs, keys. Rows are streams, keys, epochs, digests. Registry panel tells you what the short forms mean.
Four of those countersigning keys belong to services. Find the attestation carrying the fifth.
Format: replica, digest, epoch, key, stream.
And Andy. Whatever it turns out to be. Write it down somewhere that isn't a company system.
field abbreviations — one row per field, as the fabric logs them ────────────────────────────────────────────────────────────────────────────────────── replica r1 repl-aurora r2 repl-borealis r3 repl-cinder r4 repl-dune r5 repl-ember digest d1 0x41ae… d2 0x7c02… d3 0x9f31… d4 0xb4d8… d5 0xe016… epoch e1 0411 e2 0412 e3 0414 e4 0416 e5 0419 key k1 att.ops k2 att.rel k3 att.bot k4 r.sato k5 att.arc stream s1 tel/hrs-02 s2 tel/hrs-03 s3 tel/hrs-05 s4 tel/hrs-07 s5 tel/hrs-11
fault
Attestations do not agree
keys
5 · service keys 4
severity
SEV-1
| r1 | r2 | r3 | r4 | r5 | d1 | d2 | d3 | d4 | d5 | e1 | e2 | e3 | e4 | e5 | k1 | k2 | k3 | k4 | k5 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s1 | ||||||||||||||||||||
| s2 | ||||||||||||||||||||
| s3 | ||||||||||||||||||||
| s4 | ||||||||||||||||||||
| s5 | ||||||||||||||||||||
| k1 | ||||||||||||||||||||
| k2 | ||||||||||||||||||||
| k3 | ||||||||||||||||||||
| k4 | ||||||||||||||||||||
| k5 | ||||||||||||||||||||
| e1 | ||||||||||||||||||||
| e2 | ||||||||||||||||||||
| e3 | ||||||||||||||||||||
| e4 | ||||||||||||||||||||
| e5 | ||||||||||||||||||||
| d1 | ||||||||||||||||||||
| d2 | ||||||||||||||||||||
| d3 | ||||||||||||||||||||
| d4 | ||||||||||||||||||||
| d5 |
Question: Which attestation carries the non-service key — replica, digest, epoch, key, stream?