ChatGPT Prompt For Code Review

Review code for demonstrable correctness bugs, with triggering inputs, minimal fixes and focused regression cases. Paste this prompt, then your code.

Curated by the aiprompts.page team

Example result generated with the “ChatGPT Prompt For Code Review” prompt
The Prompt

Review the code I paste after this prompt for correctness. Use supplied comments, examples and tests to establish intended behavior. If a requirement is missing, distinguish a definite language-level failure from behavior that depends on an unstated product decision. Focus on bugs that can cause wrong output, exceptions, unintended mutation, lost data, incorrect boundary handling or broken asynchronous behavior. Trace execution before reporting a problem. Do not spend the review on formatting, naming preferences or speculative abstractions. Return at most five findings, ordered by impact. For each, give the affected file and expression, a minimal realistic input, the actual behavior obtained by tracing the code, the expected behavior supported by the supplied contract, and the consequence. Explain the root cause rather than repeating the symptom. Do not invent line numbers, execution results or application requirements. If two symptoms have one cause, group them. Provide the smallest coherent patch that addresses the supported findings while preserving the public interface and unrelated behavior. If a patch requires a product decision, present the decision explicitly and ask one targeted question rather than silently choosing a new contract. Add focused regression tests for the demonstrated failures and at least one existing behavior that must remain intact. Reuse the visible testing tools. When none are supplied, prefer the language's standard testing tools and state the file layout and command required. Explain briefly why each regression case would distinguish the original implementation from the corrected one. Finish with a short list of material assumptions and unreviewed dependencies. If no supported bug is found, say so plainly. Label tests as proposed unless you actually run them; report real commands and results only when execution occurred.

Share on XShare on LinkedInShare on WhatsApp

Example result

What this prompt produced when we ran it.

Run on this sample: // cart.js // Return an updated cart without mutating cart or changes. // Existing SKUs receive the new quantity; new SKUs are added. // Remove entries whose resulting quantity is zero. export function reconcileCart(cart, changes) { const result = cart; for (const change of changes) { const index = result.findIndex(item => item.sku === change.sku); if (index) { result[index].quantity = change.quantity; } else { result.push(change); } } return result.filter(item => item.quantity > 0); } --- Two supported bugs were found. The tests below are proposed; I have not run them. ## Findings ### 1. Index truthiness breaks additions and updates to the first entry **File and expression:** `cart.js`, `if (index)` `findIndex` returns `0` for the first match and `-1` when there is no match. JavaScript treats `0` as false and `-1` as true, so neither case takes the intended branch. **Minimal input:** ```js reconcileCart([], [{ sku: "A", quantity: 1 }]); ``` **Actual behavior by tracing:** `index` is `-1`, so the code enters the update branch. `result[-1]` is `undefined`; assigning its `quantity` throws a `TypeError`. **Expected:** Return `[{ sku: "A", quantity: 1 }]`, as the comment requires adding new SKUs. The same cause also breaks first-entry updates: ```js reconcileCart( [{ sku: "A", quantity: 1 }], [{ sku: "A", quantity: 2 }] ); ``` Here, `index` is `0`, so the change is appended. The returned cart contains two `"A"` entries with quantities `1` and `2`, instead of one entry with quantity `2`. **Consequence:** New SKUs cause exceptions, while updates to the first SKU produce duplicates and can fail to remove that SKU when its new quantity is zero. ### 2. Successful updates mutate the supplied cart **File and expressions:** `cart.js`, `const result = cart` and `result[index].quantity = change.quantity` **Minimal input:** ```js const cart = [ { sku: "A", quantity: 1 }, { sku: "B", quantity: 1 }, ]; reconcileCart(cart, [{ sku: "B", quantity: 3 }]); ``` **Actual behavior by tracing:** `"B"` is found at index `1`, so its quantity is assigned through `result`. Because `result` and `cart` reference the same array and objects, `cart[1].quantity` becomes `3`. The final `filter` creates a new array but does not undo the mutation. **Expected:** Return the updated cart while leaving `cart` unchanged, as explicitly required by the comment. **Consequence:** Callers lose the original cart state. Mutation can also occur before a later change throws, leaving partially modified input after a failed call. ## Smallest coherent patch Copy the array, replace updated entries with new objects, and explicitly distinguish a missing SKU. Copy added changes so the returned cart does not share newly added entry objects with `changes`. ```js // cart.js // Return an updated cart without mutating cart or changes. // Existing SKUs receive the new quantity; new SKUs are added. // Remove entries whose resulting quantity is zero. export function reconcileCart(cart, changes) { const result = cart.slice(); for (const change of changes) { const index = result.findIndex(item => item.sku === change.sku); if (index !== -1) { result[index] = { ...result[index], quantity: change.quantity, }; } else { result.push({ ...change }); } } return result.filter(item => item.quantity > 0); } ``` This preserves existing metadata on updated entries and the existing positive-only filtering. Negative quantities are not specified clearly enough to establish a separate bug: whether they should be retained, rejected, or removed needs a product decision. ## Proposed regression tests No testing tools were supplied. Use Node.js’s standard `node:test` and `node:assert/strict`. **Layout:** ```text cart.js cart.test.mjs ``` **`cart.test.mjs`:** ```js import test from "node:test"; import assert from "node:assert/strict"; import { reconcileCart } from "./cart.js"; test("adds a missing SKU without changing either input", () => { const cart = []; const changes = [{ sku: "A", quantity: 2 }]; const result = reconcileCart(cart, changes); assert.deepEqual(result, [{ sku: "A", quantity: 2 }]); assert.deepEqual(cart, []); assert.deepEqual(changes, [{ sku: "A", quantity: 2 }]); }); test("replaces the first SKU's quantity without duplicating it", () => { const cart = [{ sku: "A", quantity: 1 }]; const changes = [{ sku: "A", quantity: 4 }]; assert.deepEqual( reconcileCart(cart, changes), [{ sku: "A", quantity: 4 }], ); assert.deepEqual(cart, [{ sku: "A", quantity: 1 }]); assert.deepEqual(changes, [{ sku: "A", quantity: 4 }]); }); test("removes the first SKU when its new quantity is zero", () => { const cart = [{ sku: "A", quantity: 1 }]; assert.deepEqual( reconcileCart(cart, [{ sku: "A", quantity: 0 }]), [], ); assert.deepEqual(cart, [{ sku: "A", quantity: 1 }]); }); test("updates a later SKU while preserving inputs and entry metadata", () => { const cart = [ { sku: "A", quantity: 1 }, { sku: "B", quantity: 2, label: "Blue" }, ]; const changes = [{ sku: "B", quantity: 5 }]; const originalCart = [ { sku: "A", quantity: 1 }, { sku: "B", quantity: 2, label: "Blue" }, ]; assert.deepEqual(reconcileCart(cart, changes), [ { sku: "A", quantity: 1 }, { sku: "B", quantity: 5, label: "Blue" }, ]); assert.deepEqual(cart, originalCart); assert.deepEqual(changes, [{ sku: "B", quantity: 5 }]); }); test("preserves unchanged positive entries and removes existing zero entries", () => { const cart = [ { sku: "A", quantity: 2 }, { sku: "B", quantity: 0 }, ]; assert.deepEqual(reconcileCart(cart, []), [ { sku: "A", quantity: 2 }, ]); assert.deepEqual(cart, [ { sku: "A", quantity: 2 }, { sku: "B", quantity: 0 }, ]); }); ``` **Proposed command**, using Node.js 22+ to treat `cart.js` as an ES module without adding package configuration: ```sh node --experimental-default-type=module --test cart.test.mjs ``` The addition test exposes the original exception. The first-entry tests expose duplicate insertion and failed zero removal. The later-entry test exposes mutation while checking that quantity replacement and metadata preservation remain intact. The final test checks existing behavior that should continue to pass. ## Material assumptions and unreviewed dependencies - Inputs are arrays of ordinary objects with SKU values and numeric quantities; validation requirements were not supplied. - Duplicate SKUs already present in `cart`, negative quantities, and invalid quantities have unspecified semantics. - The patch preserves sequential processing and first-match lookup. - No callers, package configuration, or existing tests were supplied for review.

More in Coding & Development

Related Prompts

Example result for Claude Security Review Prompt
Claude
Coding & Development

Claude Security Review Prompt

Get an evidence-based defensive review with prioritized findings, minimal fixes and regression tests. Paste this prompt, then your code.

Example result for Landing Page Prompt
ChatGPT
Coding & Development

Landing Page Prompt

Generate a ClearWeek planner landing page with pricing controls and a usable weekly planner that saves tasks locally. Paste into ChatGPT.

Example result for Animated Portfolio Website Prompt
Claude
Coding & Development

Animated Portfolio Website Prompt

Create fictional developer Mira Sen’s animated portfolio with three detailed projects, accessible case-study dialogs and working theme controls.

Example result for Gemini Gummy Bears Prompt
Gemini
Coding & Development

Gemini Gummy Bears Prompt

Build a browser playground with draggable, stretchable gummy bears, candy colors and working reset and pour controls. Paste this prompt into Gemini.