@lovrozagar/honey 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +514 -192
- package/bin/honey.js +25 -0
- package/dist/accepts.d.ts +7 -1
- package/dist/accepts.d.ts.map +1 -1
- package/dist/accepts.js +126 -0
- package/dist/accepts.js.map +1 -0
- package/dist/body-kind.d.ts +26 -0
- package/dist/body-kind.d.ts.map +1 -0
- package/dist/body-kind.js +70 -0
- package/dist/body-kind.js.map +1 -0
- package/dist/body-limit.d.ts +5 -1
- package/dist/body-limit.d.ts.map +1 -1
- package/dist/body-limit.js +126 -0
- package/dist/body-limit.js.map +1 -0
- package/dist/build/index.d.ts +19 -3
- package/dist/build/index.d.ts.map +1 -1
- package/dist/build/index.js +173 -0
- package/dist/build/index.js.map +1 -0
- package/dist/cli-args.d.ts +33 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +102 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-go/auth.go +26 -0
- package/dist/cli-go/config.go +192 -0
- package/dist/cli-go/errors.go +75 -0
- package/dist/cli-go/multipart.go +79 -0
- package/dist/cli-go/output.go +163 -0
- package/dist/cli-go/root.go +30 -0
- package/dist/cli-go/stream.go +88 -0
- package/dist/cli-go/version.go +5 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +209 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/defaults.js +48 -0
- package/dist/client/defaults.js.map +1 -0
- package/dist/client/error.d.ts +35 -0
- package/dist/client/error.d.ts.map +1 -1
- package/dist/client/error.js +71 -0
- package/dist/client/error.js.map +1 -0
- package/dist/client/http.d.ts +67 -8
- package/dist/client/http.d.ts.map +1 -1
- package/dist/client/http.js +571 -0
- package/dist/client/http.js.map +1 -0
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +95 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/path.d.ts +26 -0
- package/dist/client/path.d.ts.map +1 -0
- package/dist/client/path.js +163 -0
- package/dist/client/path.js.map +1 -0
- package/dist/client/redirect-policy.d.ts +12 -0
- package/dist/client/redirect-policy.d.ts.map +1 -0
- package/dist/client/redirect-policy.js +20 -0
- package/dist/client/redirect-policy.js.map +1 -0
- package/dist/client/sdk.d.ts +36 -0
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +292 -0
- package/dist/client/sdk.js.map +1 -0
- package/dist/client/sse.d.ts +13 -0
- package/dist/client/sse.d.ts.map +1 -1
- package/dist/client/sse.js +129 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/ws.d.ts +9 -2
- package/dist/client/ws.d.ts.map +1 -1
- package/dist/client/ws.js +112 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/client-go/errors.go +236 -0
- package/dist/client-go/export.go +44 -0
- package/dist/client-go/invalidation.go +371 -0
- package/dist/client-go/nullable.go +62 -0
- package/dist/client-go/realtime.go +354 -0
- package/dist/client-go/result.go +20 -0
- package/dist/client-go/runtime.go +975 -0
- package/dist/client-go/sse.go +159 -0
- package/dist/client-go/transport.go +495 -0
- package/dist/client-go/ws.go +128 -0
- package/dist/client-info.d.ts +36 -0
- package/dist/client-info.d.ts.map +1 -0
- package/dist/client-info.js +53 -0
- package/dist/client-info.js.map +1 -0
- package/dist/client-mcp/README.md +10 -0
- package/dist/client-mcp/server.ts +221 -0
- package/dist/client-mcp/types.ts +19 -0
- package/dist/client-python/_errors.py +115 -0
- package/dist/client-python/_invalidation.py +494 -0
- package/dist/client-python/_realtime.py +179 -0
- package/dist/client-python/_runtime.py +860 -0
- package/dist/client-python/_sse.py +155 -0
- package/dist/client-python/_transport.py +366 -0
- package/dist/client-python/_ws.py +159 -0
- package/dist/client-python/py.typed +0 -0
- package/dist/client-rust/errors.rs +220 -0
- package/dist/client-rust/invalidation.rs +412 -0
- package/dist/client-rust/invalidation_sync.rs +93 -0
- package/dist/client-rust/nullable.rs +17 -0
- package/dist/client-rust/realtime.rs +702 -0
- package/dist/client-rust/result.rs +22 -0
- package/dist/client-rust/runtime.rs +980 -0
- package/dist/client-rust/runtime_sync.rs +484 -0
- package/dist/client-rust/sse.rs +188 -0
- package/dist/client-rust/ws.rs +167 -0
- package/dist/codegen-go-cli.d.ts.map +1 -1
- package/dist/codegen-go-cli.js +964 -0
- package/dist/codegen-go-cli.js.map +1 -0
- package/dist/codegen-go.d.ts +15 -3
- package/dist/codegen-go.d.ts.map +1 -1
- package/dist/codegen-go.js +872 -0
- package/dist/codegen-go.js.map +1 -0
- package/dist/codegen-hash.js +9 -0
- package/dist/codegen-hash.js.map +1 -0
- package/dist/codegen-ir.d.ts +69 -2
- package/dist/codegen-ir.d.ts.map +1 -1
- package/dist/codegen-ir.js +661 -0
- package/dist/codegen-ir.js.map +1 -0
- package/dist/codegen-lang.d.ts +65 -0
- package/dist/codegen-lang.d.ts.map +1 -0
- package/dist/codegen-lang.js +526 -0
- package/dist/codegen-lang.js.map +1 -0
- package/dist/codegen-load.d.ts +31 -0
- package/dist/codegen-load.d.ts.map +1 -0
- package/dist/codegen-load.js +138 -0
- package/dist/codegen-load.js.map +1 -0
- package/dist/codegen-loaders.js +55 -0
- package/dist/codegen-loaders.js.map +1 -0
- package/dist/codegen-mcp.d.ts.map +1 -1
- package/dist/codegen-mcp.js +368 -0
- package/dist/codegen-mcp.js.map +1 -0
- package/dist/codegen-python.d.ts +13 -1
- package/dist/codegen-python.d.ts.map +1 -1
- package/dist/codegen-python.js +828 -0
- package/dist/codegen-python.js.map +1 -0
- package/dist/codegen-route-tree-intern.d.ts +15 -5
- package/dist/codegen-route-tree-intern.d.ts.map +1 -1
- package/dist/codegen-route-tree-intern.js +221 -0
- package/dist/codegen-route-tree-intern.js.map +1 -0
- package/dist/codegen-rust.d.ts.map +1 -1
- package/dist/codegen-rust.js +1293 -0
- package/dist/codegen-rust.js.map +1 -0
- package/dist/codegen-sanitize.d.ts.map +1 -1
- package/dist/codegen-sanitize.js +56 -0
- package/dist/codegen-sanitize.js.map +1 -0
- package/dist/codegen-schema-naming.d.ts +5 -0
- package/dist/codegen-schema-naming.d.ts.map +1 -1
- package/dist/codegen-schema-naming.js +150 -0
- package/dist/codegen-schema-naming.js.map +1 -0
- package/dist/codegen-sdk-model.d.ts +71 -0
- package/dist/codegen-sdk-model.d.ts.map +1 -0
- package/dist/codegen-sdk-model.js +179 -0
- package/dist/codegen-sdk-model.js.map +1 -0
- package/dist/codegen.d.ts +41 -23
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +4610 -0
- package/dist/codegen.js.map +1 -0
- package/dist/context.d.ts +36 -6
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +242 -0
- package/dist/context.js.map +1 -0
- package/dist/cookie-sign.d.ts +16 -2
- package/dist/cookie-sign.d.ts.map +1 -1
- package/dist/cookie-sign.js +104 -0
- package/dist/cookie-sign.js.map +1 -0
- package/dist/cookie.d.ts +12 -0
- package/dist/cookie.d.ts.map +1 -1
- package/dist/cookie.js +138 -0
- package/dist/cookie.js.map +1 -0
- package/dist/cors.d.ts +1 -0
- package/dist/cors.d.ts.map +1 -1
- package/dist/cors.js +87 -0
- package/dist/cors.js.map +1 -0
- package/dist/crypto.d.ts +6 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +38 -0
- package/dist/crypto.js.map +1 -0
- package/dist/csrf.d.ts +19 -0
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +79 -0
- package/dist/csrf.js.map +1 -0
- package/dist/curl-logger.d.ts +14 -3
- package/dist/curl-logger.d.ts.map +1 -1
- package/dist/curl-logger.js +199 -0
- package/dist/curl-logger.js.map +1 -0
- package/dist/detect-runtime.js +13 -0
- package/dist/detect-runtime.js.map +1 -0
- package/dist/dict.d.ts +11 -0
- package/dist/dict.d.ts.map +1 -0
- package/dist/dict.js +13 -0
- package/dist/dict.js.map +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +44 -0
- package/dist/error.js.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/etag.d.ts +2 -0
- package/dist/etag.d.ts.map +1 -1
- package/dist/etag.js +82 -0
- package/dist/etag.js.map +1 -0
- package/dist/feature-detect.d.ts +25 -0
- package/dist/feature-detect.d.ts.map +1 -0
- package/dist/feature-detect.js +144 -0
- package/dist/feature-detect.js.map +1 -0
- package/dist/feature-load.js +36 -0
- package/dist/feature-load.js.map +1 -0
- package/dist/feature-slots.d.ts +44 -0
- package/dist/feature-slots.d.ts.map +1 -0
- package/dist/feature-slots.js +48 -0
- package/dist/feature-slots.js.map +1 -0
- package/dist/fetch-request.d.ts +10 -0
- package/dist/fetch-request.d.ts.map +1 -0
- package/dist/fetch-request.js +13 -0
- package/dist/fetch-request.js.map +1 -0
- package/dist/gen-process.d.ts +15 -0
- package/dist/gen-process.d.ts.map +1 -0
- package/dist/gen-process.js +43 -0
- package/dist/gen-process.js.map +1 -0
- package/dist/gen-write.d.ts +19 -0
- package/dist/gen-write.d.ts.map +1 -0
- package/dist/gen-write.js +120 -0
- package/dist/gen-write.js.map +1 -0
- package/dist/glob.d.ts +21 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +115 -0
- package/dist/glob.js.map +1 -0
- package/dist/go-type-emitter.d.ts +18 -4
- package/dist/go-type-emitter.d.ts.map +1 -1
- package/dist/go-type-emitter.js +594 -0
- package/dist/go-type-emitter.js.map +1 -0
- package/dist/honey-response.d.ts.map +1 -1
- package/dist/honey-response.js +338 -0
- package/dist/honey-response.js.map +1 -0
- package/dist/i18n-slot.d.ts +8 -0
- package/dist/i18n-slot.d.ts.map +1 -1
- package/dist/i18n-slot.js +14 -0
- package/dist/i18n-slot.js.map +1 -0
- package/dist/i18n.d.ts +3 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +250 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +410 -149
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2324 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +140 -0
- package/dist/init.js.map +1 -0
- package/dist/input.js +4 -0
- package/dist/input.js.map +1 -0
- package/dist/invalidate-check.d.ts +11 -0
- package/dist/invalidate-check.d.ts.map +1 -1
- package/dist/invalidate-check.js +163 -0
- package/dist/invalidate-check.js.map +1 -0
- package/dist/invoke-user.d.ts +35 -0
- package/dist/invoke-user.d.ts.map +1 -0
- package/dist/invoke-user.js +73 -0
- package/dist/invoke-user.js.map +1 -0
- package/dist/ip-restrict.d.ts +13 -1
- package/dist/ip-restrict.d.ts.map +1 -1
- package/dist/ip-restrict.js +60 -0
- package/dist/ip-restrict.js.map +1 -0
- package/dist/ip.d.ts +39 -0
- package/dist/ip.d.ts.map +1 -0
- package/dist/ip.js +209 -0
- package/dist/ip.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +113 -0
- package/dist/logger.js.map +1 -0
- package/dist/media-type.d.ts +30 -0
- package/dist/media-type.d.ts.map +1 -0
- package/dist/media-type.js +97 -0
- package/dist/media-type.js.map +1 -0
- package/dist/meta-spec-merge.d.ts +32 -0
- package/dist/meta-spec-merge.d.ts.map +1 -0
- package/dist/meta-spec-merge.js +68 -0
- package/dist/meta-spec-merge.js.map +1 -0
- package/dist/meta-spec.d.ts +16 -3
- package/dist/meta-spec.d.ts.map +1 -1
- package/dist/meta-spec.js +535 -0
- package/dist/meta-spec.js.map +1 -0
- package/dist/middleware.d.ts +23 -6
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +253 -0
- package/dist/middleware.js.map +1 -0
- package/dist/node-request.d.ts +57 -12
- package/dist/node-request.d.ts.map +1 -1
- package/dist/node-request.js +407 -0
- package/dist/node-request.js.map +1 -0
- package/dist/node.d.ts +20 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +396 -0
- package/dist/node.js.map +1 -0
- package/dist/openapi/collect.d.ts +6 -3
- package/dist/openapi/collect.d.ts.map +1 -1
- package/dist/openapi/collect.js +30 -0
- package/dist/openapi/collect.js.map +1 -0
- package/dist/openapi/docs-page.d.ts +42 -0
- package/dist/openapi/docs-page.d.ts.map +1 -0
- package/dist/openapi/docs-page.js +80 -0
- package/dist/openapi/docs-page.js.map +1 -0
- package/dist/openapi/document.d.ts +4 -0
- package/dist/openapi/document.d.ts.map +1 -1
- package/dist/openapi/document.js +785 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/json-schema-slot.d.ts +7 -0
- package/dist/openapi/json-schema-slot.d.ts.map +1 -1
- package/dist/openapi/json-schema-slot.js +38 -0
- package/dist/openapi/json-schema-slot.js.map +1 -0
- package/dist/openapi/register.d.ts.map +1 -1
- package/dist/openapi/register.js +20 -0
- package/dist/openapi/register.js.map +1 -0
- package/dist/openapi/scalar.d.ts +3 -1
- package/dist/openapi/scalar.d.ts.map +1 -1
- package/dist/openapi/scalar.js +21 -0
- package/dist/openapi/scalar.js.map +1 -0
- package/dist/openapi/serve.d.ts +9 -0
- package/dist/openapi/serve.d.ts.map +1 -0
- package/dist/openapi/serve.js +36 -0
- package/dist/openapi/serve.js.map +1 -0
- package/dist/openapi/spec-factory.d.ts +30 -1
- package/dist/openapi/spec-factory.d.ts.map +1 -1
- package/dist/openapi/spec-factory.js +52 -0
- package/dist/openapi/spec-factory.js.map +1 -0
- package/dist/openapi/spec.d.ts +14 -5
- package/dist/openapi/spec.d.ts.map +1 -1
- package/dist/openapi/spec.js +50 -0
- package/dist/openapi/spec.js.map +1 -0
- package/dist/openapi/swagger.d.ts +3 -1
- package/dist/openapi/swagger.d.ts.map +1 -1
- package/dist/openapi/swagger.js +22 -0
- package/dist/openapi/swagger.js.map +1 -0
- package/dist/pattern.d.ts +71 -0
- package/dist/pattern.d.ts.map +1 -0
- package/dist/pattern.js +239 -0
- package/dist/pattern.js.map +1 -0
- package/dist/peer.d.ts +17 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +50 -0
- package/dist/peer.js.map +1 -0
- package/dist/plugin.d.ts +67 -16
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +649 -0
- package/dist/plugin.js.map +1 -0
- package/dist/powered-by.d.ts.map +1 -1
- package/dist/powered-by.js +11 -0
- package/dist/powered-by.js.map +1 -0
- package/dist/pretty-json.d.ts.map +1 -1
- package/dist/pretty-json.js +47 -0
- package/dist/pretty-json.js.map +1 -0
- package/dist/producer-stream.d.ts +47 -0
- package/dist/producer-stream.d.ts.map +1 -0
- package/dist/producer-stream.js +267 -0
- package/dist/producer-stream.js.map +1 -0
- package/dist/proxy.d.ts +47 -8
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +274 -0
- package/dist/proxy.js.map +1 -0
- package/dist/python-type-emitter.d.ts +14 -1
- package/dist/python-type-emitter.d.ts.map +1 -1
- package/dist/python-type-emitter.js +157 -0
- package/dist/python-type-emitter.js.map +1 -0
- package/dist/realtime/bus.d.ts +17 -1
- package/dist/realtime/bus.d.ts.map +1 -1
- package/dist/realtime/bus.js +112 -0
- package/dist/realtime/bus.js.map +1 -0
- package/dist/realtime/register.d.ts +3 -0
- package/dist/realtime/register.d.ts.map +1 -0
- package/dist/realtime/register.js +10 -0
- package/dist/realtime/register.js.map +1 -0
- package/dist/realtime/route.d.ts +65 -26
- package/dist/realtime/route.d.ts.map +1 -1
- package/dist/realtime/route.js +72 -0
- package/dist/realtime/route.js.map +1 -0
- package/dist/realtime/server.d.ts +43 -0
- package/dist/realtime/server.d.ts.map +1 -0
- package/dist/realtime/server.js +255 -0
- package/dist/realtime/server.js.map +1 -0
- package/dist/request-id.d.ts +7 -0
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +16 -0
- package/dist/request-id.js.map +1 -0
- package/dist/request-limits.d.ts +3 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +3 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/request-path.d.ts +33 -0
- package/dist/request-path.d.ts.map +1 -0
- package/dist/request-path.js +178 -0
- package/dist/request-path.js.map +1 -0
- package/dist/request-to-curl.d.ts +7 -1
- package/dist/request-to-curl.d.ts.map +1 -1
- package/dist/request-to-curl.js +48 -0
- package/dist/request-to-curl.js.map +1 -0
- package/dist/response.d.ts +25 -2
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js +313 -0
- package/dist/response.js.map +1 -0
- package/dist/rust-type-emitter.d.ts +14 -2
- package/dist/rust-type-emitter.d.ts.map +1 -1
- package/dist/rust-type-emitter.js +463 -0
- package/dist/rust-type-emitter.js.map +1 -0
- package/dist/secure-headers.d.ts.map +1 -1
- package/dist/secure-headers.js +53 -0
- package/dist/secure-headers.js.map +1 -0
- package/dist/serve-register.d.ts +4 -0
- package/dist/serve-register.d.ts.map +1 -1
- package/dist/serve-register.js +9 -0
- package/dist/serve-register.js.map +1 -0
- package/dist/serve-slot.d.ts +3 -0
- package/dist/serve-slot.d.ts.map +1 -1
- package/dist/serve-slot.js +52 -0
- package/dist/serve-slot.js.map +1 -0
- package/dist/serve.d.ts +18 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +157 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-timing.d.ts.map +1 -1
- package/dist/server-timing.js +51 -0
- package/dist/server-timing.js.map +1 -0
- package/dist/static.d.ts +9 -0
- package/dist/static.d.ts.map +1 -1
- package/dist/static.js +102 -0
- package/dist/static.js.map +1 -0
- package/dist/telemetry/otel.d.ts +2 -0
- package/dist/telemetry/otel.d.ts.map +1 -1
- package/dist/telemetry/otel.js +135 -0
- package/dist/telemetry/otel.js.map +1 -0
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +124 -0
- package/dist/testing.js.map +1 -0
- package/dist/timeout.d.ts +6 -0
- package/dist/timeout.d.ts.map +1 -1
- package/dist/timeout.js +36 -0
- package/dist/timeout.js.map +1 -0
- package/dist/tree.d.ts +133 -36
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +437 -0
- package/dist/tree.js.map +1 -0
- package/dist/trust.d.ts +21 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +100 -0
- package/dist/trust.js.map +1 -0
- package/dist/ts-type-emitter.d.ts.map +1 -1
- package/dist/ts-type-emitter.js +150 -0
- package/dist/ts-type-emitter.js.map +1 -0
- package/dist/type-emitter.d.ts +16 -2
- package/dist/type-emitter.d.ts.map +1 -1
- package/dist/type-emitter.js +729 -0
- package/dist/type-emitter.js.map +1 -0
- package/dist/type-extractor.d.ts +8 -4
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +776 -0
- package/dist/type-extractor.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +96 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +14 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +335 -0
- package/dist/validation.js.map +1 -0
- package/dist/with-headers.d.ts +15 -0
- package/dist/with-headers.d.ts.map +1 -0
- package/dist/with-headers.js +45 -0
- package/dist/with-headers.js.map +1 -0
- package/dist/ws/bun.d.ts +11 -5
- package/dist/ws/bun.d.ts.map +1 -1
- package/dist/ws/bun.js +82 -0
- package/dist/ws/bun.js.map +1 -0
- package/dist/ws/cloudflare.d.ts +25 -3
- package/dist/ws/cloudflare.d.ts.map +1 -1
- package/dist/ws/cloudflare.js +117 -0
- package/dist/ws/cloudflare.js.map +1 -0
- package/dist/ws/deno.d.ts +4 -4
- package/dist/ws/deno.d.ts.map +1 -1
- package/dist/ws/deno.js +133 -0
- package/dist/ws/deno.js.map +1 -0
- package/dist/ws/node.d.ts +20 -3
- package/dist/ws/node.d.ts.map +1 -1
- package/dist/ws/node.js +173 -0
- package/dist/ws/node.js.map +1 -0
- package/dist/ws/session.d.ts +11 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +60 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/shared.d.ts +65 -0
- package/dist/ws/shared.d.ts.map +1 -0
- package/dist/ws/shared.js +103 -0
- package/dist/ws/shared.js.map +1 -0
- package/dist/ws-origin.d.ts +20 -0
- package/dist/ws-origin.d.ts.map +1 -0
- package/dist/ws-origin.js +41 -0
- package/dist/ws-origin.js.map +1 -0
- package/dist/yaml.d.ts +15 -1
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +101 -0
- package/dist/yaml.js.map +1 -0
- package/docs/invalidate-spec.md +13 -1
- package/docs/meta-spec.md +36 -12
- package/docs/packaging.md +43 -24
- package/docs/regression-matrix/README.md +32 -0
- package/docs/regression-matrix/review.md +44 -0
- package/docs/regression-matrix/ws1-3.md +97 -0
- package/docs/regression-matrix/ws4-8.md +107 -0
- package/docs/regression-matrix/ws9-12.md +266 -0
- package/docs/sdk.md +102 -52
- package/package.json +183 -52
- package/src/accepts.ts +91 -33
- package/src/body-kind.ts +67 -0
- package/src/body-limit.ts +102 -87
- package/src/build/index.ts +104 -54
- package/src/cli-args.ts +123 -0
- package/src/cli-go/auth.go +12 -1
- package/src/cli-go/config.go +29 -2
- package/src/cli-go/errors.go +28 -10
- package/src/cli-go/multipart.go +51 -27
- package/src/cli-go/output.go +58 -4
- package/src/cli-go/root.go +1 -1
- package/src/cli-go/version.go +2 -2
- package/src/cli.ts +154 -148
- package/src/client/error.ts +56 -1
- package/src/client/http.ts +479 -256
- package/src/client/index.ts +55 -17
- package/src/client/path.ts +169 -0
- package/src/client/redirect-policy.ts +19 -0
- package/src/client/sdk.ts +180 -101
- package/src/client/sse.ts +92 -66
- package/src/client/ws.ts +67 -31
- package/src/client-go/errors.go +41 -12
- package/src/client-go/export.go +44 -0
- package/src/client-go/invalidation.go +52 -54
- package/src/client-go/nullable.go +62 -0
- package/src/client-go/realtime.go +147 -110
- package/src/client-go/runtime.go +646 -88
- package/src/client-go/sse.go +104 -94
- package/src/client-go/transport.go +67 -27
- package/src/client-go/ws.go +49 -25
- package/src/client-info.ts +79 -0
- package/src/client-mcp/server.ts +133 -3
- package/src/client-python/_invalidation.py +207 -291
- package/src/client-python/_realtime.py +63 -40
- package/src/client-python/_runtime.py +501 -119
- package/src/client-python/_sse.py +130 -74
- package/src/client-python/_transport.py +37 -9
- package/src/client-python/_ws.py +50 -22
- package/src/client-rust/errors.rs +21 -1
- package/src/client-rust/invalidation.rs +202 -231
- package/src/client-rust/invalidation_sync.rs +16 -229
- package/src/client-rust/nullable.rs +17 -0
- package/src/client-rust/realtime.rs +217 -217
- package/src/client-rust/runtime.rs +602 -177
- package/src/client-rust/runtime_sync.rs +169 -145
- package/src/client-rust/sse.rs +142 -121
- package/src/client-rust/ws.rs +61 -37
- package/src/codegen-go-cli.ts +607 -728
- package/src/codegen-go.ts +710 -770
- package/src/codegen-ir.ts +381 -75
- package/src/codegen-lang.ts +517 -0
- package/src/codegen-load.ts +150 -0
- package/src/codegen-mcp.ts +207 -108
- package/src/codegen-python.ts +684 -816
- package/src/codegen-route-tree-intern.ts +51 -25
- package/src/codegen-rust.ts +946 -1240
- package/src/codegen-sanitize.ts +0 -4
- package/src/codegen-schema-naming.ts +19 -6
- package/src/codegen-sdk-model.ts +228 -0
- package/src/codegen.ts +1488 -1140
- package/src/context.ts +130 -11
- package/src/cookie-sign.ts +85 -16
- package/src/cookie.ts +66 -11
- package/src/cors.ts +55 -54
- package/src/crypto.ts +27 -5
- package/src/csrf.ts +57 -25
- package/src/curl-logger.ts +155 -114
- package/src/dict.ts +12 -0
- package/src/error.ts +4 -2
- package/src/etag.ts +58 -34
- package/src/feature-detect.ts +147 -0
- package/src/feature-slots.ts +70 -0
- package/src/fetch-request.ts +13 -0
- package/src/gen-process.ts +42 -0
- package/src/gen-write.ts +127 -0
- package/src/glob.ts +109 -0
- package/src/go-type-emitter.ts +406 -155
- package/src/honey-response.ts +36 -9
- package/src/i18n-slot.ts +10 -0
- package/src/i18n.ts +98 -23
- package/src/index.ts +1893 -1761
- package/src/init.ts +40 -28
- package/src/invalidate-check.ts +42 -4
- package/src/invoke-user.ts +95 -0
- package/src/ip-restrict.ts +47 -161
- package/src/ip.ts +194 -0
- package/src/logger.ts +65 -36
- package/src/media-type.ts +104 -0
- package/src/meta-spec-merge.ts +80 -0
- package/src/meta-spec.ts +0 -0
- package/src/middleware.ts +112 -12
- package/src/node-request.ts +242 -52
- package/src/node.ts +318 -75
- package/src/openapi/collect.ts +19 -44
- package/src/openapi/docs-page.ts +89 -0
- package/src/openapi/document.ts +503 -224
- package/src/openapi/json-schema-slot.ts +40 -0
- package/src/openapi/register.ts +7 -2
- package/src/openapi/scalar.ts +11 -10
- package/src/openapi/serve.ts +39 -0
- package/src/openapi/spec-factory.ts +50 -1
- package/src/openapi/spec.ts +53 -30
- package/src/openapi/swagger.ts +12 -11
- package/src/pattern.ts +245 -0
- package/src/peer.ts +53 -0
- package/src/plugin.ts +270 -185
- package/src/powered-by.ts +2 -2
- package/src/pretty-json.ts +25 -9
- package/src/producer-stream.ts +296 -0
- package/src/proxy.ts +271 -55
- package/src/python-type-emitter.ts +68 -56
- package/src/realtime/bus.ts +56 -9
- package/src/realtime/register.ts +13 -0
- package/src/realtime/route.ts +129 -80
- package/src/realtime/server.ts +298 -0
- package/src/request-id.ts +13 -3
- package/src/request-limits.ts +2 -0
- package/src/request-path.ts +165 -0
- package/src/request-to-curl.ts +28 -7
- package/src/response.ts +143 -103
- package/src/rust-type-emitter.ts +265 -170
- package/src/secure-headers.ts +8 -4
- package/src/serve-register.ts +4 -0
- package/src/serve-slot.ts +38 -0
- package/src/serve.ts +113 -25
- package/src/server-timing.ts +11 -7
- package/src/static.ts +85 -32
- package/src/telemetry/otel.ts +29 -7
- package/src/testing.ts +76 -14
- package/src/timeout.ts +15 -7
- package/src/tree.ts +405 -333
- package/src/trust.ts +117 -0
- package/src/ts-type-emitter.ts +18 -12
- package/src/type-emitter.ts +227 -89
- package/src/type-extractor.ts +562 -424
- package/src/types.ts +8 -0
- package/src/validation.ts +221 -96
- package/src/with-headers.ts +45 -0
- package/src/ws/bun.ts +53 -15
- package/src/ws/cloudflare.ts +81 -19
- package/src/ws/deno.ts +124 -36
- package/src/ws/node.ts +173 -79
- package/src/ws/session.ts +73 -0
- package/src/ws/shared.ts +140 -0
- package/src/ws-origin.ts +53 -0
- package/src/yaml.ts +45 -22
- package/dist/client-mcp/server.d.ts +0 -10
- package/dist/client-mcp/server.d.ts.map +0 -1
- package/dist/client-mcp/types.d.ts +0 -16
- package/dist/client-mcp/types.d.ts.map +0 -1
- package/dist/cloudflare/realtime.d.ts +0 -30
- package/dist/cloudflare/realtime.d.ts.map +0 -1
- package/dist/realtime/buffer.d.ts +0 -18
- package/dist/realtime/buffer.d.ts.map +0 -1
- package/dist/realtime/longpoll.d.ts +0 -23
- package/dist/realtime/longpoll.d.ts.map +0 -1
- package/dist/realtime/protocol.d.ts +0 -50
- package/dist/realtime/protocol.d.ts.map +0 -1
- package/dist/realtime/runtime.d.ts +0 -74
- package/dist/realtime/runtime.d.ts.map +0 -1
- package/src/cloudflare/realtime.ts +0 -234
- package/src/realtime/buffer.ts +0 -101
- package/src/realtime/longpoll.ts +0 -148
- package/src/realtime/protocol.ts +0 -128
- package/src/realtime/runtime.ts +0 -427
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Regression matrix: workstreams 9–12
|
|
2
|
+
|
|
3
|
+
OpenAPI and the manifest, codegen (TypeScript, type extraction, MCP, Go, Rust, Python, Go CLI), the
|
|
4
|
+
client runtimes, and tooling.
|
|
5
|
+
|
|
6
|
+
Most findings here were already guarded by tests written
|
|
7
|
+
alongside their fixes. Each of those tests was run against `3ab88ce` on its own, and the reason for
|
|
8
|
+
the failure was checked; they now carry a `// regression: <id>` comment. Findings with no such
|
|
9
|
+
test got a new one in `packages/core/tests/regression/ws9-12/`:
|
|
10
|
+
|
|
11
|
+
- `typescript.regression.test.ts`: generated TypeScript that must parse (H40), schema-name hash
|
|
12
|
+
collisions, trailing slashes in spec paths, and the `ctx.retry()` failure path.
|
|
13
|
+
- `tooling.regression.test.ts`: generated-file writes, watch globs, stale outputs, the CLI watch
|
|
14
|
+
loop and the Node config hand-off.
|
|
15
|
+
- `polyglot.regression.test.ts` (opt-in, `test:harness`): the Go, Rust, Python and Go CLI SDKs.
|
|
16
|
+
Runtime findings run the programs in `checks/` against a mock server in the test process that
|
|
17
|
+
records every request; the programs use only API that both trees generate, so one build per
|
|
18
|
+
language serves every check, and Go reaches methods through reflection so a signature that
|
|
19
|
+
differs between the trees fails one check, not the build. Compile findings generate an SDK from
|
|
20
|
+
a one-finding document and compile it with `go vet`, `cargo check`, or `compileall` plus mypy.
|
|
21
|
+
The Python half uses the harness venv (`.cache/python-venv`, see the README test section) or
|
|
22
|
+
`HONEY_PYTHON`.
|
|
23
|
+
|
|
24
|
+
Abbreviations: `ts` = `regression/ws9-12/typescript.regression.test.ts`, `tooling` =
|
|
25
|
+
`regression/ws9-12/tooling.regression.test.ts`, `poly` = `regression/ws9-12/polyglot.regression.test.ts`;
|
|
26
|
+
other paths are relative to `packages/core/tests/`. "Yes" means the test fails on `3ab88ce` for the
|
|
27
|
+
reason the finding describes; the observed failure follows.
|
|
28
|
+
|
|
29
|
+
Scope: Critical, High and Medium findings, plus the Lows that were cheap. Findings in the
|
|
30
|
+
realtime protocol (resume, ready, ping, long-poll, the SDK resumable connections) are deferred by
|
|
31
|
+
the realtime decision and are not listed, except where a crash fix shipped.
|
|
32
|
+
|
|
33
|
+
## Workstream 9: OpenAPI and manifest
|
|
34
|
+
|
|
35
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
36
|
+
| -------- | --- | ----------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------ |
|
|
37
|
+
| H31 | H | `_openApiCache` per instance: two `openapi()` calls serve one document | unit/openapi/serve-endpoints: "an internal and a public document never share a cache, whichever is hit first" | Yes: the public path served `Internal` | |
|
|
38
|
+
| H32 | H | A mounted sub-app's `openapi()` hijacks the gateway's spec endpoint | unit/openapi/serve-endpoints: "the gateway serves its own document when the sub also called openapi()" (both orders) | Yes: `Sub` served for the gateway | |
|
|
39
|
+
| H33 | H | One unrepresentable Zod node replaces the whole schema | unit/codegen/schema-to-json-schema-io: "an unrepresentable z.custom degrades only its node", "an unrepresentable search field keeps every other parameter" | Yes: vendor envelope; no parameters | |
|
|
40
|
+
| H34 | H | Wildcards are not path params; `all()` emits an `all` key | unit/openapi/document-policy: "a named wildcard is a path parameter, an unnamed one too", "all() documents the standard methods…" | Yes: `/files/*path`, `/star/**`; `all` | |
|
|
41
|
+
| M | M | `toOpenApiPath` disagrees with the router (`openapi/collect.ts:15-27`) | unit/openapi/document-conformance: "every operation, with its declared path parameters filled in, reaches a handler" | Yes: `/u/{user}-id` with param `user-id` | |
|
|
42
|
+
| M | M | Several content types overwrite each other (`openapi/document.ts:375,421,438`) | unit/openapi/document-policy: "json and form bodies of one route are both documented", "two response content types of one status keep their own schemas" | Yes: one content type left | The redirect + JSON half has no separate test |
|
|
43
|
+
| M | M | WS operations bypass `filterRoutes` and `x-internal`, and overwrite a GET (`openapi/document.ts:538-597`) | unit/openapi/document-policy: "go through filterRoutes and meta.internal, and never replace an HTTP GET", "drop x-internal search fields" | Yes | |
|
|
44
|
+
| M | M | `/manifest.json` publishes raw meta for every route (`codegen.ts:1192-1200`) | unit/openapi/document-policy: "applies the document's visibility policy", "the /manifest.json route serves the published view" | Yes: hidden routes listed | |
|
|
45
|
+
| decision | — | `meta.internal` routes published in the served document | unit/openapi/meta-spec: "built-in `internal` stays hidden and does not trip totality" | Yes | |
|
|
46
|
+
| M | M | YAML emitter writes invalid or different YAML (`src/yaml.ts`) | unit/codegen/yaml: "skips undefined keys…", "Date becomes its ISO string…", "quotes every string a parser could read differently" | Yes: `null`, `{}`, parse error | |
|
|
47
|
+
| M | M | Standalone `spec()` emits hollow documents, leaks options into `info`, never invalidates, cannot serve two apps (`openapi/spec.ts:20-47`) | unit/openapi/document-policy: "documents bodies and parameters…", "rebuilds after routes change…"; unit/openapi/serve-endpoints: "one spec() handler mounted on two apps documents each app" | Yes: options in `info`; stale paths; "Cannot redefine property" | |
|
|
48
|
+
| M | M | Spec routes not mounted behind an earlier `/:slug` or `/*rest` GET (`index.ts:1020-1032`) | unit/openapi/serve-endpoints: "a root /:slug or /*rest route does not shadow the spec routes" | Yes: `openapi({ docs })` throws "cannot mount at /docs: already registered" | The old code mistakes the catch-all for a registered `/docs` |
|
|
49
|
+
| M | M | `invalidate` selectors never validated (`meta-spec.ts:182`) | unit/openapi/document-policy: "an invalidate selector that names no route fails generation" | Yes: resolves | |
|
|
50
|
+
| M | M | `anyOf` becomes `oneOf`; recursive `$ref: "#"` after hoisting (`codegen-sanitize.ts:34-36`) | unit/openapi/document-policy: "unions stay anyOf…", "a recursive schema's self-reference points at its component…" | Yes | |
|
|
51
|
+
| M | M | Valibot converter gaps (`codegen.ts:87-149`) | unit/codegen/valibot-json-schema: "nullish and exactOptional entries are optional", "strictObject forbids extra keys…", "variant is a union; lazy resolves…" | Yes | |
|
|
52
|
+
| M | M | Cached spec re-serialized per request; failed generation re-runs per request (`index.ts:968`) | unit/openapi/serve-endpoints: "generates and serializes once per route change, however many requests"; unit/openapi/serve: "caches a failed generation until the routes change, then retries" | Yes: 5 generations; retried every request | |
|
|
53
|
+
| M | M | A sub-app's `strict: "off"` downgrades the parent (`index.ts:1346`) | unit/openapi/serve-endpoints: "a sub's strict: "off" does not downgrade the parent's resolved strictness" (both orders) | Yes | |
|
|
54
|
+
| M | M | `normalizeSecurity` returns `[]` for object or mixed values; scheme names unchecked (`meta-spec.ts:49-64,181`) | unit/codegen/codegen: the five "normalizeSecurity …" tests; unit/openapi/document-policy: "a security scheme missing from securitySchemes fails generation" | Yes | |
|
|
55
|
+
| L | L | Invalidate check: profile without `x-invalidate`; entity with no tagged reader | unit/openapi/document-policy: the two "invalidate check" tests | Yes | |
|
|
56
|
+
| L | L | `route(sub)` before `metaSpec()` throws | unit/openapi/serve-endpoints: "metaSpec() after route(sub) merges instead of throwing" | Yes: "already declared" | |
|
|
57
|
+
| L | L | Docs HTML misses `stripPrefix` | unit/openapi/serve-endpoints: "the docs UI points at the stripped prefix the browser sees" | Yes | |
|
|
58
|
+
| L | L | `trailingSlash("enforce")` paths lose the slash | ts: "L (trailing slash): with trailingSlash(enforce) spec paths keep the slash clients must send" | Yes: `/users/{id}` | |
|
|
59
|
+
| L | L | `filterRoutes` gets `meta: null` | unit/openapi/document-policy: "receives an object for meta, never null" | Yes: TypeError | |
|
|
60
|
+
| L | L | Duplicate detection ignores `on`/`profiles`; duplicate `operationId`s emitted | unit/openapi/document-policy: "entries for different targets or disjoint profiles are not duplicates", "two routes declaring the same operationId fail generation" | Yes | |
|
|
61
|
+
| L | L | Non-`x-` top-level `_generated` key | tooling: "L (plugin.ts:332,342): generated OpenAPI and manifest carry no non-x- top-level `_generated` key" | Yes | |
|
|
62
|
+
| L | L | Spec and manifest served with no gating, cache headers or ETag | unit/openapi/serve-endpoints: "sends a strong ETag with no-cache…", "enabled: false mounts nothing" | Yes | |
|
|
63
|
+
|
|
64
|
+
## Workstream 10: codegen
|
|
65
|
+
|
|
66
|
+
### TypeScript, MCP and type extraction
|
|
67
|
+
|
|
68
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
69
|
+
| ----------- | --- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
70
|
+
| M (was H39) | M | `declare module "honey"` never augments the real package | unit/codegen/invalidate-meta: "emits declare module with HoneyCodegen routeSelector" | Yes | |
|
|
71
|
+
| H40 | H | Raw string interpolation in generated TypeScript | ts: the four "H40: …" tests (literals, hyphenated param, error keys, meta key into `routes.gen.ts`) | Yes: each output fails to parse | |
|
|
72
|
+
| H37b | H | Generated client drops the body on SSE operations | unit/sdk/generated-runtime-fixes: "a POST SSE operation sends its JSON body and runs onRequest/onResponse hooks" | Yes: no body | |
|
|
73
|
+
| H35b | H | Generated SDK lets `..`/`.` collapse segments | conformance/generated-sdk: "dot-dot param rejected", "dot param rejected", "empty param rejected" | Yes: the request is sent | |
|
|
74
|
+
| M | M | Routes expanding to several operations share one `operationId` (`codegen.ts:295-317`) | unit/openapi/document-policy: "one route expanded into several operations gets method and variant suffixes" | Yes | |
|
|
75
|
+
| M | M | Wildcard routes unusable in OpenAPI and the SDK | unit/openapi/document-policy (H34 rows); conformance/generated-sdk: "wildcard spans segments" | Yes | |
|
|
76
|
+
| M | M | Resource names collide with client members and `Object.prototype` | unit/sdk/generated-runtime-fixes: "renames colliding resources…", "keeps state, dispose and String(sdk) working…" | Yes | |
|
|
77
|
+
| M | M | Stream request bodies: no `duplex: "half"`, `new Request` over a consumed stream | unit/sdk/generated-runtime-fixes: "send with duplex: half, and an onResponse hook still gets a Request" | Yes: "Response body object should not be disturbed or locked" | |
|
|
78
|
+
| M | M | Idempotency key written into the caller's input | unit/sdk/generated-runtime-fixes: "are never written into the caller's input…" | Yes | The `randomUUID` fallback half has no test |
|
|
79
|
+
| M | M | Output order depends on locale (`localeCompare`) | unit/codegen/ts-type-emitter: "fields are ordered by code unit, not locale" | Yes | One call site; the rest are covered by snapshot determinism, not by a locale switch |
|
|
80
|
+
| H (was M) | H | Several content types share one schema name; dangling `$ref` (`codegen.ts:580-596`) | unit/openapi/document-policy: "deduplicateSchemas keys slots by content type…", "an existing component is never overwritten by a derived name" | Yes | |
|
|
81
|
+
| M | M | `allOf` over a union, typed `additionalProperties`, unresolved `$ref`, depth cut-off (`ts-type-emitter.ts`) | unit/codegen/ts-type-emitter: the four precedence/maps/depth tests | Yes | |
|
|
82
|
+
| L | L | Prototype pollution from `operationId: "__proto__.polluted"` | unit/sdk/generated-runtime-fixes: "an operationId of **proto**.x never reaches Object.prototype during generation" | Yes | On 3ab88ce it pollutes the test process: later tests in that file fail with `Invalid option … "polluted"` unless run alone |
|
|
83
|
+
| L | L | `default` response key parsed as `NaN` | unit/openapi/document-policy and unit/sdk/generated-runtime-fixes: "…`default` response…" | Yes | |
|
|
84
|
+
| L | L | Fallback Zod converters (`codegen.ts:1000-1018`) | — | — | Not covered: only reached for a Zod schema without `toJSONSchema` |
|
|
85
|
+
| L | L | 24-bit name hash collisions | ts: "L (codegen-hash.ts:2-8): two shapes whose 24-bit name hashes collide keep their own schemas" | Yes: `text/plain` resolves to `aR` | The old `unit/openapi/document-policy` hash test passes on `3ab88ce` (no collision path) and is kept only as a HEAD check |
|
|
86
|
+
| L | L | Header/cookie params missing; SDK name and stem unvalidated | unit/sdk/generated-runtime-fixes: "header and cookie params reach the input type…", "rejects an SDK name or stem…" | Yes | Orphan components have no test |
|
|
87
|
+
| L | L | MCP: injection through `operationId` and `projectName`; tool names | unit/codegen/codegen-mcp-hardening: "an operationId with quotes … do not inject code", "tool names are sanitized…" | Yes: the generated source fails to parse | |
|
|
88
|
+
| M | M | MCP: a `$ref` cycle hangs generation | unit/codegen/codegen-mcp-hardening: "a pure $ref cycle is an error, not a hang", "shared $refs are expanded once each" | Yes: stack overflow; no result within 60 s | "a self-referential $ref terminates" passes on `3ab88ce` and is not a guard |
|
|
89
|
+
| M | M | MCP: base URL guessed as `https://api.<project>.com` | unit/codegen/codegen-mcp-hardening: "server.ts requires an explicit base URL" | Yes | |
|
|
90
|
+
| M | M | MCP: tool arguments reach the SDK unvalidated | unit/codegen/codegen-mcp-hardening: "credential headers are never tool arguments" | Yes | The `callTool` validation tests use API that did not exist at `3ab88ce` |
|
|
91
|
+
| H71 | H | Middleware ctx types keyed without basePath | unit/codegen/type-extractor-hardening: both "(H71)" tests | Yes | |
|
|
92
|
+
| H72 | H | Emitted `import()` references do not resolve | unit/codegen/type-extractor-hardening: "(H72)" test | Yes | |
|
|
93
|
+
| H73 | H | `serialize()` writes wrong types | unit/codegen/type-extractor-hardening: both "(H73)" tests | Yes | |
|
|
94
|
+
| M | M | Stack overflow on Zod 4 getter recursion | unit/codegen/type-emitter-hardening: "Zod 4 getter recursion becomes a named alias…" | Yes: stack overflow | |
|
|
95
|
+
| M | M | Numeric enums, bigint, intersection, tuple rest, map/set (`type-emitter.ts`) | unit/codegen/type-emitter-hardening: the four literal/shape tests | Yes | |
|
|
96
|
+
| L | L | Types need a top-level `const app` | unit/codegen/type-extractor-hardening: "accepts `export default honey()`" | Yes | |
|
|
97
|
+
|
|
98
|
+
### Go, Rust, Python and Go CLI emitters
|
|
99
|
+
|
|
100
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
101
|
+
| --------- | --- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
102
|
+
| H41 | H | Rust SSE never attaches method, query, body, headers; an integer query does not compile | poly: "Rust runtime H41: an SSE operation sends its method, query, body and auth"; compile "H41 (an integer query param on an SSE operation compiles)" | Yes: `GET`; E0308 | |
|
|
103
|
+
| H42 | H | SSE on non-GET: Go sends GET, Python drops the body, the CLI does not compile | poly: Go and Python "H42: …" runtime tests; compile "H42 (the CLI compiles a POST SSE operation with a body)" | Yes: `GET`; empty body; `bodyBytes` unused | |
|
|
104
|
+
| H43 | H | Python `types.py` writes raw keys as attributes | poly compile: "H43 (JSON keys that are not identifiers)" | Yes: SyntaxError at `2fa` | |
|
|
105
|
+
| H44 | H | Sync Python SDK raises `NameError` for a namespace with only streaming ops | poly compile: "H44 (a root namespace with only streaming operations)" | Yes: `_SyncEventsResource` | |
|
|
106
|
+
| H45 | H | Python query params named like SDK arguments | poly compile: "H45 (query params named like the SDK's arguments)" | Yes: duplicate argument `timeout` | |
|
|
107
|
+
| H46 | H | Go receiver collides with `q` | poly compile: "H46 (a namespace starting with q)" | Yes | |
|
|
108
|
+
| H47 | H | Path params emitted as raw identifiers | poly compile: "H47 …" (Go, Rust) | Yes: `type` | |
|
|
109
|
+
| H48 | H | Multi-line descriptions escape comments; docstrings break | poly compile: "H48 …" (Go, Rust, Python) | Yes | |
|
|
110
|
+
| H49 | H | Enum values become identifiers without sanitizing | poly compile: "H49 …" (Go, Rust) | Yes: `-created_at`; `Self` | |
|
|
111
|
+
| H50 | H | Go and Python send no multipart or urlencoded body | poly: Go "H50: an urlencoded body is sent", "H50: a multipart body is sent"; Python "H50: an urlencoded body is sent" | Yes: the methods take no body | Python multipart fixed after the matrix (see below) (see below); its test is skipped |
|
|
112
|
+
| H51 | H | Go array/nullable/bracketed/`headers` params do not compile; Rust `timeout`/`headers`; Rust arrays sent as JSON | poly compile: "H51 …" (Go, Rust); "Rust runtime H51: an array query param repeats its key" | Yes: compile errors; `ids=["a","b"]` | |
|
|
113
|
+
| H52 | H | Schemas named like runtime types: Go `Config` dropped, Rust `Error`/`Option`/`Result`, Python `NotFoundError` | poly compile: the three "H52 …" cases | Yes: `Config.Get` returns the SDK config; E0107; not an exception | |
|
|
114
|
+
| H53 | H | Rust sync client references an undefined `…ResourceSync` | poly compile: "H53 (a namespace with only nested methods)" | Yes: unresolved import | |
|
|
115
|
+
| H54 | H | CLI flag and variable collisions | poly compile: "H54 (CLI flags and variables never collide)" | Yes: redeclared vars | |
|
|
116
|
+
| M | M | Rust hoisted names collide silently | poly compile: "M (rust-type-emitter.ts:138-140): hoisted names never merge" | Yes: no field `b` | Compiles on `3ab88ce`; the test reads both fields |
|
|
117
|
+
| M | M | Only direct self-reference boxed (Rust); recursive structs (Go) | poly compile: "M (rust-type-emitter.ts:271,403): mutual recursion compiles" (Go, Rust) | Yes: E0072; invalid recursive type | |
|
|
118
|
+
| M | M | Unions: Go loses variant data; Rust tagged unions with inline variants do not compile | poly: "Go runtime M (go-type-emitter.ts:315-323)…"; compile "M (rust-type-emitter.ts:326-368)…" | Yes: `payload: null`; `Variant` defined twice | |
|
|
119
|
+
| M | M | Go `additionalProperties` beside fields is a no-op | poly: "Go runtime M (go-type-emitter.ts:363-388)…" | Yes: extra key lost | |
|
|
120
|
+
| M | M | `text/plain` 2xx bodies JSON-decoded (Go, Rust) | poly: Go and Rust "…a text/plain 2xx body is not JSON-decoded" | Yes: decode error | |
|
|
121
|
+
| M | M | Inline array responses lose their hoisted item type | poly compile: "M (codegen-rust.ts:107; codegen-go.ts:161)…" [rust] | Yes: `BodyItem` undefined | The [go] case compiles on `3ab88ce` too: the Go half did not reproduce |
|
|
122
|
+
| M | M | Field identifiers and struct tags not sanitized | poly compile: "M (go-type-emitter.ts:33-35,50-52,347)…" (Go, Rust) | Yes | |
|
|
123
|
+
| M | M | Auth differs per language: the CLI always sends Bearer | poly: "Go CLI runtime M (codegen-go-cli.ts:918,948)…" | Yes: no `x-api-key` | Go/Rust WS dial auth has no test |
|
|
124
|
+
| NEW | M | Rust sends nullable query strings JSON-quoted | poly: "Rust runtime NEW (M): a nullable query string is sent without JSON quotes" | Yes: `maybe=%22foo%22` | |
|
|
125
|
+
| NEW | L | Python return annotations are `TypedDict(...)` calls | poly compile: "NEW (L): return annotations are valid for type checkers" | Yes: mypy `valid-type` | |
|
|
126
|
+
| M | M | Python class-name collisions (`sync.contacts` vs `contacts`) | poly compile: "M (codegen-python.ts:219-227,740)…" | Yes: the nested resource calls the wrong class | |
|
|
127
|
+
| M | M | Rust `throwOnError: false` does nothing | poly compile: "M (codegen-rust.ts:176-197; runtime.rs:357-370): safe mode returns an API error inside SdkResult" | Yes: the 404 is an `Err` | |
|
|
128
|
+
| M | M | Path params `..`, `.`, `""` not rejected in Go, Python, Rust | poly: the three "…path params are refused before sending" runtime tests | Yes: requests sent | |
|
|
129
|
+
| M | M | CLI enum values raw in `fmt.Errorf`; query params shadow global flags | poly compile: "M (codegen-go-cli.ts:800,812)…", "M (codegen-go-cli.ts:395-400)…" | Yes: syntax error; redeclared | |
|
|
130
|
+
| H (was M) | H | CLI resource `root` overwrites `cmd/root.go` | poly compile: "H (codegen-go-cli.ts:372,1170-1172)…" | Yes: `configFromCtx` undefined | |
|
|
131
|
+
| M | M | Python `types.py` aliases are `NewType(Any)` | poly compile: "M (codegen-python.ts:622-628)…" | Yes: mypy `valid-newtype` | |
|
|
132
|
+
| L | L | Rust literal escapes (`\b`, `\f`) | poly compile: "L (rust-type-emitter.ts:105,314)…" | Yes: unknown character escape | The `allOf` field half has no test |
|
|
133
|
+
| L | L | Nullable + optional cannot send `null` | tests/integration/sdk-harness/nullable-tri-state.test.ts | Old API cannot express | The tri-state types are new |
|
|
134
|
+
|
|
135
|
+
Not covered: the Python `x-realtime` URL braces and the Rust `x-realtime` branch (realtime decision);
|
|
136
|
+
the L items `usedSchemas` regex, dead Rust SSE/WS emitters, and `unwrap_or_default`.
|
|
137
|
+
|
|
138
|
+
## Workstream 11: client runtimes
|
|
139
|
+
|
|
140
|
+
### TypeScript (`client/*`, MCP runtime)
|
|
141
|
+
|
|
142
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
143
|
+
| ------- | --- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
144
|
+
| H35 | H | `..`, `.`, `""` path params collapse or swap the host | unit/client/client-behavior-spec: "URL building (H35)…"; conformance/url-building: the "…rejected" vectors | Yes: the request is sent | |
|
|
145
|
+
| H36 | H | Safe mode returns a falsy `error` for non-JSON error bodies | unit/client/client-behavior-spec: "Errors (H36) safe mode…"; unit/sdk/sdk-runtime-characterization: "error body that is not JSON still returns a truthy error…" | Yes: `undefined` | |
|
|
146
|
+
| H37 | H | SSE drops the body and skips hooks | unit/client/client-behavior-spec: "Streams (H37) … a streamed POST carries its body…" | Yes | |
|
|
147
|
+
| H38 | H | `onAuthExpired` never called | unit/client/client-behavior-spec: "Auth refresh (H38)…" (four tests) | Yes | |
|
|
148
|
+
| M | M | No per-call `timeout`; README error subclasses missing | unit/client/client-behavior-spec: "per-call timeout overrides the config", "throw mode: per-status subclasses" | Yes | |
|
|
149
|
+
| M | M | `cleanup()` before `_parseBody`: timeouts and aborts miss the body read | unit/client/client-behavior-spec: "the timeout covers reading the body", "a user abort after headers still cancels the body read…" | Yes | |
|
|
150
|
+
| M | M | The lazy dual-mode return is a real Promise | unit/client/client-behavior-spec: "awaiting an SSE call resolves to an iterable…", "await then for-await reuses the one request" | Yes | |
|
|
151
|
+
| M | M | Empty 2xx bodies: raw `SyntaxError`, wrong types | unit/client/client-behavior-spec: "empty or invalid 2xx bodies keep the status" | Yes | |
|
|
152
|
+
| M | M | `ctx.retry()` failure paths | ts: "M (client/http.ts:359-365): an unguarded retry hook on a persistent 401 ends with the 401"; unit/client/client-behavior-spec: "a guarded hook in safe mode returns { error }…" | Yes: "Max 1 retry per request"; throws | The behavior-spec version needs the new `UnauthorizedError` export, so `ts` holds the old-compatible guard |
|
|
153
|
+
| M | M | Partially resolvable invalidation targets dropped | unit/client/client-behavior-spec: "partially resolvable invalidation targets mark the narrower pattern"; unit/client/http-r6-phase-g: the two R6-12 tests | Yes | |
|
|
154
|
+
| M | M | One concrete read clears a pattern mark for all instances | unit/sdk/sdk-invalidation: "each instance reads stale once; a concrete read never clears the others" | Yes | |
|
|
155
|
+
| M | M | Form arrays encoded inconsistently | unit/client/client-behavior-spec: "arrays repeat the key in both encodings…" | Yes: `tags=a%2Cb` | |
|
|
156
|
+
| L | L | SSE parser: truncated final event, sticky id, `retry` | conformance/sse: "truncated final event discarded", "id is sticky", "retry digits only" | Yes | |
|
|
157
|
+
| L | L | `/users/{user-id}` and `/ops/{id}:cancel` | unit/client/client-behavior-spec: "SDK paths: hyphenated braces and `{id}:action` interpolate" | Yes | |
|
|
158
|
+
| L | L | `undefined` per-call header; forced `x-request-id` | unit/client/client-behavior-spec: "skips undefined per-call headers…", "requestId: false sends no x-request-id…" | Yes | |
|
|
159
|
+
| L | L | MCP binary results serialize as `{}` | unit/codegen/codegen-mcp-hardening: "binary results are described…" | Old API cannot express | `callTool` is new |
|
|
160
|
+
|
|
161
|
+
Not covered (L): `client/ws.ts` listener map and binary frames, `invalidatedBy` growth.
|
|
162
|
+
|
|
163
|
+
### Go, Python and the Go CLI
|
|
164
|
+
|
|
165
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
166
|
+
| ------------- | --- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
167
|
+
| H55 | H | Python SSE splits on U+2028 and other separators | poly: "Python runtime H55…" | Yes: `{"t":"a` | |
|
|
168
|
+
| H56 | H | Go `ResolveReference` drops the base path | poly: "Go runtime H56: the base URL's path is kept" | Yes: `/users/1` | |
|
|
169
|
+
| NEW | H | Python `..` collapses to the parent | poly: "Python runtime NEW (H, codegen-python.ts:399)…" | Yes: requests sent | |
|
|
170
|
+
| H57, H58, H59 | H | Go realtime spins, dies after reconnect, panics on close | tests/integration/sdk-harness/polyglot-runtime.test.ts (`runtime_test.go`) | Old API cannot express | Crash fixes shipped under the realtime decision; the checks use HEAD-only transport API |
|
|
171
|
+
| H60 | H | SSE cut by default request timeouts | poly: "Python runtime H60: an SSE stream outlives the default read timeout" | Yes: `ReadTimeout` | The Go half needs a 30 s stream; covered on HEAD by `runtime_test.go` `TestTimeoutBoundsCallsNotStreams` |
|
|
172
|
+
| H61 | H | Python realtime stops silently | polyglot-runtime.test.ts (`runtime_check.py`) | Old API cannot express | Realtime decision |
|
|
173
|
+
| H62 | H | The 401-refresh retry resends uploads with an empty body | poly: "Go runtime H62: a 401 never makes a raw upload go out again with an empty body"; "Python runtime H62: the 401-refresh retry resends a raw upload body" | Yes: the second body is empty | A JSON body already survived on `3ab88ce` in Go |
|
|
174
|
+
| M | M | Go has no `CheckRedirect`: custom headers follow other hosts | poly: "Go runtime M (client-go/runtime.go:270,362-372)…" | Yes: `x-api-key` reached the other host | |
|
|
175
|
+
| M | M | Go `Config.Timeout` never read | poly: "Go runtime M (client-go/runtime.go:55)…" | Yes: no error after 2 s | |
|
|
176
|
+
| H (was M) | H | CLI exit codes: 404 and 500 both exit 3 | poly: "Go CLI runtime H (cli-go/errors.go:36-39)…" | Yes: 3 | |
|
|
177
|
+
| M | M | Hostile server bytes printed raw by the CLI | poly: "Go CLI runtime M (client-go/errors.go:156-206; cli-go/output.go:53-94)…" | Yes: ESC in a table cell | The error path already escaped on `3ab88ce` |
|
|
178
|
+
| M | M | Python returns 3xx as success | poly: "Python runtime M (client-python/_runtime.py:159-161)…" | Yes | |
|
|
179
|
+
| M | M | Python returns `response.text` for binary bodies | poly: "Python runtime M (client-python/_runtime.py:149-156)…" | Yes: `str` | |
|
|
180
|
+
| M | M | Python sync `on_auth_expired` fails silently | poly: "Python runtime M (client-python/_runtime.py:385-392)…" | Yes: `'str' object can't be awaited` | |
|
|
181
|
+
| M | M | Param-less mutations drop pattern targets (Go, Python); Go reads never clear | poly: Go and Python "…a param-less mutation marks the templated read stale…" | Yes: `[false, false, …]` | |
|
|
182
|
+
| M | M | CLI decodes into `any`: big integers lose precision | poly: "Go CLI runtime M (cli-go/output.go:25,74,87)…" | Yes: `1234567890123456800` | |
|
|
183
|
+
| L | L | Go SSE delimiter priority and a dispatched partial event | poly: "Go runtime L (client-go/sse.go:70-90)…" | Yes: `partial` dispatched | |
|
|
184
|
+
| L | L | Python `/ops/{id}:cancel` raises | poly: "Python runtime L (client-python/_invalidation.py:17,53-69)…" | Yes | |
|
|
185
|
+
| L | L | Python header merge is case-sensitive | poly: "Python runtime L (client-python/_runtime.py:116-135)…" | Yes: two `authorization` headers | |
|
|
186
|
+
| L | L | Refreshed token not kept | poly: Go and Python "L … the refreshed token is kept for later calls" | Yes: a second 401 round trip | |
|
|
187
|
+
|
|
188
|
+
Not covered: the Go WebSocket 32 KiB read limit (M), the realtime reopen context (M, realtime), and
|
|
189
|
+
the L items for unbounded reads, concrete keys with `:`, WS handlers, transport leaks, CLI version
|
|
190
|
+
and config, and stale-lookup performance.
|
|
191
|
+
|
|
192
|
+
### Rust
|
|
193
|
+
|
|
194
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
195
|
+
| --------- | --- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
196
|
+
| H63 | H | Send errors surface as "request canceled" | poly: "Rust runtime H63: connection refused is a transport error, not `Canceled`" | **No** | Not reproduced: with the reqwest 0.12.28 the lockfile resolves, refused, DNS and unroutable errors all map to `Transport` on `3ab88ce` too. Kept as a HEAD guard |
|
|
197
|
+
| H56b | H | `base.join(path)` drops the base path | poly: "Rust runtime H56b: the base URL's path is kept" | Yes: `/users/1` | |
|
|
198
|
+
| H64 | H | `recv` dropped mid-reconnect leaves the connection stuck | polyglot-runtime.test.ts (`runtime_check.rs`) | Old API cannot express | Realtime decision |
|
|
199
|
+
| M | M | SSE buffer unbounded, rescanned from 0 | poly: "Rust runtime M (sse.rs:32-44,79-93): an SSE line has a size cap…" | Yes: a 3 MiB event buffered whole | The quadratic rescan does not show in wall time once TCP coalesces chunks; the cap half is the guard |
|
|
200
|
+
| M | M | SSE `trim()`, CR-only lines, BOM | poly: "Rust runtime M (sse.rs:50-51,66-67,80,110-111)…" | Yes: `first` dropped, `tok ` trimmed | |
|
|
201
|
+
| M | M | Headers merged case-sensitively and appended | poly: "Rust runtime M (runtime.rs:394-406,445-458)…" | Yes: two `authorization` | |
|
|
202
|
+
| M | M | Redirects replay custom headers cross-host | poly: "Rust runtime M (runtime.rs:400-406,445-447)…" | Yes | |
|
|
203
|
+
| M | M | Refreshed token discarded; N 401s refresh N times | poly: "Rust runtime M (runtime.rs:285-338): the refreshed token is kept…", "…concurrent 401s trigger one refresh" | Yes: 2 round trips; 3 refreshes | |
|
|
204
|
+
| M | M | Param-less mutations drop templated targets | poly: "Rust runtime M (invalidation.rs:121-146)…" | Yes | |
|
|
205
|
+
| L (was M) | L | Error message is the full raw body | poly: "Rust runtime L (errors.rs:184)…" | Yes: 20 038 characters | |
|
|
206
|
+
|
|
207
|
+
Not covered: the SSE transport status check, long-poll, `send_json` auth and resume (realtime
|
|
208
|
+
decision), and the L items for body copies, WS handlers, the scheme swap and sync timeout mapping.
|
|
209
|
+
|
|
210
|
+
## Workstream 12: tooling
|
|
211
|
+
|
|
212
|
+
| Finding | Sev | Bug | Test | Fails on 3ab88ce? | Notes |
|
|
213
|
+
| --------- | --- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
214
|
+
| H67 | H | `honey init` writes the unscoped `honey` dependency | unit/plugin/cli-init: "writes app, vite config, and package scripts" | Yes | |
|
|
215
|
+
| H68 | H | Watch regenerates with stale transitive modules | unit/plugin/cli-generate: "--watch sees edits to modules the app imports" | Yes | |
|
|
216
|
+
| H69, H69b | H | The package cannot load from `node_modules` on plain Node | `bun run test:packaging` (`e2e/run-strict-consumer.ts`) | Old API cannot express | `3ab88ce` ships no `dist/` to pack |
|
|
217
|
+
| H70 | H | CLI argument parser ignores and swallows flags | unit/plugin/cli-generate: "rejects unknown flags…", "--app=<path> overrides…", "calls a function-form Vite config"; unit/plugin/cli-init: "--cloudflare is an alias of --cf…" | Yes | |
|
|
218
|
+
| H70b | H | `honey generate` on Node never finds the Vite config | tooling: "H70b: `honey generate` on plain Node finds the Vite config" | Yes: "No config found" | |
|
|
219
|
+
| M | M | `honey init` rewrites an existing `package.json` | unit/plugin/cli-init: "keeps an existing package.json's scripts, type and privacy without --force" | Yes | |
|
|
220
|
+
| H (was M) | H | Generation runs the app's top-level side effects | unit/plugin/cli-generate: "an app that serves at top level and leaves a timer still generates and exits…"; unit/plugin/generate-and-write: "…its top-level serve() binds nothing" | Yes: EADDRINUSE | |
|
|
221
|
+
| M | M | The "unchanged" check trusts only the header checksum | tooling: "M (plugin.ts:294-353): a truncated generated file with a matching checksum header is rewritten" | Yes | |
|
|
222
|
+
| M | M | `virtual:honey/routes` returns TypeScript as JS | unit/plugin/vite-plugin: "load returns route tree for virtual module with moduleType", "virtual route tree loads in a real Vite dev server" | Yes: parse failure | |
|
|
223
|
+
| M | M | `hotUpdate` suppresses HMR, runs per environment, re-triggers on outputs | unit/plugin/vite-plugin: the three hotUpdate tests | Yes | |
|
|
224
|
+
| M | M | Feature detection is a regex over one file | unit/build/build-plugin: "finds openapi() behind a re-export entry", "ignores feature calls in comments and strings" | Yes | |
|
|
225
|
+
| M | M | The Bun build entry has no WebSocket handlers | unit/build/build-plugin: "bun: startHoneyServer with the runtime, env and 0.0.0.0" | Yes | |
|
|
226
|
+
| M | M | CLI watch loops when an SDK out dir sits under the app | tooling: "M (plugin.ts:544-575): CLI watch does not loop…" | **No** | Cannot be reached at `3ab88ce`: its CLI does not load a path-imported Vite config (H70b), and its flags have no Python port. Guards HEAD |
|
|
227
|
+
| M | M | Stale generated files never removed | tooling: "M (plugin.ts:544-601): a Go CLI resource that no longer exists leaves no ghost command file" | Yes: `owners.go` left | |
|
|
228
|
+
| M | M | The `watch` glob matcher | tooling: the four "watch pattern … regenerates" tests and "src/**/*.ts does not match a file under node_modules" | Yes | |
|
|
229
|
+
| L | L | `virtual:honey/openapi` omits `profile` | unit/plugin/vite-plugin: "virtual openapi module applies the configured profile" | Yes | |
|
|
230
|
+
| L | L | `ssr.noExternal: true` for every target | unit/build/build-plugin: "keeps dependencies external on node and bun, bundles them for workers" | Yes | |
|
|
231
|
+
|
|
232
|
+
Not covered (L): jiti re-transpile time, the watch in-flight guard and `_lastConfig`.
|
|
233
|
+
|
|
234
|
+
## Findings that were open on HEAD (fixed after the matrix)
|
|
235
|
+
|
|
236
|
+
The matrix found three findings still broken at `ba39cc7`; all three are fixed and guarded:
|
|
237
|
+
|
|
238
|
+
- **H50, Python multipart.** httpx 0.28 cannot encode a list of `data` tuples beside `files` (a text
|
|
239
|
+
field raised `TypeError`, a file alone went out with an empty body). Text fields now travel as
|
|
240
|
+
`(None, value)` file parts. Guard: poly Python "H50: a multipart body is sent" (no longer skipped;
|
|
241
|
+
asserts the text field and the file bytes reach the server).
|
|
242
|
+
- **Rust SDK with a bare object response** (`{ "type": "object" }`) used `HashMap` in
|
|
243
|
+
`src/resources/*.rs` without importing it (E0425). Map types are now emitted fully qualified.
|
|
244
|
+
Guard: poly compile case "NEW (H): a bare object response compiles"; fails with E0425 before the fix.
|
|
245
|
+
- **Go CLI, missing required flag** exited 3 instead of 4: cobra checks required flags after
|
|
246
|
+
`PersistentPreRunE`, so the error bypassed the usage mapping. The hook now validates required
|
|
247
|
+
flags and flag groups itself, any error before it is a usage error, and an unknown subcommand under
|
|
248
|
+
a group exits 4 instead of printing help with exit 0. Guard: poly Go CLI "a missing required flag,
|
|
249
|
+
an unknown flag and a stray subcommand exit 4 (usage) and send nothing".
|
|
250
|
+
|
|
251
|
+
Also fixed: `bin/honey.js` ran `dist/cli.js` under Node even in a repository checkout, so
|
|
252
|
+
`honey generate` after a source change could run stale code. Guard: tooling "bin/honey.js picks the
|
|
253
|
+
CLI it runs" (fails on the previous bin).
|
|
254
|
+
|
|
255
|
+
## Counts
|
|
256
|
+
|
|
257
|
+
148 rows. 73 are guarded by an existing test, each verified against `3ab88ce` on its own. 70 rows
|
|
258
|
+
point at the 100 newly written tests in `regression/ws9-12/` (7 TypeScript, 10 tooling, 83
|
|
259
|
+
polyglot, the Python multipart one skipped at `ba39cc7` and enabled with its fix), all failing on `3ab88ce`. Three
|
|
260
|
+
tests were strengthened or replaced because the version that existed passed on `3ab88ce`: the hash
|
|
261
|
+
collision, the `ctx.retry()` failure path, and Go H62 (a JSON body already survived the retry).
|
|
262
|
+
|
|
263
|
+
Nine findings use API that did not exist at `3ab88ce` and are guarded on HEAD only: H57, H58, H59,
|
|
264
|
+
H61, H64, H69, H69b, nullable + optional, and the MCP binary result. Three did not reproduce on
|
|
265
|
+
`3ab88ce` and stay as HEAD guards: H63, the CLI watch loop, and the Go half of the inline-array
|
|
266
|
+
item type.
|