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