docs(apk): clarify rotated signer agreement (#7936)

* docs(apk): clarify rotated signer agreement

* test(mcp): assert bundle path issues by field

compare_bundles reports each relative path as an invalid_format issue
instead of one joined diagnostic sentence.

* fix(javascript): ignore worker frames for a different source job

A failure frame for another job was dequeued as an output error, so a
later caller abort lost the race and was not reported as cancellation.

* test(flutter): assert ABI selector refusals as structured issues

inspect_dart_aot reports the ABI label as an issue on path abi. The
message is the selector contract, without an abi: prefix.

* fix(javascript): check each worker frame condition once

A ready frame is rejected on its own. A non-ready frame for another job
keeps waiting. The following id comparison repeated that skip, so it
never ran.

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This commit is contained in:
morlutoandCursor Agent authored and GitHub committed 2026-10-29 20:00:02 +08:00
1 parent 1ef5918179
commit 6fa48f201f
3 files changed
+42 -11

No files matched your search

@@ -355,11 +355,15 @@ export class JavaScriptAnalysisWorker {
);
for (;;) {
const response = await this.#next(deadline, file.path);
if (response.kind === "ready" || response.id !== id)
// A ready frame is outside this job. A frame for another job is not
// this request's result; keep waiting so a later caller abort is
// still cancellation.
if (response.kind === "ready")
throw new AnalysisOutputError(
OPERATION,
"JavaScript worker response names a different source job",
);
if (response.id !== id) continue;
if (response.kind === "phase") {
this.#phase = response.phase;
await onPhase?.(response.phase);