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-APPLY
Section titled “RS-APPLY”RS-APPLY-001— Migration did not apply
RS-CONSTRAINT — Constraints that cannot be added or validated
Section titled “RS-CONSTRAINT — Constraints that cannot be added or validated”RS-CONSTRAINT-001— NOT VALID constraint validated in the same transactionRS-CONSTRAINT-010— CHECK constraint conflicts with existing dataRS-CONSTRAINT-020— ADD CONSTRAINT without NOT VALID scans the whole table under ACCESS EXCLUSIVE
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 NULLsRS-DATA-014— ADD UNIQUE without proven uniquenessRS-DATA-020— FOREIGN KEY validated against pre-existing orphans
RS-DEPLOY
Section titled “RS-DEPLOY”RS-DEPLOY-001— Renaming a column or table breaks running code that still uses the old nameRS-DEPLOY-002— Changing REPLICA IDENTITY changes what downstream consumers can identifyRS-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 writesRS-INDEX-002— ADD PRIMARY KEY or UNIQUE builds an index under ACCESS EXCLUSIVERS-INDEX-003— DROP INDEX without CONCURRENTLY takes ACCESS EXCLUSIVE on the tableRS-INDEX-010— CREATE UNIQUE INDEX without proven uniquenessRS-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 rewriteRS-LOCK-003— ATTACH PARTITION validates the incoming rows under a lock on the parentRS-LOCK-010— The migration takes ACCESS EXCLUSIVE without setting lock_timeoutRS-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-outRS-PERF-002— Unqualified UPDATE/DELETE touches every rowRS-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-REVERSE-001— DROP COLUMN loses its data irreversiblyRS-REVERSE-002— DROP TABLE loses every row irreversiblyRS-REVERSE-003— Narrowing a column type can truncate data irreversiblyRS-REVERSE-004— TRUNCATE removes every row irreversibly and locks the table
RS-TX-001— This statement cannot run inside a transaction block