Fixed issues

← Fixed issues

Ashterix

docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api

en/docs/api/json-rpc-bundle/developers/known_issues/fixed.md new file +57 āˆ’0

1 + # Fixed issues
2 +
3 + Bugs from previous versions and the version in which they were fixed. If you are on an affected version, upgrade or use the workaround. Open issues are on the [Open issues](/docs/api/json-rpc-bundle/developers/known_issues/open) page.
4 +
5 + <include>(.issues/post-response-only-http.md)
6 +
7 + ---
8 +
9 + <include>(.issues/adapter-routes-overwritten.md)
10 +
11 + ---
12 +
13 + <include>(.issues/autowire-method-arguments.md)
14 +
15 + ---
16 +
17 + <include>(.issues/info-concat-ignored.md)
18 +
19 + ---
20 +
21 + <include>(.issues/deprecated-not-in-openrpc.md)
22 +
23 + ---
24 +
25 + <include>(.issues/xhr-requests-empty.md)
26 +
27 + ---
28 +
29 + <include>(.issues/response-cache-shared.md)
30 +
31 + ---
32 +
33 + <include>(.issues/notifications-without-fpm.md)
34 +
35 + ---
36 +
37 + <include>(.issues/batch-process-cpu-and-token.md)
38 +
39 + ---
40 +
41 + <include>(.issues/from-integer-becomes-float.md)
42 +
43 + ---
44 +
45 + <include>(.issues/terminate-listeners-skipped.md)
46 +
47 + ---
48 +
49 + <include>(.issues/versioned-routes-issues.md)
50 +
51 + ---
52 +
53 + <include>(.issues/callback-forwarded-all-headers.md)
54 +
55 + ---
56 +
57 + <include>(.issues/regressions-8-1.md)

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/post-response-only-http.md new file +12 āˆ’0

1 + ### `rpc.post_response` was not fired for all executed requests
2 +
3 + :::success subtitle="Fixed in 10.4.2"
4 + Verified against the code of tags 9.2.1, 10.2.3, 10.4.1 and 10.4.2.
5 + :::
6 +
7 + **Symptom.**
8 +
9 + * **Before 10.4.2:** for each HTTP request or console command, the event was fired **once** — for the last `rpc.pre_response`. In a process batch, only one request received it, not each executed one.
10 + * **10.2.x — 10.4.1:** on `kernel.terminate`, the event was fired only when the carrier was the `RpcFromHttp` of that HTTP request. For calls via adapters (REST, etc.) it was not fired, so `#[RPC\CacheRelation]` invalidation and execution of notifications / callback did not work. For console commands the event was fired.
11 +
12 + **Fix.** Requests are collected in `PostResponseQueue`, and the event is fired once for each successfully executed request — for any carrier (`IRpcHttpCarrier` or execution via `RpcExecutor`) and for each batch item.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/adapter-routes-overwritten.md new file +10 āˆ’0

1 + ### Adapter routes overwrote each other across API groups
2 +
3 + :::success subtitle="Fixed in 10.4.1"
4 + Affected versions: 10.2.1 — 10.4.0.
5 + Based on the 10.4.1 release notes; not verified against the code.
6 + :::
7 +
8 + **Symptom.** Two imports of the same adapter `router.yaml` (for example, `/mcp` and `/mcp/internal`) produced identical route names, and the second import overwrote the first.
9 +
10 + **Fix.** The adapter registers its `router.yaml` via `IApiRouteImport`; each import gets route names prefixed with the group.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/autowire-method-arguments.md new file +12 āˆ’0

1 + ### `#[Autowire]` in RPC method arguments did not work
2 +
3 + :::success subtitle="Fixed in 10.3.1"
4 + Affected versions: 10.0.1 — 10.3.0.
5 + Verified against the code of tags 10.0.6, 10.2.3 and 10.3.1.
6 + :::
7 +
8 + **Symptom.** A service marked with `#[Autowire]` in an RPC method argument was not injected.
9 +
10 + **Cause.** `RpcServiceMapPass::processParams()` skipped every typed parameter, so such arguments were not registered in the method's locator.
11 +
12 + **Workaround for older versions.** Constructor injection.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/info-concat-ignored.md new file +10 āˆ’0

1 + ### `#[RPC\Info(concat: …)]` was ignored
2 +
3 + :::success subtitle="Fixed in 10.3.1"
4 + Affected versions: 10.0.0 — 10.3.0.
5 + Verified against the code of tags 9.2.1, 10.0.6, 10.2.3 and 10.3.1.
6 + :::
7 +
8 + **Symptom.** Methods always had the `.` separator regardless of `concat`.
9 +
10 + **Important when upgrading.** After the fix, `concat` is applied again: if it is set and clients call methods using `.`, method names will change. Update the clients or remove `concat`.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/deprecated-not-in-openrpc.md new file +10 āˆ’0

1 + ### Deprecated methods were not marked in OpenRPC
2 +
3 + :::success subtitle="Fixed in 10.3.1"
4 + Affected versions: 9.2.1 — 10.3.0.
5 + Verified against the code of tags 9.1.5, 9.2.1, 10.2.3 and 10.3.1.
6 + :::
7 +
8 + **Symptom.** Methods with `@deprecated` or `#[\Deprecated]` did not get `"deprecated": true` in the documentation, even though the flag was collected in `Service::isDeprecated()`.
9 +
10 + **Cause.** `OpenRpcAdapter` did not pass the flag to `OpenRpcSpecBuilder::buildMethod()`.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/xhr-requests-empty.md new file +10 āˆ’0

1 + ### XHR requests received an empty response
2 +
3 + :::success subtitle="Fixed in 10.3.1"
4 + Affected versions: 8.0.0 — 10.3.0.
5 + Verified against the code of tags 8.0.5, 9.2.1, 10.2.3 and 10.3.1.
6 + :::
7 +
8 + **Symptom.** A POST with the `X-Requested-With: XMLHttpRequest` header (for example, jQuery `$.ajax`) received an empty `200` response, and the method was not called.
9 +
10 + **Fix.** Only a CORS preflight `OPTIONS` now gets an empty response.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/response-cache-shared.md new file +10 āˆ’0

1 + ### The response cache was shared between different implementations and versions with the same name
2 +
3 + :::success subtitle="Fixed in 10.3.0"
4 + Affected versions: 10.0.0 — 10.2.3.
5 + Verified against the code of tags 10.0.6, 10.2.3 and 10.3.1.
6 + :::
7 +
8 + **Symptom.** Methods with the same name in different [API versions](/docs/api/json-rpc-bundle/functionality/versions) or different [groups](/docs/api/json-rpc-bundle/functionality/groups), implemented by different classes, could receive each other's cached result.
9 +
10 + **Fix.** The response cache key includes the implementation (`Class::method`) and the API version. After upgrading, the existing cache will miss once and be repopulated.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/notifications-without-fpm.md new file +14 āˆ’0

1 + ### Notifications were not executed without PHP-FPM
2 +
3 + :::success subtitle="Fixed in 10.3"
4 + Affected versions: 10.1.0 — 10.2.3. Verified against the code of tags 10.1.0, 10.2.3 and 10.3.1.
5 + :::
6 +
7 + **Symptom.**
8 +
9 + * **10.1.x:** outside PHP-FPM (Apache mod_php, the PHP built-in server), the `fastcgi_finish_request()` call failed with an error that the bundle silently caught, so `rpc.post_response` was not fired and the notification was not executed at all.
10 + * **10.2.x:** the call was guarded by a `function_exists()` check, but without `ignore_user_abort()` PHP aborted execution if the client had already closed the connection, and the notification was silently lost.
11 +
12 + In addition, execution printed the request and response to stdout via `echo`.
13 +
14 + **Fix.** A notification is executed under any SAPI, even if the client has closed the connection; execution is logged via `LoggerInterface::info()`.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/batch-process-cpu-and-token.md new file +10 āˆ’0

1 + ### Process batch hogged a CPU core and passed the token on the command line
2 +
3 + :::success subtitle="Fixed in 10.3.0"
4 + Affected versions: up to and including 10.2.3.
5 + Passing the token as an argument was verified against the code of tags 10.2.3 and 10.3.1; the CPU load — based on the 10.3 release notes.
6 + :::
7 +
8 + **Symptom.** During a process batch, the wait loop used 100% of a core; the token and the request body were passed to child processes as command-line arguments and were visible in the process list.
9 +
10 + **Fix.** No busy wait loop; the token is passed via the `UFO_RPC_TOKEN` variable, the request via stdin.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/from-integer-becomes-float.md new file +8 āˆ’0

1 + ### `@FROM` turned an integer into a float
2 +
3 + :::success subtitle="Fixed in 10.3.0"
4 + Affected versions: up to and including 10.2.3 (batch process mode).
5 + Based on the 10.3 release notes; not verified against the code.
6 + :::
7 +
8 + **Symptom.** An integer result of a batch item, when substituted into another item via `@FROM:<id>(<field>)`, became a float, and a method with an `int` parameter got a type error.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/terminate-listeners-skipped.md new file +12 āˆ’0

1 + ### The application's terminate listeners did not run after RPC requests
2 +
3 + :::success subtitle="Fixed in 10.3.0"
4 + Affected versions: up to and including 10.2.3.
5 + Verified against the code of tags 9.2.1 — 10.2.3 (propagation is stopped) and 10.3.1 (it is not).
6 + :::
7 +
8 + **Symptom.** The application's `kernel.terminate` / `console.terminate` listeners (sending mail, flushing logs, Sentry, etc.) did not fire after RPC requests.
9 +
10 + **Cause.** The bundle stopped propagation of these events.
11 +
12 + **Important when upgrading.** Check the listeners that were previously silently skipped — they now run.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/versioned-routes-issues.md new file +8 āˆ’0

1 + ### Batch and documentation protection on versioned addresses
2 +
3 + :::success subtitle="Fixed in 10.2.1"
4 + Affected versions: 10.0.0 — 10.0.6, 10.1.0.
5 + Based on the 10.2 release notes; not verified against the code.
6 + :::
7 +
8 + **Symptom.** A batch request to a versioned address (`/rpc/v2`) executed the items in the default version; versioned documentation addresses (`/rpc/v2`, `/rpc/v2/postman`) were not covered by `protected_doc`.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/callback-forwarded-all-headers.md new file +13 āˆ’0

1 + ### All client headers, including the token, were forwarded to the callback
2 +
3 + :::success subtitle="Fixed in 10.0.6"
4 + Affected versions: 9.2.0 — 10.0.5. Verified against the code of tags 9.2.1 (all headers) and 10.0.6 (filter); intermediate 10.0.x patch versions were not checked individually.
5 + :::
6 +
7 + **Symptom.** For a single HTTP request with `$rpc.callback`, the server copied all headers of the incoming request, including the RPC token (`Ufo-RPC-Token`) and other credentials, into the POST request to the callback URL. For callbacks from process batch items, headers were not forwarded (the child process has no HTTP request).
8 +
9 + **Cause.** `RpcCallbackProcessor::process()` took `$httpRequest->headers->all()` without a filter.
10 +
11 + **Fix.** Only tracing headers are forwarded: `X-Request-Id`, `X-Correlation-Id`, `traceparent`, `tracestate`, `baggage`. The 9.2 release notes still describe the old behavior.
12 +
13 + **What to do if you were on an affected version.** If clients passed `$rpc.callback` pointing to hosts you do not trust, rotate the tokens that may have ended up there.

en/docs/api/json-rpc-bundle/developers/known_issues/.issues/regressions-8-1.md new file +10 āˆ’0

1 + ### Regressions in versions 8.1.1–8.1.5
2 +
3 + :::success subtitle="Fixed in 8.1.6"
4 + Affected versions: 8.1.1 — 8.1.5.
5 + Based on the 8.1 release notes; not verified against the code.
6 + :::
7 +
8 + **Symptom.** Release 8.1.1 rolled back some of the changes from 8.0.4–8.1.0: enum schemas in the documentation and special `$rpc` parameters in `RequestCarrier`.
9 +
10 + **Fix.** Special parameters — in 8.1.5, enum schemas — in 8.1.6. Do not stay on 8.1.1–8.1.5; use 8.1.14.