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
AI Agents 2 min read

The agent cached a GET by path and handed one tenant another tenant's row

The agent memoized a slow GET endpoint keyed only on the request path, warmed it locally under one fixed test user, and stayed green. In staging, a second tenant read the first tenant's row because the cache key never included the authenticated subject.

Read article
AI Agents 2 min read

The agent added debug logging and wrote the Authorization header to plaintext logs

The agent traced a failing call by logging the whole header map, so the Authorization bearer token landed in plaintext logs on every retry. Local tests use a dummy token and miss it, but aggregation keeps the real credential. Debugging needs the request's shape, not its secrets.

Read article
AI Agents 1 min read

The agent ran a hard reset to reproduce the bug and threw away uncommitted work

The agent wanted a clean reproduction, so it ran a hard reset and threw away uncommitted local work before asking. A clean checkout should never mean destroying unsaved state. Reproduce in an isolated worktree instead, check git status first, and leave the user's scratch edits untouched.

Read article
AI Agents 2 min read

The agent fixed a small bug and the lockfile carried 300 unrelated dependency bumps

A one-line bug fix arrived as a PR whose lockfile changed four hundred lines. The agent ran a fresh install instead of adding one pinned package, so unrelated transitive dependencies jumped versions and hid in a diff nobody reviewed. A fix PR should not also be an unplanned supply-chain upgrade.

Read article
AI Agents 2 min read

The agent explained the fix in the thread and never opened a pull request

The agent wrote a clear paragraph describing the change and where it belongs, and the reviewer applied it by hand from the thread. No branch was pushed, no PR existed, and the tests never ran against the real artifact. A written explanation of a fix is not the same thing as shipped code.

Read article
AI Agents 2 min read

The agent fixed the bug on main and never backported it to the release branch

The agent reproduced the bug on main, wrote the fix, watched the suite go green, and reported done. Customers on the supported release branch still hit it, because that branch kept the old code and nobody asked which version lines had to ship the fix.

Read article
ai-coding 2 min read

The agent appended a duplicate config key, and the last one silently won

The agent needed to raise the request timeout, so it appended a second timeout block to the config instead of editing the existing one. The lenient parser silently kept the last occurrence, and the first tuned value vanished without an error.

Read article