diff --git a/prompts/_shared/rename-compatibility-rules.md b/prompts/_shared/rename-compatibility-rules.md
new file mode 100644
index 0000000..92df197
--- /dev/null
+++ b/prompts/_shared/rename-compatibility-rules.md
@@ -0,0 +1,15 @@
+When the diff renames, moves, or deletes a class, module, constant, or symbol, check
+whether its old name is persisted somewhere and read back after deploy — code already
+running wrote that name down, and the new code cannot resolve it. Flag it, say what holds
+the stale name, and ask for a temporary alias or subclass with a note on when to remove
+it. Where the old name survives:
+
+- Sidekiq/ActiveJob queues, retry and scheduled sets, and cron registrations.
+- `maintenance_tasks_runs`, for a task under `app/tasks/maintenance/`.
+- STI `type`, serialized or polymorphic `*_type`, GlobalIDs, and ActiveHash ids.
+- Flipper feature keys, cache keys, Redis keys, and experiment/variant names.
+- Keys or values sent to a third party and later read back, such as Stripe metadata or a
+ webhook event name.
+
+Renaming only the Ruby constant while deliberately leaving the persisted name alone — a
+table, a column, a metadata key, a route path — is correct, and is not a finding.
diff --git a/prompts/claude-synthesize-thesis-first.md b/prompts/claude-synthesize-thesis-first.md
index ed4557a..240c35b 100644
--- a/prompts/claude-synthesize-thesis-first.md
+++ b/prompts/claude-synthesize-thesis-first.md
@@ -37,11 +37,14 @@ Synthesize a single review decision for pull request #{{PR}}.
9. Check that in-app navigational links use React Router's Link rather than a raw ``
tag, per these rules:
{{@prompts/_shared/navigation-rules.md}}
-10. Validate which of Codex's findings are real (discard false positives), add any genuine
+10. Check whether the diff renames, moves, or deletes a name that is persisted outside
+ the codebase and read back after deploy, per these rules:
+ {{@prompts/_shared/rename-compatibility-rules.md}}
+11. Validate which of Codex's findings are real (discard false positives), add any genuine
issues Codex missed, and (when a ticket is available) judge genuine misses of the ticket's
intent or clear scope creep — but give credit when the author went beyond the literal
acceptance criteria in a sound way rather than flagging it as non-compliant.
-11. Decide ONE verdict. Be pragmatic: use "request_changes" only when there is at least one
+12. Decide ONE verdict. Be pragmatic: use "request_changes" only when there is at least one
genuine, blocking issue (such as a bug, regression, privacy violation, half-finished task,
placeholder, or deferred work); otherwise "approve". A change that exceeds the AC without
breaking the ticket's intent is a reason to approve, not to block.
diff --git a/prompts/claude-synthesize.md b/prompts/claude-synthesize.md
index 14ea29e..8f69f76 100644
--- a/prompts/claude-synthesize.md
+++ b/prompts/claude-synthesize.md
@@ -37,11 +37,14 @@ Synthesize a single review decision for pull request #{{PR}}.
9. Check that in-app navigational links use React Router's Link rather than a raw ``
tag, per these rules:
{{@prompts/_shared/navigation-rules.md}}
-10. Validate which of Codex's findings are real (discard false positives), add any genuine
+10. Check whether the diff renames, moves, or deletes a name that is persisted outside
+ the codebase and read back after deploy, per these rules:
+ {{@prompts/_shared/rename-compatibility-rules.md}}
+11. Validate which of Codex's findings are real (discard false positives), add any genuine
issues Codex missed, and (when a ticket is available) judge genuine misses of the ticket's
intent or clear scope creep — but give credit when the author went beyond the literal
acceptance criteria in a sound way rather than flagging it as non-compliant.
-11. Decide ONE verdict. Be pragmatic: use "request_changes" only when there is at least one
+12. Decide ONE verdict. Be pragmatic: use "request_changes" only when there is at least one
genuine, blocking issue (such as a bug, regression, privacy violation, half-finished task,
placeholder, or deferred work); otherwise "approve". A change that exceeds the AC without
breaking the ticket's intent is a reason to approve, not to block.
diff --git a/prompts/codex-first-pass.md b/prompts/codex-first-pass.md
index a490f53..51ab15a 100644
--- a/prompts/codex-first-pass.md
+++ b/prompts/codex-first-pass.md
@@ -31,7 +31,10 @@ verbatim and handed to a second reviewer, so do not add conversational preamble.
8. Check that in-app navigational links use React Router's Link rather than a raw ``
tag, per these rules:
{{@prompts/_shared/navigation-rules.md}}
-9. Report concrete issues — bugs, regressions, security problems, member-privacy
+9. Check whether the diff renames, moves, or deletes a name that is persisted outside
+ the codebase and read back after deploy, per these rules:
+ {{@prompts/_shared/rename-compatibility-rules.md}}
+10. Report concrete issues — bugs, regressions, security problems, member-privacy
violations, incomplete tasks/half-measures/placeholders/deferred work, and genuine misses
of the ticket's intent or clear scope creep — each with a file/line reference and a brief
rationale. Do not list "doesn't match acceptance criteria" as an issue by itself; only