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
4 changes: 3 additions & 1 deletion docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
|---|---|
| main 默认:自研核心 + 系统 ConPTY | R1 限定总验收和有限 VT/Unicode 子集;默认构建不需要 Rust |
| main 显式候选:`termforge.4` + 系统 ConPTY | [固定来源/补丁台账](../experiments/candidates/alacritty/PROVENANCE.md)、[适配边界](../experiments/core/CANDIDATE.md)、[#39 字素合同](research/streaming-graphemes.md);仅按已有合同验收 |
| PR #50 实验:`termforge.3` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);尚未与 main `.4` 联合验证;[resize #51](https://github.com/JavaZeroo/termforge/issues/51)、[Console-width Vim #52](https://github.com/JavaZeroo/termforge/issues/52)、[确定性 sender fence #53](https://github.com/JavaZeroo/termforge/issues/53)仍开放,已有 completed 观察不构成部分发送取消验收 |
| PR #50 实验:`termforge.4` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);[联合基线](research/joint-conpty-baseline.md)已固定,产品回归未全绿;[resize #51](https://github.com/JavaZeroo/termforge/issues/51)、[Console-width Vim #52](https://github.com/JavaZeroo/termforge/issues/52)、[确定性 sender fence #53](https://github.com/JavaZeroo/termforge/issues/53)仍开放,已有 completed 观察不构成部分发送取消验收 |

R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分别只代表原记录。源 VT、原生控制台 CHAR_INFO、transport、末端状态、自有 DIB、绘制提交和真实呈现是不同检查点;未知端点保持未知。

显式官方后端的旧 `.3` 实现及独立生命期/双 SHA 拒绝记录见[实验合同](research/experimental-conpty-backend.md)与[冻结验证](../experiments/conpty/results/2026-10-26-reviewed-backend/validation.json)。联合源码 `3e5b96d` 的[三配置清单](../experiments/conpty/results/2026-10-26-joint-backend/validation.json)分别记录默认43/45、候选/system 48/48、显式官方46/48(shell套件超时,未完成项仍未知);原resize/Vim各一红一绿、粘贴两红。新恢复/worker/工作区失败由 #61–#63 承接,旧失败不因其他轮成功变成通过。

## 产品能力的限定验收

| 范围 | 结果与复现入口 | 可以支持的结论与限制 |
Expand Down
4 changes: 2 additions & 2 deletions docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
|---|---|---|
| 默认 main:自研核心 + 系统 ConPTY | 默认构建与已发布 Alpha 的基础路线,不需要 Rust | 已有 R1 限定验收;VT/Unicode 能力仍为有限子集,不能引用候选核心的字素或 TUI 结果 |
| 显式候选 main:`termforge.4` + 系统 ConPTY | `TERMFORGE_BUILD_CANDIDATE_ADAPTER=ON`;按 [ADR-0003](adr/0003-core-reference-and-reuse.md)推进 R2 新终端能力 | [固定来源](../experiments/candidates/alacritty/PROVENANCE.md)、[适配边界](../experiments/core/CANDIDATE.md)与 [#39 字素合同](research/streaming-graphemes.md);候选正确性通过不关闭系统 ConPTY 或 R2 父项 |
| 实验分支:`termforge.3` + 固定官方 ConPTY | [PR #50(Draft)](https://github.com/JavaZeroo/termforge/pull/50),尚未合并,也未与 main 的 `.4` 联合验收 | [#47](https://github.com/JavaZeroo/termforge/issues/47) 跟踪后端整合;终端 margin 与原生状态分列。[resize 残尾 #51](https://github.com/JavaZeroo/termforge/issues/51)、[Console-width Vim #52](https://github.com/JavaZeroo/termforge/issues/52)、[未完成粘贴的确定性取消夹具 #53](https://github.com/JavaZeroo/termforge/issues/53)仍开放,现有 completed 观察不能证明部分发送取消通过或产品 Cancel 故障 |
| 实验分支:`termforge.4` + 固定官方 ConPTY | [PR #50(Draft)](https://github.com/JavaZeroo/termforge/pull/50),联合源码 `3e5b96d` 已重建并[冻结真实基线](research/joint-conpty-baseline.md),尚未合并或通过产品整体验收 | [#47](https://github.com/JavaZeroo/termforge/issues/47) 跟踪后端整合;终端 margin 与原生状态分列。[resize 残尾 #51](https://github.com/JavaZeroo/termforge/issues/51)、[Console-width Vim #52](https://github.com/JavaZeroo/termforge/issues/52)、[未完成粘贴的确定性取消夹具 #53](https://github.com/JavaZeroo/termforge/issues/53)仍开放,现有 completed 观察不能证明部分发送取消通过或产品 Cancel 故障;另有 worker gate [#62](https://github.com/JavaZeroo/termforge/issues/62) 和工作区 [#63](https://github.com/JavaZeroo/termforge/issues/63) 回归 |

以下能力默认指已合并实现;某个配置的通过结果不能转用于另一个配置。R1 的真实系统 CF/拼音验收属于固定自研核心配置,不外推到候选 `.4` 或实验后端联合配置。

Expand Down Expand Up @@ -43,7 +43,7 @@
| 基础窗口操作 | **限定验收**:新建/切换/关闭/重命名、五条分隔线、面板显隐、底部焦点模式 | 完整会话动作/快捷键、命令面板、目标 Focus/SyncInput 行为 | R1 / R4 |
| 工作区外观 | **实现中,未验收**:两种逻辑尺寸下部分外框/层级依据直接取证;UI 字体来自独立 OFL 来源,私有加载、实际 GDI face/em/行高与缺失资产失败有自动检查 | 不是像素等价;图标、主题/透明度、多语言及所有状态仍缺。Explorer/Filer/Outline 当前为空区域 | R2 / R3 / R4 |
| DPI 与文字缩放 | **限定验收**:每会话 50%–200%,受控 96→144→192→96;[字体/显示合同](milestones/R2-font-display.md)明确 12×26 基准网格。两台真实 96-DPI 显示器间往返两次保持窗口、rename 焦点、隐藏标签和网格,[证据](../experiments/shell/results/2026-10-24-r2-monitor-font/validation.json)明确 `distinct_dpi=false`;v2 会话恢复另覆盖 100%/150%/75% zoom | 不同 DPI 的真实跨屏、实际呈现和真实 IME 跨屏仍未验收;恢复证据为同一 96-DPI 私有 desktop,目标字形/逐字形 fallback 未等价 | R2 |
| 配置与会话持久化 | **限定验收**:有界 v2、原子替换、v1 迁移、空会话与损坏/未知版本保护;[多会话恢复](../experiments/shell/results/2026-10-25-workspace-restore-multi/validation.json)覆盖 shell 类型/目录/标题/zoom/split/窗口,[迁移回退](../experiments/shell/results/2026-10-25-workspace-recovery-guards/validation.json)及[写失败与关闭策略](../experiments/shell/results/2026-10-25-workspace-write-failure/validation.json)均有真实验证。只重建白名单 shell,不恢复原进程/历史;保存失败保留窗口,显式放弃保存才跳过 | 仅当前单工作区、正常窗口和白名单本地会话;偏好、分组/搜索、最大化/多窗口与文字标记恢复归后续。真实 DPI、呈现和 #38 等独立回归不因此视为通过,R2 出口未宣告完成 | R2 / R3 / R4 |
| 配置与会话持久化 | **限定验收**:有界 v2、原子替换、v1 迁移、空会话与损坏/未知版本保护;[多会话恢复](../experiments/shell/results/2026-10-25-workspace-restore-multi/validation.json)覆盖 shell 类型/目录/标题/zoom/split/窗口,[迁移回退](../experiments/shell/results/2026-10-25-workspace-recovery-guards/validation.json)及[写失败与关闭策略](../experiments/shell/results/2026-10-25-workspace-write-failure/validation.json)均有真实验证。只重建白名单 shell,不恢复原进程/历史;保存失败保留窗口,显式放弃保存才跳过 | 仅当前单工作区、正常窗口和白名单本地会话;偏好、分组/搜索、最大化/多窗口与文字标记恢复归后续。联合基线默认配置出现恢复 stage1 超时,由 [#61](https://github.com/JavaZeroo/termforge/issues/61) 定位;真实 DPI、呈现和 #38 等独立回归不因此视为通过,R2 出口未宣告完成 | R2 / R3 / R4 |
| 文本增强与辅助面板 | **未实现** | 高亮/时间戳/折叠/outline、补全与 Fish 增强、命令历史、Sender/QuickBar、Free Type Mode(输入模式,行为待取证)、vim 本地/远程键位、锁屏、Sysmon | R4 |

## 远程、文件与协议
Expand Down
3 changes: 2 additions & 1 deletion docs/TRACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@
| 工作 | 责任任务 | 完成条件的归属 |
|---|---|---|
| 持续输出中的 Ctrl-C 历史失败 | [原始 ETX 回归 #36](https://github.com/JavaZeroo/termforge/issues/36) | 有界定位历史因果与原生交付;后续通过不回填旧因 |
| 工作区恢复与显式后端回归 | [恢复 stage1 #61](https://github.com/JavaZeroo/termforge/issues/61) · [InputPump gate #62](https://github.com/JavaZeroo/termforge/issues/62) · [工作区 stage52 #63](https://github.com/JavaZeroo/termforge/issues/63) | 原完整回归和单项重放均保留;不放宽期限、负载或几何断言 |
| 原 10 秒纯夹具超时 | [IME inventory 定位 #40](https://github.com/JavaZeroo/termforge/issues/40) | 阶段与清理已补齐;下一步是固定源码/宿主的有界原因定位 |
| controller 自然退出 | [close 前退出 #44](https://github.com/JavaZeroo/termforge/issues/44) | 保留 send/wait/pre-close 与清理差异;不能以 close 后结果当自然退出 |
| 旧 normal-1 未知异常 | [事件转换边界 #57](https://github.com/JavaZeroo/termforge/issues/57) | 独立于已修合法空标题 #45;原事件 kind/载荷未知,不能回填根因 |
| Windows 工作流可靠性 | [回归汇总 #38](https://github.com/JavaZeroo/termforge/issues/38) | #40/#44/#57;已闭合切片和旧失败保留在该总项,不再排入当前队列 |
| 显式官方 ConPTY 整合 | [后端汇总 #47](https://github.com/JavaZeroo/termforge/issues/47) | #55/#51/#52/#53,实验可选不等于产品默认或日常验收 |
| 显式官方 ConPTY 整合 | [后端汇总 #47](https://github.com/JavaZeroo/termforge/issues/47) | #51/#52/#53/#62/#63;#55 已固定实验联合基线,实验可选不等于产品默认或日常验收 |
| 每缓冲区 margin 端到端合同 | [margin 汇总 #41](https://github.com/JavaZeroo/termforge/issues/41) | #47/#56;原生 API、transport 和末端分别验证 |
| 产品 GUI/平台与核心边界 | [架构定案 #34](https://github.com/JavaZeroo/termforge/issues/34) | #28–#31/#54,结合已验 #23/#26/#32/#33;维护正式 ADR |
| 最终 Windows 开发版 | [产物与持续运行 #35](https://github.com/JavaZeroo/termforge/issues/35) | #27–#34/#36/#38;在最终产物上执行完整合同后核对 #7 出口 |
Expand Down
2 changes: 1 addition & 1 deletion docs/milestones/R2-local-terminal.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

R2 的前期平台/核心路线、有限会话与恢复、首批流式字素已有各自限定交付。剩余工作集中在**联合配置、兼容与输入、环境、性能及最终产物**,不是重做这些前置,也不是只差修几个崩溃后打包。已发布 Alpha、主线显式候选、Draft 官方后端是不同配置,证据不得互借。

最先需要的是将主线候选与 Draft 后端整合为可重建的联合基线。该基线可以包含明确失败;它的交付是固定真实状态和后续修复输入,不是提前选择默认后端或宣布兼容性通过。
联合源码 `3e5b96d` 的三配置[真实基线](../research/joint-conpty-baseline.md)已在实验分支冻结,包含原场景及完整回归的明确失败;近期转向这些失败的因果修复与复验。基线交付不选择默认后端或宣布兼容性通过,Draft #50 仍需通过原有回归。

## R2 内部的四段交付

Expand Down
56 changes: 56 additions & 0 deletions docs/research/joint-conpty-baseline.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 候选 .4 与显式官方 ConPTY 的联合基线(#55)

本记录固定后续 #51–#53 的共同复现输入,不宣布后端兼容性或 R2 通过。[验证清单](../../experiments/conpty/results/2026-10-26-joint-backend/validation.json)是逐配置结果与身份的入口;旧 [.3 记录](../../experiments/conpty/results/2026-10-26-reviewed-backend/validation.json)不改写。

## 固定源码与配置

联合源码 `3e5b96d0e0854b691b6dd41821ab10b6124b83eb` 合并 main `3d6d44d3b3e9a9a3e41da98e8711e9f19a211fd8` 和 Draft #50 `e2702af0e03cf6f78c0f433820df7edf64146b87`。产品代码自动合并;两份索引冲突保留 main 的文档结构。此后证据提交不改变这一产品源码身份。

| 独立构建 | 核心 | Session 后端与 flags | 定位 |
|---|---|---|---|
| `joint-default` | 自研 C++ | system / 0 | 默认对照,无 Rust 构建依赖 |
| `joint-system` | `0.26.1-dev+termforge.4` | system / 0 | 主线候选对照 |
| `candidate` | 同一 `.4` | 固定官方 `1.25.260930003` / `0x18` | 显式实验联合配置 |

通用 margin A/B 探针仍显式使用 flags 0;实际 GUI margin、Unicode/glyph 和 Backend 生命期使用配置表中的 Session 策略。两类结果不得互换。后端双文件、锁文件、C++/Rust 产物、源码 blob 与本机换行后的 SHA 分别记录;未将二进制或私有运输流提交到仓库。

## 重建与重放

固定官方同包文件的来源、双 SHA 和完整 MIT 见 [third_party/conpty](../../third_party/conpty/README.md)。以下使用已核对的本地目录,不下载、安装或修改全局 Terminal。三个输出目录独立;候选 Rust 静态库在同一源码目录产生。

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 将实验分支的证据链接固定到对应提交

此提交只发布文档和清单,但这里的 third_party/conpty/README.md 在被审提交中不存在;新增证据索引引用的 docs/research/experimental-conpty-backend.md 和旧 .3 验证清单也同样不存在,已通过仓库全量 tracked-tree 搜索确认。因此,从主线阅读这份联合基线时,无法沿链接核对重建所需的官方包来源、双 SHA、许可和旧验证合同。请将这些实验分支专属文件链接到包含它们的固定提交,或随本次文档交付发布对应的可公开材料。

Useful? React with 👍 / 👎.


```powershell
cmake -S . -B build/joint-default -A x64 -DTERMFORGE_BUILD_CANDIDATE_ADAPTER=OFF -DTERMFORGE_CONPTY_BACKEND_DIR=
cmake --build build/joint-default --config Release --parallel 4
cmake -S . -B build/joint-system -A x64 -DTERMFORGE_BUILD_CANDIDATE_ADAPTER=ON -DTERMFORGE_CONPTY_BACKEND_DIR=
cmake --build build/joint-system --config Release --parallel 4
cmake -S . -B build/candidate -A x64 -DTERMFORGE_BUILD_CANDIDATE_ADAPTER=ON -DTERMFORGE_CONPTY_BACKEND_DIR=<absolute-reviewed-directory>
cmake --build build/candidate --config Release --parallel 4
cargo build --release --locked --bins --manifest-path experiments/candidates/alacritty/Cargo.toml
cargo test --release --locked --manifest-path experiments/candidates/alacritty/Cargo.toml
ctest --test-dir build/joint-default -C Release --output-on-failure
ctest --test-dir build/joint-system -C Release --output-on-failure
ctest --test-dir build/candidate -C Release --output-on-failure
```

需在 PATH 中显式提供固定 Vim;本批使用 Git for Windows 附带的 Vim,身份与版本输出哈希见清单。Python 依赖、构建入口遵循[贡献指南](../../CONTRIBUTING.md)。仅修改当前进程环境:`PYTHONUTF8=1`,`TERMFORGE_BIN_DIR` 指向所选 `bin/Release`;官方配置加 `TERMFORGE_EXPECT_CONPTY_BACKEND=reviewed-side-by-side-1.25.260930003`,系统配置不设置此变量。

- #51:`experiments.shell.run.execute(exe, "resize", fresh_out, timeout=40)`,或 `ShellTests.test_resize_child_dimensions_and_interrupt`。原内部25秒期限、精确行/位置/重放断言不变。
- #52 GUI:同入口 `candidate-tui`,40秒外层期限;`CandidateTuiTests.test_real_fullscreen_editor_and_cursor_reply` 保留事件文件与精确写盘合同。native 路线用 `experiments/differential/real_app_matrix.py::run_capture`,保留60秒监督期限、shell/More/editor 完整流程。
- #53:同入口 `ui-paste`,40秒外层期限;原3MB、768-byte receiver gate、16KiB门槛与实际 cancel/close 合同不变。提前 completed 仍拒绝。
- 源175B:`python -m experiments.conpty.margin_run --backend system --candidate-trace <fixed-trace.exe> --output <fresh-out>`,再用固定 `conpty.dll` 绝对路径替换 `system`。此探针的 flags 0 与产品 flags 24 分列。

真实会话均由原监督器的自有 Job、GO 和非输入 desktop 管理;native capture 不创建 GUI desktop。`fresh_out` 必须不存在,失败、原始 transport、屏幕和异常原文留在忽略的本地目录。公开清单采用白名单,不含私有路径、PID、desktop 名或原始屏幕。

## 联合配置的已确认状态

原场景各两次:resize 为一红一绿(红在 stage43),GUI Vim 一绿一红(红在 stage59);native shell/More/editor 一绿一红(红在 new-buffer)。3MB 粘贴两次在 receiver gate 前完成,仍不满足未完成期取消条件。成功轮不能关闭旧失败,间歇性本身也不证明时序根因。六次 GUI 的外层 Job 均归零、desktop 删除;两次 native capture 均 Job0,无监督超时。

同源175B A/B 保留两网格与 vt-on/off:system 的 vt-on 末端 margin 两尺寸均错,固定官方两尺寸均正确;所有8次 child37、EOF109、Job0。原生 CHAR_INFO 的 margin 缺口继续由 #41/#56 处理。没有通过末端成功豁免原生合同。

完整 CTest、内部 skip、真实 Unicode/glyph、API 生命期/拒绝以及额外失败按[清单](../../experiments/conpty/results/2026-10-26-joint-backend/validation.json)分配置记录。共享 Windows 宿主同时运行多组测试;这些是正确性诊断,不能作为空闲环境性能或稳定性结论。失败不被后续成功覆盖;未建立因果关系的失败继续保留。

## 接续边界

#51 先记录 host 实际 resize、核心本地 resize 和运输 offset,验证残尾的因果;#52 分别核对 GUI/独立 native 的应用事件与输入;#53 在保持负载/原阈值的前提下建立确定性 sender 栅栏,再验真实取消与关闭。#54 成本和 #56 原生路径独立推进。

本基线可包含真实红项;它只提供可重建的共同输入。Draft #50、#47、#41、#34 与 R2 仍有各自未完成条件。完整 R1/IME/八会话、真实不同 DPI、长时资源、最终包和 WindTerm 性能等价均未由本基线验收,`presented_done=null`。
Loading
Loading