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
3 changes: 2 additions & 1 deletion docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
|---|---|
| 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.5` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);旧`.4`的[联合基线](research/joint-conpty-baseline.md)保留。#51/#53/#87/#88各自限定交付见下表;最新完整官方56/57,#52仍失败,MSYS输入边界仅为诊断;#63旧因仍未知。当前能力以[FEATURES](FEATURES.md)为准 |
| PR #50 实验:`termforge.5` + 固定官方 ConPTY | [Draft PR](https://github.com/JavaZeroo/termforge/pull/50) / [#47](https://github.com/JavaZeroo/termforge/issues/47);旧`.4`的[联合基线](research/joint-conpty-baseline.md)保留。#51/#53/#87/#88各自限定交付见下表;最新完整官方56/57,#52仍失败,MSYS输入边界仅为诊断;#63已复现工作区路径的因果核验及完整shell通过见下表;更早缺运输样本保留未知。当前能力以[FEATURES](FEATURES.md)为准 |

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

Expand Down Expand Up @@ -55,6 +55,7 @@ R1 固定总出口的源码为 `ce9b24d`,早期 `2dc8d6d` / `9b16acc` 仍分
| 实验输入 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、完整后端或性能通过。 |
| Native Vim 捕获目录隔离 | [原因与复验](research/vim-fixture-isolation.md)、[固定原件审计](../experiments/conpty/results/2026-10-26-vim-fixture-isolation/validation.json) | 实验分支同旧 EXE 的兄弟运行一绿一红;修正新目录隔离后完整模块9/9。仅闭合 #52 native 夹具原因;GUI stage59 仍开放,未知与受扰动探针分列。 |
| 工作区尺寸标记残尾(#63) | [原因与复验](research/workspace-native-viewport.md)、[单变量/原生/回放及无插桩验收](../experiments/shell/results/2026-10-27-workspace-native-viewport/validation.json) | 旧原三轮UI/main第三轮各红;同EXE仅切策略分别原红/绿,原生尺寸和标记正确、底部核心残尾。现有#51修复覆盖;无插桩原三轮各重复两批、完整shell37通过/3原skip、93.62秒,#52和完整R2仍未验收。 |
| GUI Vim/MSYS 输入边界(#52) | [运行时边界与限制](research/vim-msys-input-boundary.md)、[白名单事件与身份](../experiments/shell/results/2026-10-27-vim-msys-input/validation.json) | 两轮API级原失败、一轮诊断绿及一轮函数边界原失败:完整93 B到达原生输入,红例MSYS仅交付92 B;resize旧快照清理取走Ctrl-O的调用顺序已捕获。无截断、Job0/desktopgone;未修产品、未替换固定应用,#52继续开放。 |
| 原生 viewport resize 与默认策略隔离(#51) | [原因与复现](research/native-viewport-resize.md)、[固定验证及六组合成原件](../experiments/conpty/results/2026-10-27-native-viewport-resize/validation.json) | 原 `.4` GUI stage43 与独立 native/replay 红;`.5` 原 resize/Unicode、历史/空格复制、六组 native 对照通过。默认策略填充误判经实际红绿修复;最终完整回归 54/56、12 项内部 skip,#52/#88 及此前 #87 的失败独立保留,不计完整后端或 WindTerm 等价。 |
| 窄列命令回显与恢复完成(#88) | [独立判据合同](research/workspace-restore-transport-oracle.md)、[原件哈希/红绿/正式两轮验证](../experiments/shell/results/2026-10-27-workspace-echo-cr/validation.json) | 原 262 B cmd 运输中的回显裸 CR 使完成判据提前拒绝;修正仅使该记录保持不可信至真实 LF。原两轮保存/普通恢复/钳制及完整 shell 通过;官方完整回归 55/56、8 项内部 skip,#52 当时仍红,#63/#87 旧因未闭合(#87 后续见下一行)。构建重叠结果明确排除。 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,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)保留为可评估实验,正式核心选型待用户确认 | [固定来源](../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丢失位置但未修复,#63 旧工作区失败原因未闭合。[#53 UI fence](research/ui-paste-fence.md)与[行键复用/关闭回复](research/resize-replay-cost.md)、[#62 worker 夹具](research/sender-fence.md)各自限定通过。终端 margin 与原生状态分列,#47 及完整后端仍开放;旧失败和历史运输缺口保留 |
| 实验分支:`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丢失位置但未修复,[#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 及完整后端仍开放;旧失败和历史运输缺口保留 |

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

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 @@ -44,7 +44,7 @@ flowchart LR

## 下一批的任务边界

1. **在已冻结基线上逐项闭合后端回归。** #55 已交付含红的真实基线;接续 #52、#63 的独立失败。#62 的[真实 writer 持块、取消与停止夹具](../research/sender-fence.md)不降低原 4MiB/16KiB/期限,#53 已接入默认关闭的 fence,[单窗口 UI/3MB/768B 与控制故障切片](../research/ui-paste-fence.md)及[同源码两轮原八会话data-only](../research/resize-replay-cost.md)已通过;[#51 原生 viewport 修复](../research/native-viewport-resize.md)的原 resize 与 Unicode、[#88 回显完成判据](../research/workspace-restore-transport-oracle.md)的原保存/恢复/钳制限定回归通过;[#87 完整记录检查点](../research/workflow-record-checkpoint.md)已具有受控因果红绿及同源码两轮原八会话 data-only。完整官方回归中的 Vim、历史工作区失败及聚合期限证据分别保留,#87 的历史运输缺口不追溯补造,真实 CF/IME 组合独立验收。各回归可用原冻结输入独立定位,最终修复验收须在联合配置重建;一次未复现不自动构成因果修复。
1. **在已冻结基线上逐项闭合后端回归。** #55 已交付含红的真实基线;接续 #52 的 GUI Vim 失败。#62 的[真实 writer 持块、取消与停止夹具](../research/sender-fence.md)不降低原 4MiB/16KiB/期限,#53 已接入默认关闭的 fence,[单窗口 UI/3MB/768B 与控制故障切片](../research/ui-paste-fence.md)及[同源码两轮原八会话data-only](../research/resize-replay-cost.md)已通过;[#51 原生 viewport 修复](../research/native-viewport-resize.md)的原 resize 与 Unicode、[#88 回显完成判据](../research/workspace-restore-transport-oracle.md)的原保存/恢复/钳制限定回归通过;[#87 完整记录检查点](../research/workflow-record-checkpoint.md)已具有受控因果红绿及同源码两轮原八会话 data-only。[#63 工作区尺寸标记残尾](../research/workspace-native-viewport.md)已核验现有viewport修复覆盖,并通过原三轮重复与180秒完整shell合同。完整官方回归中的 Vim、更早缺运输的工作区失败及历史聚合期限证据分别保留,#87 的历史运输缺口不追溯补造,真实 CF/IME 组合独立验收。各回归可用原冻结输入独立定位,最终修复验收须在联合配置重建;一次未复现不自动构成因果修复。
2. **并行处理原版对照、平台语义与性能。** [原生语义处理路径 #56](https://github.com/JavaZeroo/termforge/issues/56)先明确 #41 原合同需要什么、哪些路径可支持;保留必要的上游或独立实现工作,不用“平台不同”豁免缺口。#3/#4 优先建立原版 Windows 本地终端基线;#54 现在冻结重复方法与完成端点并定位吞吐成本,数值预算作为提案交用户确认,不等到 #34 才补性能。
3. **在主线推进独立行为合同。** #29 核对极窄/极短、软硬行、历史/淘汰、选择/Find、连续 resize 和 child ack;#30 核对 IME 组合/提交/取消与输出/resize/切换、应用键盘/粘贴接收、实际复制及同次八会话。已验收的 #39 只提供首批字素基础,最终配置的交叉验收仍需执行。
4. **补终端模式和应用矩阵。** #27 明确 DECOM/DECAWM、pending-wrap、保存恢复、异常序列与 margin×resize;#28 先固定应用版本/入口/动作及协议字节预期,再逐应用完成进入、操作、resize、退出、主屏恢复。Vim 的一个修复不替代完整 TUI 验收。
Expand Down
2 changes: 2 additions & 0 deletions docs/research/native-viewport-resize.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,5 @@ ctest --test-dir build/candidate -C Release -R '^candidate_(core|resize_replay)$
六组合成探针可公开复现;原 GUI 原件保留本地,只发布审核后的状态、哈希和固定断言结果。完整 R1/R2、实际呈现、真实 CF/IME 组合与 WindTerm 对照不从本项推导,`presented_done` 保持 null。其他真实失败由对应 issue 继续跟踪。

最终产品源 `92eac12` 的显式官方配置完整 CTest 为 54/56、411.59 秒,另有 12 项内部 skip;失败为 Vim stage59(#52)和第二轮工作区恢复 stage1(#88)。同次八会话工作流通过,但此前两次编号半行失败仍由 #87 跟踪。原 resize、resize-close 和 Unicode 检查通过只验收本项限定修复,不覆盖这些独立失败。

后续 [#63 工作区核验](workspace-native-viewport.md)用同EXE单变量策略、原生快照与实际运输回放,确认本策略还覆盖原UI stage52及主区场景stage7的底部残尾;该项的无插桩原三轮重复和完整shell验收另有固定身份,不改写以上历史整套结果。
35 changes: 35 additions & 0 deletions docs/research/workspace-native-viewport.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 工作区尺寸标记残留与原生 viewport

[#63](https://github.com/JavaZeroo/termforge/issues/63) 的工作区 `stage52` 与主区场景 `stage7`,在保留原布局、输入、期限和精确断言的对照中,均指向底部会话的历史重排:原生尺寸标记已经正确,候选屏幕却在标记后保留旧文字。现有 [#51 的 `native_viewport` 修复](native-viewport-resize.md)覆盖这两条已复现路径;本次补充因果核验与原回归,不增加产品改动。

## 固定身份与原失败

旧源码 `188228e`、候选 `.4`、官方 ConPTY `1.25.260930003`、Console flags24 的未插桩 EXE 为 `e81d92a8c7d380d4c33639861180b04935e021bc7c1a5179197c8a9e3c83454a`。原 UI 和主区测试各运行一次,每项三轮均为前两轮通过、第三轮窄布局失败,分别停在 `stage52/client=2048x1120` 和 `stage7`。仅保留单次原窄布局 UI 场景也复现同一失败。

UI 内层20秒、主区内层30秒、每轮外层40秒保持。原三轮方法和两份场景源码与新联合源一致。旧二进制在本批前后哈希一致;旧失败原件保留,不用随后成功覆盖。更早 `3e5b96d` 等缺少对应运输的历史样本不追溯认定同因。

## 单变量对照与直接观察

在 `d6b3f79` 的联合源上临时增加有界 resize/feed、核心/可见快照和尺寸 helper 原生屏幕观察。每对运行使用同一个 EXE,只切换已有 `reflow_history` / `native_viewport` 策略;不清屏、不补发标记、不改变输入或等待条件。UI 与主区分别预设最多两轮,先运行旧策略;若不是原失败就停止,否则执行新策略一次,不重试取绿。

| 场景与会话 | 实际子进程尺寸与原生标记 | 旧策略核心 | 新策略核心及原场景 |
|---|---|---|---|
| UI 底部会话 | `169×11`,整行 `TF_SIZE_169x11` | 同一行带旧 helper 路径残尾,stage52 | 整行精确匹配,完整场景通过 |
| 主区场景的底部会话 | `169×11`,整行 `TF_SIZE_169x11` | 同样残尾,stage7 | 整行精确匹配,完整场景通过 |
| 主区场景的活动主会话 | `112×24`,整行 `TF_SIZE_112x24` | 精确匹配 | 精确匹配 |

失败时底部 resize 请求/完成 generation 分别为 UI `6/6`、主区场景 `4/4`,没有在途任务或输入拒绝。尺寸 helper 实际查询、完整写出标记;同次 transport 含完整标记,核心与可见快照一致。因此捕获红例不符合“子进程尺寸尚未应用”或“查询/输出未送达”;主区的等待失败由底部条件触发。

用保存的 feed 分块和 parser resize 顺序离线回放,旧策略逐字段重现同次失败核心,新策略得到精确标记;活动主会话在两策略下均正确。这将实际运输和调度之外的策略差异独立出来。原因与 #51 一致:通用 reflow 将历史拉回可见区,与原生控制台绝对坐标布局分歧,后续局部写入留下旧行残尾。

UI 与主区各一红一绿的探针 EXE、helper、源码补丁、每轮原件和全部回放保存在本地;公开[白名单记录与哈希](../../experiments/shell/results/2026-10-27-workspace-native-viewport/validation.json)。resize观察上限1024事件/128KiB运输,helper最多读取100000格,各轮未截断。观测读写会扰动调度,离线回放不证明时序或性能等价。原生快照采于 helper 写出后,不等于后续窗口提交或实际呈现。

## 无插桩验收与边界

临时 C++ 按基点字节恢复后,以 `dd533878538490c2464673218ea0000c6467a495` 重建;产品源码与 `c662011` 相同。实际 shell EXE 为 `7f26395942f107297565f50402568650e1e17c5eb23924bee1bfb02c50c60d16`,与诊断 EXE 分列。原 UI 和主区三轮方法重复两批,共12次运行全部通过,包含窄布局、像素/几何负例、会话隔离、真实尺寸、焦点/关闭和 Job/desktop 回收。

同一构建完整 `shell` CTest 在原180秒期限内用时93.62秒完成:40项中37通过、3项按原 hosted clipboard guard 跳过。完整套件内两项工作区方法又各执行原三轮;共18份相关工作区样本均无外层超时,Job active0/terminated0、desktop已回收。其他负例保留原断言,由完整日志单列,不把预期失败记录写成正常运行成功。

回归入口为原 `ShellTests.test_workspace_sessions_resize_and_cleanup`、`test_main_and_bottom_sessions_focus_geometry_and_cleanup` 及 `ctest --test-dir build/candidate -C Release -R '^shell$' -V`。现有 native viewport 核心/原生合成回归继续承担该策略的防退化检查。

本次只闭合 #63 已复现工作区路径及完整 shell 期限;#52 GUI Vim、完整官方配置与 R2 仍未验收。历史缺少原生/运输的记录、默认/system、候选/system、实际呈现和 WindTerm 对照保持独立,不由本次推断。
Loading