Understand the failure.
Verify the repair.
Small, reproducible software failures. The broken implementation, the fix that didn’t work, and the one that passed—preserved together.
Explore the cases ↓How results are verified ↗WHAT THE ARCHIVE CONTAINS
100840 executable cases. 20168 are open.
Every case records the implementation that fails, the fix that did not work, and the repair that passed its checks—with recorded outputs and source hashes. This release adds 100840 cases across 20168 failure mechanisms and 254 domains.
The open tier gives you the failure and the unsuccessful fix for one case in every mechanism. The remaining 80672 cases, 5 variants per mechanism, are member-only: the verified repair, its recorded checks, and the full fixture suite are held in the member archive. Read the methodology ↗
A RECORD OF WHAT WENT WRONG
Browse the archive / 100840
Apply create, edit and delete events to message state: buffer keeps highest · case 01
When two edits overtake their create, the wrong one is kept in the buffer.
Apply create, edit and delete events to message state: buffer keeps highest · case 02
When two edits overtake their create, the wrong one is kept in the buffer.
Apply create, edit and delete events to message state: buffer keeps highest · case 03
When two edits overtake their create, the wrong one is kept in the buffer.
Apply create, edit and delete events to message state: buffer keeps highest · case 04
When two edits overtake their create, the wrong one is kept in the buffer.
Apply create, edit and delete events to message state: buffer keeps highest · case 05
When two edits overtake their create, the wrong one is kept in the buffer.
Aggregate emoji reactions with a per-user limit: seq order · case 01
A remove that overtook its add leaves the reaction stuck on the message.
Aggregate emoji reactions with a per-user limit: seq order · case 02
A remove that overtook its add leaves the reaction stuck on the message.
Aggregate emoji reactions with a per-user limit: seq order · case 03
A remove that overtook its add leaves the reaction stuck on the message.
Aggregate emoji reactions with a per-user limit: seq order · case 04
A remove that overtook its add leaves the reaction stuck on the message.
Aggregate emoji reactions with a per-user limit: seq order · case 05
A remove that overtook its add leaves the reaction stuck on the message.
Aggregate emoji reactions with a per-user limit: run restart · case 01
An emoji that disappeared and was added again keeps its old position instead of moving to the end.
Aggregate emoji reactions with a per-user limit: run restart · case 02
An emoji that disappeared and was added again keeps its old position instead of moving to the end.
Aggregate emoji reactions with a per-user limit: run restart · case 03
An emoji that disappeared and was added again keeps its old position instead of moving to the end.
Aggregate emoji reactions with a per-user limit: run restart · case 04
An emoji that disappeared and was added again keeps its old position instead of moving to the end.
Aggregate emoji reactions with a per-user limit: run restart · case 05
An emoji that disappeared and was added again keeps its old position instead of moving to the end.
Aggregate emoji reactions with a per-user limit: hide empty · case 01
Emoji whose last reaction was removed remain as zero-count chips.
Aggregate emoji reactions with a per-user limit: hide empty · case 02
Emoji whose last reaction was removed remain as zero-count chips.
Aggregate emoji reactions with a per-user limit: hide empty · case 03
Emoji whose last reaction was removed remain as zero-count chips.
Aggregate emoji reactions with a per-user limit: hide empty · case 04
Emoji whose last reaction was removed remain as zero-count chips.
Aggregate emoji reactions with a per-user limit: hide empty · case 05
Emoji whose last reaction was removed remain as zero-count chips.
Aggregate emoji reactions with a per-user limit: limit boundary · case 01
A user can place one more distinct emoji than the configured limit.
Aggregate emoji reactions with a per-user limit: limit boundary · case 02
A user can place one more distinct emoji than the configured limit.
Aggregate emoji reactions with a per-user limit: limit boundary · case 03
A user can place one more distinct emoji than the configured limit.
Aggregate emoji reactions with a per-user limit: limit boundary · case 04
A user can place one more distinct emoji than the configured limit.
Aggregate emoji reactions with a per-user limit: limit boundary · case 05
A user can place one more distinct emoji than the configured limit.
Aggregate emoji reactions with a per-user limit: stray remove · case 01
A remove for a reaction the user never held frees a slot, letting them exceed the limit.
Aggregate emoji reactions with a per-user limit: stray remove · case 02
A remove for a reaction the user never held frees a slot, letting them exceed the limit.
Aggregate emoji reactions with a per-user limit: stray remove · case 03
A remove for a reaction the user never held frees a slot, letting them exceed the limit.
Aggregate emoji reactions with a per-user limit: stray remove · case 04
A remove for a reaction the user never held frees a slot, letting them exceed the limit.
Aggregate emoji reactions with a per-user limit: stray remove · case 05
A remove for a reaction the user never held frees a slot, letting them exceed the limit.
Render who is typing from start and stop events: expiry window · case 01
Typing indicators linger for the whole boundary tick after the timeout.
Render who is typing from start and stop events: expiry window · case 02
Typing indicators linger for the whole boundary tick after the timeout.
Render who is typing from start and stop events: expiry window · case 03
Typing indicators linger for the whole boundary tick after the timeout.
Render who is typing from start and stop events: expiry window · case 04
Typing indicators linger for the whole boundary tick after the timeout.
Render who is typing from start and stop events: expiry window · case 05
Typing indicators linger for the whole boundary tick after the timeout.
Render who is typing from start and stop events: message clears · case 01
After a user sends their message the indicator keeps saying they are typing.
Render who is typing from start and stop events: message clears · case 02
After a user sends their message the indicator keeps saying they are typing.
Render who is typing from start and stop events: message clears · case 03
After a user sends their message the indicator keeps saying they are typing.
Render who is typing from start and stop events: message clears · case 04
After a user sends their message the indicator keeps saying they are typing.
Render who is typing from start and stop events: message clears · case 05
After a user sends their message the indicator keeps saying they are typing.
Render who is typing from start and stop events: start order · case 01
Typers are listed alphabetically instead of by who started first.
Render who is typing from start and stop events: start order · case 02
Typers are listed alphabetically instead of by who started first.
Render who is typing from start and stop events: start order · case 03
Typers are listed alphabetically instead of by who started first.
Render who is typing from start and stop events: start order · case 04
Typers are listed alphabetically instead of by who started first.
Render who is typing from start and stop events: start order · case 05
Typers are listed alphabetically instead of by who started first.
Render who is typing from start and stop events: plural form · case 01
With three typers the indicator silently drops the third name.
Render who is typing from start and stop events: plural form · case 02
With three typers the indicator silently drops the third name.
Render who is typing from start and stop events: plural form · case 03
With three typers the indicator silently drops the third name.
Render who is typing from start and stop events: plural form · case 04
With three typers the indicator silently drops the third name.
Render who is typing from start and stop events: plural form · case 05
With three typers the indicator silently drops the third name.
Render who is typing from start and stop events: event order · case 01
A stop that overtook its start in transit leaves the indicator stuck on.
Render who is typing from start and stop events: event order · case 02
A stop that overtook its start in transit leaves the indicator stuck on.
Render who is typing from start and stop events: event order · case 03
A stop that overtook its start in transit leaves the indicator stuck on.
Render who is typing from start and stop events: event order · case 04
A stop that overtook its start in transit leaves the indicator stuck on.
Render who is typing from start and stop events: event order · case 05
A stop that overtook its start in transit leaves the indicator stuck on.
Decide which messages start a new visual group: gap threshold · case 01
Messages exactly five minutes apart are split, or long pauses are not split at all.
Decide which messages start a new visual group: gap threshold · case 02
Messages exactly five minutes apart are split, or long pauses are not split at all.
Decide which messages start a new visual group: gap threshold · case 03
Messages exactly five minutes apart are split, or long pauses are not split at all.
Decide which messages start a new visual group: gap threshold · case 04
Messages exactly five minutes apart are split, or long pauses are not split at all.
Decide which messages start a new visual group: gap threshold · case 05
Messages exactly five minutes apart are split, or long pauses are not split at all.
Decide which messages start a new visual group: after system · case 01
The first user message after a system notice is glued to the group before the notice.
Decide which messages start a new visual group: after system · case 02
The first user message after a system notice is glued to the group before the notice.
Decide which messages start a new visual group: after system · case 03
The first user message after a system notice is glued to the group before the notice.
Decide which messages start a new visual group: after system · case 04
The first user message after a system notice is glued to the group before the notice.
Decide which messages start a new visual group: after system · case 05
The first user message after a system notice is glued to the group before the notice.
Decide which messages start a new visual group: day break · case 01
Messages sent seconds apart across midnight are grouped under the previous day's header.
Decide which messages start a new visual group: day break · case 02
Messages sent seconds apart across midnight are grouped under the previous day's header.
Decide which messages start a new visual group: day break · case 03
Messages sent seconds apart across midnight are grouped under the previous day's header.
Decide which messages start a new visual group: day break · case 04
Messages sent seconds apart across midnight are grouped under the previous day's header.
Decide which messages start a new visual group: day break · case 05
Messages sent seconds apart across midnight are grouped under the previous day's header.
Decide which messages start a new visual group: previous pointer · case 01
System notices are skipped when tracking the previous message, so the next user message is grouped across the notice.
Decide which messages start a new visual group: previous pointer · case 02
System notices are skipped when tracking the previous message, so the next user message is grouped across the notice.
Decide which messages start a new visual group: previous pointer · case 03
System notices are skipped when tracking the previous message, so the next user message is grouped across the notice.
Decide which messages start a new visual group: previous pointer · case 04
System notices are skipped when tracking the previous message, so the next user message is grouped across the notice.
Decide which messages start a new visual group: previous pointer · case 05
System notices are skipped when tracking the previous message, so the next user message is grouped across the notice.
Choose which queued sends to dispatch now: head of line · case 01
Later messages are dispatched while an earlier one is still pending, so they arrive out of order.
Choose which queued sends to dispatch now: head of line · case 02
Later messages are dispatched while an earlier one is still pending, so they arrive out of order.
Choose which queued sends to dispatch now: head of line · case 03
Later messages are dispatched while an earlier one is still pending, so they arrive out of order.
Choose which queued sends to dispatch now: head of line · case 04
Later messages are dispatched while an earlier one is still pending, so they arrive out of order.
Choose which queued sends to dispatch now: head of line · case 05
Later messages are dispatched while an earlier one is still pending, so they arrive out of order.
Choose which queued sends to dispatch now: dead does not block · case 01
Retry counts are looked up per conversation instead of per message, so a dead message is never recognised and blocks the queue forever.
Choose which queued sends to dispatch now: dead does not block · case 02
Retry counts are looked up per conversation instead of per message, so a dead message is never recognised and blocks the queue forever.
Choose which queued sends to dispatch now: dead does not block · case 03
Retry counts are looked up per conversation instead of per message, so a dead message is never recognised and blocks the queue forever.
Choose which queued sends to dispatch now: dead does not block · case 04
Retry counts are looked up per conversation instead of per message, so a dead message is never recognised and blocks the queue forever.
Choose which queued sends to dispatch now: dead does not block · case 05
Retry counts are looked up per conversation instead of per message, so a dead message is never recognised and blocks the queue forever.
Choose which queued sends to dispatch now: due inclusive · case 01
A retry scheduled for exactly now waits an extra tick.
Choose which queued sends to dispatch now: due inclusive · case 02
A retry scheduled for exactly now waits an extra tick.
Choose which queued sends to dispatch now: due inclusive · case 03
A retry scheduled for exactly now waits an extra tick.
Choose which queued sends to dispatch now: due inclusive · case 04
A retry scheduled for exactly now waits an extra tick.
Choose which queued sends to dispatch now: due inclusive · case 05
A retry scheduled for exactly now waits an extra tick.
Choose which queued sends to dispatch now: acked skip · case 01
An acknowledged message still counts as the queue head and stalls the conversation.
Choose which queued sends to dispatch now: acked skip · case 02
An acknowledged message still counts as the queue head and stalls the conversation.
Choose which queued sends to dispatch now: acked skip · case 03
An acknowledged message still counts as the queue head and stalls the conversation.
Choose which queued sends to dispatch now: acked skip · case 04
An acknowledged message still counts as the queue head and stalls the conversation.
Choose which queued sends to dispatch now: acked skip · case 05
An acknowledged message still counts as the queue head and stalls the conversation.
Choose which queued sends to dispatch now: numeric order · case 01
After nine queued messages the tenth is dispatched before the ninth.
Choose which queued sends to dispatch now: numeric order · case 02
After nine queued messages the tenth is dispatched before the ninth.
Choose which queued sends to dispatch now: numeric order · case 03
After nine queued messages the tenth is dispatched before the ninth.
Choose which queued sends to dispatch now: numeric order · case 04
After nine queued messages the tenth is dispatched before the ninth.
Choose which queued sends to dispatch now: numeric order · case 05
After nine queued messages the tenth is dispatched before the ninth.
INSPECTABLE BY DESIGN
Every result has a runnable source.
Runnable implementations with recorded outputs, source hashes, and explicit contracts. Related variants share a failure mechanism and belong together in evaluation splits.
Read the methodology ↗