gold
SELECT name FROM cards WHERE name IN ('Serra Angel', 'Shrine Keeper') ORDER BY convertedManaCost DESC NULLS LAST LIMIT 1
- convertedmanacost
- descending, nulls last
sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82
R-ORD NOT_EQUAL
card_games · mini_dev_postgresql from https://bird-bench.oss-cn-beijing.aliyuncs.com/minidev.zip (sha256 cc48ba16838204e4e214512030cb572eeb5f7bcdd999bae4b9b6ff12ec13b92f, downloaded 2026-09-07), member minidev/MINIDEV/mini_dev_postgresql.json
Which card costs more converted mana, "Serra Angel" or "Shrine Keeper"?
the hint the set supplies: "Serra Angel" refers to name = 'Serra Angel'; "Shrine Keeper" refers to name = 'Shrine Keeper'; card costs more converted mana when the value of convertedManaCost is greater
NOT_EQUAL states that these two statements disagree on this data under this rule. It does not state which of them is wrong.
read by hand, 2026-09-04: B harmless: one distinct row repeated; DISTINCT added by the prediction; a list under twice the answer with every row present
the gold's LIMIT 1 name; the prediction returns that one name 88 times, once per printing
a maintainer's reading of this question, out of classification.json, copied from plans/reports/prediction-mode-260904-real-predictions/classification.json. It is not a verdict and nothing above it was computed from it.
The two statements name their result columns differently. A projection is compared by position and declared type, so these names did not decide the verdict. They are part of the canonical rendering each result is hashed under, so the two result hashes differ with them.
SELECT name FROM cards WHERE name IN ('Serra Angel', 'Shrine Keeper') ORDER BY convertedManaCost DESC NULLS LAST LIMIT 1
sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82
SELECT
CASE
WHEN a.convertedmanacost > b.convertedmanacost THEN 'Serra Angel'
WHEN a.convertedmanacost < b.convertedmanacost THEN 'Shrine Keeper'
ELSE 'Both cards have the same converted mana cost'
END
FROM
cards a, cards b
WHERE
a.name = 'Serra Angel'
AND b.name = 'Shrine Keeper';
this statement states no ordering of its own
sha256:9499f62728803096a462e5d6a1294055e9a2b019375b148e46b1a7ae8a035f4d
The marked tokens are where the two texts differ. Two statements that differ everywhere can return the same rows, and two that differ in one token can return other rows; the verdict above is read off the results.
from counterexample.json, 0 rows, up to 25 shown per side
| side | nametext |
|---|---|
| no rows |
from counterexample.json, 87 rows, up to 25 shown per side, 1 on this page
| side | times | casetext |
|---|---|---|
| second | 87 | Serra Angel |
set(second_rows) == set(gold_rows), float4/float8 cells as Python float as psycopg2 returns them, numeric as Decimal
https://github.com/bird-bench/mini_dev/blob/main/evaluation/evaluation_ex.py
result_eq: equal row counts and equal column counts, each row unordered as a quick rejection, then the two equal as a list when the gold text holds ORDER BY and as a multiset otherwise, under some permutation of the columns; DISTINCT is not stripped and re-executed, and the cells are PostgreSQL's as psycopg2 returns them
ruiqi-zhong/test-suite-sql-eval, exec_eval.py, result_eq, at commit 48cb78ec: https://github.com/ruiqi-zhong/test-suite-sql-eval/blob/48cb78ecf7f610620206283846c76751b18a1326/exec_eval.py
The class states what makes these two results unequal under this rule, read off the two results and nothing else. It does not state which of the two statements is wrong.
from counterexample.json, 1 row
| nametext |
|---|
| Serra Angel |
from counterexample.json, 88 rows, 25 on this page
| casetext |
|---|
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
A smell is a mechanical reason to read this gold statement again. It is a heuristic: it does not state that the statement is wrong, and a maintainer decides.
this statement orders by a text column holding only numbers, and ordering it as a number gives a different answer, so the gold may be sorting 9.5 above 10
no ORDER BY key resolves to a text column
{
"heuristic": true,
"reason": "no ORDER BY key resolves to a text column",
"keys": [
{
"key": "convertedmanacost",
"column": "cards.convertedmanacost",
"declared_type": "real",
"not_applicable": "the column is not declared as text"
}
]
}
this statement cuts its result at a LIMIT that does not decide which rows come back, so a different but equally correct statement can return other rows and score zero
{
"heuristic": true,
"cut": 1,
"offset": 0,
"distinct_kept": false,
"unbounded_sql": "SELECT name, convertedmanacost AS attestql_ordering_key_0 FROM cards WHERE name IN ('Serra Angel', 'Shrine Keeper') ORDER BY convertedmanacost DESC NULLS LAST",
"unbounded_rows": 46,
"projected_columns": [
"name"
],
"ordering_key_columns": [
"attestql_ordering_key_0"
],
"ordering_keys": [
{
"key": "convertedmanacost",
"direction": "desc",
"nulls": "last",
"nulls_first_in_effect": false,
"returned_rows_null_in_this_key": 0,
"fires": false
}
],
"tied_at_the_cut": {
"positions": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
],
"tied_rows": 44,
"distinct_projected_answers": 1,
"rows": [
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
],
[
{
"type": "str",
"value": "Serra Angel"
}
]
]
},
"case": null
}
rerun over the same rows in another physical order this statement gives another answer, so its result depends on how the rows are stored and not only on the data
{
"heuristic": true,
"rule": "R-ORD",
"baseline_result_hash": "sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82",
"baseline_result": {
"columns": [
{
"name": "name",
"declared_type": "text"
}
],
"row_count": 1,
"truncated": false,
"rows_shown": 1,
"rows": [
[
{
"type": "str",
"value": "Serra Angel"
}
]
],
"result_hash": "sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82"
},
"planner_statistics": {
"cards": {
"last_analyze": "2026-09-14 12:50:59.330452+00",
"last_autoanalyze": null,
"n_mod_since_analyze": 0
}
},
"shuffle": {
"seed": "1",
"row_limit": 300000,
"tables": [
"cards"
],
"tables_not_shuffled": [],
"tables_skipped_for_size": {
"laptimes": 400524,
"legalities": 427907,
"posthistory": 303155,
"trans": 1056320,
"yearmonth": 383282
},
"tables_not_reached_by_a_copy": {}
},
"shuffled_copies": {
"run": true,
"verdict": "equal",
"differs": false,
"result_hash": "sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82",
"result": {
"columns": [
{
"name": "name",
"declared_type": "text"
}
],
"row_count": 1,
"truncated": false,
"rows_shown": 1,
"rows": [
[
{
"type": "str",
"value": "Serra Angel"
}
]
],
"result_hash": "sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82"
}
},
"plan_variant": {
"run": false,
"reason": "the plan variant was not asked for"
}
}
this statement returns the same whole row more than once and never says DISTINCT, so a statement answering the same question once per row disagrees on multiplicity alone
{
"heuristic": true,
"rows": 1,
"distinct_rows": 1,
"repeated_rows": 0,
"largest_repeat": 1,
"result_bounded": false,
"distinct_stated": false,
"set_operation": false,
"not_applicable": "a result of fewer than two rows has nothing to repeat"
}
SELECT name FROM cards WHERE name IN ('Serra Angel', 'Shrine Keeper') ORDER BY convertedManaCost DESC NULLS LAST LIMIT 1
result_hash sha256:d18bf362ebfed07d19ab1135279a8cb77c68d0c2a9977f53ba244c4f4e03ae82 recomputed from this JSON: match
record_hash sha256:8efa192744634b36092a676def4848c4e9486bbc05059e69019114caa55a56f9 recomputed from this JSON: match
from evidence-gold.json, 1 row
| nametext |
|---|
| Serra Angel |
SELECT
CASE
WHEN a.convertedmanacost > b.convertedmanacost THEN 'Serra Angel'
WHEN a.convertedmanacost < b.convertedmanacost THEN 'Shrine Keeper'
ELSE 'Both cards have the same converted mana cost'
END
FROM
cards a, cards b
WHERE
a.name = 'Serra Angel'
AND b.name = 'Shrine Keeper';
result_hash sha256:9499f62728803096a462e5d6a1294055e9a2b019375b148e46b1a7ae8a035f4d recomputed from this JSON: match
record_hash sha256:c99471d8d47740b2eb7bbb7e56ebf1f2e0128fea45d4c27493cfa70ed9e6de65 recomputed from this JSON: match
from evidence-second.json, 88 rows, 50 on this page
| casetext |
|---|
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
| Serra Angel |
The whole result is in evidence-second.json, beside this page.
re-run this statement read-only against PostgreSQL 16.15 (Debian 16.15-1.pgdg13+2) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit | server=172.17.0.2/32:5432 | database=bird under the session settings and over the data this record's fixture digest names, and compare the two results under R-ORD
re-run this statement read-only against PostgreSQL 16.15 (Debian 16.15-1.pgdg13+2) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit | server=172.17.0.2/32:5432 | database=bird under the session settings and over the data this record's fixture digest names, and compare the two results under R-ORD