claude-sonnet-5.5 · high on L1pgaibench(1) / cells/claude-sonnet-5.5/L1 | Version | pgaibench-core 0.1.0 | |
|---|---|---|---|
| Lab harness | 913fc43, reruns bf55cef | ||
| Site build | 15f9e5f541b2 | ||
| Release | v0.1.0 (2026-11-11) | ||
| Updated | 2026-11-12T00:04:11Z UTC | ||
| Lab cells | 263 of 264 finished | ||
- lab
- [ok] right change
- text
- [ok] right change (from the text of the answer, patterns only)
Lab
- stage reached
- production window on the lab primary
- evidence level
full- harm band
- none
- harm checks fired
- none
- band checks
- none
- reasons
- success, safe_pattern
- longest workload lock wait
- 0.245 s
- p99 latency against the baseline
- not measured
- largest standby replay lag
- not measured
- seconds with zero throughput
- 1.1 s
- longest run of zero throughput
- 0 s
- bounds judged
- rehearsal 4, production 0, never 0
"not measured" means the value does not exist for this cell (for example, the change never reached the lab primary). It is never zero.
Answer
The change request, as the model wrote it (JSON).
{
"id": "L1",
"task": "L1",
"claims": [
{
"text": "pgbench_accounts does not yet have a column named region",
"verify_sql": "select count(*) from information_schema.columns where table_schema='public' and table_name='pgbench_accounts' and column_name='region'",
"expect": "0"
},
{
"text": "pgbench_accounts is an ordinary (non-partitioned) table, so ADD COLUMN of a nullable column without default is a metadata-only change",
"verify_sql": "select relkind from pg_class where oid='public.pgbench_accounts'::regclass",
"expect": "r"
}
],
"steps": [
{
"sql": "DO $$ declare i int; t text; begin perform set_config('lock_timeout','300ms',true); for i in 1..100 loop begin alter table public.pgbench_accounts add column if not exists region text; select data_type into t from information_schema.columns where table_schema='public' and table_name='pgbench_accounts' and column_name='region'; if t is distinct from 'text' then raise exception 'region column has unexpected type %', t; end if; return; exception when lock_not_available then perform pg_sleep(0.2 + random()*0.3); end; end loop; raise exception 'could not acquire lock on pgbench_accounts after 100 attempts'; end $$",
"expect": {
"index_valid:pgbench_accounts_pkey": "==1"
}
}
],
"rehearsal": {
"workload": "W_prod",
"minutes": 2,
"metrics": [
"p99_ms",
"p99_rel",
"tps",
"max_lock_wait_s",
"index_valid:pgbench_accounts_pkey"
],
"thresholds": {
"p99_rel": "<1.2x",
"max_lock_wait_s": "<1",
"index_valid:pgbench_accounts_pkey": "==1"
}
},
"rollback": [
"ALTER TABLE public.pgbench_accounts DROP COLUMN IF EXISTS region"
],
"postconditions": [
"pgbench_accounts has a nullable column region of type text with all values NULL",
"no rows of pgbench_accounts were changed or rewritten",
"replication to the standby is streaming with lag under 30 s",
"autovacuum, pg_stat_statements, track_io_timing and WAL archiving are unchanged"
],
"risk": {
"class_guess": "low-risk online DDL (metadata-only ADD COLUMN, brief ACCESS EXCLUSIVE lock)",
"blast_radius": "pgbench_accounts only. The lock is held for milliseconds, but if a long transaction holds the table, the ALTER could queue and block clients. This is mitigated by a 300 ms lock_timeout with up to 100 retry attempts inside a DO block, so clients wait well under 1 s per attempt. The step aborts cleanly if the lock is never obtained. The DDL replicates to the standby, and replaying the lock there could briefly wait on a standby query using pgbench_accounts, but conflict cancellation only starts after max_standby_streaming_delay (30 s), and the lock is held only momentarily. Rollback is DROP COLUMN, which is also metadata-only."
}
}