You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
即初看进入备用屏没有把光标归零,与我们核心当前断言(alternate_mode_test.cpp:25–27:1049 entry did not home the cursor with default writing colours)不一致;同一条断言里的"重置为默认颜色"也在上一组实验中被观察否定。
仍需隔离的点:该行带 x 范围偏宽(262–681),疑似混入 cmd 提示符或上一帧内容;要得到干净的"列位置"结论,需要在进入前清屏并禁用提示符(或改用无提示符的受控子进程)。
Activity
Merge pull request #127 from JavaZeroo/research/windterm-1049-styles
JavaZeroo commentedon Oct 28, 2026
#146 的独立 SGR1 调查 / Draft PR149已发布待最终审查,尚未合入main。实际源a115bc8的一次执行取得5阶段/5grab、28对H/space/8064 QRgb;所有同帧SGR0/SGR1完整有序签名不可分,entry/repeat/return唯一分类均null。不能推出SGR1被忽略、bold不支持或1049保存/重置了内部style;字重、实际glyph/font/fallback及profile偏好有效性保持unknown。
普通/-O出口逐字节同;独立stdlib复核全部4047源/副本、13源、模板/注入、输入/DSR/NAWS、像素签名与回收,记录Job0/3/0。旧颜色输出证据与本次非颜色问题分别保留,未补抓/改ROI/重跑,未更改C++策略。当前父项及完整#123/#126/#27、实际呈现/性能/R2门槛均不因这次有界采集通过。
JavaZeroo commentedon Oct 29, 2026
补充一组决定性的 1049 属性语义观察(合成会话 + 原生 SGR 块 + 屏幕捕获)。
协议:主屏设
SGR 31;44画色块 →1049h→ 备用屏内设SGR 32;45画色块 →1049l→ 回主屏不再设 SGR直接画色块;每阶段文件触发同步、截图取终端矩形逐行取色。结果:
结合另一组"进入前设 31;44 并保持"的观察(主屏/备用屏/退出后三阶段都是 #3465A4/#C4265E),可以得到一致模型:
1049h进入时保存当前属性,备用屏内可以任意改 SGR(A1 生效);1049l退出时恢复进入时刻保存的属性——本组进入时是默认(M1 前被脚本 reset),所以 M2 回到默认;另一组进入时是 31;44,所以退出后仍是 31;44。也就是说:备用屏内的 SGR 变更不会泄漏回主屏;主屏样式由进入时的保存值决定。
新增调色板值:45 品红 #8C6BC8、32 绿 #86B42B(与 42 背景绿相同条目)。
归因边界:这是 conhost + ConPTY + WindTerm 整条管线的可观察渲染,无法判定是哪一层执行了保存/恢复;与 #126 要求的应用内 QPainter/QImage 采集不同。本观察不改变产品代码,也不关闭 #123/#126/#27。
research(ui): add the alternate-screen attribute save/restore observa…
Merge pull request #183 from JavaZeroo/research/1049-sgr-carry
JavaZeroo commentedon Oct 29, 2026
补上第三组反向用例,把"进入保存 / 退出恢复"做成三组交叉验证:
32;45#1C1C1C/#E3E3DD31;4431;44→#3465A4/#C4265E32;4532;45→#8C6BC8/#86B42B第 3 组三阶段像素:进入前
#8C6BC8/#86B42B→ 备用屏 reset 后#1C1C1C/#E3E3DD→ 退出后回到#8C6BC8/#86B42B。三组一致:
1049h保存进入时刻的属性,1049l恢复它;备用屏内的任何 SGR 变更(设置或 reset)都不影响主屏退出后的样式。边界:conhost + ConPTY + WindTerm 整条管线的可观察渲染,不判定哪一层执行保存/恢复;与 #126 要求的应用内 QPainter/QImage 采集不同。结果已随 PR #184 进入仓库(
research/ui/results/2026-10-29-session-1049-palette/)。JavaZeroo commentedon Oct 29, 2026
发现一处自研核心与原版可观察行为的差异(需要你确认方向)
观察到的原版行为(本轮三组实验)
31;44(进入前设置)31;4432;45(进入前设置)32;45关键点:原版进入备用屏时保留当前属性(组 2 备用屏帧仍是蓝底红字),退出时恢复进入时刻的属性。
自研核心当前实现
experiments/core/alternate_mode_test.cpp的既有断言是:1049 entry did not home the cursor with default writing colours—— 进入时归零光标并把颜色重置为默认;1049 exit did not restore primary writing colours—— 退出时恢复主屏保存的颜色(这部分与观察一致)。也就是说:退出恢复两边一致;进入是否重置颜色两边不一致(核心重置、原版观察为保留)。
需要你确认
按 ADR-0006,"默认以原版实际行为为准,重要差异需用户确认"。这条差异该怎么处理?
alternate_mode_test.cpp与 ADR 记录;在收到确认前我不改动产品代码与既有测试;本轮只把证据与差异写在这里(对应结果已在 PR #184 的
research/ui/results/2026-10-29-session-1049-palette/)。Merge pull request #184 from JavaZeroo/research/1049-attr-confirm
JavaZeroo commentedon Oct 29, 2026
补充实验(初步,需进一步隔离):进入 1049 时原版是否保留光标位置。
协议:主屏清屏后写一个
M,把光标移到第 9 行第 10 列(CSI 9;10H)→ 等触发 →1049h→ 输出 25 个#→ 截图 →1049l→ 输出 25 个@→ 截图。结果(终端矩形内按行统计亮像素):
M与光标);#出现在 y≈345–352,按行高 18px 折算约第 8 行(0 基),与进入前的第 9 行(1 基)/第 10 列一致;@出现在同一行带。即初看进入备用屏没有把光标归零,与我们核心当前断言(
alternate_mode_test.cpp:25–27:1049 entry did not home the cursor with default writing colours)不一致;同一条断言里的"重置为默认颜色"也在上一组实验中被观察否定。仍需隔离的点:该行带 x 范围偏宽(262–681),疑似混入 cmd 提示符或上一帧内容;要得到干净的"列位置"结论,需要在进入前清屏并禁用提示符(或改用无提示符的受控子进程)。
方向仍是待你确认的三选一(见上一条评论):
在确认前不改产品代码。
JavaZeroo commentedon Oct 29, 2026
干净版光标实验(用色块定位,不再依赖 OCR)
协议:主屏先画 10 行参考网格(每行 40 个同一字母),把光标移到第 9 行第 10 列(
CSI 9;10H)→ 触发 →1049h后输出 5 个红色背景空格(SGR41)→ 截图 →1049l后输出 5 个绿色背景空格(SGR42)→ 截图。用精确调色板颜色(红 #C4265E / 绿 #86B42B,容差 ±14)定位色块。结果:
行位置换算:(340 − 196) / 18 ≈ 第 8 行(0 基),与进入前设置的"第 9 行(1 基)"一致。
结论:
与核心现状对比:
alternate_mode_test.cpp:25–27断言"entry homes the cursor with default writing colours"——光标归零这一条也被观察否定(颜色重置已在上一组被否定);34–35的"退出恢复"与观察一致。列位置仍有不确定性:色块 x=474 换算出的列号与设定的第 10 列不一致,可能是参考网格在 42 列终端里发生了换行/滚动;行结论不受影响。
这仍是 C 路线(补实验)的产物,不改产品代码;A/B/C 三选一仍等你的确认。
Merge pull request #185 from JavaZeroo/research/1049-semantics
JavaZeroo commentedon Oct 29, 2026
现状对照(本项验收清单 vs 已有证据)
true/false列)结论
本项不能按现证据关闭:颜色与活动缓冲区语义已覆盖,但验收明文要求"独立绑定合成标记、viewport 绘制设备及 QPainter 颜色"以及非颜色属性;后者在像素签名层面已被证明不可区分(#146),必须换观测手段。
建议下一步(仍属本项范围,不需要用户决策)
QPainter::drawText命中点读取QPen/QFont` 的固定字段(颜色、粗细、下划线),而不是从像素反推;本评论只更新证据对照,不改任何验收口径。
JavaZeroo commentedon Oct 29, 2026
非颜色属性的屏幕捕获对照(有对照组)
为判断"非颜色属性是否可观测",在隔离 VM 的原版 2.7.0 里用原生程序输出 8 行:两行 SGR0、一行 SGR1(bold)、一行 SGR4(underline),大写
H与小写m各一组;截图后按 18px 行带做逐像素亮掩码比较。结论
边界
这为 #123 的非颜色项提供了新证据:underline 可观测,bold 需改用绘制状态读取(QPen/QFont)才能定论。
JavaZeroo commentedon Oct 29, 2026
修正上一轮结论:underline 也没有渲染,之前测到的是光标
上一轮"underline 小写组差异 49 明显高于基线"的结论不成立。用行级探测复核后:
H的 SGR4 行带结束于 y=265,之后 y=266..270 亮像素为 0(若绘制下划线,应有约 20 字符宽的连续亮线,即上百个亮像素);m的 SGR4 行带之后 y=338..339 为 0,y=340..357 每行只有 8–19 个亮像素、高度 18px —— 这是块状光标,不是下划线;修正后的结论
在本配置(原版 2.7.0、默认主题/字体、96 DPI、合成会话)下:
这不等于原版"不支持"bold/underline——只能说明渲染结果相同,无法据此判断属性是否被应用。
对 #123 的意义
非颜色属性必须改用绘制状态读取(在
QPainter::drawText命中点读 QPen/QFont 字段)才能定论;像素路径已被两次独立实验证明不可区分。JavaZeroo commentedon Oct 29, 2026
结项:能观测的已记录,不可观测的按合同记为 null/unknown
本项是"补齐原版 1049 样式与活动缓冲区观察"的调查项。逐条对照验收:
结论
边界
据此关闭 #123。