Repository navigation
Description
当前正式路线(2026-10-28)
用户已确认自主 C++ 终端核心+当前 Qt Widgets GUI+随包固定微软 ConPTY,依据见 ADR-0008。第一批整合由 #115 / PR #116承接。
本项限定完成的流式字素实现与证据属于 Alacritty 候选,保持关闭及原来源。正式核心改为自主 C++,其相应字素能力须由 #30 等责任项独立实现和验证,不将本项关闭解释成新核心通过。
以下原合同与固定检查点保留各自来源;路线确认不替代实现、完整R2或性能验收。
当前方向与确认边界(2026-10-26)
固定首批字素实现、依赖来源和回归结果保留。Alacritty 是候选;下文沿用 #26 当时路线的描述仅为历史实现背景。规范正确性不代表 WindTerm 运行时一致;原版行为优先,#30 接续取证与重要差异确认,#54 接续性能提案。
依据:已确认方向与决策权限。下文保留当时的限定范围与证据,原关闭状态不变;历史决定不作为当前用户确认。
用户结果
在固定的复杂 emoji/字素场景中,原始标量、字素聚类、单元格宽度、光标、选择和实际 glyph 符合明确合同,并在分块输入、resize 与退出恢复中保持一致。
已观察事实(不是验收结论)
- 当前候选在真实 ConPTY 场景中将
👩💻投影为👩与💻两个宽单元格;1️⃣保留在一个单元格,宽度为 1。完整聚类与宽度合同尚未成立,不能把原文保留或 glyph 无缺字当作完成。 - 固定源和 transport 保留原始标量。本机 Windows 11 26200 的原生子控制台将非 BMP 标量映射为 leading/trailing 两个 U+FFFD;不启动 TermForge 窗口的原始 ConPTY 探针得到相同源文件、控制台文本和 CHAR_INFO 哈希。这是限定平台的原生投影,不是候选或 WindTerm 等价证据。
- 当前固定候选只有 unicode-width 0.2.2,没有 unicode-segmentation。现有 Term::input 按 scalar 处理宽度,zerowidth 追加不能替代流式字素分段。不得通过简单拼接 Cell 文本、隐藏失败或静默新增依赖来制造通过。
- 固定 WindTerm 2.7.0 的只读 Ghidra 结果显示 0x1405fab20 在 Mark/肤色路径测量整个 QString,其他路径逐 scalar 累加;0x1405faef0 也有整段测量入口。现有导出没有证明调用方聚类、advance 到 cell 的转换或实际 ZWJ/keycap 宽度,target_executed=false。
待决定与实现
- 用规范、独立参考与必要的定向二进制证据冻结首批 ZWJ/keycap 聚类、宽度、光标和选择合同;静态事实不冒充运行时行为。
- 选择可维护的流式分段方案,审核依赖版本/许可/锁文件和性能。覆盖 UTF-8/CSI 分块、样式变化、查询回复、换行、历史、resize 与取消边界,遵守 [R2-03][核心] 测量候选成本并重审 ADR-0003 #26 已选候选路线,不扩展默认自研核心。
- 保留原始标量,验证真实 ConPTY、独立模型、候选单元格、实际 glyph/fallback 和选择复制;保留本机原生替换投影与 TermForge 文本的区别。
验收
- 首批合同有独立依据,未知 WindTerm 行为明确保留。
- 固定 ZWJ/keycap 的 whole/分块/resize/选择/glyph 真实回归通过,非法宽度、缺字、丢标量和错误完成边界被拒绝。
- R1 回归、FEATURES/EVIDENCE 与父 issue 同步;本次仅首批流式字素合同结项,不将父项或 R2 一起结项。
父项:#30。真实前置:#26 已完成;本项阻塞 #30 的完整字素验收,#35/R2 不得因此关闭。
实现候选与待核对出口
PR #49 已提供有界流式分段、完整原文/宽度/复制、真实DWrite emoji和单列resize修复;独立Standards/Spec复核通过,三条发现的边界反例已修。来源、依赖/许可、raw与Gitblob身份及实际正反见PR中的合同与proof。原始whole/逐字节4条失败均保留,新实现4条通过。
第一次候选CI因新增顶层grapheme_overflows:0改变完整状态哈希而失败,屏幕/历史/光标/样式逐字段相等。d8ac67c为固定1000行构造独立完整状态并验证旧/新digest迁移,不排除字段、不放松wrong-digest拒绝;原红保留。最终本地候选47/47 CTest通过(7个既有内部skip明确保留);最终默认Windows/Ubuntu完整CI和候选CI均通过。PR #49已合并。
性能成本与正式预算单独由 #54 阻塞 #34;本项的正确性不能豁免。#30及完整R2继续OPEN,WindTerm字素运行时行为仍未知。
本项按首批ZWJ/keycap、分块/样式/查询、宽度、历史/resize、原文复制与实际glyph合同结项。完整IME同次组合、真实系统输入/不同DPI与开发包出口继续由 #30/#31/#35承担;本项不豁免 #54 的性能成本,不声明完整 Unicode 或 WindTerm 等价。
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Activity
JavaZeroo commentedon Oct 25, 2026
当前证据明确保留了本项缺口,未将其关闭:
👩与💻两个 Cell,keycap 为一格;这些不是已裁决的目标宽度或聚类合同。证据已推送至
c73871e:experiments/shell/results/2026-10-26-unicode-renderer/validation.json。#39 与 #30 均保持 OPEN,完整流式字素、宽度、光标和选择验收仍需完成。