Skip to content
Closed
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
1 change: 1 addition & 0 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分
| 原生 margin 逐字段合同与历史修复候选(#56 仍开放) | [合同、源码与路径](research/conpty-native-margin-path.md)、[独立 oracle](../experiments/conpty/margin_contract.py)、[2026-10-26固定运行](../experiments/conpty/results/2026-10-26-native-margin-path/validation.json) | 当时系统与官方原生 final 仍红,官方80列两次原5秒生命周期失败保留;补丁当时仅可应用。后续真实同源构建/运行另列,不改写旧失败。 |
| 固定源码 ConPTY margin 运行对照(#56 限定实验) | [构建身份、运行与复验](research/conpty-source-margin-runtime.md)、[白名单验证](../experiments/conpty/results/2026-10-27-source-margin-runtime/validation.json) | 同源baseline与patched,原175B两尺寸native red→green;四阶段文本/格属性/光标、末端文本和VT-off反例独立检查,共8次自然退出/EOF/Job0。15个API/身份场景及8个清单拒绝通过;显式样式、历史、resize、完整产品未验,未选择后端。 |
| 源码 ConPTY 主屏与重复切屏对照(#56 限定实验) | [输入、预期与结果](research/conpty-source-margin-controls.md)、[白名单验证](../experiments/conpty/results/2026-10-27-source-margin-controls/validation.json) | 三场景×两尺寸×同源两版共12次;主屏均正确,默认备用屏/重复h/l为具体旧错误→原生全部正确,两版末端最终文字均正确;全部自然退出/EOF/Job0。独立输入不替代原175B,样式/历史/resize及产品未验。 |
| 源码 ConPTY 样式与非零光标对照(#56 限定实验) | [五阶段与空白格差异](research/conpty-source-margin-styles.md)、[原始/修正判据验证](../experiments/conpty/results/2026-10-27-source-margin-styles/validation.json) | 同源两版×两尺寸共4次,patched原生五阶段全字段通过,baseline仅final符合具体旧错;两版末端文字/背景/光标/current_style通过,但滚动空白前景色144/8格不同,完整属性仍失败。默认空格序列化判据错误已离线修正,原运行未重试;WindTerm及完整合同未知。 |
| ConPTY 系统/固定官方后端的同源 margin A/B(#41、#47 未关闭) | [合同与第一方来源](research/conpty-margin-backends.md)、[固定 175B 与 16 case 结果](../experiments/conpty/results/2026-10-26-margin-backends/validation.json) | 相同 175B、两网格/两 mode/两 fresh:系统末端 margin 错,固定官方后端的末端正确;CHAR_INFO 仍错。禁用 VT 由窄屏反例拒绝;仅诊断可行性,不证明 PR #50 或 main 联合整合通过。 |
| 实验输入 worker 持块与停止(#62) | [sender fence 合同](research/sender-fence.md)、[固定源码与实际字段](../experiments/shell/results/2026-10-26-sender-fence/validation.json) | `519a3f3` 的系统/官方各两进程、每次 stop/cancel/竞争,共 12 条实际 worker 记录,均 join/Job0;另有各一次原 focus 单测和各 2/2 纯 CTest。明确修正旧 never-read/output-first 不能保证 16KiB 的夹具假设,同 EXE 旧顺序仍红。实现仅在 PR #50 实验整合,main 未包含;probe 未链接候选 VT,纯 EOF 为模拟,#53 UI/3MB/768B/八会话及完整官方矩阵未验收。 |
| 实验 UI 未完成粘贴(#53) | [机制与边界](research/ui-paste-fence.md)、[旧固定记录](../experiments/shell/results/2026-10-26-ui-paste-fence/validation.json)、[组合修复](research/resize-replay-cost.md)、[最终同源码记录](../experiments/shell/results/2026-10-26-replay-cost-and-close/validation.json) | `eae4b6a` 单窗口两轮、真实EOF/无GO负例及两轮原八会话data-only通过;行键复用及关闭期间不回复分别有诊断/因果回归,原completed/stage45/退出错误保留。完整CTest54/56仍有Vim59、resize43、main7/ui52与shell180秒期限;未计真实CF/IME、完整后端或性能通过。 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
| 显式候选 main:`termforge.4` + 系统 ConPTY | `TERMFORGE_BUILD_CANDIDATE_ADAPTER=ON`;按 [ADR-0003](adr/0003-core-reference-and-reuse.md)保留为可评估实验,正式核心选型待用户确认 | [固定来源](../experiments/candidates/alacritty/PROVENANCE.md)、[适配边界](../experiments/core/CANDIDATE.md)与 [#39 字素合同](research/streaming-graphemes.md);候选正确性通过不关闭系统 ConPTY 或 R2 父项 |
| 实验分支:`termforge.5` + 固定官方 ConPTY | [PR #50(Draft)](https://github.com/JavaZeroo/termforge/pull/50),`.4` 联合源码 `3e5b96d` 的[真实基线](research/joint-conpty-baseline.md)保留,尚未合并 main 或通过产品整体验收 | [#51 原生 viewport 修复](research/native-viewport-resize.md)的原 resize/Unicode 及原生样本、[#88 回显完成判据](research/workspace-restore-transport-oracle.md)的原保存/恢复/钳制分别通过;[#87 完整记录检查点](research/workflow-record-checkpoint.md)有受控旧红/新绿及最终同源码两轮原八会话 data-only。最新官方完整回归 56/57、8 项内部 skip,[Vim #52](https://github.com/JavaZeroo/termforge/issues/52)仍红,[MSYS输入边界](research/vim-msys-input-boundary.md)已定位捕获样本的Ctrl-O丢失位置,后续[隔离运行库补丁](research/vim-msys-runtime-prototype.md)在重建基点red后原方法四轮通过;正式固定运行库验收未完成,[#63 工作区残尾](research/workspace-native-viewport.md)已由同EXE单变量与运输回放确认现有viewport修复覆盖,原UI/主区三轮重复两批及完整shell通过;更早缺运输样本保留未知。[#53 UI fence](research/ui-paste-fence.md)与[行键复用/关闭回复](research/resize-replay-cost.md)、[#62 worker 夹具](research/sender-fence.md)各自限定通过。终端 margin 与原生状态分列,#47 及完整后端仍开放;旧失败和历史运输缺口保留 |

另有默认关闭的[源码 ConPTY margin 探针实验](research/conpty-source-margin-runtime.md):固定同源 baseline/patched 对照在原175B两尺寸取得原生四阶段 red→green,VT-off反例保持一致。后续[主屏与重复切屏对照](research/conpty-source-margin-controls.md)以独立输入完成12次原生/末端验证,补充默认备用屏区域和重复h/l的限定证据。它只构建独立探针,尚未成为产品后端;样式、历史、resize及完整合同仍由 #56/#41 跟踪。
另有默认关闭的[源码 ConPTY margin 探针实验](research/conpty-source-margin-runtime.md):固定同源 baseline/patched 对照在原175B两尺寸取得原生四阶段 red→green,VT-off反例保持一致。后续[主屏与重复切屏对照](research/conpty-source-margin-controls.md)以独立输入完成12次原生/末端验证,补充默认备用屏区域和重复h/l的限定证据。[样式/非零光标对照](research/conpty-source-margin-styles.md)的补丁版五阶段原生检查通过,但末端滚动空白前景色仍与严格判据不同,完整属性比较失败;初始默认空格序列化判据错误已单列修正。它只构建独立探针,尚未成为产品后端;其他样式、历史、resize及完整合同仍由 #56/#41 跟踪。

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

Expand Down
2 changes: 1 addition & 1 deletion docs/research/conpty-source-margin-controls.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ python -m experiments.conpty.source_margin_controls --baseline local/source-base
python -m unittest experiments.conpty.test_margin_controls -v
```

本次只补无备用屏、默认备用屏区域、重复 h/l 的真实交叉。显式样式、非零光标保存恢复、历史隔离/压力、resize、查询/API 写入、完整产品工作流、性能及维护升级仍未验证;原 175B 的 VT-off 证据属于前一批,不能合并成同批更大矩阵。原系统/官方失败、#52、#97 和 #99 的独立失败继续保留。正式方案仍由 #34 提交证据及取舍,经用户确认后生效。
本次只补无备用屏、默认备用屏区域、重复 h/l 的真实交叉。显式样式与非零光标的后续[独立对照](conpty-source-margin-styles.md)记录原生通过及末端空白前景色差异,不回写本批结果。历史隔离/压力、resize、查询/API 写入、完整产品工作流、性能及维护升级仍未验证;原 175B 的 VT-off 证据属于前一批,不能合并成同批更大矩阵。原系统/官方失败、#52、#97 和 #99 的独立失败继续保留。正式方案仍由 #34 提交证据及取舍,经用户确认后生效。
61 changes: 61 additions & 0 deletions docs/research/conpty-source-margin-styles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# 源码 ConPTY:样式、光标恢复与空白格差异

固定同源 margin 补丁在本次五阶段原生检查中全部通过:备用屏退出后,主屏光标和红字蓝底属性恢复,后续滚动仍使用主屏 `2;3r`。未修补版前四阶段正确,最后一阶段出现预先固定的旧区域错误。不过,两版实际 transport 的候选末端都有滚动空白格的前景色元数据差异,**完整末端属性比较仍失败**。文字、背景色、光标和当前绘制属性通过,不代表完整合同通过。

这是 [#56](https://github.com/JavaZeroo/termforge/issues/56) 在[三个原生 controls](conpty-source-margin-controls.md)之后的独立实验。WindTerm 2.7.0 对该场景的实际行为尚未观测;本记录不选择产品后端,不批准候选核心策略,也不关闭 #56/#41。

## 运行前固定的场景

沿用[原 175B 实验](conpty-source-margin-runtime.md)已核验的 Terminal `dc8ae365847d41f62d1ebca93815bb00959bc12f` baseline/patched、构建 run `40449292015` 及双文件/补丁/summary receipt;上游源码与补丁未修改。独立 `--styled-cursor` 入口只执行一个 211B 场景,在 `80×24`、`12×7` 下分别运行两版,每格一次,共四次,无重试。原 175B 与默认三个 controls 保持原入口。

| 阶段 | 固定操作与原生判据 |
|---|---|
| before | 写入区域内外标记,主屏 `2;3r`,SGR `31;44`,光标第 3 行第 6 列 |
| alt | 进入备用屏,在 `4;5r` 内以 SGR `32;45` 滚动;光标第 5 行第 8 列 |
| restored | 离开备用屏,原主屏内容及第 3 行第 6 列光标恢复 |
| after-write | 直接写 `M`,原生第 3 行第 6 格为红字蓝底,光标前进一格 |
| final | 回到主屏区域滚动,保留区域外内容;`REGION_C`、`REGION_D` 及其尾部空白为红字蓝底;第 6 行写 `SGR_DONE` |

全文、完整 `CHAR_INFO` 字符/属性、光标和 viewport 分别使用独立字面值检查。原生红字蓝底为 `0x14`、绿字紫底为 `0x52`;末端 trace 的 ANSI 索引另用 `fg=1/bg=4`。baseline 必须匹配具体旧状态,异常或任意失败不计为有效反例。

## 实际结果与判据修正

| 观测 | 两个尺寸的 baseline | 两个尺寸的 patched |
|---|---|---|
| 原生前四阶段 | 全字段通过 | 全字段通过 |
| 原生 final | 文本/格属性失败,符合旧区域预测:保留 `REGIOM_B` 并出现 `REGION_CIXED`;光标/viewport 通过 | 全字段通过 |
| 实际 transport 末端 final | 文字、主屏、光标及 current_style 通过;完整单元格比较失败 | 相同 |
| 生命周期 | 自然退出 37、EOF 109、flags=0、outer Job active0/total4/terminated0,无 force | 相同 |

所有样本仍使用 5 秒 child wait、15 秒外期限、共享 5 秒 cleanup。四份源字节均为 211B / SHA `51d0f55717ff8fbe5e82040967edf2f9399a9b893fd8e8cb282f94c143919b62`;实际运输均为 254B / SHA `b584cd146f447c1e78e51d74e6d1c38c6a93d860d738a0afacdf959c8327d9bd`。未执行 GUI 产品流程或呈现测量。

首次判据把未触碰的默认空格错误地写为 `text=" " / width=1`,而已有 [trace 编码](../../experiments/candidates/alacritty/src/main.rs)对默认空单元使用 `text="" / width=0`,有背景色的空白才保留空格与宽度 1。离线审计发现这一测试错误,新增反例先失败,再修正编码;原四次运行、原 summary、原退出 1 结果全部保留,没有重跑原生程序。

修正后重新读取同四份捕获,80 列每次排除 1731 格、12 列每次排除 31 格的错误序列化预期;**显式前景/背景的预期没有放宽**。剩余差异只在零基第 1、2 行、第 8 列至行尾:

- 80 列每次 144 格,12 列每次 8 格。
- 文字均为一个空格、width=1、背景色均为 4、bold=false。
- 期望显式前景色 1,实际为默认前景色 -1。写出的彩色文字及 current_style 仍为 1/4。

原始与修正后的完整比较都为失败。不能将默认空单元的判据错误算为产品缺陷,也不能将剩余空白前景色差异直接认定为用户可见错误。

固定 Alacritty 上游 `542147067dd016fc5f49120ef0ba605a98a4e3a7` 的 [`Cell::reset`](https://github.com/alacritty/alacritty/blob/542147067dd016fc5f49120ef0ba605a98a4e3a7/alacritty_terminal/src/term/cell.rs)只保留 template 的背景色,其余字段取默认值;当前 `.5` 候选保持该逻辑,滚动清行调用这条路径。这解释了所捕获的候选元数据结果。该源码观察不证明 WindTerm 的行为,也不构成改变产品合同或修改候选核心的批准。

## 身份、验证与复验

[脱敏清单](../../experiments/conpty/results/2026-10-27-source-margin-styles/validation.json)保留原运行身份、原始 summary 哈希、四份捕获身份、离线修正来源及两种失败结论。

- 实际原生运行源码 `485c3e253e88a2d83f72326c0ff9185b94d87269`,当时工作树干净;离线判据修正源码 `6e52e6957de10c14c570d3b7b83992c585fcc3a9`,不冒充重新运行。
- Windows 11 x64 build 26200;VS17 / MSVC 19.42.34433 / SDK 26100,Release x64。独立探针 SHA `ca19645b65aea8ac74b56d1e59837cb7514c3acf5932d24112411725b92206d7`;复用前批 `.5` trace SHA `5941d4569d0ae146eb005f12ecfb15014bc06c18ee48d1c9460824ab65df93d3`。上游 pair 是 hosted VS18 构建,两者身份分列。
- 初始纯判据 7/7;空单元编码反例 1 次失败后,修正判据 7/7、0.069 秒,包含错误前景/背景、光标、current_style、文字、宽度和主屏状态的拒绝。时长仅为测试诊断。
- 前批 12 份 controls 捕获离线复查通过,未增加原生执行。此次完整 styled 矩阵仍失败,不能用纯测试成功替代。
- 私有原件位于 `local/r56-style-controls/matrix-1`;公开清单只有合成输入/输出、结果、来源和哈希,不含二进制、用户状态或绝对路径。

按[前批构建与来源说明](conpty-source-margin-controls.md#复验与剩余范围)生成 controls 探针和候选 trace,并核验固定 baseline/patched;使用新输出目录:

```powershell
python -m experiments.conpty.source_margin_controls --styled-cursor --baseline local/source-baseline --patched local/source-patched --probe local/source-controls-build/bin/Release/conpty_source_margin_controls.exe --candidate-trace experiments/candidates/alacritty/target/release/termforge-alacritty-trace.exe --output local/source-styles-new
python -m unittest experiments.conpty.test_margin_controls -v
```

保留失败判据,当前同配置预计矩阵退出 1;不得通过重试取绿。其他 SGR/真彩色、终端中间阶段、历史隔离/压力、resize、查询/API、完整产品、性能、升级维护及 WindTerm 对照仍待完成。`TERMFORGE_BUILD_SOURCE_CONPTY_EXPERIMENT` 默认 OFF,正式方案仍由 #34 按证据提案及用户确认决定。
Loading