`Bundle` names a path item component after the escaped JSON Pointer token (`~1users`), so its `$ref` doesn't resolve
メンテナーはふだん 1 日以内に返信
関連するプルリクエストがすでにマージされています。
- #290 @TristanSpeakEasy による — マージ済み
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 72/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- go, openapi
調査の方向性
Start in openapi/bundle.go at extractSimpleNameFromReference, which the issue identifies as returning the escaped final JSON Pointer token unchanged; trace how that name is used to create the path item component and its $ref. Reproduce with the supplied /paths/~1users example, then check that the resulting component name is valid and the reference resolves. Confirm the bundled document passes openapi spec validate and openapi spec inline.
索引モデルが issue の本文から書いたものです。
説明
Summary
When a path item is referenced by JSON Pointer into another OpenAPI document (./paths/users.yaml#/paths/~1users), openapi.Bundle (and openapi spec bundle) uses the last pointer token as written, ~1users, as the component name. The bundled document gets components.pathItems.~1users and $ref: '#/components/pathItems/~1users'. Per RFC 6901 that ref names the key /users, which doesn't exist, and ~1users isn't a valid component name either (OAS 3.1 Components keys must match ^[a-zA-Z0-9\.\-_]+$). The bundle fails openapi spec validate, though the input passes.
Reproduction
openapi.yaml:
openapi: 3.1.0
info: {title: t, version: "1"}
paths:
/users:
$ref: ./paths/users.yaml#/paths/~1users
paths/users.yaml:
openapi: 3.1.0
info: {title: users, version: "1"}
paths:
/users:
get:
responses:
"200":
description: ok
$ openapi spec bundle openapi.yaml bundled.yaml
Processing OpenAPI document: openapi.yaml
✅ Successfully bundled all external references into components section
📄 Document written to: bundled.yaml
$ cat bundled.yaml
openapi: 3.1.0
info: {title: t, version: "1"}
paths:
/users:
$ref: '#/components/pathItems/~1users'
components:
pathItems:
~1users:
get:
responses:
"200":
description: ok
$ openapi spec validate bundled.yaml
Validating OpenAPI document: bundled.yaml
❌ OpenAPI document is invalid - 1 errors:
1. [5:11] error validation-invalid-syntax reference.$ref is invalid: invalid reference: component name "/users" must match pattern ^[a-zA-Z0-9.\-_]+$
Validation completed in 1ms
Error: openAPI document validation failed
openapi spec inline bundled.yaml fails the same way: failed to resolve reference #/components/pathItems/~1users: not found -- key /users not found in sequencedmap.Map. A path with a parameter gives ~1users~1{id}. --naming counter gives the same name.
Expected result
A valid component name and a $ref that resolves to it, as for a whole-file ref: $ref: ./paths/users.yaml (a file holding only the path item) bundles to components.pathItems.users, and the bundle validates.
Actual result
components.pathItems.~1users and a $ref that points at /users. The command reports success.
Version
v1.26.1 (main, 9f2ba11) and v1.26.0. CLI from go install github.com/speakeasy-api/openapi/cmd/openapi@latest (v0.0.0-20261029045548-9f2ba118224c); openapi.Bundle called directly gives the same output.
Cause
extractSimpleNameFromReference (openapi/bundle.go:1288) replaces characters outside [a-zA-Z0-9_] in file names, but for a fragment returns the last pointer token unchanged: not unescaped (~1, ~0) and not sanitized.
- 主要言語
- Go
- スター
- 276
- フォーク
- 21
- 平均マージ
- 1日 6時間
- マージ済み PR(30日)
- 23
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
似ている issue
-
docs(prompts): IF BLOCKED workflow-scope branch says to comment on the issue on jira/local trackersオープンagent-butler-finding bug
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
jordansmall/spindrift#6238 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
microcks/microcks-cli#608 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug from-studio
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
esengine/DeepSeek-Reasonix#14868 ·
メンテナーはふだん 1 日以内に返信
-
Install notes print "Camunda REST API: https://" without a host when global.host is set対応中かも @irisfield が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
camunda/camunda-platform-helm#7790 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
wso2/agent-manager#2220 ·
メンテナーはふだん 1 日以内に返信