Conversation
…erations keys `isOperationPointer` tested for a fixed method or `query` before `additionalOperations`, so a pointer through a lowercase key such as `additionalOperations/query` or `additionalOperations/get` (valid in 3.2, which only forbids uppercase method names there) was not seen as landing on a Path Item. A path item `$ref` into it was left as written and dangled once `additionalOperations` was removed. Check `additionalOperations` first, falling through to the fixed-method reading for a webhook or callback expression named `additionalOperations`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01867kU5KHoqdve4JdNzRsPv
Revert the lockfile churn a local `pnpm install` added to the previous commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01867kU5KHoqdve4JdNzRsPv
…tests Join both readings of an operation key with a single `||`, since neither takes priority, and fold the lowercase-key and webhook cases into one `it.each` over the pointers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01867kU5KHoqdve4JdNzRsPv
|
your Pullfrog Router balance is empty, and this repo has no provider key to fall back on, so the agent never ran. To fix, any one of: add a payment method or top up your Router balance · add a provider API key (GitHub Actions secret or Pullfrog secret) · switch this repo to a free model. Top up Router → · Model settings → · Setup docs → · Ask in Discord → |
|
The CI on Generated by Claude Code |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |

Problem
3.2 → 3.1 removes
additionalOperations, so a$refinto it has to be inlined. A Path Item$refis merged only whenfollowsPathItemsees that its pointer lands on a Path Item. That check reads the pointer from the end, andisOperationPointertried the "fixed method orquery" reading first and returned its result without trying theadditionalOperationsreading.The official 3.2 schema only forbids uppercase method names as
additionalOperationskeys, soqueryorgetis a valid key. With such a key, the pointer was read as a fixed method of a Path Item at.../additionalOperations, which is not a Path Item. The$refwas left as written and pointed into the removedadditionalOperationsin the 3.1 output.additionalOperationskey/bonmain/bwith this PRPURGE{ summary: 's', get: { operationId: 'cg', … } }queryorget{ $ref: '#/paths/~1a/additionalOperations/query/…', summary: 's' }, dangling{ summary: 's', get: { operationId: 'cg', … } }Fix
isOperationPointer(packages/downgrader/src/shared.ts) now accepts a pointer when either reading lands on a Path Item. It is an OR, not just a reordering: a webhook or callback expression may itself be namedadditionalOperations, and for#/webhooks/additionalOperations/query/...the fixed-method reading is the right one.I rejected the broader alternative,
followsPathItem = ctx.dangles(ref) && isRecord(ctx.resolve(ref)). It merges targets that are not Path Items (an Operation, a schema, a Responses map, anx-extension) into the Path Item and produces invalid output, which 4 existing tests pin.Both readings can now run, but the check stays linear in pointer length (at most about 1.5× the old work) and only runs for Path Item
$refs.Tests
tests/v3.2-to-v3.1/spec/removed-parts.test.ts, oneit.eachover three pointers:#/paths/~1a/additionalOperations/query/callbacks/c/{$url}and#/paths/~1a/additionalOperations/get/callbacks/c/{$url}fail onmain.#/webhooks/additionalOperations/query/callbacks/c/{$url}passes onmain. It fails if the checks are only reordered with an early return.Verification
pnpm lint,pnpm type:checkandpnpm test:coverage(695 tests) are clean on the merge withmain.isPathItemPointer. The combined suite passes (701 tests).🤖 Generated with Claude Code
https://claude.ai/code/session_01867kU5KHoqdve4JdNzRsPv
Generated by Claude Code