Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## 0.14.0 (unreleased)

- Resolve Git from launch-time installation paths outside the workspace and use absolute argv-based execution. Disable executable fsmonitor configuration, require Git 2.36+, recognize linked worktrees and report unknown status when Git fails.
- Reject linked cache/trash paths and recheck mutation boundaries. Manage only versioned WinCode JSON entries and reserved overflow filenames; preserve legacy/unrecognized files instead of pruning arbitrary JSON or text. Keep partial trash outcomes when metadata writing fails after a move.
- Route architecture discovery through bounded workspace readers, reject outside project descriptors, bound graph parsing and directory enumeration, and propagate cancellation through actual reads. Architecture depth is now an integer from 1 to 5; reports expose incomplete scans and a 32768-character serialized output cap.
- Remove overlapping whitespace matching in local C# declarations and reject normalized declaration lines above 16384 characters as incomplete. Add isolated regression coverage for the previously blocking input and a real MCP heartbeat.

- Validate parent/child creation times in acceptance process-tree snapshots, rejecting stale parent-PID edges after Windows PID reuse. Keep strict exit checks for the real observed Code Host descendants.

- Synchronize bilingual setup/cache guidance, architecture/data flow, managed Skill manuals, native Host guidance and remaining roadmap with the verified 0.14.0 behavior. Separate healthy confirmation from recovery and current implementation from planned project binding/admission limits.
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,10 @@ The 2026-09-08 check of the current Codex connection against TavernDesk source p

`wincode_analyze_change_impact` is an alias of `analyze_change_impact`. Detailed workflows: [code intelligence](skills/wincode/references/code.md), [UI inspection](skills/wincode/references/ui.md), [diagnostics](skills/wincode/references/diagnostics.md).

Architecture analysis accepts integer depths 1–5 and returns `scanComplete`, `omissions` and output truncation evidence. Discovery examines at most 2000 entries; the tree preview examines 500. The graph reads at most 16 project descriptors, 64 KiB per file and 256 KiB total, and examines at most 2000 entry-point directory entries. The complete report is capped at 32768 UTF-16 characters. Outside-workspace projects are omitted; this tool does not evaluate MSBuild.

Git probes use a detected absolute installation path outside the workspace, require Git 2.36 or later and disable executable fsmonitor configuration. Missing or failed Git status is `unknown`, with no assertion that the tree is clean. Cache/trash writes reject existing symlinks and junctions in their paths. Cache cleanup manages versioned WinCode JSON and reserved overflow names; legacy/unrecognized files remain untouched and are outside the managed quota. These checks do not provide an atomic sandbox against concurrent filesystem replacement.

### Architecture and resource control

See the [architecture, data-flow and verification-gate guide](WinCode-架构与数据流说明.md) for the current component boundaries, request sequences, storage lifecycle and delivery checks (Chinese).
Expand Down Expand Up @@ -394,6 +398,10 @@ npm run delivery:verify

`wincode_analyze_change_impact` 是 `analyze_change_impact` 的别名。详细参数与工作流请参考对应手册:[代码分析](skills/wincode/references/code.md)、[UI 取证](skills/wincode/references/ui.md)、[系统诊断](skills/wincode/references/diagnostics.md)。

架构分析只接受整数深度 1–5,返回 `scanComplete`、`omissions` 和输出截断证据。项目发现最多检查 2000 个目录项,树预览最多 500 项;依赖图最多读取 16 个项目描述文件、每文件 64 KiB、合计 256 KiB,入口文件搜索合计最多检查 2000 项。整份报告最多 32768 个 UTF-16 字符。工作区外项目会省略,本工具不求值 MSBuild。

Git 探测从工作区外的安装位置取得绝对可执行路径,要求 Git 2.36 及以上,并禁用可执行的 fsmonitor 配置;缺失或查询失败明确为 `unknown`,不报告干净。缓存和回收写入拒绝路径中已有的符号链接/junction。缓存仅管理带版本标记的 WinCode JSON 与保留命名的 overflow;旧版及无法识别的文件保留,不计入受管配额。这些校验不提供对抗并发路径替换的原子沙盒保证。

### 架构设计与资源管控

```text
Expand Down
11 changes: 7 additions & 4 deletions WinCode-下一轮工程化迭代计划书.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# WinCode 下一轮工程化迭代计划书

更新:2026-09-10 14:01(北京时间)。工作区 D:/CODEX PROJECT/WinCode MCP;修复分支 codex/runtime-cache-continuity 基于 origin/main dda0203(已合并 #34),保留上一轮增量并完成本轮四类验收缺陷修复
更新:2026-09-10(北京时间)。工作区 D:/CODEX PROJECT/WinCode MCP;本地修复分支 codex/architecture-boundaries 基于 main 7d53fda(已合并 #35)。本轮优先落实架构审查第 1–2 批:执行/磁盘边界、Git 状态、本地正则和有界结构扫描。实际验证回执持续追加至工作日志

本版依据当前代码、多实例诊断和 GitHub 一手实现维护。用户随后已明确要求按计划实施;N1–N3 的推荐方向已确认,不重复申请方向审批。本轮先交付可独立验证的 N2 热态保留与 N3 的互斥取消基础,固定根迁移和完整准入容量尚未实现。已完成的 M0–M4、N2 从待办移除,历史证据保留在 [工作日志](docs/codex_worklog.md) 与 [CHANGELOG](CHANGELOG.md)。真实客户端配置和对外发布另按有效授权执行。
本版依据当前代码、多实例诊断和 GitHub 一手实现维护。用户已明确要求按设计开始修复;N1–N3 的推荐方向继续有效,不重复申请方向审批。此前 N2 热态保留与 N3 的互斥取消基础已完成,固定根迁移和完整准入容量尚未实现。已完成的 M0–M4、N2 从待办移除,历史证据保留在 [工作日志](docs/codex_worklog.md) 与 [CHANGELOG](CHANGELOG.md)。真实客户端配置和对外发布另按有效授权执行。

## 1. 最终推荐

Expand All @@ -26,7 +26,7 @@

已从开发待办移除:本机交付重建、原生 owner guard、UIA 启动探测延后、可逆手动释放、最小 WinForms 托盘/安全管道、状态过期与注册拒绝反馈、原生源码与交付绑定,以及已经运行的双实例托盘/Roslyn 贯通。对应核心 360/360、桌面 35/35 和后续专项回执见 [11:32 稳定性记录](docs/codex_worklog.md#2026-09-10-1132--0140-稳定性收尾工作流连续性状态可信度与原生交付北京时间)。这些是已有回归基线,不是下一轮重新建设任务。

N2 已取得此前核心 364/364;本轮完整核心 373/373、桌面 35/35、真实 Roslyn MCP 22 场景和 E4 错误契约 16 场景证据;同根十次重复打开、四次并发确认保持实际 Host PID/snapshot,SDK 变化仍要求新进程,冷加载与热重载损坏、取消/崩溃/超时分别验证。互斥队列取消会立即删除等待节点,执行中的清理仍持锁,但这还不是完整有界准入。当前交付身份与补充桌面/多实例回执统一记录在工作日志;不能据此声称正在运行的旧消费者已更新。
N2 曾取得核心 364/364,#35 历史基线为核心 373/373、桌面 35/35、真实 Roslyn MCP 22 场景和 E4 错误契约 16 场景。本轮第 1–2 批架构修复的最终核心为 385/385,真实 Roslyn 22 场景与 E4 16 场景重新通过,桌面未重跑。同根十次重复打开、四次并发确认保持实际 Host PID/snapshot,SDK 变化仍要求新进程,冷加载与热重载损坏、取消/崩溃/超时分别验证。互斥队列取消会立即删除等待节点,执行中的清理仍持锁,但这还不是完整有界准入。具体交付身份和历次回执统一记录在工作日志;不能据此声称正在运行的旧消费者已更新。

| 现象 | 当前证据等级 | 下一步 |
| --- | --- | --- |
Expand All @@ -35,7 +35,8 @@ N2 已取得此前核心 364/364;本轮完整核心 373/373、桌面 35/35、
| drain 监听器超过默认数量 | **已定位至测试客户端 SDK**;任务结束后监听器为 0,Gateway 没有同类警告 | 保留诊断;不抬高阈值或更换依赖冒充修复 |
| 独立实例共享同项目 cacheDir 的写入/清理 | 已复现并修复 peer prune 后悬空 overflow 命中;两进程回归通过 | N4 保留其他写入/退出交错与源码/UI 边界,不重复建设已通过用例 |
| 一个原生托盘专项没有生成 UI 回执 | **既有未定位失败**;旧脚本未保留退出码,超时只是推测,随后三次未复现 | N5 利用已补诊断复查,不能写成已修复 |
| 实际 Codex 的最新构建/Roslyn 消费闭环、其他软件接入、Node 22/远端 CI、长期大项目资源趋势 | **仍未完成或范围不足** | N5 保留并逐项完成,不从旧计划中误删 |
| PR #35 最终提交的 Node 22/24 与 CodeQL | 已通过并合并;属于 5d1ae37/7d53fda 历史基线 | 后续本地增量仍须取得自己的 CI,不沿用旧提交结果 |
| 实际 Codex 的最新构建/Roslyn 消费闭环、其他软件接入、长期大项目资源趋势 | **仍未完成或范围不足** | N5 保留并逐项完成,不从旧计划中误删 |

诊断依据:[三实例八场景](test-tmp/multi-agent/run-9uve7M/report.json)、[第二轮堆栈和保留的测试假设失败](test-tmp/multi-agent/run-ffxcyO/report.json)、[修正后帧与托盘容量边界](test-tmp/multi-agent/run-PxHPQo/report.json)、[十轮混合负载](test-tmp/mixed-load/run-HT12AB/report.json)。success 表示诊断场景完成,不能解释为未发现问题。SDK 超大输入的正确行为是报错并关闭通道,第二轮最初期待继续读取是测试假设错误。

Expand All @@ -57,6 +58,8 @@ N2 已取得此前核心 364/364;本轮完整核心 373/373、桌面 35/35、

剩余顺序:N1 → N3 → N4 → N5。N2 已先完成独立实现和验收;N1 改变跨项目公共行为时,仍须迁移已有切换及故障注入测试,不能以删掉故障覆盖换取通过。具体版本号在实施时确定,不按旧 M0–M5 的建议版本重发已有功能。

本轮第 1–2 批修复不等于完成 N1/N3。已收敛的静态路径检查没有解决恶意并发替换的原子性;协作取消没有证明能强制中断永久挂起的 OS I/O。A9 的 ResourceManager 旧清理列表与已注销进程身份交错纳入下一批生产清理回归;目前只有拦截 OS 动作的复现,尚未修改产品清理实现,不能报告真实 PID 复用误杀已经发生或已修复。

### N1:连接固定项目,阻止任务串线

目标:从根本上去除同一连接“最后一次 workspace_open 决定全部后续调用”的隐式切换。
Expand Down
6 changes: 5 additions & 1 deletion WinCode-架构与数据流说明.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# WinCode 架构、数据流与检查关口

**源码契约:0.14.0;基于 #34 合并基线及 PR #35 的缓存/工作连续性修复,更新日期:2026-09-10(北京时间)。具体提交、测试与合并状态见工作记录和 GitHub PR。**
**源码契约:0.14.0;基于已合并 PR #35 的 main 7d53fda,本地架构边界修复位于 codex/architecture-boundaries,更新日期:2026-09-10(北京时间)。具体提交、测试与合并状态见工作记录和 GitHub PR。**

本说明描述当前源码中已实现的结构。GitHub 分支保护的历史只读核查日期为 2026-09-08;本轮核对 PR 检查状态,不把它等同重新审计全部保护设置。历史实测结果见[工作记录](docs/codex_worklog.md)。源码版本、磁盘构建和客户端当前连接是三个不同对象,不能互相替代。

Expand Down Expand Up @@ -185,6 +185,10 @@ flowchart TB

源码、磁盘状态和多个调用之间不存在数据库式快照事务;Watcher/fingerprint/TTL 也不能保证每次观察均与外部写入同步。工作区 fingerprint 只作有界变更提示,watcher 不能成为唯一新鲜度依据。跨进程清理后,内存和磁盘读取都复核 overflow 是否存在,缺失即重建;这不是跨调用租约,引用未来仍可能过期,需要重新请求。

本轮磁盘边界收敛:`GitClient` 从启动环境的工作区外安装位置解析绝对 Git,使用 argv、禁止 shell,并要求支持布尔 fsmonitor 配置的 Git 2.36+;查询强制关闭 fsmonitor。linked worktree 与 Git 管理子目录由 Git 判断;状态失败返回 unknown,不推断 clean。`FileSystemBoundary` 检查路径及实际目标;Cache 初始化/维护/overflow 和 trash 写入拒绝路径中的链接,Cache 同时固定已打开目录的文件系统身份。版本化 JSON 名称与头标记约束清理所有权;旧版/无法识别的文件保留、重算,不计入受管磁盘配额。预先存在的 junction 已有回归,并发恶意替换的原子隔离没有实现。

架构概览不再另走无总量限制的旧树/项目读取:共用 ProjectDiscovery、WorkspaceBrowser 和 OperationContext。发现上限 2000 项、树 500 项;图上限 16 个项目/64 KiB 单文件/256 KiB 合计、入口枚举 2000 项,返回完整性与遗漏;整份报告上限 32768 UTF-16 字符。取消后的读取在实际返回并关闭句柄后结束归属,不靠外层超时提前释放。文本声明先规范化空白并拒绝超过 16384 字符的规范化单行,避免原有重叠可选空白匹配;不是完整语法分析器。

### 5.2 工作区切换

健康同根确认:`工作区互斥锁 → 读取概览/刷新提示 → 保留 Host、快照、watcher 和 session`。它不设置切换屏障、不等待普通查询排空;取消只读确认不会制造恢复门。
Expand Down
7 changes: 5 additions & 2 deletions WinCode-迭代路线图.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# WinCode 迭代路线图

更新:2026-09-10 13:58(北京时间)。当前修复分支 codex/runtime-cache-continuity 基于 origin/main dda0203(已合并 #34 的 0.14.0 基线),保留上一轮未提交增量并修复本轮验收缺陷。本文件只列未完成工作。完整推荐与验收标准见 [下一轮工程化迭代计划书](WinCode-下一轮工程化迭代计划书.md),历史实施及失败见 [工作日志](docs/codex_worklog.md)。
更新:2026-09-10(北京时间)。本地修复分支 codex/architecture-boundaries 基于 main 7d53fda(已合并 #35 的 0.14.0 基线);本轮优先修执行/磁盘边界、Git 状态、声明正则和有界架构扫描。本文件只列未完成工作。完整推荐与验收标准见 [下一轮工程化迭代计划书](WinCode-下一轮工程化迭代计划书.md),历史实施及失败见 [工作日志](docs/codex_worklog.md)。

## 最终推荐

Expand All @@ -14,7 +14,7 @@

实际消费者最新构建/Roslyn 接入、既有未定位原生验收失败、共享存储竞争、长期资源趋势等仍保留为待验,不能随已完成功能删除。

本轮移除 N2:健康同路径重复打开保留 Host/snapshot,Windows 大小写/分隔符别名保持身份;已知 SDK 重启要求和清理失败门禁继续生效。此前核心 364/364;本轮完整核心 373/373、桌面 35/35、真实 Roslyn 22 场景、E4 16 场景通过。N3 的物理取消/FIFO 基础已实现,但统一容量与过载尚未完成;具体回执和测试前提修正保留在工作日志。
此前已移除 N2:健康同路径重复打开保留 Host/snapshot,Windows 大小写/分隔符别名保持身份;已知 SDK 重启要求和清理失败门禁继续生效。#35 历史基线为核心 373/373、桌面 35/35、真实 Roslyn 22 场景、E4 16 场景。本轮架构第 1–2 批修复最终通过核心 385/385、真实 Roslyn 22 和 E4 16 场景,桌面未重跑。N3 的物理取消/FIFO 基础已实现,但统一容量与过载尚未完成;具体回执和测试前提修正保留在工作日志。

补充验收修复:实际内容绑定的上下文缓存、按内容复用解析的有界文本扫描、缺失附件命中重建,以及同根确认取消/慢查询边界已通过新增 8 项运行回归及 1 项 PID 复用观察器回归。真实 Roslyn 取消后 PID/snapshot 保留;不把这些结果称作 N1 或完整 N3 已完成。

Expand All @@ -24,11 +24,14 @@
| --- | --- | --- |
| N1 | 连接固定工作区,错误目标在副作用前拒绝 | 同一连接打开 B 不改变已绑定 A 的根、Host、快照、watcher、cache/trash;独立 B 连接继续正确 |
| N3 | 有界受理、FIFO 等待、取消归还、明确过载 | 建议从每实例 32 个未完成业务请求、4 个状态槽及 64 KiB 参数预算实测;正常突发顺畅,超载不无限积压、不重启、不自动重放 |
| A9 | 清理快照与已注销进程身份交错 | 旧清理列表不盲目终止已失去归属的 PID;区分模拟 OS 拦截与真实进程证据 |
| N4 | 同项目多实例的共享存储/源码变更边界 | 实际缓存/打包读写、prune/overflow 与退出交错无错误正文;源码变化后旧定位失效;UIA 窗口隔离另验 |
| N5 | 实际客户端闭环、残余失败和交付验收 | 明确项目配置与实际 build/provider/schema;至少两种目标软件接入;旧失败保留根因状态,Node 22/远端 CI 与长期观测按实际证据报告 |

N2 已先完成;接下来实施 N1 时保留已有热态与故障恢复覆盖。N3 参数只是起始建议,需按现有合法请求和相同任务对照调整。N4 已复现并修复 peer prune 后的悬空附件命中,新增双进程回归;剩余源码/UI 竞争与其他存储交错继续验证,不预先引入跨进程锁或按每次启动复制全部持久缓存。

PR #35 最终提交的 Node 22/24/CodeQL 已通过并合并,属于历史基线;本轮本地增量的远端 CI 与实际消费者仍待验证。静态链接拒绝不提供对抗并发路径替换的原子保证,扫描预算/协作取消不保证能强制中断永久挂起的 OS I/O。

## 必须保留的边界

- Windows 11 x64 是开发/测试基准;其他系统、Windows 或依赖版本不保证同样效果,macOS/Linux 用户 fork 适配。
Expand Down
Loading