Skip to content

fix(runtime-host): stop a slow PowerShell start from refusing the Windows endpoint - #3235

Merged
Astro-Han merged 2 commits into
mainfrom
fix/runtime-host-windows-pipe-acl-diagnostics
Aug 19, 2026
Merged

fix(runtime-host): stop a slow PowerShell start from refusing the Windows endpoint#3235
Astro-Han merged 2 commits into
mainfrom
fix/runtime-host-windows-pipe-acl-diagnostics

Conversation

@Astro-Han

@Astro-Han Astro-Han commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

secureWindowsNamedPipe() applies the Windows Local IPC pipe ACL through PowerShell under a 10s timeout, and that budget killed a healthy run: in run 32182673038 the trust-boundary step failed after 32s, and the rerun of the identical commit passed in 7s. A real ACL error fails in under a second, so this was the timeout firing on a slow PowerShell 5.1 cold start.

The budget is a question of how long we are willing to wait, not how long the work should take. This ACL is the endpoint's entire trust boundary — packages/runtime-host/src/server/local-ipc-listener.ts grants Local Owner authority to every accepted connection with no further per-connection check — so the call must succeed, and a timeout must refuse the endpoint, which makes a refusal a user-facing startup failure. Raised to 30s, well clear of the ~7s a healthy step takes. Fail-closed is unchanged, and no retry is added: the observed mechanism is a slow start, not a random hang.

Endpoint readiness waits on that budget, so the waiters have to outlast it. scripts/windows-runtime-host-local-ipc-trust.ps1 allowed 10s, which would have made it the new bottleneck — and because it throws while the fixture is still alive, its stderr never gets read, so that failure would report less than before. Raised to 45s, the budget the client already uses in client/wait-for-ready.ts, and recorded at both ends.

Nothing in the log allowed any of this diagnosis at the time. The callback discarded the execFile error, collapsing a timeout kill, a real ACL failure (the pipe may be world-accessible) and a failure to spawn PowerShell into one opaque message. The thrown error now carries the capped PowerShell diagnostic plus the exit code, the errno, or — for a timeout — a restriction that was never confirmed rather than one that failed. Every branch still rejects.

Refs #3225

Review focus

Runtime Host is a protected area under AGENTS.md, so this needs independent human review and is not a self-merge fast-path candidate.

  • 30s is a ceiling on waiting, not a measured bound: the hung run was killed at 10s, so how long it actually needed is unknown.
  • windowsPipeAclFailure() is exported so the mapping can be tested off-Windows. The branch sits behind platform === 'win32', where no injected-exec seam would reach it either; control/endpoint.ts is not in the package exports map.
  • RuntimeHostEndpointError['code'] is deliberately unchanged — a timeout is a refusal like any other, and no caller branches on code.
  • The propagated text is script output about a pipe path the sibling POSIX branch already logs. error.message, which repeats the whole command, is a capped last resort.

Verification

@maka/runtime-host build, typecheck, npm run format:check and biome lint — clean. node --test packages/runtime-host/dist/__tests__/control-endpoint.test.js — 9/9 pass (4 new, cross-platform).

Not run: repository-wide tests (left to CI), and anything on Windows — no Windows host here, so windows_recovery is only exercised by CI, and the .ps1 edit (a comment and one constant) was not parsed locally, as no pwsh is available. The new tests cover the failure mapping; the raised budgets are asserted only through the message that interpolates the ACL constant, so nothing here proves either value reaches its caller. Those lines are unreachable off-Windows and I did not add a test that pretends otherwise.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Claude Code (Opus) diagnosed the root cause from the CI attempt timings, wrote the change, the tests and this description, from a human-written problem statement identifying the failing run. The human contributor of record reviews the final diff and owns the merge decision.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9a630af2-e527-4258-b324-f9ac4e173156

📥 Commits

Reviewing files that changed from the base of the PR and between 0ef1c55 and 0a1f7a6.

📒 Files selected for processing (2)
  • packages/runtime-host/src/__tests__/control-endpoint.test.ts
  • packages/runtime-host/src/control/endpoint.ts

Included review availability: Your plan provides up to 3 included reviews per hour; 2 remain after this review.


📝 Walkthrough

What problem this solves

Windows PowerShell cold starts can exceed the previous 10-second ACL timeout. This PR raises the timeout to 30 seconds and prevents valid Windows endpoints from being rejected too early.

The endpoint remains fail-closed. Timeout, spawn, exit-code, and ACL failures still reject startup. The error now includes capped PowerShell diagnostics, exit codes, and errno details. Timeout failures state that the restriction was not confirmed.

Source of truth and solution scope

The PR extends the existing Windows named-pipe ACL path. It does not create a parallel startup or retry path.

The change is the smallest coherent solution identified in the diff. It changes the existing timeout, adds one failure-formatting function, and passes existing process output into that formatter. The added complexity is required to preserve fail-closed behavior while making failures diagnosable.

The exported windowsPipeAclFailure function supports cross-platform tests because the ACL execution path only runs on Windows. This adds a small public test surface without adding another runtime behavior path.

Deletion or simplification opportunities

No deletion is evident without weakening regression coverage. The four tests cover distinct failure mappings: command failure, timeout termination, spawn failure, and oversized output. The output limits and newline normalization also require explicit coverage.

Validation and concrete risks

The affected test suite, build, typecheck, formatting, and lint reportedly pass locally. Repository-wide tests and Windows-specific tests were not run locally. Windows behavior therefore remains dependent on CI validation.

The main risks are:

  • PowerShell failures may expose diagnostic text, although output is capped.
  • The timeout change may delay startup failure by up to 30 seconds.
  • Windows-specific process and ACL behavior may differ from off-Windows test behavior.
  • Error-message formatting changes may affect consumers that inspect error text.

Complexity delta

  • Authorities: The existing ACL authority remains unchanged. No second authority is added.
  • States: The failure states become more explicit for timeout, termination, spawn, exit-code, and errno cases.
  • Branches: The failure formatter adds branches for process termination and other execution failures.
  • Configuration: The ACL timeout increases from 10 to 30 seconds. Diagnostic output has capped limits.
  • Public surface: windowsPipeAclFailure(path, error, stdout, stderr) is exported for cross-platform testing.
  • Test-maintenance burden: Four focused tests are added for failure mapping and diagnostic limits.

Total maintenance complexity increases slightly. The increase is justified by required diagnostics and regression coverage. No evidence shows an unnecessary parallel implementation or redundant configuration.

Review-relevant risks

The current diff changes user-visible startup failure timing and error messages. Material changes in user-visible behavior require independent human review under repository policy.

The diff changes Windows endpoint security behavior only by extending the existing ACL wait period. The endpoint remains fail-closed, and no retry is added. Material security changes require independent human review under repository policy.

The diff adds an exported function for testability. Material public-contract changes require independent human review under repository policy.

The final status of required checks is unverified from direct evidence here. The person performing the merge must review the final diff, and a maintainer makes the final determination.

Walkthrough

Windows named-pipe ACL execution now uses a timeout and bounded diagnostics. Failure messages include execution status, signals, exit codes, spawn errors, and normalized PowerShell output. Tests cover these cases on Windows.

Changes

Windows ACL diagnostics

Layer / File(s) Summary
ACL execution and failure formatting
packages/runtime-host/src/control/endpoint.ts
Windows ACL commands use a 30-second timeout. Failures now include execution status, signals, exit codes, spawn errors, and clipped PowerShell diagnostics.
ACL failure test coverage
packages/runtime-host/src/__tests__/control-endpoint.test.ts
Tests cover timeout handling, execution errors, output fallback, truncation, exit codes, and normalized messages.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 0a1f7

The change extends the Windows startup timeout and improves failure diagnostics while preserving fail-closed endpoint behavior; no actionable merge-blocking risk remains after normal checks and review.

Suggested reviewers: m4n5ter, liugddx

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Ai Use Disclosure ✅ Passed The description selects substantive generative use, names Claude Code and its scope, and the sole PR commit has the matching standalone Generated-by: Claude Code trailer.
Title check ✅ Passed The title clearly describes the primary change: preventing slow PowerShell startup from incorrectly refusing the Windows endpoint.
Description check ✅ Passed The description follows the required template and provides complete summary, verification, AI use, checklist, and review-focus details.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/runtime-host-windows-pipe-acl-diagnostics

Comment @coderabbitai help to get the list of available commands.

…dows endpoint

The Windows Local IPC endpoint is restricted by an ACL applied through
PowerShell, under a 10s timeout. That budget killed a healthy run: in run
32182673038 the trust-boundary step took 32s and failed, and the rerun of
the identical commit took 7s and passed. A genuine ACL error fails in
under a second, so the failure was the timeout firing on a slow Windows
PowerShell 5.1 cold start, not a broken ACL.

The budget is not a statement about how long the work should take. This
ACL is the entire trust boundary of the endpoint -- every accepted
connection is granted Local Owner authority with no further per-connection
check -- so the call must succeed and a timeout must refuse the endpoint,
which makes a refusal a startup failure for the user. Raise the ceiling to
30s so it only fires on a genuinely stuck process, well clear of a slow
start.

Nothing in the log allowed that call to be made at the time: the callback
discarded the execFile error entirely, collapsing a timeout kill, a real
ACL failure and a failure to spawn PowerShell into one opaque message, so
the only way to classify the failure was to rerun the job. Map the failure
onto the thrown error instead -- the length-capped PowerShell diagnostic,
the exit code or errno, and a timeout reported as a restriction that was
never confirmed rather than one that failed. Every branch still rejects.

The ACL call only runs on win32, so the mapping is exported and covered
directly; the raised budget is asserted only through the message that
carries it.

Generated-by: Claude Code
@Astro-Han
Astro-Han force-pushed the fix/runtime-host-windows-pipe-acl-diagnostics branch from 9b36d26 to 0a1f7a6 Compare August 19, 2026 04:55
@Astro-Han Astro-Han changed the title fix(runtime-host): report why the Windows pipe ACL failed fix(runtime-host): stop a slow PowerShell start from refusing the Windows endpoint Aug 19, 2026
@Astro-Han
Astro-Han marked this pull request as ready for review August 19, 2026 04:57
@qodo-code-review

qodo-code-review Bot commented Aug 19, 2026

Copy link
Copy Markdown

PR Summary by Qodo

Tolerate slow Windows pipe ACL setup and improve diagnostics

🐞 Bug fix 🧪 Tests 🕐 20-40 Minutes

Grey Divider

AI Description

• Extend Windows pipe ACL timeout to tolerate slow PowerShell cold starts.
• Preserve fail-closed behavior while distinguishing timeout, execution, and ACL failures.
• Add cross-platform tests for diagnostic classification, normalization, and truncation.
Diagram

sequenceDiagram
  participant Host as Runtime Host
  participant ACL as ACL Setup
  participant PS as PowerShell
  participant Mapper as Failure Mapper
  Host->>ACL: Secure named pipe
  ACL->>PS: Apply protected ACL
  alt ACL succeeds
    PS-->>ACL: Success
    ACL-->>Host: Endpoint ready
  else Process fails
    PS-->>ACL: Error and output
    ACL->>Mapper: Classify failure
    Mapper-->>Host: Refuse endpoint
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use native Windows ACL APIs
  • ➕ Avoids PowerShell cold-start latency and subprocess timeout behavior.
  • ➕ Could expose structured Windows error codes directly.
  • ➖ Requires native bindings or an additional dependency.
  • ➖ Introduces a substantially larger security-sensitive implementation and review surface.
  • ➖ Reduces portability of the current TypeScript-only package implementation.
2. Retry PowerShell after timeout
  • ➕ A second warm invocation might recover from transient startup delays.
  • ➖ Can extend user-facing startup delays beyond the new ceiling.
  • ➖ Does not address genuinely hung processes or uncertain ACL state.
  • ➖ Adds lifecycle complexity without evidence that retries solve the observed failure.

Recommendation: Keep the PR’s 30-second ceiling and cause-aware diagnostics. It is the smallest fail-closed correction for the observed PowerShell cold-start issue; retries add uncertain latency, while native ACL APIs deserve separate evaluation because they materially expand the trust-boundary implementation.

Files changed (2) +123 / -11

Bug fix (1) +63 / -9
endpoint.tsRaise ACL timeout and preserve actionable PowerShell failures +63/-9

Raise ACL timeout and preserve actionable PowerShell failures

• Raises the Windows named-pipe ACL timeout from 10 to 30 seconds while retaining fail-closed endpoint refusal. Adds cause-specific error mapping with pipe context and capped, single-line PowerShell diagnostics for timeout, exit, spawn, and signal failures.

packages/runtime-host/src/control/endpoint.ts

Tests (1) +60 / -2
control-endpoint.test.tsCover Windows pipe ACL failure diagnostics cross-platform +60/-2

Cover Windows pipe ACL failure diagnostics cross-platform

• Adds direct tests for ACL command exit failures, timeout kills, spawn errors, stdout fallback, whitespace normalization, and diagnostic truncation. The helper is tested independently so these branches run without requiring Windows.

packages/runtime-host/src/tests/control-endpoint.test.ts

@qodo-code-review

qodo-code-review Bot commented Aug 19, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. ACL wait retains hostile connections ✓ Resolved 🐞 Bug ⛨ Security
Description
Increasing the ACL timeout to 30 seconds extends the period in which other local users can connect
through Windows' default pipe ACL while every startup transport is retained in an unbounded set. A
local attacker can hold or repeatedly create pre-verification connections and consume process and
pipe resources throughout startup, even though those connections are eventually aborted and never
receive Local Owner authority.
Code

packages/runtime-host/src/control/endpoint.ts[133]

+        timeout: WINDOWS_PIPE_ACL_TIMEOUT_MS,
Relevance

●● Moderate

Recent security precedents support hardening, but no close precedent addresses timeout-based startup
resource retention.

PR-#3179
PR-#3182

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The listener begins accepting connections before prepareAfterListen() runs and stores every
connection in startupTransports; those transports are never promoted and are only aborted after
ACL verification or failure. The changed timeout extends this retention window from 10 to 30
seconds. Libuv creates Windows named pipes with a null security descriptor, and Microsoft documents
that the resulting default ACL grants read access to Everyone and anonymous users, so an untrusted
local process can establish a read-side connection during this window.

packages/runtime-host/src/server/local-ipc-listener.ts[20-45]
packages/runtime-host/src/control/endpoint.ts[127-141]
🌐 Libuv's Windows pipe implementation calls CreateNamedPipe with a null security-attributes argument, selecting the Windows default security descriptor.
🌐 Microsoft documents that a named pipe created with the default security descriptor grants read access to Everyone and the anonymous account.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The longer ACL timeout leaves the named pipe under its default ACL for up to 30 seconds, while the listener stores every pre-verification connection in an unbounded set. These transports are never accepted after verification, so retaining them only increases local denial-of-service exposure.

## Issue Context
Delete the unnecessary retention path rather than adding a connection limit or new configuration. While `starting` is true, abort each transport immediately; this preserves the existing authority invariant because startup transports are already always aborted before the listener is returned.

## Fix Focus Areas
- packages/runtime-host/src/server/local-ipc-listener.ts[20-49]
- packages/runtime-host/src/control/endpoint.ts[127-141]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
Review mode: ⚖️ Balanced: This changes a security-critical Windows IPC trust boundary and startup refusal behavior, so it warrants a complete careful review; the logic is meaningful but localized rather than dense enough for extended review.

Grey Divider

Tip of the day
💡 Did you know, you can show, collapse, or hide each part of a finding: code, evidence, and all

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@Astro-Han
Astro-Han marked this pull request as draft August 19, 2026 06:13
@Astro-Han
Astro-Han marked this pull request as ready for review August 19, 2026 06:16
@Astro-Han
Astro-Han requested review from M4n5ter and liugddx August 19, 2026 06:16
@qodo-code-review

Copy link
Copy Markdown

Code review by qodo was updated up to the latest commit 0a1f7a6

@M4n5ter
M4n5ter force-pushed the fix/runtime-host-windows-pipe-acl-diagnostics branch from 6b54ce7 to 0a1f7a6 Compare August 19, 2026 07:56

@M4n5ter M4n5ter left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

English

This is close, but one timeout still blocks the intended fix.

windows-runtime-host-local-ipc-trust.ps1 waits only 10 seconds for fixture readiness, while the ACL helper may now legitimately take up to 30 seconds. If PowerShell takes 10–30 seconds, the outer fixture still times out and terminates the process first.

Please raise the fixture readiness deadline above the ACL budget with some startup margin, for example 45 seconds.

The startup transport retention noted by Qodo can be simplified later, but I don’t consider it blocking for this PR.

中文

这个 PR 已经很接近了,但还有一个超时边界会阻塞预期修复。

windows-runtime-host-local-ipc-trust.ps1 只等待 fixture 10 秒,而 ACL helper 现在允许合法运行最多 30 秒。当 PowerShell 耗时 10–30 秒时,外层 fixture 仍会先超时并终止进程。

请将 fixture readiness deadline 提高到 ACL 预算之上并预留启动余量,例如 45 秒。

Qodo 提到的启动期 transport 保留可以后续简化,但我不认为它会阻塞本 PR。

The Windows trust fixture prints readiness only once the endpoint ACL has
been applied, and the harness waited 10s for that line. Raising the ACL
budget to 30s therefore moved the bottleneck rather than removing it: an
ACL taking 10-30s now trips the harness first, and because it throws while
the fixture is still alive, the fixture's stderr is never read -- the
failure reports less than it did before.

Raise the readiness deadline to 45s, the budget the client already uses to
wait for a Runtime Host, and record at both ends that the waiters have to
outlast the ACL budget.

Reported in review on #3235.

Generated-by: Claude Code

@M4n5ter M4n5ter left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — the fixture deadline now safely outlasts the ACL budget, and the relevant Windows checks pass.

@Astro-Han

Copy link
Copy Markdown
Contributor Author
English

Thanks — fixed in 1f91603.

Raised the readiness deadline to 45s, matching the budget client/wait-for-ready.ts already uses to wait for a Runtime Host. Also noted at both ends that the waiters have to outlast WINDOWS_PIPE_ACL_TIMEOUT_MS — the dependency wasn't visible in the code, which is how I missed it.

Agreed on the Qodo point — leaving the startup transport retention alone here.

中文

谢谢——已在 1f91603 修复。

readiness deadline 提到了 45s,与 client/wait-for-ready.ts 等待 Runtime Host 已经在用的预算一致。另外在两端都写明了等待者必须比 WINDOWS_PIPE_ACL_TIMEOUT_MS 活得久——这个依赖在代码里看不见,我这次就是这么漏掉的。

Qodo 那条同意——启动期 transport 保留这次不动。

@Astro-Han
Astro-Han merged commit b03b85e into main Aug 19, 2026
18 checks passed
@liugddx

liugddx commented Aug 19, 2026

Copy link
Copy Markdown
Member

维护者式预审 · PR #3235 @ 0a1f7a6

用通用对抗式规则审了这个 PR(exact head 0a1f7a68217f567245664429b6d9c31603cf87d0),跟踪了 local-ipc-listener.ts 的 fail-closed 路径,校验了诊断映射逻辑与测试。重建 monorepo(该路径 Windows-CI-gated,本地无法复现 9/9)。

方向正确。 根因判断(10s 超时误杀 PowerShell 5.1 冷启动;真正 ACL 错误 <1s 失败)成立;并且确认了 PR 依赖的关键安全性质 fail-closed 真实成立:local-ipc-listener.tsprepareAfterListen() resolve 前把启动期连接缓冲在 startupTransports授予 LOCAL_OWNER_CONNECTION_AUTHORITY;任何 reject 都会 abort 全部缓冲连接 + 关闭 server + cleanup。所以 10s→30s 只放大缓冲窗口,不放大授权窗口。"Fail-closed is unchanged" 成立。

Findings

P2 — 本 PR 唯一改变的行为(30s 真正传到 execFile)没有测试能证明
packages/runtime-host/src/control/endpoint.tstimeout: 选项 — 轴 F / 总原则 4。
删除思想实验:把 timeout: WINDOWS_PIPE_ACL_TIMEOUT_MS 改回 10_000 或删掉整行,Windows 之外没有任何测试变红。win32 的 describe 被 skip,没有可注入 exec 的接缝,而新测试断言的 30000ms 来自把常量插值进 windowsPipeAclFailure() —— 一个从不触碰 execFile 的纯函数。作者已如实披露("nothing proves the value reaches execFile")。这是本 PR 的核心改动却未被验证,仅靠一次未在 PR 内复现的 Windows CI 运行。

  • 修复(推荐 a):secureWindowsNamedPipe 一个可注入的 exec/timeout 接缝并断言传入值;或(b) 在 PR 里确认 windows_recovery job 确实跑到 windows-local-ipc-trust-host fixture 且绿色运行走的是 30s 路径。鉴于作者坦诚披露,不是硬 block,但应由维护者显式接受,而非静默放过。

P3 — error.killed === true 也会被 maxBuffer 溢出触发,被误标为超时
endpoint.ts windowsPipeAclFailure — 轴 B。
execFile 默认 maxBuffer(1MB)溢出会以 killed:true code:'ERR_CHILD_PROCESS_STDIO_MAXBUFFER' 杀掉子进程。killed === true 分支先判,于是这类失败会被报成 "could not confirm … within 30000ms"。此处输出极小、实际几乎不可能,故 P3。可选加固:超时分支再加 error.signal && error.code == null,或单独识别 maxBuffer code。

P3 — 只测负路径,成功路径与端到端拒绝未测(正反不对称)
control-endpoint.test.ts — 轴 F 正反对称。4 个新测试全断言失败映射;没有断言无错回调 resolve,也没有断言"拒绝后确实未授予任何权限"(该逻辑在 local-ipc-listener.ts,win32 路径在非 Windows 下不被执行)。此覆盖缺口是 Windows-only 路径固有的,已被承认,按对称规则记录。

P3 — fallback 消息会带出整段 ACL 脚本
describeExecFileFailurepowershell failed: ${clip(error.message)}:execFileerror.message"Command failed: powershell.exe … <整段 WINDOWS_PIPE_ACL_SCRIPT>"clip() 截到 1000 字符已有界,脚本本就在源码里(无真实泄露),但较噪。作者已标注为 "capped last resort",保留即可。

P3 —(遗留、超范围)ACL 身份按路径而非句柄识别
脚本 Get-Item -LiteralPath $env:…PIPE_PATH; SetAccessControl 是按名字解析要保护的管道,而非 Node 正在 listen 的句柄 — 轴 D。本 PR 未改脚本,超范围;但既然新注释/消息重申 "the whole trust boundary",提醒维护者:name-vs-handle 身份未被验证。此处无需动作。

我跑了/没跑什么

  • 在 exact head 0a1f7a6 审了源码+测试;跟踪了 startLocalIpcRuntimeHostListener 的 fail-closed 时序。
  • 未跑: @maka/runtime-host 的 build/typecheck/lint 与 node 测试套件 —— 本地在无关分支、改动 Windows-CI-gated,未复现作者的 9/9。本次审查无法执行真正的超时接线或 Windows ACL 路径 —— 正是 F1 指出的缺口。

Merge verdict

Ready,前提是维护者对 P2 显式拍板(F1:接受 Windows-CI-only 覆盖,或补 exec 接缝)。无 P0/P1,P3 可选。改动干净、范围坦诚,作者已预先化解了对抗式审查会提的多数问题。

🤖 用通用对抗式预审规则生成 · 只审查不修复

@Astro-Han
Astro-Han deleted the fix/runtime-host-windows-pipe-acl-diagnostics branch August 19, 2026 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants