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.

evidence retained
  1. r1 countersigns with k1.
  2. r1 attested in epoch e5.
  3. r1 produced digest d2.
  4. The k1 attestation goes out on s3.
  5. r5 publishes into s2.
  6. Whatever is countersigned k3 publishes into s2.
  7. Epoch e3 is countersigned k3.
  8. Digest d4 is countersigned k5.
  9. The attestation countersigned k2 went out on s5.
  10. Digest d5 was not produced in epoch e3.
  11. Nothing on s5 carries the epoch e4 mark.
  12. The e4 attestation is not countersigned k5.
  13. r2 did not attest in epoch e4.
  14. r4 does not countersign with k4.
  15. The e2 attestation did not go out on s1.
  16. r3 does not publish into s1.
  17. r4 does not publish into s1.
  18. r5 did not produce digest d1.
  19. Digest d1 did not appear on s4.
case file andy — personal
INC-0003 audit replay log
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 →
INC-0006 recovery transition log
nx::epoch=0416

Recovered from the malformed lines the flapping produced, at an offset the audit index has no record of.

open incident →
INC-0009 repair cascade, frame 4096
nx::src=harness-04

Pulled out of the cascade noise, between two identical stack traces.

open incident →
messages bob
Bob 07:48

Five of everything. The board is as big as it gets and the rules still haven't changed.

Bob 07:49

Columns are replicas, digests, epochs, keys. Rows are streams, keys, epochs, digests. Registry panel tells you what the short forms mean.

Bob 07:52

Four of those countersigning keys belong to services. Find the attestation carrying the fifth.

Bob 07:53

Format: replica, digest, epoch, key, stream.

Bob 08:31

And Andy. Whatever it turns out to be. Write it down somewhere that isn't a company system.

registry attestation fabric
  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
table divergent attestations

fault

Attestations do not agree

keys

5 · service keys 4

severity

SEV-1

Skip the grid, go to the answer
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
answer input incident response

Question: Which attestation carries the non-service key — replica, digest, epoch, key, stream?