Skip to content

fix(runtime): enforce private IO and preserve Windows long paths - #7603

Open
xyx2002OvO wants to merge 4 commits into
mainfrom
codex/pr5677-private-io
Open

xyx2002OvO wants to merge 4 commits into
mainfrom
codex/pr5677-private-io

Conversation

@xyx2002OvO

@xyx2002OvO xyx2002OvO commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Goal And Delivered Outcome

Private local snapshot/session/validation writes need native Windows access controls, and ordinary long paths must retain complete atomic publication and migration guards. This proposal reuses a platform IO helper to enforce protected owner/admin DACLs before dispatch/publication, verifies returned private snapshots, and uses extended Win32 paths without rewriting stored path text.

This remains an independently reviewable prerequisite split from #5677. #5677 should integrate this boundary after it lands; freshness/recovery policy is not moved into this PR.

Author Declaration

Criterion Disposition Owner / evidence
Restrict private producer and consumer IO; reject broad ACLs and digest mismatch implemented runtime/private_permissions.py, Effect snapshot adapters, native Windows DACL tests
Preserve complete bytes, interrupted replacement and bounded access-denial failure implemented Existing document_io.py / file_lock.py owners and native long-path/atomic-write tests
Preserve migration route text and redirection fences implemented Existing migration owner; path-text and native junction coverage retained
Exercise the Effect snapshot contract under the same native Windows ACL rule as production implemented effect_runtime_snapshot.test.ts now selects the checkout Python and protects both the fixture directory and file before reads/writes

Scope And Continuation

Complete implementation for this IO prerequisite. #5677 keeps necessary protection until this proposal is landed and integrated. No public scan allowance policy, result/direction decisions or new capability is included. The helper owns platform permissions only; existing callers keep namespace, locks and authority decisions.

The proposal is ready for renewed review and hosted CI qualification. It is not authorized for merge by this update.

Validation

  • Tested revision: afe5a05f21401490401481455fdee25444d8bccb.
  • Run state: finished locally; new hosted CI is pending after the head update.
  • Input classes: synthetic.
Check kind Result Evidence / limitation
Windows curated runtime suite passed Qualified Node 22.22.3: 285 total, 257 passed, 28 expected skips, 0 failed. This includes both Effect snapshot tests.
Native Python IO suite passed DACL/snapshot, document IO, Todo validation, file-lock atomicity, migration path text and atomic writes: 75 passed, 1 platform skip.
Python runtime bridge passed 3 passed, 2 expected skips.
Browser regression scenario passed Packaged execution-service-offline scenario completed successfully.
Static/build passed Ruff on changed Python; mypy with CI Linux platform on 17 configured sources; TypeScript control-plane typecheck; chat bundle build; git diff --check; DCO; semantic advisory found 0 supported new vocabulary carriers.
CLI base/head comparison passed 96 base cases, 96 candidate cases, 0 candidate-only failures, 0 review-required deltas.
Standard premerge aggregate partial / held Direct checks, compile checks, 8/8 risk-profile smokes and 7/9 catalog smokes passed. The full CLI budget smoke reproduces the same Windows long-path fixture failure on latest main; the following Todo user-gate smoke passes independently and is only failing in that aggregate sequence. These are preserved as non-green evidence rather than relabelled as passes.

Prior Hosted CI Failure Attribution

The three failed jobs on the previous head did not reach or fail the reviewed Windows snapshot fixture:

  • windows-powershell and kernel-contracts stopped on the same CLI output ceiling (25975 / 25828 versus 25500). Latest main contains the calibrated ceiling from test(heartbeat): calibrate complete thin JSON scope budget #7614; the branch now includes it.
  • chat-bundle-browser (1) timed out in the original-conversation-unavailable scenario. Latest main contains the separate packaged execution-service-offline repair from Show original conversation read failures without setup detours #7608, and that scenario passes locally and in the hosted full packaged smoke. The narrower delegation-search smoke still times out on the same alert and remains an explicit hold below.

Fresh CI on this exact head is the authoritative hosted result.

Current Hosted CI Readback

The exact head proves the proposal's affected boundaries: windows-powershell, all three typescript-core shards, kernel-contracts, kernel-static-checks, PostgreSQL real-server integration, Node minimum compatibility, DCO, dependency review and the stage2c correctness/integration jobs pass. In particular, the native Windows job completed the host-hardened control-plane suite that includes the corrected standalone Effect snapshot tests.

The overall PR checks are still non-green for failures outside this proposal's changed product surface:

  • Optional Ark and MemT Python 3.11 both fail the same test_turn_plan_missing_todo_does_not_bypass_contract_errors[False] assertion; the two 3.13 matrix jobs are then cancelled. The exact two-case probe is 1 failed, 1 passed on both this head and immutable origin/main@544aa0fee; fix(runtime): enforce private IO and preserve Windows long paths #7603 does not change turn_driver/driver.py.
  • chat-bundle-browser (1) still times out waiting for the delegation-search original-steward-unavailable alert.
  • chat-bundle-browser (2) and the release build fail the same synthetic team-evidence text wait. The exact smoke also reproduces locally; this PR has no frontend diff.
  • dashboard-browser (2) records four lens switches below 1 second and one at about 1.16 seconds, tripping the frozen 1-second browser budget; this PR has no frontend diff.
  • The aggregate checks failure is a consequence of those browser jobs, not a separate failure.

These failures are preserved as CI holds and are not relabelled as passing evidence for this PR. They should be repaired on their owning main surfaces rather than folded into this private-IO prerequisite.

At the latest readback, six generic pytest shards are still PENDING without a runner result. They remain unqualified; the PR stays open, blocked and unmerged.

Signed-off-by: Tartar <xiaoyx67@mail2.sysu.edu.cn>
Signed-off-by: Tartar <xiaoyx67@mail2.sysu.edu.cn>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

当前完整 head 5658750bfa4686619273e6e2b15e0779adda0dbe:REQUEST_CHANGES。平台前置拆分合理,但现有必需 Windows 快照测试尚未适配新的安全前置。

动机 / Motivation

在 Windows 或 POSIX 上运行 Agent、需要安全保存本地快照和原会话的操作者。

大型本地快照、会话和验证声明需要在写入敏感内容前限制访问;Windows 的 chmod 不能代替原生访问控制,普通长路径也会令临时文件或替换失败。

本提案集中实现平台权限和长路径 IO,POSIX 回归通过;旧 TypeScript 快照测试未适配新增的 Windows ACL 前置,当前完整交付仍需修复和真实平台复验。

本次只评审可独立落地的平台 IO 前置,不认证整个 freshness 提案、正式安装、模型采用或研究收益。

改动思路 / Approach

权限事实应由平台 IO helper 提供,命名空间、锁和业务判断继续归现有调用者;文档原子写和迁移 owner 可以复用,无需第二套控制面。

保留独立平台前置,修复现有 Windows-curated TS 测试的 helper/原生 ACL 准备并执行完整必需验证;不得绕过权限拒绝或以跳过测试代替。

生产路径仍是 Python 创建私有目录/文件,TypeScript 在消费前检查,原业务 owner 再处理请求和结果。保护失败必须保留错误;不能将缺 helper、宽 ACL 或未知响应解释成正常完成。没有理由要求此 PR 先实现整个 controller 或 freshness 方案。

具体改动 / Changes

完整17文件 +855/-62:生产9文件 +318/-39,测试/夹具8文件 +537/-23;无文档、生成文件或机械搬迁。基线 898363635d4737f84b6a673a9a11265a121b6f57,当前主干参照 51c1dc447858c351691711de21a638b6c71c118e。

关键代码讲解

  • protect_private_path / require_private_path 集中 POSIX mode 和 Windows protected DACL。写前保护;读时拒绝重定向、宽权限和改变后的句柄身份,不把权限读取提升为任务许可。
  • privateFile 增加固定 Python helper 和 dev/ino 对照。正常 Python daemon 会设置 helper;直接运行的原 TS 测试没有这项准备,形成下述 P2。
  • atomic_write_state_text 复用完整UTF-8、原子创建/替换与目录持久化;私有文件在写敏感内容前保护。validation和session保留原身份与旧文件失败恢复。
  • _digest / _copy 使用 extended 原生地址,保留存储路径文本、重定向和来源重查;file_lock.py 仅对 Windows access-denial 做有界 holder 重试。

规范依据:spec_ref https://github.com/loopx-project/loopx/pull/5677#pullrequestreview-5685607407,spec_revision 9394b2395f10c4537f6af995d821c3e2c2193e6a。该维护者评审的 CR2 要求平台修复按自己 owner 独立交付并验证,当前为 not_met:边界已拆出,但下述既有 Windows caller 仍未迁移。它没有要求删除必要保护或等待整个父提案。

对主干的风险 / Risks

P2:现有 Windows-curated 快照测试不满足新 ACL 前置

仓库 .github/workflows/python-tests.yml 的原生 Windows curated 命令包含 tests/control_plane_ts/effect_runtime_snapshot.test.ts。该文件两项测试直接建立普通临时目录/文件,再调用快照 API;没有设置 LOOPX_EFFECT_RUNTIME_PYTHON_BIN 或建立原生 ACL。新变量只在 Python daemon 的子进程环境及新 Python 测试里设置,不会配置独立启动的 node:test。

独立控制流探针使用真实 Node、原样旧 TS 模块,只选择 win32 分支并保留同一原生临时目录、移除 helper 变量。不可变 base 2 passed,当前 head 2 failed;直接公开 reader 从接受变为 private snapshot ACL helper unavailable。探针没有执行 Windows APIs,也不宣称已在 Windows 跑出该结果。 它定位了确定性的缺前置分支;原生 ACL/长路径/共享行为还需实际平台复验。

最小修复是更新原 TS fixture:使用固定受信 Python和真实受保护ACL,再跑原Windows curated命令及宽ACL/错误digest负例。不能放宽缺helper拒绝、去掉断言或把该suite跳过来变绿。Mac绿测或只跑新增Python用例不能覆盖此caller。

非阻断简化建议

replace_retry_seconds 只在通用 writer 定义和转发,完整生产搜索没有调用者;holder另写了固定重试循环。可删除该闲置参数,或让真实holder复用同一有界IO owner。该建议不要求新框架、不扩大本次修复,也不是当前请求修改的依据。

验证与语义边界

  • PASS:159 Python passed/31 Windows skips;原 POSIX 文档、迁移/回滚、验证和锁路径通过,原 TS 快照模块 2 passed。
  • PASS:Ruff、配置内17文件 mypy、完整 control-plane TypeScript typecheck、diff、DCO、双语差分和明确路径公共边界扫描均通过。 diff-scoped semantic advisory没有发现支持范围内的新词表;随后标准full semantic检查通过,不把空扫描当语义证明。
  • FAIL:上述匹配分支对照及当前strict CQR;标准 premerge 四项direct及compile、catalog八项和risk八项通过;另一个catalog输出预算检查25836>25500失败,同命令在不可变base同因失败。严格 CQR 因当前失败与必需Windows未验保持FAIL,整体gate未通过。
  • UNVERIFIED:本机为 macOS,31 项 Windows 专用 Python 用例跳过;分支探针未执行 Windows 内核。作者的原生结果和九项 symlink 夹具失败按声明保留,未转为独立通过。

语义与 CI 对齐

这是现有 Windows IO 路径的默认安全变化,非 opt-in;POSIX、原业务状态、结果和权限 owner 保留。ACL拒绝是强制检查而非建议;OS事实、路径和digest不应成为第二份Task/Stop/lease权威。未新增共享任务词表。未抓取、轮询或等待CI;这里依据仓库本地原命令和实际探针判断。

我的整体评价 / Verdict

权限事实应由平台 IO helper 提供,命名空间、锁和业务判断继续归现有调用者;文档原子写和迁移 owner 可以复用,无需第二套控制面。

保留独立平台前置,修复现有 Windows-curated TS 测试的 helper/原生 ACL 准备并执行完整必需验证;不得绕过权限拒绝或以跳过测试代替。

long_horizon:not_yet_proven;user_experience:not_yet_proven,局部 POSIX 通过不能认证缺失的原生平台资格。已检查完整 diff 和内部 IO/CLI 消费者;没有页面、布局、文案或样式变化,视觉改动评审不适用。 未验证范围:本机为 macOS,31 项 Windows 专用 Python 用例跳过;分支探针未执行 Windows 内核。作者的原生结果和九项 symlink 夹具失败按声明保留,未转为独立通过。

修复旧平台fixture并取得当前完整Windows必需suite、实际权限/路径负例的证据后复审。保留作者失败记录,不把新版本或原测试数量当作已安装采用/长程收益。本次没有修改源码、合并或安装。

English verdict: REQUEST_CHANGES — keep the platform IO protection, adapt the existing Windows-curated snapshot fixtures to the new ACL/helper prerequisites, and qualify the native path. The matched branch probe confirms a caller compatibility gap; it is not native Windows execution.

if (entry.isSymbolicLink()) throw new Error("private snapshot is a symlink");
if (process.platform === "win32") {
const python = process.env.LOOPX_EFFECT_RUNTIME_PYTHON_BIN;
if (!python || !isAbsolute(python)) throw new Error("private snapshot ACL helper unavailable");

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[P2] 迁移现有 Windows-curated 快照测试的安全前置。原 effect_runtime_snapshot.test.ts 两项测试直接创建普通文件并调用 API,没有设置此 helper 或建立原生受保护 ACL;该 suite 仍被 python-tests.yml 的 Windows curated 命令直接执行。仅 Python daemon 的子进程环境设置新变量,不会准备独立 node:test。相同真实 Node 分支探针(非 Windows 内核)在不可变 base 2 pass/head 2 fail,公开 reader 报 helper unavailable。请保留此安全拒绝,更新旧 TS fixture 的固定 helper/真实 DACL,并跑原 Windows 命令及宽 ACL/digest 负例;不要以删断言或 skip 恢复通过。

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

已在 afe5a05f21401490401481455fdee25444d8bccb 按这个 finding 修复,保留生产侧严格拒绝:

  • effect_runtime_snapshot.test.ts 在 Windows 显式选择 checkout Python,并设置 LOOPX_EFFECT_RUNTIME_PYTHON_BIN;
  • 两个旧 fixture 都先对目录和文件调用生产同源的 protect_private_path,再进入公开 reader/writer;没有删除断言或增加 skip;
  • 用 CI 对齐的 Node 22.22.3 跑完整 Windows curated 命令:285 total / 257 passed / 28 expected skipped / 0 failed,两个 Effect snapshot case 均通过;
  • 同批 native Python suite 的宽 ACL、digest、atomic write、migration/path-text 负例:75 passed / 1 platform skip。

新一轮 hosted CI 已由该 head 触发,PR 描述也记录了旧 CI 三个失败的归因和本地门禁限制,请复审这个 exact head。

Signed-off-by: Tartar <xiaoyx67@mail2.sysu.edu.cn>
Signed-off-by: Tartar <xiaoyx67@mail2.sysu.edu.cn>
@xyx2002OvO

xyx2002OvO commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor Author

CI/CD follow-up — 2026-10-29

No merge is requested. #7603 remains open at afe5a05f21401490401481455fdee25444d8bccb; the findings below separate this PR's private-I/O change from failures already present on its base.

  1. Ark/MemT turn-driver regression — fixed in fix(turn): preserve missing-lineage contract errors #7618. Commit 3ebad9d021 made a normal READY_FOR_HOST envelope with neither a selected Todo nor a signed scoped request identity become BLOCKED before _session_plan could return the typed missing_turn_lineage contract error. fix(turn): preserve missing-lineage contract errors #7618 preserves that contract-error path while retaining replan and invalid request/session holds. On exact head ab0e378e74f9c5cdc3d09ac7b380f703f2421bd0, hosted Ark 3.11, Ark 3.13, MemT 3.11 and MemT 3.13 all pass.

  2. Delegation-search browser smoke — fixed and merged in test(dashboard): let the delegation smoke read the real steward source #7599. The smoke kept a permanent Playwright route for the steward endpoint, so its later source-unavailable case never reached the real source. test(dashboard): let the delegation smoke read the real steward source #7599 removes that route before the real-source assertion and is now on main.

  3. Team-evidence browser and release-artifact failures — fixed independently in test(chat): restore evidence subject before linked recovery #7620. The smoke retained a request-validation fixture with todo_id=null before switching to the real Todo fixture, so the component correctly rejected the evidence revision and the assertion at team-evidence-return-smoke.mjs:133 timed out. This same assertion caused both chat-bundle-browser (2) and the Release Artifacts / build failure. test(chat): restore evidence subject before linked recovery #7620 extracts only that one-file fix from conflicting test: preserve recovery fixtures and pin CLI comparison ancestry #7604 onto current main; on exact head f869d7b500f82a26e5a6b1341abd140c681d8a07, hosted chat-bundle-browser (2) and Release Artifacts / build both pass.

  4. Dashboard M2 performance failure — runner outlier not reproduced, budget unchanged. One fix(runtime): enforce private IO and preserve Windows long paths #7603 browser shard measured switch times [912, 486, 759, 1160, 806] ms and exceeded the frozen 1000 ms bound once. The same fix(runtime): enforce private IO and preserve Windows long paths #7603 release-artifact packaged run measured [208.8, 209.7, 258.3, 178.7, 154.3] ms, and an independent local packaged run measured [152.76, 142.96, 188.35, 106.49, 117.25] ms. A fresh hosted dashboard-browser (2) now passes with the 1000 ms budget unchanged.

  5. Six Python shards — shared global queue, not a test result. They remain PENDING behind the repository's per-shard concurrency groups. This is queue contention, so it is neither a pass nor a code failure.

Current next boundary: let #7618 and #7620 complete normal review, then land the independent baseline fixes through the repository's merge process, rebase #7603 onto the resulting latest main, and run its full matrix. #7603 is still BEHIND with CHANGES_REQUESTED; it should not be merged in its current state.

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max

完整 head afe5a05f21401490401481455fdee25444d8bccb:REQUEST_CHANGES,目前阻断是原生 Windows 的独立资格证据缺口。前次指出的 TS fixture/helper 准备遗漏已在源码上修复;本轮没有复现新的 Windows 产品缺陷,也不把作者报告的通过结果写成独立执行。

动机 / Motivation

需要在 Windows 安全保存快照、验证声明和原会话,并在长路径或写入失败后继续工作的操作者。

一次大快照需要先限制本地访问,再交给执行程序;旧 Windows 路径只有 chmod,不能证明原生访问控制。提案把平台保护接入既有写入和读取入口,同时维持原子替换与原会话身份。

当前源码已补齐旧 TS 快照 fixture 的 Python helper 与保护准备,本轮 POSIX 对照和真实 runtime 路径通过;Windows 内核行为仍只有作者结果声明,独立资格尚未读回。

本次只评审可独立落地的平台 IO 前置,不认证整个 freshness 提案、安装、模型采用或长程收益。

改动思路 / Approach

权限事实保留在平台 IO helper,业务身份、锁、恢复和结算仍归既有 owner;不应为缩小 diff 删除保护,也无需新增控制面。

保留这一完整平台前置,旧 fixture 修复已确认;最小剩余工作是取得当前 head 的原生 Windows 独立执行或可核验读回,保留 ACL 拒绝与全部原断言。

生产链仍是 Python 创建并保护私有目录/文件,TS 验证后消费,原业务 owner 处理结果。权限保护失败要保持拒绝,提交后的响应读回不确定继续归原恢复边界;helper 不能把文件路径或 ACL 变成任务准入事实。Windows 上每次快照的固定 helper 调用有成本,但它是独立平台 IO;本轮没有测量其长程成本,更没有要求把它改成新控制面。

具体改动 / Changes

基线 544aa0fee5dad33e3b70496dadfb3ffd36400e13;完整18文件 +891/-68,生产9文件 +318/-39,测试/夹具9文件 +573/-29。最新已抓取 main ce4c78088ea464cb31231513882bed6bb6933156 相对该基线未更改这18条路径;仍需按最终集成版本复核。

规范依据:spec_ref https://github.com/loopx-project/loopx/pull/5677#pullrequestreview-5685607407;spec_revision 9394b2395f10c4537f6af995d821c3e2c2193e6a。变更前维护者 CR2 要求平台前置按自己的 owner 独立交付并验收。owner 拆分与必要保护符合该边界;原生资格当前为 not_met,缺的是下面的独立观察,不是要求整个 freshness 或 controller 方案先完成。

关键代码讲解

  • protect_private_path / require_private_path 集中 POSIX mode、protected DACL 和已打开句柄身份;保持私有内容写入前保护、拒绝 reparse 和未知权限。
  • privateFile 使用固定的 package Python helper,并对照 dev/ino。当前 旧 TS fixture 已选择 checkout Python、设置 helper 变量,并在两个原测试中先保护目录和文件,未删断言或新增 skip。
  • atomic_write_state_text 复用同目录完整写入、fsync、create-only/link 或 replace;validation 和 session 保留原摘要、原身份及失败时旧文件。
  • _digest / _copy 将 extended path 限定在 IO 地址,持久路由文本与回滚仍由原迁移 owner 管理;project_prompt.py 保持 portable 相对路径。
  • _write_holder_sidecar 对 Windows access-denial 做有界替换重试,保留旧完整内容,其他错误直接抛出。replace_retry_seconds 的定义/转发仍没有实际调用者,可后续删除闲置参数或复用同一有界替换 owner;这是非阻断简化建议。

对主干的风险 / Risks

P2 · 必需原生路径尚无独立执行读回

本轮宿主为 macOS,31 个 Windows 专用 Python 用例跳过;没有独立 Windows DACL、长路径、共享句柄或完整 curated suite 的执行读回,作者声明未转记为本轮通过。

作者在当前评论报告 Node 22.22.3 下 curated TS 257 passed/28 expected skipped,原生 Python 75 passed/1 skip。本轮读了这些声明和修复源码,但没有可独立核验的 Windows 执行产物;这不是“CI 未绿所以不审”,也不声称这些测试失败。macOS 的通过和 process.platform 分支模拟不能证明 Windows 内核的 DACL、长路径或 delete sharing。

最小补齐:在原生 Windows 对当前 head 执行原 curated TS 命令及 DACL、digest、长路径、共享拒绝和迁移回滚负例,提供绑定 head、OS、Python/Node、命令与完整结果的可核验记录;无需绕过安全拒绝或为本条强改生产源码。 该补齐可由原平台验证 owner 提供,不制造新的用户审批、付费模型或整个项目 gate。

本轮独立证据

观察 结果与范围
当前完整相关 Python 模块 PASS:173 passed,另31个 Windows 用例跳过;跳过部分单列为 UNVERIFIED。
不可变 base 公共模块 PASS:163 passed/5 platform skips;两边测试集合不同,不据数量差断言等价。
TS snapshot 公开 reader/writer PASS:当前模块2 passed,真实2.2MB文件、digest和不安全引用负例;本机为POSIX。
匹配文件 IO 对照 PASS:同一合成输入在两版本均保留完整字节、create-only拒绝、替换失败旧文件、tamper拒绝和会话身份;私有父目录明确从0755变为0700。独立 owner-only oracle 在base失败/head通过,未抹去这个有意差异。
原生本地 runtime 边界 PASS:同三项 restart/typed-write、timeout不重发、digest拒绝在base与head各3 passed;使用可丢弃状态。
标准门禁与静态 PASS:6项direct/compile、9项catalog、8项risk;Ruff、配置内17文件mypy、TS typecheck、DCO/diff、18文件公共扫描。当前quota预算smoke通过。
strict CQR / Windows FAIL / UNVERIFIED:精确CQR cqr_2063991fbed9b029b6f5 保留必需Windows未验,不因其余检查通过而放宽。

前轮旧 head/base 的 quota预算失败与旧fixture问题保留历史;当前head的预算检查已通过,不能继续称为当前回归。首次公共扫描因隐式runtime路由冲突拒绝,改用显式registry/runtime后18文件零命中;没有修改实际路由状态。未抓取、轮询或等待CI。

语义与 CI 对齐

这是现有私有IO的默认安全变化,没有product opt-in/default-off承诺。普通POSIX路径的对照保持完整字节和失败语义;新增私有父目录保护被明确披露。未新增共享任务词表;diff advisory没有发现支持范围内的新carrier,不把空扫描当完整语义证明。ACL、digest和身份拒绝为机器检查;公共协议没有夸大Actor生命周期或授予新权限。

我的整体评价 / Verdict

平台前置的范围和owner选择合理,原fixture遗漏已解决;当前整体资格为 not_yet_proven,不继承上轮的批准轨迹,也不要求删掉必要安全代码。

long_horizon:not_yet_proven;user_experience:not_yet_proven,两者限定为受影响原生平台的安全保存与恢复尚无独立读回,POSIX没有观察到额外交互轮次。已检查完整 diff 及内部 IO/CLI 消费者;没有页面、布局、文案或样式变化,视觉评审不适用。 未验证范围:本轮宿主为 macOS,31 个 Windows 专用 Python 用例跳过;没有独立 Windows DACL、长路径、共享句柄或完整 curated suite 的执行读回,作者声明未转记为本轮通过。

保留这一完整平台前置,旧 fixture 修复已确认;最小剩余工作是取得当前 head 的原生 Windows 独立执行或可核验读回,保留 ACL 拒绝与全部原断言。 架构保留,闲置参数清理可安全后续进行;原生验证缺口继续保持,不以安装、PR数量、作者计数或结构检查代替实际结果。本轮没有修改源码、合并或安装。

English verdict: REQUEST_CHANGES — afe5a05. The prior fixture omission is source-resolved and local POSIX, matched IO, runtime and premerge checks pass. Native Windows qualification is still independently unverified; this is an evidence hold, not a claim of a newly reproduced Windows defect.

This branch has not been deployed

No deployments
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.

2 participants