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 @@ -54,6 +54,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分
| 固定源码 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及完整合同未知。 |
| 原版样式与区域恢复参考(#56 未闭) | [固定原版结果与行为差异](research/windterm-styled-margin-reference.md)、[白名单验证](../research/ui/results/2026-10-27-styled-native-reference/validation.json) | 同一211B和原探针在原版WinPTY本地Shell运行一次,五阶段原生文件齐全,UI文字也含REGION_CIXED。80×3000 buffer与80×24 viewport区别保留,原绝对判据仍失败;相对窗口投影仅供诊断。原生/ shell自然37、Job0,末端颜色未知。修补方案与原版文字有具体差异,产品采用需明确取舍。 |
| 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的限定证据。[样式/非零光标对照](research/conpty-source-margin-styles.md)的补丁版五阶段原生检查通过,但末端滚动空白前景色仍与严格判据不同,完整属性比较失败;初始默认空格序列化判据错误已单列修正。它只构建独立探针,尚未成为产品后端;其他样式、历史、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)的补丁版五阶段原生检查通过,但末端滚动空白前景色仍与严格判据不同,完整属性比较失败;初始默认空格序列化判据错误已单列修正。[原版单次观察](research/windterm-styled-margin-reference.md)在相同211B下也得到原生及UI文字残尾 `REGION_CIXED`,原生缓冲区80×3000与窗口80×24分列,末端颜色仍未知。修补方案存在需用户确认的原版行为差异;它只构建独立探针,尚未成为产品后端,其他样式、历史、resize及完整合同仍由 #56/#41 跟踪。

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

Expand Down
2 changes: 1 addition & 1 deletion docs/research/conpty-source-margin-styles.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

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

这是 [#56](https://github.com/JavaZeroo/termforge/issues/56) 在[三个原生 controls](conpty-source-margin-controls.md)之后的独立实验。WindTerm 2.7.0 对该场景的实际行为尚未观测;本记录不选择产品后端,不批准候选核心策略,也不关闭 #56/#41。
这是 [#56](https://github.com/JavaZeroo/termforge/issues/56) 在[三个原生 controls](conpty-source-margin-controls.md)之后的独立实验。本批运行时尚未观测 WindTerm 2.7.0;后续[原版单次对照](windterm-styled-margin-reference.md)发现相同输入的原生及 UI 文字含 `REGION_CIXED` 残尾,具体样式与原生坐标边界另列。原版末端颜色仍未知,修补路线有待确认的行为差异;本记录不选择产品后端,不批准候选核心策略,也不关闭 #56/#41。

## 运行前固定的场景

Expand Down
53 changes: 53 additions & 0 deletions docs/research/windterm-styled-margin-reference.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# WindTerm 2.7.0:样式、光标与滚动区域的原版观察

原版的一个固定本地 Shell 样本,在同一 211B 输入之后,原生捕获和 UI 文字投影都出现了 `REGION_CIXED` 残尾。这与[源码 ConPTY 未修补版](conpty-source-margin-styles.md)的最终文字相同,区别于修补版恢复主屏滚动区域后的结果。按 [ADR-0006](../adr/0006-confirmed-project-direction.md),该修补路线现在有具体的原版行为差异;重要差异或原版缺陷修复须经用户确认,不能直接选入产品。

本记录是 [#56](https://github.com/JavaZeroo/termforge/issues/56) 的一次有界参考观察,不判定全部终端行为,也不定位 WindTerm 内部的根因。原版末端颜色属性仍未取得,不能与候选核心的空白格前景色差异合并为同一结论。

## 固定身份与执行边界

- 官方 WindTerm 2.7.0 Windows x64:EXE SHA `7b10531dccc7cd614ae559f36f1ef518e0c96335637431b4646354823b2804d0`,4,047 文件清单 SHA `e459adf2f12adb6a1b7f55e66a9da1c22794185e66e848057d21e0c60d669203`,由[既有准备守卫](../../research/ui/launch.py)核对。cmd 横幅为 Windows `10.0.26200.9711`,与此前 Vim 参考样本的 OS 修订号分列。
- 自有夹具源码 `dc5c631ffdf83dfbdfcb8b359137e0d87212ac6d`;复用原 controls EXE,SHA `ca19645b65aea8ac74b56d1e59837cb7514c3acf5932d24112411725b92206d7`。只调用其原 `--client styled-cursor`,未使用源码 ConPTY host,也未改写五阶段输入或 capture helper。
- 新建一个合成 cmd、独立 HOME/profile、非输入 window station 和自有 Job。REA CLI 固定 6.7.0,原版及驱动身份、实际调用和证据 ID 见[白名单记录](../../research/ui/results/2026-10-27-styled-native-reference/validation.json)。不接触个人剪贴板、显示设置、用户配置或日常 WindTerm 进程。
- 执行前声明最多一次。UI 请求 1230×887 后,实际 WinPTY `set_size(80,24)`、UI capacity=24 和原生 viewport=80×24 相互核对;未使用预留的两次几何校准。原生等待 5 秒、失败清理 5 秒;独立 wrapper 最多保留最终内容 8 秒供 UI 读取。REA 30 秒、外监督 45 秒。实际仅运行一次,无重试。

## 五阶段的原生结果

源文件精确为原 211B,SHA `51d0f55717ff8fbe5e82040967edf2f9399a9b893fd8e8cb282f94c143919b62`。每阶段同时捕获全文、完整 `CHAR_INFO` 字符/属性、绝对光标和 viewport top。

| 阶段 | viewport top | 绝对光标(零基行、列) | 相对窗口光标 | 内容与属性 |
|---|---:|---|---|---|
| before | 4 | 6,5 | 2,5 | `TOP_FIXED / REGION_A / REGION_B / BOTTOM_FIXED`,初始属性 7 |
| alt | 0 | 4,7 | 4,7 | `ALT_OUTSIDE`、第 4/5 行 `ALT_C / ALT_D`;两行完整属性 `0x52` |
| restored | 4 | 6,5 | 2,5 | 原主屏内容恢复,属性保持 |
| after-write | 4 | 6,6 | 2,6 | 第 3 行变为 `REGIOM_B`,写入的 M 为 `0x14` |
| final | 4 | 9,8 | 5,8 | 保留 `REGION_A / REGIOM_B`,出现 `REGION_CIXED / REGION_D / SGR_DONE`;后三行前 8 格为 `0x14` |

wrapper 在运行前后读到主缓冲区均为 80×3000、可见窗口均为 80×24;开始窗口 `[0,0,79,23]`,结束为 `[0,4,79,27]`。before 阶段本身已经位于 top=4,不能拿 wrapper 启动前的 top=0 回填五阶段记录。

直接套用原 ConPTY 判据时,绝对光标和 top 的区别使 before/restored/after-write 也失败,final 另有文字和属性差异;**原判据整体保持失败**。仅为解释来源,将光标行减去各自 top、将 top 投影为零的离线诊断,与未修补版五阶段预测全部吻合。文字、字符和属性没有修改。这是跨缓冲区布局的解释,不是产品验收,也没有改写原判据。

最终六行的差别可直接比较:

| 本次原版原生捕获及 UI 文字尾部 | 同源修补版原生 final |
|---|---|
| `TOP_FIXED` | `TOP_FIXED` |
| `REGION_A` | `REGION_C` |
| `REGIOM_B` | `REGION_D` |
| `REGION_CIXED` | `BOTTOM_FIXED` |
| `REGION_D` | 空行 |
| `SGR_DONE` | `SGR_DONE` |

UI 结果来自收到 `SGR_DONE` 后、释放 wrapper 等待前的 `activeText.lineText`,只公开其中六行合成文字。它不是截图、像素呈现、完整 screen-state 或历史隔离证明。没有捕获该次 WinPTY 到末端的运输字节,因此残尾在哪个原版组件产生仍未定位。

## 颜色、回收与后续决定

本次只枚举了已暴露的样式/光标接口名,没有读取末端逐格颜色或终端光标值;这些字段仍为 `null`。原生 `CHAR_INFO` 的完整颜色不能代替末端样式。该路径最终没有产生修补版所预期的两整行红字蓝底空白,因此也不能据此回答候选 `.5` 的 144 格空白前景色是否符合原版。

原生客户端自然退出 37,shell 后续也观察到自然退出 37。输出模式实测为 3→7,初始代码页为 936;wrapper 对模式和代码页的恢复 API 均返回成功,未再查询恢复后的值。外层仍按原启动器主动回收自有进程,Job active0/total11/terminated0;该计数不证明所有成员自然退出。配置检查仍为一个合成会话。

REA 无消息截断、无脚本错误或清理错误;provider 的 subject/environment 为 null,捕获时 state=running。包身份由本地守卫另行核验,停止后的自有回收另列,不补造 provider 已认证身份或自然退出的结论。

私有计划、驱动、五阶段捕获和插桩原件位于 `local/r56-windterm-styles/reference-0` 及其上级目录。白名单导出重新核对脚本、清单、EXE、原生文件、source 和 UI 合成尾部,无新增执行;公开摘要不含发行物、原始插桩、绝对路径或用户状态。私有驱动没有发布,因此本记录不是公开的一键复现包。

当前可确认的是一个具体原版行为:本地 Shell 路径在该输入下保留旧区域的文字结果。后续在 #56/#34 明确记录“保持该原版行为”与“修正主屏区域恢复”的产品取舍及影响,遵守原版优先和用户确认权限;实验补丁继续保留为候选,不将新观察改写成自动采用修复的依据。其他原版场景、末端颜色、历史/resize/API、完整 R2 和性能仍未验收。
Loading