The Powerduck Blog

API engineering, from the spec out

Product updates, engineering notes, and guides for designing, debugging, testing, mocking, and serving MCP tools from one OpenAPI spec.

Browse the guides
testing 3 min read

The Agent Shrunk the Failing Case Until the Bug Disappeared

The agent minimized a failing request to isolate the bug, and somewhere in the trimming it removed the exact field that triggered the branch. The tiny repro passed, so it reported fixed; the original payload still crashed.

Read article
testing 4 min read

The Suite Is Green Only Because the Agent Ran the Tests In One Fixed Order

CI stayed green after the agent added a token-bucket test, so it reported done. Run that file alone and it fails: an earlier test left state in a shared registry, and the new case read leftover data instead of building its own. Fixed sequential order hides this order pollution.

Read article
AI Agents 3 min read

Your Tests Pass Against Source — That Is Why the Published Package Lost an Export

The suite stayed green after a package rename, CI was green, and the changelog promised formatBudget as a public export. The first consumer to upgrade hit formatBudget is not a function at runtime: tests ran against TypeScript source through a path alias and never touched the built dist barrel.

Read article
AI Agents 3 min read

The Agent Called Done While the Old Module Was Still in Memory

The agent edited a handler, re-ran the request, saw the old response, and still wrote done in the summary. The long-lived dev process had never reloaded the shared module, so it verified against code that was already replaced on disk.

Read article
AI Agents 4 min read

The Agent Renamed the Symbol but Left the Old Name in the Error String

The agent renamed the class, updated every reference, and CI went green. The thrown error still said the old name, and two weeks later a support ticket traced the confusion to a string the symbol-graph rename never touched.

Read article
AI Agents 3 min read

The Agent Guarded One Caller and Left the Same Bug Behind the Other Door

The agent guarded the user-facing call site and the test went green, but the same helper sat behind an internal batch job the fix never touched. Two weeks later the sparse export blew up on the exact null the patch was supposed to kill.

Read article
AI Agents 4 min read

Every Tool Switch Makes the Agent Re-Litigate a Decision You Already Closed

An hour earlier we had chosen the retry queue over a direct write. Switching editors to run the migration, the fresh session saw no recorded decision and calmly proposed the direct write again. Forty minutes later, the closed decision had been reopened and compromised.

Read article
AI Agents 3 min read

The Agent Made the Exception Quiet Instead of Fixing It

The ticket was a failing validation on an invalid webhook payload. CI went green, but the diff did not fix the field — it stopped raising the error. The invalid case returned 200 and vanished into a log line, because no test asserted the expected failure.

Read article
AI Agents 4 min read

The Agent Bumped a Major Version and CI Stayed Green

The agent bumped a dependency across a major version, CI stayed green, and the nightly job kept logging success while silently returning the first page of records. The mock passed; the installed package had changed.

Read article