Skip to content

Finding catalog

Every finding rowshape returns carries a permanent, namespaced code, and every error-severity finding carries remediation. A finding an agent cannot act on is a bug.

You can read any of this from the CLI with rowshape explain <CODE>, or from an agent with the explain_finding MCP tool. These pages are generated from that same catalog, so they never drift from what the tool returns.

RS-CONSTRAINT — Constraints that cannot be added or validated

Section titled “RS-CONSTRAINT — Constraints that cannot be added or validated”

RS-DATA — Existing data that contradicts the change

Section titled “RS-DATA — Existing data that contradicts the change”
  • RS-DATA-001 — SET NOT NULL against existing NULLs
  • RS-DATA-014 — ADD UNIQUE without proven uniqueness
  • RS-DATA-020 — FOREIGN KEY validated against pre-existing orphans
  • RS-DEPLOY-001 — Renaming a column or table breaks running code that still uses the old name
  • RS-DEPLOY-002 — Changing REPLICA IDENTITY changes what downstream consumers can identify
  • RS-DEPLOY-003 — Dropping NOT NULL withdraws a guarantee running code relies on

RS-INDEX — Index builds that fail or block

Section titled “RS-INDEX — Index builds that fail or block”
  • RS-INDEX-001 — Non-concurrent CREATE INDEX blocks writes
  • RS-INDEX-002 — ADD PRIMARY KEY or UNIQUE builds an index under ACCESS EXCLUSIVE
  • RS-INDEX-003 — DROP INDEX without CONCURRENTLY takes ACCESS EXCLUSIVE on the table
  • RS-INDEX-010 — CREATE UNIQUE INDEX without proven uniqueness
  • RS-INDEX-020 — Non-concurrent REINDEX rebuilds under lock

RS-LOCK — Locks a migration takes, and for how long

Section titled “RS-LOCK — Locks a migration takes, and for how long”
  • RS-LOCK-001 — ACCESS EXCLUSIVE lock for a full table rewrite
  • RS-LOCK-003 — ATTACH PARTITION validates the incoming rows under a lock on the parent
  • RS-LOCK-010 — The migration takes ACCESS EXCLUSIVE without setting lock_timeout
  • RS-LOCK-011 — Several statements take ACCESS EXCLUSIVE on the same table

RS-PERF — Rewrites and scans that cost more than they look like they do

Section titled “RS-PERF — Rewrites and scans that cost more than they look like they do”
  • RS-PERF-001 — DELETE cascades through a long-tailed fan-out
  • RS-PERF-002 — Unqualified UPDATE/DELETE touches every row
  • RS-PERF-010 — A qualified UPDATE/DELETE on a large table rewrites many rows in one statement

RS-REVERSE — Changes that cannot be safely reversed

Section titled “RS-REVERSE — Changes that cannot be safely reversed”
  • RS-TX-001 — This statement cannot run inside a transaction block