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
1 change: 1 addition & 0 deletions docs/EVIDENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
| 复杂文字与窄屏 ConPTY 尾部 | [源/控制台/布局验证](../experiments/shell/results/2026-10-26-unicode-workflow/validation.json)、[只读调查入口](../research/README.md) | `730b5cd` 分别核对源字节、真实控制台 `CHAR_INFO`、运输尾部与独立 `pyte==0.8.2` 布局;默认/候选常规两轮及窄屏完整 F 场景通过,原文分解形式保留,pyte 的 NFC 不冒充原文。完整默认 39/40、候选 41/42,#36 和候选早期输入/关闭仍未闭合;#30 的完整 Unicode/IME、真实 DPI、呈现和 WindTerm 等价均未验收 |
| R2 复杂标量序列输入(#30 限定切片) | [真实键盘接收验证](../experiments/shell/results/2026-10-26-unicode-keyboard/validation.json)、[场景与复现](../experiments/shell/README.md) | `fe02400` 的固定 ZWJ/keycap 样本经 WM_CHAR、ConPTY 与真实 `ReadConsoleW` 接收端逐字节一致,默认/候选各两轮。只验收输入保真,不证明字素绘制、选择、完整 IME、应用键盘模式或 WindTerm 等价 |
| R2 原文保留与 glyph 适配(#30 限定切片) | [真实控制台与绘制验证](../experiments/shell/results/2026-10-26-unicode-renderer/validation.json)、[字体/显示合同](milestones/R2-font-display.md) | `18c36ce` 区分源字节、原生控制台、transport、候选单元格与实际 DWrite glyph;过宽文字在原网格内缩小字号,32 组绘制回归和候选两轮原文/glyph 场景通过。完整 ZWJ/keycap 聚类与宽度由开放的 [#39](https://github.com/JavaZeroo/termforge/issues/39) 阻塞;没有完整 Unicode/IME、实际呈现或 WindTerm 等价结论 |
| R2 流式字素与固定 emoji(#39) | [合同](research/streaming-graphemes.md)、[红/绿及实际场景验证](../experiments/shell/results/2026-10-26-streaming-graphemes/validation.json) | 候选 Unicode 17 分段/宽度、766 个规范边界、64 标量无损分片和单列 resize;固定 ZWJ/keycap whole/byte、实际 ConPTY 80×24→100×30、原子选择与单 glyph 验证。WindTerm 运行时未知;不声明完整 IME、所有脚本/字体、真实跨屏或性能等价 |
| 扩展核心能力轨迹 | [能力矩阵说明](../experiments/differential/README.md#扩展能力轨迹25)、[2026-10-25 摘要](../experiments/differential/results/2026-10-25-capabilities-v2/summary.json) | 备用屏/滚动区/查询各 5 次为自研明确未支持,Recovery 5 次与候选一致;resize 5 次为 `resize_difference`,双方实际 2×6,候选重排与自研物理裁剪不同。语义接受未覆盖 |
| 真实应用核心轨迹 | [真实应用说明](../experiments/differential/README.md#真实应用核心轨迹25)、[2026-10-25 摘要](../experiments/differential/results/2026-10-25-real-applications/summary.json) | Windows cmd、more.com、Vim 真实 ConPTY 进入/操作/退出和文件结果已核验;分页器与 Vim 回放一致,shell 仅有已裁决 ED2 差异。`presented_done=null`,不是产品 GUI/TUI 验收 |
| Vim CI 捕获握手(#37) | [本地三应用摘要](../experiments/differential/results/2026-10-25-real-applications-v4/summary.json)、[握手与负例验证](../experiments/differential/results/2026-10-25-real-applications-v4/validation.json) | 以 `[New]`、`-- INSERT --` 和实际文本作为状态握手,再有序 Escape/`:wq`;保留实际编辑器路径及失败阶段、原始输出和 Job 回收。真实应用 Python 4 项与 differential CTest 通过;本地默认全套 38/39 唯一失败仍为 #36,远程 CI 未通过前 #37 保持开放 |
Expand Down
2 changes: 1 addition & 1 deletion docs/FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
| 统一文字动作 | **已验证(有限)**:共用目标/可用状态,实际终端右键/快捷键、原生 Find/rename 编辑、busy/closing/失效选区反馈及受控 DPI/zoom 保持;[最终系统审计](../experiments/shell/results/2026-10-24-r1-actions-accepted/validation.json)与[逐项对照](research/r1-action-comparison.md)覆盖 Find 实际 Ctrl+C/V、中文重选、默认 Return 和会话隔离 | 复杂 busy/closing 参考行为仍未知,采用明确项目策略;完整流程与八会话有限资源已由 #18 另验收,真实跨显示器及完整 WindTerm 等价未验收 | R1 |
| 中文 IME 与键盘 | **已验证(有限)**:基础按键/修饰键/UTF-16 与实际接收字节;[固定 ZWJ/keycap 输入样本](../experiments/shell/results/2026-10-26-unicode-keyboard/validation.json)在默认/候选各两轮精确接收;固定 Microsoft 拼音[五组产品场景](../research/ime/results/2026-10-24-product-ime-contexts/validation.json)覆盖两区域组合/提交/取消、真实候选、输出/resize/zoom/受控 DPI、隐藏/关闭,以及历史阅读、Find/rename 双 Escape 与回收 | 限定 Windows Server 2025 固定拼音及测试范围;同一八会话组合已由 #18 另验收,真实跨屏、所有输入法、复杂字素绘制/选择及应用模式归 R2/后续矩阵 | R1 / R2 |
| VT 核心 | **部分**:自研核心支持基础光标/擦除(含 ECH)、CR/LF/BS/TAB、有限 SGR、有界未知序列恢复;[ADR-0003](adr/0003-core-reference-and-reuse.md)已决定 R2 新能力复用候选 Term/Processor;`0.26.1-dev+termforge.3` [固定补丁](../experiments/candidates/alacritty/PROVENANCE.md)纳入上游资源修复、ED1/ED2、稳定行元数据和每缓冲区滚动区域,[共同轨迹](../experiments/differential/results/2026-10-26-candidate-common-v6/summary.json)为 95 次一致;[C++ 适配](../experiments/core/CANDIDATE.md)已在显式候选构建接入 ShellWindow,真实 Vim/resize/光标回复经 ConPTY 和有界 InputQueue 验证;备用屏切换、局部滚动和[公开源 margin 修复](../experiments/shell/results/2026-10-26-margin-state/validation.json)有独立验证 | 默认构建保留自研回退;完整 R1 候选回归与 #36/#38 未关闭;ECH 的候选 pending-wrap 差异见[限定合同](research/more-capture-ech.md),插删、完整模式和最终呈现仍未验收。#27 的 origin/wrap 和完整 resize 交叉未完成;#41 的真实 ConPTY 主屏 margin 恢复差异未解决,不能把模型切片当作产品 margin 通过;旧平台支持缺口不因路线决定消失 | R2 / R4 |
| Unicode 与文字显示 | **部分**:UTF-8、固定 Unicode 15.0 宽度策略、有限组合标记、16 色/粗体、Consolas 逐格绘制;实际 DWrite glyph run 已检查 Consolas、中文 fallback、固定 Segoe UI Emoji/Symbol 与缺字负例;[候选原文保留与 glyph 限定验证](../experiments/shell/results/2026-10-26-unicode-renderer/validation.json)覆盖真实 ConPTY 样本及超宽文字适配 | [#39](https://github.com/JavaZeroo/termforge/issues/39) 的完整 ZWJ/keycap 聚类与宽度合同、完整字素/整形、通用 fallback、真彩色/更多属性、Powerline;WindTerm 的 Unicode 13 声明与本项目策略差异需明确裁决 | R2 / R4 |
| Unicode 与文字显示 | **部分**:默认自研保留 Unicode 15;候选按[Unicode 17 流式字素合同](research/streaming-graphemes.md)实现固定 ZWJ/keycap 整格、光标、SGR/查询、原子选择复制、resize 与有界无损分片;真实 ConPTY/DWrite 核对固定样本的单 glyph、字体与网格,保留缺字/分裂负例 | 完整脚本/整形、通用 fallback、所有原生重放、真彩色/更多属性、Powerline;完整 IME/真实跨屏与 R2 父项仍独立验收,WindTerm 字素运行时和性能等价未知 | R2 / R4 |
| resize 与 reflow | **已验证(有限)**:默认回退按 ADR-0005 物理行裁剪;候选在固定 ConPTY 重放、逐字节及连续同步中保持唯一行身份、Find 和选区,按 ID 与完整行键合并有界历史,真实淘汰不恢复,显式清空不复活;[合同与验证](../experiments/core/results/2026-10-26-resize-replay/validation.json)。真实文字动作、八会话及 Vim 60×12 resize 有独立场景 | 仅已识别的 resize 事务;候选重排不同于默认裁剪,不等于完整 reflow、备用屏/滚动区全语义或 WindTerm 等价。缩窄默认不可恢复;真实 DPI、呈现、性能及 #36/#38 独立回归未闭合 | R2 |
| 本地 shell 选择 | **部分**:`ShellLaunch` 分离可执行文件、参数、工作目录及 shell 命令差异;cmd、Windows PowerShell 5.1、PowerShell 7、显式 Ubuntu WSL 各有[两轮真实启动/目录/尺寸/正常退出证据](../experiments/shell/results/2026-10-24-r2-shell-lifecycle/validation.json),无效程序启动错误可见且可关闭后恢复 cmd | 仅声明上述固定入口和隔离目录;任意 profile/参数、通用分屏/排序、全部运行时错误提示及管理员 shell 未完成 | R2;权限场景 R4 |
| 常用 TUI | **部分**:显式候选构建已有两轮真实 Vim 进入、编辑、resize、退出写盘、主屏恢复及光标回复,见[候选产品证据](../experiments/core/CANDIDATE.md);默认构建保留自研回退,`presented_done=null` | #28 的更多应用、完整输入/输出模式和最终产品验收未完成;headless 核心比较不替代真实场景,当前自有 DIB 不代表实际上屏 | R2 |
Expand Down
6 changes: 5 additions & 1 deletion docs/PROVENANCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,8 @@

- `experiments/core/unicode_width.hpp`:通过原创生成器从 Python 3.12.10 `unicodedata` 所带 Unicode 15.0.0 属性数据生成,含项目自己的宽度/拒绝策略。未复制 CPython 实现源码。Unicode 数据保留[官方许可](../experiments/core/UNICODE-LICENSE.txt)与归属,来源为 [Unicode](https://www.unicode.org/);正常构建使用固定生成文件。此数据不归项目 MIT 许可覆盖。

- 外部核心候选当前使用 `alacritty_terminal 0.26.1-dev+termforge.3`(Apache-2.0),固定上游 commit `542147067dd016fc5f49120ef0ba605a98a4e3a7` 的 manifest/changelog/许可证与 `src/`,并保留 ED、稳定行身份/淘汰、安全 swap 和每缓冲区滚动区域补丁;精确传递依赖及校验值由 `Cargo.lock` 固定。未复制上游 46 MiB 行为录制,候选不进入当前产品包;默认 CMake 不依赖 Rust,显式适配器构建使用 staticlib。原始 0.26.0 身份、当前来源、许可证和补丁清单见[候选来源台账](../experiments/candidates/alacritty/PROVENANCE.md)。
- 外部核心候选当前使用 `alacritty_terminal 0.26.1-dev+termforge.4`(Apache-2.0),固定上游 commit `542147067dd016fc5f49120ef0ba605a98a4e3a7` 的 manifest/changelog/许可证与 `src/`,并保留 ED、稳定行身份/淘汰、安全 swap、每缓冲区滚动区域和流式字素补丁;精确传递依赖及校验值由 `Cargo.lock` 固定。未复制上游 46 MiB 行为录制,候选不进入当前产品包;默认 CMake 不依赖 Rust,显式适配器构建使用 staticlib。原始 0.26.0 身份、当前来源、许可证和补丁清单见[候选来源台账](../experiments/candidates/alacritty/PROVENANCE.md)。

- 候选新增精确锁定 `unicode-segmentation 1.13.3`(Unicode 17,MIT OR Apache-2.0),官方来源为 [unicode-rs](https://github.com/unicode-rs/unicode-segmentation) 与 [crates.io 固定版本](https://crates.io/crates/unicode-segmentation/1.13.3)。保留原依赖许可证;与既有 `unicode-width 0.2.2` 同使用 Unicode 17,默认自研核心仍使用 Unicode 15。版本、包哈希、MSRV、依赖成本和修改边界见[候选来源台账](../experiments/candidates/alacritty/PROVENANCE.md)。

- 候选规范测试数据 `GraphemeBreakTest-17.0.0.txt` 从 [Unicode 17 官方数据](https://www.unicode.org/Public/17.0.0/ucd/auxiliary/GraphemeBreakTest.txt)原样取得(766 例、126570 字节,SHA-256 `e2d134d2c52919bace503ebb6a551c1855fe1a1faec18478c78fff254a1793ec`),随附[Unicode License V3](../experiments/candidates/alacritty/vendor/alacritty_terminal/tests/data/UNICODE-LICENSE.txt),不由项目 MIT 许可证覆盖。它验证分段 helper 的规范边界,不代表完整 Term/VT 状态正确性;原始执行字节身份与 Git blob 换行身份分列保存在[验证记录](../experiments/shell/results/2026-10-26-streaming-graphemes/validation.json)。
4 changes: 4 additions & 0 deletions docs/TRACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ R1已按[限定合同](milestones/R1-local-text.md)验收,[完整组合证据]
| Windows CI 回归 | [#40](https://github.com/JavaZeroo/termforge/issues/40) | 复核 `ime_inventory` 原 10 秒超时根因,保留 AST/最终进度与 OwnedJob 回收证据 | 无;作为 #38 的子项阻塞 #38,不能用本机或单次 CI 通过冒充修复 |
| ConPTY margin 差异 | [#41](https://github.com/JavaZeroo/termforge/issues/41) | 裁决宿主/传输的每缓冲区 margin,保留原场景和独立实现证据 | #26;作为 #27 的子项阻塞 #27,不能以模型切片或差异观察代替产品验收 |
| 显式官方 ConPTY 实验后端 | [#47](https://github.com/JavaZeroo/termforge/issues/47) | 固定同包 DLL/EXE 来源与身份,通过同一 Backend 验证实际 Session、GUI 和回收;不改变默认系统后端 | #41 的实现子项;仍需处理原生 API 与末端语义、resize、粘贴和完整工作流差异,不代表 #34 产品决定或 R2 出口 |
| 实验后端连续 resize | [#51](https://github.com/JavaZeroo/termforge/issues/51) | 定位 stage43 的残留 OW 与 Unicode 重放差异,保持精确末端及子进程尺寸合同 | #47 的子项与阻塞;独立诊断可进行,不以裁尾通过 |
| 实验后端 Vim | [#52](https://github.com/JavaZeroo/termforge/issues/52) | 定位最终 Console-width 下的 GUI stage59 与 native new-buffer 失败;早期 flags0 单独保留 | #47 的子项与阻塞;实际 resize、写盘、退出断言保留 |
| 实验后端粘贴取消 | [#53](https://github.com/JavaZeroo/termforge/issues/53) | 原 3MB/768 checkpoint/16KiB 门槛下建立 sender 栅栏,验证未完成期取消与关闭 | #47 的子项与阻塞;不能把提前 completed 当作 cancelled |
| 流式字素性能成本 | [#54](https://github.com/JavaZeroo/termforge/issues/54) | 以原 12 个诊断样本为起点冻结受控负载/端点/预算,定位 project/interactive 吞吐成本 | #34 的子项与阻塞;现有正确性不豁免性能,未建立 WindTerm 等价 |
| More 尾部 ECH 与捕获时序 | [#42](https://github.com/JavaZeroo/termforge/issues/42) | [限定合同](research/more-capture-ech.md):默认 ECH、完整 More 提示、q/退出/真实 EOF;候选 pending-wrap 差异保留给 #27 | 无;#38 的子项,与 margin 修复分开;完整原始输入和旧失败保留,不静默降级为 match |
| controller 正常退出观测缺口 | [#44](https://github.com/JavaZeroo/termforge/issues/44) | 记录 wait_exit 与 close 前 cmd 状态,定位真实 child→cmd/close 转换 | 无;#38 的子项与出口阻塞;后续同合同重跑成功不覆盖原失败 |
| 候选 GUI 合法空标题 | [#45](https://github.com/JavaZeroo/termforge/issues/45) | 修正空 UTF-8 转换,使用真实 console 标题事件验证 GUI 存活,并保留非法非空输入拒绝 | 无;#38 的子项;新最小复现与旧 normal-1 未定位异常分列 |
Expand Down
2 changes: 1 addition & 1 deletion docs/milestones/R2-font-display.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

- 工作区 UI 使用独立获取的 Roboto Mono Regular,9pt,SIL OFL 1.1;固定上游提交、原始字节和 SHA-256 见[字体来源](../../assets/fonts/README.md)。通过 `AddFontResourceExW(..., FR_PRIVATE, ...)` 仅对进程加载,缺失、注册失败或实际 `GetTextFaceW` 不是 Roboto Mono 时明确失败,不静默替换。`renderer_metrics` 独立复核实际 GDI face、em 高度与 `TEXTMETRIC.tmHeight`;96/120/144/192 DPI 的 em 为 12/15/18/24,行高为 16/20/24/32,不能把二者混为“字符高度”。
- 终端绘制当前使用系统 Consolas,DirectWrite `CreateTextFormat` 与 GDI `CreateFontW` 是独立路径。系统字体不分发;Microsoft 系统字体可用性、实际 fallback 和缺字必须由实际绘制路径证明。
- DirectWrite `GlyphAudit` 读取实际被绘制的 `IDWriteTextLayout`,记录 glyph run 的字体身份、glyph 数和 glyph index 0。控件字体、请求的 family 和最终 glyph 字体不能混为一谈。
- DirectWrite `GlyphAudit` 读取实际被绘制的 `IDWriteTextLayout`,记录 glyph run 的字体身份、glyph 数和 glyph index 0。控件字体、请求的 family 和最终 glyph 字体不能混为一谈。固定 ZWJ/合格 keycap 按[流式字素合同](../research/streaming-graphemes.md)另要求整段为 1 个 Segoe UI Emoji glyph;keycap 整段指定该系统字体,避免数字与方框被两个不同 fallback 字体拆开。
- 不复制 WindTerm 字体、Nerd Font 或主题资源。新增可携带字体或 fallback 资产必须另行审核许可。

## 固定网格设计决定
Expand Down
Loading
Loading