mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-10-20 13:15:00 +00:00
* fix(core): end the managed command launcher by its command's signal A background Shell's exit evidence is its cgroup launcher's own exit, and the launcher replaced a signal death with exit(1). A background process killed by SIGKILL was therefore recorded as `exited` with `exitCode: 1, exitSignal: null`, on the child_run record and on the Broker's `:process` row alike: a status the process never returned. The launcher now ends itself by the signal its command died of, so the waiter sees that signal. Only the signals that cannot be re-raised keep the nonzero fallback: a core-dumping one would dump the launcher too, and Node.js owns SIGUSR1 and ignores SIGPIPE. Command hooks share the launcher and already read a null exit code as a signal kill, a branch the old launcher left unreachable whenever only the command was killed. Found by the FG8c process-kill gate (#14163). * test(managed-agent): add the FG8c process-crash gates for monitor_run and background shells (#14163) FG8c kills (or stops) a real process under a live background run and pins what the platform does next against JDBC ground truth, in seven cases: the packaged Harness after the dispatch committed and after the capture started (then a cold reload on a fresh Harness), the managed worker (SIGKILL, and SIGSTOP across the broker's 30 s worker bound), the background process itself, the worker behind later prompts that reach for the Runtime again, and the worker under a live Monitor watch whose idle stop then meets the loss. Every case asserts one :start and one :process row across every boot and prompt, and exactly one Runtime binding at generation 1: a lost generation is never re-minted. Records may stay open, but never settle on evidence nobody produced; the reloaded close drains the run its process never saw (#13986); a dead worker's release is refused without stop proof; a stopped worker reads as neither stopped nor lost; and a watch whose stop nobody could prove parks as recovery_blocked / runtime_lost (#13896). The probe's state reads and the IT's record and output reads now lead with ma_resource's session_scope_key: filtered by the unindexed tenant and session columns alone, every poll scanned all the inline capture bytes the lane had written, so each later letter polled slower. The shared broker proxy also treats a client gone mid-request as no request instead of a sticky proxy failure. The hosted fork's healthy allowance moves 2640 -> 2930 s for the letter (twice its local 144 s, the FG9 convention); the 3600 s fork and the 600 s per-letter ceiling are unchanged. Seven mutation witnesses, one per case, were each observed red. The bilingual design document records the cases, two expectations of the round design that the merged recovery surface does not meet, and the follow-ups. * fix(core): keep only reachable signal names in the launcher's kept list Node.js on Linux reports signal 6 as SIGABRT, never SIGIOT, and Linux defines no SIGEMT, so neither name could ever reach the launcher's exit handler. Dropping them leaves the list as exactly the set it can match. --------- Co-authored-by: 易良 <1204183885@qq.com> |
||
|---|---|---|
| .. | ||
| codemod | ||
| installation | ||
| lib | ||
| sandbox-prototype | ||
| sandbox-runtime | ||
| startup-benchmark | ||
| tests | ||
| tui-parity | ||
| acp-http-smoke.mjs | ||
| assert-release-version.mjs | ||
| audit-runtime-critical.js | ||
| benchmark-api-latency.mjs | ||
| build-hosted-installation-assets.js | ||
| build-standalone-release.js | ||
| build.js | ||
| build_landlock_run.mjs | ||
| build_package.js | ||
| build_sandbox.js | ||
| build_vscode_companion.js | ||
| check-build-status.js | ||
| check-contract-open-prs.js | ||
| check-contract-version.js | ||
| check-core-subpath-exports.mjs | ||
| check-desktop-isolation.js | ||
| check-failsafe-reports.js | ||
| check-flyway-migrations.js | ||
| check-flyway-open-prs.js | ||
| check-i18n.ts | ||
| check-lockfile.js | ||
| check-serve-fast-path-bundle.js | ||
| check-tui-dep-direction.mjs | ||
| clean-package-build-artifacts.js | ||
| clean.js | ||
| cli-entry.js | ||
| contract-version-utils.js | ||
| copy-browser-use-assets.js | ||
| copy_bundle_assets.js | ||
| copy_files.js | ||
| create-standalone-package.js | ||
| create_alias.sh | ||
| daemon-dev.js | ||
| dev.js | ||
| esbuild-shims.js | ||
| export-omni-trajectory.js | ||
| flyway-migration-utils.js | ||
| generate-changelog.js | ||
| generate-git-commit-info.js | ||
| generate-model-catalog.ts | ||
| generate-release-notes.js | ||
| generate-settings-schema.ts | ||
| get-release-version.js | ||
| keep-manifest-layout.js | ||
| lint.js | ||
| local_telemetry.js | ||
| managed-agent-dev.js | ||
| measure-flicker.mjs | ||
| package-managed-agent-reference.mjs | ||
| pnpm-package.js | ||
| pre-commit.js | ||
| prepare-package.js | ||
| prepare.js | ||
| pty-e2e.sh | ||
| release-packages.mjs | ||
| release-script-utils.js | ||
| review-audit-layers.mts | ||
| rocketmq-lite-broker.sh | ||
| run-java-daemon-sdk-e2e.ts | ||
| run-managed-agent-server-e2e.ts | ||
| sandbox_command.js | ||
| sdk-node-exporter-stub.js | ||
| setup-worktree.js | ||
| sign-release.sh | ||
| start.js | ||
| telemetry.js | ||
| telemetry_gcp.js | ||
| telemetry_utils.js | ||
| test-rewind-e2e.sh | ||
| test-windows-paths.js | ||
| tmux-compare.sh | ||
| unused-keys-only-in-locales.json | ||
| upload-aliyun-oss-assets.js | ||
| verify-capture.mjs | ||
| verify-installation-release.js | ||
| version.js | ||
| vitest-global-setup.js | ||
| workspaces.js | ||